@cicctencent/formily 0.0.0-stage → 0.0.1

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 (308) hide show
  1. package/.eslintrc.js +40 -0
  2. package/.prettierrc.js +28 -0
  3. package/.vscode/launch.json +23 -0
  4. package/CHANGELOG.md +8 -0
  5. package/README.md +22 -2
  6. package/babel.config.js +3 -0
  7. package/build/build.js +96 -0
  8. package/build/rollup.config.bundle.js +63 -0
  9. package/build/update.version.js +35 -0
  10. package/dist/index.css +2516 -0
  11. package/dist/index.js +8377 -0
  12. package/dist/schema-field/index.css +2466 -0
  13. package/dist/schema-field/index.js +8213 -0
  14. package/dist/transform/index.js +551 -0
  15. package/dist/validate/index.js +1104 -0
  16. package/dist/vue-form/index.css +2516 -0
  17. package/dist/vue-form/index.js +8359 -0
  18. package/docs/.vuepress/client.ts +15 -0
  19. package/docs/.vuepress/components/code-preview.vue +203 -0
  20. package/docs/.vuepress/components/highlight.ts +53 -0
  21. package/docs/.vuepress/config.ts +39 -0
  22. package/docs/.vuepress/util.ts +7 -0
  23. package/docs/README.md +30 -0
  24. package/docs/components/anyOf.md +26 -0
  25. package/docs/components/array-cards.md +12 -0
  26. package/docs/components/array-collapse.md +12 -0
  27. package/docs/components/array-items.md +12 -0
  28. package/docs/components/array-table.md +12 -0
  29. package/docs/components/array-tabs.md +16 -0
  30. package/docs/components/cascader.md +12 -0
  31. package/docs/components/checkbox.md +12 -0
  32. package/docs/components/event.md +27 -0
  33. package/docs/components/hotArea.md +25 -0
  34. package/docs/components/index.md +4 -0
  35. package/docs/components/input.md +30 -0
  36. package/docs/components/layout-group.md +19 -0
  37. package/docs/components/link.md +22 -0
  38. package/docs/components/oneOf.md +8 -0
  39. package/docs/components/radio.md +12 -0
  40. package/docs/components/rich-editor.md +21 -0
  41. package/docs/components/select.md +34 -0
  42. package/docs/components/space.md +11 -0
  43. package/docs/components/switch.md +20 -0
  44. package/docs/components/text.md +21 -0
  45. package/docs/components/time-picker.md +11 -0
  46. package/docs/components/transfer.md +14 -0
  47. package/docs/components/upload-button.md +28 -0
  48. package/docs/demos/any-of/index.vue +66 -0
  49. package/docs/demos/array-cards/index.vue +105 -0
  50. package/docs/demos/array-collapse/index.vue +155 -0
  51. package/docs/demos/array-items/index.vue +171 -0
  52. package/docs/demos/array-table/index.vue +115 -0
  53. package/docs/demos/array-tabs/index.vue +56 -0
  54. package/docs/demos/cascader/index.vue +297 -0
  55. package/docs/demos/checkbox/index.vue +39 -0
  56. package/docs/demos/event/index.vue +436 -0
  57. package/docs/demos/hotArea/index.vue +240 -0
  58. package/docs/demos/index.vue +36 -0
  59. package/docs/demos/input/index.vue +46 -0
  60. package/docs/demos/layout-group/index.vue +51 -0
  61. package/docs/demos/link/index.vue +32 -0
  62. package/docs/demos/radio/index.vue +36 -0
  63. package/docs/demos/rich-editor/index.vue +22 -0
  64. package/docs/demos/select/index.vue +76 -0
  65. package/docs/demos/space/index.vue +93 -0
  66. package/docs/demos/switch/index.vue +31 -0
  67. package/docs/demos/text/index.vue +38 -0
  68. package/docs/demos/time-picker/index.vue +39 -0
  69. package/docs/demos/transfer/index.vue +26 -0
  70. package/docs/demos/upload-button/index.vue +27 -0
  71. package/docs/demos/x-data/add-button-title.vue +101 -0
  72. package/docs/demos/x-data/send-message.vue +33 -0
  73. package/docs/demos/x-reactions/any-of.vue +40 -0
  74. package/docs/demos/x-reactions/x-reactions.vue +39 -0
  75. package/docs/guide/component-extend.md +23 -0
  76. package/docs/guide/extra-bury-report.md +64 -0
  77. package/docs/guide/schema.md +22 -0
  78. package/docs/guide/x-data.md +41 -0
  79. package/docs/guide/x-reactions.md +20 -0
  80. package/example/.browserslistrc +4 -0
  81. package/example/.eslintrc.js +20 -0
  82. package/example/README.md +24 -0
  83. package/example/index.html +15 -0
  84. package/example/jest.config.js +26 -0
  85. package/example/package.json +50 -0
  86. package/example/public/favicon.ico +0 -0
  87. package/example/public/index.html +17 -0
  88. package/example/src/App.vue +25 -0
  89. package/example/src/assets/logo.png +0 -0
  90. package/example/src/components/HelloWorld.vue +148 -0
  91. package/example/src/components/group/index.vue +16 -0
  92. package/example/src/components/uploadBtn/index.vue +44 -0
  93. package/example/src/components/uploadBtn/upload-icon.svg +6 -0
  94. package/example/src/layout/component/Aside.vue +39 -0
  95. package/example/src/layout/component/Main.vue +9 -0
  96. package/example/src/layout/index.vue +15 -0
  97. package/example/src/main.ts +17 -0
  98. package/example/src/router/index.ts +99 -0
  99. package/example/src/shims-vue.d.ts +6 -0
  100. package/example/src/store/index.ts +9 -0
  101. package/example/src/views/demo/any-of/data.ts +38 -0
  102. package/example/src/views/demo/any-of/index.vue +35 -0
  103. package/example/src/views/demo/array-cards/data.ts +65 -0
  104. package/example/src/views/demo/array-cards/index.vue +33 -0
  105. package/example/src/views/demo/array-items/data.ts +29 -0
  106. package/example/src/views/demo/array-items/index.vue +33 -0
  107. package/example/src/views/demo/cloud-button/data.ts +14 -0
  108. package/example/src/views/demo/cloud-button/index.vue +22 -0
  109. package/example/src/views/demo/color-group/data.ts +15 -0
  110. package/example/src/views/demo/color-group/index.vue +22 -0
  111. package/example/src/views/demo/color-picker/data.ts +21 -0
  112. package/example/src/views/demo/color-picker/index.vue +33 -0
  113. package/example/src/views/demo/datatime/data.ts +62 -0
  114. package/example/src/views/demo/datatime/index.vue +22 -0
  115. package/example/src/views/demo/event/data.ts +184 -0
  116. package/example/src/views/demo/event/index.vue +33 -0
  117. package/example/src/views/demo/hot-area/data.ts +196 -0
  118. package/example/src/views/demo/hot-area/index.vue +33 -0
  119. package/example/src/views/demo/input/data.ts +39 -0
  120. package/example/src/views/demo/input/index.vue +33 -0
  121. package/example/src/views/demo/link/data.ts +23 -0
  122. package/example/src/views/demo/link/index.vue +22 -0
  123. package/example/src/views/demo/one-of/data.ts +139 -0
  124. package/example/src/views/demo/one-of/index.vue +33 -0
  125. package/example/src/views/demo/rich-editor/data.ts +12 -0
  126. package/example/src/views/demo/rich-editor/index.vue +24 -0
  127. package/example/src/views/demo/select/data.ts +38 -0
  128. package/example/src/views/demo/select/index.vue +33 -0
  129. package/example/src/views/demo/upload-button/data1.ts +11 -0
  130. package/example/src/views/demo/upload-button/data2.ts +12 -0
  131. package/example/src/views/demo/upload-button/index.vue +42 -0
  132. package/example/tsconfig.json +32 -0
  133. package/example/vite.config.ts +12 -0
  134. package/jest.config.js +4 -0
  135. package/package.json +92 -4
  136. package/src/components/__builtins__/configs/index.ts +1 -0
  137. package/src/components/__builtins__/index.ts +2 -0
  138. package/src/components/__builtins__/shared/create-context.ts +54 -0
  139. package/src/components/__builtins__/shared/index.ts +7 -0
  140. package/src/components/__builtins__/shared/loading.ts +20 -0
  141. package/src/components/__builtins__/shared/portal.ts +43 -0
  142. package/src/components/__builtins__/shared/resolve-component.ts +22 -0
  143. package/src/components/__builtins__/shared/transform-component.ts +33 -0
  144. package/src/components/__builtins__/shared/types.ts +8 -0
  145. package/src/components/__builtins__/shared/utils.ts +35 -0
  146. package/src/components/__builtins__/styles/common.scss +22 -0
  147. package/src/components/__builtins__/styles/element-plus.scss +1094 -0
  148. package/src/components/any-of/index.ts +20 -0
  149. package/src/components/array-base/index.ts +413 -0
  150. package/src/components/array-base/style.scss +53 -0
  151. package/src/components/array-base/style.ts +2 -0
  152. package/src/components/array-cards/index.ts +253 -0
  153. package/src/components/array-cards/style.scss +33 -0
  154. package/src/components/array-cards/style.ts +7 -0
  155. package/src/components/array-collapse/index.ts +381 -0
  156. package/src/components/array-collapse/style.scss +38 -0
  157. package/src/components/array-collapse/style.ts +10 -0
  158. package/src/components/array-items/index.ts +213 -0
  159. package/src/components/array-items/style.scss +82 -0
  160. package/src/components/array-items/style.ts +4 -0
  161. package/src/components/array-table/index.ts +567 -0
  162. package/src/components/array-table/style.scss +84 -0
  163. package/src/components/array-table/style.ts +11 -0
  164. package/src/components/array-tabs/index.ts +141 -0
  165. package/src/components/array-tabs/style.scss +16 -0
  166. package/src/components/array-tabs/style.ts +5 -0
  167. package/src/components/base/AnyOf/index.ts +155 -0
  168. package/src/components/base/AnyOf/index.vue +111 -0
  169. package/src/components/base/CloudButton/index.ts +46 -0
  170. package/src/components/base/CloudButton/index.vue +128 -0
  171. package/src/components/base/ColorGroup/index.ts +57 -0
  172. package/src/components/base/ColorGroup/index.vue +30 -0
  173. package/src/components/base/ColorPicker/index.ts +45 -0
  174. package/src/components/base/ColorPicker/index.vue +50 -0
  175. package/src/components/base/Container/index.vue +39 -0
  176. package/src/components/base/HotArea/index.ts +698 -0
  177. package/src/components/base/HotArea/index.vue +565 -0
  178. package/src/components/base/HotArea/type.ts +18 -0
  179. package/src/components/base/Input/index.vue +150 -0
  180. package/src/components/base/LayoutGroup/index.vue +40 -0
  181. package/src/components/base/Link/index.vue +43 -0
  182. package/src/components/base/Middleware/index.ts +235 -0
  183. package/src/components/base/Middleware/index.vue +169 -0
  184. package/src/components/base/OneOf/index.ts +105 -0
  185. package/src/components/base/OneOf/index.vue +85 -0
  186. package/src/components/base/RichEditor/index.ts +13 -0
  187. package/src/components/base/RichEditor/index.vue +120 -0
  188. package/src/components/base/RichEditor/options.ts +24 -0
  189. package/src/components/base/Select/index.ts +106 -0
  190. package/src/components/base/Select/index.vue +161 -0
  191. package/src/components/base/Switch/index.vue +42 -0
  192. package/src/components/base/Text/index.vue +47 -0
  193. package/src/components/base/event/index.ts +226 -0
  194. package/src/components/base/event/index.vue +356 -0
  195. package/src/components/cascader/index.ts +48 -0
  196. package/src/components/cascader/style.ts +5 -0
  197. package/src/components/checkbox/index.ts +166 -0
  198. package/src/components/checkbox/style.ts +5 -0
  199. package/src/components/cloud-button/index.ts +21 -0
  200. package/src/components/color-group/index.ts +18 -0
  201. package/src/components/color-picker/index.ts +18 -0
  202. package/src/components/container/index.ts +18 -0
  203. package/src/components/data-time/index.ts +24 -0
  204. package/src/components/date-picker/index.ts +51 -0
  205. package/src/components/date-picker/style.ts +4 -0
  206. package/src/components/editable/index.ts +261 -0
  207. package/src/components/editable/style.scss +55 -0
  208. package/src/components/editable/style.ts +5 -0
  209. package/src/components/el-form-item/index.ts +21 -0
  210. package/src/components/el-form-item/style.ts +3 -0
  211. package/src/components/event/index.ts +16 -0
  212. package/src/components/form/index.ts +94 -0
  213. package/src/components/form/style.scss +0 -0
  214. package/src/components/form/style.ts +3 -0
  215. package/src/components/form-button-group/index.ts +74 -0
  216. package/src/components/form-button-group/style.scss +0 -0
  217. package/src/components/form-button-group/style.ts +4 -0
  218. package/src/components/form-collapse/index.ts +215 -0
  219. package/src/components/form-collapse/style.scss +6 -0
  220. package/src/components/form-collapse/style.ts +4 -0
  221. package/src/components/form-dialog/index.ts +433 -0
  222. package/src/components/form-dialog/style.ts +4 -0
  223. package/src/components/form-drawer/index.ts +424 -0
  224. package/src/components/form-drawer/style.scss +21 -0
  225. package/src/components/form-drawer/style.ts +4 -0
  226. package/src/components/form-grid/index.ts +181 -0
  227. package/src/components/form-grid/style.scss +5 -0
  228. package/src/components/form-grid/style.ts +1 -0
  229. package/src/components/form-item/animation.scss +72 -0
  230. package/src/components/form-item/grid.scss +171 -0
  231. package/src/components/form-item/index.ts +642 -0
  232. package/src/components/form-item/style.scss +521 -0
  233. package/src/components/form-item/style.ts +2 -0
  234. package/src/components/form-item/var.scss +17 -0
  235. package/src/components/form-layout/index.ts +161 -0
  236. package/src/components/form-layout/style.scss +6 -0
  237. package/src/components/form-layout/style.ts +1 -0
  238. package/src/components/form-layout/useResponsiveFormLayout.ts +118 -0
  239. package/src/components/form-step/index.ts +210 -0
  240. package/src/components/form-step/style.ts +2 -0
  241. package/src/components/form-tab/index.ts +172 -0
  242. package/src/components/form-tab/style.scss +6 -0
  243. package/src/components/form-tab/style.ts +4 -0
  244. package/src/components/hot-area/index.ts +20 -0
  245. package/src/components/index.ts +49 -0
  246. package/src/components/input/index.ts +35 -0
  247. package/src/components/input/style.ts +4 -0
  248. package/src/components/input-number/index.ts +36 -0
  249. package/src/components/input-number/style.ts +3 -0
  250. package/src/components/layout-group/index.ts +18 -0
  251. package/src/components/link/index.ts +18 -0
  252. package/src/components/middleware/index.ts +21 -0
  253. package/src/components/one-of/index.ts +20 -0
  254. package/src/components/placeholder-input/index.ts +21 -0
  255. package/src/components/placeholder-input/index.vue +87 -0
  256. package/src/components/preview-text/index.ts +303 -0
  257. package/src/components/preview-text/style.ts +9 -0
  258. package/src/components/radio/index.ts +109 -0
  259. package/src/components/radio/style.ts +3 -0
  260. package/src/components/reset/index.ts +52 -0
  261. package/src/components/reset/style.ts +1 -0
  262. package/src/components/rich-editor/index.ts +18 -0
  263. package/src/components/row/index.ts +20 -0
  264. package/src/components/row/index.vue +53 -0
  265. package/src/components/select/index.ts +19 -0
  266. package/src/components/select/style.ts +5 -0
  267. package/src/components/space/index.ts +98 -0
  268. package/src/components/space/style.scss +24 -0
  269. package/src/components/space/style.ts +1 -0
  270. package/src/components/submit/index.ts +59 -0
  271. package/src/components/submit/style.ts +1 -0
  272. package/src/components/switch/index.ts +9 -0
  273. package/src/components/switch/style.ts +1 -0
  274. package/src/components/text/index.ts +21 -0
  275. package/src/components/time-picker/index.ts +21 -0
  276. package/src/components/time-picker/style.ts +4 -0
  277. package/src/components/transfer/index.ts +12 -0
  278. package/src/components/transfer/style.ts +1 -0
  279. package/src/components/upload/index.ts +136 -0
  280. package/src/components/upload/style.ts +2 -0
  281. package/src/components/upload-button/index.ts +21 -0
  282. package/src/components/upload-button/index.vue +199 -0
  283. package/src/createScemaField.ts +14 -0
  284. package/src/index.ts +41 -0
  285. package/src/schema-field/index.ts +11 -0
  286. package/src/scope.ts +29 -0
  287. package/src/transform/core.ts +404 -0
  288. package/src/transform/index.ts +11 -0
  289. package/src/transform/transform.ts +59 -0
  290. package/src/transform/utils/constant.ts +79 -0
  291. package/src/transform/utils/func.ts +145 -0
  292. package/src/typings/common.ts +37 -0
  293. package/src/typings/vue-shim.d.ts +7 -0
  294. package/src/typings/vue-test-utils.d.ts +11 -0
  295. package/src/utils/anyof_utils.ts +95 -0
  296. package/src/utils/common.ts +15 -0
  297. package/src/validate/index.ts +648 -0
  298. package/src/validate/utils/constant.ts +2 -0
  299. package/src/vue-form/index.ts +18 -0
  300. package/src/vue-form/index.vue +106 -0
  301. package/src/vue-form/useForm.ts +112 -0
  302. package/tests/data/anyof.ts +40 -0
  303. package/tests/data/image.ts +472 -0
  304. package/tests/fixtures/validate.ts +63 -0
  305. package/tests/unit/transform.spec.ts +253 -0
  306. package/tests/unit/utils.spec.ts +10 -0
  307. package/tests/unit/validate.spec.ts +256 -0
  308. package/tsconfig.json +23 -0
