@agile-team/wl-skills-kit 2.10.0 → 2.11.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.
Files changed (192) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +7 -7
  3. package/bin/wl-skills.js +418 -29
  4. package/files/.github/copilot-instructions.md +24 -369
  5. package/files/.wl-skills/copilot-instructions-full.md +233 -0
  6. package/files/{docs → .wl-skills/docs}/jh-pagination.md +2 -2
  7. package/files/{docs → .wl-skills/docs}/page-query-hook-best-practices.md +3 -3
  8. package/files/{.github → .wl-skills}/guides/README.md +1 -1
  9. package/files/{.github → .wl-skills}/guides/architecture.md +5 -5
  10. package/files/{.github → .wl-skills}/guides/mcp-setup.md +1 -1
  11. package/files/{.github → .wl-skills}/guides/usage.md +8 -8
  12. package/files/{.github → .wl-skills}/reports/SYS_MENU_INFO.md +1 -1
  13. package/files/{.github → .wl-skills}/reports/SYS_PERMISSION_INFO.md +1 -1
  14. package/files/{.github → .wl-skills}/reports//347/273/204/344/273/266/346/217/220/345/217/226/345/273/272/350/256/256.md +1 -1
  15. package/files/{.github → .wl-skills}/skills/_best-practices.md +20 -7
  16. package/files/{.github → .wl-skills}/skills/_compat/README.md +1 -1
  17. package/files/{.github → .wl-skills}/skills/_compat/editors.json +1 -1
  18. package/files/{.github → .wl-skills}/skills/_compat/headers/cursor-mdc.txt +1 -1
  19. package/files/{.github → .wl-skills}/skills/_compat/headers/kiro.txt +1 -1
  20. package/files/{.github → .wl-skills}/skills/_compat/headers/trae.txt +1 -1
  21. package/files/{.github → .wl-skills}/skills/_pipeline.md +23 -11
  22. package/files/{.github → .wl-skills}/skills/_registry.md +10 -4
  23. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/SKILL.md +27 -27
  24. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/USAGE.md +22 -22
  25. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/business-index.md +1 -1
  26. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/business-open-questions.md +1 -1
  27. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/module-dictionary.md +1 -1
  28. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/module-field.md +1 -1
  29. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/module-index.md +2 -2
  30. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/module-requirement.md +2 -2
  31. package/files/{.github → .wl-skills}/skills/core/convention-audit/SKILL.md +52 -7
  32. package/files/{.github → .wl-skills}/skills/core/convention-audit/USAGE.md +1 -1
  33. package/files/{.github → .wl-skills}/skills/core/page-codegen/SKILL.md +33 -13
  34. package/files/{.github → .wl-skills}/skills/core/page-codegen/USAGE.md +1 -1
  35. package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-DETAIL-TABS.md +7 -7
  36. package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-DRIVEN.md +5 -5
  37. package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-FORM-ROUTE.md +2 -2
  38. package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-RECORD-FORM.md +1 -1
  39. package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-TREE-LIST.md +1 -1
  40. package/files/{.github → .wl-skills}/skills/core/prototype-scan/SKILL.md +11 -11
  41. package/files/{.github → .wl-skills}/skills/core/prototype-scan/USAGE.md +3 -3
  42. package/files/{.github → .wl-skills}/skills/core/spec-doc-parse/SKILL.md +9 -9
  43. package/files/{.github → .wl-skills}/skills/core/spec-doc-parse/USAGE.md +6 -6
  44. package/files/{.github → .wl-skills}/skills/core/template-extract/SKILL.md +1 -1
  45. package/files/{.github → .wl-skills}/skills/core/template-extract/USAGE.md +1 -1
  46. package/files/{.github → .wl-skills}/skills/ops/code-fix/SKILL.md +135 -96
  47. package/files/{.github → .wl-skills}/skills/sync/_mcp-guardrail.md +3 -3
  48. package/files/{.github → .wl-skills}/skills/sync/dict-sync/SKILL.md +5 -5
  49. package/files/{.github → .wl-skills}/skills/sync/dict-sync/USAGE.md +2 -2
  50. package/files/{.github → .wl-skills}/skills/sync/menu-sync/SKILL.md +6 -6
  51. package/files/{.github → .wl-skills}/skills/sync/menu-sync/USAGE.md +3 -3
  52. package/files/{.github → .wl-skills}/skills/sync/menu-sync/env/guide.md +2 -2
  53. package/files/{.github → .wl-skills}/skills/sync/permission-sync/SKILL.md +3 -3
  54. package/files/{.github → .wl-skills}/skills/sync/permission-sync/USAGE.md +1 -1
  55. package/files/{src → .wl-skills/src}/components/global/C_Splitter/index.vue +2 -2
  56. package/files/{src → .wl-skills/src}/components/local/c_formModal/README.md +1 -1
  57. package/files/{src → .wl-skills/src}/components/local/c_formSections/README.md +2 -2
  58. package/files/{src → .wl-skills/src}/components/remote/BaseForm/README.md +2 -2
  59. package/files/{src → .wl-skills/src}/components/remote/BaseQuery/README.md +4 -4
  60. package/files/{src → .wl-skills/src}/components/remote/BaseTable/README.md +2 -2
  61. package/files/{src → .wl-skills/src}/components/remote/BaseToolbar/README.md +1 -1
  62. package/files/{.github → .wl-skills}/standards/02-code-structure.md +1 -1
  63. package/files/{.github → .wl-skills}/standards/08-git.md +1 -1
  64. package/files/{.github → .wl-skills}/standards/11-form-validation.md +1 -1
  65. package/files/{.github → .wl-skills}/standards/13-platform-components.md +15 -15
  66. package/files/{.github → .wl-skills}/standards/14-layout-containers.md +4 -4
  67. package/files/{.github → .wl-skills}/standards/index.md +1 -1
  68. package/files/{demo → .wl-skills/templates}/README.md +3 -3
  69. package/files/eslint.config.wl-skills.cjs +123 -0
  70. package/lib/ast-rules.js +769 -0
  71. package/lib/vite-plugin-wl-skills.js +97 -0
  72. package/mcp/tools/projectTools.js +17 -1
  73. package/package.json +19 -2
  74. /package/files/{docs → .wl-skills/docs}/jh-date-range.md +0 -0
  75. /package/files/{docs → .wl-skills/docs}/jh-date.md +0 -0
  76. /package/files/{docs → .wl-skills/docs}/jh-dept-picker.md +0 -0
  77. /package/files/{docs → .wl-skills/docs}/jh-drag-row.md +0 -0
  78. /package/files/{docs → .wl-skills/docs}/jh-file-upload.md +0 -0
  79. /package/files/{docs → .wl-skills/docs}/jh-picker.md +0 -0
  80. /package/files/{docs → .wl-skills/docs}/jh-select.md +0 -0
  81. /package/files/{docs → .wl-skills/docs}/jh-text.md +0 -0
  82. /package/files/{docs → .wl-skills/docs}/jh-textarea.md +0 -0
  83. /package/files/{docs → .wl-skills/docs}/jh-user-picker.md +0 -0
  84. /package/files/{docs → .wl-skills/docs}/mock-architecture.md +0 -0
  85. /package/files/{docs → .wl-skills/docs}/request.md +0 -0
  86. /package/files/{.github → .wl-skills}/reports/README.md +0 -0
  87. /package/files/{.github → .wl-skills}/reports/SYS_DICT_INFO.md +0 -0
  88. /package/files/{.github → .wl-skills}/reports//350/247/204/350/214/203/345/256/241/346/237/245/346/212/245/345/221/212.md" +0 -0
  89. /package/files/{.github → .wl-skills}/skills/_compat/headers/agents.txt +0 -0
  90. /package/files/{.github → .wl-skills}/skills/_compat/headers/claude-code.txt +0 -0
  91. /package/files/{.github → .wl-skills}/skills/_compat/headers/cline.txt +0 -0
  92. /package/files/{.github → .wl-skills}/skills/_compat/headers/cursor-rules.txt +0 -0
  93. /package/files/{.github → .wl-skills}/skills/_compat/headers/github-copilot.txt +0 -0
  94. /package/files/{.github → .wl-skills}/skills/_compat/headers/qoder.txt +0 -0
  95. /package/files/{.github → .wl-skills}/skills/_compat/headers/windsurf.txt +0 -0
  96. /package/files/{.github → .wl-skills}/skills/core/api-contract/SKILL.md +0 -0
  97. /package/files/{.github → .wl-skills}/skills/core/api-contract/USAGE.md +0 -0
  98. /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/_index.md +0 -0
  99. /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/domains/_CONTRIBUTING.md +0 -0
  100. /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/domains/produce/TPL-OPERATION-STATION.md +0 -0
  101. /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/domains/sale/README.md +0 -0
  102. /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-CHANGE-HISTORY.md +0 -0
  103. /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-LIST.md +0 -0
  104. /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-MASTER-DETAIL.md +0 -0
  105. /package/files/{.github → .wl-skills}/skills/domain/README.md +0 -0
  106. /package/files/{.github → .wl-skills}/skills/ops/code-fix/USAGE.md +0 -0
  107. /package/files/{.github → .wl-skills}/skills/sync/env.local.json +0 -0
  108. /package/files/{.github → .wl-skills}/skills/sync/menu-sync/env/env.local.json +0 -0
  109. /package/files/{src → .wl-skills/src}/components/global/C_ParentView/index.vue +0 -0
  110. /package/files/{src → .wl-skills/src}/components/global/C_RightToolbar/data.ts +0 -0
  111. /package/files/{src → .wl-skills/src}/components/global/C_RightToolbar/index.scss +0 -0
  112. /package/files/{src → .wl-skills/src}/components/global/C_RightToolbar/index.vue +0 -0
  113. /package/files/{src → .wl-skills/src}/components/global/C_Splitter/index.scss +0 -0
  114. /package/files/{src → .wl-skills/src}/components/global/C_SvgIcon/index.scss +0 -0
  115. /package/files/{src → .wl-skills/src}/components/global/C_SvgIcon/index.vue +0 -0
  116. /package/files/{src → .wl-skills/src}/components/global/C_SvgIcon/svgicon.js +0 -0
  117. /package/files/{src → .wl-skills/src}/components/global/C_TagStatus/README.md +0 -0
  118. /package/files/{src → .wl-skills/src}/components/global/C_TagStatus/config.ts +0 -0
  119. /package/files/{src → .wl-skills/src}/components/global/C_TagStatus/index.scss +0 -0
  120. /package/files/{src → .wl-skills/src}/components/global/C_TagStatus/index.vue +0 -0
  121. /package/files/{src → .wl-skills/src}/components/global/C_TagStatus/types.ts +0 -0
  122. /package/files/{src → .wl-skills/src}/components/global/C_Tree/README.md +0 -0
  123. /package/files/{src → .wl-skills/src}/components/global/C_Tree/data.ts +0 -0
  124. /package/files/{src → .wl-skills/src}/components/global/C_Tree/index.scss +0 -0
  125. /package/files/{src → .wl-skills/src}/components/global/C_Tree/index.vue +0 -0
  126. /package/files/{src → .wl-skills/src}/components/global/C_Tree/types.ts +0 -0
  127. /package/files/{src → .wl-skills/src}/components/local/c_formModal/data.ts +0 -0
  128. /package/files/{src → .wl-skills/src}/components/local/c_formModal/index.scss +0 -0
  129. /package/files/{src → .wl-skills/src}/components/local/c_formModal/index.vue +0 -0
  130. /package/files/{src → .wl-skills/src}/components/local/c_formSections/data.ts +0 -0
  131. /package/files/{src → .wl-skills/src}/components/local/c_formSections/index.scss +0 -0
  132. /package/files/{src → .wl-skills/src}/components/local/c_formSections/index.vue +0 -0
  133. /package/files/{src → .wl-skills/src}/components/local/c_listModal/data.ts +0 -0
  134. /package/files/{src → .wl-skills/src}/components/local/c_listModal/index.scss +0 -0
  135. /package/files/{src → .wl-skills/src}/components/local/c_listModal/index.vue +0 -0
  136. /package/files/{src → .wl-skills/src}/components/local/c_spliterTitle/index.scss +0 -0
  137. /package/files/{src → .wl-skills/src}/components/local/c_spliterTitle/index.vue +0 -0
  138. /package/files/{src → .wl-skills/src}/components/remote/AGGrid/README.md +0 -0
  139. /package/files/{src → .wl-skills/src}/types/page.ts +0 -0
  140. /package/files/{.github → .wl-skills}/standards/01-toolchain.md +0 -0
  141. /package/files/{.github → .wl-skills}/standards/03-comments.md +0 -0
  142. /package/files/{.github → .wl-skills}/standards/04-coding-basics.md +0 -0
  143. /package/files/{.github → .wl-skills}/standards/05-logging.md +0 -0
  144. /package/files/{.github → .wl-skills}/standards/06-security.md +0 -0
  145. /package/files/{.github → .wl-skills}/standards/07-config.md +0 -0
  146. /package/files/{.github → .wl-skills}/standards/09-typescript.md +0 -0
  147. /package/files/{.github → .wl-skills}/standards/10-pinia.md +0 -0
  148. /package/files/{.github → .wl-skills}/standards/12-base-table.md +0 -0
  149. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add/api.md +0 -0
  150. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add/data.ts +0 -0
  151. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add/index.scss +0 -0
  152. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add/index.vue +0 -0
  153. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add-form/data.ts +0 -0
  154. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add-form/index.scss +0 -0
  155. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add-form/index.vue +0 -0
  156. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change/data.ts +0 -0
  157. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change/index.scss +0 -0
  158. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change/index.vue +0 -0
  159. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-form/data.ts +0 -0
  160. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-form/index.scss +0 -0
  161. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-form/index.vue +0 -0
  162. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-history/data.ts +0 -0
  163. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-history/index.scss +0 -0
  164. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-history/index.vue +0 -0
  165. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-archive/api.md +0 -0
  166. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-archive/data.ts +0 -0
  167. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-archive/index.scss +0 -0
  168. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-archive/index.vue +0 -0
  169. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-detail/api.md +0 -0
  170. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-detail/data.ts +0 -0
  171. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-detail/index.scss +0 -0
  172. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-detail/index.vue +0 -0
  173. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-temp-customer-archive/api.md +0 -0
  174. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-temp-customer-archive/data.ts +0 -0
  175. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-temp-customer-archive/index.scss +0 -0
  176. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-temp-customer-archive/index.vue +0 -0
  177. /package/files/{demo → .wl-skills/templates}/sale/demo/add-demo/data.ts +0 -0
  178. /package/files/{demo → .wl-skills/templates}/sale/demo/add-demo/index.scss +0 -0
  179. /package/files/{demo → .wl-skills/templates}/sale/demo/add-demo/index.vue +0 -0
  180. /package/files/{demo → .wl-skills/templates}/sale/demo/billet-flame-cut-plan/data.ts +0 -0
  181. /package/files/{demo → .wl-skills/templates}/sale/demo/billet-flame-cut-plan/index.scss +0 -0
  182. /package/files/{demo → .wl-skills/templates}/sale/demo/billet-flame-cut-plan/index.vue +0 -0
  183. /package/files/{demo → .wl-skills/templates}/sale/demo/domestic-trade-order/data.ts +0 -0
  184. /package/files/{demo → .wl-skills/templates}/sale/demo/domestic-trade-order/index.scss +0 -0
  185. /package/files/{demo → .wl-skills/templates}/sale/demo/domestic-trade-order/index.vue +0 -0
  186. /package/files/{demo → .wl-skills/templates}/sale/demo/heat-batch-return/data.ts +0 -0
  187. /package/files/{demo → .wl-skills/templates}/sale/demo/heat-batch-return/index.scss +0 -0
  188. /package/files/{demo → .wl-skills/templates}/sale/demo/heat-batch-return/index.vue +0 -0
  189. /package/files/{demo → .wl-skills/templates}/sale/demo/heat-batch-return/meltDialog.vue +0 -0
  190. /package/files/{demo → .wl-skills/templates}/sale/demo/metallurgical-spec/data.ts +0 -0
  191. /package/files/{demo → .wl-skills/templates}/sale/demo/metallurgical-spec/index.scss +0 -0
  192. /package/files/{demo → .wl-skills/templates}/sale/demo/metallurgical-spec/index.vue +0 -0
