# 慧愈科技官网|需求审查与开发计划 V1.1 > 审查对象:`慧愈科技官网后台功能需求设计_V1.0.md` > 审查日期:2026-08-10 > 目标:在不改变现有设计方向的前提下,补齐可开发、可上线、可回滚、可交接所需的产品与工程约束。 > 架构更新:一期已按单服务器、Vue/Nuxt、SQLite 和本地素材方案精简,实际开发以 `一期架构决策与精简开发计划_V1.2.md` 为准;本文保留完整风险审查记录。 ## 1. 审查结论 V1.0 的产品方向、信息架构和前后台视觉目标基本正确,可以作为需求底稿;但目前**不建议直接进入完整功能开发**。 主要原因不是缺少页面,而是以下生产级闭环尚未定义完整: - 草稿、审核稿和线上版本如何隔离; - 谁可以审核、是否允许审核自己的内容; - 一页式首页与文章/课程详情页的 URL 体系; - 素材如何存储、生成衍生图、校验引用和回收; - 预览、定时发布、缓存刷新和失败重试如何实现; - 数据库、对象存储、部署、备份、回滚和监控如何验收。 这些问题需要在开发前完成补充,否则后期会集中返工数据库、权限和发布流程。 ## 2. 做得正确、可以保留的部分 1. 官网定位明确:官方信息源,而不是复杂交易或课程学习平台。 2. 后台定位正确:固定模块的专用 CMS,不做通用低代码搭建器。 3. 核心数据强调单一来源,适合长期维护和 SEO。 4. 前台组件和后台预览组件复用,方向正确。 5. 草稿、审核、发布、版本和操作日志意识完整。 6. 素材引用保护、富文本安全和后端权限校验已经被列为要求。 7. 一期明确排除了支付、CRM、多租户、学习系统等高复杂度能力。 8. 前台动效克制、文字保留在 HTML、SSR/SSG 友好等要求合理。 ## 3. 开工前必须修正的问题 ### P0-1:项目边界和前台路由没有闭合 文档名称以“官网后台”为主,但内容实际包含前台官网、后台 CMS、API、素材服务、SEO 和发布系统。必须明确一期交付物是一个完整系统,而不只是后台页面。 建议一期前台路由: ```text / /luhui /products /products/:slug /news /news/:slug /statements /statements/:slug /media /team /privacy /terms ``` 首页锚点可继续使用 `/#about`、`/#luhui` 等,但文章、课程和声明必须拥有独立、稳定、可分享、可收录的 URL。 ### P0-2:发布状态模型不完整 目前的 `status` 字段无法同时表达编辑状态、审核状态和线上状态,也没有定时发布、发布失败、下线原因等信息。 建议拆分: ```text workflow_status: draft | in_review | rejected | approved publication_status: unpublished | scheduled | published | offline | failed published_revision_id scheduled_at published_at offline_at reviewer_id review_comment ``` 线上页面始终读取 `published_revision_id`,编辑草稿不能直接污染线上内容。 ### P0-3:审核权限需要职责分离 三种角色还不足以形成安全规则,至少补充: - 内容管理员不能审核或发布自己提交的敏感内容; - 审核员只能审核被授权模块; - 发布、下线、恢复版本、修改权限属于独立权限点; - 超级管理员操作同样记录日志; - 首个超级管理员通过部署初始化,不开放前台注册。 必须形成“角色 × 模块 × 动作”的权限矩阵,并由 API 强制校验。 ### P0-4:版本管理被错误地放在 P1 文档前面要求所有关键内容保留历史版本,后面却把版本管理列为 P1。版本数据结构会影响所有核心表,不能后补。 调整建议: - 版本快照、发布版本指针、恢复为草稿:P0; - 可视化字段级差异对比:P1。 ### P0-5:实时预览需要定义安全边界 预览不能直接访问未发布 API,也不能复用管理员长期登录凭证。 建议: - 前台与后台使用同一套展示组件; - 后台生成短时、一次性或可撤销的预览令牌; - 预览页面强制 `noindex`、禁止缓存并校验访问范围; - PC、平板、手机预览是视口切换,不复制三套页面。 ### P0-6:素材模型和存储方案不完整 `Media.url` 和 `reference_count` 不足以支持生产使用。需要补充: - 原文件与 WebP/AVIF/缩略图等衍生文件; - 对象存储 key,不把完整 URL 当作唯一标识; - MIME 嗅探、扩展名白名单、文件头校验、大小与像素限制; - SHA-256 去重; - 图片宽高、焦点、版权来源、授权状态和 ALT; - `media_reference` 关联表,引用次数由关系计算; - 上传失败重试、孤儿文件清理和删除回收站; - 对象存储和 CDN 的备份及缓存刷新策略。 ### P0-7:登录错误提示存在账号枚举风险 “账号不存在”和“密码错误”分别提示会泄露账号是否存在。生产环境应对外统一提示“账号、密码或验证码错误”,详细原因仅写入安全日志。 同时补充: - 密码使用 Argon2id 或 bcrypt; - 管理端采用安全 Cookie 会话或明确的 Token 存储策略; - Cookie 设置 `HttpOnly`、`Secure`、`SameSite`; - 登录、验证码和找回密码接口限流; - 连续失败采用指数退避或短时锁定; - 管理员密码重置令牌短时有效且仅能使用一次; - 二期可加入 TOTP 双因素认证。 ### P0-8:部署、备份、回滚和监控缺失 文档只描述了业务功能,没有生产交付闭环。上线前必须定义: - 开发、测试、预发布、生产环境隔离; - 数据库迁移、上线前备份和迁移回滚方案; - PostgreSQL 定时备份与恢复演练; - 对象存储版本或跨区域备份策略; - 前端、API、后台的健康检查; - 结构化日志、错误告警、接口耗时和发布失败告警; - 部署版本号、制品留存和一键回滚上一稳定版本; - 密钥只通过环境变量或密钥服务注入,不进入代码仓库。 ## 4. 建议在一期同时补齐的问题 ### P1-1:SEO 需要稳定 URL、slug 与重定向 - Product、Article、TeamMember 增加唯一 `slug`; - slug 修改时自动保留 301 重定向; - 预览和后台页面禁止索引; - Sitemap、Canonical、Open Graph、robots 和基础 JSON-LD 应属于上线 P0,而不是上线后再补; - `Keywords` 可以保留兼容字段,但不应作为核心 SEO 工作量。 ### P1-2:文章扩展字段没有进入数据模型 官方声明的编号、附件、盖章文件,以及媒体报道的媒体名称、原文 URL、媒体 Logo 等没有体现在 `Article` 模型中。 建议采用统一文章主表 + 类型扩展字段,或明确的 JSON schema;不能只写在页面需求中。 ### P1-3:首页模块缺少正式数据模型 至少需要: ```text Page PageSection PageRevision Publication Redirect ``` `PageSection` 保存模块类型、排序、显隐和结构化配置。模块配置必须按类型校验,不能存储不受约束的任意 JSON。 ### P1-4:定时发布需要幂等和失败处理 必须明确: - 同一版本重复触发不会重复发布; - 发布任务具有唯一业务键; - 失败后按策略重试; - 超过阈值进入人工处理; - 服务器统一保存 UTC,后台按 Asia/Shanghai 展示; - 发布成功后再刷新页面缓存和 CDN。 ### P1-5:富文本需要内容规范 建议选择受控块编辑器,而不是允许任意 HTML。定义允许的标题层级、图片、视频、表格、引用、按钮和 FAQ 块;服务端二次清洗,外链默认补充安全属性。 ### P1-6:法律和隐私页面缺失 至少加入隐私政策、服务条款、版权说明和备案信息页面。如果“联系我们”要收集姓名、电话或微信,需要补充用户同意、数据保存期限、查看权限和删除机制。 ### P1-7:前台性能指标需要可验收 将“首屏重点优化”改成明确目标: - LCP ≤ 2.5s; - INP ≤ 200ms; - CLS ≤ 0.1; - 首屏主图按设备输出合适尺寸; - 动效支持 `prefers-reduced-motion`; - 常见桌面和移动浏览器无横向滚动。 ### P1-8:操作日志需要防止记录敏感数据 日志中的修改前后内容应过滤密码、Token、验证码和隐私字段;日志应追加写、限制修改、定义保存期限,并提供按操作人、模块、时间和对象检索。 ## 5. 一期范围重排 ### 一期上线必须完成(P0) - 前台官网:首页、人物、课程/产品、文章/声明、团队、官方渠道和法律页面; - 后台登录、账号、RBAC 权限矩阵; - 公司、品牌、卢慧老师、课程产品、内容、团队和官方渠道管理; - 首页固定模块管理; - 素材上传、衍生图、引用保护和授权字段; - 草稿、提交审核、退回、审批、发布、下线; - 核心实体版本快照和恢复为草稿; - 安全预览; - 基础 SEO、Sitemap、Canonical、robots、JSON-LD; - 操作日志; - 数据库迁移、备份恢复、监控告警和部署回滚。 ### 一期可简化 - 仪表盘只保留待办、最近更新和快捷入口; - 不做复杂 PV/UV 报表,接入成熟统计平台; - 版本对比先显示两个版本的完整内容,字段级差异后补; - 素材标签和筛选做基础版; - 首页模块只支持固定模块排序、显隐和内容编辑; - 后台只保证桌面端 1366px 及以上,平板可浏览但不作为主要编辑设备。 ### 延后到二期(P1/P2) - 后台全局搜索; - 复杂访问分析; - AI 内容质量检查和外部信息监测; - 双因素认证; - 字段级版本差异; - 批量复杂排版和更多自动化运营能力。 ## 6. 推荐技术基线 在团队没有既定技术栈的前提下,建议采用较稳健、易交接的组合: ```text 前台官网:Nuxt + TypeScript(SSR/混合渲染) 管理后台:Vue + TypeScript 后端 API:FastAPI 数据库:PostgreSQL 对象存储:S3 兼容存储 + CDN 异步任务:按定时发布和图片处理量选择 PostgreSQL 任务表或 Redis 队列 反向代理:Nginx 或云平台托管入口 ``` 选择理由:前台可服务 SEO,后台与前台共用 Vue 生态,FastAPI 接口边界清晰,PostgreSQL 适合版本快照与结构化内容,对象存储适合图片和附件。 建议采用单仓库分应用组织: ```text apps/ ├── web/ # 前台官网 ├── admin/ # 管理后台 └── api/ # 后端 API packages/ ├── ui/ # 品牌基础组件与设计令牌 ├── contracts/ # API 契约和共享类型 └── config/ # 共享工程配置 docs/ infra/ ``` 不要强行让前台与后台复用所有页面组件;应复用设计令牌、内容 schema 和前台预览组件,避免把后台表单逻辑耦合进前台。 ## 7. 分阶段开发计划 以下按“2 名全职开发 + 兼职设计/测试/内容负责人”估算。实际排期需要在技术栈、部署环境和内容量确认后锁定。 ### 阶段 0:需求冻结与内容核验(3—5 个工作日) 交付物: - 一期页面与路由清单; - 权限矩阵; - 状态机与发布流程图; - 字段字典和内容 schema; - 真实公司、人物、课程、渠道与法律信息清单; - 域名、服务器、对象存储、CDN 和备案决策记录。 开工闸门:P0 问题全部有明确结论。 ### 阶段 1:工程与部署基础(5—7 个工作日) 任务: - 建立 monorepo、代码规范、提交规范和环境配置; - 建立前台、后台、API 和数据库项目; - 配置迁移、种子数据、CI 构建和测试; - 建立开发、测试、预发布环境; - 接入结构化日志、健康检查和基础错误监控; - 完成自动备份与恢复脚本初版。 验收:全新环境可按文档一键启动,迁移可升级和回退,密钥不进入仓库。 ### 阶段 2:认证、权限与发布内核(8—12 个工作日) 任务: - 管理员、角色、权限矩阵和登录限流; - 草稿、审核、退回、批准、发布、下线状态机; - Revision、Publication、审计日志; - 短时预览令牌; - 定时发布任务、幂等、重试和失败告警。 验收:内容管理员不能绕过审核发布;审核员不能越权;恢复版本只生成草稿;重复发布不会产生错误状态。 ### 阶段 3:素材中心与核心内容模型(10—15 个工作日) 任务: - 素材上传、校验、对象存储、缩略图/WebP/AVIF; - 素材授权、ALT、标签和引用关系; - 公司、品牌、官方渠道; - 卢慧老师、经历、成果、课程关联与权威链接; - 课程产品、文章、声明、媒体报道和团队成员; - 首页 PageSection 固定模块配置。 验收:全部核心对象具备创建、编辑、审核、版本、发布、下线和引用保护。 ### 阶段 4:管理后台(10—15 个工作日) 任务: - 登录、仪表盘; - 首页三栏编辑与响应式预览; - 人物、公司品牌、课程、内容、团队和渠道管理; - 素材选择器; - 审核中心、历史版本、日志与网站设置; - 表单校验、自动保存、未保存离开提醒和错误恢复。 验收:运营人员不改代码即可完成一次“编辑—审核—预览—发布—下线—恢复”闭环。 ### 阶段 5:官网前台与动效(10—15 个工作日) 任务: - 建立品牌设计令牌和响应式布局; - 完成沉浸式首页各模块; - 完成人物、课程、内容、声明、团队和法律详情页; - 完成导航锚点、滚动章节激活和浏览器返回; - 完成视差、淡入、遮罩揭示、数字递增和降级动效; - 实现图片响应式加载、懒加载和无障碍结构。 验收:与设计参考图同视口对比后通过视觉 QA;桌面、平板、手机无横向滚动,主要交互可用。 ### 阶段 6:SEO、发布联动与内容迁移(6—9 个工作日) 任务: - Sitemap、robots、Canonical、OG 和 JSON-LD; - slug 和 301 重定向; - 发布后缓存/CDN 刷新; - 预览 noindex 与禁止缓存; - 导入已核验的人物、品牌、课程、团队和官方渠道内容; - 检查所有图片 ALT、链接、二维码和联系方式。 验收:搜索引擎可直接读取正文,结构化数据通过验证,未发布内容不可被公开访问。 ### 阶段 7:系统测试与安全验收(8—12 个工作日) 任务: - API 单元测试、权限测试和发布状态机测试; - 前后台核心流程端到端测试; - XSS、CSRF、越权、上传、限流和会话测试; - 性能、Core Web Vitals、浏览器兼容和无障碍检查; - 备份恢复、迁移回滚和应用版本回滚演练; - 运营使用手册、部署手册和故障处理手册。 验收:P0 用例全部通过,无高危安全问题,恢复演练成功。 ### 阶段 8:生产发布与观察(3—5 个工作日) 任务: - 上线前数据库和素材备份; - 灰度或维护窗口发布; - 域名、HTTPS、CDN、备案和搜索引擎配置; - 发布后冒烟测试; - 观察错误率、接口耗时、任务队列和页面性能; - 准备并验证回滚路径。 验收:连续观察期内无阻断问题,监控和告警有效,运营账号与权限完成交接。 ## 8. 工期与人员判断 粗略工作量:**60—90 人日**,不含大量内容撰写、原始图片重制、备案等待和外部账号申请。 - 2 名有经验的全职开发,设计/测试/内容兼职配合:约 9—12 周; - 1 名全栈开发独立完成:约 14—18 周; - 如果一期继续保留后台全局搜索、复杂统计、字段级版本对比等能力,工期需要继续增加。 人员职责建议: | 角色 | 主要职责 | | --- | --- | | 产品/内容负责人 | 需求决策、事实核验、文案、素材授权、验收签字 | | 前端开发 | 官网、后台、动效、响应式、可访问性和视觉 QA | | 后端开发 | 数据模型、权限、发布、素材、SEO、日志和部署接口 | | 测试/交付 | 测试用例、安全回归、部署与恢复演练、交接文档 | ## 9. 阶段 0 需要确认的决策 1. 一期是否同时交付前台官网和后台 CMS;建议:是。 2. 课程和品牌动态是否需要独立详情页;建议:是。 3. “联系我们”只展示官方渠道,还是收集访客信息;建议一期只展示渠道,避免引入隐私数据管理。 4. 是否要求内容管理员与审核员职责分离;建议:是。 5. 前台部署采用自有服务器还是云平台;需要结合预算和运维能力确认。 6. 图片、视频和 PDF 使用哪家对象存储与 CDN。 7. 是否已有域名、ICP备案主体、公安备案、隐私政策和服务条款。 8. 技术栈是否接受 Vue/Nuxt + FastAPI + PostgreSQL。 9. 一期真实内容由谁提供、谁核验、谁最终签字。 ## 10. 开发启动建议 先用 3—5 个工作日完成阶段 0,不立即搭大量页面。阶段 0 通过后,再并行启动“工程基础”“品牌设计令牌”和“内容核验”。这能把数据库、权限、发布和素材这些高返工风险提前消化掉。