@zeyue0329/xiaoma-cli 1.20.0 → 1.22.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 (130) hide show
  1. package/package.json +1 -1
  2. package/src/xmc-skills/2-plan-workflows/xiaoma-prd-clarify/README.md +74 -0
  3. package/src/xmc-skills/2-plan-workflows/xiaoma-prd-clarify/SKILL.md +58 -0
  4. package/src/xmc-skills/2-plan-workflows/xiaoma-prd-clarify/examples/example-clarification.md +61 -0
  5. package/src/xmc-skills/2-plan-workflows/xiaoma-prd-clarify/references/checklist.md +99 -0
  6. package/src/xmc-skills/2-plan-workflows/xiaoma-prd-clarify/references/output-template.md +73 -0
  7. package/src/xmc-skills/2-plan-workflows/xiaoma-prd-clarify/references/scoring.md +73 -0
  8. package/src/xmc-skills/2-plan-workflows/xiaoma-prd-clarify/scripts/export_to_excel.py +156 -0
  9. package/src/xmc-skills/module-help.csv +1 -0
  10. package/src/zqyl-skills/backend/components/xiaoma-zqyl-bar-chart-backend/SKILL.md +142 -0
  11. package/src/zqyl-skills/backend/components/xiaoma-zqyl-button-backend/SKILL.md +108 -0
  12. package/src/zqyl-skills/backend/components/xiaoma-zqyl-collapse-backend/SKILL.md +142 -0
  13. package/src/zqyl-skills/backend/components/xiaoma-zqyl-container-foot-backend/SKILL.md +192 -0
  14. package/src/zqyl-skills/backend/components/xiaoma-zqyl-data-census-backend/SKILL.md +104 -0
  15. package/src/zqyl-skills/backend/components/xiaoma-zqyl-dialog-backend/SKILL.md +205 -0
  16. package/src/zqyl-skills/backend/components/xiaoma-zqyl-drawer-backend/SKILL.md +100 -0
  17. package/src/zqyl-skills/backend/components/xiaoma-zqyl-empty-page-backend/SKILL.md +131 -0
  18. package/src/zqyl-skills/backend/components/xiaoma-zqyl-file-upload-backend/SKILL.md +291 -0
  19. package/src/zqyl-skills/backend/components/xiaoma-zqyl-flow-chart-backend/SKILL.md +118 -0
  20. package/src/zqyl-skills/backend/components/xiaoma-zqyl-form-editor-backend/SKILL.md +315 -0
  21. package/src/zqyl-skills/backend/components/xiaoma-zqyl-form-view-backend/SKILL.md +165 -0
  22. package/src/zqyl-skills/backend/components/xiaoma-zqyl-funnel-chart-backend/SKILL.md +102 -0
  23. package/src/zqyl-skills/backend/components/xiaoma-zqyl-gauge-chart-backend/SKILL.md +103 -0
  24. package/src/zqyl-skills/backend/components/xiaoma-zqyl-heatmap-chart-backend/SKILL.md +125 -0
  25. package/src/zqyl-skills/backend/components/xiaoma-zqyl-line-chart-backend/SKILL.md +136 -0
  26. package/src/zqyl-skills/backend/components/xiaoma-zqyl-map-chart-backend/SKILL.md +130 -0
  27. package/src/zqyl-skills/backend/components/xiaoma-zqyl-message-feedback-backend/SKILL.md +63 -0
  28. package/src/zqyl-skills/backend/components/xiaoma-zqyl-module-backend/SKILL.md +180 -0
  29. package/src/zqyl-skills/backend/components/xiaoma-zqyl-pie-chart-backend/SKILL.md +132 -0
  30. package/src/zqyl-skills/backend/components/xiaoma-zqyl-popover-backend/SKILL.md +61 -0
  31. package/src/zqyl-skills/backend/components/xiaoma-zqyl-preview-backend/SKILL.md +117 -0
  32. package/src/zqyl-skills/backend/components/xiaoma-zqyl-search-form-backend/SKILL.md +239 -0
  33. package/src/zqyl-skills/backend/components/xiaoma-zqyl-select-tree-backend/SKILL.md +161 -0
  34. package/src/zqyl-skills/backend/components/xiaoma-zqyl-table-simple-backend/SKILL.md +341 -0
  35. package/src/zqyl-skills/backend/components/xiaoma-zqyl-tips-backend/SKILL.md +257 -0
  36. package/src/zqyl-skills/backend/components/xiaoma-zqyl-title-backend/SKILL.md +145 -0
  37. package/src/zqyl-skills/backend/xiaoma-zqyl-feedback-page-backend/SKILL.md +30 -0
  38. package/src/zqyl-skills/backend/xiaoma-zqyl-feedback-page-backend/pages/feedbackPage.md +124 -0
  39. package/src/zqyl-skills/backend/xiaoma-zqyl-form-detail-page-backend/SKILL.md +39 -0
  40. package/src/zqyl-skills/backend/xiaoma-zqyl-form-detail-page-backend/pages/formDetailPage.md +354 -0
  41. package/src/zqyl-skills/backend/xiaoma-zqyl-import-dialog-page-backend/SKILL.md +27 -0
  42. package/src/zqyl-skills/backend/xiaoma-zqyl-import-dialog-page-backend/pages/importDialogPage.md +101 -0
  43. package/src/zqyl-skills/backend/xiaoma-zqyl-list-page-backend/SKILL.md +31 -0
  44. package/src/zqyl-skills/backend/xiaoma-zqyl-list-page-backend/pages/listPage.md +306 -0
  45. package/src/zqyl-skills/front/components/xiaoma-zqyl-bar-chart-front/SKILL.md +142 -0
  46. package/src/zqyl-skills/front/components/xiaoma-zqyl-button-front/SKILL.md +108 -0
  47. package/src/zqyl-skills/front/components/xiaoma-zqyl-collapse-front/SKILL.md +142 -0
  48. package/src/zqyl-skills/front/components/xiaoma-zqyl-container-foot-front/SKILL.md +192 -0
  49. package/src/zqyl-skills/front/components/xiaoma-zqyl-data-census-front/SKILL.md +104 -0
  50. package/src/zqyl-skills/front/components/xiaoma-zqyl-dialog-front/SKILL.md +205 -0
  51. package/src/zqyl-skills/front/components/xiaoma-zqyl-drawer-front/SKILL.md +100 -0
  52. package/src/zqyl-skills/front/components/xiaoma-zqyl-empty-page-front/SKILL.md +131 -0
  53. package/src/zqyl-skills/front/components/xiaoma-zqyl-file-upload-front/SKILL.md +291 -0
  54. package/src/zqyl-skills/front/components/xiaoma-zqyl-flow-chart-front/SKILL.md +118 -0
  55. package/src/zqyl-skills/front/components/xiaoma-zqyl-form-editor-front/SKILL.md +315 -0
  56. package/src/zqyl-skills/front/components/xiaoma-zqyl-form-view-front/SKILL.md +165 -0
  57. package/src/zqyl-skills/front/components/xiaoma-zqyl-funnel-chart-front/SKILL.md +102 -0
  58. package/src/zqyl-skills/front/components/xiaoma-zqyl-gauge-chart-front/SKILL.md +103 -0
  59. package/src/zqyl-skills/front/components/xiaoma-zqyl-heatmap-chart-front/SKILL.md +125 -0
  60. package/src/zqyl-skills/front/components/xiaoma-zqyl-line-chart-front/SKILL.md +136 -0
  61. package/src/zqyl-skills/front/components/xiaoma-zqyl-map-chart-front/SKILL.md +130 -0
  62. package/src/zqyl-skills/front/components/xiaoma-zqyl-message-feedback-front/SKILL.md +63 -0
  63. package/src/zqyl-skills/front/components/xiaoma-zqyl-module-front/SKILL.md +180 -0
  64. package/src/zqyl-skills/front/components/xiaoma-zqyl-pie-chart-front/SKILL.md +132 -0
  65. package/src/zqyl-skills/front/components/xiaoma-zqyl-popover-front/SKILL.md +61 -0
  66. package/src/zqyl-skills/front/components/xiaoma-zqyl-preview-front/SKILL.md +117 -0
  67. package/src/zqyl-skills/front/components/xiaoma-zqyl-search-form-front/SKILL.md +239 -0
  68. package/src/zqyl-skills/front/components/xiaoma-zqyl-select-tree-front/SKILL.md +161 -0
  69. package/src/zqyl-skills/front/components/xiaoma-zqyl-table-simple-front/SKILL.md +341 -0
  70. package/src/zqyl-skills/front/components/xiaoma-zqyl-tips-front/SKILL.md +257 -0
  71. package/src/zqyl-skills/front/components/xiaoma-zqyl-title-front/SKILL.md +145 -0
  72. package/src/zqyl-skills/front/xiaoma-zqyl-feedback-page-front/SKILL.md +30 -0
  73. package/src/zqyl-skills/front/xiaoma-zqyl-feedback-page-front/pages/feedbackPage.md +124 -0
  74. package/src/zqyl-skills/front/xiaoma-zqyl-form-detail-page-front/SKILL.md +39 -0
  75. package/src/zqyl-skills/front/xiaoma-zqyl-form-detail-page-front/pages/formDetailPage.md +351 -0
  76. package/src/zqyl-skills/front/xiaoma-zqyl-import-dialog-page-front/SKILL.md +27 -0
  77. package/src/zqyl-skills/front/xiaoma-zqyl-import-dialog-page-front/pages/importDialogPage.md +101 -0
  78. package/src/zqyl-skills/front/xiaoma-zqyl-list-page-front/SKILL.md +31 -0
  79. package/src/zqyl-skills/front/xiaoma-zqyl-list-page-front/pages/listPage.md +380 -0
  80. package/src/zqyl-skills/mid/components/xiaoma-zqyl-bar-chart-mid/SKILL.md +142 -0
  81. package/src/zqyl-skills/mid/components/xiaoma-zqyl-button-mid/SKILL.md +108 -0
  82. package/src/zqyl-skills/mid/components/xiaoma-zqyl-collapse-mid/SKILL.md +142 -0
  83. package/src/zqyl-skills/mid/components/xiaoma-zqyl-container-foot-mid/SKILL.md +192 -0
  84. package/src/zqyl-skills/mid/components/xiaoma-zqyl-data-census-mid/SKILL.md +104 -0
  85. package/src/zqyl-skills/mid/components/xiaoma-zqyl-dialog-mid/SKILL.md +205 -0
  86. package/src/zqyl-skills/mid/components/xiaoma-zqyl-drawer-mid/SKILL.md +100 -0
  87. package/src/zqyl-skills/mid/components/xiaoma-zqyl-empty-page-mid/SKILL.md +131 -0
  88. package/src/zqyl-skills/mid/components/xiaoma-zqyl-file-upload-mid/SKILL.md +291 -0
  89. package/src/zqyl-skills/mid/components/xiaoma-zqyl-flow-chart-mid/SKILL.md +118 -0
  90. package/src/zqyl-skills/mid/components/xiaoma-zqyl-form-editor-mid/SKILL.md +315 -0
  91. package/src/zqyl-skills/mid/components/xiaoma-zqyl-form-view-mid/SKILL.md +165 -0
  92. package/src/zqyl-skills/mid/components/xiaoma-zqyl-funnel-chart-mid/SKILL.md +102 -0
  93. package/src/zqyl-skills/mid/components/xiaoma-zqyl-gauge-chart-mid/SKILL.md +103 -0
  94. package/src/zqyl-skills/mid/components/xiaoma-zqyl-heatmap-chart-mid/SKILL.md +125 -0
  95. package/src/zqyl-skills/mid/components/xiaoma-zqyl-line-chart-mid/SKILL.md +136 -0
  96. package/src/zqyl-skills/mid/components/xiaoma-zqyl-manager-title-mid/SKILL.md +132 -0
  97. package/src/zqyl-skills/mid/components/xiaoma-zqyl-map-chart-mid/SKILL.md +130 -0
  98. package/src/zqyl-skills/mid/components/xiaoma-zqyl-message-feedback-mid/SKILL.md +63 -0
  99. package/src/zqyl-skills/mid/components/xiaoma-zqyl-module-mid/SKILL.md +180 -0
  100. package/src/zqyl-skills/mid/components/xiaoma-zqyl-mps-table-mid/SKILL.md +179 -0
  101. package/src/zqyl-skills/mid/components/xiaoma-zqyl-pie-chart-mid/SKILL.md +132 -0
  102. package/src/zqyl-skills/mid/components/xiaoma-zqyl-popover-mid/SKILL.md +61 -0
  103. package/src/zqyl-skills/mid/components/xiaoma-zqyl-preview-mid/SKILL.md +117 -0
  104. package/src/zqyl-skills/mid/components/xiaoma-zqyl-search-form-mid/SKILL.md +239 -0
  105. package/src/zqyl-skills/mid/components/xiaoma-zqyl-select-tree-mid/SKILL.md +161 -0
  106. package/src/zqyl-skills/mid/components/xiaoma-zqyl-table-simple-mid/SKILL.md +341 -0
  107. package/src/zqyl-skills/mid/components/xiaoma-zqyl-tips-mid/SKILL.md +257 -0
  108. package/src/zqyl-skills/mid/components/xiaoma-zqyl-title-mid/SKILL.md +145 -0
  109. package/src/zqyl-skills/mid/xiaoma-zqyl-feedback-page-mid/SKILL.md +30 -0
  110. package/src/zqyl-skills/mid/xiaoma-zqyl-feedback-page-mid/pages/feedbackPage.md +125 -0
  111. package/src/zqyl-skills/mid/xiaoma-zqyl-form-detail-page-mid/SKILL.md +39 -0
  112. package/src/zqyl-skills/mid/xiaoma-zqyl-form-detail-page-mid/pages/formDetailPage.md +357 -0
  113. package/src/zqyl-skills/mid/xiaoma-zqyl-import-dialog-page-mid/SKILL.md +27 -0
  114. package/src/zqyl-skills/mid/xiaoma-zqyl-import-dialog-page-mid/pages/importDialogPage.md +102 -0
  115. package/src/zqyl-skills/mid/xiaoma-zqyl-list-page-mid/SKILL.md +30 -0
  116. package/src/zqyl-skills/mid/xiaoma-zqyl-list-page-mid/pages/listPage.md +389 -0
  117. package/src/zqyl-skills/module-help.csv +15 -0
  118. package/src/zqyl-skills/module.yaml +38 -0
  119. package/src/zqyl-skills/xiaoma-zqyl-ui-spec/SKILL.md +478 -0
  120. package/src/zqyl-skills/xiaoma-zqyl-ui-spec/VERSION.md +30 -0
  121. package/src/zqyl-skills/xiaoma-zqyl-ui-spec/components-index.md +55 -0
  122. package/src/zqyl-skills/xiaoma-zqyl-ui-spec/design-tokens.md +167 -0
  123. package/src/zqyl-skills/xiaoma-zqyl-ui-spec/reference.md +385 -0
  124. package/tools/installer/core/manifest.js +4 -3
  125. package/tools/installer/list-options.js +2 -2
  126. package/tools/installer/modules/official-modules.js +15 -47
  127. package/tools/installer/modules/version-resolver.js +2 -2
  128. package/tools/installer/project-root.js +12 -9
  129. package/tools/installer/ui.js +2 -1
  130. package/tools/validate-zqyl-pack.js +171 -0