@@ -7,13 +7,13 @@ description: "Use when: managing roles, authorizing menus to roles, attaching ac
7
7
 
8
8
  将系统的**角色 → 菜单授权 → 动作按钮 → `data.ts` 权限码字段**串成一条链路,覆盖从权限注册到代码落地的全流程。
9
9
 
10
- > **与 menu-sync / dict-sync 的关系**:完全对称,统一从 `.github/skills/sync/env.local.json` 读取配置。`menu-sync` 负责页面菜单(type=M/C),`permission-sync` 负责其上的角色与动作(type=A)。
10
+ > **与 menu-sync / dict-sync 的关系**:完全对称,统一从 `.wl-skills/skills/sync/env.local.json` 读取配置。`menu-sync` 负责页面菜单(type=M/C),`permission-sync` 负责其上的角色与动作(type=A)。
11
11
 
12
12
  ---
13
13
 
14
14
  ## 配置(统一配置文件,复用 menu-sync 的配置)
15
15
 
16
- 读取 `.github/skills/sync/env.local.json`:
16
+ 读取 `.wl-skills/skills/sync/env.local.json`:
17
17
 
18
18
  ```json
19
19
  {
@@ -231,7 +231,7 @@ permission-sync 通过 6 个 MCP 工具完成所有操作(无需手动 fetch
231
231
 
232
232
  ## 8. 报告输出(reports/PERMISSION_SYNC_<日期>.md)
233
233
 
234
- 每次执行在 `.github/reports/PERMISSION_SYNC_YYYYMMDD.md` 追加:模式(role-manage/role-assign/action-attach)、变更摘要(新增/已存在/失败)、data.ts 修改行位置、回滚提示。
234
+ 每次执行在 `.wl-skills/reports/PERMISSION_SYNC_YYYYMMDD.md` 追加:模式(role-manage/role-assign/action-attach)、变更摘要(新增/已存在/失败)、data.ts 修改行位置、回滚提示。
235
235
 
236
236
  ---
237
237
 
@@ -94,7 +94,7 @@ AI : [触发 permission-sync]
94
94
 
95
95
  ## 配置要点
96
96
 
97
- 只需 `.github/skills/sync/env.local.json` 的根字段:
97
+ 只需 `.wl-skills/skills/sync/env.local.json` 的根字段:
98
98
 
99
99
  ```json
