Files
bun-app-template/openspec/specs/app-constants/spec.md
lanyuanxiaoyao 1e3269380e fix: 审查修补前端布局重构并归档 change
- 补实现 ProtectedRoute 空壳组件(预留接口,不启用认证逻辑)
- 修复页面组件内联 style 为 CSS 类,符合样式规范
- 补充 Sidebar 菜单项激活状态测试、404 按钮可点击测试
- 回写 admin-layout spec Header 页面标题 fallback 行为
- 同步 delta specs 至主规范(admin-layout、frontend-routing、app-constants)
- 归档 refactor-frontend-layout change
2026-05-24 22:28:17 +08:00

2.6 KiB
Raw Blame History

Purpose

定义应用全局常量作为应用元信息name、title、subtitle、description、version的唯一真实来源供前后端及构建脚本统一引用消除硬编码散落。

Requirements

Requirement: 应用元信息唯一来源

系统 SHALL 在 src/shared/app.ts 中定义应用全局常量 APP,包含以下字段:

  • name机器标识kebab-case 格式)
  • title:人类可读标题
  • subtitle:副标题
  • description:应用描述(用于 SEO meta
  • version:语义版本号

APP SHALL 使用 as const 声明,保证字面量类型推断。

Scenario: 后端引用应用名称

  • WHEN 后端代码需要应用名称(如 CLI 帮助文本、health 响应、启动日志)
  • THEN 系统 SHALL 从 src/shared/app.ts 导入 APP.name

Scenario: 前端引用应用标题

  • WHEN 前端代码需要应用标题(如 Header logo、欢迎文本
  • THEN 系统 SHALL 从 src/shared/app.ts 导入 APP.title

Scenario: 构建脚本引用应用名称

  • WHEN 构建脚本需要确定可执行文件名
  • THEN 系统 SHALL 从 src/shared/app.ts 导入 APP.name

Requirement: 前端 HTML 元信息动态设置

系统 SHALL 在 React 应用挂载时动态设置 HTML 元信息:

  • document.title SHALL 设置为 APP.title
  • <meta name="description"> 内容 SHALL 设置为 APP.description

Scenario: 页面标题显示应用名称

  • WHEN 用户访问应用
  • THEN 浏览器标签页标题 SHALL 显示 APP.title

Scenario: meta description 设置

  • WHEN 搜索引擎爬取页面
  • THEN meta description SHALL 包含 APP.description

Requirement: localStorage key 语义化命名

主题偏好存储 key SHALL 为 "theme.preference",不包含应用名前缀。

Scenario: 主题偏好持久化

  • WHEN 用户选择主题偏好system/light/dark
  • THEN 系统 SHALL 将偏好值存储到 localStorage key "theme.preference"

Scenario: 主题偏好读取

  • WHEN 应用初始化时读取用户主题偏好
  • THEN 系统 SHALL 从 localStorage key "theme.preference" 读取

Requirement: 侧边栏折叠状态 localStorage key

侧边栏折叠状态存储 key SHALL 为 "sidebar.collapsed",不包含应用名前缀。

Scenario: 折叠状态持久化

  • WHEN 用户切换侧边栏折叠状态
  • THEN 系统 SHALL 将状态存储到 localStorage key "sidebar.collapsed"

Scenario: 折叠状态读取

  • WHEN 应用初始化时读取侧边栏折叠状态
  • THEN 系统 SHALL 从 localStorage key "sidebar.collapsed" 读取