feat: 更新网站页面和组件,新增多个页面(关于、专家、会员、政策等)

This commit is contained in:
2026-03-10 16:43:52 +08:00
parent 2c80df8b07
commit 54775dd745
56 changed files with 1520 additions and 503 deletions

20
app/pages/about/index.vue Normal file
View File

@@ -0,0 +1,20 @@
<template>
<SectionStub
title="关于我们"
description="介绍机构定位、组织架构与人员队伍建设,展示平台治理与服务体系。"
:links="links"
/>
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '关于我们', description: '关于我们栏目入口。', path: '/about' })
const links = [
{ label: '组织机构', to: '/about/org' },
{ label: '机构人员', to: '/about/staff' },
{ label: '联系我们', to: '/contact' }
]
</script>

10
app/pages/about/org.vue Normal file
View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="组织机构" description="展示机构职能分工与工作机制,明确对外服务窗口与责任部门。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '组织机构', description: '关于我们 - 组织机构。', path: '/about/org' })
</script>

10
app/pages/about/staff.vue Normal file
View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="机构人员" description="展示人员队伍与研究方向,支持按领域查看与对接。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '机构人员', description: '关于我们 - 机构人员。', path: '/about/staff' })
</script>

View File

@@ -0,0 +1,20 @@
<template>
<SectionStub
title="咨询服务"
description="围绕决策需求提供咨询服务与研究支撑,覆盖需求对接、成果交付与持续跟踪。"
:links="links"
/>
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '咨询服务', description: '咨询服务栏目入口。', path: '/consulting' })
const links = [
{ label: '服务简介', to: '/consulting/intro' },
{ label: '研究成果', to: '/consulting/results' },
{ label: '联系', to: '/contact' }
]
</script>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="服务简介" description="介绍服务范围、交付形式与协作机制,支持在线咨询与需求提交。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '服务简介', description: '咨询服务 - 服务简介。', path: '/consulting/intro' })
</script>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="咨询成果" description="展示决策咨询成果与典型案例(可按权限分级展示)。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '咨询成果', description: '咨询服务 - 研究成果。', path: '/consulting/results' })
</script>

10
app/pages/disclaimer.vue Normal file
View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="免责声明" description="本页面用于发布免责声明与内容使用说明。" :show-result="false" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '免责声明', description: '免责声明。', path: '/disclaimer' })
</script>

22
app/pages/downloads.vue Normal file
View File

@@ -0,0 +1,22 @@
<template>
<SectionStub
title="资料下载"
description="提供申报模板、政策文件、数据手册与成果简报等工具服务(可按权限分级开放)。"
:links="links"
/>
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '资料下载', description: '资料下载与模板入口。', path: '/downloads' })
const links = [
{ label: '申报模板', to: '/downloads?type=templates', desc: '会员/专家申请书等' },
{ label: '政策文件', to: '/downloads?type=policies' },
{ label: '数据手册', to: '/downloads?type=data' },
{ label: '成果简报', to: '/downloads?type=briefs' }
]
</script>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="专家申请" description="在线提交专家入库申请并上传材料,进入审核与归档流程。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '专家申请', description: '专家智库平台 - 专家申请。', path: '/experts/apply' })
</script>

10
app/pages/experts/db.vue Normal file
View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="智库专家库" description="按学科领域与研究方向检索专家,支持匹配推荐与联系对接。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '智库专家库', description: '专家智库平台 - 智库专家库。', path: '/experts/db' })
</script>

View File

@@ -0,0 +1,21 @@
<template>
<SectionStub
title="专家智库平台"
description="建设多学科专家库,支持分类检索、专家匹配与成果展示。"
:links="links"
/>
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '专家智库平台', description: '专家智库平台入口。', path: '/experts' })
const links = [
{ label: '智库专家库', to: '/experts/db', desc: '分类检索与专家匹配' },
{ label: '专家风采', to: '/experts/style', desc: '访谈、观点集锦与成果展示' },
{ label: '专家申请', to: '/experts/apply' },
{ label: '资料下载', to: '/downloads' }
]
</script>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="专家风采" description="展示专家访谈、观点集锦与代表性研究成果。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '专家风采', description: '专家智库平台 - 专家风采。', path: '/experts/style' })
</script>

