@pisell/materials 3.3.86 → 3.3.88

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 (231) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/index.js +1 -1
  5. package/build/lowcode/meta.js +4 -4
  6. package/build/lowcode/preview.js +8 -8
  7. package/build/lowcode/render/default/view.css +1 -1
  8. package/build/lowcode/render/default/view.js +25 -25
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +15 -15
  11. package/es/components/PisellLayouts/index.d.ts +0 -1
  12. package/es/components/PisellProcedure/PisellProcedure.stories.d.ts +163 -0
  13. package/es/components/PisellProcedure/index.d.ts +5 -0
  14. package/es/components/PisellSteps/PisellSteps.d.ts +14 -0
  15. package/es/components/dataSourceComponents/dataSourceSubForm/index.d.ts +13 -0
  16. package/es/components/dataSourceComponents/dataSourceSubForm/index.js +274 -0
  17. package/es/components/dataSourceComponents/dataSourceSubForm/index.less +19 -0
  18. package/es/components/dataSourceComponents/dataSourceSubForm/schema-full-example.json +544 -0
  19. package/es/components/dataSourceComponents/dataSourceSubForm/schema-simple-example.json +174 -0
  20. package/es/components/dataSourceComponents/dataSourceSubForm/types.d.ts +117 -0
  21. package/es/components/dataSourceComponents/dataSourceSubForm/types.js +1 -0
  22. package/es/components/dataSourceComponents/dataSourceTable/hooks/useDataSourceKey.d.ts +1 -0
  23. package/es/components/dataSourceComponents/dataSourceTable/hooks/useDrawerState.d.ts +1 -0
  24. package/es/components/dataSourceComponents/dataSourceTable/hooks/useTableQuery.d.ts +1 -0
  25. package/es/components/dataSourceComponents/fields/RecordListWrapper/ReadPretty.d.ts +9 -0
  26. package/es/components/dataSourceComponents/fields/RecordListWrapper/ReadPretty.js +61 -0
  27. package/es/components/dataSourceComponents/fields/RecordListWrapper/WithMode.d.ts +4 -0
  28. package/es/components/dataSourceComponents/fields/RecordListWrapper/WithMode.js +176 -0
  29. package/es/components/dataSourceComponents/fields/RecordListWrapper/index.d.ts +12 -0
  30. package/es/components/dataSourceComponents/fields/RecordListWrapper/index.js +11 -0
  31. package/es/components/dataSourceComponents/fields/RecordListWrapper/type.d.ts +87 -0
  32. package/es/components/dataSourceComponents/fields/RecordListWrapper/type.js +1 -0
  33. package/es/components/dataSourceComponents/fields/Tabs/ReadPretty.d.ts +9 -0
  34. package/es/components/dataSourceComponents/fields/Tabs/ReadPretty.js +16 -0
  35. package/es/components/dataSourceComponents/fields/Tabs/Tabs.d.ts +23 -0
  36. package/es/components/dataSourceComponents/fields/Tabs/Tabs.js +93 -0
  37. package/es/components/dataSourceComponents/fields/Tabs/Tabs.less +64 -0
  38. package/es/components/dataSourceComponents/fields/Tabs/WithMode.d.ts +6 -0
  39. package/es/components/dataSourceComponents/fields/Tabs/WithMode.js +9 -0
  40. package/es/components/dataSourceComponents/fields/Tabs/index.d.ts +12 -0
  41. package/es/components/dataSourceComponents/fields/Tabs/index.js +18 -0
  42. package/es/components/dataSourceComponents/fields/Tabs/type.d.ts +38 -0
  43. package/es/components/dataSourceComponents/fields/Tabs/type.js +1 -0
  44. package/es/components/dataSourceComponents/fields/Translation/BaseTranslation.d.ts +5 -0
  45. package/es/components/dataSourceComponents/fields/Translation/type.d.ts +21 -0
  46. package/es/components/dataSourceComponents/fields/Upload/utils.d.ts +1 -1
  47. package/es/components/dataSourceComponents/fields/index.d.ts +40 -2
  48. package/es/components/dataSourceComponents/fields/index.js +5 -1
  49. package/es/components/dataSourceComponents/fields/utils.js +3 -0
  50. package/es/components/pisellDataSourceContainer/hooks/useDataSourceKey.d.ts +1 -0
  51. package/es/components/pisellLookup/PisellLookup.d.ts +4 -0
  52. package/es/components/pisellLookup/PisellLookup.js +8 -1
  53. package/es/components/pisellLookup/components/LookupTrigger.d.ts +3 -0
  54. package/es/components/pisellWalletPassCard/index.js +1 -1
  55. package/es/components/productCard/components/Packages/utils.d.ts +2 -2
  56. package/es/components/table/Table/fields/select/index.d.ts +1 -0
  57. package/es/components/table/Table/fields/treeSelect/index.d.ts +1 -0
  58. package/es/components/table/Table/utils.d.ts +1 -1
  59. package/es/index.d.ts +4 -0
  60. package/es/index.js +3 -0
  61. package/lib/components/PisellLayouts/index.d.ts +0 -1
  62. package/lib/components/PisellProcedure/PisellProcedure.stories.d.ts +163 -0
  63. package/lib/components/PisellProcedure/index.d.ts +5 -0
  64. package/lib/components/PisellSteps/PisellSteps.d.ts +14 -0
  65. package/lib/components/dataSourceComponents/dataSourceSubForm/index.d.ts +13 -0
  66. package/lib/components/dataSourceComponents/dataSourceSubForm/index.js +229 -0
  67. package/lib/components/dataSourceComponents/dataSourceSubForm/index.less +19 -0
  68. package/lib/components/dataSourceComponents/dataSourceSubForm/schema-full-example.json +544 -0
  69. package/lib/components/dataSourceComponents/dataSourceSubForm/schema-simple-example.json +174 -0
  70. package/lib/components/dataSourceComponents/dataSourceSubForm/types.d.ts +117 -0
  71. package/lib/components/dataSourceComponents/dataSourceSubForm/types.js +17 -0
  72. package/lib/components/dataSourceComponents/dataSourceTable/hooks/useDataSourceKey.d.ts +1 -0
  73. package/lib/components/dataSourceComponents/dataSourceTable/hooks/useDrawerState.d.ts +1 -0
  74. package/lib/components/dataSourceComponents/dataSourceTable/hooks/useTableQuery.d.ts +1 -0
  75. package/lib/components/dataSourceComponents/fields/RecordListWrapper/ReadPretty.d.ts +9 -0
  76. package/lib/components/dataSourceComponents/fields/RecordListWrapper/ReadPretty.js +64 -0
  77. package/lib/components/dataSourceComponents/fields/RecordListWrapper/WithMode.d.ts +4 -0
  78. package/lib/components/dataSourceComponents/fields/RecordListWrapper/WithMode.js +157 -0
  79. package/lib/components/dataSourceComponents/fields/RecordListWrapper/index.d.ts +12 -0
  80. package/lib/components/dataSourceComponents/fields/RecordListWrapper/index.js +40 -0
  81. package/lib/components/dataSourceComponents/fields/RecordListWrapper/type.d.ts +87 -0
  82. package/lib/components/dataSourceComponents/fields/RecordListWrapper/type.js +17 -0
  83. package/lib/components/dataSourceComponents/fields/Tabs/ReadPretty.d.ts +9 -0
  84. package/lib/components/dataSourceComponents/fields/Tabs/ReadPretty.js +45 -0
  85. package/lib/components/dataSourceComponents/fields/Tabs/Tabs.d.ts +23 -0
  86. package/lib/components/dataSourceComponents/fields/Tabs/Tabs.js +95 -0
  87. package/lib/components/dataSourceComponents/fields/Tabs/Tabs.less +64 -0
  88. package/lib/components/dataSourceComponents/fields/Tabs/WithMode.d.ts +6 -0
  89. package/lib/components/dataSourceComponents/fields/Tabs/WithMode.js +39 -0
  90. package/lib/components/dataSourceComponents/fields/Tabs/index.d.ts +12 -0
  91. package/lib/components/dataSourceComponents/fields/Tabs/index.js +40 -0
  92. package/lib/components/dataSourceComponents/fields/Tabs/type.d.ts +38 -0
  93. package/lib/components/dataSourceComponents/fields/Tabs/type.js +17 -0
  94. package/lib/components/dataSourceComponents/fields/Translation/BaseTranslation.d.ts +5 -0
  95. package/lib/components/dataSourceComponents/fields/Translation/type.d.ts +21 -0
  96. package/lib/components/dataSourceComponents/fields/Upload/utils.d.ts +1 -1
  97. package/lib/components/dataSourceComponents/fields/index.d.ts +40 -2
  98. package/lib/components/dataSourceComponents/fields/index.js +5 -1
  99. package/lib/components/dataSourceComponents/fields/utils.js +3 -0
  100. package/lib/components/pisellDataSourceContainer/hooks/useDataSourceKey.d.ts +1 -0
  101. package/lib/components/pisellLookup/PisellLookup.d.ts +4 -0
  102. package/lib/components/pisellLookup/PisellLookup.js +5 -1
  103. package/lib/components/pisellLookup/components/LookupTrigger.d.ts +3 -0
  104. package/lib/components/pisellWalletPassCard/index.js +9 -2
  105. package/lib/components/productCard/components/Packages/utils.d.ts +2 -2
  106. package/lib/components/table/Table/fields/select/index.d.ts +1 -0
  107. package/lib/components/table/Table/fields/treeSelect/index.d.ts +1 -0
  108. package/lib/components/table/Table/utils.d.ts +1 -1
  109. package/lib/index.d.ts +4 -0
  110. package/lib/index.js +9 -0
  111. package/lowcode/auto-resize-text/meta.ts +9 -9
  112. package/lowcode/data-source-form/constants.ts +3 -0
  113. package/lowcode/data-source-form/utils.ts +31 -5
  114. package/lowcode/data-source-sub-form/meta.ts +259 -0
  115. package/lowcode/data-source-sub-form/snippets.ts +21 -0
  116. package/lowcode/form-item-record-list-wrapper/meta.ts +180 -0
  117. package/lowcode/form-item-record-list-wrapper/snippets.ts +18 -0
  118. package/lowcode/form-item-tabs/meta.ts +172 -0
  119. package/package.json +1 -1
  120. package/es/components/PisellCards/components/GraphicTextCard/components/BadgeWrapper.d.ts +0 -5
  121. package/es/components/PisellCards/components/GraphicTextCard/components/TextContent.d.ts +0 -27
  122. package/es/components/PisellCards/components/GraphicTextCard/hooks/index.d.ts +0 -5
  123. package/es/components/PisellCards/components/GraphicTextCard/hooks/useGraphicTextCardClick.d.ts +0 -15
  124. package/es/components/PisellCards/components/GraphicTextCard/hooks/useGraphicTextCardStyle.d.ts +0 -18
  125. package/es/components/PisellCards/components/GraphicTextCard/types.d.ts +0 -290
  126. package/es/components/PisellCards/components/GraphicTextCard/utils/index.d.ts +0 -19
  127. package/es/components/PisellCards/components/TextCard/TextCard.d.ts +0 -8
  128. package/es/components/PisellCards/components/TextCard/components/BadgeWrapper.d.ts +0 -26
  129. package/es/components/PisellCards/components/TextCard/components/IconWrapper.d.ts +0 -17
  130. package/es/components/PisellCards/components/TextCard/components/TextContent.d.ts +0 -21
  131. package/es/components/PisellCards/components/TextCard/components/index.d.ts +0 -6
  132. package/es/components/PisellCards/components/TextCard/index.d.ts +0 -5
  133. package/es/components/PisellCards/components/TextCard/types.d.ts +0 -270
  134. package/es/components/PisellCards/index.d.ts +0 -15
  135. package/es/components/config-provider/index.d.ts +0 -10
  136. package/es/components/dataSourceComponents/dataSourceTable/type.d.ts +0 -84
  137. package/es/components/dataSourceComponents/fields/Input.Phone/serve.d.ts +0 -27
  138. package/es/components/dataSourceComponents/fields/Upload/constants.d.ts +0 -9
  139. package/es/components/drag-sort-tree/index.d.ts +0 -5
  140. package/es/components/filter/components/Dropdown/types.d.ts +0 -13
  141. package/es/components/filter/components/FilterButton/types.d.ts +0 -24
  142. package/es/components/filter/types.d.ts +0 -48
  143. package/es/components/login-and-register/index.d.ts +0 -82
  144. package/es/components/pisellCurrency/PisellCurrency.d.ts +0 -39
  145. package/es/components/pisellDateTimeDisplay/utils/relativeDay.d.ts +0 -24
  146. package/es/components/pisellEmail/PisellEmail.d.ts +0 -37
  147. package/es/components/pisellFilter/type.d.ts +0 -5
  148. package/es/components/pisellGridPro/index.d.ts +0 -4
  149. package/es/components/pisellLongText/PisellLongText.d.ts +0 -39
  150. package/es/components/pisellMultipleSelect/PisellMultipleSelect.d.ts +0 -9
  151. package/es/components/pisellMultipleSelect/components/EditView.d.ts +0 -8
  152. package/es/components/pisellNumber/PisellNumber.d.ts +0 -42
  153. package/es/components/pisellPhone/PisellPhone.d.ts +0 -36
  154. package/es/components/pisellPhone/components/EditView.d.ts +0 -19
  155. package/es/components/pisellPhone/constants/countryCodes.d.ts +0 -20
  156. package/es/components/pisellPhone/types.d.ts +0 -209
  157. package/es/components/pisellPhone/utils/countryCodeHelper.d.ts +0 -35
  158. package/es/components/pisellQuickFilter/type.d.ts +0 -12
  159. package/es/components/pisellRating/PisellRating.d.ts +0 -31
  160. package/es/components/pisellRecordBoard/shellFrame/BatchActionBar/index.d.ts +0 -8
  161. package/es/components/pisellRecordBoard/shellFrame/Search/index.d.ts +0 -10
  162. package/es/components/pisellRecordBoard/shellFrame/ToolBarReset/index.d.ts +0 -16
  163. package/es/components/pisellSingleLineText/PisellSingleLineText.d.ts +0 -40
  164. package/es/components/pisellSingleSelect/PisellSingleSelect.d.ts +0 -9
  165. package/es/components/pisellTimeRangeDisplay/PisellTimeRangeDisplay.d.ts +0 -32
  166. package/es/components/pisellUrl/PisellUrl.d.ts +0 -37
  167. package/es/components/productCard/components/Header/DeleteButton/index.d.ts +0 -4
  168. package/es/components/productCard/components/Time/components/SelectHolder/index.d.ts +0 -4
  169. package/es/components/productCard/components/Time/components/SelectResource/index.d.ts +0 -19
  170. package/es/components/sort/index.d.ts +0 -5
  171. package/es/components/table/Actions/component/ViewMode/index.d.ts +0 -9
  172. package/es/components/table/Gallery/components/GalleryItem/index.d.ts +0 -14
  173. package/es/components/table/types.d.ts +0 -268
  174. package/es/components/translation/index.d.ts +0 -17
  175. package/es/components/translation/utils.d.ts +0 -9
  176. package/lib/components/PisellCards/components/GraphicTextCard/components/BadgeWrapper.d.ts +0 -5
  177. package/lib/components/PisellCards/components/GraphicTextCard/components/TextContent.d.ts +0 -27
  178. package/lib/components/PisellCards/components/GraphicTextCard/hooks/index.d.ts +0 -5
  179. package/lib/components/PisellCards/components/GraphicTextCard/hooks/useGraphicTextCardClick.d.ts +0 -15
  180. package/lib/components/PisellCards/components/GraphicTextCard/hooks/useGraphicTextCardStyle.d.ts +0 -18
  181. package/lib/components/PisellCards/components/GraphicTextCard/types.d.ts +0 -290
  182. package/lib/components/PisellCards/components/GraphicTextCard/utils/index.d.ts +0 -19
  183. package/lib/components/PisellCards/components/TextCard/TextCard.d.ts +0 -8
  184. package/lib/components/PisellCards/components/TextCard/components/BadgeWrapper.d.ts +0 -26
  185. package/lib/components/PisellCards/components/TextCard/components/IconWrapper.d.ts +0 -17
  186. package/lib/components/PisellCards/components/TextCard/components/TextContent.d.ts +0 -21
  187. package/lib/components/PisellCards/components/TextCard/components/index.d.ts +0 -6
  188. package/lib/components/PisellCards/components/TextCard/index.d.ts +0 -5
  189. package/lib/components/PisellCards/components/TextCard/types.d.ts +0 -270
  190. package/lib/components/PisellCards/index.d.ts +0 -15
  191. package/lib/components/config-provider/index.d.ts +0 -10
  192. package/lib/components/dataSourceComponents/dataSourceTable/type.d.ts +0 -84
  193. package/lib/components/dataSourceComponents/fields/Input.Phone/serve.d.ts +0 -27
  194. package/lib/components/dataSourceComponents/fields/Upload/constants.d.ts +0 -9
  195. package/lib/components/drag-sort-tree/index.d.ts +0 -5
  196. package/lib/components/filter/components/Dropdown/types.d.ts +0 -13
  197. package/lib/components/filter/components/FilterButton/types.d.ts +0 -24
  198. package/lib/components/filter/types.d.ts +0 -48
  199. package/lib/components/login-and-register/index.d.ts +0 -82
  200. package/lib/components/pisellCurrency/PisellCurrency.d.ts +0 -39
  201. package/lib/components/pisellDateTimeDisplay/utils/relativeDay.d.ts +0 -24
  202. package/lib/components/pisellEmail/PisellEmail.d.ts +0 -37
  203. package/lib/components/pisellFilter/type.d.ts +0 -5
  204. package/lib/components/pisellGridPro/index.d.ts +0 -4
  205. package/lib/components/pisellLongText/PisellLongText.d.ts +0 -39
  206. package/lib/components/pisellMultipleSelect/PisellMultipleSelect.d.ts +0 -9
  207. package/lib/components/pisellMultipleSelect/components/EditView.d.ts +0 -8
  208. package/lib/components/pisellNumber/PisellNumber.d.ts +0 -42
  209. package/lib/components/pisellPhone/PisellPhone.d.ts +0 -36
  210. package/lib/components/pisellPhone/components/EditView.d.ts +0 -19
  211. package/lib/components/pisellPhone/constants/countryCodes.d.ts +0 -20
  212. package/lib/components/pisellPhone/types.d.ts +0 -209
  213. package/lib/components/pisellPhone/utils/countryCodeHelper.d.ts +0 -35
  214. package/lib/components/pisellQuickFilter/type.d.ts +0 -12
  215. package/lib/components/pisellRating/PisellRating.d.ts +0 -31
  216. package/lib/components/pisellRecordBoard/shellFrame/BatchActionBar/index.d.ts +0 -8
  217. package/lib/components/pisellRecordBoard/shellFrame/Search/index.d.ts +0 -10
  218. package/lib/components/pisellRecordBoard/shellFrame/ToolBarReset/index.d.ts +0 -16
  219. package/lib/components/pisellSingleLineText/PisellSingleLineText.d.ts +0 -40
  220. package/lib/components/pisellSingleSelect/PisellSingleSelect.d.ts +0 -9
  221. package/lib/components/pisellTimeRangeDisplay/PisellTimeRangeDisplay.d.ts +0 -32
  222. package/lib/components/pisellUrl/PisellUrl.d.ts +0 -37
  223. package/lib/components/productCard/components/Header/DeleteButton/index.d.ts +0 -4
  224. package/lib/components/productCard/components/Time/components/SelectHolder/index.d.ts +0 -4
  225. package/lib/components/productCard/components/Time/components/SelectResource/index.d.ts +0 -19
  226. package/lib/components/sort/index.d.ts +0 -5
  227. package/lib/components/table/Actions/component/ViewMode/index.d.ts +0 -9
  228. package/lib/components/table/Gallery/components/GalleryItem/index.d.ts +0 -14
  229. package/lib/components/table/types.d.ts +0 -268
  230. package/lib/components/translation/index.d.ts +0 -17
  231. package/lib/components/translation/utils.d.ts +0 -9
