openyida 2026.7.7 → 2026.7.9

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 (88) hide show
  1. package/README.md +4 -2
  2. package/bin/yida.js +4 -4
  3. package/lib/app/canvas-compile.js +303 -0
  4. package/lib/app/publish.js +190 -39
  5. package/lib/auth/auth.js +11 -3
  6. package/lib/auth/login.js +34 -15
  7. package/lib/core/command-manifest.js +1 -1
  8. package/lib/core/env.js +19 -4
  9. package/lib/core/locales/ar.js +6 -2
  10. package/lib/core/locales/de.js +6 -2
  11. package/lib/core/locales/en.js +7 -3
  12. package/lib/core/locales/es.js +6 -2
  13. package/lib/core/locales/fr.js +6 -2
  14. package/lib/core/locales/hi.js +6 -2
  15. package/lib/core/locales/ja.js +7 -3
  16. package/lib/core/locales/ko.js +6 -2
  17. package/lib/core/locales/pt.js +6 -2
  18. package/lib/core/locales/vi.js +6 -2
  19. package/lib/core/locales/zh-HK.js +7 -3
  20. package/lib/core/locales/zh.js +7 -3
  21. package/lib/core/utils.js +195 -15
  22. package/lib/samples/yida-custom-page/custom-page-template.js +6 -6
  23. package/lib/samples/yida-custom-page/design-tokens.js +14 -12
  24. package/package.json +1 -1
  25. package/scripts/e2e-real/skill-coverage.js +4 -0
  26. package/scripts/validate-ci.sh +6 -0
  27. package/scripts/validate-package-size.js +12 -1
  28. package/yida-skills/SKILL.md +21 -6
  29. package/yida-skills/references/development-rules.md +13 -9
  30. package/yida-skills/references/field-and-url-reference.md +14 -1
  31. package/yida-skills/skills/large-file-write/SKILL.md +12 -10
  32. package/yida-skills/skills/large-file-write/references/write-patterns.md +13 -15
  33. package/yida-skills/skills/large-file-write/scripts/write.js +10 -10
  34. package/yida-skills/skills/yida-app/SKILL.md +15 -8
  35. package/yida-skills/skills/yida-canvas-custom-page/SKILL.md +115 -0
  36. package/yida-skills/skills/yida-canvas-custom-page/references/canvas-authoring-examples.md +163 -0
  37. package/yida-skills/skills/yida-canvas-custom-page/references/canvas-design-system.md +148 -0
  38. package/yida-skills/skills/yida-canvas-custom-page/references/data-bridge-guide.md +115 -0
  39. package/yida-skills/skills/yida-canvas-custom-page/references/dependencies-and-cdn.md +45 -0
  40. package/yida-skills/skills/yida-canvas-custom-page/references/employeefield-verification.md +68 -0
  41. package/yida-skills/skills/yida-canvas-upgrade/SKILL.md +99 -0
  42. package/yida-skills/skills/yida-canvas-upgrade/references/migration-examples.md +69 -0
  43. package/yida-skills/skills/yida-chart/SKILL.md +2 -2
  44. package/yida-skills/skills/yida-chart/references/echarts-bindding-guide.md +5 -6
  45. package/yida-skills/skills/yida-chart/references/examples.md +2 -2
  46. package/yida-skills/skills/yida-connector/SKILL.md +4 -0
  47. package/yida-skills/skills/yida-connector-safe-actions/SKILL.md +7 -4
  48. package/yida-skills/skills/yida-create-form-page/SKILL.md +11 -8
  49. package/yida-skills/skills/yida-create-process/SKILL.md +10 -4
  50. package/yida-skills/skills/yida-custom-page/SKILL.md +17 -6
  51. package/yida-skills/skills/yida-custom-page/examples/attachment-upload.js +1 -1
  52. package/yida-skills/skills/yida-custom-page/references/coding-guide.md +3 -3
  53. package/yida-skills/skills/yida-custom-page/references/component-jsx-guide.md +6 -3
  54. package/yida-skills/skills/yida-custom-page/references/design-system.md +30 -13
  55. package/yida-skills/skills/yida-data-management/SKILL.md +14 -11
  56. package/yida-skills/skills/yida-data-source-connectors/SKILL.md +3 -1
  57. package/yida-skills/skills/yida-flash-note-to-prd/references/examples.md +3 -2
  58. package/yida-skills/skills/yida-formula/references/examples.md +4 -4
  59. package/yida-skills/skills/yida-formula-evaluate/SKILL.md +4 -2
  60. package/yida-skills/skills/yida-get-schema/SKILL.md +14 -5
  61. package/yida-skills/skills/yida-i18n/SKILL.md +4 -2
  62. package/yida-skills/skills/yida-integration/SKILL.md +4 -1
  63. package/yida-skills/skills/yida-integration/references/examples.md +2 -2
  64. package/yida-skills/skills/yida-nav-shell/SKILL.md +119 -0
  65. package/yida-skills/skills/yida-nav-shell/references/nav-shell-patterns.md +302 -0
  66. package/yida-skills/skills/yida-openyida-publish-guard/SKILL.md +2 -2
  67. package/yida-skills/skills/yida-page-config/SKILL.md +1 -0
  68. package/yida-skills/skills/yida-page-uiux/SKILL.md +68 -0
  69. package/yida-skills/skills/yida-page-uiux/references/scenes/dashboard.md +128 -0
  70. package/yida-skills/skills/yida-page-uiux/references/scenes/detail.md +79 -0
  71. package/yida-skills/skills/yida-page-uiux/references/scenes/landing.md +101 -0
  72. package/yida-skills/skills/yida-page-uiux/references/scenes/list.md +78 -0
  73. package/yida-skills/skills/yida-page-uiux/references/scenes/workbench.md +74 -0
  74. package/yida-skills/skills/yida-page-uiux/references/visual-decision-engine.md +151 -0
  75. package/yida-skills/skills/yida-page-uiux/workflow/output-decision-block.md +36 -0
  76. package/yida-skills/skills/yida-page-uiux/workflow/step-0-nav-shape.md +39 -0
  77. package/yida-skills/skills/yida-page-uiux/workflow/step-1-page-type.md +25 -0
  78. package/yida-skills/skills/yida-page-uiux/workflow/step-2-intent-decode.md +25 -0
  79. package/yida-skills/skills/yida-page-uiux/workflow/step-3-scene-routing.md +29 -0
  80. package/yida-skills/skills/yida-page-uiux/workflow/step-4-visual-decision.md +32 -0
  81. package/yida-skills/skills/yida-page-uiux/workflow/step-5-icon-and-assets.md +36 -0
  82. package/yida-skills/skills/yida-page-uiux/workflow/step-6-deai-selfcheck.md +37 -0
  83. package/yida-skills/skills/yida-process-rule/SKILL.md +4 -1
  84. package/yida-skills/skills/yida-process-rule/references/examples.md +12 -12
  85. package/yida-skills/skills/yida-publish-page/SKILL.md +7 -3
  86. package/yida-skills/skills/yida-report/SKILL.md +5 -2
  87. package/yida-skills/skills/yida-report/references/examples.md +4 -4
  88. package/yida-skills/skills/yida-table-form/references/examples.md +2 -2
