@microi.net/cli 6.2.1 → 6.2.3

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 (71) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.workbuddy-plugin/marketplace.json +2 -2
  5. package/.workbuddy-plugin/plugin.json +1 -1
  6. package/assets/build-meta.json +5 -5
  7. package/cordis.patch.yml +1 -1
  8. package/package.json +1 -1
  9. package/scripts/mcp-server.js +147 -121
  10. package/scripts/microi-cli.js +62 -62
  11. package/scripts/microi-skills.meta.json +279 -264
  12. package/skills/.microi-skills-version.json +2 -2
  13. package/skills/.progressive-disclosure-manifest.json +101 -101
  14. package/skills/README.md +1 -1
  15. package/skills/app-store/SKILL.md +7 -6
  16. package/skills/microi-ai-application/SKILL.md +5 -5
  17. package/skills/microi-client-frontend/SKILL.md +21 -15
  18. package/skills/microi-client-frontend/references/progressive-02-8-/350/277/220/350/241/214/346/227/266/351/253/230/351/242/221/345/235/221/345/244/215/347/233/230.md +9 -1
  19. package/skills/microi-codex/SKILL.md +2 -0
  20. package/skills/microi-codex-installer/SKILL.md +6 -0
  21. package/skills/microi-datasource-mapping/SKILL.md +6 -0
  22. package/skills/microi-db-schema/SKILL.md +8 -0
  23. package/skills/microi-db-schema/references/form-component-options.md +7 -0
  24. package/skills/microi-deployment/SKILL.md +3 -3
  25. package/skills/microi-deployment/references/deployment-matrix.md +1 -1
  26. package/skills/microi-docs-coverage/references/capability-map.md +13 -13
  27. package/skills/microi-form-engine/SKILL.md +46 -3
  28. package/skills/microi-form-engine/references/business-numbering.md +70 -0
  29. package/skills/microi-form-engine/references/component-catalog.md +4 -0
  30. package/skills/microi-form-engine/references/component-config-index.md +359 -0
  31. package/skills/microi-form-engine/references/data-source-events.md +13 -2
  32. package/skills/microi-form-engine/references/form-generation-quality.md +160 -0
  33. package/skills/microi-form-layout/SKILL.md +1 -1
  34. package/skills/microi-frontend-sdk/references/progressive-01-token-/345/275/223/345/211/215/347/231/273/345/275/225/347/224/250/346/210/267/344/270/216/345/275/223/345/211/215/347/273/210/347/253/257/347/231/273/345/275/225/345/215/217/350/256/256.md +6 -0
  35. package/skills/microi-microservice/SKILL.md +387 -382
  36. package/skills/microi-microservice/references/runtime-delivery.md +15 -0
  37. package/skills/microi-system-delivery/SKILL.md +7 -0
  38. package/skills/microi-system-delivery/references/delivery-pitfalls.md +5 -0
  39. package/skills/microi-ui/SKILL.md +192 -192
  40. package/skills/microi-ui/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/234/272/346/231/257/350/223/235/345/233/276.md +183 -183
  41. package/skills/microi-uniapp-frontend/SKILL.md +3 -1
  42. package/skills/microi.v8.js +6 -4
  43. package/skills/module-engine/SKILL.md +13 -1
  44. package/skills/scripts/sync-embedded-skills.mjs +13 -0
  45. package/skills/ui-design/SKILL.md +227 -223
  46. package/skills/ui-design/assets/pattern-showcase/index.html +2 -2
  47. package/skills/ui-design/assets/templates/MCI-DESIGN.md +221 -206
  48. package/skills/ui-design/references/data-workspace-density.md +77 -0
  49. package/skills/ui-design/references/design-pattern-library.md +186 -184
  50. package/skills/ui-design/references/mci-design-contract.md +163 -163
  51. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +165 -164
  52. package/skills/ui-design/references/progressive-03-/345/212/250/346/225/210/350/247/204/350/214/203-/344/270/260/345/257/214/344/275/206/344/270/215/345/215/241.md +237 -235
  53. package/skills/ui-design/references/progressive-04-/347/273/204/344/273/266/351/243/216/346/240/274/351/200/237/346/237/245.md +154 -152
  54. package/skills/ui-design/references/progressive-07-/351/200/237/346/237/245-/344/273/216/345/244/264/346/220/255/345/273/272/344/270/200/344/270/252/347/247/273/345/212/250/347/253/257/351/241/265/351/235/242.md +207 -207
  55. package/skills/uniapp-mall-assets/SKILL.md +10 -2
  56. package/skills/v8-crud-api/SKILL.md +2 -1
  57. package/skills/v8-explorer-tree/SKILL.md +22 -1
  58. package/skills/v8-file-upload/SKILL.md +283 -283
  59. package/skills/v8-file-upload/references/progressive-01-/345/205/254/346/234/211/346/241/266-vs-/347/247/201/346/234/211/346/241/266.md +7 -1
  60. package/skills/v8-frontend-events/SKILL.md +14 -6
  61. package/skills/v8-image-processing/SKILL.md +13 -2
  62. package/skills/v8-image-processing/references/api-reference.md +49 -3
  63. package/skills/v8-saas-multi-tenant/SKILL.md +6 -0
  64. package/skills/v8-security/SKILL.md +11 -1
  65. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +6 -1
  66. package/skills/v8-sql-query/SKILL.md +38 -1
  67. package/skills/v8-sql-query/examples/business-query.js +18 -0
  68. package/skills/v8-table-event/SKILL.md +51 -2
  69. package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +3 -1
  70. package/skills/v8-utilities/references/server-api-index.md +1 -0
  71. package/skills/vision-engine/references/video-timeline.md +53 -0
