feat(article): 优化文章列表页面功能
- 将标题列改为可点击链接,支持直接跳转到文章详情页 - 新增操作列,添加查看按钮便于访问文章详情 - 修复事件绑定语法错误,将@pressEnter改为@press-enter - 修复分页组件事件绑定错误,将@showSizeChange改为@show-size-change - 实现路由参数监听,支持通过URL参数keywords自动搜索文章 - 临时禁用开发者中心的产品选择下拉菜单 - 移除已废弃的开发者中心相关页面和百色中学API接口文件
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
v-model:value="keywords"
|
||||
placeholder="关键词 keywords"
|
||||
class="w-72"
|
||||
@pressEnter="doSearch"
|
||||
@press-enter="doSearch"
|
||||
/>
|
||||
<a-button type="primary" :loading="pending" @click="doSearch">查询</a-button>
|
||||
<a-button :disabled="pending" @click="refresh">刷新</a-button>
|
||||
@@ -40,10 +40,33 @@
|
||||
size="middle"
|
||||
>
|
||||
<a-table-column title="ID" data-index="articleId" width="90" />
|
||||
<a-table-column title="标题" data-index="title" />
|
||||
<a-table-column title="标题" data-index="title">
|
||||
<template #default="{ record }">
|
||||
<NuxtLink
|
||||
v-if="record?.articleId"
|
||||
class="text-blue-600 hover:underline"
|
||||
:to="`/item/${record.articleId}`"
|
||||
>
|
||||
{{ record.title }}
|
||||
</NuxtLink>
|
||||
<span v-else>{{ record.title }}</span>
|
||||
</template>
|
||||
</a-table-column>
|
||||
<a-table-column title="编号" data-index="code" width="220" />
|
||||
<a-table-column title="栏目" data-index="categoryName" width="160" />
|
||||
<a-table-column title="创建时间" data-index="createTime" width="180" />
|
||||
<a-table-column title="操作" key="action" width="120">
|
||||
<template #default="{ record }">
|
||||
<a-button
|
||||
size="small"
|
||||
type="link"
|
||||
:disabled="!record?.articleId"
|
||||
@click="record?.articleId && navigateTo(`/item/${record.articleId}`)"
|
||||
>
|
||||
查看
|
||||
</a-button>
|
||||
</template>
|
||||
</a-table-column>
|
||||
</a-table>
|
||||
|
||||
<div class="mt-4 flex items-center justify-end">
|
||||
@@ -54,7 +77,7 @@
|
||||
show-size-changer
|
||||
:page-size-options="['10', '20', '50', '100']"
|
||||
@change="onPageChange"
|
||||
@showSizeChange="onPageSizeChange"
|
||||
@show-size-change="onPageSizeChange"
|
||||
/>
|
||||
</div>
|
||||
</a-card>
|
||||
@@ -66,6 +89,7 @@
|
||||
import { pageCmsArticle } from '@/api/cms/cmsArticle/index'
|
||||
import { getToken, removeToken, setToken } from '@/utils/token-util'
|
||||
|
||||
const route = useRoute()
|
||||
const config = useRuntimeConfig()
|
||||
const tenantId = computed(() => String(config.public.tenantId))
|
||||
|
||||
@@ -78,6 +102,19 @@ onMounted(() => {
|
||||
token.value = getToken()
|
||||
})
|
||||
|
||||
watch(
|
||||
() => route.query.keywords,
|
||||
(val) => {
|
||||
const next = Array.isArray(val) ? val[0] : val
|
||||
if (typeof next === 'string' && next.trim() && next.trim() !== keywords.value.trim()) {
|
||||
keywords.value = next.trim()
|
||||
page.value = 1
|
||||
refresh()
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
const { data, pending, error, refresh } = useAsyncData(
|
||||
'cms-article-page',
|
||||
() =>
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<a-page-header title="应用中心" sub-title="订阅应用与交付入口" />
|
||||
<AppsCenter />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import AppsCenter from '@/components/developer/AppsCenter.vue'
|
||||
|
||||
definePageMeta({ layout: 'developer' })
|
||||
</script>
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
<template>
|
||||
<div class="space-y-4">
|
||||
<a-page-header title="Git 账号绑定" sub-title="用于开通 Gitea 仓库访问权限" />
|
||||
|
||||
<a-card :bordered="false" class="card">
|
||||
<a-alert
|
||||
type="info"
|
||||
show-icon
|
||||
message="待接入接口:保存你的 Gitea 用户名(或邮箱),用于运营加组。"
|
||||
/>
|
||||
|
||||
<a-form class="mt-4" layout="vertical">
|
||||
<a-form-item label="Gitea 用户名">
|
||||
<a-input placeholder="例如:lily" />
|
||||
</a-form-item>
|
||||
<a-form-item label="备注(可选)">
|
||||
<a-textarea :rows="3" placeholder="例如:公司/项目/联系方式" />
|
||||
</a-form-item>
|
||||
<a-button type="primary" disabled>保存</a-button>
|
||||
</a-form>
|
||||
</a-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
definePageMeta({ layout: 'developer' })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.card {
|
||||
border-radius: 12px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
<template>
|
||||
<div class="space-y-4">
|
||||
<a-page-header title="概览" sub-title="开发者能力与交付入口" />
|
||||
|
||||
<a-row :gutter="[16, 16]">
|
||||
<a-col :xs="24" :md="12" :lg="8">
|
||||
<a-card :bordered="false" class="card">
|
||||
<div class="text-gray-500">可开发应用</div>
|
||||
<div class="text-2xl font-semibold mt-1">-</div>
|
||||
<div class="text-gray-400 mt-2">订阅有效且已购买源码权益</div>
|
||||
</a-card>
|
||||
</a-col>
|
||||
<a-col :xs="24" :md="12" :lg="8">
|
||||
<a-card :bordered="false" class="card">
|
||||
<div class="text-gray-500">待处理申请</div>
|
||||
<div class="text-2xl font-semibold mt-1">-</div>
|
||||
<div class="text-gray-400 mt-2">Git 加组申请处理状态</div>
|
||||
</a-card>
|
||||
</a-col>
|
||||
<a-col :xs="24" :md="12" :lg="8">
|
||||
<a-card :bordered="false" class="card">
|
||||
<div class="text-gray-500">教程更新</div>
|
||||
<div class="text-2xl font-semibold mt-1">-</div>
|
||||
<div class="text-gray-400 mt-2">后续接入教程内容源</div>
|
||||
</a-card>
|
||||
</a-col>
|
||||
</a-row>
|
||||
|
||||
<a-card title="快捷入口" :bordered="false" class="card">
|
||||
<div class="flex flex-wrap gap-3">
|
||||
<a-button type="primary" @click="navigateTo('/developer/apps')">应用中心</a-button>
|
||||
<a-button @click="navigateTo('/developer/source')">源码与仓库</a-button>
|
||||
<a-button @click="navigateTo('/developer/tutorial')">开发教程</a-button>
|
||||
<a-button @click="navigateTo('/developer/git')">Git 账号绑定</a-button>
|
||||
<a-button @click="navigateTo('/developer/requests')">权限申请记录</a-button>
|
||||
</div>
|
||||
</a-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
definePageMeta({ layout: 'developer' })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.card {
|
||||
border-radius: 12px;
|
||||
}
|
||||
</style>
|
||||
@@ -1,20 +0,0 @@
|
||||
<template>
|
||||
<div class="space-y-4">
|
||||
<a-page-header title="权限申请记录" sub-title="Git 加组申请与处理状态" />
|
||||
|
||||
<a-card :bordered="false" class="card">
|
||||
<a-empty description="待接入:/developer/git-access-requests" />
|
||||
</a-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
definePageMeta({ layout: 'developer' })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.card {
|
||||
border-radius: 12px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
<template>
|
||||
<div class="space-y-4">
|
||||
<a-page-header title="源码与仓库" sub-title="Gitea 仓库访问与源码交付" />
|
||||
|
||||
<a-alert
|
||||
type="info"
|
||||
show-icon
|
||||
message="当前版本为页面骨架:后续将接入“订阅有效 + 已购买源码权益”的可见性与申请流程。"
|
||||
/>
|
||||
|
||||
<a-card title="仓库访问" :bordered="false" class="card">
|
||||
<a-steps :current="1" size="small">
|
||||
<a-step title="绑定 Git 账号" />
|
||||
<a-step title="提交加组申请" />
|
||||
<a-step title="运营处理加组" />
|
||||
<a-step title="获得仓库访问权限" />
|
||||
</a-steps>
|
||||
|
||||
<div class="mt-4 flex flex-wrap gap-3">
|
||||
<a-button type="primary" @click="navigateTo('/developer/git')">去绑定 Git 账号</a-button>
|
||||
<a-button @click="navigateTo('/developer/requests')">查看申请记录</a-button>
|
||||
</div>
|
||||
</a-card>
|
||||
|
||||
<a-card title="我的源码列表" :bordered="false" class="card">
|
||||
<a-empty description="待接入:按 templateId 映射仓库 + 权益校验" />
|
||||
</a-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
definePageMeta({ layout: 'developer' })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.card {
|
||||
border-radius: 12px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
<template>
|
||||
<div class="space-y-4">
|
||||
<a-page-header title="支持与反馈" sub-title="开发相关问题、工单与联系渠道" />
|
||||
|
||||
<a-card :bordered="false" class="card">
|
||||
<a-descriptions bordered :column="1">
|
||||
<a-descriptions-item label="常见问题">待补充</a-descriptions-item>
|
||||
<a-descriptions-item label="工单/反馈">待接入</a-descriptions-item>
|
||||
<a-descriptions-item label="联系方式">待补充</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
</a-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
definePageMeta({ layout: 'developer' })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.card {
|
||||
border-radius: 12px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
<template>
|
||||
<div class="space-y-4">
|
||||
<a-page-header title="开发教程" sub-title="快速开始、二次开发与部署" />
|
||||
|
||||
<a-row :gutter="[16, 16]">
|
||||
<a-col :xs="24" :md="12" :lg="8">
|
||||
<a-card title="快速开始" :bordered="false" class="card">
|
||||
<p class="text-gray-600">拉代码、安装依赖、配置环境变量、本地运行。</p>
|
||||
<a-button type="link" class="px-0" disabled>查看</a-button>
|
||||
</a-card>
|
||||
</a-col>
|
||||
<a-col :xs="24" :md="12" :lg="8">
|
||||
<a-card title="二次开发" :bordered="false" class="card">
|
||||
<p class="text-gray-600">扩展点、模块/插件机制、权限/菜单接入规范。</p>
|
||||
<a-button type="link" class="px-0" disabled>查看</a-button>
|
||||
</a-card>
|
||||
</a-col>
|
||||
<a-col :xs="24" :md="12" :lg="8">
|
||||
<a-card title="部署上线" :bordered="false" class="card">
|
||||
<p class="text-gray-600">Docker/PM2、域名 HTTPS、升级回滚。</p>
|
||||
<a-button type="link" class="px-0" disabled>查看</a-button>
|
||||
</a-card>
|
||||
</a-col>
|
||||
</a-row>
|
||||
|
||||
<a-alert
|
||||
type="warning"
|
||||
show-icon
|
||||
message="教程内容源待接入:可先用 Markdown/远端 CMS/静态页面三选一实现。"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
definePageMeta({ layout: 'developer' })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.card {
|
||||
border-radius: 12px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
<template>
|
||||
<div class="space-y-4">
|
||||
<a-page-header title="小程序开发" :ghost="false" class="page-header" />
|
||||
<a-card :bordered="false">
|
||||
<a-result status="info" title="模块已创建" sub-title="mp 模块页面占位,后续在此接入功能。" />
|
||||
</a-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
definePageMeta({ layout: 'mp' })
|
||||
</script>
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
<template>
|
||||
<div class="space-y-4">
|
||||
<a-page-header title="办公协同OA" :ghost="false" class="page-header" />
|
||||
<a-card :bordered="false">
|
||||
<a-result status="info" title="模块已创建" sub-title="oa 模块页面占位,后续在此接入功能。" />
|
||||
</a-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
definePageMeta({ layout: 'oa' })
|
||||
</script>
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
<template>
|
||||
<div class="mx-auto max-w-screen-xl px-4 py-12">
|
||||
<a-typography-title :level="1" class="!mb-2">产品矩阵</a-typography-title>
|
||||
<a-typography-paragraph class="!text-gray-600 !mb-8">
|
||||
面向不同业务场景的可售卖产品,支持套餐化售卖、支付即开通、模板/插件加购与私有化交付。
|
||||
</a-typography-paragraph>
|
||||
|
||||
<a-row :gutter="[16, 16]">
|
||||
<a-col v-for="p in products" :key="p.title" :xs="24" :md="12" :lg="8">
|
||||
<a-card :title="p.title">
|
||||
<template #extra>
|
||||
<a-tag v-if="p.recommend" color="green">推荐</a-tag>
|
||||
</template>
|
||||
<a-typography-paragraph class="!text-gray-600">
|
||||
{{ p.desc }}
|
||||
</a-typography-paragraph>
|
||||
<div class="flex flex-wrap gap-2">
|
||||
<a-tag v-for="t in p.tags" :key="t">{{ t }}</a-tag>
|
||||
</div>
|
||||
<div class="mt-4">
|
||||
<a-button type="link" @click="navigateTo('/contact')">咨询开通</a-button>
|
||||
</div>
|
||||
</a-card>
|
||||
</a-col>
|
||||
</a-row>
|
||||
|
||||
<a-card class="mt-10" :bordered="false" style="background: #f0f5ff">
|
||||
<a-row :gutter="[16, 16]" align="middle">
|
||||
<a-col :xs="24" :md="16">
|
||||
<a-typography-title :level="3" class="!mb-1">需要上架你的专属产品?</a-typography-title>
|
||||
<a-typography-paragraph class="!mb-0 !text-gray-600">
|
||||
我们可基于平台能力为你定制产品组合、套餐定价、开通初始化与交付流程。
|
||||
</a-typography-paragraph>
|
||||
</a-col>
|
||||
<a-col :xs="24" :md="8" class="flex md:justify-end">
|
||||
<a-button type="primary" size="large" @click="navigateTo('/contact')">马上联系</a-button>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { usePageSeo } from '@/composables/usePageSeo'
|
||||
|
||||
usePageSeo({
|
||||
title: '产品矩阵 - 套餐售卖 / 支付即开通 / 模板&插件加购',
|
||||
description: '企业官网、电商、小程序等产品矩阵,支持套餐化售卖、支付即开通、模板/插件加购与私有化交付。',
|
||||
path: '/products'
|
||||
})
|
||||
|
||||
const products = [
|
||||
{
|
||||
title: '企业官网',
|
||||
recommend: true,
|
||||
desc: '品牌展示与获客转化,支持多模板、多语言、SEO 与可视化配置。',
|
||||
tags: ['模板', 'SEO', '多语言', '私有化']
|
||||
},
|
||||
{
|
||||
title: '电商系统',
|
||||
recommend: true,
|
||||
desc: '商品/订单/支付/营销基础能力,插件化扩展,支持多端触达。',
|
||||
tags: ['支付', '插件', '营销', '多租户']
|
||||
},
|
||||
{
|
||||
title: '小程序/公众号',
|
||||
recommend: false,
|
||||
desc: '多端渠道接入与统一管理,适配常见内容与电商场景。',
|
||||
tags: ['多端', '渠道', '可扩展']
|
||||
},
|
||||
{
|
||||
title: '行业门户',
|
||||
recommend: false,
|
||||
desc: '内容栏目体系、推荐与搜索能力,适配资讯/政企/协会等门户需求。',
|
||||
tags: ['内容管理', '栏目', '审计']
|
||||
},
|
||||
{
|
||||
title: '管理后台',
|
||||
recommend: false,
|
||||
desc: '多租户管理、角色权限、组织架构与可扩展菜单体系。',
|
||||
tags: ['权限', '多租户', '审计']
|
||||
},
|
||||
{
|
||||
title: '模板/插件市场',
|
||||
recommend: false,
|
||||
desc: '支持模板与插件购买、授权与更新,形成生态与增值体系。',
|
||||
tags: ['市场', '授权', '更新', '变现']
|
||||
}
|
||||
]
|
||||
</script>
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
<template>
|
||||
<div class="space-y-4">
|
||||
<a-page-header title="云·企业官网" :ghost="false" class="page-header" />
|
||||
<a-card :bordered="false">
|
||||
<a-result status="info" title="模块已创建" sub-title="site 模块页面占位,后续在此接入功能。" />
|
||||
</a-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
definePageMeta({ layout: 'site' })
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user