100
100
  {
@@ -28,14 +28,14 @@ import { ref, reactive, onMounted, useSlots, onUnmounted } from "vue";
28
28
  // 上下分栈 → <jh-drag-row :topHeight="200"> #top / #bottom </jh-drag-row>
29
29
  // 原因:C_Splitter 在 onMounted 中调用 slots.default() 冻结 vnode 快照,
30
30
  // 导致子树响应式绑定(v-if / v-show / 插值)与父组件 ref 完全解耦,
31
- // ref 赋值不触发重渲染。详见 .github/standards/14-layout-containers.md
31
+ // ref 赋值不触发重渲染。详见 .wl-skills/standards/14-layout-containers.md
32
32
  if (typeof window !== "undefined" && !window.__C_SPLITTER_WARNED__) {
33
33
  window.__C_SPLITTER_WARNED__ = true;
34
34
  // eslint-disable-next-line no-console
35
35
  console.warn(
36
36
  "[C_Splitter 已废弃] 已检测到 C_Splitter 使用。请改用 jh-drag-col / jh-drag-row。\n" +
37
37
  "原因:slots.default() 被冻结为 vnode 快照,导致子树响应式失效。\n" +
38
- "详见:.github/standards/14-layout-containers.md"
38
+ "详见:.wl-skills/standards/14-layout-containers.md"
39
39
  );
40
40
  }
41
41
 
@@ -32,7 +32,7 @@ c_formModal/
32
32
 
33
33
  ```typescript
34
34
  // src/views/your-module/data.ts
35
- import type { BaseFormItemDesc } from "@jhlc/common-core/src/components/form/common/type";
35
+ import type { BaseFormItemDesc } from "@jhlc/common-core/.wl-skills/src/components/form/common/type";
36
36
 
37
37
  export const modalConfig = {
38
38
  titlePrefix: "内贸订单", // 标题前缀
@@ -462,7 +462,7 @@ const defaultForm = generateDefaultFormData(sectionsConfig);
462
462
 
463
463
  ### 新增编辑页示例
464
464
 
465
- **路径**: `src/views/sale/demo/add-demo/`
465
+ **路径**: `src/views/sale/.wl-skills/templates/add-.wl-skills/templates/`
466
466
 
467
467
  **特性**:
468
468
 
@@ -485,7 +485,7 @@ const defaultForm = generateDefaultFormData(sectionsConfig);
485
485
  **关键代码结构**:
486
486
 
487
487
  ```
488
- add-demo/
488
+ add-.wl-skills/templates/
489
489
  ├── index.vue # 视图层(176行)- 组件使用和布局
490
490
  ├── data.ts # 逻辑层(400+行)- 配置和业务逻辑
491
491
  ├── index.scss # 样式层(207行)- 页面样式
@@ -11,7 +11,7 @@ BaseForm 是一个功能强大的表单组件,支持多列布局、数据验
11
11
  // 直接使用 <BaseForm /> 即可
12
12
 
13
13
  // 类型导入
14
- import type { BaseFormItemDesc } from "@jhlc/common-core/src/components/form/common/type";
14
+ import type { BaseFormItemDesc } from "@jhlc/common-core/.wl-skills/src/components/form/common/type";
15
15
  ```
16
16
 
17
17
  ## 🚀 基本用法
@@ -341,7 +341,7 @@ import { h } from "vue";
341
341
 
342
342
  <script setup lang="ts">
343
343
  import { ref, reactive, computed } from "vue";
344
- import type { BaseFormItemDesc } from "@jhlc/common-core/src/components/form/common/type";
344
+ import type { BaseFormItemDesc } from "@jhlc/common-core/.wl-skills/src/components/form/common/type";
345
345
 
346
346
  const formRef = ref();
347
347
 
@@ -11,7 +11,7 @@ BaseQuery 是一个功能强大的查询条件组件,支持多列布局、条
11
11
  // 直接使用 <BaseQuery /> 即可
12
12
 
13
13
  // 类型导入
14
- import type { BaseQueryItemDesc } from "@jhlc/common-core/src/components/form/base-query/type";
14
+ import type { BaseQueryItemDesc } from "@jhlc/common-core/.wl-skills/src/components/form/base-query/type";
15
15
  ```
16
16
 
17
17
  ## 🚀 基本用法
@@ -369,7 +369,7 @@ interface BaseQueryItemDesc<T = any> {
369
369
 
370
370
  <script setup lang="ts">
371
371
  import { ref, reactive, computed, onMounted } from "vue";
372
- import type { BaseQueryItemDesc } from "@jhlc/common-core/src/components/form/base-query/type";
372
+ import type { BaseQueryItemDesc } from "@jhlc/common-core/.wl-skills/src/components/form/base-query/type";
373
373
 
374
374
  const queryRef = ref();
375
375
 
@@ -546,7 +546,7 @@ BaseQuery 支持复杂的联动查询场景,通过 `customProps`、`disabled`
546
546
 
547
547
  <script setup lang="ts">
548
548
  import { reactive, computed } from "vue";
549
- import type { BaseQueryItemDesc } from "@jhlc/common-core/src/components/form/base-query/type";
549
+ import type { BaseQueryItemDesc } from "@jhlc/common-core/.wl-skills/src/components/form/base-query/type";
550
550
 
551
551
  // 省市区数据
552
552
  const regionOptions = [
@@ -607,7 +607,7 @@ const handleSearch = () => {
607
607
 
608
608
  <script setup lang="ts">
609
609
  import { ref, reactive, computed } from "vue";
610
- import type { BaseQueryItemDesc } from "@jhlc/common-core/src/components/form/base-query/type";
610
+ import type { BaseQueryItemDesc } from "@jhlc/common-core/.wl-skills/src/components/form/base-query/type";
611
611
  import request from "@/utils/request";
612
612
 
613
613
  // 动态选项数据
@@ -11,7 +11,7 @@ BaseTable 是一个功能强大的表格组件,支持数据展示、排序、
11
11
  // 直接使用 <BaseTable /> 即可
12
12
 
13
13
  // 类型导入
14
- import type { TableColumnDesc } from "@jhlc/common-core/src/components/table/base-table/type";
14
+ import type { TableColumnDesc } from "@jhlc/common-core/.wl-skills/src/components/table/base-table/type";
15
15
  ```
16
16
 
17
17
  ## 🚀 基本用法
@@ -708,7 +708,7 @@ interface TableRowOperation {
708
708
 
709
709
  <script setup lang="ts">
710
710
  import { ref, computed, onMounted, h } from "vue";
711
- import type { TableColumnDesc } from "@jhlc/common-core/src/components/table/base-table/type";
711
+ import type { TableColumnDesc } from "@jhlc/common-core/.wl-skills/src/components/table/base-table/type";
712
712
 
713
713
  const tableRef = ref();
714
714
  const list = ref([]);
@@ -11,7 +11,7 @@ BaseToolbar 是一个灵活的工具栏组件,用于放置操作按钮,支
11
11
  // 直接使用 <BaseToolbar /> 即可
12
12
 
13
13
  // 类型导入
14
- import type { ActionButtonDesc, ActionType } from "@jhlc/common-core/src/components/toolbar/type";
14
+ import type { ActionButtonDesc, ActionType } from "@jhlc/common-core/.wl-skills/src/components/toolbar/type";
15
15
  ```
16
16
 
17
17
  ## 🚀 基本用法
@@ -50,7 +50,7 @@ src/views/[域]/[模块]/[子模块]/[kebab-case目录]/
50
50
 
51
51
  | 场景 | 位置 |
52
52
  | ----------------------- | ------------------------------------ |
53
- | 通用弹窗(2+ 页面复用) | `src/components/local/c_xxxModal/` |
53
+ | 通用弹窗(2+ 页面复用) | `.wl-skills/src/components/local/c_xxxModal/` |
54
54
  | 极个性弹窗(仅单页面) | 页面目录下 `components/xxxModal.vue` |
55
55
 
56
56
  ---
@@ -11,7 +11,7 @@
11
11
  feat/xxx 新功能
12
12
  fix/xxx Bug 修复
13
13
  refactor/xxx 重构
14
- docs/xxx 文档更新
14
+ .wl-skills/docs/xxx 文档更新
15
15
  chore/xxx 构建/工具变更
16
16
  perf/xxx 性能优化
17
17
  test/xxx 测试相关
@@ -14,7 +14,7 @@ open → 数据回填 → validate → submit → close / resetFields
14
14
 
15
15
  ✅ AI 直接按组件文档使用即可,**不需要重复写 validate / resetFields 逻辑**。
16
16
 
17
- 参考:`src/components/local/c_formModal/README.md`
17
+ 参考:`.wl-skills/src/components/local/c_formModal/README.md`
18
18
 
19
19
  ---
20
20
 
@@ -53,25 +53,25 @@ BaseQuery → BaseToolbar → BaseTable → jh-pagination
53
53
 
54
54
  ---
55
55
 
56
- ## docs/ 文档前置读取清单
56
+ ## .wl-skills/docs/ 文档前置读取清单
57
57
 
58
58
  生成涉及以下场景的代码时,AI 必须先读取对应文档(按需,不全读):
59
59
 
60
60
  | 涉及组件 / 模式 | 必读文档 |
61
61
  | --------------------------- | --------------------------------------------- |
62
- | `jh-date` / `jh-date-range` | `docs/jh-date.md` / `docs/jh-date-range.md` |
63
- | `jh-file-upload` | `docs/jh-file-upload.md` |
64
- | `jh-user-picker` | `docs/jh-user-picker.md` |
65
- | `jh-dept-picker` | `docs/jh-dept-picker.md` |
66
- | `jh-select` | `docs/jh-select.md` |
67
- | `jh-picker` | `docs/jh-picker.md` |
68
- | `jh-text` | `docs/jh-text.md` |
69
- | `jh-pagination` | `docs/jh-pagination.md` |
70
- | `jh-drag-row` | `docs/jh-drag-row.md` |
71
- | HTTP 请求方式 | `docs/request.md` |
72
- | 页面 Hook 模式 | `docs/page-query-hook-best-practices.md` |
73
- | BaseQuery / BaseTable 等 | `src/components/remote/{Component}/README.md` |
74
- | c_formModal / c_listModal | `src/components/local/{component}/README.md` |
62
+ | `jh-date` / `jh-date-range` | `.wl-skills/docs/jh-date.md` / `.wl-skills/docs/jh-date-range.md` |
63
+ | `jh-file-upload` | `.wl-skills/docs/jh-file-upload.md` |
64
+ | `jh-user-picker` | `.wl-skills/docs/jh-user-picker.md` |
65
+ | `jh-dept-picker` | `.wl-skills/docs/jh-dept-picker.md` |
66
+ | `jh-select` | `.wl-skills/docs/jh-select.md` |
67
+ | `jh-picker` | `.wl-skills/docs/jh-picker.md` |
68
+ | `jh-text` | `.wl-skills/docs/jh-text.md` |
69
+ | `jh-pagination` | `.wl-skills/docs/jh-pagination.md` |
70
+ | `jh-drag-row` | `.wl-skills/docs/jh-drag-row.md` |
71
+ | HTTP 请求方式 | `.wl-skills/docs/request.md` |
72
+ | 页面 Hook 模式 | `.wl-skills/docs/page-query-hook-best-practices.md` |
73
+ | BaseQuery / BaseTable 等 | `.wl-skills/src/components/remote/{Component}/README.md` |
74
+ | c_formModal / c_listModal | `.wl-skills/src/components/local/{component}/README.md` |
75
75
 
76
76
  > AI 在 Pre-flight 声明中明确列出已读文档。
77
77
 
@@ -120,4 +120,4 @@ export function createPage() {
120
120
  - [ ] 日期组件用了 jh-date 系列,没有用 el-date-picker?
121
121
  - [ ] HTTP 请求都走 `this.getAction / postAction`,没有 import axios?
122
122
  - [ ] data.ts 继承了 AbstractPageQueryHook?
123
- - [ ] 涉及 jh-_ 组件时已读取对应 docs/jh-_.md?
123
+ - [ ] 涉及 jh-_ 组件时已读取对应 .wl-skills/docs/jh-_.md?
@@ -20,7 +20,7 @@
20
20
 
21
21
  ## 2. C_Splitter 为什么必须废弃(根因)
22
22
 
23
- `src/components/global/C_Splitter/index.vue` 内部实现:
23
+ `.wl-skills/src/components/global/C_Splitter/index.vue` 内部实现:
24
24
 
25
25
  ```js
26
26
  onMounted(() => {
@@ -99,7 +99,7 @@ onMounted(() => {
99
99
  若现存项目仍引用 `C_Splitter`:
100
100
 
101
101
  1. **当前版本**:保留组件文件,在 `onMounted` 顶部加 `console.warn("[C_Splitter 已废弃] ...")` 提示
102
- 2. **下一版本**:删除 `src/components/global/C_Splitter/`,全量替换为 `jh-drag-col/row`
102
+ 2. **下一版本**:删除 `.wl-skills/src/components/global/C_Splitter/`,全量替换为 `jh-drag-col/row`
103
103
  3. **lint 规则**:`wl-skills validate` / `wl-skills doctor-ui` 命中 `import C_Splitter` 或 `<C_Splitter` 时报 ERROR
104
104
 
105
105
  ---
@@ -148,7 +148,7 @@ done
148
148
  不会。`jh-drag-col` / `jh-drag-row` 都是直接 `<slot />`,没有 vnode 缓存或额外 watcher,嵌套层数与原生 div 等价。
149
149
 
150
150
  **Q4:必须保留 `C_Splitter` 组件文件吗?**
151
- 保留一段过渡期(带 deprecation warning)即可。等仓库扫描 0 命中后,下一个大版本直接删除 `src/components/global/C_Splitter/`。
151
+ 保留一段过渡期(带 deprecation warning)即可。等仓库扫描 0 命中后,下一个大版本直接删除 `.wl-skills/src/components/global/C_Splitter/`。
152
152
 
153
153
  ---
154
154
 
@@ -156,4 +156,4 @@ done
156
156
 
157
157
  - `12-base-table.md` — BaseTable 内部高度撑满依赖父容器有明确高度,jh-drag-col/row 已正确给子区设 `height: 100%`
158
158
  - `13-platform-components.md` — 平台组件对照表已同步移除 C_Splitter
159
- - 真实场景案例:`demo/produce/aiflow/mmwr-customer-detail/`(master-detail 使用 jh-drag-row)
159
+ - 真实场景案例:`.wl-skills/templates/produce/aiflow/mmwr-customer-detail/`(master-detail 使用 jh-drag-row)
@@ -47,7 +47,7 @@
47
47
  ### 任务类型 C:规范审计(convention-audit)
48
48
 
49
49
  ```
50
- 必读:全部 13 条(审计需要完整对照)
50
+ 必读:全部 14 条(审计需要完整对照)
51
51
  ```
52
52
 
53
53
  ### 任务类型 D:模板提取(template-extract)
@@ -18,13 +18,13 @@
18
18
  | `mmwr-customer-apply-change-history/` | CHANGE_HISTORY | 客户变更历史比对 |
19
19
  | `mmwr-customer-detail/` | DETAIL_TABS | 客户详情(多 Tab) |
20
20
 
21
- ## sale/demo/ — 销售域(平台默认样例,5 个页面)
21
+ ## sale/.wl-skills/templates/ — 销售域(平台默认样例,5 个页面)
22
22
 
23
23
  | 目录 | 模板类型 | 说明 |
24
24
  | ------------------------ | ------------- | -------------------------------- |
25
25
  | `domestic-trade-order/` | LIST | 标准内贸订单列表 |
26
26
  | `metallurgical-spec/` | MASTER_DETAIL | 冶金规范(jh-drag-row 上下分栏) |
27
- | `add-demo/` | FORM_ROUTE | 新增表单演示(c_formSections) |
27
+ | `add-.wl-skills/templates/` | FORM_ROUTE | 新增表单演示(c_formSections) |
28
28
  | `billet-flame-cut-plan/` | LIST | 坯料火焰切割计划列表 |
29
29
  | `heat-batch-return/` | LIST + Modal | 炉批退判(含自定义弹窗) |
30
30
 
@@ -41,4 +41,4 @@
41
41
 
42
42
  ## 贡献
43
43
 
44
- 新增样例请放在 `demo/{domain}/{submodule}/{page-name}/`,提 PR 到 wl-skills-kit 仓库。
44
+ 新增样例请放在 `.wl-skills/templates/{domain}/{submodule}/{page-name}/`,提 PR 到 wl-skills-kit 仓库。
@@ -0,0 +1,123 @@
1
+ /**
2
+ * ESLint Flat Config 模板 — wl-skills-kit 生成
3
+ *
4
+ * init/update 时复制到业务项目根目录作为 eslint.config.cjs
5
+ * 适用于 Vue 3 + TypeScript 项目,与 wl-skills validate 的规则互补:
6
+ * - validate 负责"架构级"约束(页面结构、组件使用、AST 语义)
7
+ * - ESLint 负责"代码级"约束(语法质量、安全、未使用变量、属性顺序)
8
+ *
9
+ * 对齐 wl-skills-kit 14 条 standards:
10
+ * 04 编码基础: eslint:recommended → no-var / prefer-const / no-redeclare / curly / no-restricted-syntax
11
+ * 05 日志: no-console (warn)
12
+ * 06 安全: vue/no-v-html (warn), no-eval, no-new-func
13
+ * 09 TS 质量: @typescript-eslint/recommended
14
+ * 13 组件: vue/attributes-order, vue/no-unused-components
15
+ *
16
+ * 依赖(业务项目需安装):
17
+ * pnpm add -D eslint eslint-plugin-vue @typescript-eslint/parser @typescript-eslint/eslint-plugin vue-eslint-parser
18
+ */
19
+
20
+ const pluginVue = require("eslint-plugin-vue");
21
+ const vueParser = require("vue-eslint-parser");
22
+ const tsParser = require("@typescript-eslint/parser");
23
+ const tsPlugin = require("@typescript-eslint/eslint-plugin");
24
+
25
+ module.exports = [
26
+ {
27
+ ignores: [
28
+ "**/dist/**",
29
+ "**/node_modules/**",
30
+ "**/coverage/**",
31
+ "**/*.d.ts",
32
+ "src/auto-imports.d.ts",
33
+ "src/components.d.ts",
34
+ "src/env.d.ts",
35
+ "vite/**/*",
36
+ "scripts/**/*",
37
+ "mock/**/*",
38
+ "demo/**/*",
39
+ ".github/**/*",
40
+ ],
41
+ },
42
+
43
+ // ── JS 基础规则(standard 04: no-var / prefer-const / no-redeclare / curly 等)
44
+ // eslint:recommended 提供 no-var, prefer-const, no-redeclare, no-cond-assign, no-debugger, no-dupe-keys 等
45
+ {
46
+ rules: {
47
+ "no-var": "error",
48
+ "prefer-const": "error",
49
+ "no-redeclare": "error",
50
+ "no-cond-assign": "error",
51
+ "no-debugger": "error",
52
+ "no-dupe-keys": "error",
53
+ "no-duplicate-case": "error",
54
+ "no-empty": "warn",
55
+ "no-irregular-whitespace": "warn",
56
+ "no-sparse-arrays": "warn",
57
+ "no-unreachable": "error",
58
+ "use-isnan": "error",
59
+ "valid-typeof": "error",
60
+ "no-fallthrough": "error",
61
+ "curly": ["warn", "multi-line"],
62
+ },
63
+ },
64
+
65
+ // ── 安全规则(standard 06: eval / new Function / v-html)
66
+ {
67
+ rules: {
68
+ "no-eval": "error",
69
+ "no-implied-eval": "error",
70
+ "no-new-func": "error",
71
+ "no-script-url": "error",
72
+ },
73
+ },
74
+
75
+ // Vue 3 essential rules
76
+ ...pluginVue.configs["flat/essential"],
77
+
78
+ // TypeScript: parser + recommended rules
79
+ {
80
+ files: ["**/*.{ts,tsx,vue}"],
81
+ languageOptions: {
82
+ parser: vueParser,
83
+ parserOptions: {
84
+ parser: tsParser,
85
+ ecmaVersion: 2020,
86
+ sourceType: "module",
87
+ extraFileExtensions: [".vue"],
88
+ },
89
+ },
90
+ plugins: {
91
+ "@typescript-eslint": tsPlugin,
92
+ },
93
+ rules: {
94
+ ...tsPlugin.configs.recommended.rules,
95
+ },
96
+ },
97
+
98
+ // ── 项目专属规则(与 wl-skills-kit 14 条 standards 精确对齐)
99
+ {
100
+ rules: {
101
+ // 09 TS: strict: false 项目允许 any,但标记未使用变量
102
+ "no-undef": "off",
103
+ "no-unused-vars": "off",
104
+ "@typescript-eslint/no-explicit-any": "off",
105
+ "@typescript-eslint/no-unused-vars": [
106
+ "warn",
107
+ { argsIgnorePattern: "^_", varsIgnorePattern: "^_" },
108
+ ],
109
+
110
+ // 05 日志: console.log 残留(允许 warn/error)
111
+ "no-console": ["warn", { allow: ["warn", "error"] }],
112
+
113
+ // 06 安全: v-html 必须有注释说明(warn 级,让开发者留意)
114
+ "vue/no-v-html": "warn",
115
+
116
+ // Vue 组件质量
117
+ "vue/multi-word-component-names": ["error", { ignores: ["index"] }],
118
+ "vue/require-default-prop": "off",
119
+ "vue/attributes-order": "warn",
120
+ "vue/no-unused-components": "warn",
121
+ },
122
+ },
123
+ ];