@@ -0,0 +1,359 @@
1
+ # 控件配置源码索引
2
+
3
+ 由 `microi.mcp/scripts/generate-form-component-catalog.mjs` 从全部当前控件、共用配置弹窗及其本地依赖生成。修改控件后重新生成并执行 `--check`。
4
+
5
+ PC 前端静态配置目录。designerFieldType 是历史设计器默认值,不是服务器允许的建模类型。configPaths 为源码静态路径,动态键、外部 API 语义及跨端支持须查看 sourceFiles 和责任 Skill。defaultConfig 是源码字面量,不是业务推荐值,也不能整体覆盖存量字段。
6
+
7
+ 共 44 类控件、61 个来源文件。决策与验收见 [表单生成质量规则](form-generation-quality.md)。先通过 MCP `microi_get_form_component_catalog` 查询目标控件,避免每次加载全量正文。
8
+
9
+ ## Text(单行文本)
10
+
11
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-input.vue`。
12
+
13
+ Config 静态路径:`Button.PreviewCanClick`、`ReadOnlyButton`、`ShowButton`、`ShowIcon`、`SlotButtonV8Code`、`TextApend`、`TextApendPosition`、`TextIcon`、`TextIconPosition`、`TextShowPassword`、`V8Code`、`V8CodeBlur`。
14
+
15
+ 设计器绑定(含临时编辑键,不能直接当 Config):`ReadOnlyButton`、`ShowButton`、`ShowIcon`、`TextApend`、`TextApendPosition`、`TextIcon`、`TextIconPosition`、`TextShowPassword`。
16
+
17
+ ## Guid(GUID)
18
+
19
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-input.vue`。
20
+
21
+ Config 静态路径:`Button.PreviewCanClick`、`ReadOnlyButton`、`ShowButton`、`ShowIcon`、`SlotButtonV8Code`、`TextApend`、`TextApendPosition`、`TextIcon`、`TextIconPosition`、`TextShowPassword`、`V8Code`、`V8CodeBlur`。
22
+
23
+ 设计器绑定(含临时编辑键,不能直接当 Config):`ReadOnlyButton`、`ShowButton`、`ShowIcon`、`TextApend`、`TextApendPosition`、`TextIcon`、`TextIconPosition`、`TextShowPassword`。
24
+
25
+ ## Textarea(多行文本)
26
+
27
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-textarea.vue`。
28
+
29
+ Config 静态路径:`Button.PreviewCanClick`、`TextApend`、`TextApendPosition`、`TextIcon`、`TextIconPosition`、`TextShowPassword`、`Textarea`、`Textarea.DefaultRows`、`V8Code`。
30
+
31
+ 设计器绑定(含临时编辑键,不能直接当 Config):`DefaultRows`。
32
+
33
+ ## NumberText(数字输入)
34
+
35
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-input-number.vue`。
36
+
37
+ Config 静态路径:`Button.PreviewCanClick`、`NumberTextBtn`、`NumberTextBtnPosition`、`NumberTextPrecision`、`NumberTextStep`、`V8Code`。
38
+
39
+ 设计器绑定(含临时编辑键,不能直接当 Config):`NumberTextBtn`、`NumberTextBtnPosition`、`NumberTextPrecision`、`NumberTextStep`。
40
+
41
+ ## DateTime(日期时间)
42
+
43
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-datetime.vue`。
44
+
45
+ Config 静态路径:`Button.PreviewCanClick`、`DateTimeType`、`V8Code`。
46
+
47
+ 设计器绑定(含临时编辑键,不能直接当 Config):`DateTimeType`。
48
+
49
+ ## Select(下拉单选)
50
+
51
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-select.vue`、`Microi.Client/src/views/form-engine/diy-field-component/field-data-load-fallback.js`、`Microi.Client/src/views/form-engine/diy-field-component/shared/DiyDataSourceConfig.vue`。
52
+
53
+ Config 静态路径:`Api`、`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`DataSourceSqlRemote`、`DataSourceSqlRemoteLoading`、`EnableSearch`、`SelectLabel`、`SelectSaveField`、`SelectSaveFormat`、`SelectedValueLookup`、`Sql`、`V8Code`。
54
+
55
+ 设计器绑定(含临时编辑键,不能直接当 Config):`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`DataSourceSqlRemote`、`EnableSearch`、`SelectLabel`、`SelectSaveField`、`SelectSaveFormat`、`SelectedValueLookup === true`、`Sql`、`configForm`。
56
+
57
+ ## MultipleSelect(下拉多选)
58
+
59
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-select.vue`、`Microi.Client/src/views/form-engine/diy-field-component/field-data-load-fallback.js`、`Microi.Client/src/views/form-engine/diy-field-component/shared/DiyDataSourceConfig.vue`。
60
+
61
+ Config 静态路径:`Api`、`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`DataSourceSqlRemote`、`DataSourceSqlRemoteLoading`、`EnableSearch`、`SelectLabel`、`SelectSaveField`、`SelectSaveFormat`、`SelectedValueLookup`、`Sql`、`V8Code`。
62
+
63
+ 设计器绑定(含临时编辑键,不能直接当 Config):`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`DataSourceSqlRemote`、`EnableSearch`、`SelectLabel`、`SelectSaveField`、`SelectSaveFormat`、`SelectedValueLookup === true`、`Sql`、`configForm`。
64
+
65
+ ## Radio(单选框)
66
+
67
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-radio.vue`、`Microi.Client/src/views/form-engine/diy-field-component/shared/DiyDataSourceConfig.vue`。
68
+
69
+ Config 静态路径:`Button.PreviewCanClick`、`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`DataSourceSqlRemote`、`DataSourceSqlRemoteLoading`、`EnableSearch`、`SelectLabel`、`SelectSaveField`、`SelectSaveFormat`、`SelectedValueLookup`、`Sql`、`V8Code`。
70
+
71
+ 设计器绑定(含临时编辑键,不能直接当 Config):`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`DataSourceSqlRemote`、`EnableSearch`、`SelectLabel`、`SelectSaveField`、`SelectSaveFormat`、`SelectedValueLookup === true`、`Sql`、`configForm`。
72
+
73
+ ## Checkbox(复选框)
74
+
75
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-checkbox.vue`、`Microi.Client/src/views/form-engine/diy-field-component/shared/DiyDataSourceConfig.vue`。
76
+
77
+ Config 静态路径:`Button.PreviewCanClick`、`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`DataSourceSqlRemote`、`DataSourceSqlRemoteLoading`、`SelectLabel`、`SelectSaveField`、`SelectSaveFormat`、`SelectedValueLookup`、`Sql`、`V8Code`。
78
+
79
+ 设计器绑定(含临时编辑键,不能直接当 Config):`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`DataSourceSqlRemote`、`EnableSearch`、`SelectLabel`、`SelectSaveField`、`SelectSaveFormat`、`SelectedValueLookup === true`、`Sql`、`configForm`。
80
+
81
+ ## Switch(开关)
82
+
83
+ 来源:`Microi.Client/src/utils/form-switch-value.js`、`Microi.Client/src/views/form-engine/diy-field-component/diy-switch.vue`。
84
+
85
+ Config 静态路径:`Button.PreviewCanClick`、`Switch`、`Switch.ActiveText`、`Switch.Description`、`Switch.DisplayMode`、`Switch.Icon`、`Switch.InactiveText`、`Switch.NullValue`、`Switch.Title`、`Switch.VisualStyle`、`V8Code`。
86
+
87
+ 设计器绑定(含临时编辑键,不能直接当 Config):`ActiveText`、`Description`、`DisplayMode`、`Icon`、`InactiveText`、`Title`、`VisualStyle`。
88
+
89
+ ## Rate(评分)
90
+
91
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-rate.vue`、`Microi.Client/src/views/form-engine/diy-field-component/shared/DiySimpleFieldConfigDialog.vue`。
92
+
93
+ Config 静态路径:`Button.PreviewCanClick`、`DataSourceSqlRemote`、`DataSourceSqlRemoteLoading`、`Rate`、`Rate.AllowHalf`、`Rate.Clearable`、`Rate.Max`、`Rate.ScoreTemplate`、`Rate.ShowScore`、`SelectLabel`、`SelectSaveField`、`SelectSaveFormat`、`V8Code`。
94
+
95
+ 设计器绑定(含临时编辑键,不能直接当 Config):`AllowHalf`、`Clearable`、`Max`、`ScoreTemplate`、`ShowScore`。
96
+
97
+ ## Progress(进度条)
98
+
99
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-progress.vue`、`Microi.Client/src/views/form-engine/diy-field-component/shared/DiySimpleFieldConfigDialog.vue`。
100
+
101
+ Config 静态路径:`Button.PreviewCanClick`、`NumberTextBtn`、`NumberTextBtnPosition`、`NumberTextPrecision`、`NumberTextStep`、`Progress`、`Progress.Color`、`Progress.ShowText`、`Progress.Status`、`Progress.StrokeWidth`、`Progress.TextInside`、`Progress.Type`、`V8Code`。
102
+
103
+ 设计器绑定(含临时编辑键,不能直接当 Config):`Color`、`ShowText`、`Status`、`StrokeWidth`、`TextInside`、`Type`。
104
+
105
+ ## Slider(滑块)
106
+
107
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-slider.vue`。
108
+
109
+ Config 静态路径:`Slider`、`Slider.Max`、`Slider.Min`、`Slider.Range`、`Slider.ShowInput`、`Slider.ShowStops`、`Slider.Step`。
110
+
111
+ 设计器绑定(含临时编辑键,不能直接当 Config):`Max`、`Min`、`Range`、`ShowInput`、`ShowStops`、`Step`。
112
+
113
+ ## ColorPicker(颜色选择)
114
+
115
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-colorpicker.vue`、`Microi.Client/src/views/form-engine/diy-field-component/shared/DiySimpleFieldConfigDialog.vue`。
116
+
117
+ Config 静态路径:`Button.PreviewCanClick`、`ColorPicker`、`ColorPicker.Format`、`ColorPicker.Predefine`、`ColorPicker.ShowAlpha`、`ColorPicker.Size`、`DataSourceSqlRemote`、`DataSourceSqlRemoteLoading`、`SelectLabel`、`SelectSaveField`、`SelectSaveFormat`、`V8Code`。
118
+
119
+ 设计器绑定(含临时编辑键,不能直接当 Config):`Format`、`PredefineText`、`ShowAlpha`、`Size`。
120
+
121
+ ## AutoNumber(自动编号)
122
+
123
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-autonumber.vue`。
124
+
125
+ Config 静态路径:`AutoNumber`、`AutoNumber.CreateRule`、`AutoNumber.DataRule`、`AutoNumberFields`、`AutoNumberFixed`、`AutoNumberLength`、`Button.PreviewCanClick`、`DataSourceSqlRemote`、`DataSourceSqlRemoteLoading`、`SelectLabel`、`SelectSaveField`、`SelectSaveFormat`、`TextApend`、`TextApendPosition`、`TextIcon`、`TextIconPosition`、`V8Code`。
126
+
127
+ 设计器绑定(含临时编辑键,不能直接当 Config):`AutoNumberFields`、`AutoNumberFixed`、`AutoNumberLength`、`CreateRule`、`DataRule`。
128
+
129
+ ## Button(按钮)
130
+
131
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-button.vue`、`Microi.Client/src/views/form-engine/diy-field-component/dos.fontawesome/Fontawesome.vue`。
132
+
133
+ Config 静态路径:`Button`、`Button.Icon`、`Button.Loading`、`Button.PreviewCanClick`、`Button.RefreshTableAfterClick`、`Button.Size`、`Button.Type`。
134
+
135
+ 设计器绑定(含临时编辑键,不能直接当 Config):`Button.Icon`、`Button.PreviewCanClick`、`Button.RefreshTableAfterClick`、`Button.Type`。
136
+
137
+ ## Divider(分割线)
138
+
139
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-divider.vue`。
140
+
141
+ Config 静态路径:`Divider`、`Divider.Icon`、`Divider.Tag`、`DividerPosition`。
142
+
143
+ 设计器绑定(含临时编辑键,不能直接当 Config):`Divider.Icon`、`Divider.Tag`、`DividerPosition`。
144
+
145
+ ## CollapseGroup(折叠分组)
146
+
147
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-collapse-group.vue`。
148
+
149
+ Config 静态路径:`CollapseGroup`、`CollapseGroup.DefaultCollapsed`、`CollapseGroup.Description`、`CollapseGroup.FieldCount`、`CollapseGroup.Icon`、`CollapseGroup.ScopeMode`、`CollapseGroup.ShowFieldCount`、`CollapseGroup.Theme`。
150
+
151
+ 设计器绑定(含临时编辑键,不能直接当 Config):`DefaultCollapsed`、`Description`、`FieldCount`、`Icon`、`ScopeMode`、`ShowFieldCount`、`Theme`。
152
+
153
+ ## Tabs(页签分组)
154
+
155
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-tabs.vue`。
156
+
157
+ Config 静态路径:`FieldTabs`、`FieldTabs.CaptureRest`、`FieldTabs.DefaultActiveKey`、`FieldTabs.Description`、`FieldTabs.Position`、`FieldTabs.ScopeMode`、`FieldTabs.ShowFieldCount`、`FieldTabs.Stretch`、`FieldTabs.Tabs`、`FieldTabs.Theme`、`FieldTabs.TotalFieldCount`、`FieldTabs.Type`。
158
+
159
+ 设计器绑定(含临时编辑键,不能直接当 Config):`CaptureRest`、`DefaultActiveKey`、`Description`、`Position`、`ScopeMode`、`ShowFieldCount`、`Stretch`、`TotalFieldCount`、`Type`。
160
+
161
+ ## Alert(提示说明)
162
+
163
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-alert.vue`。
164
+
165
+ Config 静态路径:`Alert`、`Alert.Content`、`Alert.Effect`、`Alert.ShowIcon`、`Alert.Title`、`Alert.Type`。
166
+
167
+ 设计器绑定(含临时编辑键,不能直接当 Config):`Content`、`Effect`、`ShowIcon`、`Title`、`Type`。
168
+
169
+ ## StaticText(静态文本)
170
+
171
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-statictext.vue`。
172
+
173
+ Config 静态路径:`StaticText`、`StaticText.Align`、`StaticText.Content`、`StaticText.Theme`、`StaticText.Title`。
174
+
175
+ 设计器绑定(含临时编辑键,不能直接当 Config):`Align`、`Content`、`Theme`、`Title`。
176
+
177
+ ## Html(HTML内容)
178
+
179
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-html.vue`。
180
+
181
+ Config 静态路径:`Html`、`Html.Content`、`Html.MinHeight`、`Html.Padding`、`Html.UseFieldValue`。
182
+
183
+ 设计器绑定(含临时编辑键,不能直接当 Config):`Content`、`MinHeight`、`Padding`、`UseFieldValue`。
184
+
185
+ ## RichText(富文本)
186
+
187
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-richtext.vue`、`Microi.Client/src/views/form-engine/diy-field-component/richtext-assets.js`。
188
+
189
+ Config 静态路径:`RichText`、`RichText.EditorProduct`、`RichText.File`、`RichText.File.Accept`、`RichText.File.Enabled`、`RichText.File.MaxCount`、`RichText.File.MaxSize`、`RichText.Image`、`RichText.Image.CompressMaxSize`、`RichText.Image.CompressMaxWidth`、`RichText.Image.Enabled`、`RichText.Image.MaxCount`、`RichText.Image.MaxSize`、`RichText.Image.Preview`、`RichText.Limit`、`RichText.Video`、`RichText.Video.Enabled`、`RichText.Video.MaxCount`、`RichText.Video.MaxSize`。
190
+
191
+ 设计器绑定(含临时编辑键,不能直接当 Config):`File.Accept`、`File.Enabled`、`File.MaxCount`、`File.MaxSize`、`Image.CompressMaxSize`、`Image.CompressMaxWidth`、`Image.Enabled`、`Image.MaxCount`、`Image.MaxSize`、`Image.Preview`、`Limit`、`Video.Enabled`、`Video.MaxCount`、`Video.MaxSize`。
192
+
193
+ ## CodeEditor(代码编辑器)
194
+
195
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/AiChatPanel.vue`、`Microi.Client/src/views/form-engine/diy-field-component/diy-code-editor.vue`。
196
+
197
+ Config 静态路径:`CodeEditor`、`CodeEditor.ButtonText`、`CodeEditor.DisplayMode`、`CodeEditor.Height`、`CodeEditor.Language`、`CodeEditor.V8CodeType`。
198
+
199
+ 设计器绑定(含临时编辑键,不能直接当 Config):`ButtonText`、`DisplayMode`、`Height`、`Language`、`V8CodeType`。
200
+
201
+ ## JsonTable(JSON表格)
202
+
203
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-jsontable.vue`、`Microi.Client/src/views/form-engine/diy-field-component/json-table-column-field-runtime.js`、`Microi.Client/src/views/form-engine/diy-field-component/shared/DiyDataSourceConfig.vue`。
204
+
205
+ Config 静态路径:`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`JsonTable`、`JsonTable.ApiEngineKey`、`JsonTable.Columns`、`JsonTable.DataSource`、`JsonTable.DataSourceId`、`JsonTable.DataSourceSqlRemote`、`JsonTable.KeyValueList`、`JsonTable.SelectLabel`、`JsonTable.Sql`、`SelectLabel`、`Sql`。
206
+
207
+ 设计器绑定(含临时编辑键,不能直接当 Config):`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`DataSourceSqlRemote`、`EnableSearch`、`SelectLabel`、`SelectSaveField`、`SelectSaveFormat`、`SelectedValueLookup === true`、`Sql`。
208
+
209
+ ## ImgUpload(图片上传)
210
+
211
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-image-crop-dialog.vue`、`Microi.Client/src/views/form-engine/diy-field-component/diy-imgupload.vue`、`Microi.Client/src/views/form-engine/diy-field-component/diy-upload-compact-summary.vue`、`Microi.Client/src/views/form-engine/diy-field-component/image-crop-config.js`。
212
+
213
+ Config 静态路径:`ImgUpload`、`ImgUpload.Crop`、`ImgUpload.Crop.AllowFlip`、`ImgUpload.Crop.AllowRotate`、`ImgUpload.Crop.AllowZoom`、`ImgUpload.Crop.CustomHeight`、`ImgUpload.Crop.CustomWidth`、`ImgUpload.Crop.Enabled`、`ImgUpload.Crop.Mode`、`ImgUpload.Crop.Ratio`、`ImgUpload.Limit`、`ImgUpload.MaxCount`、`ImgUpload.MaxSize`、`ImgUpload.Multiple`、`ImgUpload.Preview`、`ImgUpload.SaveFullPath`、`ImgUpload.ShowFileList`、`ImgUpload.Tips`、`Upload`、`Upload.BeforeUploadV8`、`Upload.UploadSuccessV8`。
214
+
215
+ 设计器绑定(含临时编辑键,不能直接当 Config):`Crop.AllowFlip`、`Crop.AllowRotate`、`Crop.AllowZoom`、`Crop.CustomHeight`、`Crop.CustomWidth`、`Crop.Enabled`、`Crop.Mode`、`Crop.Ratio`、`Limit`、`MaxCount`、`MaxSize`、`Multiple`、`Preview`、`SaveFullPath`、`Tips`。
216
+
217
+ ## FileUpload(文件上传)
218
+
219
+ 来源:`Microi.Client/src/utils/file-role-permission.js`、`Microi.Client/src/views/form-engine/diy-field-component/diy-file-download-dialog.vue`、`Microi.Client/src/views/form-engine/diy-field-component/diy-file-role-tags.vue`、`Microi.Client/src/views/form-engine/diy-field-component/diy-fileupload.vue`、`Microi.Client/src/views/form-engine/diy-field-component/diy-upload-compact-summary.vue`。
220
+
221
+ Config 静态路径:`FileUpload`、`FileUpload.AllowOfficeEdit`、`FileUpload.ConfigurableRoleIds`、`FileUpload.DisableRoleInheritance`、`FileUpload.EnableOfficePreview`、`FileUpload.EnableOfficeVersion`、`FileUpload.EnableRolePermission`、`FileUpload.HideUnauthorizedFiles`、`FileUpload.Limit`、`FileUpload.MaxCount`、`FileUpload.MaxSize`、`FileUpload.MediaType`、`FileUpload.Multiple`、`FileUpload.SaveFullPath`、`FileUpload.ShowFileList`、`FileUpload.ShowUnauthorizedFileName`、`FileUpload.Tips`、`Upload`、`Upload.BeforeUploadV8`、`Upload.UploadSuccessV8`。
222
+
223
+ 设计器绑定(含临时编辑键,不能直接当 Config):`AllowOfficeEdit`、`ConfigurableRoleIds`、`DisableRoleInheritance`、`EnableOfficePreview`、`EnableOfficeVersion`、`EnableRolePermission`、`HideUnauthorizedFiles`、`Limit`、`MaxCount`、`MaxSize`、`MediaType`、`Multiple`、`SaveFullPath`、`ShowUnauthorizedFileName`、`Tips`。
224
+
225
+ ## Autocomplete(自动完成)
226
+
227
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-autocomplete.vue`、`Microi.Client/src/views/form-engine/diy-field-component/shared/DiyDataSourceConfig.vue`。
228
+
229
+ Config 静态路径:`Button.PreviewCanClick`、`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`DataSourceSqlRemote`、`DataSourceSqlRemoteLoading`、`SelectLabel`、`SelectedValueLookup`、`Sql`、`TextApend`、`TextApendPosition`、`TextIcon`、`TextIconPosition`、`V8Code`。
230
+
231
+ 设计器绑定(含临时编辑键,不能直接当 Config):`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`DataSourceSqlRemote`、`EnableSearch`、`SelectLabel`、`SelectSaveField`、`SelectSaveFormat`、`SelectedValueLookup === true`、`Sql`、`configForm`。
232
+
233
+ ## TagInput(标签输入)
234
+
235
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-taginput.vue`。
236
+
237
+ Config 静态路径:`TagInput`、`TagInput.MaxCount`、`TagInput.Options`、`TagInput.Placeholder`。
238
+
239
+ 设计器绑定(含临时编辑键,不能直接当 Config):`MaxCount`、`OptionsText`、`Placeholder`。
240
+
241
+ ## Transfer(穿梭框)
242
+
243
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-transfer.vue`。
244
+
245
+ Config 静态路径:`Transfer`、`Transfer.Filterable`、`Transfer.LeftTitle`、`Transfer.Options`、`Transfer.RightTitle`。
246
+
247
+ 设计器绑定(含临时编辑键,不能直接当 Config):`Filterable`、`LeftTitle`、`OptionsText`、`RightTitle`。
248
+
249
+ ## Cascader(级联选择)
250
+
251
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-cascader-value.js`、`Microi.Client/src/views/form-engine/diy-field-component/diy-cascader.vue`、`Microi.Client/src/views/form-engine/diy-field-component/field-data-load-fallback.js`。
252
+
253
+ Config 静态路径:`Button.PreviewCanClick`、`Cascader`、`Cascader.Children`、`Cascader.Disabled`、`Cascader.EmitPath`、`Cascader.Filterable`、`Cascader.Label`、`Cascader.Lazy`、`Cascader.Leaf`、`Cascader.Multiple`、`Cascader.ParentField`、`Cascader.ParentFields`、`Cascader.Value`、`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`DataSourceSqlRemote`、`DataSourceSqlRemoteLoading`、`SelectLabel`、`SelectSaveField`、`Sql`、`V8Code`。
254
+
255
+ 设计器绑定(含临时编辑键,不能直接当 Config):`Cascader.Children`、`Cascader.Disabled`、`Cascader.EmitPath`、`Cascader.Filterable`、`Cascader.Lazy`、`Cascader.Leaf`、`Cascader.Multiple`、`Cascader.ParentField`、`Cascader.ParentFields`、`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`DataSourceSqlRemote`、`SelectLabel`、`SelectSaveField`、`Sql`。
256
+
257
+ ## Address(省市区地址)
258
+
259
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-address.vue`、`Microi.Client/src/views/form-engine/diy-field-component/shared/DiySimpleFieldConfigDialog.vue`。
260
+
261
+ Config 静态路径:`Address`、`Address.CheckStrictly`、`Address.Separator`、`Address.ShowAllLevels`、`V8Code`。
262
+
263
+ 设计器绑定(含临时编辑键,不能直接当 Config):`CheckStrictly`、`Separator`、`ShowAllLevels`。
264
+
265
+ ## Department(部门选择)
266
+
267
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-department.vue`。
268
+
269
+ Config 静态路径:`Button.PreviewCanClick`、`Cascader.Children`、`Cascader.Disabled`、`Cascader.Lazy`、`Cascader.Leaf`、`Cascader.Multiple`、`DataSourceSqlRemote`、`DataSourceSqlRemoteLoading`、`Department`、`Department.EmitPath`、`Department.Filterable`、`Department.Multiple`、`SelectLabel`、`SelectSaveField`、`V8Code`。
270
+
271
+ 设计器绑定(含临时编辑键,不能直接当 Config):`Department.EmitPath`、`Department.Filterable`、`Department.Multiple`。
272
+
273
+ ## SelectTree(树形选择)
274
+
275
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-select-tree.vue`、`Microi.Client/src/views/form-engine/diy-field-component/paged-select-tree.vue`、`Microi.Client/src/views/form-engine/diy-field-component/select-tree-paging.js`。
276
+
277
+ Config 静态路径:`Button.PreviewCanClick`、`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`DataSourceSqlRemote`、`DataSourceSqlRemoteLoading`、`Filterable`、`SelectLabel`、`SelectSaveField`、`SelectTree`、`SelectTree.Children`、`SelectTree.Disabled`、`SelectTree.Filterable`、`SelectTree.Label`、`SelectTree.Lazy`、`SelectTree.LazyLoad`、`SelectTree.Leaf`、`SelectTree.Multiple`、`SelectTree.PageSize`、`SelectTree.ParentChildLinkage`、`SelectTree.ParentField`、`SelectTree.ParentFields`、`SelectTree.Value`、`Sql`、`V8Code`。
278
+
279
+ 设计器绑定(含临时编辑键,不能直接当 Config):`DataSource`、`DataSourceApiEngineKey`、`DataSourceId`、`DataSourceSqlRemote`、`SelectLabel`、`SelectSaveField`、`SelectTree.Children`、`SelectTree.Disabled`、`SelectTree.Filterable`、`SelectTree.Lazy`、`SelectTree.Leaf`、`SelectTree.Multiple`、`SelectTree.PageSize`、`SelectTree.ParentChildLinkage`、`SelectTree.ParentField`、`SelectTree.ParentFields`、`Sql`。
280
+
281
+ ## TreeCheckbox(树形权限)
282
+
283
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-treecheckbox.vue`。
284
+
285
+ Config 静态路径:`TreeCheckbox`、`TreeCheckbox.DataSourceApi`、`TreeCheckbox.DataSourceType`、`TreeCheckbox.DefaultExpandAll`、`TreeCheckbox.NameColumnLabel`、`TreeCheckbox.NameColumnWidth`、`TreeCheckbox.PermissionColumnLabel`、`TreeCheckbox.ShowIcon`、`TreeCheckbox.ShowSearch`、`V8Code`。
286
+
287
+ 设计器绑定(含临时编辑键,不能直接当 Config):`DataSourceApi`、`DataSourceType`、`DefaultExpandAll`、`NameColumnLabel`、`NameColumnWidth`、`PermissionColumnLabel`、`ShowIcon`、`ShowSearch`。
288
+
289
+ ## OpenTable(弹出表格)
290
+
291
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-opentable.vue`。
292
+
293
+ Config 静态路径:`OpenTable`、`OpenTable.BeforeOpenV8`、`OpenTable.BtnName`、`OpenTable.MultipleSelect`、`OpenTable.PropsWhere`、`OpenTable.SearchAppend`、`OpenTable.ShowDialog`、`OpenTable.SubmitV8`、`OpenTable.SysMenuId`、`OpenTable.SysMenuName`、`OpenTable.TableId`、`OpenTable.TableName`。
294
+
295
+ 设计器绑定(含临时编辑键,不能直接当 Config):`BeforeOpenV8`、`BtnName`、`MultipleSelect`、`SubmitV8`。
296
+
297
+ ## JoinTable(关联表格)
298
+
299
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-jointable.vue`。
300
+
301
+ Config 静态路径:`JoinTable`、`JoinTable.ModuleId`、`JoinTable.ModuleName`、`JoinTable.TableId`、`JoinTable.Where`。
302
+
303
+ 设计器绑定(含临时编辑键,不能直接当 Config):`Where`。
304
+
305
+ ## JoinForm(关联表单)
306
+
307
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-joinform.vue`。
308
+
309
+ Config 静态路径:`JoinForm`、`JoinForm.FormMode`、`JoinForm.Id`、`JoinForm.JoinFieldName`、`JoinForm.TableId`、`JoinForm.TableName`、`JoinForm._SearchEqual`。
310
+
311
+ 设计器绑定(含临时编辑键,不能直接当 Config):`FormMode`、`JoinFieldName`、`TableId`。
312
+
313
+ ## TableChild(子表)
314
+
315
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-tablechild.vue`。
316
+
317
+ Config 静态路径:`TableChild`、`TableChild.Data`、`TableChild.DisablePagination`、`TableChild.FieldRelations`、`TableChild.ImportAutoFillFk`、`TableChild.LastSysMenuId`、`TableChild.LastSysMenuName`、`TableChild.LastTableId`、`TableChild.NoneDefaultHeight`、`TableChild.PrimaryTableFieldName`、`TableChild.SearchAppend`、`TableChildFkFieldName`、`TableChildSysMenuId`、`TableChildSysMenuName`、`TableChildTableId`。
318
+
319
+ 设计器绑定(含临时编辑键,不能直接当 Config):`DisablePagination`、`FieldRelations`、`ImportAutoFillFk`、`PrimaryTableFieldName`、`TableChildFkFieldName`。
320
+
321
+ ## Map(地图定位)
322
+
323
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-map.vue`、`Microi.Client/src/views/form-engine/diy-field-component/map-runtime.js`。
324
+
325
+ Config 静态路径:`MapCompany`。
326
+
327
+ 设计器绑定(含临时编辑键,不能直接当 Config):`MapCompany`。
328
+
329
+ ## MapArea(地图区域)
330
+
331
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-map.vue`、`Microi.Client/src/views/form-engine/diy-field-component/map-runtime.js`。
332
+
333
+ Config 静态路径:`MapCompany`。
334
+
335
+ 设计器绑定(含临时编辑键,不能直接当 Config):`MapCompany`。
336
+
337
+ ## Qrcode(二维码)
338
+
339
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-qrcode.vue`、`Microi.Client/src/views/form-engine/diy-field-component/shared/DiySimpleFieldConfigDialog.vue`。
340
+
341
+ Config 静态路径:`Qrcode`、`Qrcode.DisplayWidth`、`Qrcode.DownloadText`、`Qrcode.ShowDownload`。
342
+
343
+ 设计器绑定(含临时编辑键,不能直接当 Config):`DisplayWidth`、`DownloadText`、`ShowDownload`。
344
+
345
+ ## FontAwesome(图标选择)
346
+
347
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-fontawesome.vue`、`Microi.Client/src/views/form-engine/diy-field-component/shared/DiySimpleFieldConfigDialog.vue`。
348
+
349
+ Config 静态路径:`Button.PreviewCanClick`、`FontAwesome`、`FontAwesome.AllowClear`、`FontAwesome.DefaultIcon`、`FontAwesome.PreviewSize`、`V8Code`。
350
+
351
+ 设计器绑定(含临时编辑键,不能直接当 Config):`AllowClear`、`DefaultIcon`、`PreviewSize`。
352
+
353
+ ## DevComponent(自定义组件)
354
+
355
+ 来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-devcomponent.vue`。
356
+
357
+ Config 静态路径:`DevComponentName`、`DevComponentPath`。
358
+
359
+ 设计器绑定(含临时编辑键,不能直接当 Config):`DevComponentName`、`DevComponentPath`。
@@ -43,11 +43,17 @@ SQL 仍必须经过平台受控数据源;不要把用户文本拼成标识符
43
43
 
44
44
  ## 动态联动
45
45
 
46
+ 下列内容只说明候选联动。**显示名称、保存关联 Id、其它字段回填是三个不同契约**;
47
+ 选择项目/人员后还要核对当前表已有的名称、负责人、电话、岗位、组织等字段并逐项映射。
48
+ `SelectLabel/SelectSaveField/SelectedValueLookup` 不自动完成这些业务回填。
49
+ 完整清空、改选、异步代次、快照与后端重算规则见 [表单生成质量规则](form-generation-quality.md)。
50
+
46
51
  字段值变化时可用前端 V8 更新另一个字段的数据源:
47
52
 
48
53
  ```javascript
