@agile-team/wl-skills-kit 2.3.4 → 2.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +13 -7
  3. package/files/.cursor/mcp.json +8 -8
  4. package/files/.github/guides/README.md +13 -13
  5. package/files/.github/guides/architecture.md +555 -555
  6. package/files/.github/guides/mcp-setup.md +109 -109
  7. package/files/.github/guides/usage.md +184 -184
  8. package/files/.github/reports/README.md +65 -65
  9. package/files/.github/reports/SYS_DICT_INFO.md +50 -50
  10. package/files/.github/reports/SYS_MENU_INFO.md +247 -247
  11. package/files/.github/reports/SYS_PERMISSION_INFO.md +20 -20
  12. 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
  13. 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
  14. package/files/.github/skills/_compat/README.md +108 -108
  15. package/files/.github/skills/_compat/headers/agents.txt +8 -8
  16. package/files/.github/skills/_compat/headers/claude-code.txt +7 -7
  17. package/files/.github/skills/_compat/headers/cline.txt +7 -7
  18. package/files/.github/skills/_compat/headers/cursor-mdc.txt +16 -16
  19. package/files/.github/skills/_compat/headers/cursor-rules.txt +7 -7
  20. package/files/.github/skills/_compat/headers/github-copilot.txt +1 -1
  21. package/files/.github/skills/_compat/headers/kiro.txt +10 -10
  22. package/files/.github/skills/_compat/headers/qoder.txt +8 -8
  23. package/files/.github/skills/_compat/headers/trae.txt +11 -11
  24. package/files/.github/skills/_compat/headers/windsurf.txt +7 -7
  25. package/files/.github/skills/_registry.md +81 -81
  26. package/files/.github/skills/core/api-contract/SKILL.md +344 -344
  27. package/files/.github/skills/core/api-contract/USAGE.md +110 -110
  28. package/files/.github/skills/core/convention-audit/SKILL.md +189 -189
  29. package/files/.github/skills/core/convention-audit/USAGE.md +99 -99
  30. package/files/.github/skills/core/page-codegen/SKILL.md +973 -973
  31. package/files/.github/skills/core/page-codegen/USAGE.md +102 -102
  32. package/files/.github/skills/core/page-codegen/templates/_index.md +46 -46
  33. package/files/.github/skills/core/page-codegen/templates/domains/_CONTRIBUTING.md +107 -107
  34. package/files/.github/skills/core/page-codegen/templates/domains/produce/TPL-OPERATION-STATION.md +442 -442
  35. package/files/.github/skills/core/page-codegen/templates/domains/sale/README.md +26 -26
  36. package/files/.github/skills/core/page-codegen/templates/universal/TPL-CHANGE-HISTORY.md +276 -276
  37. package/files/.github/skills/core/page-codegen/templates/universal/TPL-DETAIL-TABS.md +1145 -1145
  38. package/files/.github/skills/core/page-codegen/templates/universal/TPL-DRIVEN.md +309 -309
  39. package/files/.github/skills/core/page-codegen/templates/universal/TPL-FORM-ROUTE.md +436 -436
  40. package/files/.github/skills/core/page-codegen/templates/universal/TPL-LIST.md +191 -191
  41. package/files/.github/skills/core/page-codegen/templates/universal/TPL-MASTER-DETAIL.md +148 -148
  42. package/files/.github/skills/core/page-codegen/templates/universal/TPL-RECORD-FORM.md +376 -376
  43. package/files/.github/skills/core/page-codegen/templates/universal/TPL-TREE-LIST.md +186 -186
  44. package/files/.github/skills/core/prototype-scan/SKILL.md +498 -498
  45. package/files/.github/skills/core/prototype-scan/USAGE.md +95 -95
  46. package/files/.github/skills/core/template-extract/SKILL.md +139 -139
  47. package/files/.github/skills/core/template-extract/USAGE.md +93 -93
  48. package/files/.github/skills/domain/README.md +51 -51
  49. package/files/.github/skills/sync/menu-sync/SKILL.md +263 -263
  50. package/files/.github/skills/sync/menu-sync/USAGE.md +104 -104
  51. package/files/.github/skills/sync/menu-sync/env/env.local.json +7 -7
  52. package/files/.github/skills/sync/menu-sync/env/guide.md +99 -99
  53. package/files/.github/skills/sync/permission-sync/SKILL.draft.md +91 -91
  54. package/files/.github/standards/01-toolchain.md +57 -57
  55. package/files/.github/standards/02-code-structure.md +111 -111
  56. package/files/.github/standards/03-comments.md +53 -53
  57. package/files/.github/standards/04-coding-basics.md +33 -33
  58. package/files/.github/standards/05-logging.md +38 -38
  59. package/files/.github/standards/06-security.md +44 -44
  60. package/files/.github/standards/07-config.md +52 -52
  61. package/files/.github/standards/08-git.md +60 -60
  62. package/files/.github/standards/09-typescript.md +71 -71
  63. package/files/.github/standards/10-pinia.md +57 -57
  64. package/files/.github/standards/11-form-validation.md +81 -81
  65. package/files/.github/standards/12-base-table.md +153 -153
  66. package/files/.github/standards/13-platform-components.md +123 -123
  67. package/files/.github/standards/index.md +89 -89
  68. package/files/.kiro/settings/mcp.json +8 -8
  69. package/files/.mcp.json +8 -8
  70. package/files/.vscode/mcp.json +9 -9
  71. package/files/demo/produce/aiflow/mmwr-customer-apply-change-history/data.ts +196 -196
  72. package/files/demo/produce/aiflow/mmwr-customer-apply-change-history/index.scss +150 -150
  73. package/files/demo/produce/aiflow/mmwr-customer-apply-change-history/index.vue +79 -79
  74. package/files/docs/jh-date-range.md +257 -257
  75. package/files/docs/jh-date.md +222 -222
  76. package/files/docs/jh-dept-picker.md +190 -190
  77. package/files/docs/jh-drag-row.md +590 -590
  78. package/files/docs/jh-file-upload.md +216 -216
  79. package/files/docs/jh-picker.md +218 -218
  80. package/files/docs/jh-select.md +148 -148
  81. package/files/docs/jh-text.md +248 -248
  82. package/files/docs/jh-user-picker.md +197 -197
  83. package/files/src/components/global/C_RightToolbar/data.ts +228 -228
  84. package/files/src/components/global/C_RightToolbar/index.scss +44 -44
  85. package/files/src/components/global/C_Splitter/index.scss +61 -61
  86. package/files/src/components/global/C_SvgIcon/index.scss +15 -15
  87. package/files/src/components/global/C_TagStatus/index.scss +20 -20
  88. package/files/src/components/global/C_Tree/data.ts +61 -61
  89. package/files/src/components/local/c_listModal/index.scss +4 -4
  90. package/package.json +1 -1
