--- name: content-management description: 内容管理(CMS)模块的业务规则,包含文章发布流程、富文本编辑规范与 SEO 要求。当涉及文章、资讯、公告等内容管理功能时必须参考此 Skill。 --- # 内容管理 (CMS) 业务 Skill ## 适用范围 当任务涉及以下场景时,必须加载并遵循此 Skill: - 文章/资讯列表、编辑、发布 - 内容分类与标签管理 - 富文本/Markdown 编辑器集成 - SEO 字段管理 ## 业务规则 ### 1. 文章发布流程 ``` 草稿 (draft) → 待审核 (pending_review) → 已发布 (published) → 已归档 (archived) ↓ 驳回 (rejected) → 草稿 (draft) [修改后重新提交] ``` **关键约束**: - 普通编辑: 只能提交审核,不能直接发布 - 管理员/主编: 可以跳过审核直接发布 - 已发布文章: 编辑后生成新版本,需重新审核 - 定时发布: 支持设置 `publishAt` 时间,到达时间后系统自动从「待发布」改为「已发布」 ### 2. 内容模型 - **标题** (title): 必填,2-100 字符 - **摘要** (summary): 选填,≤ 200 字符。若未填写,自动截取正文前 200 字 - **正文** (content): 必填,支持 Markdown 格式 - **封面图** (coverImage): 推荐尺寸 16:9(如 1200×675),支持裁剪 - **分类** (categoryId): 必填,单选 - **标签** (tags): 选填,多选,最多 5 个 - **SEO 字段**: - `seoTitle`: 选填,≤ 60 字符 - `seoDescription`: 选填,≤ 160 字符 - `seoKeywords`: 选填,逗号分隔 ### 3. 排序规则 - 默认按发布时间倒序 - 支持「置顶」功能(`isTop: boolean`),置顶文章优先展示 - 置顶文章之间按置顶时间倒序 ## 数据模型 ### 核心接口 ```typescript // src/services/article.ts export async function getArticleList( params: ArticleQueryParams, ): Promise> {} export async function getArticleDetail(id: string): Promise {} export async function createArticle( data: ArticleFormData, ): Promise {} export async function updateArticle( id: string, data: Partial, ): Promise {} export async function updateArticleStatus( id: string, status: ArticleStatus, ): Promise {} export async function deleteArticle(id: string): Promise {} export async function toggleTop(id: string, isTop: boolean): Promise {} ``` ### 关键类型 ```typescript // src/pages/Article/data.d.ts type ArticleStatus = | 'draft' | 'pending_review' | 'published' | 'archived' | 'rejected'; interface ArticleItem { id: string; title: string; summary?: string; content: string; coverImage?: string; categoryId: string; categoryName: string; tags: string[]; status: ArticleStatus; author: string; isTop: boolean; viewCount: number; publishAt?: string; createdAt: string; updatedAt: string; seoTitle?: string; seoDescription?: string; seoKeywords?: string; } ``` ## UI 交互规范 ### 1. 文章列表页 - **组件**: `ProTable`(搜索字段 < 4,使用内置 search) - **必须包含列**: 标题(可点击预览)、分类、状态、作者、发布时间、阅读量、操作 - **操作逻辑**: 根据状态动态展示按钮 - 草稿: 编辑 / 提交审核 / 删除 - 已发布: 编辑 / 下架(归档)/ 置顶/取消置顶 - **置顶标识**: 在标题前显示 📌 图标 ### 2. 文章编辑页 - **组件**: `ProForm`(非分步) - **编辑器**: 使用项目中已有的 `MarkdownEditor` 组件(`src/components/MarkdownEditor`) - **布局**: 左侧大区域放编辑器,右侧抽屉或区域放 SEO/分类/标签 - **自动保存**: 每 30 秒自动保存草稿(使用 `useRequest` 配合 `debounce`) ### 3. 预览 - 支持在弹窗中预览 Markdown 渲染结果 - 预览模式使用 `Modal` + Markdown 渲染组件 ## i18n Key 规范 - 菜单: `menu.content.*` 或 `menu.article.*` - 页面: `pages.article.*` - 表单: `article.form.*` - 状态: `article.status.*`