@pisell/materials 1.0.977 → 1.0.979

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 (141) 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 +6 -6
  6. package/build/lowcode/preview.js +9 -9
  7. package/build/lowcode/render/default/view.css +1 -1
  8. package/build/lowcode/render/default/view.js +15 -15
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +23 -23
  11. package/es/components/PisellProcedure/PisellProcedure.d.ts +27 -0
  12. package/es/components/PisellProcedure/components/ProcedureAction.d.ts +8 -0
  13. package/es/components/PisellProcedure/components/ProcedureContent.d.ts +8 -0
  14. package/es/components/PisellProcedure/components/ProcedureHeader.d.ts +8 -0
  15. package/es/components/PisellProcedure/components/ProcedureSummary.d.ts +8 -0
  16. package/es/components/PisellProcedure/hooks/useResponsive.d.ts +6 -0
  17. package/es/components/PisellProcedure/index.d.ts +4 -0
  18. package/es/components/PisellProcedure/types.d.ts +303 -0
  19. package/es/components/PisellSteps/PisellSteps.d.ts +14 -0
  20. package/es/components/PisellSteps/PisellSteps.js +170 -148
  21. package/es/components/PisellSteps/PisellSteps.less +248 -383
  22. package/es/components/PisellSteps/hooks/index.d.ts +4 -0
  23. package/es/components/PisellSteps/hooks/index.js +4 -0
  24. package/es/components/PisellSteps/hooks/useAnchor.d.ts +9 -0
  25. package/es/components/PisellSteps/hooks/useAnchor.js +55 -0
  26. package/es/components/PisellSteps/hooks/useResponsive.d.ts +8 -0
  27. package/es/components/PisellSteps/hooks/useResponsive.js +43 -0
  28. package/es/components/PisellSteps/hooks/useStepClick.d.ts +11 -0
  29. package/es/components/PisellSteps/hooks/useStepClick.js +35 -0
  30. package/es/components/PisellSteps/hooks/useStepsState.d.ts +9 -0
  31. package/es/components/PisellSteps/hooks/useStepsState.js +60 -0
  32. package/es/components/PisellSteps/index.d.ts +3 -0
  33. package/es/components/PisellSteps/index.js +2 -5
  34. package/es/components/PisellSteps/types.d.ts +271 -0
  35. package/es/components/PisellSteps/utils/index.d.ts +54 -0
  36. package/es/components/PisellSteps/utils/index.js +118 -0
  37. package/es/components/Template/PisellSteps.d.ts +0 -0
  38. package/es/components/Template/PisellSteps.js +1 -0
  39. package/es/components/Template/PisellSteps.less +1 -0
  40. package/es/components/Template/components/index.d.ts +0 -0
  41. package/es/components/Template/components/index.js +1 -0
  42. package/es/components/Template/hooks/index.d.ts +0 -0
  43. package/es/components/Template/hooks/index.js +1 -0
  44. package/es/components/Template/utils/index.d.ts +0 -0
  45. package/es/components/Template/utils/index.js +1 -0
  46. package/es/components/dataSourceComponents/dataSourceForm/submitButton/index.js +5 -5
  47. package/es/components/dataSourceComponents/dataSourceForm/urlUtils.d.ts +0 -10
  48. package/es/components/dataSourceComponents/dataSourceForm/urlUtils.js +13 -64
  49. package/es/components/dataSourceComponents/dataSourceForm/utils.d.ts +56 -0
  50. package/es/components/dataSourceComponents/dataSourceForm/utils.js +3 -4
  51. package/es/components/dataSourceComponents/dataSourceTable/filter/index.d.ts +1 -0
  52. package/es/components/dataSourceComponents/dataSourceTable/hooks/useTableProps.d.ts +101 -0
  53. package/es/components/dataSourceComponents/fields/Input.Mobile/WithMode.d.ts +17 -0
  54. package/es/components/dataSourceComponents/fields/Input.Phone/WithMode.d.ts +16 -0
  55. package/es/components/dataSourceComponents/fields/Select/index.d.ts +1 -1
  56. package/es/components/dataSourceComponents/fields/Switch/ReadPretty.d.ts +5 -0
  57. package/es/components/dataSourceComponents/fields/Switch/ReadPretty.js +16 -0
  58. package/es/components/dataSourceComponents/fields/Switch/ReadPretty.less +2 -0
  59. package/es/components/dataSourceComponents/fields/Switch/WithMode.d.ts +3 -0
  60. package/es/components/dataSourceComponents/fields/Switch/WithMode.js +5 -0
  61. package/es/components/dataSourceComponents/fields/Switch/index.d.ts +3 -0
  62. package/es/components/dataSourceComponents/fields/Switch/index.js +8 -0
  63. package/es/components/dataSourceComponents/fields/Switch/type.d.ts +16 -0
  64. package/es/components/dataSourceComponents/fields/Switch/type.js +1 -0
  65. package/es/components/dataSourceComponents/fields/index.d.ts +12 -12
  66. package/es/components/dataSourceComponents/provider/variables/VariablesProvider.d.ts +4 -0
  67. package/es/components/pisellCardList/index.d.ts +107 -0
  68. package/es/components/pisellGoodPassCard/index.d.ts +50 -0
  69. package/es/components/pisellWalletPassCard/index.d.ts +146 -0
  70. package/es/components/productCard/index.d.ts +7 -0
  71. package/es/index.d.ts +149 -0
  72. package/es/index.js +1 -1
  73. package/lib/components/PisellProcedure/PisellProcedure.d.ts +27 -0
  74. package/lib/components/PisellProcedure/components/ProcedureAction.d.ts +8 -0
  75. package/lib/components/PisellProcedure/components/ProcedureContent.d.ts +8 -0
  76. package/lib/components/PisellProcedure/components/ProcedureHeader.d.ts +8 -0
  77. package/lib/components/PisellProcedure/components/ProcedureSummary.d.ts +8 -0
  78. package/lib/components/PisellProcedure/hooks/useResponsive.d.ts +6 -0
  79. package/lib/components/PisellProcedure/index.d.ts +4 -0
  80. package/lib/components/PisellProcedure/types.d.ts +303 -0
  81. package/lib/components/PisellSteps/PisellSteps.d.ts +14 -0
  82. package/lib/components/PisellSteps/PisellSteps.js +155 -102
  83. package/lib/components/PisellSteps/PisellSteps.less +248 -383
  84. package/lib/components/PisellSteps/hooks/index.d.ts +4 -0
  85. package/lib/components/PisellSteps/hooks/index.js +38 -0
  86. package/lib/components/PisellSteps/hooks/useAnchor.d.ts +9 -0
  87. package/lib/components/PisellSteps/hooks/useAnchor.js +63 -0
  88. package/lib/components/PisellSteps/hooks/useResponsive.d.ts +8 -0
  89. package/lib/components/PisellSteps/hooks/useResponsive.js +48 -0
  90. package/lib/components/PisellSteps/hooks/useStepClick.d.ts +11 -0
  91. package/lib/components/PisellSteps/hooks/useStepClick.js +55 -0
  92. package/lib/components/PisellSteps/hooks/useStepsState.d.ts +9 -0
  93. package/lib/components/PisellSteps/hooks/useStepsState.js +54 -0
  94. package/lib/components/PisellSteps/index.d.ts +3 -0
  95. package/lib/components/PisellSteps/index.js +2 -7
  96. package/lib/components/PisellSteps/types.d.ts +271 -0
  97. package/lib/components/PisellSteps/utils/index.d.ts +54 -0
  98. package/lib/components/PisellSteps/utils/index.js +88 -0
  99. package/lib/components/Template/PisellSteps.d.ts +0 -0
  100. package/lib/components/Template/PisellSteps.js +0 -0
  101. package/lib/components/Template/PisellSteps.less +1 -0
  102. package/lib/components/Template/components/index.d.ts +0 -0
  103. package/lib/components/Template/components/index.js +0 -0
  104. package/lib/components/Template/hooks/index.d.ts +0 -0
  105. package/lib/components/Template/hooks/index.js +0 -0
  106. package/lib/components/Template/utils/index.d.ts +0 -0
  107. package/lib/components/Template/utils/index.js +0 -0
  108. package/lib/components/dataSourceComponents/dataSourceForm/submitButton/index.js +4 -4
  109. package/lib/components/dataSourceComponents/dataSourceForm/urlUtils.d.ts +0 -10
  110. package/lib/components/dataSourceComponents/dataSourceForm/urlUtils.js +3 -25
  111. package/lib/components/dataSourceComponents/dataSourceForm/utils.d.ts +56 -0
  112. package/lib/components/dataSourceComponents/dataSourceForm/utils.js +3 -3
  113. package/lib/components/dataSourceComponents/dataSourceTable/filter/index.d.ts +1 -0
  114. package/lib/components/dataSourceComponents/dataSourceTable/hooks/useTableProps.d.ts +101 -0
  115. package/lib/components/dataSourceComponents/fields/Input.Mobile/WithMode.d.ts +17 -0
  116. package/lib/components/dataSourceComponents/fields/Input.Phone/WithMode.d.ts +16 -0
  117. package/lib/components/dataSourceComponents/fields/Select/index.d.ts +1 -1
  118. package/lib/components/dataSourceComponents/fields/Switch/ReadPretty.d.ts +5 -0
  119. package/lib/components/dataSourceComponents/fields/Switch/ReadPretty.js +52 -0
  120. package/lib/components/dataSourceComponents/fields/Switch/ReadPretty.less +2 -0
  121. package/lib/components/dataSourceComponents/fields/Switch/WithMode.d.ts +3 -0
  122. package/lib/components/dataSourceComponents/fields/Switch/WithMode.js +39 -0
  123. package/lib/components/dataSourceComponents/fields/Switch/index.d.ts +3 -0
  124. package/lib/components/dataSourceComponents/fields/Switch/index.js +42 -0
  125. package/lib/components/dataSourceComponents/fields/Switch/type.d.ts +16 -0
  126. package/lib/components/dataSourceComponents/fields/Switch/type.js +17 -0
  127. package/lib/components/dataSourceComponents/fields/index.d.ts +12 -12
  128. package/lib/components/dataSourceComponents/provider/variables/VariablesProvider.d.ts +4 -0
  129. package/lib/components/pisellCardList/index.d.ts +107 -0
  130. package/lib/components/pisellGoodPassCard/index.d.ts +50 -0
  131. package/lib/components/pisellWalletPassCard/index.d.ts +146 -0
  132. package/lib/components/productCard/index.d.ts +7 -0
  133. package/lib/index.d.ts +149 -0
  134. package/lib/index.js +3 -3
  135. package/lowcode/data-source-form/constants.ts +3 -0
  136. package/lowcode/data-source-form/utils.ts +36 -7
  137. package/lowcode/form-item-switch/meta.ts +145 -0
  138. package/lowcode/form-item-switch/snippets.ts +15 -0
  139. package/lowcode/pisell-steps/meta.ts +621 -271
  140. package/lowcode/pisell-steps/snippets.ts +27 -69
  141. package/package.json +3 -3