@@ -0,0 +1,100 @@
1
+ ---
2
+ name: xiaoma-zqyl-drawer-front
3
+ description: 前台抽屉浮层(详情、表格选择、较大操作区)的 Element UI 实现规范(el-drawer)。在用户提及抽屉、Drawer、el-drawer、侧滑详情、表格选择抽屉,或需要在前台实现该组件时使用。适用于前台门户仓库(如 zqyl-crclopen,platformType `yx`;页头/表格用 ylTitle + ylTableSimple)。 Use when implementing or reviewing the drawer (el-drawer) component on a ZQYL front page.
4
+ ---
5
+
6
+ # 抽屉(前台)
7
+
8
+ 你是一个前端组件实现与改造助手。你必须严格按本技能的规则输出。
9
+
10
+ ## 适用范围
11
+ - 平台:前台
12
+ - platformType:`yx`
13
+ - 组件条目:`drawer`
14
+
15
+ ## 目标
16
+ - 当用户提到该组件/场景时,给出可落地的 Vue2 + Element UI + zqyl-component-base 代码片段与参数建议。
17
+ - 不改变业务行为,仅替换/补齐结构与交互规范。
18
+
19
+ ## 组件注册(必读)
20
+
21
+ - `zqyl-component-base` 公共组件在**项目入口**按组件名逐个 `import 'zqyl-component-base/lib/<ComponentName>'` + `Vue.component` 注册;样式在入口引入 `component.css`。
22
+ - **禁止** `import zqylComponentBase from 'zqyl-component-base'` + `Vue.use(zqylComponentBase)`;页面模板直接使用 `<yl-*>`,**勿**单页重复 import。
23
+ - 生成前先检查入口是否已注册本页用到的组件;缺失则仅在入口补注册。
24
+
25
+ ## 输出要求
26
+ - 回答用户时:根据用户输入与页面场景,只输出**一段**最符合需求的 Vue 代码(可直接粘贴),并简要说明关键 props/注意事项。
27
+ - 不要在一次回答中罗列多种候选实现;不要输出“变体 A/B/C/D”或“方案一/方案二”等对比式内容。
28
+ - 本技能文档「示例」章节含多种参考写法,仅供你内部分析选型;**不得**把多个示例原样全部贴给用户。
29
+ - 示例代码必须可直接粘贴使用(Vue2 单文件组件片段)。
30
+
31
+ ## 数据与接口(禁止 mock)
32
+
33
+ - **禁止**在生成业务页面中填充 mock、演示、假数据或静态业务行(如手写 `loadData: [{ companyName: 'xxx' }]`、`reqData` 示例值、`mounted` 里写死 `total` 等)。
34
+ - 列表/表格:`tableData.loadData` 保持 `[]`,数据由 `ylTableSimple` / `ylMpsTable` 通过 `searchParmas.request` / `queryListUrl` **调接口**获取;`request.url` / `queryListUrl` 写项目已有 `INTERFACE.xxx`,未知时留 `''` 并注释 `// TODO: 补充接口常量`。
35
+ - 查询区:`searchParmas.request` 配置 `url`、`type`、`method`、`options`;有 `url` 时 `:load="true"`(或省略,默认加载),由组件触发查询。
36
+ - 表单详情:`reqData` / 表单 model 初始 `{}` 或字段空值;在 `created` / `mounted` 调详情接口赋值;**禁止**预填示例姓名、金额等。
37
+ - 下拉/枚举:`select` 的 `data` 从字典或接口加载,无数据时 `data: []`;**禁止**写死 `{ name: '待审核', code: '1' }` 类占位项(除非需求明确给定静态枚举)。
38
+ - 统计区 `ylDataCensus`:`:list` 由接口或 `computed` 赋值,**禁止**手写示例金额/数量。
39
+ - 动态行表格:`detailRows` 等初始 `[]`,由接口回显或用户操作增删。
40
+ - 本 skill「示例」章节的静态数据**仅供理解组件 API**;生成业务页面时**不得**照搬进 `data()`。
41
+
42
+ ## 示例(参考写法,回答用户时只选用其中一种)
43
+
44
+ ## 何时使用
45
+
46
+ - 详情展示、中等复杂度表单/表格选择,需保留主页面上下文。
47
+ - 比弹窗需要更大纵向空间,但不必整页跳转。
48
+
49
+ 不适用:简单确认 → `MessageBox`;标准弹窗表单 → `ylDialog`。
50
+
51
+ ## 代码示例
52
+
53
+ ### 详情抽屉
54
+ ```vue
55
+ <el-drawer title="合同详情" :visible.sync="visible" direction="rtl" size="640px" :append-to-body="true">
56
+ <div class="drawer-panel">
57
+ <div class="drawer-body">
58
+ <yl-form-view :form-data="formData" :req-data="reqData" layout="doubleRow" />
59
+ </div>
60
+ <div class="drawer-footer text-right">
61
+ <el-button size="small" @click="visible = false">关闭</el-button>
62
+ <el-button size="small" type="primary">保存</el-button>
63
+ </div>
64
+ </div>
65
+ </el-drawer>
66
+ ```
67
+
68
+ ### 表格选择抽屉
69
+ ```vue
70
+ <el-drawer title="选择合同" :visible.sync="visible" direction="rtl" size="900px" :append-to-body="true">
71
+ <div class="drawer-panel">
72
+ <div class="drawer-body">
73
+ <yl-search-form :search-parmas="searchParmas" :load="false" :is-card="false" />
74
+ <yl-table-simple :data="tableData" :page="true" @changeRadioData="onRadio" />
75
+ </div>
76
+ <div class="drawer-footer text-right">
77
+ <el-button size="small" @click="visible = false">取消</el-button>
78
+ <el-button size="small" type="primary" :disabled="!selectedRow" @click="confirm">确定选择</el-button>
79
+ </div>
80
+ </div>
81
+ </el-drawer>
82
+ ```
83
+
84
+ ```js
85
+ // tableData 须设置 attributes.height,仅表格体滚动
86
+ tableData: {
87
+ loadData: [],
88
+ attributes: { height: '420px' },
89
+ header: [
90
+ { type: 'radio', width: 48 },
91
+ { prop: 'companyName', label: '企业名称', tooltip: true },
92
+ ],
93
+ },
94
+ ```
95
+
96
+ ## 注意事项
97
+ - 标题:`#303133`、**加粗**(`font-weight: 700`),标题区距下方内容 **24px**(`.el-drawer__header { margin-bottom: 24px }`;默认 `title` 属性对应 `header > span[role="heading"]`)。
98
+ - 布局:`drawer-panel` 纵向 flex;`drawer-body` 滚动、`drawer-footer` 固定底栏。
99
+ - 常用宽度 640px / 900px;`append-to-body` 避免被 fixed 底栏遮挡。
100
+ - 抽屉内表格优先 **`ylTableSimple`**,须设置 `data.attributes.height`;单选未选中时底部主操作置灰。
@@ -0,0 +1,131 @@
1
+ ---
2
+ name: xiaoma-zqyl-empty-page-front
3
+ description: 前台空状态/异常页插画与文案(无数据、404、网络异常、权限不足等 type 预设)的 Vue2 实现规范(ylEmptyPage)。在用户提及 ylEmptyPage、yl-empty-page、空页面、空状态、暂无数据、404、网络异常、无权限、异常页,或需要在前台实现该组件时使用。适用于前台门户仓库(如 zqyl-crclopen,platformType `yx`;页头/表格用 ylTitle + ylTableSimple)。 Use when implementing or reviewing the empty-page (ylEmptyPage) component on a ZQYL front page.
4
+ ---
5
+
6
+ # 空页面(前台)
7
+
8
+ 你是一个前端组件实现与改造助手。你必须严格按本技能的规则输出。
9
+
10
+ ## 适用范围
11
+ - 平台:前台
12
+ - platformType:`yx`
13
+ - 组件条目:`emptyPage`
14
+
15
+ ## 目标
16
+ - 当用户提到该组件/场景时,给出可落地的 Vue2 + Element UI + zqyl-component-base 代码片段与参数建议。
17
+ - 不改变业务行为,仅替换/补齐结构与交互规范。
18
+
19
+ ## 组件注册(必读)
20
+
21
+ - `zqyl-component-base` 公共组件在**项目入口**按组件名逐个 `import 'zqyl-component-base/lib/<ComponentName>'` + `Vue.component` 注册;样式在入口引入 `component.css`。
22
+ - **禁止** `import zqylComponentBase from 'zqyl-component-base'` + `Vue.use(zqylComponentBase)`;页面模板直接使用 `<yl-*>`,**勿**单页重复 import。
23
+ - 生成前先检查入口是否已注册本页用到的组件;缺失则仅在入口补注册。
24
+
25
+ ## 输出要求
26
+ - 回答用户时:根据用户输入与页面场景,只输出**一段**最符合需求的 Vue 代码(可直接粘贴),并简要说明关键 props/注意事项。
27
+ - 不要在一次回答中罗列多种候选实现;不要输出“变体 A/B/C/D”或“方案一/方案二”等对比式内容。
28
+ - 本技能文档「示例」章节含多种参考写法,仅供你内部分析选型;**不得**把多个示例原样全部贴给用户。
29
+ - 示例代码必须可直接粘贴使用(Vue2 单文件组件片段)。
30
+
31
+ ## 数据与接口(禁止 mock)
32
+
33
+ - **禁止**在生成业务页面中填充 mock、演示、假数据或静态业务行(如手写 `loadData: [{ companyName: 'xxx' }]`、`reqData` 示例值、`mounted` 里写死 `total` 等)。
34
+ - 列表/表格:`tableData.loadData` 保持 `[]`,数据由 `ylTableSimple` / `ylMpsTable` 通过 `searchParmas.request` / `queryListUrl` **调接口**获取;`request.url` / `queryListUrl` 写项目已有 `INTERFACE.xxx`,未知时留 `''` 并注释 `// TODO: 补充接口常量`。
35
+ - 查询区:`searchParmas.request` 配置 `url`、`type`、`method`、`options`;有 `url` 时 `:load="true"`(或省略,默认加载),由组件触发查询。
36
+ - 表单详情:`reqData` / 表单 model 初始 `{}` 或字段空值;在 `created` / `mounted` 调详情接口赋值;**禁止**预填示例姓名、金额等。
37
+ - 下拉/枚举:`select` 的 `data` 从字典或接口加载,无数据时 `data: []`;**禁止**写死 `{ name: '待审核', code: '1' }` 类占位项(除非需求明确给定静态枚举)。
38
+ - 统计区 `ylDataCensus`:`:list` 由接口或 `computed` 赋值,**禁止**手写示例金额/数量。
39
+ - 动态行表格:`detailRows` 等初始 `[]`,由接口回显或用户操作增删。
40
+ - 本 skill「示例」章节的静态数据**仅供理解组件 API**;生成业务页面时**不得**照搬进 `data()`。
41
+
42
+ ## 何时使用(智能体选择规则)
43
+
44
+ 当需求/页面出现以下任一信号时,必须优先调用本 skills 并按规则产出代码:
45
+ - 整页或内容区需展示**无数据、404、网络异常、登录异常、无权限**等空状态/异常态。
46
+ - 列表/搜索无结果、弹窗外层整页异常、反馈页数据异常等需插画 + 文案的场景。
47
+ - 用户提到「yl-empty-page」、「ylEmptyPage」、「空页面」、「暂无数据页」、「404 页」时。
48
+
49
+ 不适用:
50
+ - 表格内无数据占位 → 使用 `ylTableSimple` 空数据默认态(保留表头)。
51
+ - 轻量 Toast 反馈 → 使用 `Message`;可关闭的说明条 → 使用 `ylTips`。
52
+ - 操作成功/失败结果页(居中图标 + 按钮)→ 自定义布局或反馈页模板,非本组件。
53
+
54
+ ### 方案选择(内部分析用,勿在回答中罗列)
55
+ - 通用无数据:`type: noData`;404:`notFoundRequet`;网络断开/超时:`networkBreak` / `networkTimeout`。
56
+ - 云租业务:使用 `yz` 前缀类型(如 `yzNodata`、`yzNoAccessPower`)。
57
+ - 覆盖默认文案:传 `text`;云租部分类型需 `:is-position-img="false"`。
58
+
59
+ ## API(ylEmptyPage)
60
+
61
+ > 标签:`<yl-empty-page>` / `ylEmptyPage`;须在入口 `import ylEmptyPage from 'zqyl-component-base/lib/ylEmptyPage'` + `Vue.component('ylEmptyPage', ylEmptyPage)` 注册;页面模板直接使用,**勿**单页 import;**禁止**全量 `Vue.use(zqylComponentBase)`。
62
+
63
+ ### Props
64
+
65
+ | 属性名 | 类型 | 默认值 | 说明 |
66
+ | --- | --- | --- | --- |
67
+ | `type` | String | `notFoundRequet` | 空状态类型,见下表 |
68
+ | `text` | String | `''` | 自定义提示文案;为空时使用该 type 内置文案 |
69
+ | `isPositionImg` / `is-position-img` | Boolean | `true` | `true` 文案在插画内;`false` 文案在插画下方 |
70
+ | `width` | Number | `null` | 图片宽度(组件内暂不启用) |
71
+
72
+ ### type 预设值
73
+
74
+ | type | 场景 |
75
+ | --- | --- |
76
+ | `noData` | 无数据 |
77
+ | `notFoundRequet` | 404 页面 |
78
+ | `networkBreak` | 网络断开 |
79
+ | `networkTimeout` | 网络超时 |
80
+ | `loginException` | 登录异常 |
81
+ | `searchNone` | 搜索无结果 |
82
+ | `noBusinessCard` / `noMessage` / `noPoints` / `noShopping` | 其他业务空态 |
83
+ | `yzNotFoundRequet` / `yzNodata` / `yzNoAccessPower` / `yzNoOperationPower` / `yzSigningFailed` | 云租专用 |
84
+
85
+ ### Slots / Events
86
+
87
+ 无插槽、无事件;操作按钮由外层页面自行布局。
88
+
89
+ ## 示例(参考写法,回答用户时只选用其中一种)
90
+
91
+ ### 基础用法
92
+ ```vue
93
+ <yl-empty-page type="noData" />
94
+ ```
95
+
96
+ ### 常用类型
97
+ ```vue
98
+ <yl-empty-page type="noData" />
99
+ <yl-empty-page type="notFoundRequet" />
100
+ <yl-empty-page type="networkBreak" />
101
+ <yl-empty-page type="loginException" />
102
+ <yl-empty-page type="networkTimeout" />
103
+ ```
104
+
105
+ ### 自定义文案
106
+ ```vue
107
+ <yl-empty-page
108
+ type="noData"
109
+ text="当前列表暂无数据,请稍后再试"
110
+ />
111
+ ```
112
+
113
+ ### 文字位置
114
+ ```vue
115
+ <!-- 文案在插画下方 -->
116
+ <yl-empty-page type="noData" :is-position-img="false" />
117
+ <!-- 文案在插画内部(默认) -->
118
+ <yl-empty-page type="noData" :is-position-img="true" />
119
+ ```
120
+
121
+ ### 云租类型示例
122
+ ```vue
123
+ <yl-empty-page type="yzNodata" :is-position-img="false" />
124
+ <yl-empty-page type="yzNoAccessPower" :is-position-img="false" />
125
+ ```
126
+
127
+ ## 注意事项
128
+ - 通过 **`type`** 选择预设插画与默认文案;需覆盖文案时传 **`text`**。
129
+ - **`isPositionImg: false`** 时文案在插画下方;云租部分类型(如 `yzNodata`)常用 `false`。
130
+ - 404 类型键名为 **`notFoundRequet`**(历史拼写,勿写成 `notFoundRequest`)。
131
+ - 组件无插槽/事件;返回首页等操作按钮放在组件**外层**,与本组件并列布局。
@@ -0,0 +1,291 @@
1
+ ---
2
+ name: xiaoma-zqyl-file-upload-front
3
+ description: 前台附件/证照/图片上传(类型限制、预览、删除、重新上传)的 Vue2 实现规范(ylFileUpload)。在用户提及 ylFileUpload、yl-file-upload、文件上传、附件上传、证照上传,或需要在前台实现该组件时使用。适用于前台门户仓库(如 zqyl-crclopen,platformType `yx`;页头/表格用 ylTitle + ylTableSimple)。 Use when implementing or reviewing the file-upload (ylFileUpload) component on a ZQYL front page.
4
+ ---
5
+
6
+ # 文件上传(前台)
7
+
8
+ 你是一个前端组件实现与改造助手。你必须严格按本技能的规则输出。
9
+
10
+ ## 适用范围
11
+ - 平台:前台
12
+ - platformType:`yx`
13
+ - 组件条目:`fileUpload`
14
+
15
+ ## 目标
16
+ - 当用户提到该组件/场景时,给出可落地的 Vue2 + Element UI + zqyl-component-base 代码片段与参数建议。
17
+ - 不改变业务行为,仅替换/补齐结构与交互规范。
18
+
19
+ ## 组件注册(必读)
20
+
21
+ - `zqyl-component-base` 公共组件在**项目入口**按组件名逐个 `import 'zqyl-component-base/lib/<ComponentName>'` + `Vue.component` 注册;样式在入口引入 `component.css`。
22
+ - **禁止** `import zqylComponentBase from 'zqyl-component-base'` + `Vue.use(zqylComponentBase)`;页面模板直接使用 `<yl-*>`,**勿**单页重复 import。
23
+ - 生成前先检查入口是否已注册本页用到的组件;缺失则仅在入口补注册。
24
+
25
+ ## 输出要求
26
+ - 回答用户时:根据用户输入与页面场景,只输出**一段**最符合需求的 Vue 代码(可直接粘贴),并简要说明关键 props/注意事项。
27
+ - 不要在一次回答中罗列多种候选实现;不要输出“变体 A/B/C/D”或“方案一/方案二”等对比式内容。
28
+ - 本技能文档「示例」章节含多种参考写法,仅供你内部分析选型;**不得**把多个示例原样全部贴给用户。
29
+ - 示例代码必须可直接粘贴使用(Vue2 单文件组件片段)。
30
+
31
+ ## 数据与接口(禁止 mock)
32
+
33
+ - **禁止**在生成业务页面中填充 mock、演示、假数据或静态业务行(如手写 `loadData: [{ companyName: 'xxx' }]`、`reqData` 示例值、`mounted` 里写死 `total` 等)。
34
+ - 列表/表格:`tableData.loadData` 保持 `[]`,数据由 `ylTableSimple` / `ylMpsTable` 通过 `searchParmas.request` / `queryListUrl` **调接口**获取;`request.url` / `queryListUrl` 写项目已有 `INTERFACE.xxx`,未知时留 `''` 并注释 `// TODO: 补充接口常量`。
35
+ - 查询区:`searchParmas.request` 配置 `url`、`type`、`method`、`options`;有 `url` 时 `:load="true"`(或省略,默认加载),由组件触发查询。
36
+ - 表单详情:`reqData` / 表单 model 初始 `{}` 或字段空值;在 `created` / `mounted` 调详情接口赋值;**禁止**预填示例姓名、金额等。
37
+ - 下拉/枚举:`select` 的 `data` 从字典或接口加载,无数据时 `data: []`;**禁止**写死 `{ name: '待审核', code: '1' }` 类占位项(除非需求明确给定静态枚举)。
38
+ - 统计区 `ylDataCensus`:`:list` 由接口或 `computed` 赋值,**禁止**手写示例金额/数量。
39
+ - 动态行表格:`detailRows` 等初始 `[]`,由接口回显或用户操作增删。
40
+ - 本 skill「示例」章节的静态数据**仅供理解组件 API**;生成业务页面时**不得**照搬进 `data()`。
41
+
42
+ ## 何时使用(智能体选择规则)
43
+
44
+ 当需求/页面出现以下任一信号时,必须优先调用本 skills 并按规则产出代码:
45
+ - 上传附件、证件影像、发票、营业执照、身份证等业务上传入口。
46
+ - 需限制文件类型/大小/数量,或上传后展示文件名、删除、预览、重新上传。
47
+ - 图片类:多图小方块、单图卡片、拖拽上传区、头像、九宫格等。
48
+ - 用户提到「yl-file-upload」、「ylFileUpload」、「点击上传」、附件/证照上传时。
49
+
50
+
51
+ ### 方案选择(内部分析用,勿在回答中罗列)
52
+ - 单文件按钮:`type: sole` + `num-limit: 1`;需「重新上传」时加 `re-upload-btn`。
53
+ - 多文件仅汇总:`type: multi` + `num-limit`;已上传以「已上传文件(n/m)」展示,弹窗管理列表。
54
+ - 多文件逐项展示:`type: list` + `multiple`;长文件名配 `truncated-file-name-limit`。
55
+ - 多文件带进度列表:`type: multiple` + `multiple`。
56
+ - 多图小方块:`type: square` + `file-type: png/jpg` + `list-style` 宽高。
57
+ - 单图卡片(证照/发票):`type: invoice`;拖拽热区:`type: icon`。
58
+ - 头像 / 九宫格 / 证件 / 营业执照:`type: avatar` | `nineParts` | `cert` | `business`。
59
+ - 自定义触发区:`type: customize` + `#customize` 插槽。
60
+ - 手动上传:`auto-upload: false`,业务「确定」中调用 `$refs.xxx.submit()`。
61
+
62
+ ## API(ylFileUpload)
63
+
64
+ > 标签:`<yl-file-upload>` / `ylFileUpload`;须在入口 `import ylFileUpload from 'zqyl-component-base/lib/ylFileUpload'` + `Vue.component('ylFileUpload', ylFileUpload)` 注册;页面模板直接使用,**勿**单页 import;**禁止**全量 `Vue.use(zqylComponentBase)`。
65
+
66
+ ### Props
67
+
68
+ | 属性名 | 类型 | 默认值 | 说明 |
69
+ | --- | --- | --- | --- |
70
+ | `data` | Object | `{}` | 上传配置,含 `attributes` + `request`(必填结构) |
71
+ | `uploadFile` / `upload-file` | Array | `[]` | 已上传文件列表(受控,须在事件中同步) |
72
+ | `numLimit` / `num-limit` | Number | `1` | 最大上传数量 |
73
+ | `limit` | Boolean | `true` | 是否启用数量限制 |
74
+ | `byteLimit` / `byte-limit` | Number | `50` | 单文件最大体积(MB) |
75
+ | `autoUpload` / `auto-upload` | Boolean | `true` | `false` 时选手动 `submit()` |
76
+ | `platformType` / `platform-type` | String | `yx` | 平台:`yx` / `yxManager`(文档亦写作 yx-admin)/ `yz` / `mps` |
77
+ | `truncatedFileNameLimit` | Number | `12` | 文件名展示截断;`type` 为 `multiple` 或 `list` 时生效 |
78
+ | `previewType` | String | `dialog` | 预览方式:`dialog` / 新窗口等 |
79
+ | `deleteBtn` | Boolean | `true` | 是否显示删除 |
80
+ | `reUploadBtn` / `re-upload-btn` | Boolean | `false` | 是否显示重新上传(多用于单文件) |
81
+ | `disabled` | Boolean | `false` | 禁用上传 |
82
+ | `beforeUpload` | Function | — | 上传前钩子,返回 `false` 阻止上传 |
83
+ | `batchUpload` | Boolean | `false` | 是否批量上传 |
84
+ | `multipleCustom` | Array | `[]` | 自定义多选后缀白名单 |
85
+ | `modalIsShow` | Boolean | `true` | 多选列表弹层是否显示遮罩 |
86
+ | `fileNameLimit` | Number | `null` | 文件名长度限制 |
87
+ | `showExample` | Boolean | `false` | 是否显示营业执照示例图 |
88
+ | `noMessageSuccess` | Boolean | `false` | 上传成功不提示 |
89
+ | `onceMessageSuccess` | Boolean | `false` | 多文件仅提示一次成功 |
90
+ | `disabledIE` | Boolean | `false` | 是否禁用 IE9 上传体验 |
91
+
92
+ ### `data.attributes` 常用字段
93
+
94
+ | 字段 | 类型 | 说明 |
95
+ | --- | --- | --- |
96
+ | `type` | String | 展示样式,见下表「type 展示类型」 |
97
+ | `fileType` | String | 后缀/MIME 校验策略,见「fileType 常用取值」 |
98
+ | `buttonProp` | Object | 按钮配置:`text`、`hideButton`、`border` 等 |
99
+ | `tip` / `notice` | String | 格式/大小提示或校验失败提示 |
100
+ | `multiple` | Boolean | 是否多选 |
101
+ | `directory` | Boolean | 是否支持文件夹上传 |
102
+ | `listStyle` | Object | 列表/小图区域宽高,如 `{ width, height }` |
103
+ | `showImg` | String | 证件/示例图片 URL |
104
+ | `ninePartsTitle` | String | 九宫格标题 |
105
+ | `resolutionRatio` | Object | 图片分辨率限制 `{ width, height }` |
106
+
107
+ ### `data.request`
108
+
109
+ | 字段 | 类型 | 说明 |
110
+ | --- | --- | --- |
111
+ | `url` | String | 上传接口;**显式传入时优先**于 `platformType` 默认地址 |
112
+ | `options` | Object | 随 FormData 附加字段,如 **`bizType`**(文件中心常必填) |
113
+ | `expand` | Object | 扩展字段,合并进成功回调中的文件对象 |
114
+
115
+ ### `data.attributes.type` 展示类型
116
+
117
+ | type | 场景 |
118
+ | --- | --- |
119
+ | `sole` / `multi` | 单/多附件按钮(新版常用) |
120
+ | `list` / `multiple` | 文件列表(逐项展示 / 带进度) |
121
+ | `single` | 单文件上传 |
122
+ | `square` | 多图小方块 |
123
+ | `icon` | 拖拽/图标区域上传 |
124
+ | `invoice` / `cert` / `business` | 发票/证件/营业执照专用版式 |
125
+ | `avatar` / `nineParts` | 头像 / 九宫格多图 |
126
+ | `IDcardFront` / `IDcardReverse` | 身份证正/反面 |
127
+ | `customize` | 自定义上传区(配合 `customize` 插槽) |
128
+ | `cloud` / `import` / `svgBtn` | 云上传 / 导入按钮 / SVG 按钮样式 |
129
+
130
+ ### `fileType` 常用取值
131
+
132
+ | fileType | 说明 |
133
+ | --- | --- |
134
+ | `*` | 不限制(按实现) |
135
+ | `png/jpg` / `image` | 图片 |
136
+ | `pdf` / `pdf/image` | PDF / PDF+图片 |
137
+ | `doc/excel` / `doc/excel/zip` | 办公文档 / 含压缩包 |
138
+ | `types` | 图片 + PDF + Office 等组合 |
139
+ | `zip/image` | 压缩包 + 图片等 |
140
+
141
+ ### Events
142
+
143
+ | 事件名 | 参数 | 说明 |
144
+ | --- | --- | --- |
145
+ | `setUploadFile` | `(file, fileList)` | 上传成功;须同步更新父组件 `uploadFile` |
146
+ | `removeUploadFile` | `(file, fileList)` | 删除文件 |
147
+ | `getRefName` | `(refName)` | 返回内部上传器 ref 名 |
148
+ | `getFilesLength` | `(successCount)` | 通过校验的文件数量 |
149
+ | `allFileLength` | `(allCount)` | 选中文件总数 |
150
+
151
+ ### Slots
152
+
153
+ | 插槽名 | 说明 |
154
+ | --- | --- |
155
+ | `customize` | `type='customize'` 时自定义上传触发区 |
156
+ | `beforeUploadIcon` | 自定义上传前图标;`icon` / `invoice` / `square` / `multiple` 等可替换 |
157
+
158
+ ### 方法(ref)
159
+
160
+ | 方法 | 说明 |
161
+ | --- | --- |
162
+ | `clearFiles()` | 清空已上传列表 |
163
+ | `submit()` | `autoUpload=false` 时手动触发上传 |
164
+ | `viewFile(url, file, type, index)` | 预览文件 |
165
+
166
+ ## 示例(参考写法,回答用户时只选用其中一种)
167
+
168
+ ### 单文件上传(sole)
169
+ ```vue
170
+ <el-form-item label="上传单一文件">
171
+ <yl-file-upload
172
+ :platform-type="platformType"
173
+ :data="uploadData"
174
+ :upload-file="fileList"
175
+ :num-limit="1"
176
+ @setUploadFile="onSetUpload"
177
+ @removeUploadFile="onSetUpload"
178
+ />
179
+ <div class="form-item-hint">提示文字…</div>
180
+ </el-form-item>
181
+ ```
182
+
183
+ // uploadData: { attributes: { type: 'sole', fileType: 'pdf', tip: '…', buttonProp: { text: '点击上传' } }, request: { url, options: { bizType } } }
184
+
185
+ ### 单文件 + 重新上传(sole + reUploadBtn)
186
+ ```vue
187
+ <yl-file-upload
188
+ ref="fileUpload"
189
+ :platform-type="platformType"
190
+ :data="uploadData"
191
+ :upload-file="fileList"
192
+ :num-limit="1"
193
+ :re-upload-btn="true"
194
+ @setUploadFile="onSetUpload"
195
+ />
196
+ ```
197
+
198
+ ### 多文件列表(list)
199
+ ```vue
200
+ <yl-file-upload
201
+ :platform-type="platformType"
202
+ :data="uploadData"
203
+ :upload-file="fileList"
204
+ :num-limit="5"
205
+ :truncated-file-name-limit="12"
206
+ @setUploadFile="onSetUpload"
207
+ @removeUploadFile="onSetUpload"
208
+ />
209
+ ```
210
+
211
+ // uploadData.attributes: { type: 'list', fileType: 'pdf', multiple: true, buttonProp: { text: '点击上传' } }
212
+
213
+ ### 多文件汇总(multi)
214
+ ```vue
215
+ <yl-file-upload
216
+ :platform-type="platformType"
217
+ :data="uploadData"
218
+ :upload-file="fileList"
219
+ :num-limit="5"
220
+ @setUploadFile="onSetUpload"
221
+ @removeUploadFile="onSetUpload"
222
+ />
223
+ ```
224
+
225
+ // uploadData.attributes: { type: 'multi', fileType: 'doc/excel/zip', multiple: true, tip: '…' }
226
+
227
+ ### 多图小方块(square)
228
+ ```vue
229
+ <yl-file-upload
230
+ :platform-type="platformType"
231
+ :data="uploadData"
232
+ :upload-file="fileList"
233
+ :num-limit="5"
234
+ :byte-limit="5"
235
+ @setUploadFile="onSetUpload"
236
+ @removeUploadFile="onSetUpload"
237
+ />
238
+ ```
239
+
240
+ // attributes: { type: 'square', fileType: 'png/jpg', multiple: true, listStyle: { width: '96px', height: '96px' } }
241
+
242
+ ### 单图卡片 / 拖拽区(invoice / icon)
243
+ ```vue
244
+ <!-- invoice:虚线框 +「+」占位;icon:拖拽或点击热区 -->
245
+ <yl-file-upload
246
+ :platform-type="platformType"
247
+ :data="uploadData"
248
+ :upload-file="fileList"
249
+ :num-limit="1"
250
+ :byte-limit="2"
251
+ @setUploadFile="onSetUpload"
252
+ />
253
+ ```
254
+
255
+ // invoice: { type: 'invoice', fileType: 'png/jpg', tip: '…', listStyle: { width: '138px', height: '96px' } }
256
+ // icon: { type: 'icon', fileType: 'png/jpg', multiple: true, listStyle: { width: '255px', height: '136px' } }
257
+
258
+ ### 手动触发上传(autoUpload=false)
259
+ ```vue
260
+ <yl-file-upload
261
+ ref="fileUpload"
262
+ :platform-type="platformType"
263
+ :data="uploadData"
264
+ :upload-file="fileList"
265
+ :auto-upload="false"
266
+ :num-limit="3"
267
+ @setUploadFile="onSetUpload"
268
+ />
269
+ <el-button size="small" type="primary" @click="$refs.fileUpload.submit()">确认上传</el-button>
270
+ ```
271
+
272
+ ### 自定义上传区(customize 插槽)
273
+ ```vue
274
+ <yl-file-upload :data="uploadData" :upload-file="fileList" @setUploadFile="onSetUpload">
275
+ <template #customize>
276
+ <el-button type="primary" size="small">选择并上传</el-button>
277
+ </template>
278
+ </yl-file-upload>
279
+ ```
280
+
281
+ // attributes.type 须为 'customize'
282
+
283
+ ## 注意事项
284
+ - 展示由 `data.attributes.type` 决定;`uploadFile` 受控,在 `setUploadFile` / `removeUploadFile` 中同步 `fileList = fileList`。
285
+ - 场景:表单项标签 + 组件 + 下方次要提示(`form-item-hint`);格式/大小约束放 `attributes.tip`。
286
+ - `data.request.url` 与 `options.bizType` 建议显式配置;未传 `url` 时由 `platformType` 推导默认上传地址。
287
+ - `reUploadBtn` 多用于单文件;与多文件 `numLimit` 勿随意混用(以业务实测为准)。
288
+ - `type: list` 超长文件名用 `truncatedFileNameLimit`;`type: multi` 以「已上传文件(n/m)」汇总。
289
+ - 图片预览依赖上传返回的 `previewUrl`;`beforeUpload` 返回 `false` 时勿假设文件已进入列表。
290
+ - `autoUpload=false` 时在业务确定按钮调用 `$refs.xxx.submit()`;演示/规范平台可用 `:auto-upload="false"` 避免真实上传。
291
+ - 详情/审核页**右侧大块预览**用 **`ylPreview`**(见 preview skill),勿与上传组件弹窗预览混用。
@@ -0,0 +1,118 @@
1
+ ---
2
+ name: xiaoma-zqyl-flow-chart-front
3
+ description: 前台工作流组件(BPMN 流程图、节点高亮、模板预览)的 Vue2 + zqyl-component-base 实现规范(ylFlowChart)。在用户提及 ylFlowChart、yl-flow-chart、工作流组件、流程图、BPMN、审批流程,或需要在前台实现该组件时使用。适用于前台门户仓库(如 zqyl-crclopen,platformType `yx`;页头/表格用 ylTitle + ylTableSimple)。 Use when implementing or reviewing the flow-chart (ylFlowChart) component on a ZQYL front page.
4
+ ---
5
+
6
+ # 工作流组件(前台)
7
+
8
+ 你是一个前端组件实现与改造助手。你必须严格按本技能的规则输出。
9
+
10
+ ## 适用范围
11
+ - 平台:前台
12
+ - platformType:`yx`
13
+ - 组件条目:`flowChart`
14
+
15
+ ## 目标
16
+ - 当用户提到该组件/场景时,给出可落地的 Vue2 + Element UI + zqyl-component-base 代码片段与参数建议。
17
+ - 不改变业务行为,仅替换/补齐结构与交互规范。
18
+
19
+ ## 组件注册(必读)
20
+
21
+ - `zqyl-component-base` 公共组件在**项目入口**按组件名逐个 `import 'zqyl-component-base/lib/<ComponentName>'` + `Vue.component` 注册;样式在入口引入 `component.css`。
22
+ - **禁止** `import zqylComponentBase from 'zqyl-component-base'` + `Vue.use(zqylComponentBase)`;页面模板直接使用 `<yl-*>`,**勿**单页重复 import。
23
+ - 生成前先检查入口是否已注册本页用到的组件;缺失则仅在入口补注册。
24
+
25
+ ## 输出要求
26
+ - 回答用户时:根据用户输入与页面场景,只输出**一段**最符合需求的 Vue 代码(可直接粘贴),并简要说明关键 props/注意事项。
27
+ - 不要在一次回答中罗列多种候选实现;不要输出“变体 A/B/C/D”或“方案一/方案二”等对比式内容。
28
+ - 本技能文档「示例」章节含多种参考写法,仅供你内部分析选型;**不得**把多个示例原样全部贴给用户。
29
+ - 示例代码必须可直接粘贴使用(Vue2 单文件组件片段)。
30
+
31
+ ## 数据与接口(禁止 mock)
32
+
33
+ - **禁止**在生成业务页面中填充 mock、演示、假数据或静态业务行(如手写 `loadData: [{ companyName: 'xxx' }]`、`reqData` 示例值、`mounted` 里写死 `total` 等)。
34
+ - 列表/表格:`tableData.loadData` 保持 `[]`,数据由 `ylTableSimple` / `ylMpsTable` 通过 `searchParmas.request` / `queryListUrl` **调接口**获取;`request.url` / `queryListUrl` 写项目已有 `INTERFACE.xxx`,未知时留 `''` 并注释 `// TODO: 补充接口常量`。
35
+ - 查询区:`searchParmas.request` 配置 `url`、`type`、`method`、`options`;有 `url` 时 `:load="true"`(或省略,默认加载),由组件触发查询。
36
+ - 表单详情:`reqData` / 表单 model 初始 `{}` 或字段空值;在 `created` / `mounted` 调详情接口赋值;**禁止**预填示例姓名、金额等。
37
+ - 下拉/枚举:`select` 的 `data` 从字典或接口加载,无数据时 `data: []`;**禁止**写死 `{ name: '待审核', code: '1' }` 类占位项(除非需求明确给定静态枚举)。
38
+ - 统计区 `ylDataCensus`:`:list` 由接口或 `computed` 赋值,**禁止**手写示例金额/数量。
39
+ - 动态行表格:`detailRows` 等初始 `[]`,由接口回显或用户操作增删。
40
+ - 本 skill「示例」章节的静态数据**仅供理解组件 API**;生成业务页面时**不得**照搬进 `data()`。
41
+
42
+ ## 何时使用(智能体选择规则)
43
+
44
+ 当需求/页面出现以下任一信号时,必须优先调用本 skills 并按规则产出代码:
45
+ - 需要展示**审批/业务流程进度**(BPMN 流程图、节点高亮)。
46
+ - 需要预览**流程模板配置**(审批企业、岗位、审批人)。
47
+ - 用户提到「yl-flow-chart」、「ylFlowChart」、「工作流组件」、「流程图」、「BPMN」时。
48
+
49
+ 不适用:数据统计图表 → 使用 `ylLineChart` / `ylBarChart` 等 ECharts 组件;纯表单审批操作 → 使用 `ylFormEditor` 等业务组件。
50
+
51
+ ## API(ylFlowChart)
52
+
53
+ > 标签:`<yl-flow-chart>` / `ylFlowChart`;须在入口 `import ylFlowChart from 'zqyl-component-base/lib/ylFlowChart'` + `Vue.component('ylFlowChart', ylFlowChart)` 注册;页面模板直接使用,**勿**单页 import;**禁止**全量 `Vue.use(zqylComponentBase)`。
54
+
55
+ ### Props
56
+
57
+ | 属性名 | 类型 | 默认值 | 是否必填 | 说明 |
58
+ | --- | --- | --- | --- | --- |
59
+ | `bpmnObj` | Object | `null` | 是 | BPMN 流程数据对象 |
60
+ | `btnName` | String | `''` | 否 | 按钮名称(待办节点文案) |
61
+ | `isModel` | Boolean | `false` | 否 | 是否为模板或流程实例视图 |
62
+
63
+ ### `bpmnObj` 数据结构
64
+
65
+ 可从接口 `/zqyl-workflow-api/flowable/act/process/getBpmn` 获取。
66
+
67
+ | 属性名 | 类型 | 说明 |
68
+ | --- | --- | --- |
69
+ | `bpmnModel` | Object | BPMN 模型数据(含 mainProcess、locationMap、flowLocationMap 等) |
70
+ | `finishTaskInfos` | Array | 已完成任务信息 |
71
+ | `highLightedActivitiIdList` | Array | 已完成节点 ID 列表 |
72
+ | `runningActivitiIdList` | Array | 进行中节点 ID 列表 |
73
+ | `highLightedFlowIds` | Array | 已完成连线 ID 列表 |
74
+ | `userList` | Array | 用户列表 |
75
+ | `userInfo` | Array | 用户信息 |
76
+ | `companyInfo` | Array | 企业信息 |
77
+ | `positionInfo` | Array | 岗位信息 |
78
+
79
+ ### Events
80
+
81
+ | 事件名 | 说明 | 回调参数 |
82
+ | --- | --- | --- |
83
+ | `changeFlowWidth` | 流程图宽度变化时触发 | `width: Number` — 新的宽度值 |
84
+
85
+ ### Slots
86
+
87
+ 无对外插槽。
88
+
89
+ ## 示例(参考写法,回答用户时只选用其中一种)
90
+
91
+ ### 基础用法(流程实例)
92
+ ```vue
93
+ <yl-flow-chart
94
+ :bpmnObj="bpmnData"
95
+ :key="flowChartKey"
96
+ @changeFlowWidth="handleWidthChange"
97
+ />
98
+ ```
99
+
100
+ ```js
101
+ // async mounted() {
102
+ // const res = await this.$axios.get('/zqyl-workflow-api/flowable/act/process/getBpmn', { params });
103
+ // this.bpmnData = res.data.data;
104
+ // this.flowChartKey = Date.now();
105
+ // }
106
+ ```
107
+
108
+ ### 模板预览
109
+ ```vue
110
+ <yl-flow-chart :bpmnObj="bpmnData" :isModel="true" btnName="审批" />
111
+ ```
112
+
113
+ ## 注意事项
114
+ - `bpmnObj` 须由接口赋值;**禁止**在业务页长期手写完整 BPMN 假数据,接口未就绪时先空对象,请求后再更新并刷新 `:key`。
115
+ - `isModel: true` 展示模板配置(审批企业/岗位/审批人);`false` 展示实例进度(完成人、时间、状态)。
116
+ - 数据变化后更新 `:key`(如 `Date.now()` 或 `Math.random()`)以强制组件重绘。
117
+ - 监听 `changeFlowWidth` 调整外层容器宽度或开启横向滚动,避免宽流程图被截断。
118
+ - 组件基于 dagre-d3 渲染;依赖项目已注入的 `$function.BASE.getBrowser()`。