@@ -0,0 +1,69 @@
1
+ # Canvas 升级:转换模式示例与报告模板
2
+
3
+ 本文件承载 `yida-canvas-upgrade` 的完整代码示例与升级报告模板,SKILL.md 只保留步骤与链接。
4
+
5
+ ## 转换模式示例
6
+
7
+ 普通页面(native `.oyd.jsx`,`_customState` + `forceUpdate` + `renderJsx`):
8
+
9
+ ```jsx
10
+ var _customState = { count: 0 };
11
+
12
+ export function add() {
13
+ _customState.count += 1;
14
+ this.forceUpdate();
15
+ }
16
+
17
+ export function renderJsx() {
18
+ var self = this;
19
+ return <button onClick={(e) => { self.add(); }}>{_customState.count}</button>;
20
+ }
21
+ ```
22
+
23
+ Code Canvas(真 React18 hooks,导出 `YidaComp`):
24
+
25
+ ```jsx
26
+ import React, { useState } from 'react';
27
+
28
+ function YidaComp(props) {
29
+ var state = useState(0);
30
+ var count = state[0];
31
+ var setCount = state[1];
32
+
33
+ return (
34
+ <button onClick={() => { setCount(count + 1); }}>
35
+ {count}
36
+ </button>
37
+ );
38
+ }
39
+
40
+ export default YidaComp;
41
+ ```
42
+
43
+ 转换要点:
44
+ - `_customState` 字段 → `useState`;复杂派生数据 → `useMemo`。
45
+ - `didMount` / `didUnmount` → `useEffect(() => { ...; return cleanup; }, [])`。
46
+ - `this.forceUpdate()` / `setCustomState` 强刷 → 删除,靠 hooks 自然重渲染。
47
+ - `this.utils.yida.*` / `this.dataSourceMap.*` 无法照搬,抽成 props 调用或明确 TODO,不要假装可用(Canvas 无平台数据桥)。
48
+
49
+ ## 升级报告模板
50
+
51
+ 迁移完成或受阻时,输出简短报告:
52
+
53
+ ```markdown
54
+ ## Canvas Upgrade Report
55
+
56
+ - Source page: project/pages/src/xxx.oyd.jsx
57
+ - Target page: APP_XXX / FORM-XXX
58
+ - Upgrade status: ready | blocked | partially-ready
59
+ - Generated canvas source: project/pages/src/xxx.canvas.jsx
60
+ - Required dependencies: react, antd, ...
61
+ - Schema write path: designer | verified-api | not-available
62
+ - Blockers:
63
+ - ...
64
+ - Verification:
65
+ - [ ] YidaCodeCanvas exists in schema
66
+ - [ ] importedModules contains required dependencies
67
+ - [ ] first screen renders
68
+ - [ ] core interactions work
69
+ ```
@@ -60,8 +60,8 @@ openyida login --check-only --json
60
60
  # Step 2: 准备原生报表数据源
61
61
  # 无原生报表时先使用 yida-report 创建;已有 URL 时解析 appType/formUuid
62
62
 
63
- # Step 3: 获取报表 Schema,输出到文件避免终端截断
64
- openyida get-schema <appType> <reportFormUuid> > .cache/report-schema-output.txt 2>&1
63
+ # Step 3: 获取报表 Schema;需要文件时用 CLI 输出目录或结构化文件写入工具保存 stdout
64
+ openyida get-schema <appType> --all --keyword <报表名称> --output-dir .cache/openyida/<项目名或任务名>/schemas
65
65
 
66
66
  # Step 4: 解析 cid / className / dataSetKey / filterKey / cname
67
67
 
@@ -25,7 +25,7 @@ Step 1: 从 URL 中解析 appType 和 formUuid
25
25
  Step 2: 执行 openyida env 检测环境和登录态
26
26
 
27
27
  Step 3: 执行 openyida get-schema <appType> <formUuid> 获取现有报表 Schema
28
- 命令:openyida get-schema <appType> <formUuid> > .cache/report-schema-output.txt 2>&1
28
+ 需要文件时,使用结构化文件写入工具保存 stdout,或用 --all --keyword --output-dir 输出到 project .cache
29
29
 
30
30
  Step 4: 解析 Schema,提取每个图表组件的 5 个核心参数
31
31
  ↓ 详见下方「Schema 解析规范」
@@ -58,15 +58,14 @@ Step 11: 输出 ECharts 自定义页面访问链接
58
58
 
59
59
  ## Schema 获取注意事项
60
60
 
61
- 1. **必须将输出重定向到文件**:报表 Schema 通常非常大(数千行),终端输出会被截断
61
+ 1. **不要用 shell 重定向保存 Schema**:报表 Schema 通常非常大(数千行),需要文件时用 CLI 自带输出目录或 agent 结构化文件写入工具
62
62
  ```bash
63
- openyida get-schema <appType> <formUuid> > .cache/report-schema-output.txt 2>&1
63
+ openyida get-schema <appType> --all --keyword <报表名称> --output-dir .cache/openyida/<项目名或任务名>/schemas
64
64
  ```
65
65
 
66
- 2. **提取 JSON 部分**:输出文件包含前缀日志信息,需要从 `{` 开始的行提取纯 JSON
66
+ 2. **单表回读时保存 stdout**:如必须按 `formUuid` 回读,先执行命令,再用 create_file / Write / file edit tool 保存纯 JSON 到 `<projectRoot>/.cache/openyida/<项目名或任务名>/report-schema.json`
67
67
  ```bash
68
- grep -n "^{" .cache/report-schema-output.txt
69
- tail -n +<行号> .cache/report-schema-output.txt > .cache/report-schema.json
68
+ openyida get-schema <appType> <formUuid> --json
70
69
  ```
