@qilitt-mickey/vue3-temp-skill 1.1.24 → 1.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/SKILL.md +83 -43
  2. package/package.json +15 -1
  3. package/references/auth-pages.md +217 -0
  4. package/references/base-code-dict.md +7 -0
  5. package/references/chart-echarts.md +1 -1
  6. package/references/code-quality.md +13 -14
  7. package/references/crud-pages.md +21 -17
  8. package/references/data-compare.md +7 -0
  9. package/references/data-mapping.md +7 -0
  10. package/references/data-screen.md +7 -0
  11. package/references/data-writeback.md +7 -0
  12. package/references/design-handoff.md +210 -403
  13. package/references/design-system.md +111 -709
  14. package/references/directives-advanced.md +7 -0
  15. package/references/download-export.md +7 -0
  16. package/references/feedback-loading.md +7 -0
  17. package/references/feedback-ui.md +7 -0
  18. package/references/file-management.md +7 -0
  19. package/references/flowchart-g6.md +7 -0
  20. package/references/form-advanced.md +1 -1
  21. package/references/graph-relation.md +7 -0
  22. package/references/i18n-localization.md +230 -0
  23. package/references/layout-theme.md +1 -1
  24. package/references/particles.md +7 -0
  25. package/references/project-inventory.md +7 -0
  26. package/references/qrcode-barcode.md +7 -0
  27. package/references/rich-text.md +7 -0
  28. package/references/seamless-scroll.md +7 -0
  29. package/references/table-vxe.md +1 -1
  30. package/references/tree-table.md +7 -0
  31. package/references/verify-captcha.md +7 -0
  32. package/references/websocket-realtime.md +7 -0
  33. package/references/workflow-bpmn.md +7 -0
  34. package/scripts/ai-content-audit.mjs +244 -0
  35. package/scripts/ai-match-audit.mjs +348 -0
  36. package/scripts/ai-workflow-sim.mjs +393 -0
  37. package/scripts/analyze-deps.mjs +278 -0
  38. package/scripts/check.cmd +7 -0
  39. package/scripts/check.mjs +95 -0
  40. package/scripts/cli.mjs +153 -0
  41. package/scripts/generate-index.mjs +214 -0
  42. package/scripts/match.py +323 -0
  43. package/scripts/modules.json +348 -0
  44. package/scripts/scaffold-module.mjs +232 -0
  45. package/scripts/validate.mjs +256 -0
