@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.
- package/CHANGELOG.md +35 -0
- package/README.md +7 -7
- package/bin/wl-skills.js +418 -29
- package/files/.github/copilot-instructions.md +24 -369
- package/files/.wl-skills/copilot-instructions-full.md +233 -0
- package/files/{docs → .wl-skills/docs}/jh-pagination.md +2 -2
- package/files/{docs → .wl-skills/docs}/page-query-hook-best-practices.md +3 -3
- package/files/{.github → .wl-skills}/guides/README.md +1 -1
- package/files/{.github → .wl-skills}/guides/architecture.md +5 -5
- package/files/{.github → .wl-skills}/guides/mcp-setup.md +1 -1
- package/files/{.github → .wl-skills}/guides/usage.md +8 -8
- package/files/{.github → .wl-skills}/reports/SYS_MENU_INFO.md +1 -1
- package/files/{.github → .wl-skills}/reports/SYS_PERMISSION_INFO.md +1 -1
- 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
- package/files/{.github → .wl-skills}/skills/_best-practices.md +20 -7
- package/files/{.github → .wl-skills}/skills/_compat/README.md +1 -1
- package/files/{.github → .wl-skills}/skills/_compat/editors.json +1 -1
- package/files/{.github → .wl-skills}/skills/_compat/headers/cursor-mdc.txt +1 -1
- package/files/{.github → .wl-skills}/skills/_compat/headers/kiro.txt +1 -1
- package/files/{.github → .wl-skills}/skills/_compat/headers/trae.txt +1 -1
- package/files/{.github → .wl-skills}/skills/_pipeline.md +23 -11
- package/files/{.github → .wl-skills}/skills/_registry.md +10 -4
- package/files/{.github → .wl-skills}/skills/core/business-doc-extract/SKILL.md +27 -27
- package/files/{.github → .wl-skills}/skills/core/business-doc-extract/USAGE.md +22 -22
- package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/business-index.md +1 -1
- package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/business-open-questions.md +1 -1
- package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/module-dictionary.md +1 -1
- package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/module-field.md +1 -1
- package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/module-index.md +2 -2
- package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/module-requirement.md +2 -2
- package/files/{.github → .wl-skills}/skills/core/convention-audit/SKILL.md +52 -7
- package/files/{.github → .wl-skills}/skills/core/convention-audit/USAGE.md +1 -1
- package/files/{.github → .wl-skills}/skills/core/page-codegen/SKILL.md +33 -13
- package/files/{.github → .wl-skills}/skills/core/page-codegen/USAGE.md +1 -1
- package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-DETAIL-TABS.md +7 -7
- package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-DRIVEN.md +5 -5
- package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-FORM-ROUTE.md +2 -2
- package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-RECORD-FORM.md +1 -1
- package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-TREE-LIST.md +1 -1
- package/files/{.github → .wl-skills}/skills/core/prototype-scan/SKILL.md +11 -11
- package/files/{.github → .wl-skills}/skills/core/prototype-scan/USAGE.md +3 -3
- package/files/{.github → .wl-skills}/skills/core/spec-doc-parse/SKILL.md +9 -9
- package/files/{.github → .wl-skills}/skills/core/spec-doc-parse/USAGE.md +6 -6
- package/files/{.github → .wl-skills}/skills/core/template-extract/SKILL.md +1 -1
- package/files/{.github → .wl-skills}/skills/core/template-extract/USAGE.md +1 -1
- package/files/{.github → .wl-skills}/skills/ops/code-fix/SKILL.md +135 -96
- package/files/{.github → .wl-skills}/skills/sync/_mcp-guardrail.md +3 -3
- package/files/{.github → .wl-skills}/skills/sync/dict-sync/SKILL.md +5 -5
- package/files/{.github → .wl-skills}/skills/sync/dict-sync/USAGE.md +2 -2
- package/files/{.github → .wl-skills}/skills/sync/menu-sync/SKILL.md +6 -6
- package/files/{.github → .wl-skills}/skills/sync/menu-sync/USAGE.md +3 -3
- package/files/{.github → .wl-skills}/skills/sync/menu-sync/env/guide.md +2 -2
- package/files/{.github → .wl-skills}/skills/sync/permission-sync/SKILL.md +3 -3
- package/files/{.github → .wl-skills}/skills/sync/permission-sync/USAGE.md +1 -1
- package/files/{src → .wl-skills/src}/components/global/C_Splitter/index.vue +2 -2
- package/files/{src → .wl-skills/src}/components/local/c_formModal/README.md +1 -1
- package/files/{src → .wl-skills/src}/components/local/c_formSections/README.md +2 -2
- package/files/{src → .wl-skills/src}/components/remote/BaseForm/README.md +2 -2
- package/files/{src → .wl-skills/src}/components/remote/BaseQuery/README.md +4 -4
- package/files/{src → .wl-skills/src}/components/remote/BaseTable/README.md +2 -2
- package/files/{src → .wl-skills/src}/components/remote/BaseToolbar/README.md +1 -1
- package/files/{.github → .wl-skills}/standards/02-code-structure.md +1 -1
- package/files/{.github → .wl-skills}/standards/08-git.md +1 -1
- package/files/{.github → .wl-skills}/standards/11-form-validation.md +1 -1
- package/files/{.github → .wl-skills}/standards/13-platform-components.md +15 -15
- package/files/{.github → .wl-skills}/standards/14-layout-containers.md +4 -4
- package/files/{.github → .wl-skills}/standards/index.md +1 -1
- package/files/{demo → .wl-skills/templates}/README.md +3 -3
- package/files/eslint.config.wl-skills.cjs +123 -0
- package/lib/ast-rules.js +769 -0
- package/lib/vite-plugin-wl-skills.js +97 -0
- package/mcp/tools/projectTools.js +17 -1
- package/package.json +19 -2
- /package/files/{docs → .wl-skills/docs}/jh-date-range.md +0 -0
- /package/files/{docs → .wl-skills/docs}/jh-date.md +0 -0
- /package/files/{docs → .wl-skills/docs}/jh-dept-picker.md +0 -0
- /package/files/{docs → .wl-skills/docs}/jh-drag-row.md +0 -0
- /package/files/{docs → .wl-skills/docs}/jh-file-upload.md +0 -0
- /package/files/{docs → .wl-skills/docs}/jh-picker.md +0 -0
- /package/files/{docs → .wl-skills/docs}/jh-select.md +0 -0
- /package/files/{docs → .wl-skills/docs}/jh-text.md +0 -0
- /package/files/{docs → .wl-skills/docs}/jh-textarea.md +0 -0
- /package/files/{docs → .wl-skills/docs}/jh-user-picker.md +0 -0
- /package/files/{docs → .wl-skills/docs}/mock-architecture.md +0 -0
- /package/files/{docs → .wl-skills/docs}/request.md +0 -0
- /package/files/{.github → .wl-skills}/reports/README.md +0 -0
- /package/files/{.github → .wl-skills}/reports/SYS_DICT_INFO.md +0 -0
- /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
- /package/files/{.github → .wl-skills}/skills/_compat/headers/agents.txt +0 -0
- /package/files/{.github → .wl-skills}/skills/_compat/headers/claude-code.txt +0 -0
- /package/files/{.github → .wl-skills}/skills/_compat/headers/cline.txt +0 -0
- /package/files/{.github → .wl-skills}/skills/_compat/headers/cursor-rules.txt +0 -0
- /package/files/{.github → .wl-skills}/skills/_compat/headers/github-copilot.txt +0 -0
- /package/files/{.github → .wl-skills}/skills/_compat/headers/qoder.txt +0 -0
- /package/files/{.github → .wl-skills}/skills/_compat/headers/windsurf.txt +0 -0
- /package/files/{.github → .wl-skills}/skills/core/api-contract/SKILL.md +0 -0
- /package/files/{.github → .wl-skills}/skills/core/api-contract/USAGE.md +0 -0
- /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/_index.md +0 -0
- /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/domains/_CONTRIBUTING.md +0 -0
- /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/domains/produce/TPL-OPERATION-STATION.md +0 -0
- /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/domains/sale/README.md +0 -0
- /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-CHANGE-HISTORY.md +0 -0
- /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-LIST.md +0 -0
- /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-MASTER-DETAIL.md +0 -0
- /package/files/{.github → .wl-skills}/skills/domain/README.md +0 -0
- /package/files/{.github → .wl-skills}/skills/ops/code-fix/USAGE.md +0 -0
- /package/files/{.github → .wl-skills}/skills/sync/env.local.json +0 -0
- /package/files/{.github → .wl-skills}/skills/sync/menu-sync/env/env.local.json +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_ParentView/index.vue +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_RightToolbar/data.ts +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_RightToolbar/index.scss +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_RightToolbar/index.vue +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_Splitter/index.scss +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_SvgIcon/index.scss +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_SvgIcon/index.vue +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_SvgIcon/svgicon.js +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_TagStatus/README.md +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_TagStatus/config.ts +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_TagStatus/index.scss +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_TagStatus/index.vue +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_TagStatus/types.ts +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_Tree/README.md +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_Tree/data.ts +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_Tree/index.scss +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_Tree/index.vue +0 -0
- /package/files/{src → .wl-skills/src}/components/global/C_Tree/types.ts +0 -0
- /package/files/{src → .wl-skills/src}/components/local/c_formModal/data.ts +0 -0
- /package/files/{src → .wl-skills/src}/components/local/c_formModal/index.scss +0 -0
- /package/files/{src → .wl-skills/src}/components/local/c_formModal/index.vue +0 -0
- /package/files/{src → .wl-skills/src}/components/local/c_formSections/data.ts +0 -0
- /package/files/{src → .wl-skills/src}/components/local/c_formSections/index.scss +0 -0
- /package/files/{src → .wl-skills/src}/components/local/c_formSections/index.vue +0 -0
- /package/files/{src → .wl-skills/src}/components/local/c_listModal/data.ts +0 -0
- /package/files/{src → .wl-skills/src}/components/local/c_listModal/index.scss +0 -0
- /package/files/{src → .wl-skills/src}/components/local/c_listModal/index.vue +0 -0
- /package/files/{src → .wl-skills/src}/components/local/c_spliterTitle/index.scss +0 -0
- /package/files/{src → .wl-skills/src}/components/local/c_spliterTitle/index.vue +0 -0
- /package/files/{src → .wl-skills/src}/components/remote/AGGrid/README.md +0 -0
- /package/files/{src → .wl-skills/src}/types/page.ts +0 -0
- /package/files/{.github → .wl-skills}/standards/01-toolchain.md +0 -0
- /package/files/{.github → .wl-skills}/standards/03-comments.md +0 -0
- /package/files/{.github → .wl-skills}/standards/04-coding-basics.md +0 -0
- /package/files/{.github → .wl-skills}/standards/05-logging.md +0 -0
- /package/files/{.github → .wl-skills}/standards/06-security.md +0 -0
- /package/files/{.github → .wl-skills}/standards/07-config.md +0 -0
- /package/files/{.github → .wl-skills}/standards/09-typescript.md +0 -0
- /package/files/{.github → .wl-skills}/standards/10-pinia.md +0 -0
- /package/files/{.github → .wl-skills}/standards/12-base-table.md +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add/api.md +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add/data.ts +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add/index.scss +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add/index.vue +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add-form/data.ts +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add-form/index.scss +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add-form/index.vue +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change/data.ts +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change/index.scss +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change/index.vue +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-form/data.ts +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-form/index.scss +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-form/index.vue +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-history/data.ts +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-history/index.scss +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-history/index.vue +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-archive/api.md +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-archive/data.ts +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-archive/index.scss +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-archive/index.vue +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-detail/api.md +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-detail/data.ts +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-detail/index.scss +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-detail/index.vue +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-temp-customer-archive/api.md +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-temp-customer-archive/data.ts +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-temp-customer-archive/index.scss +0 -0
- /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-temp-customer-archive/index.vue +0 -0
- /package/files/{demo → .wl-skills/templates}/sale/demo/add-demo/data.ts +0 -0
- /package/files/{demo → .wl-skills/templates}/sale/demo/add-demo/index.scss +0 -0
- /package/files/{demo → .wl-skills/templates}/sale/demo/add-demo/index.vue +0 -0
- /package/files/{demo → .wl-skills/templates}/sale/demo/billet-flame-cut-plan/data.ts +0 -0
- /package/files/{demo → .wl-skills/templates}/sale/demo/billet-flame-cut-plan/index.scss +0 -0
- /package/files/{demo → .wl-skills/templates}/sale/demo/billet-flame-cut-plan/index.vue +0 -0
- /package/files/{demo → .wl-skills/templates}/sale/demo/domestic-trade-order/data.ts +0 -0
- /package/files/{demo → .wl-skills/templates}/sale/demo/domestic-trade-order/index.scss +0 -0
- /package/files/{demo → .wl-skills/templates}/sale/demo/domestic-trade-order/index.vue +0 -0
- /package/files/{demo → .wl-skills/templates}/sale/demo/heat-batch-return/data.ts +0 -0
- /package/files/{demo → .wl-skills/templates}/sale/demo/heat-batch-return/index.scss +0 -0
- /package/files/{demo → .wl-skills/templates}/sale/demo/heat-batch-return/index.vue +0 -0
- /package/files/{demo → .wl-skills/templates}/sale/demo/heat-batch-return/meltDialog.vue +0 -0
- /package/files/{demo → .wl-skills/templates}/sale/demo/metallurgical-spec/data.ts +0 -0
- /package/files/{demo → .wl-skills/templates}/sale/demo/metallurgical-spec/index.scss +0 -0
- /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 的关系**:完全对称,统一从 `.
|
|
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
|
-
读取 `.
|
|
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
|
-
每次执行在 `.
|
|
234
|
+
每次执行在 `.wl-skills/reports/PERMISSION_SYNC_YYYYMMDD.md` 追加:模式(role-manage/role-assign/action-attach)、变更摘要(新增/已存在/失败)、data.ts 修改行位置、回滚提示。
|
|
235
235
|
|
|
236
236
|
---
|
|
237
237
|
|
|
@@ -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 赋值不触发重渲染。详见 .
|
|
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
|
-
"详见:.
|
|
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/
|
|
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-
|
|
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+ 页面复用) |
|
|
53
|
+
| 通用弹窗(2+ 页面复用) | `.wl-skills/src/components/local/c_xxxModal/` |
|
|
54
54
|
| 极个性弹窗(仅单页面) | 页面目录下 `components/xxxModal.vue` |
|
|
55
55
|
|
|
56
56
|
---
|
|
@@ -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` |
|
|
63
|
-
| `jh-file-upload` |
|
|
64
|
-
| `jh-user-picker` |
|
|
65
|
-
| `jh-dept-picker` |
|
|
66
|
-
| `jh-select` |
|
|
67
|
-
| `jh-picker` |
|
|
68
|
-
| `jh-text` |
|
|
69
|
-
| `jh-pagination` |
|
|
70
|
-
| `jh-drag-row` |
|
|
71
|
-
| HTTP 请求方式 |
|
|
72
|
-
| 页面 Hook 模式 |
|
|
73
|
-
| BaseQuery / BaseTable 等 |
|
|
74
|
-
| c_formModal / c_listModal |
|
|
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
|
-
|
|
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. **下一版本**:删除
|
|
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 命中后,下一个大版本直接删除
|
|
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
|
-
-
|
|
159
|
+
- 真实场景案例:`.wl-skills/templates/produce/aiflow/mmwr-customer-detail/`(master-detail 使用 jh-drag-row)
|
|
@@ -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/
|
|
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-
|
|
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
|
-
新增样例请放在
|
|
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
|
+
];
|