resolver-egretimp-plus 0.0.4

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 (121) hide show
  1. package/babel.config.js +14 -0
  2. package/dist/index.js +2 -0
  3. package/dist/index.js.LICENSE.txt +8 -0
  4. package/dist/theme/element/index.css +1 -0
  5. package/dist/theme/element/src/components/card.scss +4 -0
  6. package/dist/theme/element/src/components/collapse.scss +16 -0
  7. package/dist/theme/element/src/components/date.scss +13 -0
  8. package/dist/theme/element/src/components/form.scss +54 -0
  9. package/dist/theme/element/src/components/index.scss +42 -0
  10. package/dist/theme/element/src/components/input.scss +15 -0
  11. package/dist/theme/element/src/components/message.scss +31 -0
  12. package/dist/theme/element/src/components/scrollbar.scss +14 -0
  13. package/dist/theme/element/src/components/select.scss +17 -0
  14. package/dist/theme/element/src/components/steps.scss +6 -0
  15. package/dist/theme/element/src/components/table.scss +8 -0
  16. package/dist/theme/element/src/components/tabs.scss +68 -0
  17. package/dist/theme/element/src/components/tree.scss +0 -0
  18. package/dist/theme/element/src/index.scss +79 -0
  19. package/index.js +17 -0
  20. package/package.json +45 -0
  21. package/scripts/gulpfile.mjs +73 -0
  22. package/scripts/webpack.config.js +81 -0
  23. package/src/analysisComponent.jsx +166 -0
  24. package/src/components/helper/button.js +17 -0
  25. package/src/components/helper/dock.js +120 -0
  26. package/src/components/icons/question-filled.vue +13 -0
  27. package/src/components/packages/CmiButton.vue +84 -0
  28. package/src/components/packages/CmiCalendar.vue +138 -0
  29. package/src/components/packages/CmiCell.vue +34 -0
  30. package/src/components/packages/CmiCheckbox.vue +63 -0
  31. package/src/components/packages/CmiDatetimePicker.vue +84 -0
  32. package/src/components/packages/CmiDropdownMenu.vue +57 -0
  33. package/src/components/packages/CmiInput.vue +45 -0
  34. package/src/components/packages/CmiLink.vue +28 -0
  35. package/src/components/packages/CmiPicker.vue +120 -0
  36. package/src/components/packages/CmiRadio.vue +29 -0
  37. package/src/components/packages/CmiSearch.vue +39 -0
  38. package/src/components/packages/CmiSelect.vue +84 -0
  39. package/src/components/packages/CustomComponentCard.vue +40 -0
  40. package/src/components/packages/CustomComponentCardH5.vue +40 -0
  41. package/src/components/packages/CustomComponentCol.vue +69 -0
  42. package/src/components/packages/CustomComponentColH5.vue +8 -0
  43. package/src/components/packages/CustomComponentCollapse.vue +183 -0
  44. package/src/components/packages/CustomComponentCollapseH5.vue +37 -0
  45. package/src/components/packages/CustomComponentCycle.vue +95 -0
  46. package/src/components/packages/CustomComponentCycleTabPane.vue +92 -0
  47. package/src/components/packages/CustomComponentDialog.vue +162 -0
  48. package/src/components/packages/CustomComponentEditor.vue +43 -0
  49. package/src/components/packages/CustomComponentFormLayout.vue +63 -0
  50. package/src/components/packages/CustomComponentFormLayoutH5.vue +55 -0
  51. package/src/components/packages/CustomComponentGrid.vue +29 -0
  52. package/src/components/packages/CustomComponentGridCol.vue +29 -0
  53. package/src/components/packages/CustomComponentInputDialog.vue +144 -0
  54. package/src/components/packages/CustomComponentPlain.vue +80 -0
  55. package/src/components/packages/CustomComponentRow.vue +67 -0
  56. package/src/components/packages/CustomComponentSelectEmployees.vue +133 -0
  57. package/src/components/packages/CustomComponentSendMail.vue +72 -0
  58. package/src/components/packages/CustomComponentSteps.vue +41 -0
  59. package/src/components/packages/CustomComponentTabPane.vue +41 -0
  60. package/src/components/packages/CustomComponentTabPaneH5.vue +30 -0
  61. package/src/components/packages/CustomComponentTable.jsx +406 -0
  62. package/src/components/packages/CustomComponentTableH5.vue +58 -0
  63. package/src/components/packages/CustomComponentTabs.vue +75 -0
  64. package/src/components/packages/CustomComponentTabsH5.vue +86 -0
  65. package/src/components/packages/CustomComponentTree.vue +28 -0
  66. package/src/components/packages/ElButton.vue +90 -0
  67. package/src/components/packages/ElCheckbox.vue +55 -0
  68. package/src/components/packages/ElDatePicker.vue +58 -0
  69. package/src/components/packages/ElInput.vue +23 -0
  70. package/src/components/packages/ElInputNumber.vue +54 -0
  71. package/src/components/packages/ElPagination.vue +56 -0
  72. package/src/components/packages/ElRadio.vue +44 -0
  73. package/src/components/packages/ElSelect.vue +73 -0
  74. package/src/components/packages/ElText.vue +48 -0
  75. package/src/components/packages/ElTimePicker.vue +34 -0
  76. package/src/components/patchComponents.js +46 -0
  77. package/src/components/styles/CustomComponenTable.scss +125 -0
  78. package/src/components/tabs/index.js +8 -0
  79. package/src/components/tabs/src/constants.js +23 -0
  80. package/src/components/tabs/src/tab-bar.js +8 -0
  81. package/src/components/tabs/src/tab-bar.vue +92 -0
  82. package/src/components/tabs/src/tab-nav.jsx +413 -0
  83. package/src/components/tabs/src/tab-pane.js +15 -0
  84. package/src/components/tabs/src/tab-pane.vue +80 -0
  85. package/src/components/tabs/src/tabs.jsx +217 -0
  86. package/src/components/tabs/style/css.js +2 -0
  87. package/src/components/tabs/style/index.js +2 -0
  88. package/src/components/thirdPartyFrame/index.js +32 -0
  89. package/src/components/thirdPartyFrame/src/ThirdPartyFrame.vue +123 -0
  90. package/src/hooks/index.js +129 -0
  91. package/src/hooks/pageConfig.js +20 -0
  92. package/src/index.jsx +140 -0
  93. package/src/renderer.jsx +68 -0
  94. package/src/rules/eventsSupplement.js +439 -0
  95. package/src/rules/parseCondition.js +359 -0
  96. package/src/rules/ruleUtils.js +208 -0
  97. package/src/rules/rulesDriver.js +118 -0
  98. package/src/theme/element/components/card.scss +4 -0
  99. package/src/theme/element/components/collapse.scss +16 -0
  100. package/src/theme/element/components/date.scss +13 -0
  101. package/src/theme/element/components/form.scss +54 -0
  102. package/src/theme/element/components/index.scss +42 -0
  103. package/src/theme/element/components/input.scss +15 -0
  104. package/src/theme/element/components/message.scss +31 -0
  105. package/src/theme/element/components/scrollbar.scss +14 -0
  106. package/src/theme/element/components/select.scss +17 -0
  107. package/src/theme/element/components/steps.scss +6 -0
  108. package/src/theme/element/components/table.scss +8 -0
  109. package/src/theme/element/components/tabs.scss +68 -0
  110. package/src/theme/element/components/tree.scss +0 -0
  111. package/src/theme/element/index.scss +79 -0
  112. package/src/utils/common.js +230 -0
  113. package/src/utils/const.js +198 -0
  114. package/src/utils/defaultVal.js +23 -0
  115. package/src/utils/format.js +19 -0
  116. package/src/utils/index.js +4 -0
  117. package/src/utils/is.js +69 -0
  118. package/src/utils/preserveFunc.js +33 -0
  119. package/src/utils/render.jsx +714 -0
  120. package/src/utils/request.js +10 -0
  121. package/src/utils/valid.js +71 -0
