@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,167 @@
1
+ # 云链 Design Tokens 速查
2
+
3
+ 数据来源:`src/utils/tokens.js`。
4
+
5
+ ## 维护方式
6
+
7
+ - **三端分块维护**:后台 / 中台 / 前台各一节;有差异时只改对应端的「覆盖项」,不必动其他端。
8
+ - **当前状态**:前台与后台一致;**中台**卡片间距 `8px 8px 0`(`spacingBase` 8px)。
9
+ - **代码侧**:`tokens.js` 中 `backendTokens` 为基准;`frontTokenOverrides` 为空;`midTokenOverrides` 覆盖卡片间距。
10
+
11
+ ---
12
+
13
+ ## 后台 backend(基准 · zqyl-manager)
14
+
15
+ ### Colors
16
+
17
+ | Token | 值 | 用途 |
18
+ | --- | --- | --- |
19
+ | primary | `#288CE9` | 品牌色、链接、Tab 下划线等 |
20
+ | buttonPrimary | `#179CFF` | **实心主按钮**(`type="primary"`) |
21
+ | buttonPrimaryHover | `#45B0FF` | 主按钮 hover |
22
+ | success | `#67C23A` | 成功状态 |
23
+ | warning | `#E6A23C` | 警告 |
24
+ | danger | `#F56C6C` | 错误/删除 |
25
+ | textPrimary | `#303133` | 标题、表头 |
26
+ | textBody | `#606266` | 正文 |
27
+ | textMinor | `#909399` | 次要文字 |
28
+ | textTips | `#C0C4CC` | 占位、禁用 |
29
+ | border | `#DCDFE6` | 输入框边框 |
30
+ | tableBorder | `#EBEEF5` | 表格边框 |
31
+ | tableLine | `#E8E8E8` | 表格分割线 |
32
+ | bgSplit | `#FAFAFA` | 斑马/分割背景 |
33
+ | bgContainer | `#F5F7FA` | 页面背景 |
34
+ | bgCard | `#FFFFFF` | 卡片背景 |
35
+ | menuBg | `#1E222D` | 侧栏背景 |
36
+ | lightAccent | `#FF5800` | 高亮强调 |
37
+
38
+ ### Spacing
39
+
40
+ | Token | 值 | 说明 |
41
+ | --- | --- | --- |
42
+ | cardMargin | `16px 16px 0` | 卡片外边距 |
43
+ | cardPadding | 24px | 卡片内边距 |
44
+ | formItemGapRight | 24px | 表单项水平间距 |
45
+ | formItemGapBottom | 16px | 表单项垂直间距 |
46
+ | formContentWidth | 240px | 查询/表单控件默认宽度 |
47
+ | formContentCascaderWidth | 360px | 级联选择宽度 |
48
+ | btnGap | 8px | 按钮间距 |
49
+ | searchFormMarginBottom | -16px | 查询区与下方内容叠边距 |
50
+ | dialogPadding | 24px | 弹窗内容区内边距 |
51
+ | containerPaddingX | 24px | 页面容器水平内边距 |
52
+ | tableCellPaddingX | 16px | 表格单元格水平内边距 |
53
+
54
+ ### Typography
55
+
56
+ | 字号 | 用途 |
57
+ | --- | --- |
58
+ | 12px | 辅助说明 |
59
+ | 14px | 正文、表格、按钮(默认) |
60
+ | 16px | 小标题 |
61
+ | 20px / 24px / 30px / 38px | 大标题、统计数字 |
62
+
63
+ 字重:normal 400 / medium 500 / bold 700
64
+
65
+ ### Layout
66
+
67
+ | Token | 值 | 说明 |
68
+ | --- | --- | --- |
69
+ | titleBarHeight | 56px | 页面标题栏高度 |
70
+ | titleBarPaddingX | 24px | 标题栏水平内边距 |
71
+ | tabsHeight | 36px | Tab 栏高度 |
72
+ | tableHeaderHeight | 23px | 表头行高 |
73
+ | tableRowPaddingY | 12px | 表格行垂直内边距 |
74
+ | tableCellLineHeight | 22px | 表格单元格行高 |
75
+ | searchFormItemHeight | 32px | 查询表单项高度 |
76
+ | buttonPadding | `8px 15px` | 按钮内边距 |
77
+ | buttonFontSize | 14px | 按钮字号 |
78
+ | dialogHeaderPadding | 24px | 弹窗头部内边距 |
79
+ | dialogBodyPadding | `0 24px` | 弹窗内容区内边距 |
80
+ | dialogFooterPadding | 24px | 弹窗底部内边距 |
81
+ | scrollbarWidth | 8px | 滚动条宽度 |
82
+ | subheadingLineHeight | 32px | 卡片小标题行高 |
83
+ | subheadingPaddingLeft | 20px | 小标题左内边距 |
84
+ | subheadingMarginBottom | 24px | 小标题下间距 |
85
+ | subheadingIndicatorWidth | 4px | 小标题左侧指示条宽度 |
86
+ | subheadingIndicatorHeight | 24px | 小标题左侧指示条高度 |
87
+
88
+ ### 规范常量 Spec Constants
89
+
90
+ 与 Spacing / Layout 互补;对应 CSS 变量或组件行为规则。
91
+
92
+ | Token | 值 | 说明 |
93
+ | --- | --- | --- |
94
+ | spacingBase | 16px | 通用区块间距(与 cardMargin 一致) |
95
+ | formInputMaxWidth | 480px | 表单框体最大宽度 |
96
+ | formLabelMaxChars | 8 | 多列表单/查询标题建议最多字数;**单列表单不限,完整展示** |
97
+ | formConditionThreshold | 3 | 查询条件 ≥3 时显示「重置」 |
98
+ | dialogMaxHeight | 550px | 弹窗内容区最大高度 |
99
+ | dialogMinHeight | 200px | 弹窗最小高度 |
100
+ | tablePageSizeDefault | 20 | 表格默认每页条数 |
101
+ | tablePageSizes | 20, 50, 100 | 可选分页条数 |
102
+ | tableEmptyFill | - | 空单元格占位符 |
103
+ | tableHeaderDescInlineMax | 40 | 表头说明行内展示最大字数 |
104
+ | tipsMinHeight | 46px | ylTips 最小高度 |
105
+ | tipsPaddingX | 16px | ylTips 左右内边距 |
106
+ | tableOperateWidth | 120px | 表格行内操作列默认宽度 |
107
+
108
+ ### Shadows & Radius
109
+
110
+ | 项 | 值 |
111
+ | --- | --- |
112
+ | card shadow | `0 0 5px 0 rgba(0,0,0,0.09)` |
113
+ | message shadow | `0px 4px 16px 0px rgba(0,0,0,0.10)` |
114
+ | borderRadius default/button | 3px |
115
+ | borderRadius dialog | 2px |
116
+ | borderRadius card | 4px |
117
+
118
+ ---
119
+
120
+ ## 中台 mid(mps-main)
121
+
122
+ > 默认继承**后台**全部 Token。下表仅列出与后台**不同**的项;空白表示当前无差异。
123
+
124
+ ### 覆盖项(midTokenOverrides)
125
+
126
+ | 分组 | Token | 值 | 说明 |
127
+ | --- | --- | --- | --- |
128
+ | spacing | cardMargin | `8px 8px 0` | 卡片外边距 |
129
+ | spacing | searchFormMarginBottom | -8px | 查询区与下方内容叠边距 |
130
+ | specConstants | spacingBase | 8px | 通用区块间距 |
131
+
132
+ ---
133
+
134
+ ## 前台 front(zqyl-crclopen)
135
+
136
+ > 默认继承**后台**全部 Token。下表仅列出与后台**不同**的项;空白表示当前无差异。
137
+
138
+ ### 覆盖项(frontTokenOverrides)
139
+
140
+ | 分组 | Token | 值 | 说明 |
141
+ | --- | --- | --- | --- |
142
+ | — | — | — | **当前无覆盖,与后台一致** |
143
+
144
+ ---
145
+
146
+ ## 三端差异(组件选型,非 Token)
147
+
148
+ | 维度 | 后台 | 中台 | 前台 |
149
+ | --- | --- | --- | --- |
150
+ | 标题组件 | ylTitle / ylManagerTitle | ylManagerTitle | ylTitle |
151
+ | 表格组件 | ylTableSimple | ylMpsTable | ylTableSimple |
152
+ | 列表页骨架 | ylTitle + 可选 Tab | ylManagerTitle + ylMpsTable | ylTitle + ylTableSimple |
153
+
154
+ ---
155
+
156
+ ## 后续有差异时怎么改
157
+
158
+ **代码**(`src/utils/tokens.js`):
159
+
160
+ ```javascript
161
+ const midTokenOverrides = {
162
+ borderRadius: { card: 4 },
163
+ spacing: { cardPadding: 14 },
164
+ };
165
+ ```
166
+
167
+ **文档**:在对应平台的「覆盖项」表中追加一行,并更新 `SKILL.md` 平台对照表(如有视觉规则变化)。
@@ -0,0 +1,385 @@
1
+ # 云链交互规范 — 完整参考
2
+
3
+ 本文件供 SKILL.md 未覆盖的细节查阅。
4
+
5
+ ---
6
+
7
+ ## 1. 布局
8
+
9
+ ### 1.1 基础布局(侧导航 + 内容区)
10
+
11
+ - 顶部导航位于最上层,导航下方阴影位于页面标题之上
12
+ - 边距、卡片间距:前台/后台 **16px**,中台 **8px**
13
+ - 侧导航 + 右侧内容区结构
14
+
15
+ ### 1.2 通栏布局(无侧导航)
16
+
17
+ - 内容页只能通过顶部导航访问或不在侧导航索引范围内时使用
18
+ - 卡片四边间距:前台/后台 16px,中台 8px;卡片有阴影
19
+
20
+ ### 1.3 鼠标指针
21
+
22
+ - 悬浮在可点击、下拉可点击的内容上时,`cursor: pointer`
23
+
24
+ ---
25
+
26
+ ## 2. 页面标题
27
+
28
+ ### 2.1 一级标题
29
+
30
+ - 位于顶部导航下方,与顶部导航相连无间隙
31
+ - 顶部导航位于页面标题上层,阴影覆盖在页面标题上
32
+
33
+ ### 2.2 标题带标签页
34
+
35
+ - 页面内容需按维度切换时使用
36
+ - 可统计数据:标签文字后括号标注数量,如 `标签名(12)`
37
+ - 需用户确认或推进流程:相应标签右上角红点
38
+
39
+ ### 2.3 二级标题
40
+
41
+ - 用于二级及以下页面
42
+ - **返回按钮(需求未说明位置时)**:
43
+ - **前台 / 中台**:`ylTitle` **左侧**(`:disabledBack="false"`,带返回标题组件)
44
+ - **后台**:`ylTitle` **右侧插槽**(`:disabledBack="true"` 隐藏左侧返回)
45
+ - 标题右侧放针对当前页面的全局操作按钮(保存/提交/确认等;后台含返回)
46
+ - 可带标签页
47
+
48
+ ### 2.4 特殊标题
49
+
50
+ - 特殊场景(带统计、多级面包屑等)
51
+
52
+ ---
53
+
54
+ ## 3. 查询表格
55
+
56
+ ### 3.1 查询条件
57
+
58
+ - 输入框宽度固定;标题建议 ≤8 字
59
+ - 查询条件间距固定
60
+ - 按页面宽度排列,不足换行
61
+ - **< 3 个**:只保留查询按钮
62
+ - **≥ 3 个**:查询 + 重置
63
+ - 查询按钮与条件左对齐
64
+ - 条件少时可与表格同卡片
65
+
66
+ ### 3.2 快捷查询
67
+
68
+ - 快捷筛选标签,点击即筛选
69
+
70
+ ### 3.3 表格操作
71
+
72
+ **整体操作**
73
+
74
+ - 针对整体或多条:新增、批量导入、批量导出等
75
+ - 表格上方,与表格右对齐;最重要操作在最右
76
+ - 主按钮 + 次要按钮;不改变表格数据的操作用文字链接
77
+ - 频繁/引导操作 = primary,**最多 1 个**
78
+
79
+ **单行操作顺序**
80
+
81
+ 1. 流程类:申请、支付、还款、邀请、上传
82
+ 2. 常规类:查看、编辑
83
+ 3. 低频类:下载、导出
84
+ 4. 删除:最后
85
+
86
+ **按钮样式**
87
+
88
+ - 仅 1 个按钮:建议 primary(编辑/删除/下载导出除外)
89
+ - 多个按钮:最多 1 个 primary;有新增时新增为 primary
90
+ - 跳转其他页面/网站:文字链接 + 前置图标
91
+
92
+ ### 3.4 分页
93
+
94
+ - 默认 20 条/页;可选 20、50、100
95
+
96
+ ---
97
+
98
+ ## 4. 表格基础规则
99
+
100
+ ### 4.1 对齐
101
+
102
+ - 以左对齐为主
103
+ - 小写金额、数量等右对齐;大写金额左对齐
104
+ - 列宽 = 内容区 + 两侧固定边距
105
+
106
+ ### 4.2 自适应
107
+
108
+ **最小宽度建议**
109
+
110
+ | 字段类型 | 最小宽度 |
111
+ | --- | --- |
112
+ | 编号类 | ~200px |
113
+ | 公司名 | ~180px |
114
+ | 金额 | ~120px |
115
+ | 时间 | ~110px |
116
+ | 人员姓名 | ~80px |
117
+ | 状态/枚举 | ~80px |
118
+
119
+ **溢出**
120
+
121
+ - 文字超出:`…` + hover Tooltip
122
+ - 各列达最小宽仍超出:水平滚动;标题列 + 操作列固定
123
+
124
+ ### 4.3 填写
125
+
126
+ - 空值用 `-`,不可留空
127
+ - 流程中暂空、审核后才有数据的单元格可为空
128
+
129
+ ### 4.4 特殊状态/标识
130
+
131
+ - 按场景提供不同强调等级
132
+ - 可单独标识或附加在其他列后
133
+
134
+ ### 4.5 排序
135
+
136
+ - 点击排序图标升序/降序
137
+
138
+ ### 4.6 无数据
139
+
140
+ - 「暂无数据」占位
141
+
142
+ ### 4.7 悬停
143
+
144
+ - `…` 文字:Tooltip 全文
145
+ - 表头说明图标:显示说明
146
+ - 文字后提示图标:详细释义
147
+
148
+ ### 4.0 表格组件选型
149
+
150
+ - **全页数据表格优先 `ylTableSimple`**(列表、表单详情、弹窗、抽屉、反馈页等)
151
+ - **中台列表页**主表格默认 **`ylMpsTable`**
152
+ - **禁止**默认手写 `el-table`;仅 `ylTableSimple` 无法满足且需求明确要求原生特性时才降级
153
+
154
+ ### 4.8 降级 el-table 时的边框
155
+
156
+ - 极少数降级使用 Element UI **`el-table`** 时,需求**未明确要求**表格边框 → **不要**添加 `border` 属性
157
+ - 默认依赖平台/卡片内表格样式(如 `el-card.yl-tabs-table` 下的表格线),保持与 `ylTableSimple` 视觉一致
158
+ - 仅当需求/原型**明确**要求边框,或合并单元格等场景需竖线区分区域时,才写 `border` 或等价样式
159
+
160
+ ---
161
+
162
+ ## 5. 表格样式变体
163
+
164
+ ### 5.1 基础表格
165
+
166
+ - 表头过长可折行,最多 2 行
167
+ - 合并单元格时增加竖线
168
+
169
+ ### 5.2 多选表格
170
+
171
+ - 全选框在首列前
172
+ - 部分行可置灰不可选
173
+ - 勾选后表头显示「已选 N 条」
174
+ - 未全选:半选 indeterminate
175
+
176
+ ### 5.3 可展开表格
177
+
178
+ **子表格类**:嵌套子表格,数据可控;子表格无分页
179
+
180
+ **文字信息类**:展开更多字段;收纳低重要度字段;常用字段不放此处
181
+
182
+ ### 5.4 可编辑表格
183
+
184
+ - 默认普通态,点击编辑进入单行编辑
185
+ - 新增:小标题行右侧按钮(需求未说明位置时)
186
+ - 使用 **`ylTableSimple`**(`:isTableForm="true"` 或自定义 `slot` 列)承载行内编辑/动态行
187
+
188
+ ### 5.5 表格变体场景
189
+
190
+ | 变体 | 说明 |
191
+ | --- | --- |
192
+ | 基础查询表格 | 标准查询 + 表格;含页级 Tab 时见 `xiaoma-zqyl-list-page-{平台}` |
193
+ | 表格带标签 | Tab 切换;改查询各 Tab 同步 |
194
+ | 双重标签 | 页级 Tab + 表格内 Tab 带查询(二级标签支持查询) |
195
+ | 统计 | 标题下大数字 + 标签 |
196
+ | 极简查询 | 查询项少;操作按钮与查询同一行(`rightBtn`) |
197
+
198
+ ---
199
+
200
+ ## 6. 表单
201
+
202
+ ### 6.1 表单标题
203
+
204
+ - 与卡片标题样式一致
205
+
206
+ ### 6.2 适配
207
+
208
+ - 复合表单:按列均分,每列左对齐
209
+ - 标题宽度固定;框体等比缩放,**最大 480px**
210
+
211
+ ### 6.3–6.5 列布局
212
+
213
+ - 单列:单卡片居中;提交在表单项最下方;**不加** `el-card-padding-bottom0`;`label-width="auto"`,表单项标题完整展示(取消组件库 label `ellipsis`)
214
+ - 双列/三列:等宽;`ylFormEditor` 在 `layout="double"` 时字段默认半行(`span: 12`),勿因日期区间等较宽控件擅自 `span: 24`;独占整行须原型明确(见 `xiaoma-zqyl-form-editor-{平台}` span 选型)
215
+
216
+ ### 6.6 只读
217
+
218
+ - 内容跟随标题左对齐;标题不折行、内容折行
219
+ - 三列长项独占一行
220
+ - 无必填 `*`、无填写提示;理解性提示可保留
221
+
222
+ ### 6.7 复合表单
223
+
224
+ - 单列表单与多列表单/表格同页:单列表单左对齐
225
+ - 全只读卡片 → **`ylFormView`**
226
+ - **只读 + 待填(同卡混排)→ 单个 `ylFormEditor`**;只读项 `disabled: true`;**禁止**同卡 `ylFormView` + `ylFormEditor` 拆分
227
+
228
+ ### 6.8 文件上传
229
+
230
+ 见 SKILL.md「文件上传」;组件 `yl-file-upload`。
231
+
232
+ ---
233
+
234
+ ## 7. 表单模板
235
+
236
+ ### 7.1 操作按钮位置
237
+
238
+ - **返回(需求未说明)**:**前台/中台** → `ylTitle` **左侧**(`:disabledBack="false"`);**后台** → `ylTitle` **右侧插槽**(`:disabledBack="true"`)
239
+ - **其他页面级**(需求未说明):保存/取消/确认/提交等 → **`ylTitle` 右侧插槽**;**不要**使用 `ylContainerFoot`
240
+ - **卡片小标题 class(强制)**
241
+ - **后台 backend**:`yl_manager_subheading`(加粗 16px + 左侧蓝色竖条)
242
+ - **中台 mid / 前台 front**:`yl-title-sub`(14px,无竖条)
243
+ - **禁止跨端混用**;中台/前台**不得**因 legacy 页或后台 showcase 示例而使用 `yl_manager_subheading`
244
+ - **卡片模块级**(需求未说明):某卡片内操作(如「添加」行、「导入一行」)→ **小标题同一行右侧**(`el-row.mb16` + 左 **按平台选用上表 class** + 右 `text-right`);**勿**默认放在表格下方或内容区最底部
245
+ - **置底**(需求明确要求):多卡片表单且需求写明「底部置底 / 底栏固定 / 页面底部按钮」时,使用 `ylContainerFoot`
246
+ - **置底按钮居中(强制)**:`ylContainerFoot` 主操作按钮**默认居中**,须放 **`#center` 插槽**;协议/Ukey 等辅助文案放 **`#left`**;**禁止**默认插槽 + `justify-content: space-between` 将按钮顶到右侧(详见 `xiaoma-zqyl-container-foot-{平台}` skill)
247
+
248
+ ### 7.2 分步表单
249
+
250
+ - 冗长或不熟悉任务分步;注意信息分类与页面层级
251
+
252
+ ---
253
+
254
+ ## 8. 弹窗
255
+
256
+ ### 8.1 类型
257
+
258
+ | 类型 | 说明 |
259
+ | --- | --- |
260
+ | 基础表格弹窗 | 仅查看;不展示底部操作按钮;内容区保留 24px 底边距;分页与列表页一致 |
261
+ | 单选表格弹窗 | 未选时按钮置灰 |
262
+ | 多选表格弹窗 | 未选时按钮置灰;多选与表格一致 |
263
+
264
+ ### 8.2 说明引导
265
+
266
+ - 标题右侧:弹窗整体说明
267
+ - 表格上方:表格相关信息
268
+ - 弹窗底部:附加提示(重要性次之)
269
+
270
+ ### 8.3 弹窗表单
271
+
272
+ - 不支持三列;内容区高度 200px ~ 550px;不建议复杂流程
273
+
274
+ ### 8.4 滚动
275
+
276
+ - 单行查询:查询 + 表头置顶,只滚表格;分页与列表页一致
277
+ - 多行查询:查询与表格同滚;默认 20 条
278
+ - 合计行一般置底;分页展示与列表页一致
279
+
280
+ ### 8.5 表格组件
281
+
282
+ - **全页数据表格优先 `ylTableSimple`**,不使用 `el-table`
283
+ - 中台列表页主表格默认 `ylMpsTable`
284
+ - 行内操作(下载/删除/预览等)用 `attr.type: 'handle'`
285
+ - 须设置 `data.attributes.height`,仅表格体滚动
286
+
287
+ ### 8.6 支持功能
288
+
289
+ - 查询、合计、多标签
290
+
291
+ ### 8.7 图片弹窗
292
+
293
+ - 尺寸视业务;首图位置上传;最新在首图右侧
294
+
295
+ ### 8.8 附件弹窗
296
+
297
+ - 表格用 **`ylTableSimple`**;文件名 + 下载/预览/删除(`attr.type: 'handle'`);可上传
298
+
299
+ ### 8.9 多层级
300
+
301
+ - 弹窗上再弹窗
302
+
303
+ ---
304
+
305
+ ## 9. 抽屉
306
+
307
+ - 自屏幕边缘划出;比弹窗纵向空间更大
308
+ - 适用于详情或较大操作空间
309
+ - **标题**:颜色 `#303133`、加粗;距下方内容区 **24px**
310
+
311
+ ---
312
+
313
+ ## 10. 提示
314
+
315
+ ### 10.1 警告提示 Alert
316
+
317
+ **警示类**:权限等,加载校验,常显;标准/简略/极简
318
+
319
+ **信息类**:操作前须知,可关闭;标准/简略/极简
320
+
321
+ ### 10.2 位置
322
+
323
+ | 位置 | 说明 |
324
+ | --- | --- |
325
+ | 全局 | 页面顶部或标题下方 |
326
+ | 卡片 | 卡片内,标题下方 |
327
+ | 表单项 | 框体下方 |
328
+
329
+ ---
330
+
331
+ ## 11. 文字说明
332
+
333
+ ### 11.1 操作说明
334
+
335
+ - 弱于警示;标题下方,简短
336
+ - 表单:子标题 + 说明在标题下
337
+ - 表格:≤40 字可与按钮同行;超出整行;重要信息警示色
338
+
339
+ ### 11.2 注释说明
340
+
341
+ - 低优先级;表单/表格底部
342
+ - 跳转用文字链接
343
+
344
+ ---
345
+
346
+ ## 12. 气泡提示 Popover
347
+
348
+ - 需特别关注的位置;可带「知道了」
349
+
350
+ ---
351
+
352
+ ## 13. 反馈
353
+
354
+ | 类型 | 场景 |
355
+ | --- | --- |
356
+ | 表单校验 | 输入框标红 + 下方错误文案 |
357
+ | 可编辑表格校验 | 框体下方及时反馈 |
358
+ | 提示说明 | 框体下方左对齐;重要时可改颜色 |
359
+ | Message | 操作成功,自动消失 |
360
+ | MessageBox | 打断操作,引导下一步;不传 `type`,无左侧图标 |
361
+ | 弹窗提示 | 复杂反馈 |
362
+ | 结果页 | 操作完成跳转 |
363
+ | 数据异常页 | 无数据/崩溃 + 引导 |
364
+ | 弹窗无数据 | 保留标题/表头 |
365
+
366
+ ---
367
+
368
+ ## 组件行为速查
369
+
370
+ | 组件/场景 | 规则 |
371
+ | --- | --- |
372
+ | 表格空值 | `-` |
373
+ | 文字溢出 | ellipsis + hover Tooltip |
374
+ | 表格对齐 | 左对齐;金额/数量右对齐 |
375
+ | 操作排列 | 流程 > 常规 > 低频 > 删除 |
376
+ | 主按钮 | 整体操作最多 1 个 |
377
+ | 分页 | 20 / 50 / 100 |
378
+ | 查询 | <3 仅查询;≥3 查询+重置 |
379
+ | 表单框体 | 最大 480px |
380
+ | 只读表单 | 无 `*` 与填写提示 |
381
+ | 弹窗表单 | 无三列;200px ~ 550px |
382
+ | 文件上传 | yl-file-upload |
383
+ | 鼠标 | pointer |
384
+ | 表头折行 | 最多 2 行 |
385
+ | 子表格 | 无分页 |
@@ -5,6 +5,7 @@ const { promisify } = require('node:util');
5
5
  const fs = require('../fs-native');