package/SKILL.md CHANGED
@@ -7,7 +7,25 @@ tags: [vue3, typescript, element-plus, vant, pinia, vite, unocss, crud, componen
7
7
 
8
8
  # Vue 3 项目开发规范技能包
9
9
 
10
- 执行顺序:命中模块 `core-kernel`读命中 `references/<模块>.md` → 生成 → 执行 `code-quality` → 回复含审查结果块。
10
+ 执行顺序:运行 `python scripts/match.py "<需求>"` 获取精确匹配 `load_files` 读参考文件 → 生成 → 按 `quality_gates` 检查 → 执行 `code-quality` → 回复含审查结果块。
11
+
12
+ > **模块路由优先用脚本**:`python scripts/match.py "需求描述"` 输出 JSON,含命中模块、同批加载、闸门项、加载文件清单。AI 按此结果加载文件,不自行推理匹配。无 Python 环境时回退至下方路由表手动匹配。
13
+
14
+ ### 脚本工具
15
+
16
+ | 命令 | 用途 |
17
+ |------|------|
18
+ | `python scripts/match.py "<需求>"` | **运行时匹配器**(AI 调用):输出命中模块、同批加载、闸门项、文件清单 |
19
+ | `python scripts/match.py --batch` | 批量测试 15 个典型场景 |
20
+ | `npm run check` | **发布前全量检查**(5 项任一失败即中断) |
21
+ | `npm run validate` | 结构校验:frontmatter、路由表一致性、孤立模块、交叉引用 |
22
+ | `npm run audit` | 命中精度审计:关键词重叠、盲区、模块评分、边界冲突 |
23
+ | `npm run content` | 内容可用性审计:样板完整性、Must-do 清单 |
24
+ | `npm run deps` | 依赖图分析:断链、循环依赖、引用热度 |
25
+ | `npm run match:batch` | 批量测试(npm 封装) |
26
+ | `node scripts/cli.mjs --list` | 列出所有可用命令 |
27
+
28
+ > `npm run release` 会自动先执行全量检查,通过后才升版本、提交、发布。
11
29
 
12
30
  ## 术语约定
13
31
 
@@ -29,7 +47,7 @@ tags: [vue3, typescript, element-plus, vant, pinia, vite, unocss, crud, componen
29
47
  - **精简出厂**:模板 `views/` 仅保留登录/首页等壳页面;**业务标准样板**在本包 `references/`(如 `crud-pages`、`detail-page`)
30
48
  - **依赖分层**:`package.json` 仅 **core**;**addon** 默认不装;缺包时装依赖后须按 `addon-enable.md` **逐文件恢复配置**(非自动)
31
49
  - 壳层行为(顶部 tag / 侧栏 / keep-alive / `useDetail`)以**当前项目**已有实现为准
32
- - **双轨**:无设计 handoff → 保持模版出厂;有设计落地 → 读 `design-handoff.md` **原子步骤**(`Theme`/`Version`/令牌整组,禁止只改主色)
50
+ - **双轨**:无设计 handoff → 保持模版出厂;有设计落地 → 读 `design-handoff.md` 逐文件修改清单 + 设计 Skill `project-implementation-protocol.md`
33
51
 
34
52
  ## 使用方式
35
53
 
@@ -70,52 +88,54 @@ tags: [vue3, typescript, element-plus, vant, pinia, vite, unocss, crud, componen
70
88
  | addon / 查 Re* 名 / 装依赖 | `references/project-inventory.md` |
71
89
  | **启用精简模板已删的 addon(装包 + 改配置)** | `references/addon-enable.md`(与功能模块同读) |
72
90
  | 写完代码后(闸门,非功能命中) | `references/code-quality.md` |
73
- | 设计交接块 / **design-handoff/v1 JSON** / 上游令牌产出落地 | `references/design-handoff.md`(+ `design-system`) |
74
- | **设计模式**(设计 Skill 产出存在时触发) | `crud-pages.md` 设计模式样板 + `design-system.md` Step 3.5 |
91
+ | 设计交接块 / **design-handoff/v1 JSON** / 上游令牌产出落地 | `references/design-handoff.md`(逐文件修改清单)+ `design-system.md`(项目设计系统说明) |
92
+ | **设计模式**(设计 Skill 产出存在时触发) | `crud-pages.md` 设计模式样板 + 设计 Skill `project-implementation-protocol.md`(1:1 还原协议) |
75
93
 
76
94
  ### 标准业务面
77
95
 
78
96
  | 模块 | 关键词 |
79
97
  |------|--------|
80
- | **http-api** | 接口、http、加密、API |
81
- | **crud-pages** | 列表、表格、查询、管理、CRUD、新增编辑、操作列、行操作 |
82
- | **detail-page** | 详情、编辑页、查看页、新开路由、toDetail、activePath、showLink、顶部 tag |
83
- | **data-writeback** | 回显、回填、useFormCheck |
84
- | **permission-auth** | 权限、v-auth、roles、ReAuth |
85
- | **layout-theme** | 布局、主题、暗黑、`--vts-*`、UnoCSS |
86
- | **design-system** | 设计规范、UI 规范、按 XX 规范适配、design-tokens、主题色系、设计交接块 |
87
- | **icons** | 图标、svg-icon、Iconify、ReIconPicker、菜单图标 |
88
- | **feedback-loading** | message、loading、确认框 |
89
- | **base-code-dict** | 字典、baseCode、码表 |
90
- | **api-check** | 联调、mock、契约、对接后端 |
98
+ | **http-api** | 接口、http、加密、API、请求、响应、axios |
99
+ | **crud-pages** | 列表、表格、查询、管理、CRUD、新增、行编辑、操作列、行操作、分页、筛选、批量、排序 |
100
+ | **detail-page** | 详情、编辑页、查看页、新开路由、toDetail、activePath、showLink、顶部 tag、跳转 |
101
+ | **data-writeback** | 回显、回填、回写、useFormCheck、编辑数据 |
102
+ | **permission-auth** | 权限、v-auth、roles、ReAuth、按钮权限、页面权限、角色可见 |
103
+ | **layout-theme** | 布局、主题、暗黑、`--vts-*`、UnoCSS、夜间模式、换肤、侧栏、标签页、面包屑 |
104
+ | **design-system** | 设计规范、UI 规范、按 XX 规范适配、design-tokens、主题色系、令牌体系、暗色模式 |
105
+ | **icons** | 图标、svg-icon、Iconify、ReIconPicker、菜单图标、icon |
106
+ | **feedback-loading** | message、loading、确认框、提示、加载、操作反馈、骨架屏 |
107
+ | **base-code-dict** | 字典、baseCode、码表、下拉字典、数据字典 |
108
+ | **api-check** | 联调、mock、契约、对接后端、接口核对 |
109
+ | **i18n-localization** | 国际化、多语言、i18n、vue-i18n、locale、语言切换、语言包、useI18n、ReLanguageSwitch |
110
+ | **auth-pages** | 登录、注册、忘记密码、重置密码、认证、auth、login、register、signup、forgot-password、找回密码(**设计自由,仅规范流程**) |
91
111
  | **ui-components** | 新建 Re*、type.ts、组件目录;**用法见各功能模块**(本文件仅索引) |
92
112
 
93
113
  ### 专项能力包
94
114
 
95
115
  | 模块 | 关键词 |
96
116
  |------|--------|
97
- | **tree-table** | 树表、ReTreeLine、handleTree |
98
- | **table-vxe** | vxe、高性能表格 |
99
- | **form-advanced** | 弹窗、ReDialog、ReDialogResize、锚点、卡片选择、地址解析、ReSelectQuery、级联 |
100
- | **data-compare** | v-compare、变更汇总 |
101
- | **file-management** | 附件、ReAttachment、ReFileViewer、预览、上传 |
102
- | **download-export** | 导出、excel、blob、下载文件 |
103
- | **rich-text** | 富文本、wangeditor、ReRichText |
104
- | **chart-echarts** | echarts、图表、ReEchart |
105
- | **data-screen** | 大屏、dataScreen |
106
- | **graph-relation** | 图谱、relation-graph |
107
- | **workflow-bpmn** | bpmn、流程审批 |
108
- | **flowchart-g6** | g6、流程图 |
109
- | **data-mapping** | jsplumb、字段映射 |
110
- | **websocket-realtime** | websocket、ws、实时 |
111
- | **mobile-h5** | 移动端、H5、vant、vconsole |
112
- | **wechat-js** | 微信、weixin、wechat |
113
- | **verify-captcha** | 验证码、滑块、短信 |
114
- | **qrcode-barcode** | 二维码、条形码 |
115
- | **feedback-ui** | 通知栏、水印、时间轴、打字机 |
116
- | **seamless-scroll** | 无缝滚动、跑马灯 |
117
- | **particles** | 粒子、tsparticles、登录背景粒子 |
118
- | **directives-advanced** | 一键复制、标题字号自适应 → `v-copy` / `v-auto-font` |
117
+ | **tree-table** | 树表、ReTreeLine、handleTree、树形、树状、层级表格、组织架构、部门树 |
118
+ | **table-vxe** | vxe、高性能表格、虚拟滚动、虚拟表格、大数据表格、单元格编辑 |
119
+ | **form-advanced** | 弹窗、对话框、抽屉、ReDialog、ReDialogResize、锚点、卡片选择、地址解析、ReSelectQuery、级联、远程搜索、下拉选择、高级表单、步骤条、折叠面板、穿梭框、分步表单、联动、动态表单、日历、时间选择、日期选择、拖动、拖拽排序 |
120
+ | **data-compare** | v-compare、变更汇总、变更对比、数据对比、字段对比、高亮变更 |
121
+ | **file-management** | 附件、ReAttachment、ReFileViewer、预览、上传、文件上传、图片上传、断点续传、分片上传、打印、截图、视频播放、音频 |
122
+ | **download-export** | 导出、excel、blob、下载文件、下载、导出Excel |
123
+ | **rich-text** | 富文本、wangeditor、ReRichText、编辑器、Markdown |
124
+ | **chart-echarts** | echarts、图表、ReEchart、折线图、柱状图、饼图、统计图、雷达图、散点图、热力图、趋势图、地图、甘特图 |
125
+ | **data-screen** | 大屏、dataScreen、数据大屏、看板、数据看板、仪表盘、全屏可视化 |
126
+ | **graph-relation** | 图谱、relation-graph、关系图、知识图谱、关系网络 |
127
+ | **workflow-bpmn** | bpmn、流程审批、审批流、工作流、审批流程 |
128
+ | **flowchart-g6** | g6、流程图、拓扑图、antv、自定义流程图、流程设计 |
129
+ | **data-mapping** | jsplumb、字段映射、连线映射、数据映射 |
130
+ | **websocket-realtime** | websocket、ws、实时、消息推送、实时推送、在线状态 |
131
+ | **mobile-h5** | 移动端、H5、vant、vconsole、手机 |
132
+ | **wechat-js** | 微信、weixin、wechat、js-sdk |
133
+ | **verify-captcha** | 验证码、滑块、短信验证、拖拽验证、图片验证码 |
134
+ | **qrcode-barcode** | 二维码、条形码、扫码 |
135
+ | **feedback-ui** | 通知栏、水印、时间轴、打字机、展示组件、空状态 |
136
+ | **seamless-scroll** | 无缝滚动、跑马灯、marquee、滚动公告 |
137
+ | **particles** | 粒子、tsparticles、登录背景粒子、粒子动画 |
138
+ | **directives-advanced** | 一键复制、复制、标题字号自适应、字号自适应 → `v-copy` / `v-auto-font` |
119
139
 
120
140
  ### 匹配规则
121
141
 
@@ -125,16 +145,36 @@ tags: [vue3, typescript, element-plus, vant, pinia, vite, unocss, crud, componen
125
145
  4. 默认不改 `vite.config.ts` / `build/**`;**例外**:按 `addon-enable.md` 恢复 FileViewer / VantResolver / Vconsole 等占位插件时允许改 `build/plugins/*`
126
146
  5. 效果匹配:
127
147
  - 启用 echarts / vant / file-viewer / 富文本等已删 addon → 功能模块 + **`addon-enable`**
128
- - 弹窗 → `form-advanced`
148
+ - 弹窗、对话框、抽屉 → `form-advanced`
149
+ - 远程搜索下拉、级联选择 → `form-advanced`
150
+ - 步骤条、分步表单、穿梭框、折叠面板、动态表单 → `form-advanced`
151
+ - 日历、时间选择、日期选择、联动 → `form-advanced`
129
152
  - 点一下复制 → `directives-advanced`(`v-copy`)
130
153
  - 标题字跟着宽度变小 → `directives-advanced`(`v-auto-font`)
131
- - 角色可见 → `permission-auth`
132
- - 变更汇总 → `data-compare`
133
- - 导出 Excel → `download-export`
154
+ - 角色可见、按钮权限 → `permission-auth`
155
+ - 变更对比、数据对比 → `data-compare`
156
+ - 导出、下载文件 → `download-export`
134
157
  - 菜单/本地图标 → `icons`
135
158
  - 粒子背景 → `particles`
136
- - XX / UI 规范适配、设计交接块、整站风格重构 → `design-system` + `layout-theme`;有令牌/交接产出时加读 `design-handoff.md`
159
+ - 树形列表、层级表格、组织架构、部门树 → `tree-table`
160
+ - 虚拟滚动、大数据表格 → `table-vxe`
161
+ - 骨架屏 → `feedback-loading`
162
+ - 空状态 → `feedback-ui`
163
+ - 标签页、面包屑 → `layout-theme`
164
+ - 批量操作、表格排序 → `crud-pages`
165
+ - 趋势图、地图、甘特图 → `chart-echarts`
166
+ - 附件上传、断点续传 → `file-management`
167
+ - 按 XX / UI 规范适配、设计交接块、整站风格重构 → `design-system`(项目设计系统说明)+ `layout-theme`;有令牌/交接产出时加读 `design-handoff.md`(逐文件修改清单)+ 设计 Skill `project-implementation-protocol.md`
137
168
  - 列表→独立详情/编辑页 → `crud-pages` + `detail-page`
169
+ - 图表(折线/柱状/饼图) → `chart-echarts`
170
+ - 数据大屏、看板 → `data-screen`
171
+ - 实时推送、在线状态 → `websocket-realtime`
172
+ - BPMN 流程、审批、工作流 → `workflow-bpmn`
173
+ - 自定义流程图、流程设计、拓扑 → `flowchart-g6`
174
+ - 国际化、多语言、i18n、语言切换 → `i18n-localization`
175
+ - 注册、忘记密码、重置密码、认证 → `auth-pages`(设计自由,仅规范流程;含验证码 → `verify-captcha`)
176
+ - 打印、截图 → `file-management`(ReFileViewer)
177
+ - 视频播放、音频 → `file-management`(ReFileViewer 文件预览)
138
178
  6. 独立详情路由:跳转与 meta 见 `detail-page`(`toDetail` / `showLink` / `activePath` / `initToDetail`)
139
179
 
140
180
  ## 速查约定(细则见对应模块)
@@ -148,7 +188,7 @@ tags: [vue3, typescript, element-plus, vant, pinia, vite, unocss, crud, componen
148
188
  ## 工作流
149
189
 
150
190
  1. **需求分析**:列出功能模块 ID(不含 `code-quality`)
151
- 2. **加载**:`core-kernel` + 命中模块;addon/缺包时加读 `project-inventory` + **`addon-enable`**;设计规范/交接产出时加读 `design-handoff`
191
+ 2. **加载**:`core-kernel` + 命中模块;addon/缺包时加读 `project-inventory` + **`addon-enable`**;设计规范/交接产出时加读 `design-handoff`(逐文件修改清单)+ 设计 Skill `project-implementation-protocol.md`
152
192
  3. **依赖**:缺包按 inventory 第九节精确版本,确认后安装;**再按 `addon-enable` 对应章节改配置**
153
193
  4. **探查**:复用仓库 `Re*` / Hook / utils
154
194
  5. **生成**:可运行代码落盘
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qilitt-mickey/vue3-temp-skill",
3
- "version": "1.1.24",
3
+ "version": "1.1.26",
4
4
  "description": "Vue 3 企业级中后台项目开发规范技能包 — core-kernel 架构、按需功能模块",
5
5
  "bin": {
6
6
  "vue3-temp-skill": "./bin/cli.js"
@@ -12,6 +12,7 @@
12
12
  "files": [
13
13
  "bin/",
14
14
  "references/",
15
+ "scripts/",
15
16
  "SKILL.md",
16
17
  "README.md"
17
18
  ],
@@ -22,6 +23,19 @@
22
23
  "release": "node release.js",
23
24
  "release:minor": "node release.js minor",
24
25
  "release:major": "node release.js major",
26
+ "check": "scripts\\check.cmd",
27
+ "prepack": "scripts\\check.cmd",
28
+ "validate": "node scripts/validate.mjs",
29
+ "audit": "node scripts/ai-match-audit.mjs",
30
+ "content": "node scripts/ai-content-audit.mjs",
31
+ "deps": "node scripts/analyze-deps.mjs",
32
+ "deps:hot": "node scripts/analyze-deps.mjs --hot",
33
+ "deps:mermaid": "node scripts/analyze-deps.mjs --mermaid",
34
+ "match": "python scripts/match.py",
35
+ "match:batch": "python scripts/match.py --batch",
36
+ "gen:index": "node scripts/generate-index.mjs",
37
+ "gen:index:write": "node scripts/generate-index.mjs --write",
38
+ "scaffold": "node scripts/scaffold-module.mjs",
25
39
  "postpublish": "echo 'Published @qilitt-mickey/vue3-temp-skill to npmjs.org'"
26
40
  },
27
41
  "keywords": [
@@ -0,0 +1,217 @@
1
+ ---
2
+ skill: auth-pages
3
+ description: 登录/注册/忘记密码认证流程、API 模式、userStore 集成、路由配置
4
+ scope: project
5
+ tags: [登录, 注册, 忘记密码, 重置密码, 认证, auth, login, register, signup, forgot-password, 找回密码]
6
+ ---
7
+
8
+ # 认证流程规范(登录 / 注册 / 忘记密码)
9
+
10
+ > **页面设计自由**:认证页面的视觉布局、交互形式、背景效果均由设计主导,本模块仅规范**认证流程、API 模式、Store 集成、路由配置**。勿将此处代码片段当作页面样板整段抄录,仅提取流程模式。
11
+ >
12
+ > **验证码/滑块组件**:见 `verify-captcha` 模块(ReVerify 滑块拼图、ReDragVerify 拖拽验证、ReImageVerify 图片验证码、ReSmsCode 短信倒计时)。本模块不重复其用法。
13
+
14
+ ## 涉及文件
15
+
16
+ ```
17
+ src/
18
+ ├── api/login/index.ts # 认证 API(按后端实际接口调整字段)
19
+ ├── store/modules/user.ts # useUserStore:login()、logOut()、token 管理
20
+ ├── views/login/ # 登录页(设计自由,仅流程受规范)
21
+ ├── utils/rule.ts # 表单校验规则
22
+ └── router/ # 认证页路由(showLink:false)
23
+ ```
24
+
25
+ ## API 模式
26
+
27
+ > 字段名和接口路径按后端实际定义,以下仅展示结构模式。**勿将字段当作硬约束**。
28
+
29
+ ```typescript
30
+ // src/api/login/index.ts
31
+ import { http } from '@/utils/http'
32
+
33
+ // 接口参数类型 — 字段按后端实际定义
34
+ interface LoginParams {
35
+ [key: string]: any // 常见:账号、密码、验证码等,字段名不固定
36
+ }
37
+
38
+ // 登录返回 — 结构按后端实际返回
39
+ interface LoginResult {
40
+ [key: string]: any // 常见:token、用户信息等,字段名不固定
41
+ }
42
+
43
+ /** 登录 */
44
+ export const getLogin = (data: LoginParams) => {
45
+ return http.request<Result<LoginResult>>('post', '/auth/login', { data })
46
+ }
47
+
48
+ /** 发送短信验证码 */
49
+ export const sendSmsCode = (params: Record<string, any>) => {
50
+ return http.request<Result<null>>('post', '/auth/sms-code', { data: params })
51
+ }
52
+
53
+ // 注册/忘记密码 API 按需新增,遵循同一模式:
54
+ // 1. 参数类型用 interface 声明,字段按后端定义
55
+ // 2. 返回值用 Result<T> 包裹
56
+ // 3. 方法名语义化(getRegister、sendResetLink、resetPassword)
57
+ ```
58
+
59
+ ## 认证流程模式
60
+
61
+ > 无论页面长什么样,认证流程必须遵循以下链路。
62
+
63
+ ```
64
+ 用户输入 → 表单校验 → [验证码校验] → 调用 API → useUserStore 处理 token → initRouter → 跳转首页
65
+ ```
66
+
67
+ ### 1. Store 集成
68
+
69
+ ```typescript
70
+ // store/modules/user.ts — 认证状态管理
71
+ export const useUserStore = defineStore('user', {
72
+ state: () => ({
73
+ token: '',
74
+ userInfo: null as any,
75
+ }),
76
+ actions: {
77
+ // 登录:调用 API → 存 token → 返回结果
78
+ async login(data: Record<string, any>) {
79
+ const res = await getLogin(data)
80
+ if (res.status === 200 && res.data) {
81
+ // token 存储方式按项目实际(localStorage / cookie / pinia 持久化)
82
+ this.token = res.data.accessToken ?? ''
83
+ // 用户信息按后端返回结构存储
84
+ this.userInfo = res.data
85
+ }
86
+ return res
87
+ },
88
+ // 退出
89
+ logOut() {
90
+ this.token = ''
91
+ this.userInfo = null
92
+ // 清除存储、跳转登录
93
+ },
94
+ },
95
+ })
96
+ ```
97
+
98
+ ### 2. 登录流程
99
+
100
+ ```typescript
101
+ // 登录页脚本 — 仅展示流程,页面模板设计自由
102
+ import { useUserStoreHook } from '@/store/modules/user'
103
+ import { getTopMenu, initRouter } from '@/utils/router'
104
+
105
+ const useUserStore = useUserStoreHook()
106
+ const router = useRouter()
107
+ const loading = ref(false)
108
+
109
+ async function handleLogin(formData: Record<string, any>) {
110
+ loading.value = true
111
+ try {
112
+ const res = await useUserStore.login(formData)
113
+ if (res.status === 200) {
114
+ // 初始化路由(动态路由/权限路由)
115
+ await initRouter(router)
116
+ // 跳转到首页或来源页
117
+ router.push(getTopMenu().path)
118
+ }
119
+ } finally {
120
+ loading.value = false
121
+ }
122
+ }
123
+ ```
124
+
125
+ ### 3. 注册流程
126
+
127
+ ```typescript
128
+ // 注册页脚本 — 仅展示流程
129
+ import { getRegister } from '@/api/login'
130
+
131
+ async function handleRegister(formData: Record<string, any>) {
132
+ loading.value = true
133
+ try {
134
+ const res = await getRegister(formData)
135
+ if (res.status === 200) {
136
+ // 注册成功 → 跳转登录或自动登录
137
+ router.push('/login')
138
+ }
139
+ } finally {
140
+ loading.value = false
141
+ }
142
+ }
143
+ ```
144
+
145
+ ### 4. 忘记密码流程
146
+
147
+ ```typescript
148
+ // 忘记密码 — 分步流程,页面交互设计自由
149
+ const step = ref(1) // 步骤数按实际流程定
150
+
151
+ // 步骤 1:验证身份 → 发送重置凭证
152
+ async function handleSendReset(account: string) { /* 调用 API */ }
153
+
154
+ // 步骤 2:重置密码
155
+ async function handleReset(formData: Record<string, any>) { /* 调用 API */ }
156
+
157
+ // 步骤 3:完成 → 跳转登录
158
+ function handleDone() {
159
+ router.push('/login')
160
+ }
161
+ ```
162
+
163
+ ## 路由配置
164
+
165
+ ```typescript
166
+ // 认证页路由统一约定
167
+ {
168
+ path: '/login',
169
+ name: 'Login',
170
+ component: () => import('@/views/login/index.vue'),
171
+ meta: {
172
+ title: '登录',
173
+ showLink: false, // 不在菜单显示
174
+ activePath: '/login', // 高亮路径
175
+ },
176
+ }
177
+ // 注册/忘记密码页同理:showLink: false + activePath
178
+ ```
179
+
180
+ ## 表单校验模式
181
+
182
+ > 校验规则按业务实际调整,以下为常见模式。
183
+
184
+ ```typescript
185
+ import { loginRules } from '@/utils/rule'
186
+
187
+ // 必填校验
188
+ const rules = {
189
+ // 字段名按表单实际定义,不固定
190
+ account: [{ required: true, message: $t('请输入账号'), trigger: 'blur' }],
191
+ password: [{ required: true, message: $t('请输入密码'), trigger: 'blur' }],
192
+ }
193
+
194
+ // 密码确认校验(注册/重置密码场景)
195
+ const confirmPasswordRule = {
196
+ validator: (rule: any, value: string, callback: any) => {
197
+ if (value !== formData.password) {
198
+ callback(new Error($t('两次密码不一致')))
199
+ } else {
200
+ callback()
201
+ }
202
+ },
203
+ trigger: 'blur',
204
+ }
205
+ ```
206
+
207
+ ## Must-do 清单
208
+
209
+ 1. **认证流程链路**:`API → useUserStore.login() → initRouter() → 跳转`,勿另起流程
210
+ 2. **页面设计自由**:布局、背景、交互形式由设计主导,本模块不约束视觉
211
+ 3. **API 字段动态**:参数和返回值字段按后端实际定义,勿硬编码字段名
212
+ 4. **验证码组件**:见 `verify-captcha` 模块,不在本模块重复
213
+ 5. **路由约定**:认证页 `showLink: false` 不在菜单显示,`activePath` 指向自身
214
+ 6. **路由白名单**:登录/注册/忘记密码页在路由守卫白名单中,无需 token
215
+ 7. **国际化**:所有提示文案用 `$t()` 包裹
216
+ 8. **密码确认**:注册和重置密码须有确认密码字段 + 自定义校验
217
+ 9. **loading 状态**:提交期间禁用按钮,防止重复提交
@@ -1,3 +1,10 @@
1
+ ---
2
+ skill: base-code-dict
3
+ description: 基础代码字典获取、缓存、useApp().baseCodeGet、filterValue
4
+ scope: project
5
+ tags: [字典, baseCode, 码表, 下拉字典, 数据字典]
6
+ ---
7
+
1
8
  # 基础代码(字典)
2
9
 
3
10
  > 按本文件示例编写,复用 `useApp().baseCodeGet` / `filterValue` 等已有码表能力,勿另起一套字典请求与缓存。
@@ -2,7 +2,7 @@
2
2
  skill: chart-echarts
3
3
  description: ECharts 图表与 ReEchart 封装。词云等扩展按项目依赖。
4
4
  scope: project
5
- tags: [echarts, ReEchart, chart, wordcloud]
5
+ tags: [echarts, ReEchart, chart, wordcloud, 折线图, 柱状图, 饼图, 统计图, 雷达图, 散点图, 热力图, 趋势图, 地图, 甘特图, K线图]
6
6
  ---
7
7
 
8
8
  # 图表(ECharts)
@@ -46,20 +46,20 @@ lint / type-check **过了也不能放过**下列项。发现即改代码,禁
46
46
  | 新菜单路由 | 父级无 `icon` 或业务页二次挂 `Layout` | `icons` + `core-kernel` |
47
47
  | 列表查询区 `el-form` / 查询按钮 | 写了 `size="small"`(紧凑主题用户未要求) | 不写 size,用 default=`--control-height` |
48
48
  | 本轮新增 addon 并引用对应 `Re*` / Vant / 微信 | 已装包但 `tsconfig exclude` 仍含该路径,或 `addon-enable` 要求的 build/src 未改 | 按 **`addon-enable.md`** 对应章节恢复后重跑 type-check |
49
- | `design-visual.scss` / `design-layout.scss` 存在 | `index.scss` `@use` 加载,或加载顺序不在 `element-plus` 之前 | `design-tokens` `design-visual` `design-layout` → `element-plus` |
50
- | `design-visual.scss` 规则体内出现硬编码值 | 非令牌引用的裸 hex / px / rgba 值 | 全部改为 `var()` 引用令牌 |
51
- | 视觉层 / 构图层新增规则 | `dark.scss` 缺少对应暗色覆盖 | 每条新规则在 `html.dark` 内有对应覆盖 |
49
+ | `element-plus.scss` 内视觉规则(shadow/hover/transition) | 出现非令牌引用的裸 hex / px / rgba | 全部改为 `var()` 引用令牌 |
50
+ | 视觉规则新增 | `dark.scss` 缺少对应暗色覆盖 | 每条新规则在 `html.dark` 内有对应覆盖 |
52
51
 
53
52
  ### 设计模式专项检查(设计 Skill 产出存在时)
54
53
 
54
+ 设计还原的完整检查清单见设计 Skill 的 `project-implementation-protocol.md`。本闸门只检查项目侧落地结果:
55
+
55
56
  | 检查项 | 失败条件 | 修复 |
56
57
  |--------|---------|------|
57
- | 列表页页面标题区 | 设计模式下列表页无 `.vts-page-header`(标题+描述+操作) | 按 `crud-pages.md` 设计模式样板 D2 补充 |
58
- | 列表页筛选区 | 设计模式下仍用 `bg-bg_color p-5` 而非 `.vts-filter-area` | 升级为 `.vts-filter-area` |
59
- | 列表页表格区 | 设计模式下表格区无 `.vts-table-area` 包裹 | 外包 `.vts-table-area` |
60
- | 设计模式值引用 | 页面代码中 CSS 钩子类对应的值非令牌引用 | 值来自 `design-tokens.scss` 令牌变量 |
61
-
62
- > **放松说明**:设计模式下,允许页面级结构 CSS(`.vts-page-header` 等布局类)。项目 Skill 的禁止项("禁止另建独立重写层文件"等)在**设计模式**下不适用于页面代码中的布局结构实现,仅对全局样式文件生效。
58
+ | 页面区域结构 | JSON `structureRequirements.pageRegions` 指定的区域在页面中缺失 | 按 `crud-pages.md` 设计模式样板 D1-D8 补充 |
59
+ | 框架壳层 | JSON `structureRequirements.frameworkShell` 指定的壳层配置未落地 | `design-handoff.md` 配置文件修改清单 C1-C8 执行 |
60
+ | 交互行为 | JSON `interactionSpecs` 指定的交互未实现 | `project-implementation-protocol.md` 交互保真要求实现 |
61
+ | 令牌引用 | 页面代码中 CSS 钩子类对应的值非令牌引用 | 值来自 `design-tokens.scss` 令牌变量 |
62
+ | 逐文件修改清单 | `design-handoff.md` 清单中有未执行项 | 补齐遗漏项 |
63
63
 
64
64
  ## 选型与硬约束
65
65
 
@@ -115,12 +115,11 @@ lint / type-check **过了也不能放过**下列项。发现即改代码,禁
115
115
 
116
116
  ### design-system(命中时)
117
117
 
118
- - [ ] 规范识别回执;令牌 / `platform-config.json` / 侧栏主题一致
119
- - [ ] 已建 `design-tokens.scss`;`index.scss` 中其 `@use` 最前
120
- - [ ] 冲突清单已逐条处理(见 `design-system`)
121
- - [ ] 有上游设计产出时已读 `design-handoff`:JSON 优先;**原子步骤**含 `Theme=default`(深色侧栏)+ `--sidebar-*` + **`Version++`** + 主色阶;禁止只改 EpThemeColor;错误色 `#F5222D`
118
+ - [ ] 有设计 Skill 产出时已读 `design-handoff.md` 逐文件修改清单并执行
119
+ - [ ] 设计还原检查对照设计 Skill 的 `project-implementation-protocol.md` 检查清单
120
+ - [ ] 令牌 / `platform-config.json` / 侧栏主题三处一致
122
121
  - [ ] **无**设计落地时未改出厂主色 / ShowModel / 壳层 / 弹窗几何默认
123
- - [ ] 组件尺寸三档已落地并桥接 `--el-component-size*`;缺档回退至 default;未全局强制 `size="small"`;**查询区不写 size**(三档对照表 ≠ 查询区要用 small)
122
+ - [ ] 组件尺寸三档已落地并桥接 `--el-component-size*`;缺档回退至 default;查询区不写 size
124
123
 
125
124
  ## 业务
126
125
 
@@ -2,7 +2,7 @@
2
2
  skill: crud-pages
3
3
  description: 查询列表页、表单页、标准 CRUD。含 useTableSearch、列表标准样板、表单约定。
4
4
  scope: project
5
- tags: [vue3, crud, list, form, detail, table, useTableSearch, page, layout]
5
+ tags: [vue3, crud, list, form, detail, table, useTableSearch, page, layout, 批量, 排序, 批量操作]
6
6
  ---
7
7
 
8
8
  # CRUD 页面开发规范
@@ -253,15 +253,18 @@ function handleSizeChange(size: number) {
253
253
 
254
254
  ## 列表设计模式样板(设计 Skill 产出存在时使用)
255
255
 
256
- > **触发条件**:存在 `design-handoff/v1` JSON、用户指定设计规范、或命中 `design-system` 模块且设计 Skill 产出可用。
256
+ > **触发条件**:存在 `design-handoff/v1` JSON(含 `structureRequirements` + `pageStructure` 段)、用户指定设计规范、或命中 `design-system` 模块且设计 Skill 产出可用。
257
257
  >
258
- > **与出厂模式的区别**:出厂模式(上文 L1-L9)直接堆 `el-card` + 查询区 + 表格,无页面标题区。设计模式按设计 Skill 的 `list-page.md` 区域拆分,包含完整的页面标题区、筛选区容器、操作栏、表格区。
258
+ > **1:1 还原要求**:页面区域结构必须按 JSON `structureRequirements.pageRegions` 实现,框架壳层按 `structureRequirements.frameworkShell` 实现。详见设计 Skill 的 `project-implementation-protocol.md`。
259
259
  >
260
- > **结构变化**:
261
- > - 新增 `.vts-page-header`(标题 + 描述 + 标题区操作按钮)
262
- > - 查询区从 `bg-bg_color p-5` 升级为 `.vts-filter-area`(有容器感 + 分隔线)
263
- > - 表格区外包 `.vts-table-area`(有圆角边框包裹)
260
+ > **与出厂模式的区别**:出厂模式(上文 L1-L9)直接堆 `el-card` + 查询区 + 表格,无页面标题区。设计模式按 JSON `pageStructure` 区域拆分,包含完整的页面标题区、筛选区容器、操作栏、表格区。
261
+ >
262
+ > **结构变化**(以 JSON `structureRequirements.pageRegions` 为准,下方为默认区域):
263
+ > - 新增 `.vts-page-header`(标题 + 描述 + 标题区操作按钮)— 对应 JSON `pageStructure.regions.header`
264
+ > - 查询区从 `bg-bg_color p-5` 升级为 `.vts-filter-area`(有容器感 + 分隔线)— 对应 `pageStructure.regions.filter`
265
+ > - 表格区外包 `.vts-table-area`(有圆角边框包裹)— 对应 `pageStructure.regions.table`
264
266
  > - 主操作按钮(新增/导入)从 `ReTableBar #buttons` 移到 `.vts-page-header__actions`
267
+ > - 若 JSON 指定额外区域(如统计区、页签切换区),按 `pageStructure.regions` 顺序在 `otherRef` 位或独立区域中实现
265
268
 
266
269
  | # | 必须 |
267
270
  |---|------|
@@ -270,8 +273,8 @@ function handleSizeChange(size: number) {
270
273
  | D3 | `.vts-filter-area`:筛选区容器(独立背景 + 圆角 + 底部分隔线) |
271
274
  | D4 | `.vts-action-bar`:表格上方操作栏(批量删除等 + 右侧刷新/列设置) |
272
275
  | D5 | `.vts-table-area`:表格区包裹(圆角 + 边框) |
273
- | D6 | 表头:品牌色浅底 + 字重 600 + 底部强调线(由 `design-visual.scss` 全局提供) |
274
- | D7 | 行 hover:品牌色极浅底 + 过渡(由 `design-visual.scss` 全局提供) |
276
+ | D6 | 表头:品牌色浅底 + 字重 600 + 底部强调线(由 `element-plus.scss` 全局提供) |
277
+ | D7 | 行 hover:品牌色极浅底 + 过渡(由 `element-plus.scss` 全局提供) |
275
278
  | D8 | 其余同 L4-L9(ReGrid / ReTableBar / RePagination / ReTableOperate) |
276
279
 
277
280
  ```vue
@@ -491,14 +494,15 @@ function handleSizeChange(size: number) {
491
494
 
492
495
  **设计模式与出厂模式的关键差异**:
493
496
 
494
- | 差异点 | 出厂模式 | 设计模式 |
495
- |--------|---------|---------|
496
- | 页面标题 | 无 | `.vts-page-header` 含标题+描述+操作 |
497
- | 筛选区 | `bg-bg_color p-5` | `.vts-filter-area`(容器感+分隔线) |
498
- | 主操作按钮位置 | `ReTableBar #buttons` | `.vts-page-header__actions` |
499
- | 表格区 | 无包裹 | `.vts-table-area`(圆角边框) |
500
- | 表头底色 | EP 默认浅灰 | 由 `design-visual.scss` 全局提供品牌色浅底+强调线 |
501
- | 行 hover | EP 默认灰色 | 由 `design-visual.scss` 全局提供品牌色极浅底 |
497
+ | 差异点 | 出厂模式 | 设计模式 | JSON 来源 |
498
+ |--------|---------|---------|-----------|
499
+ | 页面标题 | 无 | `.vts-page-header` 含标题+描述+操作 | `structureRequirements.pageRegions.header` |
500
+ | 筛选区 | `bg-bg_color p-5` | `.vts-filter-area`(容器感+分隔线) | `structureRequirements.pageRegions.filter` |
501
+ | 主操作按钮位置 | `ReTableBar #buttons` | `.vts-page-header__actions` | `structureRequirements.pageRegions.header.actions` |
502
+ | 表格区 | 无包裹 | `.vts-table-area`(圆角边框) | `structureRequirements.pageRegions.table` |
503
+ | 表头底色 | EP 默认浅灰 | 由 `element-plus.scss` 全局提供品牌色浅底+强调线 | `visual.tableHeader` |
504
+ | 行 hover | EP 默认灰色 | 由 `element-plus.scss` 全局提供品牌色极浅底 | `visual.rowHover` |
505
+ | 交互行为 | EP 默认 | 按 JSON `interactionSpecs` 实现 | `interactionSpecs` |
502
506
 
503
507
  ## 操作列按钮过多(ReTableOperate · 强制)
504
508
 
@@ -1,3 +1,10 @@
1
+ ---
2
+ skill: data-compare
3
+ description: 编辑页数据变更对比:v-compare、compareStore、ChangeSummaryService
4
+ scope: project
5
+ tags: [v-compare, 变更汇总, 变更对比, 数据对比, 字段对比, 高亮变更]
6
+ ---
7
+
1
8
  # 数据变更对比
2
9
 
3
10
  > 按本文件示例编写,复用 `v-compare` / `compareStore` / `ChangeSummaryService` 等已有能力,勿另起一套对比实现。
@@ -1,3 +1,10 @@
1
+ ---
2
+ skill: data-mapping
3
+ description: jsplumb 数据映射页面结构和连线初始化
4
+ scope: project
5
+ tags: [jsplumb, 字段映射, 连线映射, 数据映射]
6
+ ---
7
+
1
8
  # JsPlumb 数据映射
2
9
 
3
10
  > 按本文件示例编写;必须使用选型表中的 `jsplumb`(见 project-inventory),勿改用同类其他连线库;新依赖须待确认。
@@ -1,3 +1,10 @@
1
+ ---
2
+ skill: data-screen
3
+ description: 大屏等比缩放、1920x1080 设计稿、transform: scale()、grid-layout-plus
4
+ scope: project
5
+ tags: [大屏, dataScreen, 数据大屏, 看板, 数据看板, 仪表盘, 全屏可视化]
6
+ ---
7
+
1
8
  # 数据大屏
2
9
 
3
10
  > 按本文件示例编写,复用项目已有布局与图表封装;缩放/适配按本规范实现,勿另起一套大屏方案。
@@ -1,3 +1,10 @@
1
+ ---
2
+ skill: data-writeback
3
+ description: 编辑回显用 Object.assign(formData, res.data) 避免破坏响应式
4
+ scope: project
5
+ tags: [回显, 回填, 回写, useFormCheck, Object.assign, 编辑数据]
6
+ ---
7
+
1
8
  # 数据回写与编辑
2
9
 
3
10
  > 按本文件示例编写,复用项目已有回显/回填约定与选择器回写方式,勿另起一套表单赋值实现。