49
54
  if (V8.LoadMode === 'Design') return;
50
55
 
56
+ // 此处只展示候选供数;完整联动还需清理旧选择、保存依赖值并校验异步请求代次。
51
57
  var result = await V8.FormEngine.GetTableData('biz_contact', {
52
58
  _SelectFields: ['Id', 'Name'],
53
59
  _Where: [['CustomerId', '=', V8.ThisValue]],
@@ -79,8 +85,13 @@ if (!V8.Form.Name) return { Code: 0, Msg: '名称不能为空' };
79
85
 
80
86
  ## 字段属性
81
87
 
82
- 常用属性包括 `Visible`、`AppVisible`、`Required`、`Readonly`、`Data`、
83
- `Config`、`FormWidth`、`TableWidth`、`Tab`、角色绑定和前端事件代码。
88
+ 常用持久化属性包括 `Visible`、`AppVisible`、`NotEmpty`、`Readonly`、`Data`、
89
+ `Config`、`FormWidth`、`TableWidth`、`TableAlign`、`Tab`、角色绑定和前端事件代码。
90
+
91
+ `TableAlign` 是 `diy_field` 顶层属性,值 `auto/left/center/right`,空/null 按控件类型自动;
92
+ 不能放进 `Config`。说明显示模式是 `diy_table.FieldDescriptionMode=inline/tooltip`,空/null
93
+ 保持 inline;模式作用于普通字段 Description,不覆盖布局控件自己的说明。具体默认与 MCP 参数见
94
+ `../SKILL.md` 的“列对齐与字段说明模式”。
84
95
 
85
96
  - 除非明确隐藏,`Visible=1`、`AppVisible=1`。
86
97
  - 角色绑定只缩小界面可见性,不能代替服务器数据权限。
@@ -0,0 +1,160 @@
1
+ # 表单生成质量规则
2
+
3
+ 本页用于生成或修复业务表单。先确定字段的业务含义、保存值、显示值和依赖,再选控件;
4
+ 不能把“存在一个外键字段”当作关联交互已完成。
5
+
6
+ ## 每张表的字段契约
7
+
8
+ 建模前为适用字段记录:名称与物理类型、控件、Config、数据源、显示键、保存键、
9
+ 关联来源及回填目标、清空行为、默认值、精度/单位、权限和验收动作。
10
+ 先回读当前表全部字段和来源表字段;已有负责人、联系方式、组织等列时,主动检查它们
11
+ 是否应由选择器回填。只映射本业务确实需要且当前用户有权读取的字段,不复制整条来源记录。
12
+
13
+ | 控件族 | 必须决定的配置与行为 |
14
+ |---|---|
15
+ | Text、Guid | 编号/电话/证件号保留文本及前导零;Guid 是标识,不能用随机默认值覆盖编辑记录;插槽动作写 `SlotButtonV8Code` |
16
+ | Textarea | `Textarea.DefaultRows`、合理长度与整行宽度;不要拿它代替结构化明细 |
17
+ | NumberText | 数量/金额/比率的单位、小数位 `NumberTextPrecision` 和 `NumberTextStep`;物理精度匹配;电话不是数字计算字段 |
18
+ | DateTime | 明确日历日期、完整时间、钟点、年月、年、月日及多选;配置 `DateTimeType`,不能因不含年份或只含时间而退成 Text |
19
+ | Select、MultipleSelect、Radio、Checkbox、Autocomplete | 完整数据源、保存键/显示键、Text/Json、多选格式、搜索/分页、已选值回显;单选清空、数值 0、旧对象值均测试 |
20
+ | Switch | `int` 的 0/1;`Switch.NullValue=1` 仅表示空值显示开启,不回写旧值;默认值与只读/权限分开 |
21
+ | Rate、Progress、Slider | 分值上限、半星、0–100 进度、范围/步长及展示与录入区别;Slider.Range 保存数组时不能配 int |
22
+ | ColorPicker | 颜色格式、透明度和预设颜色;不把设计器临时 `PredefineText` 保存成运行配置 |
23
+ | AutoNumber | 前缀、位数、关联字段、DataRule/CreateRule;由可信后端生成,不用前端拼号替代并发唯一性 |
24
+ | Button | 行为、图标、预览可点击和 loading;提交业务调用授权接口,不能只生成外观按钮 |
25
+ | Divider、CollapseGroup、Tabs | Divider 标签/图标;折叠组范围和字段数;字段 Tabs 存 `FieldTabs`,表级 Tabs 存 `diy_table.Tabs`;不让分组吞掉必填字段 |
26
+ | Alert、StaticText、Html | 独立内容、主题、类型和显示来源;说明不是业务数据;HTML 需可信并净化 |
27
+ | RichText | `RichText.Limit` 以及图片/视频/文件开关、大小、数量和压缩;私有正文不保存临时地址 |
28
+ | CodeEditor | `CodeEditor.Language/Height/DisplayMode/ButtonText`;语言按实际内容选择,长配置可用 Dialog;保留 V8 代码 |
29
+ | JsonTable | `JsonTable.Columns` 的 Key/Label/Component/Config、唯一列键、数据源、必填、只读和 JSON 存储;不能只生成空表控件 |
30
+ | ImgUpload、FileUpload | `mediumtext`、公私桶、单/多文件、数量与大小;图片压缩/裁剪、文件媒体类型/Office/角色权限;角色 Id 来自当前租户 |
31
+ | TagInput、Transfer | 候选项、键值、标题、过滤和数量;OptionsText 是设计器编辑中间值,持久化 Options |
32
+ | Cascader、Address、Department、SelectTree、TreeCheckbox | 节点值/显示/子节点/父键、路径还是末级、多选、懒加载、父子联动和权限;Department 路径末级才是部门 Id |
33
+ | OpenTable | 真实来源菜单/表、单/多选、固定筛选、BeforeOpenV8/SubmitV8;选择后用 `V8.TableRowSelected` 映射到当前表 |
34
+ | JoinTable、JoinForm、TableChild | 区分集合展示、嵌入一条表单和 1:N 明细;子表真实外键、隐藏菜单、索引、父记录隔离,按主 Skill 的关系门禁执行 |
35
+ | Map、MapArea | 供应商、点/区域结构和有效坐标;凭据只进入租户安全设置,字段不保存 Key/Secret |
36
+ | Qrcode、FontAwesome | 二维码数据用 `DataAppend.Code`;纯展示优先虚拟字段,不能把 PNG Base64 写短列;图标选允许值及清空回退 |
37
+ | DevComponent | 明确页面/稳定别名、输入输出、权限、只读与生命周期;先证明标准控件无法表达,复杂租户页面优先微服务 |
38
+
39
+ 完整配置键、设计器标签、编辑器、选项和值域通过
40
+ `microi_get_form_component_catalog(component:"控件名")` 获取。无该工具的旧宿主查
41
+ [源码索引](component-config-index.md) 和当前客户端,不能编造键或退成文本框。
42
+ 目录是 PC 静态证据,不代表小程序已经实现每个配置。
43
+
44
+ ## 关联选择与回填
45
+
46
+ 先区分三件事:选择器显示名称、保存稳定 Id、把其它业务列保存为关联快照。
47
+ `SelectLabel` 只负责显示,`SelectSaveField` 只决定当前字段保存值,它们不会自动写
48
+ 负责人电话、岗位、组织等其它字段。`SelectedValueLookup` 只补显示名,也不等于业务回填。
49
+
50
+ 1. 用实时 Schema 和 `microi_get_field_list` 确认来源/目标字段、原 Config 和既有事件。
51
+ 2. 明确回填模式:历史单据通常保存选择时的快照;实时展示只读取,不在打开旧单据时
52
+ 自动改历史值。人工允许修改的快照需约定再次选择时是否覆盖。
53
+ 3. 按“目标字段 → 来源字段”列出完整映射,包括已有 Id、名称、负责人、电话等适用列。
54
+ 来源表只有 `OwnerId` 而没有电话时,需要继续按 OwnerId 查授权人员资料或使用受控
55
+ 接口返回完整投影;不得从字段名猜手机号,也不得假设 `Project.Phone` 必然存在。
56
+ 4. `Select` 的 `V8.ThisValue` 可能是字符串、数值、对象或旧 JSON 文本。按真实保存键解析,
57
+ 不无条件读取 `.Id`;空字符串/null 与数值 0 分开。Department 可能返回路径数组;
58
+ 多选必须明确数组、逐行明细或聚合规则,不能取第一条悄悄填到单值列。
59
+ 5. 改选和清空时清理本选择器拥有的回填列及依赖候选/旧选择;不清无关手填列。
60
+ 重新选择后不能保留上一位负责人的电话和岗位。
61
+ 6. 异步查询仅选所需字段,保留菜单/表/行/字段权限;失败显示原因。结果应用前核对
62
+ 表单、记录、依赖值和本次请求代次;A→B→A 也要丢弃第一次 A 的响应。
63
+ 自定义容器关闭、卸载和重开同记录还需取消请求或校验自己的打开代次。
64
+ 7. 既有 V8 不得被模板覆盖;先合并事件。前端只提供体验,重要项目归属、人员资格、
65
+ 金额和组织权限必须由后端表单事件/接口引擎重新读取权威数据并校验。
66
+
67
+ ### MCP 的单选回填构建器
68
+
69
+ `microi_build_field_config` 的既有数据源类型可附 `options.autoFill`:
70
+
71
+ ```json
72
+ {
73
+ "sourceType": "Sql",
74
+ "options": {
75
+ "sql": "select Id,Name from Biz_Project where IsDeleted=0 limit 0,20",
76
+ "selectLabel": "Name",
77
+ "selectSaveField": "Id",
78
+ "autoFill": {
79
+ "fieldName": "Project",
80
+ "targetTable": "Biz_Project",
81
+ "valueField": "Id",
82
+ "mappings": {
83
+ "ProjectId": "Id",
84
+ "ProjectName": "Name",
85
+ "OwnerId": "OwnerId",
86
+ "OwnerPhone": "OwnerPhone"
87
+ }
88
+ }
89
+ }
90
+ }
91
+ ```
92
+
93
+ 示例表/列必须替换成已回读的真实名称。当前选择字段 `Project` 保存来源 Id;目标
94
+ `ProjectId` 是业务外键,不是当前记录主键 `Id`。工具输出 `configJson` 和 `v8Code`,
95
+ 包含清空与异步代次保护,使用正常 `V8.FormEngine.GetFormData` 读取当前用户有权资料。
96
+ 它不会自动补来源 SQL 的业务资格条件;服务端仍需验证资格,不能把回填成功当成可提交。
97
+
98
+ Manifest 可在字段根部写同等 `autoFill`,省略 `fieldName`(生成器用当前字段名):
99
+
100
+ ```json
101
+ {
102
+ "name": "Project", "label": "项目", "component": "Select", "type": "varchar(50)",
103
+ "configSource": { "sourceType": "Sql", "sql": "select Id,Name from Biz_Project limit 0,20" },
104
+ "autoFill": {
105
+ "targetTable": "Biz_Project", "valueField": "Id",
106
+ "mappings": { "ProjectId": "Id", "ProjectName": "Name", "OwnerId": "OwnerId" }
107
+ }
108
+ }
109
+ ```
110
+
111
+ 对应目标列必须存在于当前表。`v8Code`/`V8Code` 在生成时同时写入根列与
112
+ `Config.V8Code`;两处不一致、已有事件与 autoFill 冲突时停止并合并。
113
+ 多跳依赖、树路径、多选汇总或接口专属资格规则自行写可维护的事件/接口,不冒用单记录模板。
114
+
115
+ 配套新版 PC 的 `FormSet` 会绑定启动事件的表单对象、记录与加载代次,切记录或重新加载后
116
+ 丢弃旧回写;旧 PC 没有此兜底。直接修改 `V8.Form`、自定义容器和其它异步副作用仍需自己的
117
+ 实例/打开代次检查,不能只更新 CLI 就宣称所有客户端已具备同等保护。
118
+
119
+ OpenTable 使用 `Config.OpenTable.SubmitV8` 和 `V8.TableRowSelected`。单选为行对象,
120
+ 多选为数组;明确写入每个目标字段,再关闭弹层。不能把 SubmitV8 写到字段 V8Code。
121
+
122
+ ## 日期、钟点、月日与时长
123
+
124
+ | 业务含义 | 控件 Config.DateTimeType | 前端显示/保存格式 |
125
+ |---|---|---|
126
+ | 日期 | `date` | `YYYY-MM-DD` |
127
+ | 日期与秒 | `datetime` | `YYYY-MM-DD HH:mm:ss` |
128
+ | 日期与分钟 | `datetime_HHmm` | `YYYY-MM-DD HH:mm` |
129
+ | 日期与小时(兼容) | `datetime_HH` | `YYYY-MM-DD HH` |
130
+ | 仅钟点 | `HH:mm` / `HH:mm:ss` | 同名格式 |
131
+ | 仅年月/年 | `month` / `year` | `YYYY-MM` / `YYYY` |
132
+ | 每年纪念日、生日月日 | `MM-dd` | Day.js `MM-DD`,例如 `11-04` |
133
+ | 年周 | `week` | `YYYY 第 ww 周`,按实际业务核对周定义 |
134
+ | 多选天/月/年 | `dates` / `months` / `years` | 对应字符串数组,物理列需容量支持序列化数组 |
135
+
136
+ `MM` 是月份,`mm` 是分钟;`MM-dd` 是字段协议,前端 Day.js 日号用 `DD`。
137
+ `MM-dd` 不是任意自由格式扩展,也不是 Element 的 picker type。旧 PC 需升级后才可使用。
138
+ 月日没有年份,普通字典序区间不能表达跨年范围;跨年生日筛选需明确 OR/业务查询。
139
+ 时长超过 24 小时、用时分钟数等使用数值和单位,不能误用日历/钟点控件。
140
+
141
+ Manifest 可声明 `valueKind:date/datetime/time/monthDay/month/year`。
142
+ 若配了 Text,预检拒绝;DateTime 未给 DateTimeType 时按语义补齐。未声明语义时,
143
+ 名称只能作为提示,不能按 `Time` 子串粗暴改写已有类型。单值日期通常用 `varchar(25)`,
144
+ 多值日期用足够长的 varchar/mediumtext;不用数据库 datetime/date/time 类型。
145
+
146
+ ## 生成、修复与验收
147
+
148
+ - 对全部字段检查上述契约,不能只检查 Select 和 DateTime。构建器通用控件接受
149
+ `sourceType:"Slider", options:{config:{Slider:{Min:0,Max:100,Step:1}}}`;完整 Config
150
+ 路径不能省成 `{Min:0}`。错误 JSON、非法格式和明显错误数值在写前拒绝。
151
+ - 缺少数据源/列定义等静态信息可能由运行事件动态提供:预检告警时须检查完整事件;
152
+ 未证明动态实现就不能当作可用表单交付。预检不是后端权限、运行 UI 或完整业务验收。
153
+ - 修改原字段先取完整 Config 再合并;保留 false、0、空字符串、NULL 与省略的区别,
154
+ 不把全目录默认配置一次性写入字段。保存后回读全部事件/Config/Data、刷新缓存。
155
+ - 至少验证:新增 A→改选 B→清空、快速 A→B→A、0 值、空/无权限/失败、
156
+ 编辑保存重开、只读历史快照、多选格式、导入/直接 HTTP 提交与后端校验。
157
+ 已授权开发/验收记录可用 `microi_add_form_data`、`microi_update_form_data` 验证直接提交,
158
+ 再用 `microi_get_table_data` 按准确 Id 回读;这些动作仍服从当前租户与写入授权。
159
+ - PC 与所承诺移动端分别验收。小程序不能执行任意前端 V8,须按当前原生白名单
160
+ ActionSchema 或后端表单事件实现同等规则;PC V8 测试不能冒充小程序联动通过。
@@ -18,7 +18,7 @@ Microi 吾码低代码提供 **三种** 表单分组能力,但每种都有明
18
18
  表单打开方式与分组是两个独立决策:顶层新表默认 `FormOpenType=Dialog`、
19
19
  `FormOpenWidth=80%`。完整系统开发的子表宽度按 `microi-system-delivery` 必读清单第 4 项配置:第一层 75%、第二层 70%,再逐层递减 5 个百分点。只有约 36 个以上业务字段、至少 2 个大型子表,或同等密度的重型控件
20
20
  才评估 Drawer;不能用 Drawer 代替 Tabs/CollapseGroup 的信息架构。Dialog 统一使用居中、可拖动、
21
- 大圆角弹层;Drawer 贴边且不使用大圆角。
21
+ 现有宿主 Dialog 壳;圆角依当前主题契约,独立应用采用适度圆角并遵循 ui-design,不以大圆角作为默认;Drawer 贴边。
22
22
 
23
23
  `CollapseGroup` 的运行态视觉统一使用清爽的白色/主题表面卡片:短主题色指示条、紧凑
24
24
  标题、可选图标、单行副标题、标题旁轻量 `x 项` 文案,以及最右侧无底色的折叠箭头。
@@ -171,6 +171,12 @@ if (ctx.token && ctx.token !== appliedHostToken) {
171
171
  普通 `request`、浏览器 `fetch(FormData)` 上传和 `uni.uploadFile` 都必须读取响应头的新 Token。验收时必须连续执行至少两个需要登录态的请求(前一个允许发生 Token 轮换),确认后一个仍返回 `Code=1`;不能只看页面首屏渲染成功。
172
172
  <!-- /microi-progressive:chunk -->
173
173
 
174
+ ### 嵌入长会话验收
175
+
176
+ - 从宿主标准登录开始,打开原菜单中的微应用,再切到原生列表使微应用隐藏;保持同一浏览器会话,跨过该次真实 JWT 的原始 `exp` 后返回原菜单,并执行新的受保护业务调用。分别证明宿主与子应用经标准机制续签、继承同一有效会话,以及返回后的 HTTP/业务结果;只保存脱敏时间和结果,不记录 Token。独立入口通过、缓存首屏、几分钟业务 heartbeat 或 SignalR 房间租期均不能代替宿主长会话验收;浏览器意外退出应记为中断。
177
+ - 若旧宿主从匿名登录页启动后没有开启原有维护,先核对事件作用域与宿主实际能力。在已授权租户中优先使用既有 `LoginEndV8Code` 调用现有根组件标准维护(如 `self.$root.RefreshTokenWithLock`);先完整读取并保留原文,采用项目命名的幂等追加,复用原租户锁和定时器销毁,注销后停止,多次登录不重复安装。写入后回读前后哈希与原文前缀、刷新对应配置缓存,再标准登录并跨真实有效期验证。
178
+ - 钩子只能启动现有标准维护,不得复制 JWT/HTTP 会话实现、另造 Token 算法、放宽鉴权或修改有效期。检查次数及未抛异常不代表续签成功,必须以真实续签响应、新会话同步和后续受保护调用为证据;本地 Skill 增补也不代表 CLI、插件、平台或既有应用已发行升级。
179
+
174
180
  ## 运行时 ApiBase / OsClient 切换
175
181
 
176
182
  允许用户切换平台的客户端必须把 `ApiBase + OsClient` 视为完整安全边界,而不是只替换请求 URL。候选端点应先匿名探测,成功后再原子更新配置并清除旧 Token、用户和平台派生缓存;账号、RSA 密文、菜单、表元数据和页面状态不得跨边界复用。SDK 每次修改 `apiBase` 或 `osClient` 都必须推进端点代次,请求记录发起时代次,并在处理响应头 Token、鉴权失效或响应体之前拒绝旧代次的迟到响应。验收至少覆盖“旧平台登录请求未返回 -> 切换平台 -> 旧响应携带 Token 返回”,并确认旧 Token 没有写入、新请求只发送一个新 `osclient`。