6
6
  const crypto = require('node:crypto');
7
7
  const { resolveModuleVersion } = require('../modules/version-resolver');
8
+ const { BUILTIN_MODULE_CODES } = require('../project-root');
8
9
  const prompts = require('../prompts');
9
10
 
10
11
  const execFileAsync = promisify(execFile);
@@ -36,8 +37,8 @@ class Manifest {
36
37
  const moduleDetails = [];
37
38
  if (data.modules && Array.isArray(data.modules)) {
38
39
  for (const moduleName of data.modules) {
39
- // Core, XMC, and XPM modules use the XiaoMa version (built-in)
40
- const isBuiltIn = moduleName === 'core' || moduleName === 'xmc' || moduleName === 'xpm';
40
+ // Built-in modules (src/<code>-skills) use the XiaoMa version
41
+ const isBuiltIn = BUILTIN_MODULE_CODES.includes(moduleName);
41
42
  const moduleVersion = isBuiltIn ? xiaomaVersion : null;
42
43
  const now = data.installDate || new Date().toISOString();
43
44
 
@@ -281,7 +282,7 @@ class Manifest {
281
282
  */
282
283
  async getModuleVersionInfo(moduleName, xiaomaDir, moduleSourcePath = null) {
283
284
  // Resolve source type first, then read version with the correct path context
284
- if (['core', 'xmc', 'xpm'].includes(moduleName)) {
285
+ if (BUILTIN_MODULE_CODES.includes(moduleName)) {
285
286
  const versionInfo = await resolveModuleVersion(moduleName, { moduleSourcePath });
286
287
  return {
287
288
  version: versionInfo.version,
@@ -1,7 +1,7 @@
1
1
  const path = require('node:path');
2
2
  const fs = require('./fs-native');
3
3
  const yaml = require('yaml');
4
- const { getProjectRoot, getModulePath, getExternalModuleCachePath } = require('./project-root');
4
+ const { BUILTIN_MODULE_CODES, getProjectRoot, getModulePath, getExternalModuleCachePath } = require('./project-root');
5
5
 
6
6
  /**
7
7
  * Read a module.yaml and return its declared `code:` field, or null if missing/unparseable.
@@ -54,7 +54,7 @@ async function discoverOfficialModuleYamls() {
54
54
  };
55
55
 
56
56
  // Built-ins.
57
- for (const code of ['core', 'xmc', 'xpm']) {
57
+ for (const code of BUILTIN_MODULE_CODES) {
58
58
  const yamlPath = path.join(getModulePath(code), 'module.yaml');
59
59
  if (await fs.pathExists(yamlPath)) {
60
60
  // Built-ins use their well-known short codes regardless of what the
@@ -2,7 +2,7 @@ const path = require('node:path');
2
2
  const fs = require('../fs-native');
3
3
  const yaml = require('yaml');
4
4
  const prompts = require('../prompts');
5
- const { getProjectRoot, getSourcePath, getModulePath } = require('../project-root');
5
+ const { BUILTIN_MODULE_CODES, getProjectRoot, getSourcePath, getModulePath } = require('../project-root');
6
6
  const { CLIUtils } = require('../cli-utils');
7
7
  const { ExternalModuleManager } = require('./external-manager');
8
8
 
@@ -103,37 +103,21 @@ class OfficialModules {
103
103
  }
104
104
 
105
105
  /**
106
- * List all available built-in modules (core and xmc).
106
+ * List all available built-in modules (BUILTIN_MODULE_CODES, each at src/<code>-skills).
107
+ * Pre-selection is driven by each module.yaml's `default_selected`, so opt-in
108
+ * packs (xpm, zqyl) surface in the prompt unchecked.
107
109
  * All other modules come from external-official-modules.yaml
108
110
  * @returns {Object} Object with modules array
109
111
  */
110
112
  async listAvailable() {
111
113
  const modules = [];
112
114
 
113
- // Add built-in core module (directly under src/core-skills)
114
- const corePath = getSourcePath('core-skills');
115
- if (await fs.pathExists(corePath)) {
116
- const coreInfo = await this.getModuleInfo(corePath, 'core', 'src/core-skills');
117
- if (coreInfo) {
118
- modules.push(coreInfo);
119
- }
120
- }
121
-
122
- // Add built-in xmc module (directly under src/xmc-skills)
123
- const xmcPath = getSourcePath('xmc-skills');
124
- if (await fs.pathExists(xmcPath)) {
125
- const xmcInfo = await this.getModuleInfo(xmcPath, 'xmc', 'src/xmc-skills');
126
- if (xmcInfo) {
127
- modules.push(xmcInfo);
128
- }
129
- }
130
-
131
- // Add built-in xpm module (directly under src/xpm-skills) — opt-in (default_selected: false)
132
- const xpmPath = getSourcePath('xpm-skills');
133
- if (await fs.pathExists(xpmPath)) {
134
- const xpmInfo = await this.getModuleInfo(xpmPath, 'xpm', 'src/xpm-skills');
135
- if (xpmInfo) {
136
- modules.push(xpmInfo);
115
+ for (const code of BUILTIN_MODULE_CODES) {
116
+ const modulePath = getSourcePath(`${code}-skills`);
117
+ if (!(await fs.pathExists(modulePath))) continue;
118
+ const info = await this.getModuleInfo(modulePath, code, `src/${code}-skills`);
119
+ if (info) {
120
+ modules.push(info);
137
121
  }
138
122
  }
139
123
 
@@ -218,27 +202,11 @@ class OfficialModules {
218
202
  }
219
203
  const projectRoot = getProjectRoot();
220
204
 
221
- // Check for core module (directly under src/core-skills)
222
- if (moduleCode === 'core') {
223
- const corePath = getSourcePath('core-skills');
224
- if (await fs.pathExists(corePath)) {
225
- return corePath;
226
- }
227
- }
228
-
229
- // Check for built-in xmc module (directly under src/xmc-skills)
230
- if (moduleCode === 'xmc') {
231
- const xmcPath = getSourcePath('xmc-skills');
232
- if (await fs.pathExists(xmcPath)) {
233
- return xmcPath;
234
- }
235
- }
236
-
237
- // Check for built-in xpm module (directly under src/xpm-skills)
238
- if (moduleCode === 'xpm') {
239
- const xpmPath = getSourcePath('xpm-skills');
240
- if (await fs.pathExists(xpmPath)) {
241
- return xpmPath;
205
+ // Check for built-in modules (directly under src/<code>-skills)
206
+ if (BUILTIN_MODULE_CODES.includes(moduleCode)) {
207
+ const builtInPath = getSourcePath(`${moduleCode}-skills`);
208
+ if (await fs.pathExists(builtInPath)) {
209
+ return builtInPath;
242
210
  }
243
211
  }
244
212