@@ -9,7 +9,7 @@ const AutoResizeTextMeta: ComponentMetadata = {
9
9
  "devMode": "proCode",
10
10
  "npm": {
11
11
  "package": "@pisell/materials",
12
- "version": "3.3.85",
12
+ "version": "3.3.87",
13
13
  "exportName": "AutoResizeText",
14
14
  "main": "src/index.tsx",
15
15
  "destructuring": true,
@@ -277,6 +277,10 @@ const AutoResizeTextMeta: ComponentMetadata = {
277
277
  "label": "progress",
278
278
  "value": "progress"
279
279
  },
280
+ {
281
+ "label": "label",
282
+ "value": "label"
283
+ },
280
284
  {
281
285
  "label": "title",
282
286
  "value": "title"
@@ -549,10 +553,6 @@ const AutoResizeTextMeta: ComponentMetadata = {
549
553
  "label": "kbd",
550
554
  "value": "kbd"
551
555
  },
552
- {
553
- "label": "label",
554
- "value": "label"
555
- },
556
556
  {
557
557
  "label": "legend",
558
558
  "value": "legend"
@@ -751,6 +751,10 @@ const AutoResizeTextMeta: ComponentMetadata = {
751
751
  "label": "progress",
752
752
  "value": "progress"
753
753
  },
754
+ {
755
+ "label": "label",
756
+ "value": "label"
757
+ },
754
758
  {
755
759
  "label": "title",
756
760
  "value": "title"
@@ -1023,10 +1027,6 @@ const AutoResizeTextMeta: ComponentMetadata = {
1023
1027
  "label": "kbd",
1024
1028
  "value": "kbd"
1025
1029
  },
1026
- {
1027
- "label": "label",
1028
- "value": "label"
1029
- },
1030
1030
  {
1031
1031
  "label": "legend",
1032
1032
  "value": "legend"
@@ -17,6 +17,7 @@ import formItemRadioGroupMeta from '../form-item-radio.group/meta';
17
17
  import formItemSelectMeta from '../form-item-select/meta';
18
18
  import formItemTimePickerMeta from '../form-item-time-picker/meta';
19
19
  import formItemUploadMeta from '../form-item-upload/meta';
20
+ import formItemRecordListWrapperMeta from '../form-item-record-list-wrapper/meta';
20
21
 
21
22
  export const metaAll = [
22
23
  formItemCheckboxMeta,
@@ -38,6 +39,7 @@ export const metaAll = [
38
39
  formItemSelectMeta,
39
40
  formItemTimePickerMeta,
40
41
  formItemUploadMeta,
42
+ formItemRecordListWrapperMeta,
41
43
  ]
42
44
 
43
45
  export const formItemMetaMap: Record<string, any> = metaAll.reduce((p, c) => {
@@ -75,6 +77,7 @@ export const nocobaseCpt2PisellCptMap: Record<string, any> = {
75
77
  Upload: 'FormItemUpload',
76
78
  Translation: "FormItemTranslation",
77
79
  IconPicker: "FormItemIconSelect",
80
+ RecordListWrapper: 'FormItemRecordListWrapper',
78
81
  };
79
82
 
80
83
 
@@ -5,6 +5,7 @@ import {
5
5
  systemFields,
6
6
  formItemMetaMap,
7
7
  } from './constants';
8
+ import { parseXRecordSchemaToChildSchemas } from '../data-source-sub-form/meta';
8
9
 
9
10
  type UiSchema = {
10
11
  title: string;
@@ -30,7 +31,8 @@ type UiSchema = {
30
31
  dataSource?: any;
31
32
  extraParams?: Record<string, any>;
32
33
  };
33
- type: 'string' | 'number' | 'boolean' | 'array' | 'object';
34
+ 'x-record-schema'?: Record<string, any> | Record<string, any>[] | string;
35
+ type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object';
34
36
  };
35
37
 
36
38
  // 创建表单组
@@ -131,6 +133,7 @@ export const createFormItemSchema = (
131
133
  item: {
132
134
  name: string;
133
135
  uiSchema: UiSchema;
136
+ schema?: Record<string, any>;
134
137
  children?: any[];
135
138
  _children?: any[];
136
139
  interface?: string;
@@ -303,12 +306,33 @@ export const createFormItemSchema = (
303
306
  componentName = 'Translation';
304
307
  }
305
308
 
309
+ // 注入默认值
310
+ props.defaultValue = defaultValue;
311
+
306
312
  // 获取选项配置
307
- const dataSourceConfig = (uiSchema as any)?.['x-data-source'];
313
+ const dataSourceConfig = (uiSchema as any)?.['x-data-source'] || item?.schema?.['x-data-source'];
314
+ const recordSchemaConfig = (uiSchema as any)?.['x-record-schema'] || item?.schema?.['x-record-schema'];
315
+ const isRecordListWrapper =
316
+ item?.interface === 'RecordListWrapper' || xComponent === 'RecordListWrapper';
317
+
318
+ if (isRecordListWrapper) {
319
+ cptTitle = '记录列表包装器';
320
+ componentName = 'RecordListWrapper';
321
+ props.xRecordSchema = recordSchemaConfig;
322
+
323
+ // 自动将 recordSchemaConfig 解析为子节点 Schema,与 JsonSetter 的 setValue 保持一致,
324
+ // 避免用户必须在低代码面板手动触发 JsonSetter 才能渲染子表单字段。
325
+ if (recordSchemaConfig) {
326
+ childrenSchema = parseXRecordSchemaToChildSchemas(recordSchemaConfig);
327
+ } else {
328
+ childrenSchema = [];
329
+ }
330
+ }
308
331
 
309
332
  if (
310
- ['Select', 'Radio.Group', 'Checkbox.Group'].includes(xComponent) &&
311
- (uiSchema?.enum?.length > 0 || dataSourceConfig)
333
+ (['Select', 'Radio.Group', 'Checkbox.Group'].includes(xComponent) ||
334
+ isRecordListWrapper) &&
335
+ (uiSchema?.enum?.length > 0 || dataSourceConfig || isRecordListWrapper)
312
336
  ) {
313
337
  if (['Radio.Group', 'Checkbox.Group'].includes(xComponent)) {
314
338
  props.direction = 'horizontal';
@@ -343,7 +367,7 @@ export const createFormItemSchema = (
343
367
  const optionConfig = dataSourceConfig || {};
344
368
 
345
369
  // 设置 optionSourceType
346
- props.optionSourceType = optionConfig?.type || 'default';
370
+ props.optionSourceType = optionConfig?.type || '';
347
371
 
348
372
  // 根据 sourceType 设置不同的配置
349
373
  if (props.optionSourceType === 'default') {
@@ -427,6 +451,8 @@ export const createFormItemSchema = (
427
451
  schemaType = type as any;
428
452
  } else if (xComponent === 'InputNumber' || xComponent === 'Percent') {
429
453
  schemaType = 'number';
454
+ } else if (componentName === 'RecordListWrapper') {
455
+ schemaType = 'array';
430
456
  } else if (xComponent === 'Input.JSON' || item?.interface === 'i18nInput') {
431
457
  schemaType = 'object';
432
458
  } else if (['Checkbox.Group', 'Select'].includes(xComponent) && props.mode === 'multiple') {
@@ -0,0 +1,259 @@
1
+ import snippets from './snippets';
2
+ import { createFormItemSchema } from '../data-source-form/utils';
3
+
4
+ /**
5
+ * @title 将 xRecordSchema JSON 字段定义转换为低代码子组件 Schema
6
+ * @description
7
+ * 解析 xRecordSchema(支持单对象、数组、字符串),对每个字段补全 uiSchema,
8
+ * 调用 createFormItemSchema 生成低代码引擎可识别的组件 Schema。
9
+ */
10
+ export const parseXRecordSchemaToChildSchemas = (value: any): any[] => {
11
+ let fields = value;
12
+
13
+ // 解析字符串
14
+ if (typeof fields === 'string') {
15
+ try {
16
+ fields = JSON.parse(fields);
17
+ } catch {
18
+ return [];
19
+ }
20
+ }
21
+
22
+ if (!fields) {
23
+ return [];
24
+ }
25
+
26
+ // 处理 properties 格式
27
+ if (fields.properties && typeof fields.properties === 'object') {
28
+ fields = Object.keys(fields.properties).map((name) => ({
29
+ ...fields.properties[name],
30
+ name,
31
+ }));
32
+ }
33
+
34
+ // 处理 fields 格式
35
+ if (fields.fields && Array.isArray(fields.fields)) {
36
+ fields = fields.fields;
37
+ }
38
+
39
+ // 处理 children 格式
40
+ if (fields.children && Array.isArray(fields.children)) {
41
+ fields = fields.children;
42
+ }
43
+
44
+ // 单对象转数组
45
+ if (!Array.isArray(fields)) {
46
+ fields = [fields];
47
+ }
48
+
49
+ // 补全每个字段的 uiSchema 并生成子组件 Schema
50
+ return fields
51
+ .filter(Boolean)
52
+ .map((field: any) => {
53
+ const uiSchema = { ...(field.uiSchema || {}) };
54
+
55
+ // 从 interface 映射 x-component(如 Select、Input 等)
56
+ if (!uiSchema['x-component'] && field.interface) {
57
+ uiSchema['x-component'] = field.interface;
58
+ }
59
+
60
+ // 兼容简单格式(只有 componentName/component,没有 interface 和 uiSchema)
61
+ if (!uiSchema['x-component']) {
62
+ uiSchema['x-component'] =
63
+ field.componentName || field.component || 'Input';
64
+ }
65
+
66
+ // 从 field.type 映射 uiSchema.type
67
+ if (!uiSchema.type && field.type) {
68
+ uiSchema.type = field.type;
69
+ }
70
+
71
+ // 确保 title 存在(用于生成 label)
72
+ if (!uiSchema.title && field.label) {
73
+ uiSchema.title = field.label;
74
+ }
75
+
76
+ return createFormItemSchema({ ...field, uiSchema }, 'edit');
77
+ })
78
+ .filter((schema: any) => !!schema?.componentName);
79
+ };
80
+
81
+ export default {
82
+ snippets,
83
+ componentName: 'DataSourceSubForm',
84
+ title: '子表单',
85
+ category: '无代码表单',
86
+ group: '无代码组件',
87
+ docUrl: '',
88
+ screenshot: '',
89
+ devMode: 'proCode',
90
+ npm: {
91
+ package: '@pisell/materials',
92
+ version: '1.0.3',
93
+ exportName: 'DataSourceSubForm',
94
+ main: 'src/index.tsx',
95
+ destructuring: true,
96
+ subName: '',
97
+ },
98
+ generalProps: [
99
+ {
100
+ type: 'group',
101
+ title: {
102
+ type: 'i18n',
103
+ 'en-US': 'Data',
104
+ 'zh-CN': '数据',
105
+ },
106
+ display: 'accordion',
107
+ items: [
108
+ {
109
+ name: 'value',
110
+ title: {
111
+ label: {
112
+ type: 'i18n',
113
+ 'en-US': 'Value',
114
+ 'zh-CN': '表单值',
115
+ },
116
+ tip: {
117
+ type: 'i18n',
118
+ 'en-US': 'Form value object',
119
+ 'zh-CN': '表单值对象',
120
+ },
121
+ },
122
+ setter: ['JsonSetter', 'VariableSetter'],
123
+ },
124
+ {
125
+ name: 'xRecordSchema',
126
+ title: {
127
+ label: {
128
+ type: 'i18n',
129
+ 'en-US': 'Record Schema',
130
+ 'zh-CN': '字段配置',
131
+ },
132
+ tip: {
133
+ type: 'i18n',
134
+ 'en-US':
135
+ 'Define form fields structure, supports JSON string, array, or object format',
136
+ 'zh-CN': '定义表单字段结构,支持 JSON 字符串、数组或对象格式',
137
+ },
138
+ },
139
+ setter: ['JsonSetter', 'StringSetter', 'VariableSetter'],
140
+ extraProps: {
141
+ setValue(target: any, value: any) {
142
+ // 先写入 prop 值,确保持久化
143
+ const result = target.getProps().setPropValue('xRecordSchema', value);
144
+
145
+ const parsedSchemas = parseXRecordSchemaToChildSchemas(value);
146
+
147
+ // 先清空现有子节点,避免第二次及之后调用时 importSchema 做 diff/merge 导致节点数量异常
148
+ target.node.children.importSchema([]);
149
+ // 节点刚添加时可能尚未挂载完成,用 setTimeout 错开时序
150
+ setTimeout(() => {
151
+ target.node.children.importSchema(parsedSchemas);
152
+ // replaceSchema 后有概率不触发重渲染,手动 rerender
153
+ setTimeout(() => {
154
+ target.document?.project?.simulatorHost?.rerender();
155
+ });
156
+ });
157
+
158
+ return result;
159
+ },
160
+ },
161
+ },
162
+ ],
163
+ },
164
+ {
165
+ type: 'group',
166
+ title: {
167
+ type: 'i18n',
168
+ 'en-US': 'Appearance',
169
+ 'zh-CN': '外观',
170
+ },
171
+ display: 'accordion',
172
+ items: [
173
+ {
174
+ name: 'renderMode',
175
+ title: {
176
+ label: {
177
+ type: 'i18n',
178
+ 'en-US': 'Render Mode',
179
+ 'zh-CN': '渲染模式',
180
+ },
181
+ },
182
+ defaultValue: 'edit',
183
+ setter: [
184
+ {
185
+ componentName: 'RadioGroupSetter',
186
+ props: {
187
+ options: [
188
+ { title: '编辑', value: 'edit' },
189
+ { title: '禁用', value: 'disabled' },
190
+ { title: '预览', value: 'preview' },
191
+ ],
192
+ },
193
+ },
194
+ 'VariableSetter',
195
+ ],
196
+ },
197
+ {
198
+ name: 'layout',
199
+ title: {
200
+ label: {
201
+ type: 'i18n',
202
+ 'en-US': 'Layout',
203
+ 'zh-CN': '布局方式',
204
+ },
205
+ },
206
+ defaultValue: 'vertical',
207
+ setter: [
208
+ {
209
+ componentName: 'RadioGroupSetter',
210
+ props: {
211
+ options: [
212
+ { title: '垂直', value: 'vertical' },
213
+ { title: '水平', value: 'horizontal' },
214
+ { title: '行内', value: 'inline' },
215
+ ],
216
+ },
217
+ },
218
+ 'VariableSetter',
219
+ ],
220
+ },
221
+ ],
222
+ },
223
+ ],
224
+ configure: {
225
+ props: [
226
+ {
227
+ name: 'onChange',
228
+ title: {
229
+ label: {
230
+ type: 'i18n',
231
+ 'en-US': 'On Change',
232
+ 'zh-CN': '值变化回调',
233
+ },
234
+ },
235
+ setter: {
236
+ componentName: 'FunctionSetter',
237
+ props: {
238
+ template:
239
+ 'onChange(value,${extParams}){\n// 表单值变化时触发\nconsole.log("onChange", value);\n}',
240
+ },
241
+ },
242
+ },
243
+ ],
244
+ component: {
245
+ isContainer: true,
246
+ },
247
+ supports: {
248
+ style: true,
249
+ className: true,
250
+ events: [
251
+ {
252
+ name: 'onChange',
253
+ template:
254
+ 'onChange(value,${extParams}){\n// 表单值变化时触发\nconsole.log("onChange", value);\n}',
255
+ },
256
+ ],
257
+ },
258
+ },
259
+ };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @title DataSourceSubForm 组件片段
3
+ * @description 定义组件在低代码平台中的初始配置
4
+ */
5
+ const snippets = [
6
+ {
7
+ title: '子表单',
8
+ screenshot: '',
9
+ schema: {
10
+ componentName: 'DataSourceSubForm',
11
+ props: {
12
+ renderMode: 'edit',
13
+ layout: 'vertical',
14
+ value: {},
15
+ xRecordSchema: [],
16
+ },
17
+ },
18
+ },
19
+ ];
20
+
21
+ export default snippets;
@@ -0,0 +1,180 @@
1
+ import snippets from './snippets';
2
+ import {
3
+ formItemGeneralDataGroup,
4
+ generalItemMap,
5
+ getFormItemGeneralInfoGroup,
6
+ formItemGeneralOptionTypeGroup,
7
+ } from '../_utils/defaultSchema';
8
+ import { parseXRecordSchemaToChildSchemas } from '../data-source-sub-form/meta';
9
+
10
+ export default {
11
+ snippets,
12
+ componentName: 'FormItemRecordListWrapper',
13
+ title: '记录列表包装器',
14
+ category: '无代码表单',
15
+ group: '无代码组件',
16
+ docUrl: '',
17
+ screenshot: '',
18
+ devMode: 'proCode',
19
+ npm: {
20
+ package: '@pisell/materials',
21
+ version: '1.0.1',
22
+ exportName: 'FormItemRecordListWrapper',
23
+ main: 'src/index.tsx',
24
+ destructuring: true,
25
+ subName: '',
26
+ },
27
+ generalProps: [
28
+ // 数据分组
29
+ formItemGeneralDataGroup,
30
+ // 信息分组
31
+ getFormItemGeneralInfoGroup([
32
+ generalItemMap['label'],
33
+ generalItemMap['placeholder'],
34
+ generalItemMap['tooltip'],
35
+ generalItemMap['extra'],
36
+ generalItemMap['hideLabel'],
37
+ generalItemMap['renderMode'],
38
+ generalItemMap['defaultValue'],
39
+ ]),
40
+ // 选项类型分组
41
+ formItemGeneralOptionTypeGroup,
42
+ // Schema 分组
43
+ {
44
+ type: 'group',
45
+ title: {
46
+ type: 'i18n',
47
+ 'en-US': 'Schema',
48
+ 'zh-CN': 'Schema',
49
+ },
50
+ display: 'accordion',
51
+ items: [
52
+ {
53
+ name: 'xRecordSchema',
54
+ title: {
55
+ label: {
56
+ type: 'i18n',
57
+ 'en-US': 'Record Schema',
58
+ 'zh-CN': '记录字段配置',
59
+ },
60
+ tip: {
61
+ type: 'i18n',
62
+ 'en-US':
63
+ 'Define the fields for each record. When configured, the system will automatically generate form fields based on the schema. You can also manually drag form items into the container.',
64
+ 'zh-CN':
65
+ '定义每条记录的字段结构。配置后,系统会自动根据 Schema 生成表单字段。你也可以手动拖拽表单项到容器中。',
66
+ },
67
+ },
68
+ propType: 'string',
69
+ setter: 'JsonSetter',
70
+ description: `
71
+ 示例配置:
72
+ [
73
+ {
74
+ "name": "code",
75
+ "uiSchema": {
76
+ "title": "代码",
77
+ "x-component": "Input",
78
+ "x-component-props": {
79
+ "placeholder": "请输入代码"
80
+ }
81
+ }
82
+ },
83
+ {
84
+ "name": "type",
85
+ "uiSchema": {
86
+ "title": "类型",
87
+ "x-component": "Select",
88
+ "enum": [
89
+ { "label": "类型A", "value": "a" },
90
+ { "label": "类型B", "value": "b" }
91
+ ]
92
+ }
93
+ }
94
+ ]
95
+ `,
96
+ extraProps: {
97
+ /**
98
+ * 当 xRecordSchema 值变化时,解析 JSON 并生成子组件节点
99
+ */
100
+ setValue(target: any, value: any) {
101
+ const result = target
102
+ .getProps()
103
+ .setPropValue('xRecordSchema', value);
104
+
105
+ const parsedSchemas = parseXRecordSchemaToChildSchemas(value);
106
+
107
+ // 先清空现有子节点,避免第二次及之后调用时 importSchema 做 diff/merge 导致节点数量异常
108
+ target.node.children.importSchema([]);
109
+ // 节点刚添加时可能尚未挂载完成,用 setTimeout 错开时序
110
+ setTimeout(() => {
111
+ target.node.children.importSchema(parsedSchemas);
112
+ // replaceSchema 后有概率不触发重渲染,手动 rerender
113
+ setTimeout(() => {
114
+ target.document?.project?.simulatorHost?.rerender();
115
+ });
116
+ });
117
+
118
+ return result;
119
+ },
120
+ },
121
+ },
122
+ ],
123
+ },
124
+ // 插槽分组
125
+ {
126
+ type: 'group',
127
+ title: {
128
+ type: 'i18n',
129
+ 'en-US': 'Slot',
130
+ 'zh-CN': '插槽',
131
+ },
132
+ display: 'accordion',
133
+ items: [
134
+ {
135
+ name: 'topSlot',
136
+ title: {
137
+ label: {
138
+ type: 'i18n',
139
+ 'en-US': 'Tab Area',
140
+ 'zh-CN': 'Tab 区域',
141
+ },
142
+ tip: {
143
+ type: 'i18n',
144
+ 'en-US':
145
+ 'Drag a component here to customize the tab navigation. The component will receive options, value, and onChange props.',
146
+ 'zh-CN':
147
+ '拖入自定义组件来替换默认 Tab 导航。组件会自动接收 options、value、onChange 属性。',
148
+ },
149
+ },
150
+ setter: {
151
+ componentName: 'SlotSetter',
152
+ initialValue: {
153
+ type: 'JSSlot',
154
+ value: [],
155
+ },
156
+ },
157
+ },
158
+ ],
159
+ },
160
+ ],
161
+ configure: {
162
+ component: {
163
+ isContainer: true,
164
+ },
165
+ supports: {
166
+ style: true,
167
+ events: [
168
+ { name: 'onChange', template: 'onChange(value,${extParams}){}' },
169
+ ],
170
+ },
171
+ advanced: {
172
+ callbacks: {
173
+ // 当拖入新组件时的回调
174
+ onNodeAdd: (dragment: any, currentNode: any) => {
175
+ console.log('RecordListWrapper: 新增子组件', dragment?.componentName);
176
+ },
177
+ },
178
+ },
179
+ },
180
+ };
@@ -0,0 +1,18 @@
1
+ const snippets = [
2
+ {
3
+ title: '记录列表包装器',
4
+ screenshot: '',
5
+ schema: {
6
+ componentName: 'FormItemRecordListWrapper',
7
+ props: {
8
+ label: '记录列表',
9
+ name: 'recordList',
10
+ optionSourceType: 'default',
11
+ options: [],
12
+ xRecordSchema: null,
13
+ },
14
+ },
15
+ },
16
+ ];
17
+
18
+ export default snippets;