168 lines
7.6 KiB
Markdown
168 lines
7.6 KiB
Markdown
# research
|
||
|
||
## Research scope
|
||
|
||
本研究用于支撑 `011-frontend-speckit-alignment` 的实施阶段,聚焦以下问题:
|
||
|
||
1. 前端仓如何稳定回指 `water-docs` 的正式 Speckit 工件。
|
||
2. 页面模板规范与样例索引如何分层,避免入口文件膨胀。
|
||
3. 实际页面样例如何组织成可复用的模板索引,并支持一页多模板参考。
|
||
4. 当前权限边界在普通页面、列表列配置与 BPM 场景之间应如何准确表述。
|
||
|
||
## Decision 1: `water-docs` 继续作为正式 Speckit 单一真源
|
||
|
||
**Decision**
|
||
|
||
- 正式 `spec / plan / tasks / baseline / docs-validation / final-verdict` 全部继续落在 `water-docs/specs/011-frontend-speckit-alignment/`。
|
||
- `water-frontend` 只承载实现侧入口说明、模板规则与样例索引,不复制 `.specify/`,也不维护第二套正式流程。
|
||
- `AGENTS.md` 与 `CLAUDE.md` 必须把“从 frontend 启动”和“回 docs 启动”的边界写成相同口径。
|
||
|
||
**Rationale**
|
||
|
||
- 该工作本质是多仓协作规则整理,不是单独的前端局部优化。
|
||
- `water-docs` 根仓的 `.specify/` 已是唯一正式流程入口,继续复用能避免前端仓和平行 docs 口径分叉。
|
||
- frontend 只保留实施入口,能让实现人员在正确位置读取正式文档,而不把 spec 工件散落到代码仓。
|
||
|
||
**Alternatives considered**
|
||
|
||
- 在 `water-frontend` 新建独立 `.specify/`:拒绝,破坏单一事实来源。
|
||
- 将 spec 只保留在前端仓:拒绝,本 feature 同时约束 docs 与 frontend 两边协作方式。
|
||
|
||
## Decision 2: 模板规范采用“规则文件 + 样例索引文件”双层结构
|
||
|
||
**Decision**
|
||
|
||
- `FRONTEND_PAGE_TEMPLATE_GUIDE.md` 作为规则层,承载模板分类、元模型、命名规则、权限边界与选型规则。
|
||
- `FRONTEND_PAGE_TEMPLATE_INDEX.md` 作为样例层,承载 `src/views` 到模板类型的实际映射、母板页优先级、主模板/辅模板关系与复用建议。
|
||
- `AGENTS.md` 与 `CLAUDE.md` 只做入口,不再重复内嵌大段模板分类正文。
|
||
|
||
**Rationale**
|
||
|
||
- 仅有规则文件时,实现人员仍需要自己搜索真实样例。
|
||
- 仅有样例索引时,又无法得到统一的命名、目录与权限接入规范。
|
||
- 双层结构既能定义规则,又能快速回扣现有母板页。
|
||
|
||
**Alternatives considered**
|
||
|
||
- 把全部内容塞回 `AGENTS.md` / `CLAUDE.md`:拒绝,入口文件会再次膨胀。
|
||
- 只保留 guide,不单独建 index:拒绝,无法满足“可复用样例映射”和“母板页优先级”要求。
|
||
|
||
## Decision 3: 页面分类按交互结构组织,并允许一页多模板参考
|
||
|
||
**Decision**
|
||
|
||
- 页面模板分类维持按交互结构划分,而不是按业务域命名:
|
||
- 标准列表查询页
|
||
- 左树右表页
|
||
- 左树右详情维护页
|
||
- 弹窗表单页
|
||
- 导入上传页
|
||
- 详情展示页
|
||
- 配置 / 权限页
|
||
- BPM / 流程页
|
||
- 报表 / 可视化容器页
|
||
- 登录 / 认证容器页
|
||
- 组合容器 / 工作台页
|
||
- 对同时包含查询列表、弹窗表单、导入动作的页面,先确定主模板,再补充辅模板参考,不强行要求单一分类。
|
||
|
||
**Rationale**
|
||
|
||
- 同一业务域常同时包含多种页面交互形态。
|
||
- 页面生成与样例复用更依赖交互骨架,而不是模块名称。
|
||
- 允许“一页多模板参考”,能更准确映射 `system/user`、`settings/priceTemplate` 等复合页面。
|
||
|
||
**Alternatives considered**
|
||
|
||
- 按业务模块分类:拒绝,不能直接指导页面骨架复用。
|
||
- 按组件技术碎片分类:拒绝,过于细碎,不利于协作入口阅读。
|
||
|
||
## Decision 4: 权限结论以代码证据为准,不扩写未证实能力
|
||
|
||
**Decision**
|
||
|
||
- 计划和后续任务保持以下权限边界:
|
||
- 角色权限:已存在
|
||
- 按钮权限:已存在
|
||
- 菜单 / 路由权限:已存在
|
||
- 数据权限:已存在
|
||
- 列表列可见配置:已存在,且为后端持久化能力
|
||
- BPM 字段权限:已存在,仅限 BPM 场景
|
||
- 普通业务表单全局字段权限框架:当前未发现通用实现
|
||
|
||
**Evidence paths**
|
||
|
||
- 用户信息与权限集合加载:`../water-frontend/src/store/modules/user.ts`
|
||
- 菜单路由缓存与动态路由生成:`../water-frontend/src/store/modules/permission.ts`、`../water-frontend/src/permission.ts`
|
||
- 按钮权限指令:`../water-frontend/src/directives/permission/hasPermi.ts`
|
||
- 角色权限指令:`../water-frontend/src/directives/permission/hasRole.ts`
|
||
- 角色菜单/数据权限 API:`../water-frontend/src/api/system/permission/index.ts`
|
||
- 数据权限页面消费:`../water-frontend/src/views/system/role/RoleDataPermissionForm.vue`
|
||
- 菜单权限与权限标识录入:`../water-frontend/src/views/system/menu/MenuForm.vue`
|
||
- 列可见配置 API 与前端存取:`../water-frontend/src/api/system/userFormConfig.ts`、`../water-frontend/src/components/ColumnSetting/hooks/useColumnSettingStorage.ts`
|
||
- BPM 字段权限消费:`../water-frontend/src/views/bpm/processInstance/create/ProcessDefinitionDetail.vue`
|
||
|
||
**Rationale**
|
||
|
||
- spec 已明确要求不能把未证实的能力描述为已具备。
|
||
- 当前工作只需要如实表达边界,不新增权限模型设计。
|
||
|
||
**Alternatives considered**
|
||
|
||
- 统一称“字段权限不存在”:拒绝,BPM 字段权限与列表列配置都属于已存在能力。
|
||
- 直接规划普通业务表单字段权限:拒绝,超出本轮 feature 范围。
|
||
|
||
## Decision 5: `contracts/` 保留目录,但本 feature 不新增外部接口契约
|
||
|
||
**Decision**
|
||
|
||
- 本 feature 保留 Speckit 标准 `contracts/` 目录结构,但不新增 API / CLI / 外部系统契约文件。
|
||
- 前端协作入口、模板规范与样例索引约束由 `plan.md`、`quickstart.md` 与前端 Markdown 文件承接。
|
||
|
||
**Rationale**
|
||
|
||
- 本轮交付对象是文档规范与协作方式,而不是新增系统接口。
|
||
- 强行编造 OpenAPI 或伪契约不会提升可实施性,反而会引入假细节。
|
||
|
||
**Alternatives considered**
|
||
|
||
- 创建伪 API contract:拒绝,与 feature 无关。
|
||
- 完全跳过 `contracts/` 目录:不采用,保留标准目录结构更利于后续延展。
|
||
|
||
## Decision 6: 验证以文档一致性与 evidence 闭环为主
|
||
|
||
**Decision**
|
||
|
||
- 本轮主要验证产物为:
|
||
- `baseline.md`
|
||
- `docs-validation.md`
|
||
- `final-verdict.md`
|
||
- 最小文档校验命令固定为:
|
||
- `make validate-file FILE=specs/011-frontend-speckit-alignment/quickstart.md`
|
||
- `make validate-file FILE=specs/011-frontend-speckit-alignment/data-model.md`
|
||
- `make validate-file FILE=specs/011-frontend-speckit-alignment/research.md`
|
||
- `make validate-file FILE=specs/011-frontend-speckit-alignment/docs-validation.md`
|
||
- `make check-links`
|
||
- 不强制执行 frontend build / lint,因为本轮未触达 Vue 业务代码。
|
||
|
||
**Rationale**
|
||
|
||
- 变更范围仅涉及 Markdown 协作文件与规范文件。
|
||
- spec 已将交付边界限定为前端协作说明、独立规范文件与 evidence 工件。
|
||
|
||
**Alternatives considered**
|
||
|
||
- 强制跑前端构建:未采用,与当前改动无直接关联。
|
||
- 不做任何 evidence:拒绝,无法满足 spec 对可追溯验证的要求。
|
||
|
||
## Research conclusion
|
||
|
||
本 feature 的实施路径已经明确:
|
||
|
||
1. 在 `water-docs` 保持正式 `spec / plan / tasks / evidence` 单一真源。
|
||
2. 在 `water-frontend` 形成:
|
||
- 入口规则:`AGENTS.md`、`CLAUDE.md`
|
||
- 模板规则文件:`FRONTEND_PAGE_TEMPLATE_GUIDE.md`
|
||
- 样例索引文件:`FRONTEND_PAGE_TEMPLATE_INDEX.md`
|
||
3. 对权限边界严格按代码证据回写,不把普通业务表单字段权限误写为既有能力。
|
||
4. 用 `baseline.md`、`docs-validation.md`、`final-verdict.md` 固定基线、验证与最终结论,不更新本轮不适用的治理台账。
|