Files
shanxia2.0/docs/superpowers/specs/2026-06-29-fresh-mint-master-plan.md
T
2026-06-30 23:44:22 +08:00

296 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# shanxia2.0 Fresh Mint UI 对齐 — 总改造计划
> **基准**:zkxw/web-admin(中科兴皖)
> **目标**:shanxia2.0/web-admin(山峡化工)
> **日期**:2026-06-29
> **客户要求**:只改 UI,不影响功能;Portal 顶栏一级 + 左侧二三级菜单结构不变
---
## 一、背景与目标
两项目同源(Fresh Mint + Art Design Pro),shanxia 使用 **Portal 布局**(`MenuTypeEnum.PORTAL`),zkxw 使用 **TOP_LEFT + ArtMixedMenu**。交互与视觉应对齐 zkxw,壳层组件不同但 Token、内容区骨架一致。
**视觉权威**:`docs/web-admin-ui-spec-fresh-mint.md`
**模式选型**:`docs/web-admin-ui-pattern-index.md`(P01–P27)
---
## 二、改造边界(硬约束)
| 允许 | 禁止 |
|------|------|
| 全局 SCSS(`assets/styles/core/*.scss`) | 修改业务 `<script>` 逻辑 |
| Vue template 的 class / 属性 / 结构骨架 | 改 API、路由、权限、校验 |
| Portal 壳层样式微调(高度、颜色、WorkTab) | 替换 Portal 布局架构 |
| 从 zkxw 拷贝 Demo 模板页 | 整文件覆盖 `app.scss` |
| 文档与验收清单 | 跨端混色(web 勿用 `#0a9f6d`) |
**shanxia 保留项**(优于 zkxw,勿回退):
- `SystemViewDialog` 四列 `ViewKvGrid`
- Portal 顶栏 + 侧栏交互结构
---
## 三、进度总览
```
Step 0 基线文档与对照页 ✅ 已完成
Step 1 全局 SCSS + Portal 壳层 ✅ 已完成
Step 1b WorkTab 最多 10 个标签 ✅ 已完成
Step 2 分模块 class 补齐 ✅ 已完成
Step 3 bx/db 模块样式收敛 ✅ 2026-06-29
Step 4 Demo 模板页 + 路由 ✅ 已完成
Step 5 CRM 旧布局整页改造 ✅ 已完成
Step 6 详情/统计/看板页查漏 ✅ 2026-06-29
Step 7 全量回归与收尾 ✅ 2026-06-29
```
**关联文档**:
| 文档 | 用途 |
|------|------|
| `2026-06-29-fresh-mint-content-ui-step0-1.md` | Step 0/1 改动明细与回归清单 |
| `2026-06-29-fresh-mint-step2-module-plan.md` | Step 2 逐页勾选表(执行中更新) |
---
## 四、各 Step 详细说明
### Step 0 — 基线文档 ✅
**产出**:对照页、功能回归清单、改造边界
**对照页**(每模块抽 1 页视觉 + 功能基准):
| 模块 | 路径 |
|------|------|
| 系统 | `views/system/user/index.vue` |
| CRM | `views/crm/customer/index.vue` |
| PL | `views/pl/plan/index.vue` |
| 报销 | `views/bx/reimburse/apply/index.vue` |
| 地磅 | `views/db/weighing/index.vue` |
---
### Step 1 — 全局 SCSS + Portal 壳层 ✅
**已改文件**:
| 文件 | 要点 |
|------|------|
| `fresh-mint-tokens.scss` | `--primary` 别名、`--mint-success-*` |
| `el-light.scss` / `el-ui.scss` | success `#059669`、表头 muted、primary 色阶 |
| `app.scss` | 筛选 label 11px、弹窗顶对齐、Portal 兜底 |
| `style.portal.scss` | 顶栏 56px |
| `art-portal-header` / `art-portal-top-nav` | 一级模块卡片样式 |
| `art-sidebar-menu/theme.scss` | 选中绿底白字 |
| `art-work-tab/index.vue` | padding 对齐 |
**未改**:`main.ts` 的 `ElTable border: true`(与 zkxw 一致)
---
### Step 1b — WorkTab 上限 ✅
**文件**:`store/modules/worktab.ts`
**规则**:`MAX_OPEN_TABS = 10`;新开前淘汰最早**未固定** tab;全固定且满 10 则拒绝新开。
---
### Step 2 — 分模块 class 补齐 ✅(基本完成)
**原则**:只改 template;不改 script。
**单页检查清单**(每改一页勾选):
- [ ] `h2.title-bar-heading`(列表主标题竖条)
- [ ] 筛选搜索/重置 `:loading="loading"`
- [ ] 工具栏「已选 N 项」置前;批量操作带 `<el-icon>`
- [ ] 状态/类型列 `<el-tag size="small">`
- [ ] 弹窗 `dialog-form-layout` + `label-position="top"`
- [ ] 操作列 `fixed="right"`,min-width ≥ 260px
- [ ] 表格列用 `min-width` 而非 `width`
**模块完成情况**:
| 模块 | 页面数 | 状态 | 备注 |
|------|--------|------|------|
| system | 14 | ✅ | tenant~workflow 全部完成 |
| CRM 列表 | 10 | ✅ | 见 Step 5 遗留 3 页 |
| bx | 12 | ✅ | 此前已对齐 |
| db | 4 | ✅ | plans/inventory/weighing/dashboard |
| PL | 17+ | ✅ | 含 freight 子 Panel |
**Step 2 遗留**(转入 Step 5/6):
| 路径 | 原因 |
|------|------|
| `crm/contract/template/index.vue` | 旧 RuoYi `app-container` + `el-card` |
| `crm/contract/change/index.vue` | 同上 |
| `crm/contract/approval/index.vue` | 同上 |
| `crm/opportunity/kanban.vue` | 旧布局 |
| `crm/opportunity/funnel.vue` | 旧布局 |
| `crm/opportunity/statistics.vue` | 旧布局 |
| `crm/contract/detail.vue` / `form.vue` | 详情/表单页待抽查 |
---
### Step 3 — bx / db 模块样式收敛 ✅(2026-06-29)
**目标**:减少页面私有 SCSS,统一走全局 Token + 模块入口。
| 序号 | 任务 | 文件 | 状态 |
|------|------|------|------|
| 3.1 | bx 样式审计 | `src/styles/bx/index.scss` | ✅ 删除 :root/独立 layout/与 app 重复规则,1936→955 行 |
| 3.2 | bx 附件样式 | `src/styles/bx/attachment.scss` | ✅ 硬编码色值改 `--primary`/`--text` 等 Token |
| 3.3 | db 样式审计 | `src/styles/db-module.scss` | ✅ 统一 `--border`/`--text`/`--surface` |
| 3.4 | 页面 scoped 清理 | `views/bx/**/*.vue` | ✅ reimburse/apply、payment、reimburse/approve |
| 3.5 | 页面 scoped 清理 | `views/db/**/*.vue` | ✅ 无 scoped/硬编码色(已确认) |
**附带**:`fresh-mint-tokens.scss` 补充 `--text`/`--border`/`--danger` 等 bx/db 语义别名,修复 bx 原 `--text-muted: #1e293b` 错误。
---
## Step 4 — Demo 模板页 + 路由 ✅(2026-06-29)
| 序号 | 项 | 状态 |
|------|-----|------|
| 4.1 | 工作台 `/#/demo/console` | ✅ |
| 4.2 | 标准列表 `views/demo/unit/index.vue` | ✅ |
| 4.3 | 复杂列表 `views/demo/order/index.vue` | ✅ |
| 4.4 | 商品 `views/demo/product/index.vue` | ✅ |
| 4.5 | 树形分类 `views/demo/category/index.vue` | ✅ |
| 4.6 | 用户 CRUD → `/demo/user`(复用 `system/user`) | ✅ |
| 4.7 | `product-view-dialog` 组件 | ✅ |
| 4.8 | 路由 `router/modules/demo.ts` | ✅ |
| 4.9 | Mock API `api/demo/*`(无后端) | ✅ |
**说明**:Demo 数据走 `src/api/demo/mock-api.ts` 内存 Mock;侧栏「Demo」菜单在 `VITE_ACCESS_MODE=frontend` 下自动可见。
---
### Step 5 — CRM 旧布局整页改造 ✅(2026-06-29)
| 页面 | 路径 | 状态 |
|------|------|------|
| 合同模板 | `views/crm/contract/template/index.vue` | ✅ |
| 合同审批记录 | `views/crm/contract/approval/index.vue` | ✅ |
| 合同变更 | `views/crm/contract/change/index.vue` | ✅ |
**改造要点**:`page-container` 骨架、Fresh Mint 筛选/工具栏/表格/分页、弹窗 `dialog-form-layout`、状态 `el-tag`、按钮带图标与 loading;业务逻辑与权限保持不变。
---
### Step 6 — 详情 / 统计 / 看板页查漏 ✅(2026-06-29)
| 类型 | 页面 | 状态 |
|------|------|------|
| 看板 | `crm/opportunity/kanban.vue` | ✅ Fresh Mint 筛选 + 看板 Token |
| 漏斗 | `crm/opportunity/funnel.vue` | ✅ stat-grid + chart-panel + 薄荷色 ECharts |
| 统计 | `crm/opportunity/statistics.vue` | ✅ 对齐 `clue/statistics` 骨架 |
| 详情 | `crm/contract/detail.vue` | ✅ panel-top + detail-toolbar 外壳 |
| 表单 | `crm/contract/form.vue` | ✅ panel-top 外壳 |
| 报价 | `crm/quote/detail.vue`、`form.vue` | ✅ 已是 Mint(Step 2 前已改造) |
| PL | `pl/plan/detail.vue`、`form.vue` | ✅ 已是 Mint(无需改动) |
---
### Step 7 — 全量回归与收尾 ✅(2026-06-29)
| 序号 | 任务 | 状态 |
|------|------|------|
| 7.1 | 功能回归清单(见第六节) | ✅ 代码审查 + 模块抽测路径已列 |
| 7.2 | 浏览器抽测 1366 / 1920 / 窄屏 | ⬜ 需人工在浏览器完成(见下表) |
| 7.3 | `pnpm build` | ✅ 通过(修复 `category-path-display` → `@/api/demo` 导入) |
| 7.4 | `step2-module-plan.md` | ✅ 各模块均已 ✅ |
| 7.5 | `./scripts/update-graph.sh all` | ✅ |
| 7.6 | OpenSpec 归档 | ⬜ 可选,未执行 |
**构建修复**:`utils/category-path-display.ts` 原从 `@/api/admin` 导入 Demo 专用 `fetchCategoryList`(Step 4 已迁至 `api/demo`),导致 Vite build 失败;已改为 `@/api/demo`。
**ESLint**:`pnpm lint` 仍有大量历史 Prettier/未使用变量告警(非本次 Fresh Mint 引入);`pnpm build` 为发布门禁,已通过。
**建议浏览器抽测路径(每模块 1 页)**:
| 模块 | Hash 路由 | 验证点 |
|------|-----------|--------|
| Demo | `/#/demo/unit` | 列表 CRUD、弹窗两列、分页 |
| system | `/#/demo/user` | 多选、批量删除、权限按钮 |
| CRM | `/#/crm/customer` | 筛选 loading、Tag 状态 |
| CRM 看板 | `/#/crm/opportunity/kanban` | 看板滚动、卡片操作 |
| bx | `/#/bx/expense-item` | stats + 列表 + 弹窗 |
| db | `/#/db/weighing` | 日期快捷、表格 |
| PL | `/#/pl/plan` | 工具栏、操作列 fixed |
| WorkTab | 任意模块连开 11 页 | 最早未固定 tab 自动关闭 |
---
## 五、推荐执行顺序(给后续会话)
按**风险低 → 价值高**排列,每次会话完成 1~2 个 Step 或一个批次:
```
已完成 Step 0 → Step 1 → Step 1b → Step 2(列表页)
下一步 Step 4(Demo 模板,利于后续新页开发)
然后 Step 5.1 → 5.2 → 5.3(CRM 三页)
并行 Step 3(bx/db SCSS,可与 Step 5 交错)
随后 Step 6(看板/统计/详情)
最后 Step 7(全量回归)
```
**单次会话建议粒度**:
- 小:1 个 index.vue 的 Step 2 清单项
- 中:Step 5 中 1 个整页改造 + 回归
- 大:Step 4 全部 Demo 页(建议拆 2 次)
---
## 六、功能回归清单(每模块至少 1 页)
改造后必测(Step 7 代码审查已覆盖结构;浏览器勾选由人工完成):
- [x] 列表:查询、重置、分页、排序、多选(各模块模板页已对齐)
- [x] 新增/编辑:弹窗 `dialog-form-layout`、按钮图标(Step 2/5/6)
- [x] 删除/批量:确认框 + 创建人限制工具(`creator-delete` 已接入)
- [x] 查看详情:Tag 语义色(OpenSpec ui-conventions)
- [x] 权限:`hasPermi` / `hasContractPerm` 等业务守卫保留
- [x] WorkTab:`MAX_OPEN_TABS = 10`(`store/modules/worktab.ts`)
- [ ] 浏览器实机:1366 / 1920 / 窄屏弹窗单列降级
---
## 七、风险与注意事项
1. **勿整文件覆盖 `app.scss`**:shanxia 含 bx/db/Portal 专用段落,仅 cherry-pick。
2. **creator-delete 合并**:批量删除注意 `handleDelete` 函数体 `{` 勿漏(曾出现语法错误)。
3. **双 loading 变量**:bx 部分页用 `searchLoading` / `pendingLoading`,保持一致即可。
4. **CRM 合同子页**:改造时保留 `hasContractPerm` 权限判断。
5. **graphify**:改 Vue/SCSS 后执行 `./scripts/update-graph.sh frontend`。
---
## 八、快速命令
```bash
# 前端开发
cd web-admin && pnpm dev
# 构建验证
cd web-admin && pnpm build
# 更新知识图谱
cd /Users/zlwu/work/00code/shanxia2.0 && ./scripts/update-graph.sh frontend
# 对照 zkxw 同路径文件
diff web-admin/src/views/pl/plan/index.vue ../zkxw/web-admin/src/views/pl/plan/index.vue
```
---
## 九、变更记录
| 日期 | 内容 |
|------|------|
| 2026-06-29 | Step 7:`pnpm build` 通过;graphify all;修复 category-path-display 导入 |
| 2026-06-29 | Step 2 system/CRM/bx/db/PL 列表页 class 补齐 |