@@ -2,190 +2,190 @@
2
2
 
3
3
  > 见 SKILL.md 主文件(约束 + 按钮规则 + Mock 规范等共用规则)。
4
4
 
5
-
6
- #### index.vue
7
-
8
- ```vue
9
- <template>
10
- <div class="app-container app-page-container">
11
- <C_Splitter :left-width="220">
12
- <template #left>
13
- <C_Tree
14
- :tree-data="treeData"
15
- :show-search="true"
16
- @node-click="handleNodeClick"
17
- />
18
- </template>
19
- <template #right>
20
- <BaseQuery
21
- :form="queryParam"
22
- :items="queryItems"
23
- @select="select"
24
- @reset="select"
25
- />
26
- <BaseToolbar :items="toolbars" />
27
- <BaseTable ref="tableRef" :data="list" :columns="columns" showToolbar />
28
- <jh-pagination
29
- v-show="page.total && page.total > 0"
30
- :total="page.total || 0"
31
- v-model:currentPage="page.current"
32
- v-model:pageSize="page.size"
33
- @current-change="select"
34
- @size-change="select"
35
- />
36
- </template>
37
- </C_Splitter>
38
- </div>
39
- </template>
40
-
41
- <script setup lang="ts">
42
- import { createPage, loadTree } from "./data";
43
-
44
- const Page = createPage();
45
- const {
46
- tableRef,
47
- page,
48
- queryParam,
49
- list,
50
- treeData,
51
- queryItems,
52
- columns,
53
- toolbars,
54
- select,
55
- handleNodeClick
56
- } = Page;
57
-
58
- onMounted(() => {
59
- loadTree();
60
- select();
61
- });
62
- </script>
63
-
64
- <style scoped lang="scss">
65
- @import "./index.scss";
66
- </style>
67
- ```
68
-
69
- #### data.ts
70
-
71
- ```typescript
72
- import {
73
- AbstractPageQueryHook,
74
- BaseQueryItemDesc,
75
- ActionButtonDesc,
76
- TableColumnDesc,
77
- BusLogicDataType
78
- } from "@/types/page";
79
- import { getAction, postAction } from "@jhlc/common-core/src/api/action";
80
-
81
- export const API_CONFIG = {
82
- tree: "/[服务缩写]/[树资源]/tree",
83
- list: "/[服务缩写]/[主资源]/list",
84
- remove: "/[服务缩写]/[主资源]/remove",
85
- getById: "/[服务缩写]/[主资源]/getById",
86
- save: "/[服务缩写]/[主资源]/save",
87
- update: "/[服务缩写]/[主资源]/update"
88
- } as const;
89
-
90
- // ===== 树形数据 =====
91
- const treeData = ref<any[]>([]);
92
- let currentNodeId: string | undefined;
93
-
94
- export async function loadTree() {
95
- const res = await getAction(API_CONFIG.tree);
96
- treeData.value = res.result || res.data || res;
97
- }
98
-
99
- export function createPage(editModalRef?: any) {
100
- let _editModalRef = editModalRef;
101
-
102
- let Page = new (class extends AbstractPageQueryHook {
103
- constructor() {
104
- super({ url: { list: API_CONFIG.list, remove: API_CONFIG.remove } });
105
- }
106
-
107
- queryDef(): BaseQueryItemDesc<any>[] {
108
- return [
109
- { name: "[fieldName]", label: "[中文名]", placeholder: "请输入" }
110
- ];
111
- }
112
-
113
- toolbarDef(): ActionButtonDesc[] {
114
- return [
115
- {
116
- name: "primary",
117
- label: "新增",
118
- onClick: () => _editModalRef?.value?.open()
119
- },
120
- {
121
- name: "danger",
122
- label: "删除",
123
- onClick: () => {
124
- const rows = this.tableRef.value?.getSelectionRows();
125
- if (!rows?.length) return ElMessage.warning("请先选择数据");
126
- this.removeBatch();
127
- }
128
- }
129
- ];
130
- }
131
-
132
- columnsDef(): TableColumnDesc<any>[] {
133
- return [
134
- { type: "selection" },
135
- { type: "index" },
136
- { label: "[字段名]", name: "[fieldName]", minWidth: 120 },
137
- {
138
- label: "操作",
139
- width: 140,
140
- fixed: "right",
141
- operations: [
142
- {
143
- name: "edit",
144
- label: "编辑",
145
- onClick: (row: any) => _editModalRef?.value?.edit(row.id)
146
- },
147
- {
148
- name: "remove",
149
- label: "删除",
150
- onClick: (row: any) => this.remove(row.id)
151
- }
152
- ]
153
- }
154
- ];
155
- }
156
- })();
157
-
158
- const created = (Page as any).create() as any;
159
-
160
- // ⭐ 树节点点击 → 过滤右侧列表
161
- function handleNodeClick(data: any) {
162
- currentNodeId = data.id;
163
- created.queryParam.value.treeId = data.id;
164
- created.page.current = 1;
165
- created.select();
166
- }
167
-
168
- return {
169
- ...created,
170
- treeData,
171
- handleNodeClick
172
- };
173
- }
174
- ```
175
-
176
- #### index.scss
177
-
178
- ```scss
179
- .app-page-container {
180
- // C_Splitter 需要父容器撑满高度
181
- :deep(.my-splitter-container) {
182
- height: 100%;
183
- }
184
- }
185
- ```
186
-
187
- > **C_Tree Props 速查**:`tabs`(标签页数组)、`treeData`(必填)、`showSearch`(默认 true)、`defaultExpandAll`(默认 true)。
188
- > **Events**:`@node-click`(节点点击)、`@tab-change`(标签页切换)。
189
- > 详见 `src/components/global/C_Tree/README.md`。
190
-
5
+
6
+ #### index.vue
7
+
8
+ ```vue
9
+ <template>
10
+ <div class="app-container app-page-container">
11
+ <C_Splitter :left-width="220">
12
+ <template #left>
13
+ <C_Tree
14
+ :tree-data="treeData"
15
+ :show-search="true"
16
+ @node-click="handleNodeClick"
17
+ />
18
+ </template>
19
+ <template #right>
20
+ <BaseQuery
21
+ :form="queryParam"
22
+ :items="queryItems"
23
+ @select="select"
24
+ @reset="select"
25
+ />
26
+ <BaseToolbar :items="toolbars" />
27
+ <BaseTable ref="tableRef" :data="list" :columns="columns" showToolbar />
28
+ <jh-pagination
29
+ v-show="page.total && page.total > 0"
30
+ :total="page.total || 0"
31
+ v-model:currentPage="page.current"
32
+ v-model:pageSize="page.size"
33
+ @current-change="select"
34
+ @size-change="select"
35
+ />
36
+ </template>
37
+ </C_Splitter>
38
+ </div>
39
+ </template>
40
+
41
+ <script setup lang="ts">
42
+ import { createPage, loadTree } from "./data";
43
+
44
+ const Page = createPage();
45
+ const {
46
+ tableRef,
47
+ page,
48
+ queryParam,
49
+ list,
50
+ treeData,
51
+ queryItems,
52
+ columns,
53
+ toolbars,
54
+ select,
55
+ handleNodeClick
56
+ } = Page;
57
+
58
+ onMounted(() => {
59
+ loadTree();
60
+ select();
61
+ });
62
+ </script>
63
+
64
+ <style scoped lang="scss">
65
+ @import "./index.scss";
66
+ </style>
67
+ ```
68
+
69
+ #### data.ts
70
+
71
+ ```typescript
72
+ import {
73
+ AbstractPageQueryHook,
74
+ BaseQueryItemDesc,
75
+ ActionButtonDesc,
76
+ TableColumnDesc,
77
+ BusLogicDataType
78
+ } from "@/types/page";
79
+ import { getAction, postAction } from "@jhlc/common-core/src/api/action";
80
+
81
+ export const API_CONFIG = {
82
+ tree: "/[服务缩写]/[树资源]/tree",
83
+ list: "/[服务缩写]/[主资源]/list",
84
+ remove: "/[服务缩写]/[主资源]/remove",
85
+ getById: "/[服务缩写]/[主资源]/getById",
86
+ save: "/[服务缩写]/[主资源]/save",
87
+ update: "/[服务缩写]/[主资源]/update"
88
+ } as const;
89
+
90
+ // ===== 树形数据 =====
91
+ const treeData = ref<any[]>([]);
92
+ let currentNodeId: string | undefined;
93
+
94
+ export async function loadTree() {
95
+ const res = await getAction(API_CONFIG.tree);
96
+ treeData.value = res.result || res.data || res;
97
+ }
98
+
99
+ export function createPage(editModalRef?: any) {
100
+ let _editModalRef = editModalRef;
101
+
102
+ let Page = new (class extends AbstractPageQueryHook {
103
+ constructor() {
104
+ super({ url: { list: API_CONFIG.list, remove: API_CONFIG.remove } });
105
+ }
106
+
107
+ queryDef(): BaseQueryItemDesc<any>[] {
108
+ return [
109
+ { name: "[fieldName]", label: "[中文名]", placeholder: "请输入" }
110
+ ];
111
+ }
112
+
113
+ toolbarDef(): ActionButtonDesc[] {
114
+ return [
115
+ {
116
+ name: "primary",
117
+ label: "新增",
118
+ onClick: () => _editModalRef?.value?.open()
119
+ },
120
+ {
121
+ name: "danger",
122
+ label: "删除",
123
+ onClick: () => {
124
+ const rows = this.tableRef.value?.getSelectionRows();
125
+ if (!rows?.length) return ElMessage.warning("请先选择数据");
126
+ this.removeBatch();
127
+ }
128
+ }
129
+ ];
130
+ }
131
+
132
+ columnsDef(): TableColumnDesc<any>[] {
133
+ return [
134
+ { type: "selection" },
135
+ { type: "index" },
136
+ { label: "[字段名]", name: "[fieldName]", minWidth: 120 },
137
+ {
138
+ label: "操作",
139
+ width: 140,
140
+ fixed: "right",
141
+ operations: [
142
+ {
143
+ name: "edit",
144
+ label: "编辑",
145
+ onClick: (row: any) => _editModalRef?.value?.edit(row.id)
146
+ },
147
+ {
148
+ name: "remove",
149
+ label: "删除",
150
+ onClick: (row: any) => this.remove(row.id)
151
+ }
152
+ ]
153
+ }
154
+ ];
155
+ }
156
+ })();
157
+
158
+ const created = (Page as any).create() as any;
159
+
160
+ // ⭐ 树节点点击 → 过滤右侧列表
161
+ function handleNodeClick(data: any) {
162
+ currentNodeId = data.id;
163
+ created.queryParam.value.treeId = data.id;
164
+ created.page.current = 1;
165
+ created.select();
166
+ }
167
+
168
+ return {
169
+ ...created,
170
+ treeData,
171
+ handleNodeClick
172
+ };
173
+ }
174
+ ```
175
+
176
+ #### index.scss
177
+
178
+ ```scss
179
+ .app-page-container {
180
+ // C_Splitter 需要父容器撑满高度
181
+ :deep(.my-splitter-container) {
182
+ height: 100%;
183
+ }
184
+ }
185
+ ```
186
+
187
+ > **C_Tree Props 速查**:`tabs`(标签页数组)、`treeData`(必填)、`showSearch`(默认 true)、`defaultExpandAll`(默认 true)。
188
+ > **Events**:`@node-click`(节点点击)、`@tab-change`(标签页切换)。
189
+ > 详见 `src/components/global/C_Tree/README.md`。
190
+
191
191
  ---