@@ -236,6 +236,11 @@ export const createFormItemSchema = (
236
236
  };
237
237
  }
238
238
 
239
+ // 如果类型是 integer,设置 precision 为 0,只允许输入整数
240
+ if (type === 'integer' && (xComponent === 'InputNumber' || xComponent === 'Percent')) {
241
+ props.precision = 0;
242
+ }
243
+
239
244
  if (xComponent === 'Input.JSON' && item?.interface !== 'i18nInput') {
240
245
  const jsonChildren = item._children || item.children || [];
241
246
 
@@ -255,21 +260,38 @@ export const createFormItemSchema = (
255
260
  props.autoSize = {
256
261
  minRows: 4,
257
262
  };
258
- // props.validateTrigger = "onBlur";
263
+
264
+ // 根据type类型生成不同的normalize和校验逻辑
265
+ const fieldType = type || 'object';
266
+ let normalizeValue = '';
267
+ let validatorValue = '';
268
+
269
+ if (fieldType === 'array') {
270
+ // array类型:normalize时只转换数组
271
+ normalizeValue = '(value) => {\n try {\n if (typeof value === \'string\' && value.trim() !== \'\') {\n const trimmedValue = value.trim();\n // 只有以[开头才尝试转换\n if (trimmedValue.startsWith(\'[\')) {\n const parsed = JSON.parse(trimmedValue);\n if (Array.isArray(parsed)) {\n return parsed;\n }\n }\n }\n } catch(error) {\n console.log(error)\n }\n return value\n}';
272
+ validatorValue = "async (value) => {\n try {\n if (typeof value === 'string' && value.trim() !== '') {\n const trimmedValue = value.trim();\n // 确保JSON是数组格式\n if (!trimmedValue.startsWith('[')) {\n return Promise.reject(new Error('该字段类型为数组,JSON必须以[开头'));\n }\n const parsed = JSON.parse(trimmedValue);\n if (!Array.isArray(parsed)) {\n return Promise.reject(new Error('该字段类型为数组,请输入合法的JSON数组'));\n }\n }\n } catch (err) {\n return Promise.reject(new Error(err.message));\n }\n}";
273
+ } else if (fieldType === 'object') {
274
+ // object类型:normalize时只转换对象
275
+ normalizeValue = '(value) => {\n try {\n if (typeof value === \'string\' && value.trim() !== \'\') {\n const trimmedValue = value.trim();\n // 只有以{开头才尝试转换\n if (trimmedValue.startsWith(\'{\')) {\n const parsed = JSON.parse(trimmedValue);\n if (!Array.isArray(parsed) && typeof parsed === \'object\') {\n return parsed;\n }\n }\n }\n } catch(error) {\n console.log(error)\n }\n return value\n}';
276
+ validatorValue = "async (value) => {\n try {\n if (typeof value === 'string' && value.trim() !== '') {\n const trimmedValue = value.trim();\n // 确保JSON是对象格式\n if (!trimmedValue.startsWith('{')) {\n return Promise.reject(new Error('该字段类型为对象,JSON必须以{开头'));\n }\n const parsed = JSON.parse(trimmedValue);\n if (Array.isArray(parsed) || typeof parsed !== 'object') {\n return Promise.reject(new Error('该字段类型为对象,请输入合法的JSON对象'));\n }\n }\n } catch (err) {\n return Promise.reject(new Error(err.message));\n }\n}";
277
+ } else {
278
+ // 默认:normalize时只转换对象或数组
279
+ normalizeValue = '(value) => {\n try {\n if (typeof value === \'string\' && value.trim() !== \'\') {\n const trimmedValue = value.trim();\n // 只有以{或[开头才尝试转换\n if (trimmedValue.startsWith(\'{\') || trimmedValue.startsWith(\'[\')) {\n return JSON.parse(trimmedValue);\n }\n }\n } catch(error) {\n console.log(error)\n }\n return value\n}';
280
+ validatorValue = "async (value) => {\n try {\n if (typeof value === 'string' && value.trim() !== '') {\n const trimmedValue = value.trim();\n // 确保JSON以{或[开头,以避免纯数字或字符串通过校验\n if (!trimmedValue.startsWith('{') && !trimmedValue.startsWith('[')) {\n return Promise.reject(new Error('JSON必须是对象或数组,请以{或[开头'));\n }\n JSON.parse(trimmedValue);\n }\n } catch (err) {\n return Promise.reject(new Error(err.message));\n }\n}";
281
+ }
282
+
259
283
  props.normalize = {
260
284
  type: 'JSExpression',
261
- value:
262
- '(value) => {\n try {\n return JSON.parse(value);\n } catch(error) {\n console.log(error)\n }\n return value\n}',
285
+ value: normalizeValue,
263
286
  };
264
287
  props.getValueProps = {
265
288
  type: 'JSExpression',
266
289
  value:
267
- '(value) => {\n try {\n return { value: value != "" && typeof value === \'object\' ? JSON.stringify(value, null, 2) : value};\n } catch(error) {\n console.log(error)\n }\n return {value: value}\n}',
290
+ '(value) => {\n try {\n // 使用严格检查:null/undefined不转换,其他对象类型都转换\n if (value !== null && value !== undefined && typeof value === \'object\') {\n return { value: JSON.stringify(value, null, 2) };\n }\n return { value: value };\n } catch(error) {\n console.log(error)\n }\n return {value: value}\n}',
268
291
  };
269
292
  props.validator = {
270
293
  type: 'JSExpression',
271
- value:
272
- "async (value) => {\n try {\n if (typeof value === 'string' && value.trim() !== '') {\n JSON.parse(value);\n }\n } catch (err) {\n return Promise.reject(new Error(err.message));\n }\n}",
294
+ value: validatorValue,
273
295
  };
274
296
  }
275
297
  }
