@agile-team/wl-skills-kit 2.2.0 → 2.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.
Files changed (101) hide show
  1. package/CHANGELOG.md +33 -22
  2. package/README.md +11 -103
  3. package/bin/wl-skills.js +2 -42
  4. package/files/.github/guides/README.md +13 -13
  5. package/files/.github/guides/architecture.md +555 -555
  6. package/files/.github/guides/usage.md +176 -173
  7. package/files/.github/reports/README.md +65 -65
  8. package/files/.github/reports/SYS_DICT_INFO.md +50 -50
  9. package/files/.github/reports/SYS_MENU_INFO.md +247 -247
  10. package/files/.github/reports/SYS_PERMISSION_INFO.md +20 -20
  11. 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
  12. 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
  13. package/files/.github/skills/_compat/README.md +108 -108
  14. package/files/.github/skills/_compat/headers/agents.txt +8 -8
  15. package/files/.github/skills/_compat/headers/claude-code.txt +7 -7
  16. package/files/.github/skills/_compat/headers/cline.txt +7 -7
  17. package/files/.github/skills/_compat/headers/cursor-mdc.txt +16 -16
  18. package/files/.github/skills/_compat/headers/cursor-rules.txt +7 -7
  19. package/files/.github/skills/_compat/headers/github-copilot.txt +1 -1
  20. package/files/.github/skills/_compat/headers/kiro.txt +10 -10
  21. package/files/.github/skills/_compat/headers/trae.txt +11 -11
  22. package/files/.github/skills/_compat/headers/windsurf.txt +7 -7
  23. package/files/.github/skills/_registry.md +81 -81
  24. package/files/.github/skills/core/api-contract/SKILL.md +344 -344
  25. package/files/.github/skills/core/api-contract/USAGE.md +110 -110
  26. package/files/.github/skills/core/convention-audit/SKILL.md +189 -189
  27. package/files/.github/skills/core/convention-audit/USAGE.md +99 -99
  28. package/files/.github/skills/core/page-codegen/SKILL.md +973 -973
  29. package/files/.github/skills/core/page-codegen/USAGE.md +102 -102
  30. package/files/.github/skills/core/page-codegen/templates/_index.md +46 -46
  31. package/files/.github/skills/core/page-codegen/templates/domains/_CONTRIBUTING.md +107 -107
  32. package/files/.github/skills/core/page-codegen/templates/domains/produce/TPL-OPERATION-STATION.md +442 -442
  33. package/files/.github/skills/core/page-codegen/templates/domains/sale/README.md +26 -26
  34. package/files/.github/skills/core/page-codegen/templates/universal/TPL-CHANGE-HISTORY.md +276 -276
  35. package/files/.github/skills/core/page-codegen/templates/universal/TPL-DETAIL-TABS.md +1145 -1145
  36. package/files/.github/skills/core/page-codegen/templates/universal/TPL-DRIVEN.md +124 -124
  37. package/files/.github/skills/core/page-codegen/templates/universal/TPL-FORM-ROUTE.md +436 -436
  38. package/files/.github/skills/core/page-codegen/templates/universal/TPL-LIST.md +191 -191
  39. package/files/.github/skills/core/page-codegen/templates/universal/TPL-MASTER-DETAIL.md +148 -148
  40. package/files/.github/skills/core/page-codegen/templates/universal/TPL-RECORD-FORM.md +376 -376
  41. package/files/.github/skills/core/page-codegen/templates/universal/TPL-TREE-LIST.md +186 -186
  42. package/files/.github/skills/core/prototype-scan/SKILL.md +498 -498
  43. package/files/.github/skills/core/prototype-scan/USAGE.md +95 -95
  44. package/files/.github/skills/core/template-extract/SKILL.md +139 -139
  45. package/files/.github/skills/core/template-extract/USAGE.md +93 -93
  46. package/files/.github/skills/domain/README.md +51 -51
  47. package/files/.github/skills/sync/env.local.json +2 -1
  48. package/files/.github/skills/sync/menu-sync/SKILL.md +263 -263
  49. package/files/.github/skills/sync/menu-sync/USAGE.md +104 -104
  50. package/files/.github/skills/sync/menu-sync/env/env.local.json +7 -7
  51. package/files/.github/skills/sync/menu-sync/env/guide.md +99 -99
  52. package/files/.github/skills/sync/permission-sync/SKILL.draft.md +91 -91
  53. package/files/.github/standards/01-toolchain.md +57 -57
  54. package/files/.github/standards/02-code-structure.md +111 -111
  55. package/files/.github/standards/03-comments.md +53 -53
  56. package/files/.github/standards/04-coding-basics.md +33 -33
  57. package/files/.github/standards/05-logging.md +38 -38
  58. package/files/.github/standards/06-security.md +44 -44
  59. package/files/.github/standards/07-config.md +52 -52
  60. package/files/.github/standards/08-git.md +60 -60
  61. package/files/.github/standards/09-typescript.md +71 -71
  62. package/files/.github/standards/10-pinia.md +57 -57
  63. package/files/.github/standards/11-form-validation.md +81 -81
  64. package/files/.github/standards/12-base-table.md +153 -153
  65. package/files/.github/standards/13-platform-components.md +123 -123
  66. package/files/.github/standards/index.md +89 -89
  67. package/files/demo/produce/aiflow/mmwr-customer-apply-add/api.md +1 -1
  68. package/files/demo/produce/aiflow/mmwr-customer-apply-change-history/data.ts +196 -196
  69. package/files/demo/produce/aiflow/mmwr-customer-apply-change-history/index.scss +150 -150
  70. package/files/demo/produce/aiflow/mmwr-customer-apply-change-history/index.vue +79 -79
  71. package/files/docs/jh-date-range.md +257 -257
  72. package/files/docs/jh-date.md +222 -222
  73. package/files/docs/jh-dept-picker.md +190 -190
  74. package/files/docs/jh-drag-row.md +590 -590
  75. package/files/docs/jh-file-upload.md +216 -216
  76. package/files/docs/jh-picker.md +218 -218
  77. package/files/docs/jh-select.md +148 -148
  78. package/files/docs/jh-text.md +248 -248
  79. package/files/docs/jh-user-picker.md +197 -197
  80. package/files/docs/request.md +24 -9
  81. package/files/src/components/global/C_RightToolbar/data.ts +228 -0
  82. package/files/src/components/global/C_RightToolbar/index.scss +44 -0
  83. package/files/src/components/global/C_RightToolbar/index.vue +34 -336
  84. package/files/src/components/global/C_Splitter/index.scss +61 -0
  85. package/files/src/components/global/C_Splitter/index.vue +2 -64
  86. package/files/src/components/global/C_SvgIcon/index.scss +15 -0
  87. package/files/src/components/global/C_SvgIcon/index.vue +20 -50
  88. package/files/src/components/global/C_TagStatus/index.scss +20 -0
  89. package/files/src/components/global/C_TagStatus/index.vue +1 -22
  90. package/files/src/components/global/C_Tree/data.ts +61 -0
  91. package/files/src/components/global/C_Tree/index.vue +12 -53
  92. package/files/src/components/local/c_listModal/index.scss +4 -0
  93. package/files/src/components/local/c_listModal/index.vue +1 -1
  94. package/mcp/api/client.js +76 -0
  95. package/mcp/api/dictApi.js +40 -0
  96. package/mcp/api/menuApi.js +32 -0
  97. package/mcp/config.js +47 -0
  98. package/mcp/server.js +210 -0
  99. package/mcp/tools/dictSync.js +173 -0
  100. package/mcp/tools/menuSync.js +96 -0
  101. package/package.json +6 -9
@@ -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
  ---