ai-engineering-init 1.4.3 → 1.5.0
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/.cursor/skills/bug-detective/SKILL.md +19 -19
- package/.cursor/skills/project-navigator/SKILL.md +164 -258
- package/package.json +7 -1
- package/scripts/build-skills.js +180 -0
- package/src/platform-map.json +56 -0
- package/src/skills/add-skill/SKILL.md +488 -0
- package/src/skills/add-todo/SKILL.md +269 -0
- package/src/skills/api-development/SKILL.md +266 -0
- package/src/skills/architecture-design/SKILL.md +262 -0
- package/src/skills/backend-annotations/SKILL.md +302 -0
- package/src/skills/banana-image/CHANGELOG.md +37 -0
- package/src/skills/banana-image/README.md +146 -0
- package/src/skills/banana-image/SKILL.md +171 -0
- package/src/skills/banana-image/assets/logo.png +0 -0
- package/src/skills/banana-image/references/advanced-usage.md +189 -0
- package/src/skills/banana-image/scripts/apply_template.py +125 -0
- package/src/skills/banana-image/scripts/banana_image_exec.ts +412 -0
- package/src/skills/banana-image/scripts/batch_prep.py +82 -0
- package/src/skills/banana-image/scripts/package-lock.json +1437 -0
- package/src/skills/banana-image/scripts/package.json +18 -0
- package/src/skills/banana-image/scripts/requirements.txt +10 -0
- package/src/skills/banana-image/templates/poster.json +22 -0
- package/src/skills/banana-image/templates/product.json +17 -0
- package/src/skills/banana-image/templates/social.json +22 -0
- package/src/skills/banana-image/templates/thumbnail.json +17 -0
- package/src/skills/brainstorm/SKILL.md +216 -0
- package/src/skills/bug-detective/SKILL.md +256 -0
- package/src/skills/bug-detective/references/error-patterns.md +242 -0
- package/src/skills/check/SKILL.md +367 -0
- package/src/skills/code-patterns/SKILL.md +280 -0
- package/src/skills/code-patterns/references/leniu-code-patterns.md +87 -0
- package/src/skills/codex-code-review/SKILL.md +135 -0
- package/src/skills/collaborating-with-codex/SKILL.md +174 -0
- package/src/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
- package/src/skills/collaborating-with-gemini/SKILL.md +194 -0
- package/src/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
- package/src/skills/crud/SKILL.md +265 -0
- package/src/skills/crud-development/SKILL.md +409 -0
- package/src/skills/data-permission/SKILL.md +292 -0
- package/src/skills/data-permission/references/custom-data-scope.md +90 -0
- package/src/skills/database-ops/SKILL.md +407 -0
- package/src/skills/dev/SKILL.md +187 -0
- package/src/skills/error-handler/SKILL.md +371 -0
- package/src/skills/file-oss-management/SKILL.md +255 -0
- package/src/skills/file-oss-management/references/entities.md +105 -0
- package/src/skills/file-oss-management/references/service-impl.md +104 -0
- package/src/skills/git-workflow/SKILL.md +397 -0
- package/src/skills/init-docs/SKILL.md +194 -0
- package/src/skills/json-serialization/SKILL.md +357 -0
- package/src/skills/leniu-api-development/SKILL.md +319 -0
- package/src/skills/leniu-api-development/references/real-examples.md +273 -0
- package/src/skills/leniu-architecture-design/SKILL.md +383 -0
- package/src/skills/leniu-backend-annotations/SKILL.md +277 -0
- package/src/skills/leniu-brainstorm/SKILL.md +242 -0
- package/src/skills/leniu-brainstorm/references/business-scenarios.md +162 -0
- package/src/skills/leniu-code-patterns/SKILL.md +411 -0
- package/src/skills/leniu-crud-development/SKILL.md +404 -0
- package/src/skills/leniu-crud-development/references/templates.md +597 -0
- package/src/skills/leniu-customization-location/SKILL.md +410 -0
- package/src/skills/leniu-data-permission/SKILL.md +341 -0
- package/src/skills/leniu-database-ops/SKILL.md +426 -0
- package/src/skills/leniu-error-handler/SKILL.md +462 -0
- package/src/skills/leniu-java-amount-handling/SKILL.md +461 -0
- package/src/skills/leniu-java-code-style/SKILL.md +510 -0
- package/src/skills/leniu-java-concurrent/SKILL.md +400 -0
- package/src/skills/leniu-java-entity/SKILL.md +237 -0
- package/src/skills/leniu-java-entity/references/templates.md +237 -0
- package/src/skills/leniu-java-export/SKILL.md +570 -0
- package/src/skills/leniu-java-logging/SKILL.md +229 -0
- package/src/skills/leniu-java-logging/references/data-mask.md +46 -0
- package/src/skills/leniu-java-logging/references/logging-scenarios.md +113 -0
- package/src/skills/leniu-java-mq/SKILL.md +338 -0
- package/src/skills/leniu-java-mybatis/SKILL.md +267 -0
- package/src/skills/leniu-java-mybatis/references/report-mapper.md +88 -0
- package/src/skills/leniu-java-report-query-param/SKILL.md +291 -0
- package/src/skills/leniu-java-task/SKILL.md +367 -0
- package/src/skills/leniu-java-total-line/SKILL.md +196 -0
- package/src/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
- package/src/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
- package/src/skills/leniu-mealtime/SKILL.md +215 -0
- package/src/skills/leniu-redis-cache/SKILL.md +331 -0
- package/src/skills/leniu-report-customization/SKILL.md +335 -0
- package/src/skills/leniu-report-customization/references/table-fields.md +93 -0
- package/src/skills/leniu-report-standard-customization/SKILL.md +328 -0
- package/src/skills/leniu-report-standard-customization/references/analysis-module.md +64 -0
- package/src/skills/leniu-report-standard-customization/references/table-fields.md +113 -0
- package/src/skills/leniu-security-guard/SKILL.md +306 -0
- package/src/skills/leniu-utils-toolkit/SKILL.md +380 -0
- package/src/skills/mysql-debug/SKILL.md +364 -0
- package/src/skills/next/SKILL.md +137 -0
- package/src/skills/openspec-apply-change/SKILL.md +165 -0
- package/src/skills/openspec-archive-change/SKILL.md +122 -0
- package/src/skills/openspec-bulk-archive-change/SKILL.md +254 -0
- package/src/skills/openspec-continue-change/SKILL.md +126 -0
- package/src/skills/openspec-explore/SKILL.md +299 -0
- package/src/skills/openspec-ff-change/SKILL.md +109 -0
- package/src/skills/openspec-new-change/SKILL.md +82 -0
- package/src/skills/openspec-onboard/SKILL.md +414 -0
- package/src/skills/openspec-sync-specs/SKILL.md +146 -0
- package/src/skills/openspec-verify-change/SKILL.md +176 -0
- package/src/skills/performance-doctor/SKILL.md +303 -0
- package/src/skills/progress/SKILL.md +193 -0
- package/src/skills/project-navigator/SKILL.md +211 -0
- package/src/skills/redis-cache/SKILL.md +333 -0
- package/src/skills/redis-cache/references/listeners.md +23 -0
- package/src/skills/scheduled-jobs/SKILL.md +314 -0
- package/src/skills/security-guard/SKILL.md +353 -0
- package/src/skills/security-guard/references/encrypt-config.md +103 -0
- package/src/skills/security-guard/references/sensitive-strategies.md +42 -0
- package/src/skills/sms-mail/SKILL.md +308 -0
- package/src/skills/sms-mail/references/mail-config.md +88 -0
- package/src/skills/sms-mail/references/sms-config.md +74 -0
- package/src/skills/social-login/SKILL.md +266 -0
- package/src/skills/social-login/references/provider-configs.md +118 -0
- package/src/skills/start/SKILL.md +154 -0
- package/src/skills/store-pc/SKILL.md +366 -0
- package/src/skills/sync/SKILL.md +149 -0
- package/src/skills/task-tracker/SKILL.md +307 -0
- package/src/skills/tech-decision/SKILL.md +393 -0
- package/src/skills/tenant-management/SKILL.md +288 -0
- package/src/skills/tenant-management/references/tenant-scenarios.md +91 -0
- package/src/skills/test-development/SKILL.md +301 -0
- package/src/skills/test-development/references/parameterized-examples.md +119 -0
- package/src/skills/ui-pc/SKILL.md +438 -0
- package/src/skills/update-status/SKILL.md +159 -0
- package/src/skills/utils-toolkit/SKILL.md +362 -0
- package/src/skills/utils-toolkit/references/redis-utils-api.md +56 -0
- package/src/skills/websocket-sse/SKILL.md +271 -0
- package/src/skills/workflow-engine/SKILL.md +321 -0
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: store-pc
|
|
3
|
+
description: |
|
|
4
|
+
前端状态管理指南。包含 Vuex Store 的创建和使用规范。
|
|
5
|
+
|
|
6
|
+
触发场景:
|
|
7
|
+
- 创建/使用 Vuex Store
|
|
8
|
+
- Vuex 状态管理
|
|
9
|
+
- 跨组件数据共享
|
|
10
|
+
- 全局状态管理
|
|
11
|
+
|
|
12
|
+
触发词:Vuex、store、mapState、mapActions、commit、dispatch、状态管理
|
|
13
|
+
|
|
14
|
+
适用目录:/Users/xujiajun/Developer/frontProj/web/src/store/**
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# 前端状态管理指南
|
|
18
|
+
|
|
19
|
+
> **适用于**: 腾云智慧食堂管理系统前端项目(Vue 2.7.16 + Vuex 3.4.0)
|
|
20
|
+
>
|
|
21
|
+
> **Store 目录**: `/Users/xujiajun/Developer/frontProj/web/src/store/`
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 目录结构
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
src/store/
|
|
29
|
+
├── index.js # Store 入口(Vuex 初始化)
|
|
30
|
+
├── getters.js # 全局 getters
|
|
31
|
+
└── modules/ # Store 模块(28个)
|
|
32
|
+
├── user.js # 用户状态(最核心)
|
|
33
|
+
├── app.js # 应用状态(语言/尺寸)
|
|
34
|
+
├── permission.js # 权限路由管理
|
|
35
|
+
├── tagsView.js # 标签页管理
|
|
36
|
+
├── settings.js # 系统设置
|
|
37
|
+
├── marketing.js # 营销状态
|
|
38
|
+
├── order.js # 订单状态
|
|
39
|
+
├── stock.js # 库存状态
|
|
40
|
+
├── reportcenter.js # 报表状态
|
|
41
|
+
├── account.js # 账户状态
|
|
42
|
+
├── purchase.js # 采购状态
|
|
43
|
+
├── chart.js # 图表状态
|
|
44
|
+
├── notice.js # 通知状态
|
|
45
|
+
├── upload.js # 上传状态
|
|
46
|
+
├── menudish.js # 菜品状态
|
|
47
|
+
├── supplyChain.js # 供应链状态
|
|
48
|
+
└── ... # 其他业务模块
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 全局 Getters(getters.js)
|
|
54
|
+
|
|
55
|
+
```javascript
|
|
56
|
+
// 常用全局 getters(可直接用 mapGetters 访问)
|
|
57
|
+
{
|
|
58
|
+
token, // 登录 token
|
|
59
|
+
name, // 用户名
|
|
60
|
+
userInfo, // 完整用户信息对象
|
|
61
|
+
permissions, // 权限列表
|
|
62
|
+
hasRoles, // 是否已加载角色(用于路由守卫)
|
|
63
|
+
permission_routes, // 已生成的权限路由
|
|
64
|
+
adminMerchant, // 是否为超级管理员商户
|
|
65
|
+
url, // API base URL
|
|
66
|
+
language, // 当前语言(zh/en)
|
|
67
|
+
size, // Element UI 组件尺寸
|
|
68
|
+
areaOptions, // 区域选项(来自 supplyChain)
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 创建新 Store
|
|
75
|
+
|
|
76
|
+
### 标准模板
|
|
77
|
+
|
|
78
|
+
```javascript
|
|
79
|
+
// src/store/modules/xxx.js
|
|
80
|
+
import { getList, getDetail } from '@/api/xxx'
|
|
81
|
+
|
|
82
|
+
const state = {
|
|
83
|
+
list: [],
|
|
84
|
+
current: null,
|
|
85
|
+
loading: false,
|
|
86
|
+
total: 0
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const mutations = {
|
|
90
|
+
SET_LIST: (state, list) => {
|
|
91
|
+
state.list = list
|
|
92
|
+
},
|
|
93
|
+
SET_CURRENT: (state, current) => {
|
|
94
|
+
state.current = current
|
|
95
|
+
},
|
|
96
|
+
SET_LOADING: (state, loading) => {
|
|
97
|
+
state.loading = loading
|
|
98
|
+
},
|
|
99
|
+
SET_TOTAL: (state, total) => {
|
|
100
|
+
state.total = total
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const actions = {
|
|
105
|
+
/**
|
|
106
|
+
* 获取列表
|
|
107
|
+
*/
|
|
108
|
+
async fetchList({ commit }, params) {
|
|
109
|
+
commit('SET_LOADING', true)
|
|
110
|
+
try {
|
|
111
|
+
const res = await getList({
|
|
112
|
+
page: { current: params.current || 1, size: params.size || 20 },
|
|
113
|
+
object: params
|
|
114
|
+
})
|
|
115
|
+
commit('SET_LIST', res.records || [])
|
|
116
|
+
commit('SET_TOTAL', res.total || 0)
|
|
117
|
+
return res
|
|
118
|
+
} finally {
|
|
119
|
+
commit('SET_LOADING', false)
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* 获取详情
|
|
125
|
+
*/
|
|
126
|
+
async fetchDetail({ commit }, id) {
|
|
127
|
+
const res = await getDetail({ id })
|
|
128
|
+
commit('SET_CURRENT', res)
|
|
129
|
+
return res
|
|
130
|
+
},
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* 重置状态
|
|
134
|
+
*/
|
|
135
|
+
reset({ commit }) {
|
|
136
|
+
commit('SET_LIST', [])
|
|
137
|
+
commit('SET_CURRENT', null)
|
|
138
|
+
commit('SET_TOTAL', 0)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const getters = {
|
|
143
|
+
list: state => state.list,
|
|
144
|
+
current: state => state.current,
|
|
145
|
+
loading: state => state.loading,
|
|
146
|
+
total: state => state.total
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export default {
|
|
150
|
+
namespaced: true,
|
|
151
|
+
state,
|
|
152
|
+
mutations,
|
|
153
|
+
actions,
|
|
154
|
+
getters
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### 在 index.js 中注册
|
|
159
|
+
|
|
160
|
+
```javascript
|
|
161
|
+
// src/store/index.js
|
|
162
|
+
import xxx from './modules/xxx'
|
|
163
|
+
|
|
164
|
+
export default new Vuex.Store({
|
|
165
|
+
modules: {
|
|
166
|
+
// ... 其他模块
|
|
167
|
+
xxx
|
|
168
|
+
}
|
|
169
|
+
})
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 使用 Store
|
|
175
|
+
|
|
176
|
+
### 方式 1:直接访问
|
|
177
|
+
|
|
178
|
+
```javascript
|
|
179
|
+
export default {
|
|
180
|
+
computed: {
|
|
181
|
+
list() {
|
|
182
|
+
return this.$store.state.xxx.list
|
|
183
|
+
},
|
|
184
|
+
loading() {
|
|
185
|
+
return this.$store.state.xxx.loading
|
|
186
|
+
},
|
|
187
|
+
// 使用全局 getter
|
|
188
|
+
token() {
|
|
189
|
+
return this.$store.getters.token
|
|
190
|
+
},
|
|
191
|
+
userInfo() {
|
|
192
|
+
return this.$store.getters.userInfo
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
methods: {
|
|
196
|
+
getData() {
|
|
197
|
+
this.$store.dispatch('xxx/fetchList', this.queryParams)
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### 方式 2:mapState / mapGetters / mapActions
|
|
204
|
+
|
|
205
|
+
```javascript
|
|
206
|
+
import { mapState, mapGetters, mapActions, mapMutations } from 'vuex'
|
|
207
|
+
|
|
208
|
+
export default {
|
|
209
|
+
computed: {
|
|
210
|
+
// 模块内 state
|
|
211
|
+
...mapState('xxx', ['list', 'loading', 'total']),
|
|
212
|
+
|
|
213
|
+
// 全局 getters
|
|
214
|
+
...mapGetters(['token', 'userInfo', 'permissions', 'adminMerchant'])
|
|
215
|
+
},
|
|
216
|
+
methods: {
|
|
217
|
+
...mapActions('xxx', ['fetchList', 'fetchDetail', 'reset']),
|
|
218
|
+
|
|
219
|
+
async getData() {
|
|
220
|
+
await this.fetchList({ ...this.queryParams, ...this.page })
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
mounted() {
|
|
224
|
+
this.getData()
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## 核心 Store 模块说明
|
|
232
|
+
|
|
233
|
+
### user.js(用户状态)
|
|
234
|
+
|
|
235
|
+
最重要的模块,包含:
|
|
236
|
+
- `state.token` - 登录 token
|
|
237
|
+
- `state.userInfo` - 完整用户信息(userId、roles、roleCode、merchantId 等)
|
|
238
|
+
- `state.hasRoles` - 是否已加载角色信息
|
|
239
|
+
- `state.adminMerchant` - 是否为超级管理员(`roleCode === 'ROLE_ADMIN'`)
|
|
240
|
+
- `state.merchantList` - 商户列表(管理员可切换商户)
|
|
241
|
+
|
|
242
|
+
```javascript
|
|
243
|
+
// 在路由守卫中获取用户信息
|
|
244
|
+
const userInfo = await store.dispatch('user/getInfo')
|
|
245
|
+
|
|
246
|
+
// 登出
|
|
247
|
+
await store.dispatch('user/resetToken')
|
|
248
|
+
localStorage.clear()
|
|
249
|
+
locationHref()
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### permission.js(权限路由)
|
|
253
|
+
|
|
254
|
+
- 根据用户角色动态生成路由
|
|
255
|
+
- `state.routes` - 完整路由表(用于菜单渲染)
|
|
256
|
+
- `state.addRoutes` - 动态添加的路由
|
|
257
|
+
|
|
258
|
+
```javascript
|
|
259
|
+
// 在路由守卫中生成权限路由
|
|
260
|
+
const accessRoutes = await store.dispatch('permission/generateRoutes')
|
|
261
|
+
accessRoutes.forEach(route => {
|
|
262
|
+
router.addRoute(route)
|
|
263
|
+
})
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### app.js(应用状态)
|
|
267
|
+
|
|
268
|
+
- `state.language` - 当前语言(zh/en)
|
|
269
|
+
- `state.size` - Element UI 组件尺寸
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## 最佳实践
|
|
274
|
+
|
|
275
|
+
### 1. 何时使用 Store
|
|
276
|
+
|
|
277
|
+
| 场景 | 是否使用 Store |
|
|
278
|
+
|------|---------------|
|
|
279
|
+
| 多个页面/组件共享的数据 | ✅ 使用 |
|
|
280
|
+
| 用户登录状态、权限 | ✅ 使用(user 模块) |
|
|
281
|
+
| 全局配置(语言、尺寸) | ✅ 使用(app 模块) |
|
|
282
|
+
| 页面内部状态(表单数据)| ❌ 用 data |
|
|
283
|
+
| 父子组件传值 | ❌ 用 props/emit |
|
|
284
|
+
| 兄弟组件通信(简单) | ❌ 用 eventBus |
|
|
285
|
+
|
|
286
|
+
### 2. 命名规范
|
|
287
|
+
|
|
288
|
+
```javascript
|
|
289
|
+
// ✅ 正确:Mutation 大写字母+下划线
|
|
290
|
+
const mutations = {
|
|
291
|
+
SET_LIST: (state, list) => { state.list = list },
|
|
292
|
+
SET_LOADING: (state, v) => { state.loading = v }
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// ✅ 正确:Action 小驼峰
|
|
296
|
+
const actions = {
|
|
297
|
+
fetchList: async ({ commit }, params) => { },
|
|
298
|
+
fetchDetail: async ({ commit }, id) => { }
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// ✅ 正确:模块文件名小写,匹配业务名
|
|
302
|
+
// store/modules/marketing.js
|
|
303
|
+
// store/modules/order.js
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### 3. 登出时重置 Store
|
|
307
|
+
|
|
308
|
+
```javascript
|
|
309
|
+
// 在 user store 中
|
|
310
|
+
const actions = {
|
|
311
|
+
async resetToken({ commit }) {
|
|
312
|
+
commit('SET_TOKEN', '')
|
|
313
|
+
commit('SET_HAS_ROLES', false)
|
|
314
|
+
removeToken()
|
|
315
|
+
removeTenant()
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// 登出时(permission.js 路由守卫中)
|
|
320
|
+
await store.dispatch('user/resetToken')
|
|
321
|
+
localStorage.clear()
|
|
322
|
+
locationHref() // 使用全局 locationHref 跳转(不用 router.push)
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
### 4. 分页数据格式
|
|
326
|
+
|
|
327
|
+
```javascript
|
|
328
|
+
// 后端返回的分页数据格式
|
|
329
|
+
{
|
|
330
|
+
records: [], // 数据列表(非 rows)
|
|
331
|
+
total: 100,
|
|
332
|
+
current: 1,
|
|
333
|
+
size: 20
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// 请求分页参数格式
|
|
337
|
+
{
|
|
338
|
+
page: { current: 1, size: 20 },
|
|
339
|
+
object: { ...queryParams } // 查询条件
|
|
340
|
+
}
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## 参考文件
|
|
346
|
+
|
|
347
|
+
| Store | 路径 |
|
|
348
|
+
|-------|------|
|
|
349
|
+
| Store 入口 | `/Users/xujiajun/Developer/frontProj/web/src/store/index.js` |
|
|
350
|
+
| 全局 Getters | `/Users/xujiajun/Developer/frontProj/web/src/store/getters.js` |
|
|
351
|
+
| 用户 Store | `/Users/xujiajun/Developer/frontProj/web/src/store/modules/user.js` |
|
|
352
|
+
| 权限 Store | `/Users/xujiajun/Developer/frontProj/web/src/store/modules/permission.js` |
|
|
353
|
+
| 应用 Store | `/Users/xujiajun/Developer/frontProj/web/src/store/modules/app.js` |
|
|
354
|
+
| 设置 Store | `/Users/xujiajun/Developer/frontProj/web/src/store/modules/settings.js` |
|
|
355
|
+
| 标签页 Store | `/Users/xujiajun/Developer/frontProj/web/src/store/modules/tagsView.js` |
|
|
356
|
+
|
|
357
|
+
---
|
|
358
|
+
|
|
359
|
+
## 注意事项
|
|
360
|
+
|
|
361
|
+
1. **本项目使用 Vuex 3.x**(非 Pinia),与 Vue 2 配套
|
|
362
|
+
2. **Store 模块必须设置 `namespaced: true`**
|
|
363
|
+
3. **异步操作放在 Actions 中**,同步操作放在 Mutations 中
|
|
364
|
+
4. **分页数据用 `records`**,不是 `rows`(与 RuoYi 后端框架不同)
|
|
365
|
+
5. **登出使用 `locationHref()`** 而非 `router.push('/login')`,目的是清除内存中的数据
|
|
366
|
+
6. **`adminMerchant` 为 true 时**,用户是超级管理员(`roleCode === 'ROLE_ADMIN'`),可切换商户
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sync
|
|
3
|
+
description: |
|
|
4
|
+
当需要全量同步项目代码状态、生成综合报告时自动使用此 Skill。
|
|
5
|
+
|
|
6
|
+
触发场景:
|
|
7
|
+
- 每周末整理项目代码状态和文档
|
|
8
|
+
- 手动修改过代码或文档后需要重新同步
|
|
9
|
+
- 新成员加入或项目交接时全量检查
|
|
10
|
+
- 生成完整的项目状态报告
|
|
11
|
+
|
|
12
|
+
触发词:同步、sync、全量同步、状态同步、项目同步、代码同步、定期整理
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# /sync - 项目代码状态同步
|
|
16
|
+
|
|
17
|
+
一键同步后端代码状态、生成项目文档、确保代码与文档数据一致。适合定期整理或发现数据不一致时使用。
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 🎯 适用场景
|
|
22
|
+
|
|
23
|
+
| 场景 | 说明 |
|
|
24
|
+
|------|------|
|
|
25
|
+
| **定期整理** | 每周末整理项目代码状态和文档 |
|
|
26
|
+
| **数据不一致** | 手动修改过代码或文档后需要重新同步 |
|
|
27
|
+
| **项目交接** | 新成员加入或项目交接时全量检查 |
|
|
28
|
+
| **构建报告** | 生成完整的项目状态报告供管理者查看 |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 🚀 执行流程
|
|
33
|
+
|
|
34
|
+
### 第一步:扫描后端代码状态(强制执行)
|
|
35
|
+
|
|
36
|
+
#### 1.1 扫描业务模块和功能完整性
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# 查找所有业务模块的 Controller
|
|
40
|
+
Glob pattern: "ruoyi-modules/ruoyi-*/src/main/java/**/controller/*Controller.java"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
对每个功能检查 **7 个必需的文件**。
|
|
44
|
+
|
|
45
|
+
#### 1.2 扫描代码规范问题
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
Grep pattern: "package com\.ruoyi\." path: ruoyi-modules/ output_mode: files_with_matches
|
|
49
|
+
Grep pattern: "BeanUtil\.copy|BeanUtils\.copy" path: ruoyi-modules/ output_mode: files_with_matches
|
|
50
|
+
Grep pattern: "@SaCheckPermission" path: ruoyi-modules/ glob: "*Controller.java" output_mode: files_with_matches
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
#### 1.3 扫描 Git 提交记录
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
git log -30 --oneline --format="%h %s %ad" --date=short
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
#### 1.4 扫描 TODO/FIXME 标记
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
Grep pattern: "TODO:|FIXME:|XXX:" path: ruoyi-modules/ glob: "*.java" output_mode: content -B 1
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
### 第二步:分析 Git 提交历史
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
git log -5 --oneline
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**分析内容**:
|
|
74
|
+
- 最近在做什么功能
|
|
75
|
+
- 是否有 FIXME/BUG 相关的提交
|
|
76
|
+
- 代码活跃度
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
### 第三步:整合检查结果
|
|
81
|
+
|
|
82
|
+
#### 3.1 与 `/check` 命令同步
|
|
83
|
+
|
|
84
|
+
提取检查结果中的:
|
|
85
|
+
- 严重问题数量
|
|
86
|
+
- 警告问题数量
|
|
87
|
+
- 需要修复的问题清单
|
|
88
|
+
|
|
89
|
+
#### 3.2 与 `/progress` 命令同步
|
|
90
|
+
|
|
91
|
+
提取数据:
|
|
92
|
+
- 各模块完成率
|
|
93
|
+
- 待完成功能列表
|
|
94
|
+
- 代码质量评分
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### 第四步:生成项目同步报告
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
# 🔄 项目代码状态同步报告
|
|
102
|
+
|
|
103
|
+
**同步时间**:YYYY-MM-DD HH:mm
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 📈 最新进展
|
|
108
|
+
|
|
109
|
+
### Git 提交摘要
|
|
110
|
+
- **最新提交**:[commit message] ([hash])
|
|
111
|
+
- **最近 7 天**:X 次提交,涉及 X 个功能模块
|
|
112
|
+
- **提交活跃度**:[活跃/正常/低活跃]
|
|
113
|
+
|
|
114
|
+
### 代码完成度
|
|
115
|
+
| 模块 | 功能数 | 完成 | 进行中 | 待开发 | 完成率 |
|
|
116
|
+
|------|--------|------|--------|--------|---------|
|
|
117
|
+
| demo | 3 | 3 | 0 | 0 | 100% ✅ |
|
|
118
|
+
| business | 5 | 3 | 2 | 0 | 60% 🔄 |
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## ⚠️ 紧急问题(必须立即处理)
|
|
123
|
+
|
|
124
|
+
### 高优先级 FIXME
|
|
125
|
+
| 文件 | 行号 | 问题 | 影响 |
|
|
126
|
+
|------|------|------|------|
|
|
127
|
+
| PaymentService.java | 156 | 退款金额计算错误 | 财务准确性 |
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 🔍 代码规范检查结果
|
|
132
|
+
|
|
133
|
+
### 总体评分
|
|
134
|
+
| 维度 | 评分 | 说明 |
|
|
135
|
+
|------|------|------|
|
|
136
|
+
| 包名规范 | ✅ | 所有包名符合 org.dromara.* 规范 |
|
|
137
|
+
| 权限注解 | ⚠️ | 3 个接口缺少 @SaCheckPermission |
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 🔗 相关命令
|
|
142
|
+
|
|
143
|
+
| 命令 | 用途 | 何时使用 |
|
|
144
|
+
|------|------|---------|
|
|
145
|
+
| `/update-status` | 增量更新 | 功能完成后立即使用 |
|
|
146
|
+
| `/sync` | 全量同步 | 每周一次定期整理 |
|
|
147
|
+
| `/progress` | 项目进度分析 | 了解完成情况 |
|
|
148
|
+
| `/check` | 代码规范检查 | 代码审查前 |
|
|
149
|
+
```
|