@@ -0,0 +1,11 @@
1
+ import {
2
+ transformSchema,
3
+ } from './transform';
4
+ import { TransformCore } from './core';
5
+
6
+ export default {
7
+ transformSchema,
8
+ TransformCore,
9
+ };
10
+ export { transformSchema };
11
+ export { TransformCore };
@@ -0,0 +1,59 @@
1
+ import { TransformCore } from './core';
2
+ import { mergePropertiesColors } from './utils/func';
3
+ import { TransformCoreState } from '../typings/common';
4
+
5
+ /**
6
+ * 配置转换
7
+ * @param schema schema 配置
8
+ * @param ctx vue实例,用于处理vue事件
9
+ * @returns
10
+ */
11
+ export function transformSchema({ schema, ctx, group = false, layout = 'vertical' }: TransformCoreState) {
12
+ if (!schema) {
13
+ return {};
14
+ }
15
+ let resConfig: any = {};
16
+ // 合并 [props,style,event]
17
+ if ('properties' in schema) {
18
+ const data: any = { ...schema };
19
+ formatColor(data);
20
+ resConfig = { ...data };
21
+ } else {
22
+ const properties = { ...schema };
23
+ const data: any = {
24
+ type: 'object',
25
+ properties: properties,
26
+ };
27
+ formatColor(data);
28
+ resConfig = { ...data };
29
+ }
30
+ const result: any = new TransformCore({ schema: resConfig, ctx, group,layout }).compile();
31
+ console.log('[jt-formily Transform]', 'transformSchema', 'result:', result);
32
+ return result;
33
+ }
34
+
35
+ // 合并颜色字段
36
+ function mergeColor(properties: any) {
37
+ let colors: any = mergePropertiesColors(properties);
38
+ if (colors && JSON.stringify(colors) != '{}') {
39
+ properties['colorGroup'] = {
40
+ type:'void',
41
+ 'x-decorator':'ColorGroup',
42
+ properties:{ ...colors }
43
+ };
44
+ }
45
+ }
46
+
47
+ function formatColor(data: any) {
48
+ if (!data?.properties) {
49
+ return;
50
+ }
51
+ if ('colorGroup' in data?.properties) {
52
+ // 存在colorGroup 说明已经转换过了
53
+ return;
54
+ }
55
+ for (const key in data.properties) {
56
+ formatColor(data.properties[key]);
57
+ }
58
+ mergeColor(data.properties);
59
+ }
@@ -0,0 +1,79 @@
1
+ /** formily协议对应的keys */
2
+ export const FORMILY_KEYS = [
3
+ 'type',
4
+ 'title',
5
+ 'description',
6
+ 'default',
7
+ 'readOnly',
8
+ 'writeOnly',
9
+ 'enum',
10
+ 'const',
11
+ 'multipleOf',
12
+ 'maximum',
13
+ 'exclusiveMaximum',
14
+ 'minimum',
15
+ 'exclusiveMinimum',
16
+ 'maxLength',
17
+ 'minLength',
18
+ 'pattern',
19
+ 'maxItems',
20
+ 'minItems',
21
+ 'uniqueItems',
22
+ 'maxProperties',
23
+ 'minProperties',
24
+ 'required',
25
+ 'format',
26
+ // 'properties',
27
+ // 'items'
28
+ 'additionalItems',
29
+ 'patternProperties',
30
+ 'additionalProperties',
31
+ 'definitions',
32
+ '$ref',
33
+ ];
34
+
35
+ export const FORMILY_EXPAND_KEYS=[
36
+ 'asterisk', // 控制FormItem 是否显示星号
37
+ ]
38
+
39
+ export const COMMON_KEYS = [
40
+ 'description',
41
+ 'default',
42
+ 'type',
43
+ 'title',
44
+ 'maxLength',
45
+ 'multipleOf',
46
+ 'const',
47
+ 'x-decorator',
48
+ 'x-component',
49
+ 'x-component-props',
50
+ 'x-decorator-props',
51
+ ];
52
+
53
+ // 组件的映射
54
+ export const COMPONENT_MAP = {
55
+ RadioWidget: 'Radio',
56
+ UploadWidget: 'UploadButton',
57
+ 'hot-area': 'HotArea',
58
+ 'rich-editor': 'RichEditor',
59
+ 'el-color-picker': 'ColorPicker',
60
+ };
61
+ /** 字段映射 */
62
+ export const FIELD_MAP = {
63
+ 'ui:hidden': 'x-hidden',
64
+ };
65
+ export const FIELD_KEYS = ['ui:hidden'];
66
+
67
+ /**
68
+ * 唯一性校验范围
69
+ */
70
+ export enum UniqueType {
71
+ /**
72
+ * 页面内唯一
73
+ */
74
+ page = 1,
75
+ /**
76
+ * 组件内唯一
77
+ */
78
+ component = 2,
79
+ }
@@ -0,0 +1,145 @@
1
+ import { COMPONENT_MAP } from './constant';
2
+
3
+ /** 获取组件名 */
4
+ export function getComponentName(data): String {
5
+ // 优先级 x-component -> ui:widget -> enum -> format -> type ->anyOf
6
+ const keys = Object.keys(data);
7
+ if (keys.includes('x-component')) {
8
+ return data['x-component'];
9
+ } else if (keys.includes('ui:widget')) {
10
+ return COMPONENT_MAP[data['ui:widget']];
11
+ } else if (keys.includes('enum')) {
12
+ return 'Select';
13
+ } else if (keys.includes('format')) {
14
+ switch (data['format']) {
15
+ case 'color':
16
+ return 'ColorPicker';
17
+ case 'date-time':
18
+ return 'DateTime';
19
+ }
20
+ } else if (keys.includes('type')) {
21
+ switch (data['type']) {
22
+ case 'string':
23
+ return 'Input';
24
+ case 'number':
25
+ return 'InputNumber';
26
+ case 'boolean':
27
+ return 'Switch';
28
+ case 'array':
29
+ return 'ArrayItems';
30
+ case 'object':
31
+ if (keys.includes('oneOf')) {
32
+ return 'OneOf';
33
+ }
34
+ }
35
+ } else if (keys.includes('anyOf')) {
36
+ return 'AnyOf';
37
+ }
38
+ }
39
+ // 是否是anyOf
40
+ export function isAnyOf(data: object): Boolean {
41
+ return 'anyOf' in data;
42
+ }
43
+ // 是否是OneOf
44
+ export function isOneOf(data: object): Boolean {
45
+ return 'oneOf' in data
46
+ }
47
+ /**
48
+ * oneOf 转换 Enum
49
+ * @param oneOfData
50
+ * @returns
51
+ */
52
+ export function oneOfTransformEnum(oneOfData: any[]) {
53
+ const result: Array<{ label: string; value: any }> = [];
54
+ oneOfData.forEach(o => {
55
+ const properties = o?.properties;
56
+ let value = {};
57
+ for (const key in properties) {
58
+ if ('default' in properties[key]) {
59
+ value[key] = properties[key].default;
60
+ } else if ('properties' in properties[key]) {
61
+ value[key] = {};
62
+ Object.keys(properties[key].properties).forEach(oKey => {
63
+ value[key][oKey] = properties[key].properties[oKey].default;
64
+ })
65
+ }
66
+ }
67
+ result.push({ label: o.title, value });
68
+ });
69
+ return result;
70
+ }
71
+ /**
72
+ * 生成enum
73
+ * @param enumValues
74
+ * @param enumNames
75
+ * @returns
76
+ */
77
+ export function emitEnum(enumValues, enumNames: string[] = []) {
78
+ if (!Array.isArray(enumValues)) {
79
+ return [];
80
+ }
81
+ if (typeof enumValues[0] === 'object') {
82
+ // 如果元素是 {} object类型,说明已经是formily协议
83
+ return enumValues;
84
+ }
85
+ const result = [];
86
+ if (Array.isArray(enumNames) && enumNames.length > 0) {
87
+ for (let i = 0; i < enumValues.length; i++) {
88
+ result.push({ label: enumNames[i], value: enumValues[i] });
89
+ }
90
+ } else {
91
+ for (let i = 0; i < enumValues.length; i++) {
92
+ result.push({ label: enumValues[i], value: enumValues[i] });
93
+ }
94
+ }
95
+ return result;
96
+ }
97
+
98
+ /**
99
+ * 合并properties color
100
+ * @param properties
101
+ * @returns
102
+ */
103
+ export function mergePropertiesColors(properties: any) {
104
+ if (!properties || typeof properties !== 'object') {
105
+ return {};
106
+ }
107
+ const colorGroup = {};
108
+ for (const key in properties) {
109
+ if (!properties[key]) {
110
+ continue;
111
+ }
112
+ if (
113
+ properties[key]?.format === 'color' ||
114
+ properties[key]?.['x-component'] === 'ColorPicker' ||
115
+ properties[key]['ui:widget'] === 'el-color-picker'||
116
+ key.toLocaleUpperCase().indexOf('COLOR')!== -1||
117
+ key.toLocaleUpperCase() == 'BACKGROUND'
118
+ ) {
119
+ colorGroup[key] = properties[key];
120
+ delete properties[key];
121
+ }
122
+ }
123
+ return colorGroup;
124
+ }
125
+ /** 简易生成SchemaItem */
126
+ export function simpleGenerationSchemaItem(data) {
127
+ //只满足基本类型 (不包含自定义组件)
128
+ // default: "文本描述信息"
129
+ // title: "标题描述"
130
+ // type: "string"
131
+ const result = {
132
+ 'x-component': getComponentName(data),
133
+ 'x-decorator': 'FormItem',
134
+ ...data,
135
+ 'x-decorator-props' : {layout: 'vertical', labelAlign: 'left', labelWrap: true}
136
+ };
137
+ return result;
138
+ }
139
+ /** 获取表单额外数据 */
140
+ export function getXData(data){
141
+ if('x-data' in data){
142
+ return data['x-data']
143
+ }
144
+ return {}
145
+ }
@@ -0,0 +1,37 @@
1
+ import { Schema } from '@formily/json-schema';
2
+ import { JSONSchema4 } from 'json-schema';
3
+ // https://core.formilyjs.org/zh-CN/api/models/field#validate
4
+ export interface IValidateResults {
5
+ error?: string[];
6
+ warning?: string[];
7
+ success?: string[];
8
+ }
9
+ /** 校验错误数据 */
10
+ export interface ValidateError {
11
+ path:string, // 组件名
12
+ schema:object // schema
13
+ }
14
+
15
+ /**
16
+ * FormilyValidate State
17
+ */
18
+ export interface FormilyValidateState {
19
+ schema: JSONSchema4; // schema配置
20
+ data: Object; // schema数据
21
+ validateData?: any[]; // 检验的数据 (用于校验必填项)
22
+ }
23
+
24
+ export interface TransformCoreState{
25
+ schema: Schema|any,
26
+ /**
27
+ * vue 实例
28
+ */
29
+ ctx: any,
30
+ /**
31
+ * 是否进行分组
32
+ */
33
+ group?: boolean
34
+
35
+ layout?: 'vertical'| 'horizontal'
36
+ }
37
+
@@ -0,0 +1,7 @@
1
+ declare module "*.vue" {
2
+ import { App, defineComponent } from "vue";
3
+ const component: ReturnType<typeof defineComponent> & {
4
+ install(app: App): void;
5
+ };
6
+ export default component;
7
+ }
@@ -0,0 +1,11 @@
1
+ import { ComponentPublicInstance } from "vue";
2
+
3
+ declare module "@vue/test-utils" {
4
+ interface DOMWrapper<ElementType> {
5
+ style: CSSStyleDeclaration;
6
+ }
7
+
8
+ interface VueWrapper<T extends ComponentPublicInstance> {
9
+ style: CSSStyleDeclaration;
10
+ }
11
+ }
@@ -0,0 +1,95 @@
1
+ import {log, isEqual, cloneDeep} from '@cicctencent/ark-util'
2
+
3
+ const infoLog = log('[jt-formily anyof_utils]')
4
+ /**
5
+ * 获取Any Of Config
6
+ * @param schemaList
7
+ * @param data
8
+ */
9
+ export function getAnyOfConfig(schemaList:any[],data){
10
+ infoLog('getAnyOfConfig()',schemaList,data);
11
+ const { isEmptyProperties, defaultConfig, anyOf_val , maxConfig, anyOfConfig, emptyConfig } = getData(schemaList,data);
12
+ if(!schemaList.length){
13
+ return {};
14
+ }
15
+ if(!data || isEqual(data,{})){
16
+ infoLog('data is undefined or {}',schemaList,data)
17
+ // 空对象, 可能是【没有选项】,可能是没有初始化
18
+ if(isEmptyProperties){
19
+ infoLog('走null分支',schemaList,data)
20
+ // 存在空配置, 那就默认空配置
21
+ return emptyConfig
22
+ }
23
+ else{
24
+ infoLog('走获取默认配置分支',defaultConfig)
25
+ return defaultConfig ?? schemaList[0];
26
+ }
27
+ }
28
+ else{
29
+ if(anyOf_val){
30
+ infoLog('走anyOf_val分支',schemaList,data)
31
+ return anyOfConfig ?? {};
32
+ }else{
33
+ infoLog('走匹配分支',schemaList,data)
34
+ return maxConfig ?? {}
35
+ }
36
+ }
37
+ }
38
+
39
+
40
+
41
+
42
+ function getData(schemaList:any[],data:any){
43
+ const dataKeys = Object.keys(data??{});
44
+ // 最大匹配度配置
45
+ let maxConfig = null
46
+ // 用于计数
47
+ let maxLength= 0;
48
+ // 默认配置
49
+ let defaultConfig = null
50
+
51
+ // 通过anyOf_val 获取的配置
52
+ let anyOf_val= null;
53
+ let anyOfConfig = null;
54
+ // 是否存在空的Properties
55
+ let isEmptyProperties = false;
56
+
57
+ // 空配置
58
+ let emptyConfig = null
59
+
60
+ if(data && 'anyOf_val' in data){
61
+ anyOf_val = data['anyOf_val'];
62
+ }
63
+
64
+ schemaList.forEach(item =>{
65
+ const propertiesKeys = Object.keys(item?.properties??{});
66
+
67
+ if(!propertiesKeys.length){
68
+ isEmptyProperties = true;
69
+
70
+ emptyConfig = cloneDeep(item)
71
+ }
72
+
73
+ if(anyOf_val === item?.title){
74
+ anyOfConfig = cloneDeep(item);
75
+ }
76
+
77
+ if(dataKeys.length){
78
+ let length = dataKeys.filter(d => propertiesKeys.includes(d)).length
79
+ if(length > maxLength){
80
+ maxLength = length;
81
+ maxConfig = cloneDeep(item);
82
+ }
83
+ }
84
+
85
+ if(item && 'x-data' in item){
86
+ const activity = item['x-data']?.activity
87
+ if(activity){
88
+ defaultConfig = cloneDeep(item);
89
+ }
90
+ }
91
+ })
92
+
93
+
94
+ return { maxConfig, defaultConfig, anyOf_val, isEmptyProperties, anyOfConfig, emptyConfig }
95
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * 是否是Schema配置
3
+ * @param data
4
+ * @returns
5
+ */
6
+ export function isSchemaConfig(data = {}) {
7
+ if (!data || typeof data !== 'object') {
8
+ return false;
9
+ }
10
+
11
+ if (data['x-component'] || data['properties'] || data['title'] || data['type']) {
12
+ return true;
13
+ }
14
+ return false;
15
+ }