Skip to content

CMS 内容管理

Zenith Admin 内置企业级 CMS 内容管理模块,支持多站点(站群)、内容模型自定义字段、审核工作流、SSR 静态化发布、SEO 工具链、PostgreSQL 中文全文检索,功能对标主流内容管理系统。

功能地图

模块清单

菜单路径说明文档
数据看板/cms/dashboard状态分布、发布趋势、热文 TOP、栏目分布本页
站点管理/cms/sites父子站群、显式继承、域名路由、主题、审核模式、Webhook站群与分发
栏目管理/cms/channels左侧栏目树 + 右侧编辑区,树形栏目(列表/单页/外链),栏目标识 code + 级联 path内容管线
内容管理/cms/contents5 态状态机、多形态内容(图文/图集/音视频/外链)、批量操作、导入导出、回收站内容管线
内容模型/cms/models12 种自定义字段类型(EAV via JSONB),选项可绑系统字典,支持站点/栏目/内容三级绑定内容管线
标签管理/cms/tags站点级标签 + 前台聚合页内容管线
友情链接/cms/friend-links前台页脚友链,支持分组管理与按组渲染互动与运营
素材中心/cms/resources文件夹树、句柄化引用索引、素材替换、孤立素材治理与报告导出内容管线
站点静态化/cms/sites站点管理操作中提交全站静态化任务渲染与静态化
检索管理/cms/search分词测试、词典、热词、死链检测全文检索
SEO 管理/cms/seo301 重定向、内链词、推送日志SEO 与流量
评论管理/cms/comments树形回复、点赞、批量审核互动与运营
广告管理/cms/ads广告投放、事件明细、统计、保留期任务与导出互动与运营
表单管理/cms/forms自定义表单、提交数据导出、邮件通知互动与运营
敏感词库/cms/sensitive-wordsAho-Corasick 引擎,评论/表单提交拦截互动与运营
易错词库/cms/error-prone-words编辑辅助:错误词→正确词,内容检查一键替换内容管线
互动问卷/cms/interactionssurvey/poll 统一设计、发布/关闭、答卷、结果与导出互动与运营
访问统计/cms/statsPV/UV 趋势、内容 TOP、来源/设备/通道分布、搜索分析全文检索
采集中心/cms/collectCSS 选择器采集 + 图片本地化互动与运营
页面搭建/cms/pages区块拖拽、用户/角色 ACL、公开展示条件与实时预览互动与运营
会员订阅/cms/subscriptions站点/栏目/作者订阅聚合、脱敏明细与导出互动与运营
发布中心/cms/publishing通用任务队列投影、产物、失败恢复与导出渲染与静态化
内容分发/cms/distribution跨站 copy/mapping/定时同步、冲突治理、行级结果与导出站群与分发

后台交互约定:栏目管理 / 内容管理 / 素材中心三个页面统一为左右两栏(MasterDetailLayout)—— 左栏顶部是站点切换器,下方是栏目树/文件夹树(可拖宽、宽度持久化、窄屏折叠为单栏); 右栏是该站点下的编辑区或数据列表。切换站点、树的增删改都在左栏完成。

架构总览

text
浏览器(前台访客)
   │ Host 匹配 / __cms/{code} 预览前缀

CMS 前台路由(Hono 兜底路由)
   ├─ 301/302 重定向 → 草稿预览(签名链接)→ robots/sitemap/RSS
   ├─ 静态文件命中(hybrid/static 模式)
   ├─ Redis 页面缓存(dynamic 模式,按页面类型分级 TTL)
   └─ React SSR 渲染 → ETag/Cache-Control 协商缓存
