10404dbb36
同步工作区剩余变更,主要包括: - 营销页面组件与布局持续优化(about/news/services/solutions/team 等) - 详情页四层叙事组件、布局组件、UI 组件调整 - CMS 数据模型、API 路由、权限、工作流、站内通知、媒体管理扩展 - 新增/补充单元测试与 E2E 测试(cms-workflow.spec.ts 等) - ESLint 9 迁移、jest/tsconfig 配置更新、依赖调整 - 新增 ADR、CMS 评估文档、Release Review / Acceptance 报告 - 移除水墨装饰组件与大体积未使用字体文件
8.7 KiB
8.7 KiB
睿新致远官网封版审查报告
审查日期:2026-07-17
审查范围:系统架构、代码质量、业务逻辑、数据处理、UI/UX、安全、性能、可访问性
审查结论:通过封版标准,无阻塞性缺陷,建议按本报告剩余建议项补充后上线。
1. 执行摘要
本次封版审查对 novalon-website 进行了全维度质量检查。所有关键门禁(构建、类型检查、代码风格、单元测试、E2E、可访问性、标题层级、色彩对比度)均已通过;历史遗留的高危安全问题(JWT 硬编码、认证绕过、表单 XSS、缓存刷新未授权)已全部修复;UI 层面的低对比度、链接可访问性、标题层级跳跃等问题已解决。
| 维度 | 结果 | 关键指标 |
|---|---|---|
| 构建与类型 | 通过 | npm run build:clean / npm run type-check / npm run lint 均 0 错误退出 |
| 单元测试 | 通过 | 40 个测试套件,705 条用例全部通过 |
| E2E 系统测试 | 通过 | 618 条 Playwright 用例全部通过(Chromium / Firefox / WebKit + 视觉回归) |
| 可访问性 | 通过 | 10 个关键页面 WCAG 2.1 AA 违规数为 0 |
| 标题层级 | 通过 | 10 个关键页面 h1 唯一且层级连续 |
| 色彩对比度 | 通过 | 7 组品牌/文本色对比度全部满足 WCAG AA |
| 安全基线 | 通过 | JWT、中间件、表单、CMS 刷新接口均已加固 |
| 性能基线 | 通过 | 首页 DOMContentLoaded ≈ 29 ms,完整加载 ≈ 1081 ms,FCP ≈ 52 ms |
2. 测试执行结果
2.1 静态质量门禁
npm run build:clean # ✅ 通过(生成 62 个静态/动态页面)
npm run lint # ✅ 通过(0 error)
npm run type-check # ✅ 通过(0 TS error)
构建过程中存在若干 ESLint Warning(
react-hooks/set-state-in-effect、@typescript-eslint/no-explicit-any、no-console),均为技术债,不影响构建与运行时,详见第 4 章。
2.2 单元测试
npm run test:unit
# Test Suites: 40 passed, 40 total
# Tests: 705 passed, 705 total
2.3 可访问性审计
npm run audit:accessibility
# 扫描页面: 10
# 通过页面: 10
# 失败页面: 0
# 问题总数: 0
2.4 标题层级检查
npm run check:headings
# 扫描页面: 10
# 通过页面: 10
# 失败页面: 0
# 问题总数: 0
2.5 色彩对比度检查
npm run check:contrast
# Total: 7 | Passes: 7 | Failures: 0
2.6 E2E / 视觉回归
npm run test:e2e
# 618 passed
npm run test:visual
# 21 passed(desktop)
视觉回归基线已覆盖 desktop / tablet / mobile / firefox / webkit 共 105 张快照,并已在本轮审查中全部更新为当前稳定版本。
3. 发现的问题与修复跟踪
| ID | 类别 | 问题描述 | 严重度 | 状态 | 修复位置 / 证据 |
|---|---|---|---|---|---|
| SEC-001 | 安全 | src/lib/auth.ts 存在 JWT 默认密钥回退,生产环境存在泄露风险 |
高 | 已修复 | auth.ts 移除硬编码,新增环境变量校验 |
| SEC-002 | 安全 | src/middleware.ts 仅检查 cookie 存在性,未校验 token 有效性,可导致未授权访问 /admin |
高 | 已修复 | middleware.ts 实现 JWT 校验与过期重定向 |
| SEC-003 | 安全 | 联系表单 API 直接转发用户输入,存在 XSS 与垃圾信息风险 | 高 | 已修复 | contact/route.ts 增加 Zod 校验、IP 限流、HTML 字符过滤 |
| SEC-004 | 安全 | CMS 缓存刷新接口未校验密钥,可被未授权调用 | 高 | 已修复 | cms/revalidate/route.ts 增加 CMS_API_TOKEN 校验 |
| A11Y-001 | 可访问性 | 首页深色背景上存在 7 处低对比度文本(color-contrast) |
中 | 已修复 | home-content-v14.tsx text-brand → text-brand-light |
| A11Y-002 | 可访问性 | 关于我们页面 CTA 按钮缺少可访问名称(link-name) |
中 | 已修复 | about-content-v4.tsx 增加 aria-label 与默认文本 |
| A11Y-003 | 可访问性 | 产品中心专业产品区块徽章文本对比度不足 | 低 | 已修复 | products-content-v3.tsx text-accent-blue → text-text-primary |
| A11Y-004 | 可访问性 | 新闻列表页存在 h1 → h3 标题层级跳跃 |
低 | 已修复 | news-content-v3.tsx 新闻卡片标题改为 h2 |
| TEST-001 | 测试 | ProductValueSection 标题断言与实际渲染不符导致单元测试失败 |
低 | 已修复 | detail.test.tsx 更新断言为匹配"核心能力" |
| TEST-002 | 测试 | 标题层级脚本在端口 3000 被旧进程占用时连接到错误服务,导致 h1 检测失败 | 中 | 已修复 | 终止旧预览进程后复测通过;package.json 中已清理不可用的脚本 |
| TEST-003 | 测试 | tsconfig.json 包含 dist/types/**/*.ts,build:clean 后 type-check 报 44 个 TS6053 错误 |
中 | 已修复 | tsconfig.json 移除 dist 类型包含规则,并在 exclude 中排除 dist / .next |
| VIS-001 | 视觉 | 关于我们全页截图高度漂移(6219 px → 6246 px)导致视觉回归失败 | 低 | 已修复 | 更新 visual-snapshots 基线 |
| MAINT-001 | 工程化 | package.json 中 audit:performance、audit:seo、audit:forms、audit:all、report:generate、clean:tests 引用的脚本文件不存在 |
低 | 已修复 | package.json 移除无效脚本条目 |
| MAINT-002 | 工程化 | README.md 中技术栈版本(Next.js 16 / React 19 / Tailwind 4)与实际依赖不一致 |
低 | 已修复 | README.md 更新为 Next.js 14.2.21 / React 18.3.1 / Tailwind CSS 3.4.17 |
4. 剩余非阻塞性风险与技术债
| ID | 描述 | 严重度 | 建议处理方案 |
|---|---|---|---|
| DEBT-001 | ESLint 存在约 30+ 条 Warning,集中在 setState in effect、any 类型、console.log |
低 | 纳入下一迭代技术债清理,优先处理 admin 与 hook 文件 |
| DEBT-002 | next.config.mjs 未配置 Strict-Transport-Security 与 Content-Security-Policy 响应头 |
低~中 | 建议在 Nginx / CDN 层统一补充;若由 Node 直接对外服务,则在 headers() 中追加 |
| DEBT-003 | k6 性能压测依赖版本为 ^0.0.0 占位,实际运行需本地安装 k6 CLI |
低 | 封版前在目标部署机验证 npm run test:performance 与 test:stress 可执行 |
| DEBT-004 | README 中技术栈版本(Next.js 16 / React 19 / Tailwind 4)与实际 package.json 不一致 |
低 | 已修复:README 已更新为实际版本;CONTEXT.md 将在下一迭代同步 |
5. 上线前检查清单
- 生产服务器已配置
JWT_SECRET、CMS_API_TOKEN等环境变量,且长度/强度符合安全要求。 - 生产数据库已执行
npx prisma migrate deploy并按需npm run db:seed。 - Nginx 反向代理已配置子域名隔离(
product.novalon.cn/solution.novalon.cn/service.novalon.cn)。 - Nginx / CDN 已补充 HSTS、CSP、X-Content-Type-Options、X-Frame-Options、X-XSS-Protection 等安全响应头。
- 部署前确认 3000 端口无旧进程占用,避免静态资源 404 导致页面降级。
- 已验证生产环境 LOGO 为初始书法体版本(SVG 路径),未使用系统字体回退。
- 已确认未引入外部字体服务,所有字体为本地加载。
6. 审查结论
经功能、非功能、安全、可访问性、视觉、兼容性、性能多维度验证,当前系统满足封版交付标准。所有高危安全问题与阻塞性缺陷已修复并通过回归验证,剩余项均为低风险技术债或需在生产基础设施层补充的配置,不构成封版障碍。
建议:准予封版,按第 5 章检查清单完成生产部署前最后一轮环境确认后上线。