@@ -0,0 +1,714 @@
1
+ import { getCodeMapRules } from '../rules/rulesDriver.js'
2
+ import { resolveAssetComponents, findComponent, compareComponet, normalPixel, isPlainObject, hasOwn, isFnStr, normalCapitalizeComponent, capitalize, camelize, formatDate} from './common.js'
3
+ import { resolveComponent, inject } from 'vue'
4
+ import getNativeComps from '../components/patchComponents'
5
+ import CustomComponentColH5 from '../components/packages/CustomComponentColH5.vue'
6
+ import { commonPropsType,
7
+ FORM_META_TYPE,
8
+ NOT_NEED_FORM_ITEM_META_TYPE,
9
+ SPECIAL_SET_FULL_WIDTH_ITEM_META_TYPE,
10
+ NOT_NEED_COL_ITEM_META_TYPE,
11
+ MULTI_PAGE_META_LIST_TYPES,
12
+ REPLACE_PREFIX_FLAG,
13
+ PREFIX_FLAG,
14
+ ARG_FLAGS,
15
+ PLAIN_TYPE_COLUMNS,
16
+ PLAIN_TYPE_OPTIONS_COLUMNS,
17
+ CONTEXT_PEDDING_TYPE,
18
+ calcDisable,
19
+ META_TYPE_MAP,
20
+ H5_REPLACE_PREFIX_FLAG,
21
+ H5_PREFIX_FLAG,
22
+ FORM_META_TYPE_H5
23
+ } from './const.js'
24
+ import { preserveCheck } from './preserveFunc.js'
25
+ import { isArray, isFunction, isString } from './is.js'
26
+ import CustomComponentPlain from '../components/packages/CustomComponentPlain.vue'
27
+ import QuestionFilled from '../components/icons/question-filled.vue'
28
+
29
+ // 解析配置中的defStyle属性
30
+ export function parseDefStyle(defStyle) {
31
+ try {
32
+ return JSON.parse(defStyle)
33
+ } catch (error) {
34
+ return {}
35
+ }
36
+ }
37
+
38
+ // 解析extendAttr中方法
39
+ function deepParseFnStr(obj, refVal) {
40
+ if (isPlainObject(obj) || Array.isArray(obj)) {
41
+ Object.keys(obj).forEach(key => {
42
+ if (isPlainObject(obj[key]) || Array.isArray(obj[key])) {
43
+ deepParseFnStr(obj[key])
44
+ } else if (isFnStr(obj[key])) {
45
+ obj[key] = eval(`(${obj[key]})`)
46
+ } else {
47
+ if (isString(obj[key])) {
48
+ if (obj[key] === ARG_FLAGS.REF_VAL) {
49
+ obj[key] = refVal || ''
50
+ } else if (obj[key] === ARG_FLAGS.CURRENT_DATE) {
51
+ obj[key] = formatDate(new Date(), 'yyyy-MM-dd')
52
+ } else {
53
+ const { checked, val } = preserveCheck(key, obj[key])
54
+ if (checked) {
55
+ obj[key] = val
56
+ }
57
+ }
58
+ }
59
+ }
60
+ })
61
+ }
62
+ }
63
+
64
+ // 解析配置中的extendAttr属性
65
+ export function parseExtendAttr(config, refVal) {
66
+ if (config.extendAttr) {
67
+ try {
68
+ // return JSON.parse(config.extendAttr, (k, v) => {
69
+ // if (isFnStr(v)) {
70
+ // return eval(`(${v})`)
71
+ // }
72
+ // return v
73
+ // }) || {}
74
+ let obj = eval('(' + config.extendAttr+ ')') || {}
75
+ deepParseFnStr(obj, refVal)
76
+ return obj
77
+ } catch (error) {
78
+ console.log(config.metaCode, '\n===JSON parse err, err==:', error, '\nextendAttr==:', config.extendAttr)
79
+ return {}
80
+ }
81
+ }
82
+ return {}
83
+
84
+ }
85
+
86
+ // 目前所有的配置都是在form表单下面,但是现在的配置数据没有form配置项,所有我们自己手动增加
87
+ function generateFormConfig(lang = 'zh', isH5) {
88
+ return {
89
+ metaType: isH5 ? FORM_META_TYPE_H5 : FORM_META_TYPE,
90
+ displayType: '1',
91
+ span: 24,
92
+ labelWidth: lang.indexOf('zh') > -1 ? '92px' : '148px',
93
+ 'label-position': 'right',
94
+ rootForm: true,
95
+ inline: true
96
+ }
97
+ }
98
+
99
+ /**
100
+ *
101
+ * @param {*} config 通过接口获取的配置对象
102
+ */
103
+ export function parsePageConfig(config, lang, polyfillConfigs, instance, isH5) {
104
+ if (!config) return {}
105
+ const formConfig = generateFormConfig(lang, isH5)
106
+ const hireRelatMapRules = getCodeMapRules(config)
107
+ formConfig.pmPageMetaList = config.pmPageMetaList
108
+ let { pageConfig, mapComp } = normalConfig({ polyfillConfigs, instance }, formConfig)
109
+ return {
110
+ pageConfig,
111
+ mapComp,
112
+ hireRelatMapRules
113
+ }
114
+ }
115
+ /**
116
+ * {
117
+ * children: [], // 子元素
118
+ * bindValue: '', // 配置项对应的绑定值
119
+ * }
120
+ * @param {*} config
121
+ */
122
+ export function normalConfig({ polyfillConfigs, instance }, config, hireRelat = '', mapComp = {}, needformItem = false) {
123
+ const metaCode = config.metaCode || ''
124
+ hireRelat += hireRelat ? `->${metaCode}` : metaCode
125
+
126
+ const metaType = normalMetaType(config.metaType)
127
+
128
+ // 这个对象是不可以被配置进行覆盖
129
+ const extendNativeObj = {
130
+ metaType,
131
+ eventInit: false, // 初始渲染的时候,配置项对应的事件是否执行了
132
+ bindValue: '', // 这个是对应组件绑定的值
133
+ vmIsBind: false,
134
+ vm: null, // 具体渲染的组件
135
+ wrapVm: null, // 当前组件的实例(也就是analysisComponent)
136
+ hireRelat,
137
+ parent: null, // 这个是执行过程中,动态获取的
138
+ dynamicHireRelat: '', // 这个也是执行过程中,动态获取的层级
139
+ }
140
+
141
+ let extendAttrObj = parseExtendAttr(config)
142
+ let extendObj = {
143
+ removeCol: findComponent(NOT_NEED_COL_ITEM_META_TYPE, extendAttrObj.renderby) !== -1 || findComponent(NOT_NEED_COL_ITEM_META_TYPE, metaType) !== -1,
144
+ needformItem: (findComponent(NOT_NEED_FORM_ITEM_META_TYPE, extendAttrObj.renderby) !== -1 || findComponent(NOT_NEED_FORM_ITEM_META_TYPE, metaType) !== -1) ? false : needformItem, // 表示这个配置项对应的渲染组件是否需要formItem进行包装
145
+ }
146
+ if (config.defStyle) {
147
+ extendObj.style = parseDefStyle(config.defStyle)
148
+ }
149
+ // 组件是根据数据进行动态循环渲染,这边需要进行特殊处理,确保config配置项独立
150
+ if (findComponent(MULTI_PAGE_META_LIST_TYPES, extendAttrObj.renderby) !== -1 || findComponent(MULTI_PAGE_META_LIST_TYPES, metaType) !== -1) {
151
+ extendObj.multiPmPageMetaList = []
152
+ }
153
+ // 如果有子项,需要进行递归遍历
154
+ if (config.pmPageMetaList && config.pmPageMetaList.length) {
155
+ config.pmPageMetaList = config.pmPageMetaList.map(metaItem => {
156
+ const { pageConfig } = normalConfig({ polyfillConfigs, instance }, metaItem, hireRelat, mapComp, needformItem || [FORM_META_TYPE].includes(metaType))
157
+ return pageConfig
158
+ })?.sort((a, b) => a.seqNo - b.seqNo)
159
+ }
160
+ const pageConfig = {
161
+ ...extendObj,
162
+ ...extendAttrObj,
163
+ ...config,
164
+ ...extendNativeObj
165
+ }
166
+ if (config.metaType == 'textarea') {
167
+ pageConfig.type = 'textarea'
168
+ }
169
+ if (config.metaType == 'time-range') {
170
+ pageConfig['isRange'] = true
171
+ }
172
+ if (config.metaType == 'date-range') {
173
+ pageConfig.type = 'daterange'
174
+ }
175
+ if (config.metaType == 'card') {
176
+ pageConfig.needWrap = '2'
177
+ }
178
+ mapComp[hireRelat] = pageConfig
179
+ parsePolyfillConfigs({ polyfillConfigs, instance }, pageConfig)
180
+ return {
181
+ mapComp,
182
+ pageConfig
183
+ }
184
+ }
185
+
186
+ function parsePolyfillConfigs({ polyfillConfigs, instance }, config) {
187
+ const hireRelat = config.hireRelat
188
+ const findKeys = Object.keys(polyfillConfigs).filter(key => hireRelat.endsWith(key))
189
+ if (!findKeys.length) {
190
+ return
191
+ }
192
+ const findKey = findKeys.reduce((ret, key) => (hireRelat.lastIndexOf(ret) < hireRelat.lastIndexOf(key) ? ret : key))
193
+ const polyObj = polyfillConfigs[findKey] && polyfillConfigs[findKey](config, instance)
194
+ polyObj && Object.keys(polyObj).forEach(key => {
195
+ config[key] = polyObj[key]
196
+ })
197
+ }
198
+
199
+ // 配置化工具现在还是用aidesign组件库,这边进行统一替换一下
200
+ function normalMetaType(metaType) {
201
+ let retType = metaType
202
+ if (typeof retType !== 'string') return ''
203
+ if (retType.startsWith(REPLACE_PREFIX_FLAG)) {
204
+ retType = retType.replace(REPLACE_PREFIX_FLAG, PREFIX_FLAG)
205
+ } else if (retType.startsWith(H5_REPLACE_PREFIX_FLAG)) {
206
+ retType = retType.replace(H5_REPLACE_PREFIX_FLAG, H5_PREFIX_FLAG)
207
+ }
208
+ if (META_TYPE_MAP[retType]) {
209
+ retType = META_TYPE_MAP[retType]
210
+ }
211
+ return retType
212
+ }
213
+
214
+ export function isPlainColumn(config, disabled) {
215
+ // 表格中中的列,可以根据配置进行转换为普通形式,表格原生支持的tooltip
216
+
217
+ if (config.isColumn && disabled) {
218
+ if (config.plainColumn) {
219
+ return true
220
+ }
221
+ // 有些标签,在没有plainColumn属性的时候,默认表示会直接进行普通形式的转换
222
+ if (
223
+ !hasOwn(config, 'plainColumn') &&
224
+ (
225
+ findComponent([...PLAIN_TYPE_COLUMNS, ...PLAIN_TYPE_OPTIONS_COLUMNS], config.renderby || config.metaType) !== -1 ||
226
+ (
227
+ // 这边是在日期组件中,日过valueFormat属性跟format属性值一样的时候,就可以直接展示
228
+ findComponent(['ElDatePicker'], config?.renderby || config?.metaType) !== -1 &&
229
+ (
230
+ (config.valueFormat || 'YYYY-MM-DD') == (config.format || 'YYYY-MM-DD') ||
231
+ (config['value-format'] || 'YYYY-MM-DD') == (config.format || 'YYYY-MM-DD')
232
+ )
233
+ )
234
+ )
235
+ ) {
236
+ return true
237
+ }
238
+ }
239
+ return false
240
+ }
241
+
242
+ export function getComponentForConfig(config, disabled) {
243
+ // 表格中中的列,是否需要转换为普通形式
244
+ if (isPlainColumn(config, disabled)) {
245
+ return CustomComponentPlain
246
+ }
247
+
248
+ const components = inject('components')
249
+ const { composeComponents } = getNativeComps()
250
+ const allComps = {
251
+ ...composeComponents,
252
+ ...components.value
253
+ }
254
+ const metaType = config.metaType
255
+ let component = resolveAssetComponents(allComps, metaType) //则通过传入的获取组件
256
+ if (!component) {
257
+ component = resolveComponent(metaType) // 实例上绑定的组件
258
+ }
259
+
260
+ const renderby = config.renderby
261
+ if (renderby && typeof renderby === 'string') {
262
+ let renderbyComp = resolveAssetComponents(allComps, renderby) //则通过传入的获取组件
263
+ if (!renderbyComp) {
264
+ renderbyComp = resolveComponent(renderby) // 实例上绑定的组件
265
+ }
266
+ component = renderbyComp || component
267
+ }
268
+ return component
269
+ }
270
+
271
+ // 获取渲染组件的props配置数据
272
+ export function getRenderComponentProps({ props, component, modelValue, selects }) {
273
+ if (!component) return {}
274
+ let config = props.config
275
+ if (findComponent(['CustomComponentTabs'], config.renderby || config.metaType) !== -1) {
276
+ // 目前tabs组件在配置平台那边,是不能进行配置大的tabs的,目前就换一种方式
277
+ config.pmPageMetaList?.forEach(pane => {
278
+ if (pane.tabExtendAttr && isPlainObject(pane.tabExtendAttr)) {
279
+ config = {
280
+ ...config,
281
+ ...pane.tabExtendAttr
282
+ }
283
+ }
284
+ })
285
+ }
286
+ const propsKeys = getComponentPropsKeys(component, config)
287
+ const defprops = {}
288
+ if (propsKeys) {
289
+ propsKeys.forEach(key => {
290
+ if (hasOwn(config, key)) {
291
+ defprops[key] = config[key]
292
+ }
293
+ })
294
+ }
295
+ const commonProps = getCommonProps(config, props, modelValue, selects)
296
+ defprops.style = {
297
+ ...config.style,
298
+ ...getRenderCompMargins(config),
299
+ width: commonProps.width || getBuildCompDefaultWidth(config)
300
+ }
301
+
302
+ const retObj = {
303
+ ...defprops,
304
+ ...commonProps
305
+ }
306
+ return retObj
307
+ }
308
+ // 一些组件并且没有占居满格
309
+ function getBuildCompDefaultWidth(config) {
310
+ if (SPECIAL_SET_FULL_WIDTH_ITEM_META_TYPE.some(metaType => compareComponet(metaType, config.metaType))) {
311
+ return '100%'
312
+ }
313
+ }
314
+ // 获取渲染组件开放的配置props,提供给所有自定义组件
315
+ function getCommonProps(config, props, modelValue, selects) {
316
+ return Object.keys(commonPropsType).reduce((ret, key) => {
317
+ ret[key] = commonPropsType[key].getValue(config, props, modelValue, selects)
318
+ return ret
319
+ }, {})
320
+ }
321
+ // 获取渲染组件的margin配置数据
322
+ function getRenderCompMargins(config) {
323
+ const marginObj = {}
324
+ if (config.marginRight) {
325
+ marginObj.marginRight = normalPixel(config.marginRight)
326
+ }
327
+ if (config.marginLeft) {
328
+ marginObj.marginLeft = normalPixel(config.marginLeft)
329
+ }
330
+ if (config.marginTop) {
331
+ marginObj.marginTop = normalPixel(config.marginTop)
332
+ }
333
+ if (config.marginBottom) {
334
+ marginObj.marginBottom = normalPixel(config.marginBottom)
335
+ }
336
+
337
+ if (config.paddingRight) {
338
+ marginObj.paddingRight = normalPixel(config.paddingRight)
339
+ }
340
+ if (config.paddingLeft) {
341
+ marginObj.paddingLeft = normalPixel(config.paddingLeft)
342
+ }
343
+ if (config.paddingTop) {
344
+ marginObj.paddingTop = normalPixel(config.paddingTop)
345
+ }
346
+ if (config.paddingBottom) {
347
+ marginObj.paddingBottom = normalPixel(config.paddingBottom)
348
+ }
349
+ return marginObj
350
+ }
351
+
352
+ // 生成布局框(el-col)
353
+ export function generateLayoutPolyfill(config, disabled, isH5) {
354
+ let isElCol = false
355
+ let props = {}
356
+ let propsKeys
357
+ let colComp = null
358
+ if (isH5) {
359
+ colComp = CustomComponentColH5
360
+ } else {
361
+ colComp = resolveComponent('el-col')
362
+ isElCol = true
363
+ propsKeys = getComponentPropsKeys(colComp)
364
+ }
365
+ if (propsKeys) {
366
+ propsKeys.forEach(key => {
367
+ if (config[key]) {
368
+ props[key] = config[key]
369
+ }
370
+ })
371
+ }
372
+ if (isElCol) {
373
+ props.class = {
374
+ [normalCapitalizeComponent(config.metaType)]: true,
375
+ 'is-card': config?.needWrap, // 这个样式主要用于折叠上面,控制被卡片包裹的时候,下边距是16,没有被包裹的时候,是12
376
+ }
377
+ props = {
378
+ ...props,
379
+ ...getDefaultColProps(config),
380
+ ...elColSpecialProsp(config),
381
+ }
382
+
383
+ }
384
+ return node => {
385
+ // 表格中中的列,是否需要转换为普通形式
386
+ if (isPlainColumn(config, disabled)) {
387
+ return node
388
+ }
389
+
390
+ if (config.removeCol) {
391
+ return node
392
+ }
393
+ let ret = <colComp {...props}>{node}</colComp>
394
+ if (config.isAllRow) {
395
+ ret = <colComp span={24}>{ret}</colComp>
396
+ }
397
+ return ret
398
+ }
399
+ }
400
+
401
+ // el-col 特殊的定义,目前这边进行宽度的接受
402
+ function elColSpecialProsp (config) {
403
+ const style = {
404
+ textAlign: config.colTextAlign
405
+ }
406
+ if ((typeof config.hidden === 'boolean' && config.hidden) || config.hidden === '1') {
407
+ style.display = 'none'
408
+ } else {
409
+ if (hasOwn(config, 'elWidth')) {
410
+ if (config.elWidth === 'auto') {
411
+ style.flexGrow = 1
412
+ style.flexShrink = 1
413
+ style.flexBasis = 0
414
+ style.maxWidth = 'unset'
415
+ style.minWidth = 'unset'
416
+ } else if (config.elWidth === 'self') {
417
+ style.flexGrow = 0
418
+ style.flexShrink = 0
419
+ style.flexBasis = 0
420
+ style.maxWidth = 'unset'
421
+ style.minWidth = 'unset'
422
+ } else {
423
+ style.flexGrow = 0
424
+ style.flexShrink = 0
425
+ style.flexBasis = 0
426
+ style.maxWidth = normalPixel(config.elWidth)
427
+ style.minWidth = normalPixel(config.elWidth)
428
+ }
429
+ }
430
+ }
431
+ return {
432
+ style
433
+ }
434
+ }
435
+
436
+ function getDefaultColProps(config) {
437
+ const colProps = {
438
+ offset: config.offset || 0
439
+ }
440
+ if (hasOwn(config, 'md') || hasOwn(config, 'lg')) {
441
+ colProps.md = isPlainObject(config.md) ? parseIntColProps(config.md) : parseInt(config.md, 10)
442
+ colProps.lg = isPlainObject(config.lg) ? parseIntColProps(config.lg) : parseInt(config.lg, 10)
443
+ } else if (config.span) {
444
+ colProps.span = config.span
445
+ } else {
446
+ colProps.md = isPlainObject(config.md) ? parseIntColProps(config.md) : parseInt(config.md || 12, 10)
447
+ colProps.lg = isPlainObject(config.lg) ? parseIntColProps(config.lg) : parseInt(config.lg || 8, 10)
448
+ }
449
+ return colProps
450
+ }
451
+ function parseIntColProps(obj) {
452
+ return obj
453
+ }
454
+
455
+ function generateFormItemPc (config, lang, compProps, params,) {
456
+ let isFormItem = false
457
+ let props = {}
458
+ let propsKeys
459
+ let slotName = 'default'
460
+ const formItemComp = resolveComponent('el-form-item')
461
+ if (formItemComp) {
462
+ isFormItem = true
463
+ propsKeys = getComponentPropsKeys(formItemComp)
464
+ }
465
+ if (propsKeys) {
466
+ propsKeys.forEach(key => {
467
+ if (config[key]) {
468
+ props[key] = config[key]
469
+ }
470
+ })
471
+ }
472
+ if (isFormItem) {
473
+ if (config.formItemSlot === 'label') {
474
+ slotName = 'label'
475
+ }
476
+ props = {
477
+ ...props,
478
+ ...getFormItemExtendProps(config, lang, params)
479
+ }
480
+ // labelWidth 需要特殊处理
481
+ if (hasOwn(props, 'labelWidth')) {
482
+ props.labelWidth = props.labelWidth && `${props.labelWidth}` !== '-1' ? props.labelWidth : undefined
483
+ }
484
+ }
485
+ return node => {
486
+ // 表格中中的列,是否需要转换为普通形式
487
+ if (isPlainColumn(config, compProps.disabled)) {
488
+ return node
489
+ }
490
+
491
+ if (!config.needformItem && !config.showFromItem) {
492
+ return node
493
+ }
494
+ const slots = {}
495
+ slots[slotName] = () => node
496
+ if (isFormItem && slotName !== 'label') {
497
+ slots.label = () => createFormLable(config, lang)
498
+ }
499
+ return (
500
+ <formItemComp class="custom-form-item" {...props}>{slots}</formItemComp>
501
+ )
502
+ }
503
+ }
504
+
505
+ function generateFormItemH5(config, lang, compProps, params) {
506
+ return node => {
507
+ if (!config.needformItem && !config.showFromItem) {
508
+ return node
509
+ }
510
+ const props = {
511
+ label: lang.indexOf('zh') > -1 ? config.metaNameZh : config.metaNameEn,
512
+ hidemessage: config?.hidemessage == '1' ? true : false,
513
+ hideasterisk: config?.hideasterisk == '1' ? true : false,
514
+ ...getFormItemExtendProps(config, lang, params),
515
+ }
516
+
517
+ return (
518
+ <cmi-form-item class="custom-form-item-h5" {...props}>{node}</cmi-form-item>
519
+ )
520
+ }
521
+ }
522
+
523
+ export function generateFormItemPolyfill(config, lang, compProps, _isH5, params) {
524
+ if (_isH5) {
525
+ return generateFormItemH5(config, lang, compProps, params)
526
+ } else {
527
+ return generateFormItemPc(config, lang, compProps, params)
528
+ }
529
+ }
530
+
531
+ function getFormItemExtendProps(config, lang, params) {
532
+ return {
533
+ prop: config.dynamicHireRelat,
534
+ rules: getFormItemRule(config, lang, params),
535
+ class: {
536
+ 'content-right': config.contentRight,
537
+ 'hidden-label': config.labelWidth == 0 || config.labelWidth === '0px' || config.labelHidden == '1',
538
+ [`label-position-${config['label-position'] || 'right'}`]: true // label-position 支持三个值,right、left、top
539
+ },
540
+ style: {
541
+ ...getFormItemMargins(config)
542
+ }
543
+ }
544
+ }
545
+
546
+ function getFormItemRule(config, lang, params) {
547
+ const required = config.requiredFlag === '1'
548
+ const onlyRequiredFlag = config.onlyRequiredFlag
549
+ const rules = [{
550
+ required,
551
+ validator: (rule, value, callback) => {
552
+ if (config.editFlag === '0') callback()
553
+ const val = config.bindValue
554
+ const message = lang.indexOf('zh') > -1 ? `${config.metaNameZh}不能为空` : `${config.metaNameEn} can not be empty`
555
+ if (!onlyRequiredFlag && required) {
556
+ if (val === '' || val === null || val === undefined) {
557
+ callback(new Error(message))
558
+ } else {
559
+ // isMatch在下来框的时候,表示当前值没有在下拉选项中匹配到,就表示没有选中值;因为后端在表字段为数字类型的时候,默认返回的是0值
560
+ if (hasOwn(config, 'isMatch') && !config.isMatch) {
561
+ callback(new Error(message))
562
+ } else {
563
+ callback()
564
+ }
565
+ }
566
+ } else {
567
+ callback()
568
+ }
569
+ },
570
+ trigger: ['blur', 'change']
571
+ }]
572
+ let regexPattern = []
573
+ if (config.regexPattern) {
574
+ try {
575
+ regexPattern = JSON.parse(config.regexPattern)
576
+ regexPattern = regexPattern.map(item => ({
577
+ reg: item?.pattern,
578
+ tip: item?.message,
579
+ tipEn: item?.messageEn,
580
+ }))
581
+
582
+ } catch (error) {
583
+ console.log(config.metaCode, '=regexPattern JSON parse fail, error==:', error)
584
+ regexPattern = []
585
+ }
586
+ }
587
+ if (config.validRegs && (Array.isArray(config.validRegs) || isPlainObject(config.validRegs)) ) {
588
+ const validRegs = isPlainObject(config.validRegs) ? [config.validRegs] : config.validRegs
589
+ regexPattern.push(...validRegs)
590
+ }
591
+
592
+ if (regexPattern?.length) {
593
+ rules.push({
594
+ validator: (rule, value, callback) => {
595
+ if (config.editFlag === '0') callback()
596
+ const val = config.bindValue
597
+
598
+ for (let i = 0; i < regexPattern.length; i++) {
599
+ const validInfo = regexPattern[i]
600
+ const { reg, tip, tipEn } = validInfo
601
+ const message = lang.indexOf('zh') > -1 ? tip : tipEn
602
+ let validFlag = true
603
+ if (typeof reg === 'function') {
604
+ validFlag = reg(val, params)
605
+ } else {
606
+ validFlag = new RegExp(reg).test(val)
607
+ }
608
+ if (!validFlag) {
609
+ callback(new Error(message))
610
+ return
611
+ }
612
+ }
613
+ callback()
614
+ },
615
+ trigger: ['blur', 'change']
616
+ })
617
+ }
618
+ let validators = config.validators
619
+ validators = isArray(validators) ? validators : [validators]
620
+ if (validators && validators.length) {
621
+ validators.forEach(validator => {
622
+ if (isFunction(validator)) {
623
+ rules.push({
624
+ validator,
625
+ trigger: ['blur', 'change']
626
+ })
627
+ }
628
+ })
629
+ }
630
+ return rules
631
+ }
632
+
633
+ function getFormItemMargins(config) {
634
+ const marginObj = {}
635
+ if (config.formItemMarginRight && `${config.formItemMarginRight}` !== '-1') {
636
+ marginObj.marginRight = normalPixel(config.formItemMarginRight)
637
+ }
638
+ if (config.formItemMarginLeft && `${config.formItemMarginLeft}` !== '-1') {
639
+ marginObj.marginLeft = normalPixel(config.formItemMarginLeft)
640
+ }
641
+ if (config.formItemMarginTop && `${config.formItemMarginTop}` !== '-1') {
642
+ marginObj.marginTop = normalPixel(config.formItemMarginTop)
643
+ }
644
+ if (config.formItemMarginBottom && `${config.formItemMarginBottom}` !== '-1') {
645
+ marginObj.marginBottom = normalPixel(config.formItemMarginBottom)
646
+ }
647
+ if (config.formItemPaddingRight && `${config.formItemPaddingRight}` !== '-1') {
648
+ marginObj.paddingRight = normalPixel(config.formItemPaddingRight)
649
+ }
650
+ if (config.formItemPaddingLeft && `${config.formItemPaddingLeft}` !== '-1') {
651
+ marginObj.paddingLeft = normalPixel(config.formItemPaddingLeft)
652
+ }
653
+ if (config.formItemPaddingTop && `${config.formItemPaddingTop}` !== '-1') {
654
+ marginObj.paddingTop = normalPixel(config.formItemPaddingTop)
655
+ }
656
+ if (config.formItemPaddingBottom && `${config.formItemPaddingBottom}` !== '-1') {
657
+ marginObj.paddingBottom = normalPixel(config.formItemPaddingBottom)
658
+ }
659
+ return marginObj
660
+ }
661
+
662
+ function createFormLable(config, lang = 'zh') {
663
+ const ElPopover = resolveComponent('el-popover')
664
+ const elIcon = resolveComponent('el-icon')
665
+ const required = config.requiredFlag === '1'
666
+ return (
667
+ <div title={lang.indexOf('zh') > -1 ? config.metaNameZh : config.metaNameEn} class="custom-label">
668
+ <span class="custom-label-content" style={config.labelStyle}>
669
+ {required ? <span style="color: #f5222d; margin-right: 3px">*</span> : null}
670
+ <span>{lang.indexOf('zh') > -1 ? config.metaNameZh : config.metaNameEn}</span>
671
+ </span>
672
+ <ElPopover
673
+ placement="top"
674
+ width="300"
675
+ trigger="hover"
676
+ content={lang.indexOf('zh') > -1 ? config.hintContentZh : config.hintContentEn}
677
+ >
678
+ {
679
+ {
680
+ reference: () => {
681
+ return config.hintFlag == '1' ? <span class="label-tip"><elIcon><QuestionFilled /></elIcon></span> : null
682
+ }
683
+ }
684
+ }
685
+ </ElPopover>
686
+ </div>
687
+ )
688
+ }
689
+
690
+ export function getComponentPropsKeys(comp, config) {
691
+ let propsKeys = []
692
+ if (typeof comp === 'string') {
693
+ propsKeys = []
694
+ } else {
695
+ propsKeys = Object.keys(comp.props || {})
696
+ }
697
+ let emitsKyes = []
698
+ if (config) {
699
+ Object.keys(config).forEach(key => {
700
+ if (/^on[A-Z]/.test(key)) {
701
+ emitsKyes.push(key)
702
+ }
703
+ })
704
+ }
705
+ // if (comp?.emits) {
706
+ // if (isPlainObject(comp?.emits)) {
707
+ // emitsKyes = Object.keys(comp.emits)
708
+ // } else if (isArray(comp.emits)) {
709
+ // emitsKyes = comp.emits
710
+ // }
711
+ // }
712
+ // emitsKyes = emitsKyes.filter(key => typeof key === 'string').map(key => `on${capitalize((camelize(key)))}`)
713
+ return [...emitsKyes, ...propsKeys]
714
+ }