@qilitt-mickey/vue3-temp-skill 1.0.8
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.
- package/README.md +229 -0
- package/SKILL.md +621 -0
- package/bin/cli.js +579 -0
- package/package.json +46 -0
- package/references/advanced-ui.md +302 -0
- package/references/api-check.md +272 -0
- package/references/base-code-dict.md +48 -0
- package/references/build-optim.md +282 -0
- package/references/code-quality.md +235 -0
- package/references/crud-pages.md +316 -0
- package/references/data-compare.md +501 -0
- package/references/data-mapping.md +213 -0
- package/references/data-screen.md +79 -0
- package/references/data-writeback.md +104 -0
- package/references/detail-page.md +99 -0
- package/references/directives-advanced.md +93 -0
- package/references/download-export.md +68 -0
- package/references/feedback-loading.md +60 -0
- package/references/feedback-ui.md +111 -0
- package/references/file-management.md +132 -0
- package/references/flowchart-g6.md +244 -0
- package/references/form-advanced.md +137 -0
- package/references/graph-relation.md +253 -0
- package/references/http-api.md +188 -0
- package/references/layout-theme.md +540 -0
- package/references/mobile-h5.md +271 -0
- package/references/permission-auth.md +235 -0
- package/references/project-inventory.md +326 -0
- package/references/qrcode-barcode.md +92 -0
- package/references/rich-text.md +73 -0
- package/references/seamless-scroll.md +38 -0
- package/references/tree-table.md +111 -0
- package/references/ui-components.md +161 -0
- package/references/verify-captcha.md +96 -0
- package/references/vue-core.md +209 -0
- package/references/websocket-realtime.md +176 -0
- package/references/workflow-bpmn.md +206 -0
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
# 项目资产清单(Project Inventory)
|
|
2
|
+
|
|
3
|
+
> **本模块是 AI 代码生成的前置必读文件。**
|
|
4
|
+
> 在生成任何功能代码之前,AI 必须先查阅本清单,确认项目中是否已有对应的库、组件、Hook 或工具函数。
|
|
5
|
+
> **如果项目中已有实现,必须直接使用,禁止引入替代方案。**
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 一、三方库清单(按功能分类)
|
|
10
|
+
|
|
11
|
+
### UI 框架
|
|
12
|
+
|
|
13
|
+
| 库 | 版本 | 用途 | 备注 |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| `element-plus` | 2.14.x | PC 端 UI 组件库 | 主力框架,自动引入 |
|
|
16
|
+
| `vant` | 4.10.x | 移动端 UI 组件库 | 移动端页面使用 |
|
|
17
|
+
| `@wocwin/t-ui-plus` | 2.0.x | 基于 Element Plus 的企业级增强组件 | |
|
|
18
|
+
| `plus-pro-components` | 0.1.x | Element Plus 企业级扩展组件 | |
|
|
19
|
+
| `vxe-table` | 4.19.x | 高性能大数据表格 | >1000 行数据时使用 |
|
|
20
|
+
| `vxe-pc-ui` | 4.15.x | VXE 配套 PC UI 组件 | |
|
|
21
|
+
| `animate.css` | 4.1.x | CSS 动画库 | |
|
|
22
|
+
|
|
23
|
+
### 图表与可视化
|
|
24
|
+
|
|
25
|
+
| 库 | 版本 | 用途 | 备注 |
|
|
26
|
+
|---|---|---|---|
|
|
27
|
+
| `echarts` | 6.1.x | 图表引擎 | 配合 `ReEchart` 组件使用 |
|
|
28
|
+
| `echarts-wordcloud` | 2.1.x | 词云图 | ECharts 扩展 |
|
|
29
|
+
| `relation-graph-vue3` | 2.2.x | 关系/知识图谱 | 力导向/圆形/树形布局 |
|
|
30
|
+
| `@antv/g6` | 5.1.x | 图可视化引擎 | 流程图,配合 `g6-extension-vue` |
|
|
31
|
+
| `g6-extension-vue` | 0.1.x | G6 的 Vue 节点扩展 | 支持 Vue 组件作为图节点 |
|
|
32
|
+
|
|
33
|
+
### 工作流与流程
|
|
34
|
+
|
|
35
|
+
| 库 | 版本 | 用途 | 备注 |
|
|
36
|
+
|---|---|---|---|
|
|
37
|
+
| `bpmn-js` | 18.19.x | BPMN 2.0 工作流图渲染 | 使用 Viewer(只读),不用 Modeler |
|
|
38
|
+
| `jsplumb` | 2.15.x | 可视化连线/字段映射 | 拖拽连接场景 |
|
|
39
|
+
|
|
40
|
+
### 富文本与编辑器
|
|
41
|
+
|
|
42
|
+
| 库 | 版本 | 用途 | 备注 |
|
|
43
|
+
|---|---|---|---|
|
|
44
|
+
| `@wangeditor/editor` | 5.1.x | 富文本编辑器 | 配合 `ReRichText` 组件使用 |
|
|
45
|
+
|
|
46
|
+
### 图标
|
|
47
|
+
|
|
48
|
+
| 库 | 版本 | 用途 | 备注 |
|
|
49
|
+
|---|---|---|---|
|
|
50
|
+
| `@iconify/vue` | 5.0.x | 图标框架 | 支持多图标集 |
|
|
51
|
+
| `@iconify-json/ep` | 1.2.x | Element Plus 图标集 | |
|
|
52
|
+
| `@iconify-json/ri` | 1.2.x | Remix Icon 图标集 | |
|
|
53
|
+
| `vite-plugin-svg-icons` | 2.0.x | SVG 雪碧图 | 配合 `ReSvgIcon` 组件 |
|
|
54
|
+
|
|
55
|
+
### 状态管理与路由
|
|
56
|
+
|
|
57
|
+
| 库 | 版本 | 用途 | 备注 |
|
|
58
|
+
|---|---|---|---|
|
|
59
|
+
| `pinia` | 3.0.x | 状态管理 | Composition API 风格 |
|
|
60
|
+
| `pinia-plugin-persistedstate` | 4.7.x | Pinia 持久化插件 | localStorage |
|
|
61
|
+
| `vue-router` | 5.1.x | 路由 | Hash 模式 + 动态路由 |
|
|
62
|
+
|
|
63
|
+
### HTTP 与加密
|
|
64
|
+
|
|
65
|
+
| 库 | 版本 | 用途 | 备注 |
|
|
66
|
+
|---|---|---|---|
|
|
67
|
+
| `axios` | 1.18.x | HTTP 请求 | 项目已封装 `src/utils/http.ts` |
|
|
68
|
+
| `crypto-js` | 4.2.x | AES 加解密 | 请求体加密 |
|
|
69
|
+
| `jsencrypt` | 3.5.x | RSA 加解密 | 密钥交换 |
|
|
70
|
+
| `js-md5` | 0.8.x | MD5 哈希 | 请求签名 |
|
|
71
|
+
|
|
72
|
+
### 工具库
|
|
73
|
+
|
|
74
|
+
| 库 | 版本 | 用途 | 备注 |
|
|
75
|
+
|---|---|---|---|
|
|
76
|
+
| `@vueuse/core` | 14.3.x | Vue 组合式工具集 | 自动引入 |
|
|
77
|
+
| `@vueuse/math` | 14.3.x | 数学相关组合式函数 | |
|
|
78
|
+
| `@vueuse/motion` | 3.0.x | 运动/入场动画 | `v-motion` 指令 |
|
|
79
|
+
| `@pureadmin/utils` | 2.6.x | 工具函数集 | 下载、存储、设备检测等 |
|
|
80
|
+
| `dayjs` | 1.11.x | 日期处理 | 不用 moment |
|
|
81
|
+
| `qs` | 6.15.x | 查询字符串序列化 | |
|
|
82
|
+
| `js-cookie` | 3.0.x | Cookie 操作 | |
|
|
83
|
+
| `mitt` | 3.0.x | 事件总线 | 全局事件通信 |
|
|
84
|
+
| `chroma-js` | 3.2.x | 颜色处理 | 主题色生成 |
|
|
85
|
+
| `address-parse` | 1.2.x | 中文地址解析 | |
|
|
86
|
+
| `nprogress` | 0.2.x | 路由进度条 | |
|
|
87
|
+
| `responsive-storage` | 2.2.x | 响应式 localStorage | |
|
|
88
|
+
| `sortablejs` | 1.15.x | 拖拽排序 | |
|
|
89
|
+
| `vue-dompurify-html` | 5.3.x | 安全 HTML 渲染 | DOMPurify 过滤 XSS |
|
|
90
|
+
| `browser-image-compression` | 2.0.x | 客户端图片压缩 | 上传前压缩 |
|
|
91
|
+
| `version-rocket` | 1.7.x | 前端版本检测/自动更新 | |
|
|
92
|
+
|
|
93
|
+
### 文件预览
|
|
94
|
+
|
|
95
|
+
| 库 | 版本 | 用途 | 备注 |
|
|
96
|
+
|---|---|---|---|
|
|
97
|
+
| `@file-viewer/core` | 2.1.x | 文件预览核心 | |
|
|
98
|
+
| `@file-viewer/vue3` | 2.1.x | 文件预览 Vue3 集成 | 配合 `ReFileViewer` |
|
|
99
|
+
| `@file-viewer/preset-all` | 2.1.x | 文件预览全格式预设 | |
|
|
100
|
+
|
|
101
|
+
### 二维码与条形码
|
|
102
|
+
|
|
103
|
+
| 库 | 版本 | 用途 | 备注 |
|
|
104
|
+
|---|---|---|---|
|
|
105
|
+
| `qrcode` | 1.5.x | 二维码生成 | 配合 `ReQrcode` 组件 |
|
|
106
|
+
| `jsbarcode` | 3.12.x | 条形码生成 | 配合 `ReBarcode` 组件 |
|
|
107
|
+
|
|
108
|
+
### 验证与动画
|
|
109
|
+
|
|
110
|
+
| 库 | 版本 | 用途 | 备注 |
|
|
111
|
+
|---|---|---|---|
|
|
112
|
+
| `vue3-puzzle-vcode` | 1.1.x | 滑块拼图验证码 | 配合 `ReVerify` 组件 |
|
|
113
|
+
| `typeit` | 8.8.x | 打字机动画 | 配合 `ReTypeit` 组件 |
|
|
114
|
+
| `@tsparticles/slim` | 4.3.x | 粒子动画 | 登录页背景 |
|
|
115
|
+
| `@tsparticles/vue3` | 4.3.x | 粒子动画 Vue3 集成 | |
|
|
116
|
+
| `tippy.js` / `vue-tippy` | 6.x | Tooltip 提示 | |
|
|
117
|
+
|
|
118
|
+
### 微信集成
|
|
119
|
+
|
|
120
|
+
| 库 | 版本 | 用途 | 备注 |
|
|
121
|
+
|---|---|---|---|
|
|
122
|
+
| `weixin-js-sdk` | 1.6.x | 微信 JS-SDK | 分享/定位,配合 `useWechat` Hook |
|
|
123
|
+
| `vconsole` | 3.15.x | 移动端调试控制台 | 仅开发/测试环境 |
|
|
124
|
+
|
|
125
|
+
### 布局
|
|
126
|
+
|
|
127
|
+
| 库 | 版本 | 用途 | 备注 |
|
|
128
|
+
|---|---|---|---|
|
|
129
|
+
| `grid-layout-plus` | 1.1.x | 拖拽网格布局 | 大屏/仪表盘 widget |
|
|
130
|
+
| `unocss` | 66.x | 原子化 CSS | presetWind3,类 Tailwind 语法 |
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## 二、Re* 自定义组件清单
|
|
135
|
+
|
|
136
|
+
> 所有自定义组件以 `Re` 为前缀,目录结构统一为 `ReXxx/src/xxx.vue` + `index.ts` + `type.ts`。
|
|
137
|
+
> **开发新功能时,必须先检查此清单是否已有对应组件,禁止重复造轮子。**
|
|
138
|
+
|
|
139
|
+
| 组件 | 用途 | 所在目录 |
|
|
140
|
+
|---|---|---|
|
|
141
|
+
| **ReAnchor** | 锚点导航(滚动定位) | `src/components/ReAnchor/` |
|
|
142
|
+
| **ReAttachment** | 附件上传/管理 | `src/components/ReAttachment/` |
|
|
143
|
+
| **ReAuth** | 权限包裹(按 auth code 控制显隐) | `src/components/ReAuth/` |
|
|
144
|
+
| **ReAvatars** | 用户头像展示 | `src/components/ReAvatars/` |
|
|
145
|
+
| **ReBarcode** | 条形码生成 | `src/components/ReBarcode/` |
|
|
146
|
+
| **ReCascader** | 级联选择器 | `src/components/ReCascader/` |
|
|
147
|
+
| **ReCheckCard** | 卡片选择(多选) | `src/components/ReCheckCard/` |
|
|
148
|
+
| **ReCollapsible** | 折叠面板 | `src/components/ReCollapsible/` |
|
|
149
|
+
| **ReDatePicker** | 日期选择器 | `src/components/ReDatePicker/` |
|
|
150
|
+
| **ReDateRangePicker** | 日期范围选择器 | `src/components/ReDateRangePicker/` |
|
|
151
|
+
| **ReDialog** | 弹窗 | `src/components/ReDialog/` |
|
|
152
|
+
| **ReDialogResize** | 可拖拽缩放弹窗 | `src/components/ReDialogResize/` |
|
|
153
|
+
| **ReDragVerify** | 拖拽验证(滑块验证) | `src/components/ReDragVerify/` |
|
|
154
|
+
| **ReEchart** | ECharts 图表容器 | `src/components/ReEchart/` |
|
|
155
|
+
| **ReFileViewer** | 文件预览(Office/PDF) | `src/components/ReFileViewer/` |
|
|
156
|
+
| **ReFlicker** | 闪烁点效果 | `src/components/ReFlicker/` |
|
|
157
|
+
| **ReGrid** | 栅格布局容器 | `src/components/ReGrid/` |
|
|
158
|
+
| **ReGridItem** | 栅格子项 | `src/components/ReGridItem/` |
|
|
159
|
+
| **ReHeaderPage** | 页面头部(标题/面包屑) | `src/components/ReHeaderPage/` |
|
|
160
|
+
| **ReIconPicker** | 图标选择器 | `src/components/ReIconPicker/` |
|
|
161
|
+
| **ReImageVerify** | 图片验证码 | `src/components/ReImageVerify/` |
|
|
162
|
+
| **ReLanguageSwitch** | 语言切换 | `src/components/ReLanguageSwitch/` |
|
|
163
|
+
| **ReNoticeBar** | 通知栏(长文本滚动) | `src/components/ReNoticeBar/` |
|
|
164
|
+
| **RePagination** | 分页器 | `src/components/RePagination/` |
|
|
165
|
+
| **RePopupPicker** | 弹出式选择器(移动端) | `src/components/RePopupPicker/` |
|
|
166
|
+
| **ReQrcode** | 二维码生成 | `src/components/ReQrcode/` |
|
|
167
|
+
| **ReRichText** | 富文本编辑器 | `src/components/ReRichText/` |
|
|
168
|
+
| **ReSeamlessScroll** | 无缝滚动容器 | `src/components/ReSeamlessScroll/` |
|
|
169
|
+
| **ReSegmented** | 分段控制器 | `src/components/ReSegmented/` |
|
|
170
|
+
| **ReSelectQuery** | 远程搜索选择器(带分页) | `src/components/ReSelectQuery/` |
|
|
171
|
+
| **ReSelectVant** | 移动端选择器 | `src/components/ReSelectVant/` |
|
|
172
|
+
| **ReSmsCode** | 短信验证码倒计时按钮 | `src/components/ReSmsCode/` |
|
|
173
|
+
| **ReSvgIcon** | SVG 图标 | `src/components/ReSvgIcon/` |
|
|
174
|
+
| **ReTableBar** | 表格工具栏 | `src/components/ReTableBar/` |
|
|
175
|
+
| **ReTableOperate** | 表格操作按钮(增删改查) | `src/components/ReTableOperate/` |
|
|
176
|
+
| **ReText** | 文本展示(智能省略/tooltip) | `src/components/ReText/` |
|
|
177
|
+
| **ReTimeLine** | 时间轴 | `src/components/ReTimeLine/` |
|
|
178
|
+
| **ReTreeLine** | 树形连线 | `src/components/ReTreeLine/` |
|
|
179
|
+
| **ReTypeit** | 打字机动画 | `src/components/ReTypeit/` |
|
|
180
|
+
| **ReVerify** | 滑块拼图验证 | `src/components/ReVerify/` |
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## 三、Hooks 清单
|
|
185
|
+
|
|
186
|
+
> 所有 Hook 位于 `src/hooks/` 目录。开发新功能时必须先检查是否已有可复用的 Hook。
|
|
187
|
+
|
|
188
|
+
| Hook | 用途 | 关键 API |
|
|
189
|
+
|---|---|---|
|
|
190
|
+
| **useApp** | 全局应用状态(布局、字典、登出等) | `baseCodeGet(codeType)`、`filterValue()`、`headerHeight`、`svgLoading` |
|
|
191
|
+
| **useDetail** | 详情页跳转与参数传递 | `toDetail({ id, mark, text })`、`initToDetail()`、`getParameter()` |
|
|
192
|
+
| **useFormCheck** | 多表单校验聚合 | 追踪各字段校验状态,emit `form-validate` 事件 |
|
|
193
|
+
| **useTableSearch** | 列表页搜索/分页/Loading | `content`、`pagination`、`loading`、`handleSearch()`、`handleReset()` |
|
|
194
|
+
| **useTags** | 多标签页管理 | 右键菜单(刷新/关闭/关闭其他/全屏) |
|
|
195
|
+
| **useTheme** | 主题切换(暗色/亮色) | 主题色生成、布局预设、缓存重置 |
|
|
196
|
+
| **useWebSocket** | WebSocket 通信 | `subscribe()`、`send()`、`sendRaw()`、`isConnected` |
|
|
197
|
+
| **useWechat** | 微信 JS-SDK | `isReady`、`error` |
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## 四、工具函数清单
|
|
202
|
+
|
|
203
|
+
> 所有工具位于 `src/utils/` 目录。
|
|
204
|
+
|
|
205
|
+
| 文件 | 关键导出 | 用途 |
|
|
206
|
+
|---|---|---|
|
|
207
|
+
| `auth.ts` | `getToken()`、`setUserToken()`、`removeToken()` | Token 管理 |
|
|
208
|
+
| `autoUpdate.ts` | `checkUpdate()` | 前端版本检测/自动刷新 |
|
|
209
|
+
| `changeSummaryService.ts` | `ChangeSummaryService.getChangeSummaryData()` | v-compare 变更汇总读取/元素引用修复 |
|
|
210
|
+
| `encryptUtils.ts` | `aesEncrypt()`、`aesDecrypt()`、`rsaEncrypt()`、`md5Sign()` | 加解密工具 |
|
|
211
|
+
| `http.ts` | `http.request()` | Axios 封装(统一 POST + 加密 + 拦截器) |
|
|
212
|
+
| `i18n.ts` | `getLocale()` | 语言检测 |
|
|
213
|
+
| `imageCompression.ts` | `compressImage()` | 图片压缩(上传前) |
|
|
214
|
+
| `message.ts` | `message()` | 消息提示封装(ElMessage 包装) |
|
|
215
|
+
| `mitt.ts` | `mitt()` | 全局事件总线 |
|
|
216
|
+
| `motion.tsx` | `MotionComponent` | 入场动画 TSX 组件 |
|
|
217
|
+
| `particles.ts` | `particlesConfig` | 粒子动画配置 |
|
|
218
|
+
| `progress/` | `NProgress` | 路由进度条配置 |
|
|
219
|
+
| `responsive.ts` | `ResponsiveStorage` | 响应式存储注入 |
|
|
220
|
+
| `router.ts` | `hasAuth()`、路由扁平化、权限过滤 | 路由工具 |
|
|
221
|
+
| `rule.ts` | `passwordRule`、`phoneRule` | 表单校验规则(PC) |
|
|
222
|
+
| `tree.ts` | `handleTree()`、`buildHierarchyTree()` | 树结构转换 |
|
|
223
|
+
| `uploadManager.ts` | `UploadManager` | 批量上传任务管理 |
|
|
224
|
+
| `useActivity.ts` | `useActivity()` | 用户空闲检测/自动登出 |
|
|
225
|
+
| `utils.ts` | `svgLoad()`、`composeOptions()`、`getRowClassByFlag()`、`escapeAttrSelector()`、`formatFileSize()` 等 | 通用工具(含对比辅助) |
|
|
226
|
+
| `vantRules.ts` | `vantRules` | 表单校验规则(移动端 Vant) |
|
|
227
|
+
| `websocket/` | `initWebSocket()`、`closeWebSocket()`、`WebSocketManager` | WebSocket 基础设施 |
|
|
228
|
+
| `wechat/` | `WechatSDK` | 微信 SDK 单例 |
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## 五、自定义指令清单
|
|
233
|
+
|
|
234
|
+
> 所有指令位于 `src/directives/` 目录,在 `src/directives/index.ts` 统一注册。
|
|
235
|
+
|
|
236
|
+
| 指令 | 用途 | 用法示例 |
|
|
237
|
+
|---|---|---|
|
|
238
|
+
| **v-auth** | 按钮级权限控制(无权限移除 DOM) | `v-auth="['btn.add']"` |
|
|
239
|
+
| **v-auto-font** | 根据容器宽度自动缩放字体 | `v-auto-font:0.8` 或 `v-auto-font="{ scale: 0.8, min: 12, max: 24 }"` |
|
|
240
|
+
| **v-compare** | 编辑页变更对比(高亮+汇总) | `v-compare:key="{ oldValue, title, label, enabled }"`;详见 data-compare |
|
|
241
|
+
| **v-copy** | 复制文本到剪贴板 | `v-copy="text"`(双击)、`v-copy:click="text"`(单击) |
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## 六、Store 模块清单
|
|
246
|
+
|
|
247
|
+
> 所有 Store 位于 `src/store/modules/`,使用 `pinia-plugin-persistedstate` 持久化。
|
|
248
|
+
|
|
249
|
+
| Store | 用途 | 关键状态/方法 |
|
|
250
|
+
|---|---|---|
|
|
251
|
+
| **useAppStore** | 应用全局状态 | 侧边栏、布局模式、设备类型 |
|
|
252
|
+
| **useBaseCodeStore** | 字典/码表缓存 | 按 `codeType` 获取+缓存 |
|
|
253
|
+
| **useCompareStore** | 变更对比追踪 | `addOrUpdateRecord` / `clearAllRecords`;按 title 模块分组 |
|
|
254
|
+
| **useLangStore** | 语言设置 | 持久化到 localStorage + cookie |
|
|
255
|
+
| **useMultiTagsStore** | 多标签页 | 标签增删排序 |
|
|
256
|
+
| **useRouterMenuStore** | 路由/菜单 | 静态+动态菜单、keepAlive 缓存 |
|
|
257
|
+
| **useSettingStore** | UI 设置 | 标题、固定头部、侧边栏显隐 |
|
|
258
|
+
| **useThemeStore** | 主题 | 主题色、暗色模式 |
|
|
259
|
+
| **useUserStore** | 用户信息 | userCode、userName、角色、token |
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## 七、示例页面索引
|
|
264
|
+
|
|
265
|
+
> 所有示例位于 `src/views/`,是功能开发的参考模板。遇到类似需求时,AI 应优先参考对应示例的代码模式。
|
|
266
|
+
|
|
267
|
+
| 示例页面 | 路径 | 对应功能 |
|
|
268
|
+
|---|---|---|
|
|
269
|
+
| 附件管理 | `views/attachment/` | 文件上传/下载/管理 |
|
|
270
|
+
| 组件展示 | `views/component/` | 头像、按钮、详情页、Loading、消息提示 |
|
|
271
|
+
| 数据大屏 | `views/dataScreen/` | 可视化大屏 |
|
|
272
|
+
| 表单示例 | `views/form/` | 级联、图标选择、选择器、树选择、多表单 |
|
|
273
|
+
| 数据变更对比 | `views/form/moreForm/`(`/form/moreFormAnchor`) | v-compare、变更汇总、表格行 I/U/D |
|
|
274
|
+
| 功能示例 | `views/function/` | 地址解析、字典、下载、通知栏、二维码、滚动、时间轴、水印 |
|
|
275
|
+
| 知识图谱 | `views/graph/` | 关系图谱(relation-graph) |
|
|
276
|
+
| 首页/仪表盘 | `views/home/` | Widget 侧边栏、词云、分类图 |
|
|
277
|
+
| 登录页 | `views/login/` | 登录 + 二维码登录 |
|
|
278
|
+
| 移动端 | `views/mobile/` | 客户管理、Loading(Vant) |
|
|
279
|
+
| 权限演示 | `views/permission/` | 角色页面、按钮权限、页面权限 |
|
|
280
|
+
| 表格示例 | `views/table/` | 基础表格、树形表格、VXE 高性能表格 |
|
|
281
|
+
| WebSocket | `views/websocket/` | 实时通信 |
|
|
282
|
+
| 微信 | `views/wechat/` | JS-SDK 集成 |
|
|
283
|
+
| 工作流 | `views/workflow/` | BPMN、G6 流程图、JsPlumb 映射 |
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## 八、功能选型对照表(禁止替换)
|
|
288
|
+
|
|
289
|
+
> 当用户需求涉及以下场景时,**必须使用项目已有的库/组件**,不得引入替代方案。
|
|
290
|
+
|
|
291
|
+
| 需求场景 | 项目选型 | 禁止替代 |
|
|
292
|
+
|---|---|---|
|
|
293
|
+
| 图表 | `echarts` + `ReEchart` | 禁止使用 Chart.js / D3 / Plotly 等 |
|
|
294
|
+
| 关系/知识图谱 | `relation-graph-vue3` | 禁止引入 D3 / vis.js / Cytoscape 等 |
|
|
295
|
+
| 流程图 | `@antv/g6` + `g6-extension-vue` | 禁止引入 Mermaid / X6 / LogicFlow 等 |
|
|
296
|
+
| BPMN 工作流 | `bpmn-js` (Viewer) | 禁止引入其他 BPMN 库 |
|
|
297
|
+
| 字段映射/连线 | `jsplumb` | 禁止引入 LeaderLine / Drawflow 等 |
|
|
298
|
+
| 富文本编辑器 | `@wangeditor/editor` + `ReRichText` | 禁止引入 Quill / TinyMCE / CKEditor 等 |
|
|
299
|
+
| 二维码 | `qrcode` + `ReQrcode` | 禁止引入其他二维码库 |
|
|
300
|
+
| 条形码 | `jsbarcode` + `ReBarcode` | 禁止引入其他条形码库 |
|
|
301
|
+
| 文件预览 | `@file-viewer/*` + `ReFileViewer` | 禁止引入 pdf.js / mammoth 等 |
|
|
302
|
+
| 滑块验证 | `vue3-puzzle-vcode` + `ReVerify` | 禁止引入其他验证码库 |
|
|
303
|
+
| 打字机动画 | `typeit` + `ReTypeit` | 禁止引入其他打字机库 |
|
|
304
|
+
| 粒子动画 | `@tsparticles/slim` | 禁止引入 particles.js 等 |
|
|
305
|
+
| 日期处理 | `dayjs` | 禁止引入 moment / date-fns 等 |
|
|
306
|
+
| HTTP 请求 | 项目封装的 `src/utils/http.ts`(基于 axios) | 禁止直接使用 axios / fetch / ky 等 |
|
|
307
|
+
| 状态管理 | `pinia` + `pinia-plugin-persistedstate` | 禁止引入 vuex / zustand 等 |
|
|
308
|
+
| 原子化 CSS | `unocss` | 禁止引入 tailwindcss / windicss 等 |
|
|
309
|
+
| 拖拽排序 | `sortablejs` | 禁止引入 vuedraggable / dnd-kit 等 |
|
|
310
|
+
| 微信集成 | `weixin-js-sdk` + `useWechat` | 禁止引入其他微信 SDK |
|
|
311
|
+
| 高性能表格 | `vxe-table` | 禁止引入 ag-grid / handsontable 等 |
|
|
312
|
+
| 地址解析 | `address-parse` | 禁止引入其他地址解析库 |
|
|
313
|
+
| 图片压缩 | `browser-image-compression` | 禁止引入其他压缩库 |
|
|
314
|
+
| 颜色处理 | `chroma-js` | 禁止引入 color / polished 等 |
|
|
315
|
+
| 事件总线 | `mitt`(项目封装 `src/utils/mitt.ts`) | 禁止引入 eventemitter3 等 |
|
|
316
|
+
| 编辑页数据变更对比 | `v-compare` + `useCompareStore` + `ChangeSummaryService` / `ChangeSummaryDialog` | 禁止自研 Diff 组件树或第三方 diff UI;按 data-compare 模块 |
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
## 九、使用规则
|
|
321
|
+
|
|
322
|
+
1. **先查后写**:生成任何功能代码前,必须先在本清单中查找是否已有对应的库/组件/Hook/工具
|
|
323
|
+
2. **有则必用**:如果项目已有实现,必须直接使用,不得引入替代方案
|
|
324
|
+
3. **无则上报**:如果确实需要引入新库(清单中没有),必须在输出中明确说明原因,并标注为"待确认"让用户审批
|
|
325
|
+
4. **参考示例**:`src/views/` 下有对应功能的示例页面,应优先参考示例的代码模式
|
|
326
|
+
5. **版本一致**:使用库的版本必须与清单中一致,不得降级或升级
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# 二维码与条形码
|
|
2
|
+
|
|
3
|
+
规范二维码/条形码生成组件的使用。在需要展示扫码、商品条码、票据二维码等场景时参照。
|
|
4
|
+
|
|
5
|
+
## 组件选型
|
|
6
|
+
|
|
7
|
+
| 场景 | 组件 | 底层库 |
|
|
8
|
+
| ------------------- | ----------- | ----------- |
|
|
9
|
+
| 二维码(支持 logo) | `ReQrcode` | `qrcode` |
|
|
10
|
+
| 条形码 | `ReBarcode` | `jsbarcode` |
|
|
11
|
+
|
|
12
|
+
## ReQrcode
|
|
13
|
+
|
|
14
|
+
```vue
|
|
15
|
+
<script setup lang="ts">
|
|
16
|
+
import ReQrcode from "@/components/ReQrcode";
|
|
17
|
+
import logoImg from "@/assets/logo.png";
|
|
18
|
+
|
|
19
|
+
const text = ref("https://example.com");
|
|
20
|
+
const logoUrl = ref(logoImg);
|
|
21
|
+
|
|
22
|
+
function onDone(url: string) {
|
|
23
|
+
console.log("生成完成:", url);
|
|
24
|
+
}
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<template>
|
|
28
|
+
<ReQrcode :text="text" :width="200" @done="onDone" />
|
|
29
|
+
|
|
30
|
+
<!-- 带 logo / 颜色配置 -->
|
|
31
|
+
<ReQrcode
|
|
32
|
+
:text="text"
|
|
33
|
+
:logo="logoUrl"
|
|
34
|
+
:width="200"
|
|
35
|
+
:options="{
|
|
36
|
+
color: { dark: '#55D187', light: '#2d8cf0' },
|
|
37
|
+
}"
|
|
38
|
+
@click="text = ''"
|
|
39
|
+
/>
|
|
40
|
+
</template>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Props
|
|
44
|
+
|
|
45
|
+
| Prop | 类型 | 默认值 | 说明 |
|
|
46
|
+
| ---------- | ------------------------ | ---------- | --------------------------- |
|
|
47
|
+
| `text` | `string \| array` | - | 二维码内容 |
|
|
48
|
+
| `tag` | `'canvas' \| 'img'` | `'canvas'` | 渲染标签;`img` 不支持 logo |
|
|
49
|
+
| `width` | `number` | `200` | 宽度(正方形) |
|
|
50
|
+
| `logo` | `string \| object` | - | logo 地址或配置对象 |
|
|
51
|
+
| `options` | `QRCodeRenderersOptions` | `{}` | qrcode.js 配置 |
|
|
52
|
+
| `disabled` | `boolean` | `false` | 是否显示过期遮罩 |
|
|
53
|
+
|
|
54
|
+
### Events
|
|
55
|
+
|
|
56
|
+
- `done(url)`:生成完成返回 base64 URL。
|
|
57
|
+
- `click`:点击二维码触发。
|
|
58
|
+
- `disabled-click`:点击过期遮罩触发。
|
|
59
|
+
|
|
60
|
+
## ReBarcode
|
|
61
|
+
|
|
62
|
+
```vue
|
|
63
|
+
<script setup lang="ts">
|
|
64
|
+
import ReBarcode from "@/components/ReBarcode";
|
|
65
|
+
|
|
66
|
+
const barcodeText = ref("HP12399300-12");
|
|
67
|
+
const options = reactive({
|
|
68
|
+
lineColor: "#990000",
|
|
69
|
+
background: "#eee",
|
|
70
|
+
});
|
|
71
|
+
</script>
|
|
72
|
+
|
|
73
|
+
<template>
|
|
74
|
+
<ReBarcode :text="barcodeText" />
|
|
75
|
+
<ReBarcode :text="barcodeText" type="EAN13" :options="options" />
|
|
76
|
+
</template>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Props
|
|
80
|
+
|
|
81
|
+
| Prop | 类型 | 默认值 | 说明 |
|
|
82
|
+
| --------- | ---------------------------- | ----------- | ------------------------------------------------------------ |
|
|
83
|
+
| `text` | `string` | - | 条形码内容 |
|
|
84
|
+
| `tag` | `'canvas' \| 'img' \| 'svg'` | `'canvas'` | 渲染标签 |
|
|
85
|
+
| `type` | `string` | `'CODE128'` | 编码格式:`CODE128` / `CODE39` / `EAN13` / `EAN8` / `UPC` 等 |
|
|
86
|
+
| `options` | `object` | `{}` | JsBarcode 完整配置 |
|
|
87
|
+
|
|
88
|
+
## 关键约定
|
|
89
|
+
|
|
90
|
+
1. 二维码内容为空时不渲染,需配合 `v-if` 或默认值处理。
|
|
91
|
+
2. logo 图片需考虑跨域;本地图片建议通过 `import` 引入。
|
|
92
|
+
3. 条形码 `type` 与 `options.format` 同时存在时,`type` 优先级更高。
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# 富文本编辑器
|
|
2
|
+
|
|
3
|
+
规范 wangEditor 富文本编辑器 ReRichText 的使用,含图片/视频上传与 v-model 同步。在需要富文本录入时参照。
|
|
4
|
+
|
|
5
|
+
## 组件
|
|
6
|
+
|
|
7
|
+
使用 `ReRichText` 封装 `@wangeditor/editor`。
|
|
8
|
+
|
|
9
|
+
```vue
|
|
10
|
+
<script setup lang="ts">
|
|
11
|
+
import ReRichText from "@/components/ReRichText";
|
|
12
|
+
|
|
13
|
+
const content = ref("");
|
|
14
|
+
const attachmentIds = ref<string[]>([]);
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<ReRichText
|
|
19
|
+
v-model="content"
|
|
20
|
+
v-model:attachment-ids="attachmentIds"
|
|
21
|
+
:height="300"
|
|
22
|
+
placeholder="请输入内容"
|
|
23
|
+
:toolbar-config="{ excludeKeys: ['insertImage', 'insertVideo'] }"
|
|
24
|
+
:upload-params="{ bizKey: 'news_001', projectStage: 'draft' }"
|
|
25
|
+
/>
|
|
26
|
+
</template>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Props
|
|
30
|
+
|
|
31
|
+
| Prop | 类型 | 默认值 | 说明 |
|
|
32
|
+
| ----------------- | ------------------ | ------------------------------------------------- | ---------------- |
|
|
33
|
+
| `modelValue` | `string` | `''` | HTML 内容 |
|
|
34
|
+
| `height` | `string \| number` | `300` | 编辑器高度 |
|
|
35
|
+
| `placeholder` | `string` | `'请输入内容'` | 占位文案 |
|
|
36
|
+
| `disabled` | `boolean` | `false` | 只读模式 |
|
|
37
|
+
| `uploadImagePath` | `string` | `'/documentInfo/uploadFile'` | 图片上传接口路径 |
|
|
38
|
+
| `uploadVideoPath` | `string` | `'/documentInfo/uploadFile'` | 视频上传接口路径 |
|
|
39
|
+
| `bizKey` | `string` | `''` | 业务主键 |
|
|
40
|
+
| `projectStage` | `string` | `''` | 附件阶段 |
|
|
41
|
+
| `uploadParams` | `object` | `{}` | 上传额外参数 |
|
|
42
|
+
| `toolbarConfig` | `object` | `{ excludeKeys: ['insertImage', 'insertVideo'] }` | 工具栏配置 |
|
|
43
|
+
|
|
44
|
+
## Events
|
|
45
|
+
|
|
46
|
+
- `update:modelValue(html)`:内容同步。
|
|
47
|
+
- `change(html)`:内容变化回调。
|
|
48
|
+
|
|
49
|
+
## 上传模式
|
|
50
|
+
|
|
51
|
+
当前启用 **自定义上传**(`customUpload`),通过项目统一 `getUploadUrl` 接口上传:
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
// 关键参数
|
|
55
|
+
{
|
|
56
|
+
multipartFile: file,
|
|
57
|
+
...uploadParams,
|
|
58
|
+
bizKey,
|
|
59
|
+
projectStage,
|
|
60
|
+
attachmentType: 'news_image',
|
|
61
|
+
fileType: getFileType(file.name),
|
|
62
|
+
operatorCode: userStore.userCode || ''
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
如需切换为 wangEditor 默认 server 模式,注释 `customUpload` 并开放 `server`、`customInsert` 等配置。
|
|
67
|
+
|
|
68
|
+
## 关键约定
|
|
69
|
+
|
|
70
|
+
1. 编辑器实例在 `onBeforeUnmount` 中销毁,避免内存泄漏。
|
|
71
|
+
2. 空内容使用 `editor.isEmpty()` 判断,图片/视频等非文本场景也能正确处理。
|
|
72
|
+
3. 上传成功后会将附件 ID 追加到 `attachmentIds`,用于业务关联。
|
|
73
|
+
4. 全屏编辑时自动启用编辑器,退出后恢复 `disabled` 状态。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 无缝滚动
|
|
2
|
+
|
|
3
|
+
规范无缝滚动、无限滚动列表与轮播滚动效果。在需要公告栏、排行榜、滚动列表时参照。
|
|
4
|
+
|
|
5
|
+
## 组件
|
|
6
|
+
|
|
7
|
+
使用 `ReSeamlessScroll` 实现无缝滚动:
|
|
8
|
+
|
|
9
|
+
```vue
|
|
10
|
+
<ReSeamlessScroll :data="list" :class-option="classOption">
|
|
11
|
+
<ul>
|
|
12
|
+
<li v-for="item in list" :key="item.id">
|
|
13
|
+
{{ item.title }}
|
|
14
|
+
</li>
|
|
15
|
+
</ul>
|
|
16
|
+
</ReSeamlessScroll>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 常用配置
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
const classOption = {
|
|
23
|
+
step: 1, // 步长
|
|
24
|
+
limitMoveNum: 5, // 启动滚动的最小数据量
|
|
25
|
+
hoverStop: true, // 鼠标悬停停止
|
|
26
|
+
direction: "top", // top | bottom | left | right
|
|
27
|
+
singleHeight: 0, // 单步停顿高度
|
|
28
|
+
singleWidth: 0,
|
|
29
|
+
waitTime: 1000, // 单步停顿时间
|
|
30
|
+
autoPlay: true,
|
|
31
|
+
};
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 关键约定
|
|
35
|
+
|
|
36
|
+
1. 数据量小于 `limitMoveNum` 时不滚动。
|
|
37
|
+
2. 水平滚动时内容需要足够宽;垂直滚动时容器需要固定高度。
|
|
38
|
+
3. 组件内部会复制一份内容实现无缝效果,DOM 操作-heavy 场景避免数据频繁更新。
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# 树形表格与树结构
|
|
2
|
+
|
|
3
|
+
## 树结构工具函数
|
|
4
|
+
|
|
5
|
+
### handleTree — 扁平转树
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
import { handleTree } from '@/utils/tree'
|
|
9
|
+
|
|
10
|
+
const treeData = handleTree(flatList, 'id', 'parentId', 'children')
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
| 参数 | 说明 | 默认值 |
|
|
14
|
+
|------|------|--------|
|
|
15
|
+
| `data` | 扁平数组 | — |
|
|
16
|
+
| `id` | ID 字段名 | `'id'` |
|
|
17
|
+
| `parentId` | 父节点字段名 | `'parentId'` |
|
|
18
|
+
| `children` | 子节点字段名 | `'children'` |
|
|
19
|
+
|
|
20
|
+
### buildHierarchyTree — 补充层级信息
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { buildHierarchyTree } from '@/utils/tree'
|
|
24
|
+
|
|
25
|
+
const hierarchyTree = buildHierarchyTree(treeData, [])
|
|
26
|
+
// 为每个节点补充 id、parentId、pathList 层级信息
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## el-table 树形表格
|
|
30
|
+
|
|
31
|
+
```vue
|
|
32
|
+
<el-table
|
|
33
|
+
:data="tableData"
|
|
34
|
+
row-key="id"
|
|
35
|
+
default-expand-all
|
|
36
|
+
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
|
|
37
|
+
>
|
|
38
|
+
<el-table-column prop="name" label="名称" />
|
|
39
|
+
<el-table-column prop="code" label="编码" />
|
|
40
|
+
</el-table>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 树 + 表格联动
|
|
44
|
+
|
|
45
|
+
左侧树形菜单 + 右侧查询表格的经典布局:
|
|
46
|
+
|
|
47
|
+
```vue
|
|
48
|
+
<script setup lang="ts">
|
|
49
|
+
import TreeMenu from './tree.vue'
|
|
50
|
+
|
|
51
|
+
const formQuery = reactive({ deptId: '', form1: '', form2: '' })
|
|
52
|
+
const { onSearch } = useTableSearch(formQuery, getTableList)
|
|
53
|
+
|
|
54
|
+
function onTreeSelect(value) {
|
|
55
|
+
formQuery.deptId = value.selected ? value.id : ''
|
|
56
|
+
onSearch()
|
|
57
|
+
}
|
|
58
|
+
</script>
|
|
59
|
+
|
|
60
|
+
<template>
|
|
61
|
+
<el-row :gutter="20">
|
|
62
|
+
<el-col :span="5">
|
|
63
|
+
<TreeMenu @select="onTreeSelect" />
|
|
64
|
+
</el-col>
|
|
65
|
+
<el-col :span="19">
|
|
66
|
+
<!-- 查询表格 -->
|
|
67
|
+
</el-col>
|
|
68
|
+
</el-row>
|
|
69
|
+
</template>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## ReTreeLine 树形连接线
|
|
73
|
+
|
|
74
|
+
用于 `el-tree` 自定义节点,展示层级连线效果。
|
|
75
|
+
|
|
76
|
+
```vue
|
|
77
|
+
<script setup lang="ts">
|
|
78
|
+
import { ReTreeLine } from '@/components/ReTreeLine'
|
|
79
|
+
</script>
|
|
80
|
+
|
|
81
|
+
<template>
|
|
82
|
+
<el-tree :data="treeData" :props="{ label: 'name' }">
|
|
83
|
+
<template #default="{ node, data }">
|
|
84
|
+
<ReTreeLine :node="node" :data="data" :tree-data="treeData">
|
|
85
|
+
<template #default>
|
|
86
|
+
<span>{{ node.label }}</span>
|
|
87
|
+
</template>
|
|
88
|
+
</ReTreeLine>
|
|
89
|
+
</template>
|
|
90
|
+
</el-tree>
|
|
91
|
+
</template>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 兼容性
|
|
95
|
+
|
|
96
|
+
- 兼容 `el-tree` 与 `el-tree-v2`(虚拟树)。
|
|
97
|
+
- 使用虚拟树时**必须**传入 `:tree-data` 属性。
|
|
98
|
+
|
|
99
|
+
## 关键约定
|
|
100
|
+
|
|
101
|
+
1. 后端返回扁平数据时,前端使用 `handleTree` 转换为树结构。
|
|
102
|
+
2. 懒加载树通过 `:load` 属性实现,回写数据使用 `:cache-data`。
|
|
103
|
+
3. 树节点选择事件需同时处理选中和取消选中两种状态,清空对应查询条件。
|
|
104
|
+
4. 树表格的 `row-key` 必须指定唯一标识字段。
|
|
105
|
+
5. `ReTreeLine` 的插槽用于自定义节点内容,外层由组件自动绘制连线。
|
|
106
|
+
|
|
107
|
+
## 关联文件
|
|
108
|
+
|
|
109
|
+
- [src/utils/tree.ts](file:///e:/work/vue3-web-temp/src/utils/tree.ts)
|
|
110
|
+
- [src/components/ReTreeLine/index.ts](file:///e:/work/vue3-web-temp/src/components/ReTreeLine/index.ts)
|
|
111
|
+
- [src/views/table/treeTable/index.vue](file:///e:/work/vue3-web-temp/src/views/table/treeTable/index.vue)
|