@@ -339,10 +361,15 @@ export const createFormItemSchema = (
339
361
  props.defaultValue = defaultValue;
340
362
  }
341
363
 
364
+ if (xComponent === 'Switch') {
365
+ props.placeholder = '';
366
+ props.allowClear = false;
367
+ }
368
+
342
369
  const _componentName = nocobaseCpt2PisellCptMap[componentName];
343
370
 
344
371
  // 确定 schema type
345
- let schemaType: 'void' | 'string' | 'number' | 'object' | 'array' = 'string';
372
+ let schemaType: 'void' | 'string' | 'number' | 'object' | 'array' | 'boolean' = 'string';
346
373
  if (type) {
347
374
  schemaType = type as any;
348
375
  } else if (xComponent === 'InputNumber' || xComponent === 'Percent') {
@@ -351,6 +378,8 @@ export const createFormItemSchema = (
351
378
  schemaType = 'object';
352
379
  } else if (['Checkbox.Group', 'Select'].includes(xComponent) && props.mode === 'multiple') {
353
380
  schemaType = 'array';
381
+ } else if (xComponent === 'Switch' || xComponent === 'Checkbox') {
382
+ schemaType = 'boolean';
354
383
  }
355
384
 
356
385
  // 构建完整的 UI Schema 格式
@@ -0,0 +1,145 @@
1
+ import snippets from './snippets';
2
+ import {
3
+ formItemGeneralDataGroup,
4
+ getFormItemGeneralInfoGroup,
5
+ generalItemMap,
6
+ getFormItemValidateGroup,
7
+ } from '../_utils/defaultSchema';
8
+
9
+ export default {
10
+ snippets,
11
+ componentName: 'FormItemSwitch',
12
+ title: '开关(高级)',
13
+ category: '无代码表单',
14
+ group: '无代码组件',
15
+ docUrl: '',
16
+ screenshot: '',
17
+ devMode: 'proCode',
18
+ npm: {
19
+ package: '@pisell/materials',
20
+ version: '1.0.1',
21
+ exportName: 'FormItemSwitch',
22
+ main: 'src/index.tsx',
23
+ destructuring: true,
24
+ subName: '',
25
+ },
26
+ generalProps: [
27
+ // 数据分组
28
+ formItemGeneralDataGroup,
29
+ // 信息分组
30
+ getFormItemGeneralInfoGroup([
31
+ generalItemMap['label'],
32
+ generalItemMap['tooltip'],
33
+ generalItemMap['extra'],
34
+ generalItemMap['hideLabel'],
35
+ generalItemMap['renderMode'],
36
+ ]),
37
+ // 校验分组
38
+ getFormItemValidateGroup([generalItemMap['requiredobj']]),
39
+ ],
40
+ configure: {
41
+ props: [
42
+ {
43
+ name: 'checkedChildren',
44
+ title: { label: '选中时内容', tip: '选中时的内容' },
45
+ propType: 'string',
46
+ setter: 'PisellI18nSetter',
47
+ supportVariable: true,
48
+ },
49
+ {
50
+ name: 'unCheckedChildren',
51
+ title: { label: '非选中时内容', tip: '非选中时的内容' },
52
+ propType: 'string',
53
+ setter: 'PisellI18nSetter',
54
+ supportVariable: true,
55
+ },
56
+ {
57
+ name: 'autoFocus',
58
+ title: { label: '自动聚焦', tip: '自动获取焦点' },
59
+ propType: 'bool',
60
+ defaultValue: false,
61
+ setter: 'BoolSetter',
62
+ supportVariable: true,
63
+ },
64
+ {
65
+ name: 'checked',
66
+ title: { label: '当前值', tip: '指定当前是否选中' },
67
+ propType: 'bool',
68
+ defaultValue: false,
69
+ setter: 'BoolSetter',
70
+ supportVariable: true,
71
+ },
72
+ {
73
+ name: 'defaultChecked',
74
+ title: { label: '默认值', tip: '初始是否选中' },
75
+ propType: 'bool',
76
+ defaultValue: false,
77
+ setter: 'BoolSetter',
78
+ supportVariable: true,
79
+ },
80
+ {
81
+ name: 'disabled',
82
+ title: { label: '是否禁用', tip: '是否为禁用状态' },
83
+ propType: 'bool',
84
+ defaultValue: false,
85
+ setter: 'BoolSetter',
86
+ supportVariable: true,
87
+ },
88
+ {
89
+ name: 'loading',
90
+ title: { label: '加载中', tip: '加载中' },
91
+ propType: 'bool',
92
+ defaultValue: false,
93
+ setter: 'BoolSetter',
94
+ supportVariable: true,
95
+ },
96
+ {
97
+ name: 'size',
98
+ title: { label: '尺寸', tip: '开关大小' },
99
+ propType: { type: 'oneOf', value: ['default', 'small'] },
100
+ setter: {
101
+ componentName: 'RadioGroupSetter',
102
+ props: {
103
+ options: [
104
+ {
105
+ title: '默认',
106
+ value: 'default',
107
+ },
108
+ {
109
+ title: '小',
110
+ value: 'small',
111
+ },
112
+ ],
113
+ },
114
+ },
115
+ defaultValue: 'default',
116
+ },
117
+ {
118
+ name: 'onChange',
119
+ title: { label: '变化时回调函数', tip: '变化时回调函数' },
120
+ propType: 'func',
121
+ },
122
+ {
123
+ name: 'onClick',
124
+ title: { label: '点击时回调函数', tip: '点击时回调函数' },
125
+ propType: 'func',
126
+ },
127
+ ],
128
+ supports: {
129
+ style: true,
130
+ events: [
131
+ {
132
+ name: 'onChange',
133
+ template:
134
+ "onChange(checked,event,${extParams}){\n// 变化时回调函数\nconsole.log('onChange', checked, event);}",
135
+ },
136
+ {
137
+ name: 'onClick',
138
+ template:
139
+ "onClick(checked,event,${extParams}){\n// 点击时回调函数\nconsole.log('onClick', checked, event);}",
140
+ },
141
+ ],
142
+ },
143
+ },
144
+ };
145
+
@@ -0,0 +1,15 @@
1
+ export default [
2
+ {
3
+ title: '开关(高级)',
4
+ screenshot: 'https://alifd.alicdn.com/fusion-cool/icons/icon-antd/switch-1.png',
5
+ schema: {
6
+ componentName: 'FormItemSwitch',
7
+ props: {
8
+ name: 'switch',
9
+ label: '开关',
10
+ defaultChecked: false,
11
+ },
12
+ },
13
+ },
14
+ ];
15
+