71
70
 
72
71
  ---
@@ -15,8 +15,8 @@ https://www.aliwork.com/APP_KNILKT41DC5XXR5D4QEC/admin/REPORT-QA666SC1J3U3TFO9GM
15
15
  # Step 1:检测环境和登录态
16
16
  openyida env
17
17
 
18
- # Step 2:获取报表 Schema(必须重定向到文件,避免截断)
19
- openyida get-schema APP_KNILKT41DC5XXR5D4QEC REPORT-QA666SC1J3U3TFO9GM9MJ5400RIW3W83SUYMM5 > .cache/report-schema-output.txt 2>&1
18
+ # Step 2:获取报表 Schema;需要文件时用结构化文件写入工具保存 stdout
19
+ openyida get-schema APP_KNILKT41DC5XXR5D4QEC REPORT-QA666SC1J3U3TFO9GM9MJ5400RIW3W83SUYMM5 --json
20
20
 
21
21
  # Step 3:创建自定义展示页面
22
22
  openyida create-page APP_KNILKT41DC5XXR5D4QEC "任务数据看板" --mode dashboard
@@ -10,11 +10,13 @@ description: 宜搭 HTTP 连接器创建与管理。打通钉钉/自建系统/
10
10
  - 不要在代码中硬编码 API Key、密码等凭证,通过连接器鉴权配置管理
11
11
  - 不要编造 connector-id 或 action-id,必须从命令返回中提取
12
12
  - 不要删除连接器前确认是否有表单/页面正在使用
13
+ - 不要用 shell heredoc、`cat`/`echo`/`printf`/`tee` 或重定向生成连接器 action/config JSON
13
14
 
14
15
  ## 严格要求 (MUST DO)
15
16
 
16
17
  - 优先使用 `smart-create` 从 curl 命令或接口文档智能创建
17
18
  - 创建连接器后,将 connector-id 记录到 `.cache/<项目名>-schema.json`
19
+ - `--operations`、`--action` 等文件参数必须先用结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/connector/` 或该技能更具体的目录,再传给命令;不要写仓库根目录或系统临时目录
18
20
  - **本技能不读写 memory**:连接器配置通过 CLI 命令写入宜搭平台,不依赖跨会话的 memory 状态
19
21
 
20
22
  ## 适用场景
@@ -107,6 +109,8 @@ openyida connector delete-action <connector-id> <action-id>
107
109
  openyida connector test --connector-id <id> --action <action-file>
108
110
  ```
109
111
 
112
+ > `<action-file>` 先用 create_file / Write / file edit tool 创建,例如 `.cache/openyida/<项目名或任务名>/connector/actions.json`;从 workspace 根执行命令时路径加 `project/` 前缀。
113
+
110
114
  ### 鉴权账号管理
111
115
 
112
116
  ```bash
@@ -26,6 +26,7 @@ description: 从前端 API 文件或后端 Controller 代码中提取接口定
26
26
  - Windows PowerShell 读取中文 JSON 时必须显式使用 UTF-8。
27
27
  - 修改后必须执行“添加动作 -> 列表验证 -> CLI 测试 -> 再次列表验证”的闭环。
28
28
  - 如果一次错误配置导致动作被清空,应重建完整动作列表,而不是只追加缺失动作。
29
+ - 动作 JSON 必须使用当前 agent 的结构化文件写入工具创建;不要用 shell heredoc、`cat`/`echo`/`printf`/`tee` 或重定向写文件。
29
30
 
30
31
  ## 推荐流程
31
32
 
@@ -51,12 +52,14 @@ openyida connector list-actions <connector-id>
51
52
 
52
53
  ### 3. 生成动作 JSON 文件
53
54
 
54
- 建议放在当前项目:
55
+ 建议放在 OpenYida project 工作目录的任务子目录:
55
56
 
56
57
  ```text
57
- .cache/openyida/connector-actions/<业务名>-actions.json
58
+ <projectRoot>/.cache/openyida/<项目名或任务名>/connector-actions/<业务名>-actions.json
58
59
  ```
59
60
 
61
+ 从 workspace 根执行命令时传 `project/.cache/openyida/<项目名或任务名>/connector-actions/<业务名>-actions.json`;从 project 工作目录内执行时传 `.cache/openyida/<项目名或任务名>/connector-actions/<业务名>-actions.json`。
62
+
60
63
  动作 ID 建议使用顺序编号:
61
64
 
62
65
  ```json
@@ -74,7 +77,7 @@ openyida connector list-actions <connector-id>
74
77
  Windows PowerShell 必须加 `-Encoding UTF8`:
75
78
 
76
79
  ```powershell
77
- Get-Content -Raw -Encoding UTF8 .cache\openyida\connector-actions\<业务名>-actions.json | ConvertFrom-Json | Out-Null
80
+ Get-Content -Raw -Encoding UTF8 .cache\openyida\<项目名或任务名>\connector-actions\<业务名>-actions.json | ConvertFrom-Json | Out-Null
78
81
  ```
79
82
 
80
83
  不要使用默认 `Get-Content` 校验中文 JSON,默认编码可能导致误判或乱码。
@@ -82,7 +85,7 @@ Get-Content -Raw -Encoding UTF8 .cache\openyida\connector-actions\<业务名>-ac
82
85
  ### 5. 添加动作
83
86
 
84
87
  ```bash
85
- openyida connector add-action --operations .cache/openyida/connector-actions/<业务名>-actions.json --connector-id <connector-id> --confirm
88
+ openyida connector add-action --operations .cache/openyida/<项目名或任务名>/connector-actions/<业务名>-actions.json --connector-id <connector-id> --confirm
86
89
  ```
87
90
 
88
91
  ### 6. 验证动作存在
