@dtt_siye/atool 1.2.1 → 1.3.1
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/VERSION +1 -1
- package/hooks/session-start +9 -12
- package/lib/export-analysis.sh +100 -0
- package/lib/install-kiro.sh +11 -6
- package/lib/install-skills.sh +16 -0
- package/lib/knowledge-graph.sh +490 -83
- package/lib/pre-scan.sh +70 -5
- package/package.json +1 -1
- package/skills/doc-standards-enforcer/SKILL.md +200 -220
- package/skills/doc-standards-enforcer/examples/valid-document-example.md +5 -5
- package/skills/doc-standards-enforcer/references/101-standards-summary.md +17 -17
- package/skills/project-analyze/SKILL.md +157 -124
- package/skills/project-analyze/phases/{phase0-discovery.md → archive/phase0-discovery.md} +6 -2
- package/skills/project-analyze/phases/{phase1-inventory.md → archive/phase1-inventory.md} +10 -0
- package/skills/project-analyze/phases/{phase2-deep-analysis.md → archive/phase2-deep-analysis.md} +20 -0
- package/skills/project-analyze/phases/{phase3-knowledge-graph.md → archive/phase3-knowledge-graph.md} +31 -0
- package/skills/project-analyze/phases/{phase3a-multi-dimensional.md → archive/phase3a-multi-dimensional.md} +13 -0
- package/skills/project-analyze/phases/{phase5-synthesis.md → archive/phase5-synthesis.md} +20 -0
- package/skills/project-analyze/phases/phase1-setup.md +182 -0
- package/skills/project-analyze/phases/phase2-understand.md +114 -0
- package/skills/project-analyze/phases/phase2.5-refine.md +284 -0
- package/skills/project-analyze/phases/phase3-graph.md +77 -0
- package/skills/project-analyze/phases/phase4-synthesize.md +241 -0
- package/skills/project-analyze/phases/phase5-export.md +207 -0
- package/skills/project-analyze/prompts/{deep-analysis-agent.md → archive/deep-analysis-agent.md} +14 -1
- package/skills/project-analyze/prompts/understand-agent.md +424 -0
- package/skills/project-analyze/rules/android.md +61 -260
- package/skills/project-analyze/rules/devops.md +61 -421
- package/skills/project-analyze/rules/generic.md +53 -221
- package/skills/project-analyze/rules/go.md +60 -275
- package/skills/project-analyze/rules/harmony.md +64 -237
- package/skills/project-analyze/rules/java.md +47 -485
- package/skills/project-analyze/rules/mobile-flutter.md +57 -292
- package/skills/project-analyze/rules/mobile-react-native.md +65 -262
- package/skills/project-analyze/rules/mobile-swift.md +58 -303
- package/skills/project-analyze/rules/python.md +50 -296
- package/skills/project-analyze/rules/rust-tauri.md +51 -217
- package/skills/project-analyze/rules/rust.md +50 -274
- package/skills/project-analyze/rules/web-nextjs.md +61 -335
- package/skills/project-analyze/rules/web-react.md +50 -272
- package/skills/project-analyze/rules/web-vue.md +58 -352
- package/skills/project-analyze/rules/web.md +55 -347
- package/skills/requirements-writer/README.md +1 -1
- package/skills/requirements-writer/SKILL.md +423 -282
- package/skills/requirements-writer/examples/prd-outline-example.md +5 -5
- package/skills/requirements-writer/templates/module-prd-template.md +15 -15
- package/skills/requirements-writer/templates/prd-outline-template.md +3 -3
- package/skills/requirements-writer/templates/user-story-template.md +23 -23
- package/skills/software-architecture/SKILL.md +318 -17
- package/templates/CLAUDE.md.android +17 -0
- package/templates/CLAUDE.md.devops +17 -0
- package/templates/CLAUDE.md.generic +17 -0
- package/templates/CLAUDE.md.go +17 -0
- package/templates/CLAUDE.md.harmony +17 -0
- package/templates/CLAUDE.md.java +17 -0
- package/templates/CLAUDE.md.mobile-flutter +17 -0
- package/templates/CLAUDE.md.mobile-react-native +17 -0
- package/templates/CLAUDE.md.mobile-swift +17 -0
- package/templates/CLAUDE.md.python +17 -0
- package/templates/CLAUDE.md.rust +17 -0
- package/templates/CLAUDE.md.rust-tauri +17 -0
- package/templates/CLAUDE.md.web +17 -0
- package/templates/cursor-rules.android.mdc +17 -0
- package/templates/cursor-rules.devops.mdc +17 -0
- package/templates/cursor-rules.generic.mdc +17 -0
- package/templates/cursor-rules.go.mdc +17 -0
- package/templates/cursor-rules.harmony.mdc +17 -0
- package/templates/cursor-rules.java.mdc +17 -0
- package/templates/cursor-rules.mobile-flutter.mdc +17 -0
- package/templates/cursor-rules.mobile-react-native.mdc +17 -0
- package/templates/cursor-rules.mobile-swift.mdc +17 -0
- package/templates/cursor-rules.python.mdc +17 -0
- package/templates/cursor-rules.rust-tauri.mdc +17 -0
- package/templates/cursor-rules.rust.mdc +17 -0
- package/templates/cursor-rules.web.mdc +17 -0
- package/templates/kiro-steering.android.md +6 -0
- package/templates/kiro-steering.devops.md +6 -0
- package/templates/kiro-steering.generic.md +6 -0
- package/templates/kiro-steering.go.md +6 -0
- package/templates/kiro-steering.harmony.md +6 -0
- package/templates/kiro-steering.java.md +6 -0
- package/templates/kiro-steering.mobile-flutter.md +6 -0
- package/templates/kiro-steering.mobile-react-native.md +6 -0
- package/templates/kiro-steering.mobile-swift.md +6 -0
- package/templates/kiro-steering.python.md +6 -0
- package/templates/kiro-steering.rust-tauri.md +6 -0
- package/templates/kiro-steering.rust.md +6 -0
- package/templates/kiro-steering.web.md +6 -0
- package/templates/shared/hard-rules.md +21 -0
- /package/skills/project-analyze/phases/{phase0.5-prescan.md → archive/phase0.5-prescan.md} +0 -0
- /package/skills/project-analyze/phases/{phase2a-l4-analysis.md → archive/phase2a-l4-analysis.md} +0 -0
- /package/skills/project-analyze/phases/{phase2b-l5-analysis.md → archive/phase2b-l5-analysis.md} +0 -0
- /package/skills/project-analyze/phases/{phase4-code-quality.md → archive/phase4-code-quality.md} +0 -0
- /package/skills/project-analyze/phases/{phase6-validation.md → archive/phase6-validation.md} +0 -0
- /package/skills/project-analyze/prompts/{code-review-agent.md → archive/code-review-agent.md} +0 -0
- /package/skills/project-analyze/prompts/{inventory-agent.md → archive/inventory-agent.md} +0 -0
- /package/skills/project-analyze/prompts/{l4-analysis-agent.md → archive/l4-analysis-agent.md} +0 -0
|
@@ -2,377 +2,83 @@
|
|
|
2
2
|
|
|
3
3
|
Vue 3 项目专属分析规则,与 `rules/web.md` 配合使用。本文件中的规则优先于 `web.md` 中的同名字段。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> **编码规范**:本规则不包含编码规范内容。Phase 2.5 精炼阶段会自动加载 `web-conventions` skill 作为规范约束。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## 模块发现策略
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
<template> — UI 结构层(el-* 组件引用、v-if/v-for、事件绑定)
|
|
11
|
-
<script setup> — 逻辑层(defineProps、defineEmits、composables、生命周期)
|
|
12
|
-
<style> — 样式层(scoped SCSS、CSS 变量、设计 Token)
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Vue SFC 三段式分析
|
|
16
|
-
|
|
17
|
-
### Template 段分析
|
|
18
|
-
|
|
19
|
-
**扫描文件**: `src/**/*.vue` 的 `<template>` 部分
|
|
20
|
-
|
|
21
|
-
**提取内容**:
|
|
22
|
-
- 使用的 UI 库组件(如 `el-table`, `el-form`)
|
|
23
|
-
- 条件渲染(`v-if` / `v-show` 的条件变量)
|
|
24
|
-
- 列表渲染(`v-for` 的数据源变量)
|
|
25
|
-
- 事件绑定(`@click`, `@change` 等关联的方法)
|
|
26
|
-
- 动态组件(`<component :is="...">`)
|
|
27
|
-
- 插槽使用(`<slot name="...">`)
|
|
28
|
-
|
|
29
|
-
**输出示例**:
|
|
30
|
-
```
|
|
31
|
-
### UserList — Template 分析
|
|
32
|
-
- **UI 库组件**: el-table, el-table-column, el-pagination, el-dialog, el-form
|
|
33
|
-
- **条件渲染**:
|
|
34
|
-
| 指令 | 条件变量 | 用途 |
|
|
35
|
-
|------|----------|------|
|
|
36
|
-
| v-if="loading" | loading | 显示加载遮罩 |
|
|
37
|
-
| v-if="dialogVisible" | dialogVisible | 显示编辑弹窗 |
|
|
38
|
-
- **列表渲染**:
|
|
39
|
-
| 指令 | 数据源 | 迭代变量 |
|
|
40
|
-
|------|--------|----------|
|
|
41
|
-
| v-for="item in tableData" | tableData | item |
|
|
42
|
-
- **事件绑定**:
|
|
43
|
-
| 事件 | 处理方法 | 说明 |
|
|
44
|
-
|------|----------|------|
|
|
45
|
-
| @selection-change="handleSelectionChange" | handleSelectionChange | 多选变更 |
|
|
46
|
-
| @size-change="handleSizeChange" | handleSizeChange | 切换每页条数 |
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### Script Setup 段分析
|
|
50
|
-
|
|
51
|
-
**扫描文件**: `src/**/*.vue` 的 `<script setup>` 部分
|
|
52
|
-
|
|
53
|
-
**提取内容**:
|
|
54
|
-
- `defineProps<T>()` — Props 类型定义
|
|
55
|
-
- `defineEmits<T>()` — 事件定义
|
|
56
|
-
- `ref()` / `reactive()` / `computed()` — 响应式变量
|
|
57
|
-
- `onMounted()` / `watch()` / `watchEffect()` — 生命周期和监听
|
|
58
|
-
- 引入的 composables(`useXxx()`)
|
|
59
|
-
- 引入的 API 函数
|
|
60
|
-
|
|
61
|
-
**输出示例**:
|
|
62
|
-
```
|
|
63
|
-
### UserForm — Script Setup 分析
|
|
64
|
-
- **Props**:
|
|
65
|
-
```typescript
|
|
66
|
-
defineProps<{
|
|
67
|
-
visible: boolean
|
|
68
|
-
userId?: string
|
|
69
|
-
}>()
|
|
70
|
-
```
|
|
71
|
-
- **Emits**:
|
|
72
|
-
```typescript
|
|
73
|
-
defineEmits<{
|
|
74
|
-
(e: 'update:visible', val: boolean): void
|
|
75
|
-
(e: 'refresh'): void
|
|
76
|
-
}>()
|
|
77
|
-
```
|
|
78
|
-
- **响应式变量**:
|
|
79
|
-
| 名称 | 类型 | 初始值 | 说明 |
|
|
80
|
-
|------|------|--------|------|
|
|
81
|
-
| formRef | Ref<FormInstance> | null | 表单引用 |
|
|
82
|
-
| formData | Reactive<UserForm> | {...} | 表单数据 |
|
|
83
|
-
| rules | Reactive<FormRules> | {...} | 校验规则 |
|
|
84
|
-
| loading | Ref<boolean> | false | 提交加载状态 |
|
|
85
|
-
- **生命周期**:
|
|
86
|
-
| Hook | 行为 |
|
|
87
|
-
|------|------|
|
|
88
|
-
| watch(() => props.visible) | 弹窗打开时重置表单 |
|
|
89
|
-
| watch(() => props.userId) | userId 变化时获取用户详情 |
|
|
90
|
-
- **引入的 composables**: useDict('sys_normal_disable')
|
|
91
|
-
- **引入的 API**: getUserDetail(), createUser(), updateUser()
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
### Style 段分析
|
|
95
|
-
|
|
96
|
-
**扫描文件**: `src/**/*.vue` 的 `<style>` 部分 + 全局样式文件
|
|
97
|
-
|
|
98
|
-
**提取内容**:
|
|
99
|
-
- `scoped` / 非 scoped 标识
|
|
100
|
-
- 使用的 CSS 预处理器(SCSS / Less)
|
|
101
|
-
- 组件内的 CSS 变量引用
|
|
102
|
-
- 全局样式覆盖
|
|
9
|
+
Vue 项目按 SFC(Single File Component)三段式 + Composition API 发现模块边界:
|
|
103
10
|
|
|
104
|
-
|
|
11
|
+
- **页面模块**: `src/views/{module}/` 下每个子目录
|
|
12
|
+
- **组件模块**: `src/components/{name}/` 下 3+ 文件的子目录
|
|
13
|
+
- **状态模块**: `src/store/modules/` 或 `src/stores/` 下每个子目录
|
|
14
|
+
- **Composables 模块**: `src/composables/` 下每个文件
|
|
105
15
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
**提取内容**:
|
|
109
|
-
- `defineStore` 的 ID 和配置模式(Setup Store / Options Store)
|
|
110
|
-
- State 完整接口(所有字段 + 类型)
|
|
111
|
-
- Getters(名称 + 返回类型 + 计算逻辑摘要)
|
|
112
|
-
- Actions(签名 + 内部调用的 API + 修改的 state 字段)
|
|
113
|
-
- 跨 Store 依赖(在 Action 中调用了其他 Store 的 Action/Getter)
|
|
114
|
-
- `persist` 插件配置(存储 key、存储位置、需要持久化的字段)
|
|
115
|
-
|
|
116
|
-
**输出示例**:
|
|
117
|
-
```
|
|
118
|
-
### useUserStore(Options Store)
|
|
119
|
-
- **文件**: `src/stores/modules/user.ts`
|
|
120
|
-
- **Store ID**: `'user'`
|
|
121
|
-
- **State 接口**:
|
|
122
|
-
```typescript
|
|
123
|
-
interface UserState {
|
|
124
|
-
token: string
|
|
125
|
-
userInfo: UserInfo | null
|
|
126
|
-
roles: string[]
|
|
127
|
-
permissions: string[]
|
|
128
|
-
}
|
|
129
|
-
```
|
|
130
|
-
| 字段 | 类型 | 说明 |
|
|
131
|
-
|------|------|------|
|
|
132
|
-
| token | string | JWT token |
|
|
133
|
-
| userInfo | UserInfo \| null | 用户详情 |
|
|
134
|
-
| roles | string[] | 角色标识列表 |
|
|
135
|
-
| permissions | string[] | 权限标识列表(如 ['system:user:add']) |
|
|
16
|
+
不视为独立模块:单文件入口(`main.ts`, `App.vue`, `index.ts`)、纯导出桶文件、`utils/`/`helpers/` 目录。
|
|
136
17
|
|
|
137
|
-
|
|
138
|
-
| 名称 | 返回类型 | 计算逻辑 |
|
|
139
|
-
|------|----------|----------|
|
|
140
|
-
| isAdmin | boolean | roles.includes('admin') |
|
|
141
|
-
| userName | string | userInfo?.nickname ?? '' |
|
|
18
|
+
## 入口识别
|
|
142
19
|
|
|
143
|
-
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
| login | (loginData: LoginForm) => Promise<void> | authApi.login() | token |
|
|
147
|
-
| getInfo | () => Promise<void> | userApi.getUserInfo() | userInfo, roles, permissions |
|
|
148
|
-
| logout | () => Promise<void> | - | 全部重置 |
|
|
20
|
+
- 路由配置文件: `src/router/index.ts`,识别静态路由 vs 动态路由(`router.addRoute()`)
|
|
21
|
+
- 组件映射: `import.meta.glob('../views/**/*.vue')` — 动态路由加载模式
|
|
22
|
+
- 微前端检测: `main.ts` 含 `registerMicroApps`(qiankun),`vue.config.js` 含 `devServer.headers`
|
|
149
23
|
|
|
150
|
-
|
|
151
|
-
- login 成功后调用 `usePermissionStore().generateRoutes(roles)`
|
|
152
|
-
- **持久化**: pinia-plugin-persistedstate, key: 'user', pick: ['token']
|
|
153
|
-
```
|
|
24
|
+
## 架构模式识别
|
|
154
25
|
|
|
155
|
-
|
|
26
|
+
通过文件结构判断 Vue 2 vs Vue 3 及组织模式:
|
|
156
27
|
|
|
157
|
-
|
|
28
|
+
| 特征 | 判断 |
|
|
29
|
+
|------|------|
|
|
30
|
+
| `<script setup>` + `defineProps` | Vue 3 Composition API |
|
|
31
|
+
| `export default { data(), methods: {} }` | Vue 2 Options API |
|
|
32
|
+
| `src/composables/` 目录 | Composition API 逻辑复用 |
|
|
33
|
+
| `src/store/modules/` | Vuex 模块化 |
|
|
34
|
+
| `src/stores/` + `defineStore` | Pinia |
|
|
35
|
+
| `src/views/` + `src/api/` + `src/store/` 三层结构 | 标准后台管理系统架构 |
|
|
158
36
|
|
|
159
|
-
|
|
160
|
-
- 静态路由 vs 动态路由(从后端获取的菜单路由)
|
|
161
|
-
- 路由 meta 字段规范(title, icon, roles, hidden, keepAlive 等)
|
|
162
|
-
- 路由守卫(beforeEach 链路)
|
|
163
|
-
- 动态路由加载方式(`router.addRoute()` vs 组件映射)
|
|
164
|
-
- keep-alive 缓存策略
|
|
37
|
+
**qiankun 微前端识别**:主应用 `registerMicroApps` 列表(name, entry, activeRule),子应用生命周期钩子(bootstrap/mount/unmount),共享状态方案(initGlobalState/props 传递)。
|
|
165
38
|
|
|
166
|
-
|
|
167
|
-
```
|
|
168
|
-
### 路由配置
|
|
169
|
-
- **模式**: createWebHistory()
|
|
170
|
-
- **静态路由**:
|
|
171
|
-
| 路径 | 组件 | Meta.title | Meta.hidden | 权限 |
|
|
172
|
-
|------|------|------------|-------------|------|
|
|
173
|
-
| /login | LoginPage | '登录' | true | 公开 |
|
|
174
|
-
| /redirect/:path(.*) | RedirectPage | - | true | 公开 |
|
|
175
|
-
| /404 | NotFoundPage | '404' | true | 公开 |
|
|
39
|
+
## 数据流模式
|
|
176
40
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
41
|
+
**Pinia 检测**:扫描 `src/stores/**/*.ts`,识别:
|
|
42
|
+
- defineStore 配置模式(Options Store / Setup Store)
|
|
43
|
+
- State 接口完整字段 + 类型
|
|
44
|
+
- Actions 调用的 API 函数
|
|
45
|
+
- 跨 Store 依赖(Action 中调用其他 Store)
|
|
46
|
+
- pinia-plugin-persistedstate 配置(key、pick 字段)
|
|
180
47
|
|
|
181
|
-
|
|
182
|
-
```typescript
|
|
183
|
-
interface RouteMeta {
|
|
184
|
-
title: string // 页面标题
|
|
185
|
-
icon?: string // 菜单图标
|
|
186
|
-
roles?: string[] // 允许访问的角色
|
|
187
|
-
hidden?: boolean // 是否在菜单中隐藏
|
|
188
|
-
keepAlive?: boolean // 是否缓存
|
|
189
|
-
affix?: boolean // 是否固定在标签栏
|
|
190
|
-
}
|
|
191
|
-
```
|
|
48
|
+
**Vuex 检测**:扫描 `src/store/modules/**/*.ts`,识别模块命名空间、mutations/actions/getters。
|
|
192
49
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
→ 无 token → 白名单?→ 放行 : 跳转 /login?redirect={原路径}
|
|
198
|
-
```
|
|
50
|
+
**Vue Router 数据流**:
|
|
51
|
+
- 静态路由 vs 动态路由(后端菜单 → `router.addRoute()`)
|
|
52
|
+
- 路由 meta 规范(title/icon/roles/hidden/keepAlive/affix)
|
|
53
|
+
- 路由守卫 beforeEach 链路(NProgress → 白名单 → token 检查 → 权限检查)
|
|
199
54
|
|
|
200
|
-
##
|
|
55
|
+
## 分析关注点
|
|
201
56
|
|
|
202
|
-
|
|
57
|
+
- **Vue 版本检测**: Vue 2(`vue: ^2.x`)vs Vue 3(`vue: ^3.x`),Composition API 使用比例
|
|
58
|
+
- **响应式系统**: `ref()` vs `reactive()` 使用模式,`computed()` 依赖关系,`watch` vs `watchEffect`
|
|
59
|
+
- **SFC 三段式分析**: `<template>` 中的 UI 库组件引用、`<script setup>` 中的 composables、`<style scoped>` 中的 CSS 变量引用
|
|
60
|
+
- **keep-alive 缓存策略**: 哪些路由/组件配置了 keepAlive,缓存边界
|
|
61
|
+
- **Axios 封装**: 请求/响应拦截器逻辑,token 注入方式,错误码映射
|
|
203
62
|
|
|
204
|
-
|
|
205
|
-
- 主应用注册的子应用列表(name + entry + activeRule)
|
|
206
|
-
- 子应用的生命周期钩子(bootstrap, mount, unmount)
|
|
207
|
-
- 共享状态方案(initGlobalState / props 传递)
|
|
208
|
-
- 子应用间通信方式
|
|
63
|
+
## 输出示例
|
|
209
64
|
|
|
210
|
-
**输出示例**:
|
|
211
|
-
```
|
|
212
|
-
### 微前端架构(qiankun)
|
|
213
|
-
- **主应用**: locode-front (port: 3000)
|
|
214
|
-
- **子应用列表**:
|
|
215
|
-
| 名称 | 入口 | 激活规则 | 端口 |
|
|
216
|
-
|------|------|----------|------|
|
|
217
|
-
| sub-app-a | //localhost:3001 | /sub-a | 3001 |
|
|
218
|
-
| sub-app-b | //localhost:3002 | /sub-b | 3002 |
|
|
219
|
-
- **共享状态**: 主应用通过 props 传递 token、userInfo
|
|
220
|
-
- **通信方式**: CustomEvent + initGlobalState
|
|
221
65
|
```
|
|
66
|
+
### useUserStore(Pinia Options Store)
|
|
67
|
+
- Store ID: 'user'
|
|
68
|
+
- State: token (string), userInfo (UserInfo|null), roles (string[]), permissions (string[])
|
|
69
|
+
- Getters: isAdmin → roles.includes('admin')
|
|
70
|
+
- Actions: login(loginData) → authApi.login() → 修改 token;getInfo() → userApi.getUserInfo() → 修改 userInfo/roles/permissions
|
|
71
|
+
- 跨 Store: login 成功后调用 usePermissionStore().generateRoutes(roles)
|
|
72
|
+
- 持久化: pinia-plugin-persistedstate, key: 'user', pick: ['token']
|
|
222
73
|
|
|
223
|
-
|
|
74
|
+
### 路由守卫链路
|
|
75
|
+
beforeEach → NProgress.start() → 白名单检查(放行)
|
|
76
|
+
→ 有 token → 已获取用户信息?→ 放行 : 调用 getInfo()
|
|
77
|
+
→ 无 token → 白名单?→ 放行 : 跳转 /login?redirect={原路径}
|
|
224
78
|
|
|
225
|
-
|
|
226
|
-
-
|
|
227
|
-
-
|
|
228
|
-
-
|
|
229
|
-
|
|
230
|
-
输出到 `.atool-docs/micro-frontend-map.json`:
|
|
231
|
-
```json
|
|
232
|
-
{
|
|
233
|
-
"main_app": {
|
|
234
|
-
"name": "locode-front-master-vue3",
|
|
235
|
-
"docs_path": "./docs/"
|
|
236
|
-
},
|
|
237
|
-
"sub_apps": [
|
|
238
|
-
{
|
|
239
|
-
"name": "system",
|
|
240
|
-
"entry": "//localhost:10010/system/",
|
|
241
|
-
"docs_path": "../locode-front-system-vue3/docs/",
|
|
242
|
-
"shared_with_main": ["utils/", "hooks/", "directives/", "config/axios/"]
|
|
243
|
-
}
|
|
244
|
-
],
|
|
245
|
-
"shared_code_analysis": {
|
|
246
|
-
"identical_dirs": ["src/utils/", "src/hooks/", "src/directives/", "src/plugins/"],
|
|
247
|
-
"version_conflicts": {
|
|
248
|
-
"vue": { "main": "3.4.20", "sub_apps": "3.3.8" },
|
|
249
|
-
"element-plus": { "main": "2.5.3", "sub_apps": "2.4.2" }
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
79
|
+
### 微前端架构(qiankun,如适用)
|
|
80
|
+
- 主应用: locode-front (port: 3000)
|
|
81
|
+
- 子应用: [{ name, entry, activeRule, port }]
|
|
82
|
+
- 共享状态: 主应用通过 props 传递 token、userInfo
|
|
83
|
+
- 通信方式: CustomEvent + initGlobalState
|
|
253
84
|
```
|
|
254
|
-
|
|
255
|
-
## Axios 封装分析
|
|
256
|
-
|
|
257
|
-
**扫描文件**: `src/utils/request.ts`, `src/api/**/*.ts`
|
|
258
|
-
|
|
259
|
-
**提取内容**:
|
|
260
|
-
- Axios 实例配置(baseURL, timeout, headers)
|
|
261
|
-
- 请求拦截器(token 注入、loading 管理)
|
|
262
|
-
- 响应拦截器(错误码映射、token 刷新、消息提示)
|
|
263
|
-
- API 模块化组织方式
|
|
264
|
-
|
|
265
|
-
**输出示例**:
|
|
266
|
-
```
|
|
267
|
-
### Axios 配置
|
|
268
|
-
- **文件**: `src/utils/request.ts`
|
|
269
|
-
- **baseURL**: import.meta.env.VITE_API_BASE_URL || '/api'
|
|
270
|
-
- **timeout**: 15000ms
|
|
271
|
-
- **请求拦截器**:
|
|
272
|
-
1. 从 useUserStore().token 读取 token
|
|
273
|
-
2. 添加 `Authorization: Bearer ${token}`
|
|
274
|
-
3. NProgress.start()
|
|
275
|
-
- **响应拦截器**:
|
|
276
|
-
| 状态码 | 处理方式 |
|
|
277
|
-
|--------|----------|
|
|
278
|
-
| 200 | 返回 data.data |
|
|
279
|
-
| 401 | 调用 refreshToken() → 成功则重发请求 → 失败则跳转 /login |
|
|
280
|
-
| 403 | ElMessage.error('没有操作权限') |
|
|
281
|
-
| 500 | ElMessage.error('服务器内部错误') |
|
|
282
|
-
| 默认 | ElMessage.error(msg) |
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
## Element Plus 设计 Token 提取
|
|
286
|
-
|
|
287
|
-
**扫描文件**: `src/styles/**/*.scss`, `src/styles/**/*.css`, `tailwind.config.*`
|
|
288
|
-
|
|
289
|
-
**提取内容**:
|
|
290
|
-
- `:root` CSS 变量(Element Plus 主题色)
|
|
291
|
-
- `.dark` 暗色模式覆盖变量
|
|
292
|
-
- SCSS 变量(`$--color-primary` 等)
|
|
293
|
-
- 布局变量(侧边栏宽度、头部高度)
|
|
294
|
-
- Element Plus 自定义主题配置
|
|
295
|
-
|
|
296
|
-
**输出示例**:
|
|
297
|
-
```
|
|
298
|
-
### Element Plus 主题 Token
|
|
299
|
-
**来源**: `src/styles/element-variables.scss`
|
|
300
|
-
| 变量 | 值 | 用途 |
|
|
301
|
-
|------|------|------|
|
|
302
|
-
| --el-color-primary | #00a3e0 | 主色调 |
|
|
303
|
-
| --el-color-primary-light-3 | #33b7e9 | 主色浅 3 |
|
|
304
|
-
| --el-color-primary-light-5 | #80cdef | 主色浅 5 |
|
|
305
|
-
| --el-color-primary-light-7 | #b3e4f5 | 主色浅 7 |
|
|
306
|
-
| --el-color-primary-light-9 | #e6f6fb | 主色浅 9 |
|
|
307
|
-
| --el-color-success | #67c23a | 成功 |
|
|
308
|
-
| --el-color-warning | #e6a23c | 警告 |
|
|
309
|
-
| --el-color-danger | #f56c6c | 危险 |
|
|
310
|
-
| --el-color-info | #909399 | 信息 |
|
|
311
|
-
| --el-bg-color | #ffffff | 背景色 |
|
|
312
|
-
| --el-text-color-primary | #303133 | 主文本色 |
|
|
313
|
-
|
|
314
|
-
### 布局变量
|
|
315
|
-
**来源**: `src/styles/variables.module.scss`
|
|
316
|
-
| 变量 | 值 | 用途 |
|
|
317
|
-
|------|------|------|
|
|
318
|
-
| $sideBarWidth | 210px | 侧边栏展开宽度 |
|
|
319
|
-
| $sideBarCollapsedWidth | 64px | 侧边栏折叠宽度 |
|
|
320
|
-
| $navbarHeight | 50px | 顶部导航栏高度 |
|
|
321
|
-
| $tagsViewHeight | 34px | 标签栏高度 |
|
|
322
|
-
|
|
323
|
-
### 暗色模式
|
|
324
|
-
**切换方式**: `<el-switch>` 切换 `html.dark` class
|
|
325
|
-
**覆盖文件**: `src/styles/dark.scss`
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
## 输出模板
|
|
329
|
-
|
|
330
|
-
### COMPONENT.md 章节结构(Vue 特有)
|
|
331
|
-
|
|
332
|
-
```markdown
|
|
333
|
-
# 组件文档
|
|
334
|
-
|
|
335
|
-
## 页面组件(Views)
|
|
336
|
-
按路由分组的页面组件,每个包含:
|
|
337
|
-
- 路径 + 对应路由
|
|
338
|
-
- Template 分析(使用的 UI 组件、条件/列表渲染)
|
|
339
|
-
- Script Setup 分析(Props、Emits、响应式变量、生命周期)
|
|
340
|
-
- 使用的 composables / store / API
|
|
341
|
-
|
|
342
|
-
## 通用组件(Components)
|
|
343
|
-
按功能分组的可复用组件
|
|
344
|
-
|
|
345
|
-
## Composables
|
|
346
|
-
可复用的组合式函数
|
|
347
|
-
|
|
348
|
-
## Store 详解
|
|
349
|
-
每个 Store 的完整文档(State/Getters/Actions/依赖关系)
|
|
350
|
-
|
|
351
|
-
## 路由详解
|
|
352
|
-
路由结构 + 守卫 + 动态加载机制
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
## 模块边界识别
|
|
356
|
-
|
|
357
|
-
以下目录模式下的每个子目录视为独立模块(L2+ 分析时生成 MODULE-DOC.md):
|
|
358
|
-
|
|
359
|
-
| 层 | 扫描路径 | 模块判定规则 | MODULE-DOC slug 来源 |
|
|
360
|
-
|----|----------|-------------|---------------------|
|
|
361
|
-
| 页面/视图层 | `src/views/{module}/` | 每个子目录 | 目录名 kebab-case |
|
|
362
|
-
| API/服务层 | `src/api/{module}/` | 每个子目录 | 目录名 kebab-case |
|
|
363
|
-
| 状态管理层 | `src/store/modules/` | 每个子目录 | 目录名 kebab-case |
|
|
364
|
-
| 组件层 | `src/components/{name}/` | 3+ 文件的子目录 | 目录名 kebab-case |
|
|
365
|
-
| Composables 层 | `src/composables/` | 每个文件 | 文件名去后缀 kebab-case |
|
|
366
|
-
|
|
367
|
-
**不视为独立模块的情况**:
|
|
368
|
-
- 单文件入口(如 `main.ts`, `App.vue`, `index.ts`)
|
|
369
|
-
- 纯导出桶文件(`index.ts` 仅有 re-export)
|
|
370
|
-
- 工具函数目录(`utils/`, `helpers/`)— 合并为一个模块
|
|
371
|
-
|
|
372
|
-
## Token 管理
|
|
373
|
-
|
|
374
|
-
- 每个子任务分析 ≤10 个 `.vue` 文件
|
|
375
|
-
- `.vue` 文件同时分析 template + script + style 三段
|
|
376
|
-
- Store 文件单独分组分析
|
|
377
|
-
- API 模块单独分组分析
|
|
378
|
-
- 样式文件单独分组分析
|