docs(plan): A4 实施报告与计划回写
背景:A4 开发完成,需要回写实施报告、技术架构与开发计划状态。\n改动:新增 A4 实施报告;技术架构补 system_config_versions 与 dict:manage 口径;开发计划 A4 标记完成并回写门禁/遗留;README 索引补 A4 报告。\n影响面:仅文档;不改变需求与技术边界。\n回滚:回滚本提交即可。\n验证:prettier 通过;文档链接已检查。
This commit is contained in:
1 parent
f16d04fe02
commit
02c716d6f2
4 files changed
+179
-7
No files matched your search
@@ -22,6 +22,7 @@
|
|||||||
| **A1 报告** | [灵犀_A1身份认证与用户管理_实施报告_V0.1.md](docs/开发计划/灵犀_A1身份认证与用户管理_实施报告_V0.1.md) | V0.1 | A1 完成范围、契约/实现/测试、遗留与下一步 |
|
| **A1 报告** | [灵犀_A1身份认证与用户管理_实施报告_V0.1.md](docs/开发计划/灵犀_A1身份认证与用户管理_实施报告_V0.1.md) | V0.1 | A1 完成范围、契约/实现/测试、遗留与下一步 |
|
||||||
| **A2 报告** | [灵犀_A2角色权限与数据范围_实施报告_V0.1.md](docs/开发计划/灵犀_A2角色权限与数据范围_实施报告_V0.1.md) | V0.1 | A2 完成范围、H1 决策、前后端/测试、遗留与下一步 |
|
| **A2 报告** | [灵犀_A2角色权限与数据范围_实施报告_V0.1.md](docs/开发计划/灵犀_A2角色权限与数据范围_实施报告_V0.1.md) | V0.1 | A2 完成范围、H1 决策、前后端/测试、遗留与下一步 |
|
||||||
| **A3 报告** | [灵犀_A3客户与行业目录_实施报告_V0.1.md](docs/开发计划/灵犀_A3客户与行业目录_实施报告_V0.1.md) | V0.1 | A3 完成范围、两级行业决策、混搭 UI、测试与遗留 |
|
| **A3 报告** | [灵犀_A3客户与行业目录_实施报告_V0.1.md](docs/开发计划/灵犀_A3客户与行业目录_实施报告_V0.1.md) | V0.1 | A3 完成范围、两级行业决策、混搭 UI、测试与遗留 |
|
||||||
|
| **A4 报告** | [灵犀_A4数据字典与系统配置_实施报告_V0.1.md](docs/开发计划/灵犀_A4数据字典与系统配置_实施报告_V0.1.md) | V0.1 | A4 完成范围、三层合并/配置版本、方案 A UI、测试与遗留 |
|
||||||
| **ADR** | [docs/adr/](docs/adr/README.md) | — | 架构决策记录(ADR-001 权限;ADR-002 两级行业目录) |
|
| **ADR** | [docs/adr/](docs/adr/README.md) | — | 架构决策记录(ADR-001 权限;ADR-002 两级行业目录) |
|
||||||
| 历史 PRD | `docs/PRD/灵犀_信息流素材生产平台_PRD_V0.1~V0.3.md` | 归档 | 仅作沿革参考,**不具约束力** |
|
| 历史 PRD | `docs/PRD/灵犀_信息流素材生产平台_PRD_V0.1~V0.3.md` | 归档 | 仅作沿革参考,**不具约束力** |
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,165 @@
|
|||||||
|
# 灵犀 A4 数据字典与系统配置 · 实施报告 V0.1
|
||||||
|
|
||||||
|
| 项 | 内容 |
|
||||||
|
| --- | --- |
|
||||||
|
| 实施日期 | 2026-11-04 |
|
||||||
|
| 批次 | A4(数据字典与系统配置) |
|
||||||
|
| 状态 | **已完成**(开发 + 全部门禁 + 浏览器 e2e 通过;未推送) |
|
||||||
|
| 依据 | 开发计划 V0.1 §6.5 / §7.3 / §12.1;PRD V1.6 §5.4.5 / R-01 / R-10 / R-26;技术架构 V0.4 §5.3 / §5.7 / §6.3.7;ADR-001 |
|
||||||
|
| 视觉基线 | A0「方向 A · 云白蓝」;用户选定 **方案 A · 主从分栏** |
|
||||||
|
| 迁移 | `prisma/migrations/20261104024511_a4_dict_system_configs/` |
|
||||||
|
| 前端路由 | `/system/dicts`、`/system/dicts/:type`、`/system/settings` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1 范围与完成度
|
||||||
|
|
||||||
|
| 任务 | 内容 | 状态 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| A4-BE-01 | 字典模型与三层合并(`dict_types` / `dict_items`,树 / 词表一张表) | ✅ |
|
||||||
|
| A4-BE-02 | 系统配置与版本(`system_configs` + `system_config_versions`,阈值同源) | ✅ |
|
||||||
|
| A4-BE-03 | 命名规则服务(R-01 占位符 / 白名单 / 同名序号 / ≤100) | ✅ |
|
||||||
|
| A4-BE-04 | 字典快照(R-10,共享契约 + `toDictItemSnapshot`) | ✅ |
|
||||||
|
| A4-FE-01 | 字典管理(方案 A 主从分栏,树 / 词表双视图) | ✅ |
|
||||||
|
| A4-FE-02 | 系统配置页(6 组 / 命名预览 / 阈值二次确认 / 变更记录) | ✅ |
|
||||||
|
| A4-QA-01 | 合并 / 快照 / 同源用例 + 浏览器 e2e | ✅ |
|
||||||
|
|
||||||
|
> 权限口径:A2 定稿的 30 个权限点中字典为单个 `dict:manage`;系统配置为 `system:configure`。本轮未新增权限点,已同步技术架构 §6.3.7 与开发计划附录 B / C。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2 交付物
|
||||||
|
|
||||||
|
### 2.1 文档与决策
|
||||||
|
|
||||||
|
- 技术架构 §5.3 / §5.7 / §6.3.7 回写:新增 `system_config_versions`,字典权限统一 `dict:manage`。
|
||||||
|
- 开发计划 §7.3 / 附录 B / 附录 C 权限口径回写。
|
||||||
|
- `prisma/SEED.md` 更新:`system_configs` 26 项、A4 字典 13 类 / 96 条。
|
||||||
|
- 前端原型:`design/a4-ui-v1/`(三套候选 + 两轮独立评审 + 用户选定 A);实现截图:`design/a4-ui-v1/impl/`。
|
||||||
|
|
||||||
|
### 2.2 共享契约(`packages/shared`)
|
||||||
|
|
||||||
|
- `schemas/dict.ts`:字典类型 / 条目 / 三层来源 / 类型与条目编码不可改 / 查询与写接口 / `toDictItemSnapshot`。
|
||||||
|
- `schemas/config.ts`:系统配置响应、批量保存(`expectedVersion`)、变更记录、`effective` 读取。
|
||||||
|
- `config/system-configs.ts`:26 项配置定义(key / group / label / description / impact / type / default / 约束 / public)与 `validateSystemConfigValue`;前后端共用,R-26 唯一事实源。
|
||||||
|
- `naming.ts`:`NAMING_TOKEN_DEFINITIONS`、`validateNamingTemplate`、`resolveNamingTemplate`、`formatNamingDate`、`formatNamingSequence`;保留既有 `dedupeName` / `sanitizeFilename`。
|
||||||
|
- `schemas/client.ts`:`CUSTOMER_BASE_FIELD_HARD_LIMIT = 50` 作为 DTO 防御性硬上界;实际生效上限由服务端动态读取。
|
||||||
|
- 单测:`dict.spec.ts` / `config.spec.ts` / `naming.spec.ts` 覆盖合并口径、快照、配置校验、模板解析、同名序号。
|
||||||
|
|
||||||
|
### 2.3 数据库与种子
|
||||||
|
|
||||||
|
- 迁移 `20261104024511_a4_dict_system_configs`:
|
||||||
|
- `dict_types`(code unique;group / kind / industry_scoped / builtin / status / sort);
|
||||||
|
- `dict_items`(type_id + code + industry_id;parent_code;`dict_items_no_self_parent_check`);
|
||||||
|
- 部分唯一索引:通用层 `(type_id, code) WHERE industry_id IS NULL`、行业层 `(type_id, code, industry_id) WHERE industry_id IS NOT NULL`;
|
||||||
|
- `system_config_versions`(append-only:config_key / version / old_value / new_value / reason / changed_by / changed_at;`(config_key, version)` 唯一)。
|
||||||
|
- 种子:
|
||||||
|
- `system_configs` 26 项,元数据来自 `SYSTEM_CONFIG_DEFINITIONS`;重复执行不覆盖人工调整值 / 版本;
|
||||||
|
- 字典 13 类 / 96 条,行业作用域映射 A3 行业(电商 / 服饰鞋包 / 美妆个护 / 金融 / 信贷 等);内置类型不可删除、条目编码不可改。
|
||||||
|
|
||||||
|
### 2.4 后端(`apps/api`)
|
||||||
|
|
||||||
|
| 模块 | 接口 |
|
||||||
|
| --- | --- |
|
||||||
|
| `catalog` | `GET /dicts`、`GET /dicts/{code}`、`POST /dicts`、`PATCH /dicts/{code}`、`PATCH /dicts/{code}/status`、`DELETE /dicts/{code}`、`GET /dicts/{code}/items`、`POST /dicts/{code}/items`、`PATCH /dicts/{code}/items/{itemId}` |
|
||||||
|
| `platform` | `GET /system/configs`、`GET /system/configs/effective`、`PUT /system/configs`、`GET /system/configs/history` |
|
||||||
|
|
||||||
|
- 三层合并为纯函数 `dict-merge.ts`:通用 0 / 父行业 1 / 本行业 2,同 code 覆盖;返回 `source` / `overridden` / `layers` / `effectiveCount` / `disabledCount`。
|
||||||
|
- 编码不可改:schema `.strict()` 不接收 code / kind / industryScoped / parentCode / industryId 更新;冲突 40902;内置类型 / 有子条目删除 40001。
|
||||||
|
- 配置保存:事务 + `expectedVersion` 乐观锁(40901)+ 条件 `version+1` + `system_config_versions` + `@Audit('platform.system_config.update')` 前后值。
|
||||||
|
- 阈值同源:`roles` / `users` / `customers` / `customer-fields` 已改为 `SystemConfigService.getNumber('limit.*')`;shared 常量只作 fallback。
|
||||||
|
- 命名服务:`resolveScriptName` / `resolveImageName` / `resolveVideoName`,读 `naming.*` + `max_length` + `duplicate_start`;缺占位符 40001,非法 / 超长 / 同名过多 42201。
|
||||||
|
- 快照:`dict.mapper#toDictSnapshot` 委托 shared;单测证明改名后历史快照不变(R-10)。
|
||||||
|
- 审计:字典类型 / 条目写操作、系统配置保存均 @Audit + 结构化日志前后值(A5 落审计表)。
|
||||||
|
|
||||||
|
### 2.5 前端(`apps/web`,方案 A)
|
||||||
|
|
||||||
|
| 页面 | 路由 | 实现 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 数据字典 | `/system/dicts` | 左 320 类型列表(4 分组折叠、搜索、状态筛选、统计)+ 右类型头 / 行业三层 chips / 树表切换 / 条目表 |
|
||||||
|
| 字典详情 | `/system/dicts/:type` | 同一主从骨架深链;默认 `script_direction` + 电商/服饰鞋包,7 项三层合并 |
|
||||||
|
| 系统配置 | `/system/settings` | 左 200 分组导航 + 6 组表单 + 命名占位符 / 实时预览 + 阈值二次确认 + 保存条 + 变更记录抽屉 |
|
||||||
|
|
||||||
|
- 组件:`DictTypeListPanel` / `DictDetailPanel` / `DictItemsView` / `DictItemSheet` / `DictTypeModal`;`SettingsPage` / `SettingsNav` / `SettingsGroupForm` / `ConfigRow` / `NamingAside` / `ConfigHistorySheet`。
|
||||||
|
- API / 状态:`api/dicts.ts` / `api/configs.ts`,shared Zod parse;`use-dicts` / `use-configs`,含 `useEffectiveSystemConfigsQuery` / `useCustomerFieldLimits`。
|
||||||
|
- 阈值同源:客户列表 / 详情 / 字段审批的 10 / 5 显示与禁用判断改为 effective config;后端最终校验不变。
|
||||||
|
- 路由 / 壳层:`/system/dicts`、`/system/dicts/:type`、`/system/settings` 已注册并按 `dict:manage` / `system:configure` 守卫;`AppLayout` 满高 flush;`main.tsx` 引入 `dicts.css` / `settings.css`。
|
||||||
|
- 侧边栏已更名「数据字典」(commit `32b44bd`)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3 验证结果
|
||||||
|
|
||||||
|
| 门禁 | 命令 | 结果 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 格式 | `pnpm format:check` | ✅ |
|
||||||
|
| Lint | `pnpm lint` | ✅ 0 warning |
|
||||||
|
| 类型 | `pnpm typecheck` | ✅ 10/10 tasks |
|
||||||
|
| 单测(shared) | `pnpm --filter @lingxi/shared test` | ✅ 13 files / 147 tests |
|
||||||
|
| 单测(api) | `pnpm --filter @lingxi/api test` | ✅ 18 files / 137 tests |
|
||||||
|
| 单测(web) | `pnpm --filter @lingxi/web test` | ✅ 29 files / 154 tests |
|
||||||
|
| 集成 | `pnpm --filter @lingxi/api test:int` | ✅ 7 files / 58 tests(新增 catalog 10 + config 9) |
|
||||||
|
| 构建 | `pnpm build` | ✅ 8/8 tasks |
|
||||||
|
| OpenAPI | `pnpm openapi:export` + `pnpm openapi:diff` | ✅ 无破坏性变更 |
|
||||||
|
| 浏览器 e2e | `A4_E2E=1 pnpm exec playwright test e2e/a4-dicts-settings.spec.ts` | ✅ 7 passed(约 1.1m) |
|
||||||
|
| 本地 CI | `pnpm ci:local` | ✅ 262.3s,全部门禁通过(build + test:int + openapi + smoke e2e) |
|
||||||
|
|
||||||
|
浏览器人工验收(真实 API + PG + seed):
|
||||||
|
- `/system/dicts` 默认脚本方向 / 电商·服饰鞋包,显示三层 chips(通用 5 + 父行业 2 + 本行业 1 = 生效 7),种草短视频「父行业 / 已覆盖」、直播切片「父行业」、穿搭教程「本行业」;
|
||||||
|
- 树 / 词表切换、非行业类型「全平台通用」、条目新增 / 编辑(编码只读)/ 停用 / 启用、类型新建 / 编辑(编码只读);
|
||||||
|
- `/system/settings` 6 组 / 26 项、命名占位符与实时预览、阈值旧→新二次确认、保存后版本 +1、变更记录(版本 / 前后值 / 操作人 / 时间 / 原因);
|
||||||
|
- 1440×900 与 1024×900 无横向溢出;截图:[impl](../../design/a4-ui-v1/impl/)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4 关键口径与实现说明
|
||||||
|
|
||||||
|
1. **一张表同时表达树与词表**:`dict_items.parent_code` 表达二级树;不另建行业二级表(ADR-002 后行业树由 `industries` 承载)。
|
||||||
|
2. **三层合并**:查询取通用 + 父行业 + 本行业;同 code 以更具体层覆盖,返回 source / overridden;非行业作用域类型强制只读通用层。
|
||||||
|
3. **编码不可改**:类型 `code` 与条目 `code` 创建后不可改;更新 DTO `.strict()` 不接收;前端编辑态只读。
|
||||||
|
4. **配置唯一来源**:`SYSTEM_CONFIG_DEFINITIONS` 为元数据 / 默认值 / 校验唯一事实源;`system_configs` 只存值 / 版本;`/system/configs/effective` 供前端读取 public 项(上限),前端不再硬编码 10 / 5。
|
||||||
|
5. **版本与变更**:保存走事务 + 乐观锁;每次变更写 `system_config_versions`;审计日志记录前后值,A5 落审计表。
|
||||||
|
6. **命名规则**:shared 纯函数被前端预览与后端 `NamingService` 共用;字符白名单、占位符、≤100、同名序号一致。
|
||||||
|
7. **快照**:`toDictItemSnapshot` 生成填写时 typeCode / code / name / parentCode / industryId / capturedAt;业务记录在 B0 / M1 引用时保存,A4 只提供契约与工具。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5 已知差异与遗留
|
||||||
|
|
||||||
|
| 编号 | 项 | 说明 / 建议 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 1 | `refCount` 固定 0 | A4 尚无引用表;B0 / B1 资产与行业包落地后接入真实引用计数 |
|
||||||
|
| 2 | 配置项 26 项(原型 24 项) | 含 A0 已有 2 项 AI 成本比例配置;A7 会提供专门 AI 配置页,A4 暂列在「业务阈值」 |
|
||||||
|
| 3 | 审计落库 | A4 只写结构化 `@Audit` 日志;审计表 / 检索 / 导出按 A5 |
|
||||||
|
| 4 | 只读态不可达 | 路由守卫为 `dict:manage` / `system:configure`,无独立 view 权限;页面保留 canWrite=false 防御分支,后续如拆分 view/manage 权限可直接生效 |
|
||||||
|
| 5 | 详情面包屑 | `/system/dicts/:type` 面包屑仍为「管理中心 / 数据字典」,未展示类型名;`breadcrumbs.ts` 无类型参数,后续统一处理(与 A3 客户详情同源问题) |
|
||||||
|
| 6 | 字典类型分页 | 当前 13 类,前端一次拉 100 条后本地筛选;类型数 >100 时需补游标分页 UI |
|
||||||
|
| 7 | `updatedBy` 存储 | 字典表存操作人姓名;`system_configs.updated_by` 存 ULID,列表 / 历史批量 join 返回姓名 |
|
||||||
|
| 8 | DTO 硬上界 | 客户基础字段 schema 硬上界 50(防御性);若配置 >50 仍会被 Zod 拦截,需同步调整 shared 硬上界 |
|
||||||
|
| 9 | e2e | `A4_E2E=1` 用例已落地并 7/7 通过;默认 skip,不影响 smoke / CI;`e2e/README.md` 待补登记一行 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6 回滚方式
|
||||||
|
|
||||||
|
1. 代码:回滚 A4 提交(catalog / platform 配置与命名 / 前端字典与配置页 / shared 契约 / 路由 / 样式 / 迁移 / seed / 文档)。
|
||||||
|
2. 数据库:A4 为新增表,回滚可保留表;彻底回滚删除顺序:`system_config_versions → dict_items → dict_types`;`system_configs` 为 A0 既有表,保留。
|
||||||
|
3. 配置:删除 A4 新增 `system_configs` 行或恢复默认值;`system_config_versions` 清空即可。
|
||||||
|
4. 前端:回滚路由 / 导航 / 页面 / 样式;`/system/dicts` / `/system/settings` 将回退到 Workspace 占位页(导航保留)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7 本地运行
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm check:dev
|
||||||
|
pnpm db:init
|
||||||
|
pnpm dev
|
||||||
|
# 浏览器 http://127.0.0.1:5173 → 管理中心 / 数据字典、系统配置
|
||||||
|
```
|
||||||
|
|
||||||
|
A4 e2e(需先起 `pnpm dev`):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
A4_E2E=1 pnpm exec playwright test e2e/a4-dicts-settings.spec.ts --reporter=list
|
||||||
|
```
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
| 文档名称 | 灵犀 · 信息流素材生产平台 项目开发计划 |
|
| 文档名称 | 灵犀 · 信息流素材生产平台 项目开发计划 |
|
||||||
| 版本 | V0.1(初稿,待评审) |
|
| 版本 | V0.1(初稿,待评审) |
|
||||||
| 日期 | 2026-11-02 |
|
| 日期 | 2026-11-02 |
|
||||||
| 状态 | **执行中**:A0 工程骨架与契约基线已完成(2026-11-02);A1 身份认证与用户管理已完成(2026-11-03);A2 角色权限与数据范围已完成(2026-11-03);A3 客户与行业目录已完成(2026-11-04 最终验收);下一步 A4 |
|
| 状态 | **执行中**:A0 工程骨架与契约基线已完成(2026-11-02);A1 身份认证与用户管理已完成(2026-11-03);A2 角色权限与数据范围已完成(2026-11-03);A3 客户与行业目录已完成(2026-11-04 最终验收);A4 数据字典与系统配置已完成(2026-11-04);下一步 A5 |
|
||||||
| 需求基线 | PRD V1.6([灵犀-信息流广告素材一站式生产平台PRD.md](../PRD/灵犀-信息流广告素材一站式生产平台PRD.md)) |
|
| 需求基线 | PRD V1.6([灵犀-信息流广告素材一站式生产平台PRD.md](../PRD/灵犀-信息流广告素材一站式生产平台PRD.md)) |
|
||||||
| 技术基线 | 技术架构 V0.4([灵犀_信息流素材生产平台_技术架构_V0.1.md](../技术架构/灵犀_信息流素材生产平台_技术架构_V0.1.md))+ `AGENTS.md` V1.0 + `docs/工程规范/` V1.0 |
|
| 技术基线 | 技术架构 V0.4([灵犀_信息流素材生产平台_技术架构_V0.1.md](../技术架构/灵犀_信息流素材生产平台_技术架构_V0.1.md))+ `AGENTS.md` V1.0 + `docs/工程规范/` V1.0 |
|
||||||
| 覆盖范围 | **M0 任务级;M1–M4 迭代级 + 任务组级;M5 预研边界(不排期)** |
|
| 覆盖范围 | **M0 任务级;M1–M4 迭代级 + 任务组级;M5 预研边界(不排期)** |
|
||||||
@@ -26,6 +26,7 @@
|
|||||||
| V0.1(进度回写 A1) | 2026-11-03 | A1 身份认证与用户管理完成:批次总览更新 A1 状态、A1 WBS 标注完成、回写执行证据与遗留;不改变原计划范围与验收口径 |
|
| V0.1(进度回写 A1) | 2026-11-03 | A1 身份认证与用户管理完成:批次总览更新 A1 状态、A1 WBS 标注完成、回写执行证据与遗留;不改变原计划范围与验收口径 |
|
||||||
| V0.1(路由规范回写) | 2026-11-03 | 「平台」更名「管理中心」,前端路由统一为 `/<模块>/<功能>`(A1 用户页改为 `/system/users`);同步附录 C 页面清单与前端目录约定,不改变功能范围与验收口径 |
|
| V0.1(路由规范回写) | 2026-11-03 | 「平台」更名「管理中心」,前端路由统一为 `/<模块>/<功能>`(A1 用户页改为 `/system/users`);同步附录 C 页面清单与前端目录约定,不改变功能范围与验收口径 |
|
||||||
| V0.1(A1 部门管理补强) | 2026-11-03 | 补 `/system/departments` 部门管理:WBS 增 A1-BE-05 / A1-FE-04,补页面与接口清单;只停用不删除、有成员/启用子部门禁止停用;不改变其它批次范围 |
|
| V0.1(A1 部门管理补强) | 2026-11-03 | 补 `/system/departments` 部门管理:WBS 增 A1-BE-05 / A1-FE-04,补页面与接口清单;只停用不删除、有成员/启用子部门禁止停用;不改变其它批次范围 |
|
||||||
|
| V0.1(进度回写 A4) | 2026-11-04 | A4 数据字典与系统配置完成:批次总览更新 A4 状态、A4 WBS 标注完成、回写门禁与 e2e;权限按 A2 定稿统一 `dict:manage`,新增 `system_config_versions`;不改变原计划范围与验收口径 |
|
||||||
|
|
||||||
### 0.2 引用约定
|
### 0.2 引用约定
|
||||||
|
|
||||||
@@ -382,7 +383,7 @@ flowchart LR
|
|||||||
| **A1** | ✅ 已完成 | 身份认证与用户管理 | A0 | 6 | 4–5 日 | W1 | 登录 / 刷新 / 登出;用户生命周期;路由权限;权限三态用例 |
|
| **A1** | ✅ 已完成 | 身份认证与用户管理 | A0 | 6 | 4–5 日 | W1 | 登录 / 刷新 / 登出;用户生命周期;路由权限;权限三态用例 |
|
||||||
| **A2** | ✅ 已完成 | 角色权限与数据范围 | A1 | 5.5 | 4–5 日 | W2 | 角色可配;SoD 命中拒绝;特殊权限默认关闭;范围过滤生效 |
|
| **A2** | ✅ 已完成 | 角色权限与数据范围 | A1 | 5.5 | 4–5 日 | W2 | 角色可配;SoD 命中拒绝;特殊权限默认关闭;范围过滤生效 |
|
||||||
| **A3** | ✅ 已完成 | 客户与行业目录 | A1 / A2 | 7 | 4–5 日 | W2 | 行业 / 客户 / 客户组可用;唯一性;状态只读;字段审批 |
|
| **A3** | ✅ 已完成 | 客户与行业目录 | A1 / A2 | 7 | 4–5 日 | W2 | 行业 / 客户 / 客户组可用;唯一性;状态只读;字段审批 |
|
||||||
| **A4** | 未开始 | 数据字典与系统配置 | A3 | 4 | 3–4 日 | W3 | 三层合并;编码不可改;阈值同源;配置版本 + 审计 |
|
| **A4** | ✅ 已完成 | 数据字典与系统配置 | A3 | 4 | 3–4 日 | W3 | 三层合并;编码不可改;阈值同源;配置版本 + 审计 |
|
||||||
| **A5** | 未开始 | 审计与日志 | A1 / A4 | 4 | 3–4 日 | W2–W3 | 关键操作全留痕;不可篡改;导出自身审计 |
|
| **A5** | 未开始 | 审计与日志 | A1 / A4 | 4 | 3–4 日 | W2–W3 | 关键操作全留痕;不可篡改;导出自身审计 |
|
||||||
| **A6** | 未开始 | 任务中心与队列骨架 | A0 / A1 | 6 | 4–5 日 | W2–W3 | 提交 → SSE → 完成 / 失败;幂等;取消 / 重试 |
|
| **A6** | 未开始 | 任务中心与队列骨架 | A0 / A1 | 6 | 4–5 日 | W2–W3 | 提交 → SSE → 完成 / 失败;幂等;取消 / 重试 |
|
||||||
| **A7** | 未开始 | AI 配置与调用底座 | A0 / A1 / A5 | 6 | 4–5 日 | W3 | 四层配置;Mock 调用;密钥不泄露;账本可查 |
|
| **A7** | 未开始 | AI 配置与调用底座 | A0 / A1 / A5 | 6 | 4–5 日 | W3 | 四层配置;Mock 调用;密钥不泄露;账本可查 |
|
||||||
@@ -609,6 +610,8 @@ PRD §7 把 **M-27(素材元素级拆解)** 与「自动字幕 → TTS 配
|
|||||||
|
|
||||||
**本批门禁**:字典三层合并可用;编码不可改;阈值只存一处且前后端一致;配置变更可审计。
|
**本批门禁**:字典三层合并可用;编码不可改;阈值只存一处且前后端一致;配置变更可审计。
|
||||||
|
|
||||||
|
> **A4 完成情况(2026-11-04)**:7/7 项 WBS 全部 ✅。`dict_types` / `dict_items` 通用枚举表(树 / 词表一张表、编码不可改、三层合并、快照契约)、`system_configs` + `system_config_versions`(26 项配置、版本 / 乐观锁 / 前后值 / 审计日志)、命名规则服务(R-01)、阈值同源(roles / users / customers / customer-fields 读配置)全部落地;前端按用户选定 **方案 A 主从分栏**实现 `/system/dicts`、`/system/dicts/:type`、`/system/settings`,侧栏更名「数据字典」。门禁:`format:check / lint / typecheck / test` 全绿(shared 147 / api 137 / web 154,共 438),`test:int` 58 项(7 文件,含 A4 catalog 10 + config 9),A4 浏览器 e2e 7/7(约 1.1m),`build` 8/8,`openapi:export` + `openapi:diff` 无破坏性变更;实现记录、截图与遗留见 [A4 实施报告](./灵犀_A4数据字典与系统配置_实施报告_V0.1.md)。已知遗留:`refCount` 待 B0/B1、A5 审计落库、详情面包屑末级类型名、字典类型 >100 的分页。
|
||||||
|
|
||||||
### 6.6 A5 审计与日志
|
### 6.6 A5 审计与日志
|
||||||
|
|
||||||
**目标**:关键操作全留痕、不可篡改、可检索可导出。**对应**:P-07、PRD §5.4.6;`R-05`;架构 §5.4.5 / §9.7;工程规范 08。
|
**目标**:关键操作全留痕、不可篡改、可检索可导出。**对应**:P-07、PRD §5.4.6;`R-05`;架构 §5.4.5 / §9.7;工程规范 08。
|
||||||
@@ -1237,7 +1240,8 @@ infra/:compose、Nginx、监控、备份脚本占位
|
|||||||
- [ ] 自定义角色 + 权限点 + 六类数据范围 + 特殊权限可用;
|
- [ ] 自定义角色 + 权限点 + 六类数据范围 + 特殊权限可用;
|
||||||
- [ ] SoD 三对规则生效且有拒绝用例;
|
- [ ] SoD 三对规则生效且有拒绝用例;
|
||||||
- [ ] 行业两级树(一级 → 二级,客户挂末级)、客户 / 客户组 / 客户端字段审批可用;
|
- [ ] 行业两级树(一级 → 二级,客户挂末级)、客户 / 客户组 / 客户端字段审批可用;
|
||||||
- [ ] 通用字典三层合并、编码不可改、历史快照可用;
|
- [x] 通用字典三层合并、编码不可改、历史快照可用;
|
||||||
|
- [x] 系统配置单一来源、阈值 / 上限同源、配置版本与变更记录可用;
|
||||||
- [ ] 审计七类关键动作留痕、只读、导出留痕;
|
- [ ] 审计七类关键动作留痕、只读、导出留痕;
|
||||||
- [ ] AI 四层配置 + Mock 全链路 + 密钥不回显;
|
- [ ] AI 四层配置 + Mock 全链路 + 密钥不回显;
|
||||||
- [ ] 任务中心可查 / 可取消 / 可重试,幂等生效;
|
- [ ] 任务中心可查 / 可取消 / 可重试,幂等生效;
|
||||||
@@ -1368,7 +1372,7 @@ infra/:compose、Nginx、监控、备份脚本占位
|
|||||||
| catalog | `asset:view` / `asset:edit` / `asset:delete` | 资产(被引用仅停用) |
|
| catalog | `asset:view` / `asset:edit` / `asset:delete` | 资产(被引用仅停用) |
|
||||||
| media | `media:view` / `media:generate` | 任务查看 / 提交(任务中心复用) |
|
| media | `media:view` / `media:generate` | 任务查看 / 提交(任务中心复用) |
|
||||||
| delivery | `export:create`★ | 导出 |
|
| delivery | `export:create`★ | 导出 |
|
||||||
| platform | `dict:view` / `dict:edit` | 字典 |
|
| platform | `dict:manage` | 字典(A2 定稿目录,单权限点覆盖查看 / 编辑) |
|
||||||
| platform | `ai:view` / `ai:configure`★ | AI 配置 |
|
| platform | `ai:view` / `ai:configure`★ | AI 配置 |
|
||||||
| platform | `audit:view`★ / `audit:export`★ | 审计查看 / 导出(均为特殊权限) |
|
| platform | `audit:view`★ / `audit:export`★ | 审计查看 / 导出(均为特殊权限) |
|
||||||
| platform | `system:configure` | 系统配置 |
|
| platform | `system:configure` | 系统配置 |
|
||||||
@@ -1387,7 +1391,7 @@ infra/:compose、Nginx、监控、备份脚本占位
|
|||||||
| `/system/customers`、`/system/customers/new`、`/system/customers/:id` | 客户管理 | `customer:view` / `customer:manage` | A3 |
|
| `/system/customers`、`/system/customers/new`、`/system/customers/:id` | 客户管理 | `customer:view` / `customer:manage` | A3 |
|
||||||
| `/system/customer-groups` | 客户组 | `customer_group:manage` | A3 |
|
| `/system/customer-groups` | 客户组 | `customer_group:manage` | A3 |
|
||||||
| `/system/customer-fields/approvals` | 字段审批 | `customer_field:approve` | A3 |
|
| `/system/customer-fields/approvals` | 字段审批 | `customer_field:approve` | A3 |
|
||||||
| `/system/dicts`、`/system/dicts/:type` | 字典 | `dict:view` / `dict:edit` | A4 |
|
| `/system/dicts`、`/system/dicts/:type` | 字典 | `dict:manage` | A4 |
|
||||||
| `/system/settings` | 系统配置 | `system:configure` | A4 |
|
| `/system/settings` | 系统配置 | `system:configure` | A4 |
|
||||||
| `/system/audit-logs`、`/system/audit-logs/:id` | 审计 | `audit:view` | A5 |
|
| `/system/audit-logs`、`/system/audit-logs/:id` | 审计 | `audit:view` | A5 |
|
||||||
| `/material/tasks`、`/material/tasks/:id` | 任务中心 | `media:view` / `media:generate` | A6 |
|
| `/material/tasks`、`/material/tasks/:id` | 任务中心 | `media:view` / `media:generate` | A6 |
|
||||||
|
|||||||
@@ -456,7 +456,7 @@ PRD 5.4.4 要求"多供应商并存、按用途路由、额度预算、健康降
|
|||||||
| `script` | 5.1 | 要素卡、卖点库、脚本模板、批量生成、质量校核、审核入库、版本 | brief_cards / brief_card_index / selling_points / script_templates / scripts / script_versions | 脚本生成、校核、入库 |
|
| `script` | 5.1 | 要素卡、卖点库、脚本模板、批量生成、质量校核、审核入库、版本 | brief_cards / brief_card_index / selling_points / script_templates / scripts / script_versions | 脚本生成、校核、入库 |
|
||||||
| `media` | 5.2 | 图片线、视频线、任务与任务项、分镜、快筛、预览、失败与成本 | media_tasks / media_items / shots / render_profiles / preview_marks | 任务编排、产物管理 |
|
| `media` | 5.2 | 图片线、视频线、任务与任务项、分镜、快筛、预览、失败与成本 | media_tasks / media_items / shots / render_profiles / preview_marks | 任务编排、产物管理 |
|
||||||
| `delivery` | 5.5 | 导出、命名规则、交付清单、归档、下载签名 | exports / export_items / delivery_manifests | 打包、命名、审计 |
|
| `delivery` | 5.5 | 导出、命名规则、交付清单、归档、下载签名 | exports / export_items / delivery_manifests | 打包、命名、审计 |
|
||||||
| `platform` | 5.4.4 / 5.4.6 | AI 配置(模型/路由/提示词/额度)、AI 调用账本、审计、系统配置、成本看板 | ai_providers / ai_routes / ai_prompts / ai_usage / audit_logs / system_configs / cost_budgets | AI 适配层入口、审计写入、成本聚合 |
|
| `platform` | 5.4.4 / 5.4.6 | AI 配置(模型/路由/提示词/额度)、AI 调用账本、审计、系统配置、成本看板 | ai_providers / ai_routes / ai_prompts / ai_usage / audit_logs / system_configs / system_config_versions / cost_budgets | AI 适配层入口、审计写入、成本聚合 |
|
||||||
|
|
||||||
**共享内核**(`packages/shared`,不拥有表):领域事件定义、错误码、权限点常量、Zod schema、分页/游标、ID 生成、时间与命名规则工具。
|
**共享内核**(`packages/shared`,不拥有表):领域事件定义、错误码、权限点常量、Zod schema、分页/游标、ID 生成、时间与命名规则工具。
|
||||||
|
|
||||||
@@ -888,6 +888,7 @@ erDiagram
|
|||||||
| 平台 | `cost_budgets` | 预算与告警阈值 | 按角色/客户/月 |
|
| 平台 | `cost_budgets` | 预算与告警阈值 | 按角色/客户/月 |
|
||||||
| 平台 | `audit_logs` | 审计(append-only) | 按月分区,禁 UPDATE/DELETE |
|
| 平台 | `audit_logs` | 审计(append-only) | 按月分区,禁 UPDATE/DELETE |
|
||||||
| 平台 | `system_configs` | 系统配置(命名、导出、通知) | 带版本与变更审计 |
|
| 平台 | `system_configs` | 系统配置(命名、导出、通知) | 带版本与变更审计 |
|
||||||
|
| 平台 | `system_config_versions` | 系统配置变更历史(append-only:前后值 / 原因 / 操作人) | A4 新增;配置版本与审计可查 |
|
||||||
| 平台 | `outbox_events` | 事务性事件投递 | 已投递标记 |
|
| 平台 | `outbox_events` | 事务性事件投递 | 已投递标记 |
|
||||||
| 平台 | `idempotency_keys` | 请求幂等 | TTL 24 小时 |
|
| 平台 | `idempotency_keys` | 请求幂等 | TTL 24 小时 |
|
||||||
|
|
||||||
@@ -1187,7 +1188,7 @@ sequenceDiagram
|
|||||||
| GET/POST/PATCH | `/ai/providers`、`/ai/routes`、`/ai/prompts` | `ai:view` / `ai:configure` | 模型、路由、提示词 |
|
| GET/POST/PATCH | `/ai/providers`、`/ai/routes`、`/ai/prompts` | `ai:view` / `ai:configure` | 模型、路由、提示词 |
|
||||||
| GET/PUT | `/ai/budgets` | `ai:configure` | 额度与预算 |
|
| GET/PUT | `/ai/budgets` | `ai:configure` | 额度与预算 |
|
||||||
| GET | `/ai/usage` | `ai:view` | 账本查询(按客户 / 模型 / 批次) |
|
| GET | `/ai/usage` | `ai:view` | 账本查询(按客户 / 模型 / 批次) |
|
||||||
| GET/POST/PATCH | `/dicts`、`/dicts/{type}/items` | `dict:view` / `dict:edit` | 字典 |
|
| GET/POST/PATCH | `/dicts`、`/dicts/{type}/items` | `dict:manage` | 字典(A2 定稿的 30 个权限点中字典为单个 `dict:manage`,见 ADR-001) |
|
||||||
| GET | `/audit-logs` | `audit:view` | 审计检索(只读) |
|
| GET | `/audit-logs` | `audit:view` | 审计检索(只读) |
|
||||||
| POST | `/audit-logs/export` | `audit:export` | 审计导出(自身也审计) |
|
| POST | `/audit-logs/export` | `audit:export` | 审计导出(自身也审计) |
|
||||||
| GET/PUT | `/system/configs` | `system:configure` | 命名规则、导出设置、通知 |
|
| GET/PUT | `/system/configs` | `system:configure` | 命名规则、导出设置、通知 |
|
||||||
@@ -2003,6 +2004,7 @@ lingxi/
|
|||||||
| V0.4 | 2026-11-02 | 图片线改为确定性流水线(依据素材工坊 `sucaigongfang` 实测实现):`image:matting` / `image:render` / `delivery:zip` 三队列、PSD 图层命名约定与解析入库校验、ONNX 抠图与低质量降级、canvas 合成与字体自检、批次参数与命名快照、模板与批次表(`templates` / `template_versions` / `production_batches` / `production_tasks`);3.4 / 7.3 重写、新增 8.11 D-11、R-T-17~R-T-19、附录 F 补素材工坊行;需求基线对齐 PRD V1.6 |
|
| V0.4 | 2026-11-02 | 图片线改为确定性流水线(依据素材工坊 `sucaigongfang` 实测实现):`image:matting` / `image:render` / `delivery:zip` 三队列、PSD 图层命名约定与解析入库校验、ONNX 抠图与低质量降级、canvas 合成与字体自检、批次参数与命名快照、模板与批次表(`templates` / `template_versions` / `production_batches` / `production_tasks`);3.4 / 7.3 重写、新增 8.11 D-11、R-T-17~R-T-19、附录 F 补素材工坊行;需求基线对齐 PRD V1.6 |
|
||||||
| V0.3 | 2026-11-02 | 吸收 baoliangmofang:素材为主对象 + 规格为属性(`materials` / `material_versions` / `material_specs` / `material_files` / `material_links` / `upload_sessions`);分片直传 + hash 秒传 + 短时效签名 URL + `StorageProvider` 接口(2.5 / 7.9);送审与外部提审登记、分享链接安全口径(`share_links`);投放登记与日指标(`placements` / `material_metrics_daily`)、阈值同源与派生指标不落库(5.7);新增 `media:post` / `embed:index` 队列、素材端点 13 个、3.6 素材与送审状态机、7.9 入库转码链路、R-T-15 / R-T-16、附录 F 补 6 行;向量检索改为「M3 起 pgvector、访问收敛 VectorStore」;需求基线对齐 PRD V1.5 |
|
| V0.3 | 2026-11-02 | 吸收 baoliangmofang:素材为主对象 + 规格为属性(`materials` / `material_versions` / `material_specs` / `material_files` / `material_links` / `upload_sessions`);分片直传 + hash 秒传 + 短时效签名 URL + `StorageProvider` 接口(2.5 / 7.9);送审与外部提审登记、分享链接安全口径(`share_links`);投放登记与日指标(`placements` / `material_metrics_daily`)、阈值同源与派生指标不落库(5.7);新增 `media:post` / `embed:index` 队列、素材端点 13 个、3.6 素材与送审状态机、7.9 入库转码链路、R-T-15 / R-T-16、附录 F 补 6 行;向量检索改为「M3 起 pgvector、访问收敛 VectorStore」;需求基线对齐 PRD V1.5 |
|
||||||
| V0.1.4 | 2026-11-02 | React 19 的 Semi 包名改为 **`@douyinfe/semi-ui-19`**(禁与 `@douyinfe/semi-ui` 混装,ESLint 强制);明确入口仍需 `import '@douyinfe/semi-ui-19/react19-adapter'`(React 19 已移除 `react-dom` 的 `createRoot` 导出) |
|
| V0.1.4 | 2026-11-02 | React 19 的 Semi 包名改为 **`@douyinfe/semi-ui-19`**(禁与 `@douyinfe/semi-ui` 混装,ESLint 强制);明确入口仍需 `import '@douyinfe/semi-ui-19/react19-adapter'`(React 19 已移除 `react-dom` 的 `createRoot` 导出) |
|
||||||
|
| V0.4(A4 回写) | 2026-11-04 | A4 数据字典与系统配置:新增 `system_config_versions`(配置变更前后值 / 版本 / 审计);字典权限按 A2 定稿统一为 `dict:manage`(ADR-001);明确字典通配表 `dict_types` / `dict_items` 与三层合并、R-10 快照口径 |
|
||||||
|
|
||||||
## 待办
|
## 待办
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user