后台管理(React SPA /cms/*)
   └─ /api/cms/* REST 接口(权限 cms:*,站点数据权限 cms_site_users)
开放平台
   └─ /api/open/v1/cms/*(Headless 双向 API:查询 DSL / 游标翻页 / 增量同步 / 受治理写入,
      scope cms:read|cms:write|cms:publish,写入需站点级开放授权)

数据表

核心表:cms_sites / cms_site_inheritances / cms_distribution_rules / cms_models / cms_model_fields / cms_channels / cms_contents / cms_tags / cms_content_tags / cms_content_channels(副栏目)/ cms_content_relations(相关文章)/ cms_content_versions / cms_content_op_logs(操作日志时间线)

素材表:cms_resource_folders / cms_resources / cms_resource_refs(素材反向引用索引,owner 写事务内维护,供孤立治理与删除保护)

开放能力:cms_open_app_grants(开放应用的站点/栏目写入授权,fail-closed)/ cms_content_tombstones(硬删除墓碑,供 Headless 增量同步输出 op=delete

运营表:cms_comments / cms_ad_slots / cms_ads / cms_ad_events / cms_forms / cms_form_submissions / cms_sensitive_words / cms_error_prone_words(易错词)/ cms_friend_links / cms_pages / cms_page_block_acls

模板与发布:主题为仓库内置 React TSX 主题(default / docs),无独立模板表;发布产物记录于 cms_publish_artifacts,发布任务与逐路径日志复用 async_tasks / async_task_items

会员互动表:cms_content_likes / cms_content_favorites / cms_member_view_history / cms_member_subscriptions / cms_interactions / cms_interaction_questions / cms_interaction_responses / cms_interaction_answers

统计表:cms_visit_logs(前台访问原始日志,90 天保留)/ cms_ad_stats(广告曝光/点击日聚合)/ cms_ad_events(追加型事件,配置化保留期)/ cms_search_logs(搜索日志,90 天保留)

访问统计为服务端响应路径埋点(静态命中同样统计,无需前端 JS),UV 按 ip+ua 哈希去重,爬虫流量单独归类不计入 PV/UV 卡片;报表基于原始日志实时聚合,原始日志由周期任务保留 90 天。

SEO 与采集:cms_redirects / cms_link_words / cms_push_logs / cms_search_words / cms_collect_rules / cms_collect_items

权限:cms_site_users(站点数据权限绑定)/ cms_channel_users(栏目数据权限绑定);cms_contents.dept_id(创建时快照创建人部门,供部门数据权限过滤)

数据看板

「数据看板」页(权限 cms:dashboard:view)提供站点内容运营概览:

  • 状态卡片:已发布 / 草稿 / 待审核 / 已下线 / 已驳回 / 回收站数量
  • 运营指标:今日发布、累计浏览量、待审核评论
  • 发布趋势:近 14 天发布数柱状图
  • 热门内容 TOP10:按浏览量排序,点击直达编辑页
  • 栏目内容分布 TOP10

接口:GET /api/cms/dashboard/stats?siteId=,60s 自动轮询刷新。

权限码

所有权限以 cms: 前缀,按资源划分:cms:site:*cms:site:hierarchycms:channel:*cms:content:list|create|update|delete|publish|auditcms:distribution:list|create|update|delete|run|exportcms:model:*cms:tag:*cms:link:*cms:search:managecms:seo:manage|pushcms:comment:audit|deletecms:ad:managecms:ad-event:list|export|export-raw|cleanupcms:form:managecms:sensitive:managecms:word:list|managecms:interaction:list|manage|batch|export|export-rawcms:subscription:list|export|export-rawcms:stat:viewcms:collect:*cms:page:create|update|delete|aclcms:publish:view|build|manage|groupcms:dashboard:view

站点级数据权限:非平台超管必须在「站点管理 → 授权用户」中显式绑定后才能访问;未绑定时默认拒绝。平台超管可跨站点管理。

企业级治理(P5)

  • 栏目级数据权限:非平台超管必须在「栏目管理 → 授权用户」中显式绑定后,才可管理对应栏目内容(列表、详情、状态流转与批量操作均按主栏目校验);未绑定默认拒绝,平台超管不受限。表 cms_channel_users
  • 部门数据权限:内容创建时快照创建人 created_by 与其部门 dept_id;内容列表接入系统数据权限(getDataScopeCondition),角色数据范围为 本部门/本部门及以下/指定部门/仅本人 时自动过滤。
  • 站点导入导出:站点操作菜单「导出」下载整站 JSON 包(站点配置、栏目树、标签、素材库(文件夹 + 素材登记)、内容及关联、友链、重定向、内链词、广告位/广告、表单定义、搭建页面;不含运行数据与用户绑定);工具栏「导入」上传导出包创建为新站点,内部 id 全部重映射(素材先建、再把包内 cms-res:// 句柄改写为新站素材 id,避免跨站引用来源站素材),站点 code 冲突自动加序号,域名/默认站标记不迁移。为避免导入绕过发布权限,包内内容无论原状态或计划时间均统一导入为草稿,并清除发布时间、计划发布时间与归档状态,需由有 cms:content:publish 权限的用户重新发布或排期。接口 GET /api/cms/sites/{id}/exportPOST /api/cms/sites/import
  • CDN 刷新:站点设置「CDN 刷新」配置 purge webhook 地址与令牌后,增量静态化/整站重建完成自动 POST 变更路径({ siteCode, origin, purgeAll, paths, urls },Bearer 鉴权),由接收端转译具体云厂商刷新 API;失败仅记日志不影响静态化。
  • 多语言站点关联:站点设置「多语言站点关联」配置本站语言与关联站点(语言代码=站点标识 每行一条)后,前台所有页面输出 <link rel="alternate" hreflang> 且页头显示语言切换;关联站点 URL 取绑定域名(无域名回退预览路径)。

Built with VitePress for local documentation preview.