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