View File

@@ -1,370 +1,339 @@
<template>
<main class="portal-home">
<header class="site-header">
<div class="mx-auto max-w-screen-xl px-4">
<div class="site-brand-wrap">
<div class="site-badge">政务</div>
<div>
<h1 class="site-title">广西决策咨询网</h1>
<p class="site-subtitle">权威发布 · 决策支持 · 服务发展</p>
</div>
</div>
<div class="home py-8">
<section aria-label="焦点要闻">
<Carousel :items="heroSlides" height="clamp(260px, 42vw, 480px)" effect="fade" />
</section>
<nav class="top-nav" aria-label="主导航">
<NuxtLink
v-for="item in navItems"
:key="item.label"
:to="item.to"
class="nav-item"
>
{{ item.label }}
</NuxtLink>
</nav>
</div>
</header>
<section class="mt-8">
<div class="grid grid-cols-12 gap-6">
<a-card class="col-span-12 lg:col-span-4" :bordered="false">
<template #title>
<div class="section-title">政策要闻</div>
</template>
<ul class="list">
<li v-for="it in policyNews" :key="it.title">
<NuxtLink :to="it.to">{{ it.title }}</NuxtLink>
<span class="date">{{ it.date }}</span>
</li>
</ul>
<NuxtLink class="more" to="/policy/latest">查看更多</NuxtLink>
</a-card>
<section class="hero-panel">
<div class="mx-auto max-w-screen-xl px-4 py-8">
<p class="hero-eyebrow">政府门户 · 官方导向</p>
<h2 class="hero-title">聚焦广西决策咨询服务建设高水平智库平台</h2>
<p class="hero-desc">
围绕政策解读课题研究战略合作与会员服务提供规范及时可追溯的政务信息发布与决策支持
</p>
<a-card class="col-span-12 lg:col-span-4" :bordered="false">
<template #title>
<div class="section-title">智库动态</div>
</template>
<ul class="list">
<li v-for="it in thinktankNews" :key="it.title">
<NuxtLink :to="it.to">{{ it.title }}</NuxtLink>
<span class="date">{{ it.date }}</span>
</li>
</ul>
<NuxtLink class="more" to="/thinktank">查看更多</NuxtLink>
</a-card>
<a-card class="col-span-12 lg:col-span-4" :bordered="false">
<template #title>
<div class="section-title">会员风采</div>
</template>
<ul class="list">
<li v-for="it in memberSpotlight" :key="it.title">
<NuxtLink :to="it.to">{{ it.title }}</NuxtLink>
<span class="date">{{ it.date }}</span>
</li>
</ul>
<NuxtLink class="more" to="/member">查看更多</NuxtLink>
</a-card>
</div>
</section>
<section class="mx-auto max-w-screen-xl px-4 py-8">
<div class="content-grid">
<article class="module-card">
<h3 class="module-title">政策文件</h3>
<ul class="module-list">
<li v-for="item in policyDocs" :key="item">{{ item }}</li>
</ul>
</article>
<article class="module-card">
<h3 class="module-title">重要通知</h3>
<ul class="module-list">
<li v-for="item in notices" :key="item">{{ item }}</li>
</ul>
</article>
<article class="module-card">
<h3 class="module-title">领导讲话</h3>
<ul class="module-list">
<li v-for="item in speeches" :key="item">{{ item }}</li>
</ul>
</article>
</div>
<div class="feature-block">
<h3 class="feature-title">重点工作</h3>
<div class="feature-grid">
<div v-for="item in focusWorks" :key="item.title" class="feature-card">
<h4>{{ item.title }}</h4>
<p>{{ item.desc }}</p>
</div>
</div>
<section class="mt-6 hidden lg:block" aria-label="会员单位展示位">
<div class="ad-slot">
会员单位展示位广告- 预留横幅
</div>
</section>
<footer class="site-footer">
<div class="mx-auto max-w-screen-xl px-4 py-6">
<h3 class="friend-title">友情链接</h3>
<div class="friend-links">
<a v-for="item in friendLinks" :key="item.name" :href="item.url" target="_blank" rel="noreferrer">
{{ item.name }}
</a>
</div>
<p class="copyright">© 广西决策咨询网 | 政务信息仅供公开发布与查询使用</p>
<section class="mt-8" aria-label="决策咨询">
<a-card :bordered="false">
<template #title>
<div class="section-title">决策咨询</div>
</template>
<a-tabs v-model:active-key="consultingTab" animated>
<a-tab-pane key="reports" tab="研究报告">
<ul class="list list--dense">
<li v-for="it in reports" :key="it.title">
<NuxtLink :to="it.to">{{ it.title }}</NuxtLink>
<span class="meta">
<a-tag v-if="it.status" color="blue">{{ it.status }}</a-tag>
<span class="date">{{ it.date }}</span>
</span>
</li>
</ul>
</a-tab-pane>
<a-tab-pane key="briefs" tab="咨政专报">
<ul class="list list--dense">
<li v-for="it in briefs" :key="it.title">
<NuxtLink :to="it.to">{{ it.title }}</NuxtLink>
<span class="meta">
<span class="date">{{ it.date }}</span>
</span>
</li>
</ul>
</a-tab-pane>
<a-tab-pane key="collections" tab="其他汇编">
<ul class="list list--dense">
<li v-for="it in collections" :key="it.title">
<NuxtLink :to="it.to">{{ it.title }}</NuxtLink>
<span class="meta">
<span class="date">{{ it.date }}</span>
</span>
</li>
</ul>
</a-tab-pane>
<a-tab-pane key="instructions" tab="领导批示">
<ul class="list list--dense">
<li v-for="it in instructions" :key="it.title">
<NuxtLink :to="it.to">{{ it.title }}</NuxtLink>
<span class="meta">
<a-tag v-if="it.status" color="green">{{ it.status }}</a-tag>
<span class="date">{{ it.date }}</span>
</span>
</li>
</ul>
</a-tab-pane>
</a-tabs>
</a-card>
</section>
<section class="mt-8" aria-label="快捷入口">
<div class="grid grid-cols-12 gap-6">
<a-card class="col-span-12 lg:col-span-4" :bordered="false">
<template #title><div class="section-title">决策参考</div></template>
<div class="quick-desc">政策文件数据服务研究成果与专家视点等支撑信息</div>
<div class="mt-4 flex flex-wrap gap-2">
<a-button type="primary" @click="navigateTo('/reference/data')">数据服务</a-button>
<a-button @click="navigateTo('/reference/docs')">政策文件</a-button>
<a-button @click="navigateTo('/reference/results')">研究成果</a-button>
</div>
</a-card>
<a-card class="col-span-12 lg:col-span-4" :bordered="false">
<template #title><div class="section-title">建言献策</div></template>
<div class="quick-desc">面向公众与会员征集意见建议支持在线提交与反馈</div>
<div class="mt-4 flex flex-wrap gap-2">
<a-button type="primary" @click="navigateTo('/suggest')">提交建议</a-button>
<a-button @click="navigateTo('/sitemap')">站点地图</a-button>
</div>
</a-card>
<a-card class="col-span-12 lg:col-span-4" :bordered="false">
<template #title><div class="section-title">咨询服务</div></template>
<div class="quick-desc">需求对接专题研究政策解读与成果交付支持分级权限管理</div>
<div class="mt-4 flex flex-wrap gap-2">
<a-button type="primary" @click="navigateTo('/consulting/intro')">了解服务</a-button>
<a-button @click="navigateTo('/contact')">联系咨询</a-button>
</div>
</a-card>
</div>
</footer>
</main>
</section>
<section class="mt-8" aria-label="专家智库平台">
<a-card :bordered="false">
<template #title><div class="section-title">专家智库平台</div></template>
<div class="grid grid-cols-12 gap-6 items-start">
<div class="col-span-12 lg:col-span-8">
<div class="quick-desc">
覆盖多学科领域的专家库支持分类检索专家匹配与成果展示
</div>
<div class="mt-4 flex flex-wrap gap-2">
<a-button type="primary" @click="navigateTo('/experts/db')">进入专家库</a-button>
<a-button @click="navigateTo('/experts/style')">专家风采</a-button>
<a-button @click="navigateTo('/experts/apply')">专家申请</a-button>
</div>
</div>
<div class="col-span-12 lg:col-span-4">
<a-alert
show-icon
type="info"
message="提示"
description="专家视点、成果下载等栏目可配置会员权限与分级开放。"
/>
</div>
</div>
</a-card>
</section>
</div>
</template>
<script setup lang="ts">
import { usePageSeo } from "@/composables/usePageSeo"
import Carousel from '@/components/Carousel.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({
title: "广西决策咨询网",
description: "广西决策咨询网门户首页,发布政策文件、重要通知、领导讲话与课题研究信息。",
path: "/"
title: '首页',
description: '广西决策咨询网门户首页,聚焦政策要闻、决策咨询、专家智库与咨询服务。',
path: '/'
})
const navItems = [
{ label: "网站首页", to: "/" },
{ label: "学会活动", to: "/article/activities" },
{ label: "决策资讯", to: "/article/news" },
{ label: "战略合作", to: "/article/coop" },
{ label: "会员服务", to: "/member" },
{ label: "课题研究", to: "/article/research" },
{ label: "学会党建", to: "/article/party" },
{ label: "关于我们", to: "/about" }
const heroSlides = [
{
src: '/hero/hero-1.svg',
href: '/reference/results',
alt: '智库要闻',
title: '智库要闻 · 重大成果发布',
desc: '聚焦党委政府重大课题、社科院及研究机构成果,提供权威发布与可追溯链接。',
ctaLabel: '查看详情'
},
{
src: '/hero/hero-2.svg',
href: '/consulting/intro',
alt: '决策咨询',
title: '决策咨询 · 精要报告与咨政专报',
desc: '围绕热点难点问题快速研判,标注批示/采纳状态,提升成果转化效率。',
ctaLabel: '了解服务'
},
{
src: '/hero/hero-3.svg',
href: '/experts/db',
alt: '专家智库',
title: '专家智库 · 分类检索与专家匹配',
desc: '覆盖多学科领域,支持按方向检索、匹配与协作对接,构建协同开放平台。',
ctaLabel: '进入专家库'
}
]
const policyDocs = [
"广西重点产业发展政策解读2026年",
"自治区决策咨询课题管理办法(修订)",
"关于加强高端智库成果转化的实施意见",
"政务信息公开与数据安全管理规范"
const consultingTab = ref<'reports' | 'briefs' | 'collections' | 'instructions'>('reports')
const policyNews = [
{ title: '关于申报 2026 年度重点课题的通知', date: '2026-03-01', to: '/policy/latest' },
{ title: '自治区决策咨询课题管理办法(修订)', date: '2026-02-18', to: '/policy/release' },
{ title: '政务信息公开与数据安全管理规范要点', date: '2026-02-06', to: '/policy/hotspots' },
{ title: '学术活动预告:专题研讨会(面向 RCEP', date: '2026-01-26', to: '/policy/events' }
]
const notices = [
"关于申报2026年度重点课题的通知",
"学会专家库入库审核结果公示",
"战略合作单位联络员培训安排",
"清明节假期值班与应急工作通知"
const thinktankNews = [
{ title: '交流合作:联合研究项目启动', date: '2026-03-03', to: '/thinktank/coop' },
{ title: '智库党建:制度建设与工作要点', date: '2026-02-21', to: '/thinktank/party' },
{ title: '政策解读:重点产业发展政策解读', date: '2026-02-10', to: '/reference/docs' },
{ title: '东盟研究:经贸数据与国际比较专题', date: '2026-01-30', to: '/reference/data' }
]
const speeches = [
"坚持问题导向,提升咨政建言质量",
"服务地方治理现代化的智库路径",
"打造开放协同的决策咨询共同体",
"推动研究成果向政策实践高效转化"
const memberSpotlight = [
{ title: '会员单位风采:成果转化典型案例', date: '2026-02-28', to: '/member' },
{ title: '会员服务:培训活动与资源对接计划', date: '2026-02-14', to: '/member/qualification' },
{ title: '资料下载:申报模板与数据手册更新', date: '2026-02-03', to: '/downloads' },
{ title: '会员申请:线上资料提交与审核说明', date: '2026-01-20', to: '/member/apply' }
]
const focusWorks = [
{ title: "课题研究", desc: "围绕重大现实问题开展专题研究,形成可落地的政策建议。" },
{ title: "战略合作", desc: "联动高校、研究机构与行业协会,构建协同创新平台。" },
{ title: "会员服务", desc: "提供成果交流、培训活动和资源对接等综合服务。" },
{ title: "学会党建", desc: "强化党建引领,推动业务发展与组织建设深度融合。" }
const reports = [
{ title: '重大课题研究报告(精要)', date: '2026-02-25', to: '/reference/results', status: '采纳' },
{ title: '专题调研报告:向海经济发展路径', date: '2026-02-11', to: '/reference/results', status: '批示' },
{ title: '政策评估报告:产业链协同效率提升', date: '2026-01-29', to: '/reference/results', status: '在研' }
]
const friendLinks = [
{ name: "广西壮族自治区人民政府", url: "https://www.gxzf.gov.cn" },
{ name: "中国社会科学院", url: "https://www.cass.cn" },
{ name: "国务院发展研究中心", url: "https://www.drc.gov.cn" },
{ name: "广西社科联", url: "http://www.gxskl.gov.cn" }
const briefs = [
{ title: '咨政专报:热点问题快速研判(第 3 期)', date: '2026-03-02', to: '/consulting/results' },
{ title: '咨政专报:重点领域风险提示(第 2 期)', date: '2026-02-16', to: '/consulting/results' },
{ title: '咨政专报:阶段性建议汇总(第 1 期)', date: '2026-01-31', to: '/consulting/results' }
]
const collections = [
{ title: '历年决策咨询成果合集(电子版)', date: '2026-02-08', to: '/downloads' },
{ title: '重大课题成果汇编(专题)', date: '2026-01-18', to: '/downloads' }
]
const instructions = [
{ title: '领导批示成果清单(可追溯链接)', date: '2026-02-20', to: '/consulting/results', status: '公开' },
{ title: '采纳情况统计与典型案例', date: '2026-01-27', to: '/consulting/results', status: '公开' }
]
</script>
<style scoped>
.portal-home {
min-height: 100vh;
background: #f8f8f8;
.home :deep(.ant-card) {
border: 1px solid var(--border-subtle);
border-radius: 14px;
box-shadow: 0 14px 28px rgba(15, 23, 42, 0.05);
}
.site-header {
position: sticky;
top: 0;
z-index: 50;
background: linear-gradient(180deg, #9f1313, #c31818);
border-bottom: 3px solid #f3d27a;
box-shadow: 0 8px 20px rgba(110, 10, 10, 0.25);
}
.site-brand-wrap {
display: flex;
align-items: center;
gap: 14px;
padding: 18px 0 14px;
}
.site-badge {
width: 54px;
height: 54px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
font-weight: 700;
color: #8b1111;
background: linear-gradient(180deg, #f8df9f, #e7bd5b);
}
.site-title {
margin: 0;
color: #fff;
font-size: 30px;
letter-spacing: 0.06em;
font-weight: 800;
}
.site-subtitle {
margin: 6px 0 0;
color: rgba(255, 255, 255, 0.88);
font-size: 13px;
}
.top-nav {
display: flex;
flex-wrap: wrap;
border-top: 1px solid rgba(255, 255, 255, 0.2);
}
.nav-item {
color: #fff3d7;
text-decoration: none;
font-size: 15px;
padding: 12px 18px;
border-bottom: 3px solid transparent;
transition: all 0.2s ease;
}
.nav-item:hover,
.nav-item.router-link-active {
color: #fff;
border-bottom-color: #f5d07a;
background: rgba(255, 255, 255, 0.08);
}
.hero-panel {
background:
linear-gradient(140deg, rgba(140, 12, 12, 0.9), rgba(173, 18, 18, 0.88)),
repeating-linear-gradient(45deg, transparent, transparent 18px, rgba(255, 255, 255, 0.03) 18px, rgba(255, 255, 255, 0.03) 36px);
color: #fff;
}
.hero-eyebrow {
margin: 0;
font-size: 12px;
letter-spacing: 0.16em;
text-transform: uppercase;
color: rgba(255, 233, 190, 0.95);
}
.hero-title {
margin: 12px 0;
font-size: 34px;
line-height: 1.35;
font-weight: 900;
}
.hero-desc {
margin: 0;
max-width: 780px;
color: rgba(255, 255, 255, 0.9);
line-height: 1.8;
}
.content-grid {
display: grid;
grid-template-columns: repeat(12, minmax(0, 1fr));
gap: 18px;
}
.module-card {
grid-column: span 12;
border: 1px solid #eed7d7;
border-radius: 10px;
background: #fff;
overflow: hidden;
}
@media (min-width: 1024px) {
.module-card {
grid-column: span 4;
}
}
.module-title {
margin: 0;
padding: 14px 16px;
font-size: 18px;
color: #941515;
background: linear-gradient(180deg, #fff6f6, #ffeaea);
border-bottom: 1px solid #efd5d5;
}
.module-list {
list-style: none;
padding: 10px 16px 16px;
margin: 0;
}
.module-list li {
padding: 10px 0;
border-bottom: 1px dashed #ecd1d1;
color: #2d2d2d;
line-height: 1.55;
}
.module-list li:last-child {
border-bottom: 0;
}
.feature-block {
margin-top: 24px;
border: 1px solid #efd4d4;
border-radius: 10px;
background: #fff;
}
.feature-title {
margin: 0;
padding: 14px 16px;
color: #941515;
.section-title {
font-size: 20px;
border-bottom: 1px solid #efd4d4;
background: linear-gradient(180deg, #fff9f9, #fff0f0);
font-weight: 800;
color: #0f172a;
letter-spacing: 0.01em;
}
.feature-grid {
.list {
list-style: none;
padding: 0;
margin: 0;
display: grid;
grid-template-columns: repeat(12, minmax(0, 1fr));
gap: 14px;
padding: 16px;
gap: 10px;
}
.feature-card {
grid-column: span 12;
background: #fffafa;
border: 1px solid #f2dede;
border-radius: 8px;
padding: 14px;
}
@media (min-width: 900px) {
.feature-card {
grid-column: span 6;
}
}
.feature-card h4 {
margin: 0;
color: #8f1313;
font-size: 16px;
}
.feature-card p {
margin: 8px 0 0;
line-height: 1.7;
color: #4b4b4b;
}
.site-footer {
margin-top: 20px;
background: #f0ecec;
border-top: 1px solid #dcc8c8;
}
.friend-title {
margin: 0;
font-size: 18px;
color: #6f6f6f;
}
.friend-links {
.list li {
display: flex;
flex-wrap: wrap;
gap: 10px 16px;
margin-top: 10px;
align-items: baseline;
justify-content: space-between;
gap: 14px;
padding-bottom: 10px;
border-bottom: 1px dashed rgba(0, 0, 0, 0.08);
}
.friend-links a {
color: #514a4a;
.list li:last-child {
border-bottom: 0;
padding-bottom: 0;
}
.list a {
color: #111827;
font-weight: 600;
text-decoration: none;
}
.friend-links a:hover {
color: #931414;
.list a:hover {
color: var(--gov-blue);
text-decoration: underline;
}
.copyright {
margin: 14px 0 0;
color: #7f7f7f;
.date {
flex: 0 0 auto;
font-size: 12px;
color: var(--text-tertiary);
}
.meta {
display: inline-flex;
align-items: center;
gap: 8px;
flex: 0 0 auto;
}
.list--dense li {
padding-bottom: 12px;
}
.more {
display: inline-flex;
margin-top: 12px;
font-weight: 700;
text-decoration: underline;
text-underline-offset: 4px;
}
.ad-slot {
border: 1px dashed rgba(30, 111, 181, 0.35);
background: rgba(30, 111, 181, 0.05);
border-radius: 14px;
padding: 14px 16px;
color: rgba(30, 111, 181, 0.95);
font-weight: 700;
text-align: center;
}
.quick-desc {
color: var(--text-secondary);
font-size: 14px;
line-height: 1.8;
}
</style>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="会员申请" description="在线填写申请信息并上传材料,提交后进入资格审核流程。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '会员申请', description: '会员服务 - 会员申请。', path: '/member/apply' })
</script>

View File

@@ -0,0 +1,21 @@
<template>
<SectionStub
title="会员服务"
description="提供会员资格说明、会员申请与资料下载等服务,支持在线审核与权限化内容访问。"
:links="links"
/>
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '会员服务', description: '会员服务栏目入口。', path: '/member' })
const links = [
{ label: '会员资格', to: '/member/qualification' },
{ label: '会员申请', to: '/member/apply', desc: '企业会员 / 个人会员在线申请与资料上传' },
{ label: '资料下载', to: '/downloads' }
]
</script>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="会员资格" description="说明会员权益、准入条件与服务范围,支持按类型分层服务。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '会员资格', description: '会员服务 - 会员资格。', path: '/member/qualification' })
</script>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="市县决策" description="汇聚市县治理与决策实践动态,沉淀可复制的经验做法。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '市县决策', description: '政策要闻 - 市县决策。', path: '/policy/cities' })
</script>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="学术活动" description="展示学术交流、研讨会议与专题培训等活动信息。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '学术活动', description: '政策要闻 - 学术活动。', path: '/policy/events' })
</script>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="研究热点" description="跟踪热点难点议题,发布阶段性研判与专题研究动态。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '研究热点', description: '政策要闻 - 研究热点。', path: '/policy/hotspots' })
</script>

View File

@@ -0,0 +1,23 @@
<template>
<SectionStub
title="政策要闻"
description="围绕政策资讯、研究热点与学术活动,提供权威、清晰、可追溯的信息发布。"
:links="links"
/>
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '政策要闻', description: '政策要闻栏目入口。', path: '/policy' })
const links = [
{ label: '最新资讯', to: '/policy/latest' },
{ label: '市县决策', to: '/policy/cities' },
{ label: '研究热点', to: '/policy/hotspots' },
{ label: '学术活动', to: '/policy/events' },
{ label: '政策发布', to: '/policy/release' }
]
</script>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="最新资讯" description="发布最新政策资讯与智库要闻,支持按时间与关键词检索。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '最新资讯', description: '政策要闻 - 最新资讯。', path: '/policy/latest' })
</script>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="政策发布" description="转载并归档中央、自治区重要政策文件、规划纲要与权威解读链接。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '政策发布', description: '政策要闻 - 政策发布。', path: '/policy/release' })
</script>

10
app/pages/privacy.vue Normal file
View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="隐私政策" description="本页面用于发布隐私政策与个人信息保护说明。" :show-result="false" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '隐私政策', description: '隐私政策。', path: '/privacy' })
</script>

View File

@@ -0,0 +1,20 @@
<template>
<SectionStub
title="数据服务"
description="提供宏观经济、东盟经贸、产业发展等数据入口(可按权限分级开放)。"
:links="links"
/>
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '数据服务', description: '决策参考 - 数据服务。', path: '/reference/data' })
const links = [
{ label: '广西宏观经济数据', to: '/reference/data?source=gx-macro' },
{ label: '东盟经贸数据', to: '/reference/data?source=asean-trade' },
{ label: '产业发展数据', to: '/reference/data?source=industry' }
]
</script>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="政策文件" description="集中展示重要政策文件、规划纲要与权威发布渠道。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '政策文件', description: '决策参考 - 政策文件。', path: '/reference/docs' })
</script>

View File

@@ -0,0 +1,22 @@
<template>
<SectionStub
title="决策参考"
description="面向决策需求,提供政策文件、数据服务、研究成果与专家视点等支撑信息。"
:links="links"
/>
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '决策参考', description: '决策参考栏目入口。', path: '/reference' })
const links = [
{ label: '政策文件', to: '/reference/docs' },
{ label: '数据服务', to: '/reference/data', desc: '链接宏观经济、东盟经贸、产业发展等信息库' },
{ label: '研究成果', to: '/reference/results' },
{ label: '专家视点', to: '/reference/opinions', desc: '部分内容可能需要会员权限' }
]
</script>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="专家视点" description="面向热点议题发布专家观点与解读(可配置会员访问控制)。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '专家视点', description: '决策参考 - 专家视点。', path: '/reference/opinions' })
</script>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="研究成果" description="汇聚党委政府重大课题、研究机构成果与专题调研报告。 " />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '研究成果', description: '决策参考 - 研究成果。', path: '/reference/results' })
</script>

41
app/pages/search.vue Normal file
View File

@@ -0,0 +1,41 @@
<template>
<section class="py-10">
<a-typography-title :level="1" class="!mb-2">站内搜索</a-typography-title>
<a-typography-paragraph class="!text-gray-600 !mb-6">
支持按栏目 / 时间 / 关键词筛选待接入全文检索与权限控制
</a-typography-paragraph>
<a-input-search
v-model:value="q"
placeholder="请输入关键词"
:allow-clear="true"
:maxlength="50"
enter-button="搜索"
@search="onSearch"
/>
<a-card class="mt-6" size="small">
<div class="text-sm text-gray-600">
当前关键词<span class="font-mono">{{ q || '-' }}</span>
</div>
</a-card>
<a-result class="mt-6" status="info" title="搜索结果建设中" sub-title="接入全文检索后将在此展示结构化结果列表" />
</section>
</template>
<script setup lang="ts">
import { usePageSeo } from '@/composables/usePageSeo'
const route = useRoute()
const q = ref(String(route.query.q || '').trim())
usePageSeo({ title: '站内搜索', description: '站内搜索与筛选入口。', path: '/search' })
function onSearch(value: string) {
const next = String(value || '').trim()
q.value = next
navigateTo({ path: '/search', query: next ? { q: next } : {} })
}
</script>

49
app/pages/sitemap.vue Normal file
View File

@@ -0,0 +1,49 @@
<template>
<section class="py-10">
<a-typography-title :level="1" class="!mb-2">站点地图</a-typography-title>
<a-typography-paragraph class="!text-gray-600 !mb-6">
便捷入口汇总支持快速定位栏目与服务
</a-typography-paragraph>
<a-card size="small">
<ul class="sitemap">
<li v-for="it in nav" :key="it.key">
<NuxtLink v-if="it.to" :to="it.to">{{ it.label }}</NuxtLink>
<span v-else>{{ it.label }}</span>
<ul v-if="it.children?.length">
<li v-for="c in it.children" :key="c.key">
<NuxtLink v-if="c.to" :to="c.to">{{ c.label }}</NuxtLink>
<span v-else>{{ c.label }}</span>
</li>
</ul>
</li>
</ul>
</a-card>
</section>
</template>
<script setup lang="ts">
import { mainNav } from '@/config/nav'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '站点地图', description: '站点地图与栏目入口汇总。', path: '/sitemap' })
const nav = mainNav
</script>
<style scoped>
.sitemap {
margin: 0;
padding-left: 18px;
color: var(--text-primary);
}
.sitemap li {
padding: 6px 0;
}
.sitemap ul {
margin-top: 6px;
padding-left: 18px;
}
</style>

13
app/pages/suggest.vue Normal file
View File

@@ -0,0 +1,13 @@
<template>
<SectionStub
title="建言献策"
description="面向公众与会员征集意见建议,支持在线提交与进度反馈(可配置权限与实名)。"
/>
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '建言献策', description: '建言献策入口。', path: '/suggest' })
</script>

10
app/pages/terms.vue Normal file
View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="使用条款" description="本页面用于发布网站使用条款与服务协议。" :show-result="false" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '使用条款', description: '使用条款与服务协议。', path: '/terms' })
</script>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="交流合作" description="发布合作项目、交流活动与联合研究进展,促进智库协同。 " />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '交流合作', description: '智库动态 - 交流合作。', path: '/thinktank/coop' })
</script>

View File

@@ -0,0 +1,19 @@
<template>
<SectionStub
title="智库动态"
description="发布智库党建、交流合作与平台建设动态,展示协同开放成果。"
:links="links"
/>
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '智库动态', description: '智库动态栏目入口。', path: '/thinktank' })
const links = [
{ label: '智库党建', to: '/thinktank/party' },
{ label: '交流合作', to: '/thinktank/coop' }
]
</script>

View File

@@ -0,0 +1,10 @@
<template>
<SectionStub title="智库党建" description="展示党建工作动态与制度建设成果,推动党建与业务深度融合。" />
</template>
<script setup lang="ts">
import SectionStub from '@/components/SectionStub.vue'
import { usePageSeo } from '@/composables/usePageSeo'
usePageSeo({ title: '智库党建', description: '智库动态 - 智库党建。', path: '/thinktank/party' })
</script>