@agile-team/wl-skills-kit 2.1.2 → 2.1.4
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/CHANGELOG.md +24 -0
- package/README.md +73 -5
- package/bin/wl-skills.js +35 -1
- package/files/.github/guides/README.md +13 -13
- package/files/.github/guides/architecture.md +555 -555
- package/files/.github/guides/usage.md +166 -166
- package/files/.github/reports/README.md +65 -65
- package/files/.github/reports/SYS_DICT_INFO.md +19 -19
- package/files/.github/reports/SYS_MENU_INFO.md +247 -247
- package/files/.github/reports/SYS_PERMISSION_INFO.md +20 -20
- package/files/.github/reports//347/273/204/344/273/266/346/217/220/345/217/226/345/273/272/350/256/256.md +33 -33
- package/files/.github/reports//350/247/204/350/214/203/345/256/241/346/237/245/346/212/245/345/221/212.md +44 -44
- package/files/.github/skills/_compat/README.md +108 -108
- package/files/.github/skills/_compat/headers/agents.txt +8 -8
- package/files/.github/skills/_compat/headers/claude-code.txt +7 -7
- package/files/.github/skills/_compat/headers/cline.txt +7 -7
- package/files/.github/skills/_compat/headers/cursor-mdc.txt +16 -16
- package/files/.github/skills/_compat/headers/cursor-rules.txt +7 -7
- package/files/.github/skills/_compat/headers/github-copilot.txt +1 -1
- package/files/.github/skills/_compat/headers/kiro.txt +10 -10
- package/files/.github/skills/_compat/headers/trae.txt +11 -11
- package/files/.github/skills/_compat/headers/windsurf.txt +7 -7
- package/files/.github/skills/_registry.md +81 -81
- package/files/.github/skills/core/api-contract/SKILL.md +344 -344
- package/files/.github/skills/core/api-contract/USAGE.md +110 -110
- package/files/.github/skills/core/convention-audit/SKILL.md +189 -189
- package/files/.github/skills/core/convention-audit/USAGE.md +99 -99
- package/files/.github/skills/core/page-codegen/SKILL.md +973 -973
- package/files/.github/skills/core/page-codegen/USAGE.md +102 -102
- package/files/.github/skills/core/page-codegen/templates/_index.md +46 -46
- package/files/.github/skills/core/page-codegen/templates/domains/_CONTRIBUTING.md +107 -107
- package/files/.github/skills/core/page-codegen/templates/domains/produce/TPL-OPERATION-STATION.md +442 -442
- package/files/.github/skills/core/page-codegen/templates/domains/sale/README.md +26 -26
- package/files/.github/skills/core/page-codegen/templates/universal/TPL-CHANGE-HISTORY.md +276 -276
- package/files/.github/skills/core/page-codegen/templates/universal/TPL-DETAIL-TABS.md +1145 -1145
- package/files/.github/skills/core/page-codegen/templates/universal/TPL-DRIVEN.md +124 -124
- package/files/.github/skills/core/page-codegen/templates/universal/TPL-FORM-ROUTE.md +436 -436
- package/files/.github/skills/core/page-codegen/templates/universal/TPL-LIST.md +191 -191
- package/files/.github/skills/core/page-codegen/templates/universal/TPL-MASTER-DETAIL.md +148 -148
- package/files/.github/skills/core/page-codegen/templates/universal/TPL-RECORD-FORM.md +371 -371
- package/files/.github/skills/core/page-codegen/templates/universal/TPL-TREE-LIST.md +186 -186
- package/files/.github/skills/core/prototype-scan/SKILL.md +498 -498
- package/files/.github/skills/core/prototype-scan/USAGE.md +95 -95
- package/files/.github/skills/core/template-extract/SKILL.md +139 -139
- package/files/.github/skills/core/template-extract/USAGE.md +93 -93
- package/files/.github/skills/domain/README.md +51 -51
- package/files/.github/skills/ops/code-fix/SKILL.draft.md +108 -108
- package/files/.github/skills/sync/dict-sync/SKILL.draft.md +100 -100
- package/files/.github/skills/sync/menu-sync/SKILL.md +258 -258
- package/files/.github/skills/sync/menu-sync/USAGE.md +104 -104
- package/files/.github/skills/sync/menu-sync/env/env.local.json +6 -6
- package/files/.github/skills/sync/menu-sync/env/guide.md +83 -83
- package/files/.github/skills/sync/permission-sync/SKILL.draft.md +91 -91
- package/files/.github/standards/01-toolchain.md +57 -57
- package/files/.github/standards/02-code-structure.md +111 -111
- package/files/.github/standards/03-comments.md +53 -53
- package/files/.github/standards/04-coding-basics.md +33 -33
- package/files/.github/standards/05-logging.md +38 -38
- package/files/.github/standards/06-security.md +44 -44
- package/files/.github/standards/07-config.md +52 -52
- package/files/.github/standards/08-git.md +60 -60
- package/files/.github/standards/09-typescript.md +71 -71
- package/files/.github/standards/10-pinia.md +57 -57
- package/files/.github/standards/11-form-validation.md +81 -81
- package/files/.github/standards/12-base-table.md +116 -116
- package/files/.github/standards/13-platform-components.md +123 -123
- package/files/.github/standards/index.md +89 -89
- package/files/demo/produce/aiflow/mmwr-customer-apply-change-history/data.ts +196 -196
- package/files/demo/produce/aiflow/mmwr-customer-apply-change-history/index.scss +150 -150
- package/files/demo/produce/aiflow/mmwr-customer-apply-change-history/index.vue +79 -79
- package/files/docs/jh-date-range.md +257 -257
- package/files/docs/jh-date.md +222 -222
- package/files/docs/jh-dept-picker.md +190 -190
- package/files/docs/jh-drag-row.md +590 -590
- package/files/docs/jh-file-upload.md +216 -216
- package/files/docs/jh-picker.md +218 -218
- package/files/docs/jh-select.md +148 -148
- package/files/docs/jh-text.md +248 -248
- package/files/docs/jh-user-picker.md +197 -197
- package/package.json +2 -4
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
# 01 — 工具链前置检测
|
|
2
|
-
|
|
3
|
-
> **强制度**:🔴 阻断式。检测未通过 → AI 必须暂停代码生成。
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 检测目标
|
|
8
|
-
|
|
9
|
-
确认项目已正确安装 `@robot-admin/git-standards`,工具链有效。
|
|
10
|
-
|
|
11
|
-
## 检测项
|
|
12
|
-
|
|
13
|
-
AI 在执行任何代码生成任务**之前**,必须检查以下三个特征文件是否存在于项目根目录:
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
✓ .prettierrc.js
|
|
17
|
-
✓ eslint.config.ts
|
|
18
|
-
✓ .husky/ (目录)
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## 判定规则
|
|
22
|
-
|
|
23
|
-
| 状态 | 处理 |
|
|
24
|
-
| ------------ | --------------------------- |
|
|
25
|
-
| 三者全部存在 | ✅ 工具链就绪,继续执行任务 |
|
|
26
|
-
| 缺任意一个 | ❌ 暂停任务,输出下方提示 |
|
|
27
|
-
|
|
28
|
-
## 暂停提示标准格式
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
❌ 工具链检测失败:未找到 .prettierrc.js / eslint.config.ts / .husky/
|
|
32
|
-
→ 请执行:npx @robot-admin/git-standards init
|
|
33
|
-
→ 或联系 CHENY(工号 409322)解决
|
|
34
|
-
→ ⛔ 代码生成已暂停,修复后重新触发
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Pre-flight 声明示例
|
|
38
|
-
|
|
39
|
-
工具链就绪:
|
|
40
|
-
|
|
41
|
-
```
|
|
42
|
-
✅ 工具链检测:.prettierrc.js ✓ eslint.config.ts ✓ .husky/ ✓ [全部就绪]
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
工具链缺失:
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
❌ 工具链检测:未检测到 .husky/ → 已暂停,提醒已发出
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
## 为什么必须前置
|
|
54
|
-
|
|
55
|
-
- `eslint.config.ts` 缺失 → 代码风格无法约束,AI 生成代码可能不通过 lint
|
|
56
|
-
- `.prettierrc.js` 缺失 → 格式不统一,团队协作冲突
|
|
57
|
-
- `.husky/` 缺失 → 提交前钩子失效,console.log / 死代码会进入仓库
|
|
1
|
+
# 01 — 工具链前置检测
|
|
2
|
+
|
|
3
|
+
> **强制度**:🔴 阻断式。检测未通过 → AI 必须暂停代码生成。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 检测目标
|
|
8
|
+
|
|
9
|
+
确认项目已正确安装 `@robot-admin/git-standards`,工具链有效。
|
|
10
|
+
|
|
11
|
+
## 检测项
|
|
12
|
+
|
|
13
|
+
AI 在执行任何代码生成任务**之前**,必须检查以下三个特征文件是否存在于项目根目录:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
✓ .prettierrc.js
|
|
17
|
+
✓ eslint.config.ts
|
|
18
|
+
✓ .husky/ (目录)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 判定规则
|
|
22
|
+
|
|
23
|
+
| 状态 | 处理 |
|
|
24
|
+
| ------------ | --------------------------- |
|
|
25
|
+
| 三者全部存在 | ✅ 工具链就绪,继续执行任务 |
|
|
26
|
+
| 缺任意一个 | ❌ 暂停任务,输出下方提示 |
|
|
27
|
+
|
|
28
|
+
## 暂停提示标准格式
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
❌ 工具链检测失败:未找到 .prettierrc.js / eslint.config.ts / .husky/
|
|
32
|
+
→ 请执行:npx @robot-admin/git-standards init
|
|
33
|
+
→ 或联系 CHENY(工号 409322)解决
|
|
34
|
+
→ ⛔ 代码生成已暂停,修复后重新触发
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Pre-flight 声明示例
|
|
38
|
+
|
|
39
|
+
工具链就绪:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
✅ 工具链检测:.prettierrc.js ✓ eslint.config.ts ✓ .husky/ ✓ [全部就绪]
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
工具链缺失:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
❌ 工具链检测:未检测到 .husky/ → 已暂停,提醒已发出
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 为什么必须前置
|
|
54
|
+
|
|
55
|
+
- `eslint.config.ts` 缺失 → 代码风格无法约束,AI 生成代码可能不通过 lint
|
|
56
|
+
- `.prettierrc.js` 缺失 → 格式不统一,团队协作冲突
|
|
57
|
+
- `.husky/` 缺失 → 提交前钩子失效,console.log / 死代码会进入仓库
|
|
@@ -1,111 +1,111 @@
|
|
|
1
|
-
# 02 — 代码结构与顺序规范
|
|
2
|
-
|
|
3
|
-
> **强制度**:🔴 必遵。AI 生成代码必须严格按下列顺序输出。
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 4 文件原则(页面目录强制结构)
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
src/views/[域]/[模块]/[子模块]/[kebab-case目录]/
|
|
11
|
-
├── index.vue ← 纯模板 + 解构,不写业务逻辑
|
|
12
|
-
├── data.ts ← AbstractPageQueryHook 类 + API_CONFIG
|
|
13
|
-
├── index.scss ← 页面样式(可为空)
|
|
14
|
-
└── api.md ← 接口约定文档
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**禁止**:把业务逻辑写在 index.vue;缺少 data.ts;缺少 api.md。
|
|
18
|
-
|
|
19
|
-
## 弹窗组件归属
|
|
20
|
-
|
|
21
|
-
| 场景 | 位置 |
|
|
22
|
-
| ----------------------- | ------------------------------------ |
|
|
23
|
-
| 通用弹窗(2+ 页面复用) | `src/components/local/c_xxxModal/` |
|
|
24
|
-
| 极个性弹窗(仅单页面) | 页面目录下 `components/xxxModal.vue` |
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## index.vue 三段式(顺序固定,不可调换)
|
|
29
|
-
|
|
30
|
-
```vue
|
|
31
|
-
<template>
|
|
32
|
-
<!-- 纯模板 + 组件组合 -->
|
|
33
|
-
</template>
|
|
34
|
-
|
|
35
|
-
<script setup lang="ts">
|
|
36
|
-
/* 业务逻辑全部从 data.ts 导入,按下方 9 段式 */
|
|
37
|
-
</script>
|
|
38
|
-
|
|
39
|
-
<style scoped lang="scss">
|
|
40
|
-
@import "./index.scss";
|
|
41
|
-
/* 仅允许这一行 import,全部样式写在 index.scss */
|
|
42
|
-
</style>
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## `<script setup>` 9 段式(按需使用,用到的必须遵守此顺序)
|
|
48
|
-
|
|
49
|
-
```typescript
|
|
50
|
-
// ===== 1. import 语句(外部库 → 内部模块 → 类型)=====
|
|
51
|
-
import { ref, computed, onMounted } from "vue";
|
|
52
|
-
import { createPage } from "./data";
|
|
53
|
-
|
|
54
|
-
// ===== 2. 组件宏(defineOptions / defineProps / defineEmits)=====
|
|
55
|
-
defineOptions({ name: "PageName" });
|
|
56
|
-
|
|
57
|
-
// ===== 3. 路由 & Store =====
|
|
58
|
-
const route = useRoute();
|
|
59
|
-
|
|
60
|
-
// ===== 4. createPage() 调用 + 解构(核心模式)=====
|
|
61
|
-
const Page = createPage();
|
|
62
|
-
const {
|
|
63
|
-
tableRef,
|
|
64
|
-
page,
|
|
65
|
-
queryParam,
|
|
66
|
-
list,
|
|
67
|
-
queryItems,
|
|
68
|
-
columns,
|
|
69
|
-
toolbars,
|
|
70
|
-
select,
|
|
71
|
-
} = Page;
|
|
72
|
-
|
|
73
|
-
// ===== 5. 页面补充状态(ref / reactive / computed)=====
|
|
74
|
-
const loading = ref(false);
|
|
75
|
-
|
|
76
|
-
// ===== 6. watch / watchEffect =====
|
|
77
|
-
|
|
78
|
-
// ===== 7. 业务方法(API 调用 / 事件处理)=====
|
|
79
|
-
async function handleSubmit() {}
|
|
80
|
-
|
|
81
|
-
// ===== 8. 生命周期 =====
|
|
82
|
-
onMounted(() => select());
|
|
83
|
-
|
|
84
|
-
// ===== 9. defineExpose =====
|
|
85
|
-
defineExpose({ select });
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
## data.ts 内部顺序(强制)
|
|
91
|
-
|
|
92
|
-
```typescript
|
|
93
|
-
// 1. import(类型 → 基类 → API 工具 → 工具函数)
|
|
94
|
-
// 2. API_CONFIG(接口路径集中声明,as const)
|
|
95
|
-
// 3. createPage()(constructor → queryDef → toolbarDef → columnsDef → 业务方法)
|
|
96
|
-
// 4. 页面共用辅助函数(可选,纯函数)
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
## index.scss 顺序(建议)
|
|
102
|
-
|
|
103
|
-
```scss
|
|
104
|
-
// 1. 变量覆盖
|
|
105
|
-
// 2. 容器级样式 (.app-page-container)
|
|
106
|
-
// 3. 区域级样式 (.search-area / .table-area)
|
|
107
|
-
// 4. 组件深层覆盖 (:deep(.el-table))
|
|
108
|
-
// 5. 响应式 (@media)
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
> 禁止 `::v-deep` / `/deep/`,统一使用 `:deep()`。
|
|
1
|
+
# 02 — 代码结构与顺序规范
|
|
2
|
+
|
|
3
|
+
> **强制度**:🔴 必遵。AI 生成代码必须严格按下列顺序输出。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 4 文件原则(页面目录强制结构)
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
src/views/[域]/[模块]/[子模块]/[kebab-case目录]/
|
|
11
|
+
├── index.vue ← 纯模板 + 解构,不写业务逻辑
|
|
12
|
+
├── data.ts ← AbstractPageQueryHook 类 + API_CONFIG
|
|
13
|
+
├── index.scss ← 页面样式(可为空)
|
|
14
|
+
└── api.md ← 接口约定文档
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**禁止**:把业务逻辑写在 index.vue;缺少 data.ts;缺少 api.md。
|
|
18
|
+
|
|
19
|
+
## 弹窗组件归属
|
|
20
|
+
|
|
21
|
+
| 场景 | 位置 |
|
|
22
|
+
| ----------------------- | ------------------------------------ |
|
|
23
|
+
| 通用弹窗(2+ 页面复用) | `src/components/local/c_xxxModal/` |
|
|
24
|
+
| 极个性弹窗(仅单页面) | 页面目录下 `components/xxxModal.vue` |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## index.vue 三段式(顺序固定,不可调换)
|
|
29
|
+
|
|
30
|
+
```vue
|
|
31
|
+
<template>
|
|
32
|
+
<!-- 纯模板 + 组件组合 -->
|
|
33
|
+
</template>
|
|
34
|
+
|
|
35
|
+
<script setup lang="ts">
|
|
36
|
+
/* 业务逻辑全部从 data.ts 导入,按下方 9 段式 */
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<style scoped lang="scss">
|
|
40
|
+
@import "./index.scss";
|
|
41
|
+
/* 仅允许这一行 import,全部样式写在 index.scss */
|
|
42
|
+
</style>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## `<script setup>` 9 段式(按需使用,用到的必须遵守此顺序)
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
// ===== 1. import 语句(外部库 → 内部模块 → 类型)=====
|
|
51
|
+
import { ref, computed, onMounted } from "vue";
|
|
52
|
+
import { createPage } from "./data";
|
|
53
|
+
|
|
54
|
+
// ===== 2. 组件宏(defineOptions / defineProps / defineEmits)=====
|
|
55
|
+
defineOptions({ name: "PageName" });
|
|
56
|
+
|
|
57
|
+
// ===== 3. 路由 & Store =====
|
|
58
|
+
const route = useRoute();
|
|
59
|
+
|
|
60
|
+
// ===== 4. createPage() 调用 + 解构(核心模式)=====
|
|
61
|
+
const Page = createPage();
|
|
62
|
+
const {
|
|
63
|
+
tableRef,
|
|
64
|
+
page,
|
|
65
|
+
queryParam,
|
|
66
|
+
list,
|
|
67
|
+
queryItems,
|
|
68
|
+
columns,
|
|
69
|
+
toolbars,
|
|
70
|
+
select,
|
|
71
|
+
} = Page;
|
|
72
|
+
|
|
73
|
+
// ===== 5. 页面补充状态(ref / reactive / computed)=====
|
|
74
|
+
const loading = ref(false);
|
|
75
|
+
|
|
76
|
+
// ===== 6. watch / watchEffect =====
|
|
77
|
+
|
|
78
|
+
// ===== 7. 业务方法(API 调用 / 事件处理)=====
|
|
79
|
+
async function handleSubmit() {}
|
|
80
|
+
|
|
81
|
+
// ===== 8. 生命周期 =====
|
|
82
|
+
onMounted(() => select());
|
|
83
|
+
|
|
84
|
+
// ===== 9. defineExpose =====
|
|
85
|
+
defineExpose({ select });
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## data.ts 内部顺序(强制)
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
// 1. import(类型 → 基类 → API 工具 → 工具函数)
|
|
94
|
+
// 2. API_CONFIG(接口路径集中声明,as const)
|
|
95
|
+
// 3. createPage()(constructor → queryDef → toolbarDef → columnsDef → 业务方法)
|
|
96
|
+
// 4. 页面共用辅助函数(可选,纯函数)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## index.scss 顺序(建议)
|
|
102
|
+
|
|
103
|
+
```scss
|
|
104
|
+
// 1. 变量覆盖
|
|
105
|
+
// 2. 容器级样式 (.app-page-container)
|
|
106
|
+
// 3. 区域级样式 (.search-area / .table-area)
|
|
107
|
+
// 4. 组件深层覆盖 (:deep(.el-table))
|
|
108
|
+
// 5. 响应式 (@media)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
> 禁止 `::v-deep` / `/deep/`,统一使用 `:deep()`。
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
# 03 — 注释规范
|
|
2
|
-
|
|
3
|
-
> **强制度**:🟡 建议。
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 文件头注释
|
|
8
|
-
|
|
9
|
-
由 VS Code 插件 **koroFileHeader** 自动生成,不手写。
|
|
10
|
-
项目根有 `.fileheader` 配置文件。
|
|
11
|
-
|
|
12
|
-
**插件缺失提示**:
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
⚠️ 未检测到 koroFileHeader 配置生效
|
|
16
|
-
→ 请安装插件:VS Code 扩展商店搜索 "koroFileHeader"
|
|
17
|
-
→ 或联系 CHENY(工号 409322)获取一键安装指引
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## 函数注释
|
|
23
|
-
|
|
24
|
-
仅复杂业务逻辑需要:
|
|
25
|
-
|
|
26
|
-
```typescript
|
|
27
|
-
/**
|
|
28
|
-
* @description 批量提交客户档案
|
|
29
|
-
* @param ids 选中的客户 ID 列表
|
|
30
|
-
* @returns 后端响应结果
|
|
31
|
-
*/
|
|
32
|
-
async function batchSubmit(ids: string[]) { ... }
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## 行内注释
|
|
38
|
-
|
|
39
|
-
- 解释「**为什么**」而非「是什么」
|
|
40
|
-
- 统一使用 `//`,不使用 `/* */`
|
|
41
|
-
|
|
42
|
-
```typescript
|
|
43
|
-
// 后端要求 status 必须先转字符串再传(接口字段类型不一致历史遗留)
|
|
44
|
-
params.status = String(params.status);
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## 禁止事项
|
|
50
|
-
|
|
51
|
-
- ❌ 提交注释掉的死代码(直接删除,git 可追溯历史)
|
|
52
|
-
- ❌ 显而易见的注释,如 `// 声明变量`、`// 调用接口`
|
|
53
|
-
- ❌ TODO 不带责任人或日期,如 `// TODO: 待优化`,应写为 `// TODO(cheny, 2026-04): 接口字段后端确认中`
|
|
1
|
+
# 03 — 注释规范
|
|
2
|
+
|
|
3
|
+
> **强制度**:🟡 建议。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 文件头注释
|
|
8
|
+
|
|
9
|
+
由 VS Code 插件 **koroFileHeader** 自动生成,不手写。
|
|
10
|
+
项目根有 `.fileheader` 配置文件。
|
|
11
|
+
|
|
12
|
+
**插件缺失提示**:
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
⚠️ 未检测到 koroFileHeader 配置生效
|
|
16
|
+
→ 请安装插件:VS Code 扩展商店搜索 "koroFileHeader"
|
|
17
|
+
→ 或联系 CHENY(工号 409322)获取一键安装指引
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 函数注释
|
|
23
|
+
|
|
24
|
+
仅复杂业务逻辑需要:
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
/**
|
|
28
|
+
* @description 批量提交客户档案
|
|
29
|
+
* @param ids 选中的客户 ID 列表
|
|
30
|
+
* @returns 后端响应结果
|
|
31
|
+
*/
|
|
32
|
+
async function batchSubmit(ids: string[]) { ... }
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 行内注释
|
|
38
|
+
|
|
39
|
+
- 解释「**为什么**」而非「是什么」
|
|
40
|
+
- 统一使用 `//`,不使用 `/* */`
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
// 后端要求 status 必须先转字符串再传(接口字段类型不一致历史遗留)
|
|
44
|
+
params.status = String(params.status);
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 禁止事项
|
|
50
|
+
|
|
51
|
+
- ❌ 提交注释掉的死代码(直接删除,git 可追溯历史)
|
|
52
|
+
- ❌ 显而易见的注释,如 `// 声明变量`、`// 调用接口`
|
|
53
|
+
- ❌ TODO 不带责任人或日期,如 `// TODO: 待优化`,应写为 `// TODO(cheny, 2026-04): 接口字段后端确认中`
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
# 04 — 基础编码规范
|
|
2
|
-
|
|
3
|
-
> **强制度**:🔴 必遵。
|
|
4
|
-
> 参考 jhat.tech 开发规范 + Robot_Admin 实践。
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## 13 条核心约定
|
|
9
|
-
|
|
10
|
-
1. **变量声明**:优先 `const`,必须重新赋值时用 `let`,禁止 `var`
|
|
11
|
-
2. **解构赋值**:优先使用 `const { a, b } = obj`,而非 `obj.a` / `obj.b`
|
|
12
|
-
3. **异步处理**:统一 `async/await`,禁止 `.then()` 链式调用
|
|
13
|
-
4. **字符串引号**:统一单引号(以 `.prettierrc.js` 为准)
|
|
14
|
-
5. **模板字符串**:替代字符串拼接,`` `Hello ${name}` `` 而非 `'Hello ' + name`
|
|
15
|
-
6. **大括号**:所有代码块必须使用大括号包裹,即使只有一行
|
|
16
|
-
7. **条件层级**:最多三层,超过三层必须抽成函数
|
|
17
|
-
8. **模板表达式**:`<template>` 中只写简单表达式,复杂逻辑提取为 `computed` 或方法
|
|
18
|
-
9. **对象遍历**:禁止 `for...in`,使用 `Object.keys(obj).forEach()`
|
|
19
|
-
10. **undefined 判断**:使用 `typeof variable !== 'undefined'`
|
|
20
|
-
11. **v-for**:必须设置 `:key`,优先用业务主键 id 而非 index
|
|
21
|
-
12. **指令缩写**:统一 `:`(v-bind)、`@`(v-on)、`#`(v-slot)
|
|
22
|
-
13. **this 别名**:`<script setup>` 中无 `this`;旧 Options API 中的 `this` 别名用 `self`
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## 全局禁止事项
|
|
27
|
-
|
|
28
|
-
- ❌ index.vue 中写业务逻辑(逻辑全在 data.ts)
|
|
29
|
-
- ❌ 使用 Vuex(本项目用 Pinia)
|
|
30
|
-
- ❌ `::v-deep` / `/deep/`(用 `:deep()`)
|
|
31
|
-
- ❌ 直接用 axios(用 getAction/postAction,详见 13-platform-components.md)
|
|
32
|
-
- ❌ 手写查询表单/工具栏/分页(用 BaseQuery/BaseToolbar/jh-pagination)
|
|
33
|
-
- ❌ 每个页面重复写弹窗(优先用 `c_modal` / `c_formModal` 等局部公共组件)
|
|
1
|
+
# 04 — 基础编码规范
|
|
2
|
+
|
|
3
|
+
> **强制度**:🔴 必遵。
|
|
4
|
+
> 参考 jhat.tech 开发规范 + Robot_Admin 实践。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 13 条核心约定
|
|
9
|
+
|
|
10
|
+
1. **变量声明**:优先 `const`,必须重新赋值时用 `let`,禁止 `var`
|
|
11
|
+
2. **解构赋值**:优先使用 `const { a, b } = obj`,而非 `obj.a` / `obj.b`
|
|
12
|
+
3. **异步处理**:统一 `async/await`,禁止 `.then()` 链式调用
|
|
13
|
+
4. **字符串引号**:统一单引号(以 `.prettierrc.js` 为准)
|
|
14
|
+
5. **模板字符串**:替代字符串拼接,`` `Hello ${name}` `` 而非 `'Hello ' + name`
|
|
15
|
+
6. **大括号**:所有代码块必须使用大括号包裹,即使只有一行
|
|
16
|
+
7. **条件层级**:最多三层,超过三层必须抽成函数
|
|
17
|
+
8. **模板表达式**:`<template>` 中只写简单表达式,复杂逻辑提取为 `computed` 或方法
|
|
18
|
+
9. **对象遍历**:禁止 `for...in`,使用 `Object.keys(obj).forEach()`
|
|
19
|
+
10. **undefined 判断**:使用 `typeof variable !== 'undefined'`
|
|
20
|
+
11. **v-for**:必须设置 `:key`,优先用业务主键 id 而非 index
|
|
21
|
+
12. **指令缩写**:统一 `:`(v-bind)、`@`(v-on)、`#`(v-slot)
|
|
22
|
+
13. **this 别名**:`<script setup>` 中无 `this`;旧 Options API 中的 `this` 别名用 `self`
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 全局禁止事项
|
|
27
|
+
|
|
28
|
+
- ❌ index.vue 中写业务逻辑(逻辑全在 data.ts)
|
|
29
|
+
- ❌ 使用 Vuex(本项目用 Pinia)
|
|
30
|
+
- ❌ `::v-deep` / `/deep/`(用 `:deep()`)
|
|
31
|
+
- ❌ 直接用 axios(用 getAction/postAction,详见 13-platform-components.md)
|
|
32
|
+
- ❌ 手写查询表单/工具栏/分页(用 BaseQuery/BaseToolbar/jh-pagination)
|
|
33
|
+
- ❌ 每个页面重复写弹窗(优先用 `c_modal` / `c_formModal` 等局部公共组件)
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
# 05 — 日志输出规范
|
|
2
|
-
|
|
3
|
-
> **强制度**:🔴 必遵。
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 开发期
|
|
8
|
-
|
|
9
|
-
- 允许 `console.log` 调试,ESLint 仅给 `warn` 提示
|
|
10
|
-
- AI 生成的代码**不要**包含调试用 `console.log`
|
|
11
|
-
|
|
12
|
-
## 提交期
|
|
13
|
-
|
|
14
|
-
- husky pre-commit 钩子自动触发 lint 检查
|
|
15
|
-
- **必须清理** `console.log` / `console.warn` / `console.debug` 才能提交
|
|
16
|
-
|
|
17
|
-
## 生产代码
|
|
18
|
-
|
|
19
|
-
- ❌ 禁止出现 `console.log`、`console.warn`、`console.error`
|
|
20
|
-
- ❌ 大量 console 输出会带来性能问题(参考 jhat.tech 规范)
|
|
21
|
-
|
|
22
|
-
## 替代方案
|
|
23
|
-
|
|
24
|
-
| 场景 | 替代方式 |
|
|
25
|
-
| -------- | ---------------------------------------------- |
|
|
26
|
-
| 错误监控 | 走全局错误处理器(接入 Sentry 或自研上报通道) |
|
|
27
|
-
| 调试信息 | 仅在开发环境通过 `import.meta.env.DEV` 守卫 |
|
|
28
|
-
| 用户提示 | 使用 `ElMessage` / `jh-message` |
|
|
29
|
-
|
|
30
|
-
```typescript
|
|
31
|
-
// ✅ 允许:开发期守卫
|
|
32
|
-
if (import.meta.env.DEV) {
|
|
33
|
-
console.log("[debug] payload:", payload);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// ❌ 禁止:生产代码无守卫的 console
|
|
37
|
-
console.log("user info:", user);
|
|
38
|
-
```
|
|
1
|
+
# 05 — 日志输出规范
|
|
2
|
+
|
|
3
|
+
> **强制度**:🔴 必遵。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 开发期
|
|
8
|
+
|
|
9
|
+
- 允许 `console.log` 调试,ESLint 仅给 `warn` 提示
|
|
10
|
+
- AI 生成的代码**不要**包含调试用 `console.log`
|
|
11
|
+
|
|
12
|
+
## 提交期
|
|
13
|
+
|
|
14
|
+
- husky pre-commit 钩子自动触发 lint 检查
|
|
15
|
+
- **必须清理** `console.log` / `console.warn` / `console.debug` 才能提交
|
|
16
|
+
|
|
17
|
+
## 生产代码
|
|
18
|
+
|
|
19
|
+
- ❌ 禁止出现 `console.log`、`console.warn`、`console.error`
|
|
20
|
+
- ❌ 大量 console 输出会带来性能问题(参考 jhat.tech 规范)
|
|
21
|
+
|
|
22
|
+
## 替代方案
|
|
23
|
+
|
|
24
|
+
| 场景 | 替代方式 |
|
|
25
|
+
| -------- | ---------------------------------------------- |
|
|
26
|
+
| 错误监控 | 走全局错误处理器(接入 Sentry 或自研上报通道) |
|
|
27
|
+
| 调试信息 | 仅在开发环境通过 `import.meta.env.DEV` 守卫 |
|
|
28
|
+
| 用户提示 | 使用 `ElMessage` / `jh-message` |
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
// ✅ 允许:开发期守卫
|
|
32
|
+
if (import.meta.env.DEV) {
|
|
33
|
+
console.log("[debug] payload:", payload);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// ❌ 禁止:生产代码无守卫的 console
|
|
37
|
+
console.log("user info:", user);
|
|
38
|
+
```
|