@@ -10,12 +10,13 @@ description: 表单页面创建与更新,支持 19 种字段类型(文本、
10
10
  - 不要编造 formUuid,必须从命令返回的 JSON 中提取
11
11
  - 不要在 update 模式中使用猜测的 fieldId,必须先用 `yida-get-schema` 获取
12
12
  - 不要用此命令操作数据记录(增删改查),应使用 `yida-data-management`
13
+ - 不要用 shell heredoc、`cat`/`echo`/`printf`/`tee` 或重定向生成字段、变更、补丁、规则、数据源 JSON 文件
13
14
 
14
15
  ## 严格要求 (MUST DO)
15
16
 
16
17
  - create 成功后,将 formUuid 记录到 `.cache/<项目名>-schema.json`
17
18
  - update 模式修改字段前,必须先用 `openyida get-schema` 确认字段 ID
18
- - 字段定义或变更定义需要落盘时,必须写入 `.cache/openyida/<项目名>/`,例如 `.cache/openyida/pm/pm-fields-team.json`;不要在仓库根目录生成 `*-fields*.json` 或 `*-changes*.json`
19
+ - 字段定义或变更定义需要落盘时,必须使用 agent 的结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/`,例如 `<projectRoot>/.cache/openyida/pm/pm-fields-team.json`;不要在仓库根目录、系统临时目录或 `.cache/` 顶层生成 `*-fields*.json`、`*-changes*.json`
19
20
  - **本技能不读写 memory**:formUuid 等信息输出到 stdout,通过 `.cache/<项目名>-schema.json` 持久化,不依赖跨会话的 memory 状态
20
21
 
21
22
  ## 官方表单示例范式
@@ -54,9 +55,11 @@ description: 表单页面创建与更新,支持 19 种字段类型(文本、
54
55
 
55
56
  ```bash
56
57
  openyida create-form create <appType> <formTitle> <fieldsJsonOrFile> [--layout double|card] [--theme compact|comfortable] [--label-align top|left]
57
- # 文件路径示例:.cache/openyida/<项目名>/<表单名>-fields.json
58
+ # 文件路径示例:.cache/openyida/<项目名或任务名>/<表单名>-fields.json
58
59
  ```
59
60
 
61
+ > 文件先用 create_file / Write / file edit tool 创建。上方路径默认从 OpenYida project 工作目录执行;如果从 workspace 根执行命令,传 `project/.cache/openyida/<项目名或任务名>/<表单名>-fields.json`。
62
+
60
63
  | 参数 | 必填 | 说明 |
61
64
  |------|------|------|
62
65
  | `appType` | 是 | 应用 ID |
@@ -73,7 +76,7 @@ openyida create-form create <appType> <formTitle> <fieldsJsonOrFile> [--layout d
73
76
 
74
77
  ```bash
75
78
  openyida create-form update <appType> <formUuid> <changesJsonOrFile>
76
- # 文件路径示例:.cache/openyida/<项目名>/<表单名>-changes.json
79
+ # 文件路径示例:.cache/openyida/<项目名或任务名>/<表单名>-changes.json
77
80
  ```
78
81
 
79
82
  | 参数 | 必填 | 说明 |
@@ -94,7 +97,7 @@ openyida create-form update <appType> <formUuid> <changesJsonOrFile>
94
97
 
95
98
  ```bash
96
99
  openyida create-form patch <appType> <formUuid> <patchJsonOrFile>
97
- # 文件路径示例:.cache/openyida/<项目名>/<表单名>-patch.json
100
+ # 文件路径示例:.cache/openyida/<项目名或任务名>/<表单名>-patch.json
98
101
  ```
99
102
 
100
103
  支持的操作:
@@ -121,7 +124,7 @@ openyida create-form patch <appType> <formUuid> <patchJsonOrFile>
121
124
  ]
122
125
  ```
123
126
 
124
- patch 模式是高级能力:执行前必须先 `openyida get-schema <appType> <formUuid> --json` 确认现有结构,补丁文件必须写在 `.cache/openyida/<项目名>/` 下。
127
+ patch 模式是高级能力:执行前必须先 `openyida get-schema <appType> <formUuid> --json` 确认现有结构,补丁文件必须用结构化文件写入工具写在 `<projectRoot>/.cache/openyida/<项目名或任务名>/` 下。
125
128
 
126
129
  ### 自定义校验函数(customValidate)
127
130
 
@@ -197,7 +200,7 @@ patch 模式是高级能力:执行前必须先 `openyida get-schema <appType>
197
200
 
198
201
  ```bash
199
202
  openyida create-form rule <appType> <formUuid> <rulesJsonOrFile>
200
- # 文件路径示例:.cache/openyida/<项目名>/<表单名>-rules.json
203
+ # 文件路径示例:.cache/openyida/<项目名或任务名>/<表单名>-rules.json
201
204
  ```
202
205
 
203
206
  支持的规则类型:
@@ -255,7 +258,7 @@ rule 模式会自动生成宜搭动作代码,绑定触发字段的 `onChange`
255
258
 
256
259
  ```bash
257
260
  openyida create-form bind-datasource <appType> <formUuid> <fieldLabelOrId> <dataSourceJsonOrFile>
258
- # 文件路径示例:.cache/openyida/<项目名>/<字段名>-datasource.json
261
+ # 文件路径示例:.cache/openyida/<项目名或任务名>/<字段名>-datasource.json
259
262
  ```
260
263
 
261
264
  数据源配置示例:
@@ -380,7 +383,7 @@ openyida create-form bind-datasource <appType> <formUuid> <fieldLabelOrId> <data
380
383
 
381
384
  ## 注意事项
382
385
 
383
- - 临时文件写在 `.cache/openyida/` 目录中;不要写到仓库根目录
386
+ - 临时 JSON 文件用结构化文件写入工具写在 `<projectRoot>/.cache/openyida/<项目名或任务名>/` 目录中;不要写到仓库根目录、系统临时目录或 `.cache/` 顶层
384
387
  - update 模式操作按顺序执行,注意依赖关系
385
388
  - 字段匹配基于中文标签(`label.zh_CN`)
386
389
  - 如需创建自定义展示页面(无字段),请使用 `yida-create-page`
@@ -8,6 +8,7 @@ description: 流程表单一体化创建(创建表单 → 转流程 → 获取
8
8
 
9
9
  - 不要编造 processCode,必须从命令返回的 JSON 中提取
10
10
  - 不要在流程定义中使用猜测的 fieldId,必须先用 `yida-get-schema` 获取
11
+ - 不要用 shell heredoc、`cat`/`echo`/`printf`/`tee` 或重定向生成字段定义、流程定义 JSON 文件
11
12
 
12
13
  ## 严格要求 (MUST DO)
13
14
 
@@ -15,7 +16,7 @@ description: 流程表单一体化创建(创建表单 → 转流程 → 获取
15
16
  - 优先使用用法 2(先创建表单获取字段 ID,再 `--formUuid` 转流程)
16
17
  - 创建成功后,将 formUuid 和 processCode 记录到 `.cache/<项目名>-schema.json`
17
18
  - 流程定义中字段 ≥ 3 且审批节点 ≥ 2 时,必须自动配置字段权限
18
- - 字段定义和流程定义文件必须写入 `.cache/openyida/<项目名>/`,不要在仓库根目录生成 `fields.json`、`process-definition.json` 等临时文件
19
+ - 字段定义和流程定义文件必须用 agent 的结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/`;不要在仓库根目录、系统临时目录或 `.cache/` 顶层生成 `fields.json`、`process-definition.json` 等临时文件
19
20
  - **本技能不读写 memory**:formUuid 和 processCode 输出到 stdout,通过 `.cache/<项目名>-schema.json` 持久化,不依赖跨会话的 memory 状态
20
21
 
21
22
  ## 适用场景
@@ -66,11 +67,16 @@ openyida create-process <appType> --formUuid <formUuid> <processDefinitionFile>
66
67
 
67
68
  ## 推荐两步流程
68
69
 
70
+ 1. 使用 create_file / Write / file edit tool 创建字段定义:
71
+ `<projectRoot>/.cache/openyida/order/order-fields.json`
72
+ 2. 执行表单创建命令,获取真实 `formUuid` 和 `fieldId`。
73
+ 3. 使用结构化文件写入工具创建流程定义:
74
+ `<projectRoot>/.cache/openyida/order/process-definition.json`
75
+ 4. 执行流程转换命令。
76
+
69
77
  ```bash
70
- # Step 1: 创建表单获取字段 ID
78
+ # 以下命令默认在 OpenYida project 工作目录内执行;从 workspace 根执行时路径加 project/ 前缀。
71
79
  openyida create-form create "APP_XXX" "订单处理表" .cache/openyida/order/order-fields.json
72
-
73
- # Step 2: 将已有表单转为流程表单
74
80
  openyida create-process "APP_XXX" --formUuid "FORM-YYY" .cache/openyida/order/process-definition.json
75
81
  ```
76
82
 
@@ -1,10 +1,12 @@
1
1
  ---
2
2
  name: yida-custom-page
3
- description: 宜搭自定义页面 JSX 开发规范。React 16 宜搭原生 export function 页面模式,宜搭 JS API 调用,状态管理与编码约束。适用于编写自定义页面代码时。
3
+ description: 宜搭 native 自定义页面 JSX 开发规范(React 16 宜搭原生 export function renderJsx 模式、宜搭 JS API、状态管理与编码约束)。是**回退链路**:仅当页面强依赖原生实例数据桥(this.$(fieldId) 表单字段双向绑定、this.utils.yida.*、dataSourceMap、提交流程深度耦合)时才用;纯展示无刷新页也可用。其余自定义页面(含只需开放 API HTTP 读数据的页)默认走 yida-canvas-custom-page。
4
4
  ---
5
5
 
6
6
  # 自定义页面开发
7
7
 
8
+ > **先确认链路**:自定义页面**默认走 Code Canvas** `yida-canvas-custom-page`(现代 React 交互 / hooks / 可视化 / AI / 需崩溃隔离,含只需开放 API HTTP 读数据的页)。本 native 技能是**回退链路**,只处理:① 强依赖原生实例数据桥——表单内字段双向绑定 `this.$(fieldId)`、`this.utils.yida.*`、`dataSourceMap`、提交流程深度耦合——的页面(Canvas 无 `this` 桥,重写代价过高时留 native);② 纯展示、无运行态刷新页。把已有 native 页升级到 Canvas 走 `yida-canvas-upgrade`。
9
+
8
10
  ## 核心规则
9
11
 
10
12
  ### 致命规则(FATAL)
@@ -30,6 +32,7 @@ description: 宜搭自定义页面 JSX 开发规范。React 16 宜搭原生 expo
30
32
 
31
33
  影响代码质量和用户体验:
32
34
 
35
+ 0. **写 UI 前先定视觉方向**:面向用户的页面在动手写 JSX 前,先读 `skills/yida-page-uiux/SKILL.md` 完成「视觉方向决策」(页面类型判定 + 差异化 + 去 AI 味自检),拿到「视觉方向决策块」后再按本技能 `references/design-system.md` 的 token/组件实现;不要直接套用统一灰白底 + 8px 圆角卡片网格的默认模板(那正是 AI 味来源)。
33
36
  1. **代码生成前确认功能摘要**:详见 [编码指南 编注 0](references/coding-guide.md)
34
37
  2. **pageSize 推荐 50,最大 100**:列表/看板默认 `pageSize: 50`;分页接口 `searchFormDatas` 等的 `pageSize` 最大 100
35
38
  3. **didUnmount 清理定时器**:在 `didUnmount` 中清理所有 `setInterval`/`setTimeout`,防止内存泄漏
@@ -42,7 +45,8 @@ description: 宜搭自定义页面 JSX 开发规范。React 16 宜搭原生 expo
42
45
  10. **Tabs 显隐控制**:下拉值变更后自动回退到第一个可见 Tab,内容区用 `display: none` 保留 DOM
43
46
  11. **加载态必须可恢复**:列表/看板页默认保留空态或演示数据;接口失败、超时或返回异常时必须把 `loading` 置回 `false`,不要只渲染“正在加载...”挡住整页
44
47
  12. **禁止可见原生下拉**:筛选、预约、审批等用户可见下拉交互不要使用 `<select>`;使用 Tailwind className 组合 `button + menu + option` 的自定义下拉组件
45
- 13. **发布前必须跑检查链路**:先执行 `openyida check-page <file>` `openyida compile <file>`;若出现 warning/error,按规则修复后再发布
48
+ 13. **严禁 emoji**:页面渲染出来的任何位置(标题、按钮、标签、状态、空态文案、图表标题等)**一律禁止出现 emoji**(😀🚀✅⚠️📦📊 等一切彩色符号字符)。需要图标一律用功能性内联 SVG(见 `skills/yida-page-uiux` 图标策略);需要状态标记用文字 + 语义色标签。emoji 是最明显的 AI 味来源之一,且跨端显示不一致。JS 注释里也不要留装饰性符号。
49
+ 14. **发布前必须跑检查链路**:先执行 `openyida check-page <file>` 和 `openyida compile <file>`;若出现 warning/error,按规则修复后再发布
46
50
 
47
51
  > 每条规则的代码示例、反模式和常见错误见 [编码指南](references/coding-guide.md)(编写代码前强制必读)。
48
52
  > 运行时易错点、`check-page` 规则和兼容层自动修复边界见 [运行时护栏](references/runtime-guardrails.md)。
@@ -69,10 +73,15 @@ description: 宜搭自定义页面 JSX 开发规范。React 16 宜搭原生 expo
69
73
 
70
74
  以创建「员工信息查询页」为例,完整流程如下:
71
75
 
76
+ 1. 获取表单 Schema,确认字段 ID:
77
+
72
78
  ```bash
73
- # Step 1:获取表单 Schema,确认字段 ID
74
- openyida get-schema APP_XXX FORM-EMPLOYEE > .cache/employee-schema.json 2>&1
79
+ openyida get-schema APP_XXX FORM-EMPLOYEE
80
+ ```
75
81
 
82
+ 如需保存完整 Schema,使用 create_file / Write / file edit tool 创建 `<projectRoot>/.cache/openyida/employee-query/employee-schema.json`;ID 映射仍写 `<projectRoot>/.cache/employee-query-schema.json`。
83
+
84
+ ```bash
76
85
  # Step 2:创建自定义页面
77
86
  openyida create-page APP_XXX "员工信息查询"
78
87
 
@@ -92,7 +101,7 @@ openyida publish project/pages/src/employee-query.oyd.jsx APP_XXX FORM-QUERY001
92
101
  - **Step 1** 的 get-schema 输出包含所有字段的 fieldId,在代码中必须使用 `FIELDS` 常量映射这些 ID
93
102
  - **Step 3** 的页面代码必须遵循 [编码指南](references/coding-guide.md) 和 [运行时护栏](references/runtime-guardrails.md)
94
103
  - 优先通过 `openyida generate-page ... --compile` 生成高质量骨架;需要完整交互样板时使用 `todo-mvc`
95
- - 页面生成 spec、接口调试 JSON、一次性验证脚本等临时工件必须放在 `.cache/openyida/` 下;不要在仓库根目录生成 `page.json`、`data.json` 或脚本文件
104
+ - 页面生成 spec、接口调试 JSON、一次性验证脚本等临时工件必须用结构化文件写入工具创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/` 下;不要在仓库根目录、系统临时目录或 `.cache/` 顶层生成 `page.json`、`data.json` 或脚本文件
96
105
  - `check-page` 支持行级禁用:`// openyida-lint-disable-line <rule>` 或 `// openyida-lint-disable-next-line <rule>`。只在确认该行不会触发宜搭运行时问题时使用。
97
106
 
98
107
  ## 开发规范
@@ -111,12 +120,13 @@ openyida sample yida-custom-page custom-page-template # 完整页面模板(d
111
120
  openyida sample yida-custom-page product-homepage # 产品/项目首页轻量模板(支持 --var KEY=VALUE)
112
121
  openyida sample yida-custom-page todo-mvc # TodoMVC 完整交互模板(事件/状态/循环/本地存储)
113
122
  openyida sample yida-custom-page design-tokens # 设计 token 参考(颜色/间距/字体规范)
114
- openyida generate-page product-homepage --spec .cache/openyida/page-specs/home.json --output pages/src/home.oyd.jsx --compile # 基于 spec/blocks 生成首页并本地编译
123
+ openyida generate-page product-homepage --spec .cache/openyida/<项目名或任务名>/page-specs/home.json --output pages/src/home.oyd.jsx --compile # 基于 spec/blocks 生成首页并本地编译
115
124
  openyida generate-page todo-mvc --output pages/src/todo-mvc.oyd.jsx --compile # 生成官方 TodoMVC 风格交互样板
116
125
  openyida check-page pages/src/home.oyd.jsx --json # 输出机器可读的规范检查结果;.oyd.jsx 会先兼容构建
117
126
  ```
118
127
 
119
128
  - 完整文件结构、状态管理、全局变量、19 条编码规则见 [编码指南](references/coding-guide.md)
129
+ - `--spec` 文件先用 create_file / Write / file edit tool 创建到 `<projectRoot>/.cache/openyida/<项目名或任务名>/page-specs/`
120
130
  - 运行时高风险规则、`check-page` 规则和自动修复边界见 [运行时护栏](references/runtime-guardrails.md)
121
131
  - 输入控件、筛选栏、下拉、表格、附件等组件骨架见 [组件指南](references/component-jsx-guide.md)
122
132
 
@@ -166,6 +176,7 @@ openyida check-page pages/src/home.oyd.jsx --json # 输出机器可读的
166
176
  | 文档 | 覆盖范围 | 何时阅读 |
167
177
  |------|---------|---------|
168
178
  | **本技能文档** | | |
179
+ | [视觉方向决策(去 AI 味)](../yida-page-uiux/SKILL.md) | 页面类型 playbook、5 维差异化引擎、去 AI 味黑名单/8 问自检、图标策略 | 实现面向用户的 UI 且要求好看/去 AI 味时,**先于写代码**阅读并产出决策块 |
169
180
  | [编码指南](references/coding-guide.md) | 文件结构模板、状态管理、生命周期、19 条编码规范 | 编写任何页面代码前必读 |
170
181
  | [运行时护栏](references/runtime-guardrails.md) | pageSize、loading 恢复、ECharts DOM 时序、setState 约束、check-page 规则映射 | 编写列表、看板、图表或接口页面前必读 |
171
182
  | [设计规范](references/design-system.md) | 色彩/圆角/字体/间距系统、7 类组件样式模板、8 条反模式 | 实现 UI 样式时必读 |
@@ -168,7 +168,7 @@ var styles = {
168
168
  height: '36px',
169
169
  padding: '0 12px',
170
170
  borderRadius: '8px',
171
- background: '#1677FF',
171
+ background: 'var(--color-brand1-6, #1677FF)',
172
172
  color: '#fff',
173
173
  border: 'none',
174
174
  fontSize: '12px',
@@ -83,7 +83,7 @@ export function injectTailwindSource() {
83
83
  '@import "tailwindcss/theme";',
84
84
  '@import "tailwindcss/preflight";',
85
85
  '@import "tailwindcss/utilities";',
86
- '@theme { --color-brand: #2F6FED; }',
86
+ '@theme { --color-brand: var(--color-brand1-6, #2F6FED); }', // 跟随 App 主题,缺失时兜底
87
87
  ].join('\n');
88
88
  document.head.appendChild(style);
89
89
  }
@@ -98,11 +98,11 @@ export function injectTailwindFallback() {
98
98
  style.innerHTML = [
99
99
  '.oyd-btn,.oyd-select-trigger,.oyd-select-option{appearance:none;-webkit-appearance:none;font-family:inherit;}',
100
100
  '.oyd-btn{height:36px;border-radius:6px;border:1px solid #D0D5DD;background:#fff;padding:0 12px;font-size:14px;cursor:pointer;}',
101
- '.oyd-btn-primary{background:#2F6FED;border-color:#2F6FED;color:#fff;}',
101
+ '.oyd-btn-primary{background:var(--color-brand1-6,#2F6FED);border-color:var(--color-brand1-6,#2F6FED);color:#fff;}',
102
102
  '.oyd-select-trigger{height:38px;border-radius:6px;border:1px solid #D0D5DD;background:#fff;padding:0 12px;font-size:14px;text-align:left;box-shadow:0 6px 14px rgba(15,23,42,.06);}',
103
103
  '.oyd-select-menu{position:absolute;z-index:30;margin-top:6px;width:100%;padding:6px;border:1px solid #E4E7EC;border-radius:10px;background:#fff;box-shadow:0 16px 32px rgba(16,24,40,.14);}',
104
104
  '.oyd-select-option{width:100%;min-height:36px;border:0;border-radius:8px;background:#fff;padding:0 10px;text-align:left;font-size:14px;cursor:pointer;}',
105
- '.oyd-select-option-active{background:#EFF6FF;color:#1D4ED8;font-weight:600;}',
105
+ '.oyd-select-option-active{background:var(--color-brand1-1,#EFF6FF);color:var(--color-brand1-6,#1D4ED8);font-weight:600;}',
106
106
  ].join('');
107
107
  document.head.appendChild(style);
108
108
  }
@@ -5,6 +5,7 @@
5
5
  ## 先说清楚边界
6
6
 
7
7
  - 不要假设自定义页面能直接 `import` 宜搭内部表单组件;当前规范下应使用原生 JSX 元素、Tailwind `className` 和必要的内联兜底样式组合。
8
+ - Code Canvas 是自定义页面的默认链路(现代 React/hooks/可视化/AI);本 native 指南只服务纯展示无刷新页和需数据桥的数据驱动页。用户要现代交互页,或提到代码画布、`YidaCodeCanvas`、`runtimeCode`、`importedModules` 时,切换到 `yida-canvas-custom-page`。
8
9
  - 不要把字段中文名当作 `fieldId`;字段 ID 必须来自 `openyida get-schema`。
9
10
  - 不要把原生表单页面的组件配置 JSON 直接复制到自定义页面 JSX;两者不是同一个运行面。
10
11
  - 如果确有平台内置选择器、上传器等 API,必须先由用户提供官方示例或在目标环境验证,再写入代码。
@@ -200,10 +201,10 @@ var styles = {
200
201
  minHeight: 36,
201
202
  padding: '8px 12px',
202
203
  textAlign: 'left',
203
- background: '#EFF6FF',
204
+ background: 'var(--color-brand1-1, #EFF6FF)',
204
205
  border: 0,
205
206
  borderRadius: 8,
206
- color: '#1D4ED8',
207
+ color: 'var(--color-brand1-6, #1D4ED8)',
207
208
  appearance: 'none',
208
209
  WebkitAppearance: 'none',
209
210
  fontFamily: 'inherit',
@@ -399,5 +400,7 @@ openyida compile pages/src/page.jsx
399
400
  如果页面使用字段 ID、提交数据或构造查询条件,发布前还必须重新确认 Schema:
400
401
 
401
402
  ```bash
402
- openyida get-schema APP_XXX FORM-XXX > .cache/form-schema.json
403
+ openyida get-schema APP_XXX FORM-XXX
403
404
  ```
405
+
406
+ 如需保存完整 Schema,使用 create_file / Write / file edit tool 创建 `<projectRoot>/.cache/openyida/<项目名或任务名>/form-schema.json`;不要使用 shell 重定向。
@@ -1,5 +1,7 @@
1
1
  # 宜搭自定义页面设计规范
2
2
 
3
+ > **本文件是 token / 组件实现层(数值层)**:提供色彩/圆角/字体/间距的具体值与组件模板。视觉**方向与差异化**(选哪种气质、如何偏离默认脸、去 AI 味)由 `../../yida-page-uiux/SKILL.md` 决定——**先定方向、再用本文件落地**。直接套用本文件的默认组合(灰白底 + 统一圆角卡片)而不先做方向决策,正是页面「有 AI 味」的根因。
4
+
3
5
  > 宜搭自定义页面默认使用 Tailwind utility `className` 组织视觉层,并保留内联 `style` 兜底。不能使用 CSS 文件、CSS Modules、shadcn/ui 或构建期样式方案。
4
6
 
5
7
  > 原因:宜搭自定义页面运行在单文件环境中,不能像普通 React 项目一样 `import` CSS。Tailwind 通过 `@tailwindcss/browser` 运行时脚本加载,默认使用已验证的 `g.alicdn.com` 地址,并开启 preflight 重置原生控件外观;关键控件仍要有 JavaScript `style` 兜底。
@@ -22,27 +24,33 @@
22
24
 
23
25
  在 `renderJsx` 顶部定义语义色彩对象,全页复用:
24
26
 
25
- > **主色说明**:宜搭平台已内置品牌色 CSS 变量,主色相关 token 直接使用平台变量,无需硬编码色值,可随平台主题自动适配。
27
+ > **主色说明**:宜搭平台已内置品牌色 CSS 变量(色阶 `--color-brand1-1` 最浅 → `--color-brand1-6` 主色 → `--color-brand1-10` 最深)。**所有主色/强调/链接/选中/info/标签系一律走平台变量,不要硬编码蓝色**,页面才能跟随 App 主题自动适配。只有语义色(成功/警告/错误)固定不随主题变,保证语义稳定。
28
+ >
29
+ > **前提是导航可见**:跟随品牌主色是为了跟应用框架融合。若页面隐藏了应用导航(`isRenderNav=false`,沉浸/独立/门户/大屏),主色相可自立、不必严格跟品牌(由 `yida-page-uiux` 的 Step 0 决策)——但**语义色仍固定、去 AI 味红线仍生效**。拿不准就按「跟随品牌」这个更安全的默认走。
30
+ >
31
+ > ⚠️ **常见错误**:把 `primaryHover` 设成 `brand1-1`(最浅档)会让填充主按钮 hover 时「泛白」;把 `hover` 设成 `brand1-9`(深档)当行 hover 底会让行「变暗」。填充按钮 hover 要比主色**亮一档**(`brand1-5`)、按下**深一档**(`brand1-7`);通用浅色 hover 底用 `brand1-1`。
26
32
 
27
33
  ```javascript
28
34
  export function renderJsx() {
29
35
  var colors = {
30
- primary: 'var(--color-brand1-6)', // 主色(品牌蓝),用于主操作按钮、链接、选中态高亮
31
- primaryHover: 'var(--color-brand1-1)', // 主色悬停态,鼠标 hover 时的按钮/链接颜色
32
- hover: 'var(--color-brand1-9)', // 通用悬停背景色,用于列表行 hover、菜单项 hover
33
- active: 'var(--color-brand1-9)', // 通用激活/按下态,点击时的视觉反馈
34
- disabled: 'var(--color-brand1-8)', // 禁用态颜色,用于不可操作的按钮、控件
35
- primaryLight: 'var(--color-brand1-2)', // 主色浅背景,用于选中行底色、标签高亮背景
36
-
37
- // 语义色
36
+ primary: 'var(--color-brand1-6)', // 主色,用于主操作按钮、链接、选中态高亮
37
+ primaryHover: 'var(--color-brand1-5)', // 主色 hover:填充按钮/链接 hover,比主色亮一档
38
+ primaryActive: 'var(--color-brand1-7)', // 主色按下:填充按钮 active,比主色深一档
39
+ hover: 'var(--color-brand1-1)', // 通用浅色 hover 底:列表行 hover、菜单项 hover
40
+ active: 'var(--color-brand1-2)', // 通用浅色激活/按下底
41
+ disabled: 'var(--color-brand1-3)', // 禁用态:浅、去饱和
42
+ primaryLight: 'var(--color-brand1-2)', // 主色浅背景:选中行底色、标签高亮背景
43
+
44
+ // 语义色(固定,不随主题变)
38
45
  success: '#52C41A',
39
46
  successLight: '#F6FFED',
40
47
  warning: '#FAAD14',
41
48
  warningLight: '#FFFBE6',
42
49
  error: '#FF4D4F',
43
50
  errorLight: '#FFF2F0',
44
- info: '#1677FF',
45
- infoLight: '#E6F4FF',
51
+ // info = 品牌信息色,跟随主题(不再固定蓝)
52
+ info: 'var(--color-brand1-6)',
53
+ infoLight: 'var(--color-brand1-1)',
46
54
 
47
55
  // 中性色(从深到浅)
48
56
  text: '#1D2129', // 主文字
@@ -176,7 +184,7 @@ btnPrimary: {
176
184
  justifyContent: 'center',
177
185
  padding: '0 16px',
178
186
  height: '32px',
179
- background: '#1677FF',
187
+ background: 'var(--color-brand1-6)', // 主色跟随 App 主题,勿硬编码蓝
180
188
  color: '#FFFFFF',
181
189
  border: 'none',
182
190
  borderRadius: '6px',
@@ -238,7 +246,7 @@ tag: function(type) {
238
246
  success: { color: '#52C41A', bg: '#F6FFED', border: '#B7EB8F' },
239
247
  warning: { color: '#FAAD14', bg: '#FFFBE6', border: '#FFE58F' },
240
248
  error: { color: '#FF4D4F', bg: '#FFF2F0', border: '#FFCCC7' },
241
- info: { color: '#1677FF', bg: '#E6F4FF', border: '#91CAFF' },
249
+ info: { color: 'var(--color-brand1-6)', bg: 'var(--color-brand1-1)', border: 'var(--color-brand1-3)' },
242
250
  default: { color: '#4E5969', bg: '#F2F3F5', border: '#E5E6EB' },
243
251
  };
244
252
  var c = colorMap[type] || colorMap.default;
@@ -305,3 +313,12 @@ empty: {
305
313
  ❌ **禁止忽略空状态**,列表/数据为空时必须有友好提示
306
314
  ❌ **禁止忽略加载状态**,异步操作必须有 loading 反馈
307
315
  ❌ **禁止移动端不适配**,所有页面必须用 `isMobile` 做响应式处理
316
+
317
+ ### 去 AI 味反模式(与 `../../yida-page-uiux/` 对齐,实现前先定视觉方向)
318
+
319
+ ❌ **禁蓝紫 AI 万能渐变背景**:不要用 `#6366f1→#a855f7` 一类蓝紫渐变当区块/卡片底;主色走平台品牌变量,强调靠语义色/点缀色而非渐变。
320
+ ❌ **禁彩色发光阴影 / 半透明彩色 blob / 渐变文字**:阴影用中性色低透明度(如 `rgba(0,0,0,.06)`),不要彩色光晕;不要背景漂浮彩色模糊球,不要文字渐变。
321
+ ❌ **禁每个卡片/章节标题前配一枚装饰线性图标**:这是最典型的 AI 味。图标只用在功能处(按钮/状态/导航),标题纯文字;同页只用一套图标风格。
322
+ ❌ **严禁 emoji(FATAL)**:页面渲染的任何位置(标题/按钮/标签/状态/空态/图表标题)一律不得出现 emoji(😀🚀✅⚠️📦📊 等),JS 注释也不留装饰符号(←→✓)。需要图标用功能性内联 SVG,需要状态用文字 + 语义色标签。emoji 跨端不一致且是最明显的 AI 味来源。
323
+
324
+ > 注:上文「统一 `borderRadius: 8px`」是数值兜底,不代表全页只能一个圆角性格。圆角**性格**(直角/微圆 vs 标准圆 vs 圆润)由 `yida-page-uiux` 按气质选定后,再在本文件圆角系统里取分层数值。