resolver-egretimp-plus 0.1.124 → 0.1.125

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "resolver-egretimp-plus",
3
- "version": "0.1.124",
3
+ "version": "0.1.125",
4
4
  "description": "交付体验渲染",
5
5
  "main": "./dist/web/index.js",
6
6
  "module": "./dist/web/index.js",
@@ -235,7 +235,6 @@ export default {
235
235
  */
236
236
  const parent = inject('parent', null)
237
237
  const dynamicMapComp = inject('dynamicMapComp')
238
-
239
238
  const configLinks = [parent, ...props.additionConfigs, props.config]
240
239
  configLinks.reduce((parent, config) => {
241
240
  definePrivatelyProp(config, 'parent', parent)
@@ -11,10 +11,9 @@ import { ElTabs } from 'element-plus'
11
11
  import Tabs from '../tabs'
12
12
  import Renderer from '../../renderer.jsx'
13
13
  import { computed, useAttrs, useSlots } from 'vue'
14
- import { commonPropsType, hasOwn } from '../../utils/index.js'
14
+ import { assertMetaType, commonPropsType, hasOwn } from '../../utils/index.js'
15
15
  import { watch } from 'vue'
16
16
  import { OPEN_DATA_RULES } from '../../config.js'
17
-
18
17
  // import * as lib from 'element-plus/es/utils/index.mjs'
19
18
 
20
19
  const slots = useSlots()
@@ -127,9 +126,6 @@ if (OPEN_DATA_RULES) {
127
126
  })
128
127
  }
129
128
 
130
- function assertMetaType(config, metaType) {
131
- return config.renderby === metaType || config.metaType === metaType
132
- }
133
129
 
134
130
  defineExpose({
135
131
  setActiveTab(tabMetaCode) {
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <ElDatePicker v-bind="{ ...attrs, ...datePickerProps}" :disabledDate="disabledDate" v-model="value">
2
+ <ElDatePicker v-bind="{ ...attrs, ...normalDatePickerProps}" :disabledDate="disabledDate" v-model="value">
3
3
  <template v-for="(_, key) in slots" :key="key" v-slot:[key]="scope">
4
4
  <slot :name="key" v-bind="scope"></slot>
5
5
  </template>
@@ -46,22 +46,38 @@ const datePickerProps = computed(() => {
46
46
  }
47
47
  return ret
48
48
  })
49
+ const normalDatePickerProps = computed(() => {
50
+ const ret = {
51
+ ...datePickerProps.value
52
+ }
53
+ delete ret.valueFormat
54
+ return ret
55
+ })
56
+
49
57
  const attrs = useAttrs()
50
58
  const modeValue = defineModel()
51
59
 
52
60
  const value = computed({
53
61
  get() {
54
- if (isNaN(Number(modeValue.value))) {
55
- return modeValue.value
56
- } else {
57
- if (datePickerProps.value.valueFormat === 'timestamp' || `${modeValue.value}`.length >= 13) {
58
- return Number(modeValue.value)
62
+ let ret = modeValue.value
63
+ if (!isNaN(Number(modeValue.value))) {
64
+ if (
65
+ datePickerProps.value.valueFormat === 'x' ||
66
+ datePickerProps.value.valueFormat === 'timestamp' ||
67
+ `${modeValue.value}`.length >= 13
68
+ ) {
69
+ ret = Number(modeValue.value)
59
70
  }
60
- return modeValue.value
61
71
  }
72
+ ret = dayjs(ret).toDate()
73
+ return ret
62
74
  },
63
75
  set(val) {
64
- modeValue.value = val
76
+ let valueFormat = datePickerProps.value?.valueFormat
77
+ if (valueFormat === 'timestamp') {
78
+ valueFormat = 'x'
79
+ }
80
+ modeValue.value = dayjs(val).format(valueFormat)
65
81
  }
66
82
  })
67
83
  watch(value, () => {
@@ -1,4 +1,4 @@
1
- import { generateFormConfig, parsePageConfig } from "../utils"
1
+ import { generateFormConfig, parsePageConfig } from "../utils/index.js"
2
2
  import { ref } from 'vue'
3
3
  import { buildInRequest } from "../utils/request"
4
4
  import { GET_SYS_PARAM_CACHE, QUERY_PAGE_CONFIG_DATA } from "../api/builtIn"
@@ -11,6 +11,11 @@ export function usePageConfig() {
11
11
  const hireRelatMapRulesRef = ref(null)
12
12
  const mapCompRef = ref(null)
13
13
  function initPageConfig({
14
+ components,
15
+ confirmInstance,
16
+ openChildDialogInstance,
17
+ buttonActions,
18
+ builtPolyfillReq,
14
19
  requestTraceId,
15
20
  dialogReq,
16
21
  mode,
@@ -30,6 +35,11 @@ export function usePageConfig() {
30
35
  messageCb
31
36
  }) {
32
37
  const { pageConfig, mapComp, hireRelatMapRules } = parsePageConfig({
38
+ components,
39
+ confirmInstance,
40
+ openChildDialogInstance,
41
+ buttonActions,
42
+ builtPolyfillReq,
33
43
  requestTraceId,
34
44
  dialogReq,
35
45
  mode,
package/src/index.jsx CHANGED
@@ -3,6 +3,7 @@ import Renderer from './renderer.jsx'
3
3
  // import './style/index.scss'
4
4
  import { usePageConfig } from './hooks/pageConfig'
5
5
  import { toValidate } from './utils/valid.js'
6
+ import { toValidate as validateByData } from './utils/validateByData.js'
6
7
  import { MODE } from "./utils/const.js"
7
8
  import { generateRequester } from "./utils/request.js"
8
9
  import { executeLoadServices, resetConfigEventInit } from "./components/helper/resolver.js"
@@ -207,6 +208,7 @@ export default {
207
208
  },
208
209
  emits: ['update:modelValue', 'rootStoreChange'],
209
210
  setup(props, { emit, attrs, expose }) {
211
+ const componentsRef = toRef(props, 'components')
210
212
  const configsSet = new Set()
211
213
  const dynamicMapComp = reactive({})
212
214
  const instance = getCurrentInstance()
@@ -298,6 +300,11 @@ export default {
298
300
  )
299
301
  }
300
302
  initPageConfig({
303
+ components: props.components,
304
+ confirmInstance: props.confirmInstance,
305
+ openChildDialogInstance: props.openChildDialogInstance,
306
+ buttonActions: props.buttonActions,
307
+ builtPolyfillReq: props.builtPolyfillReq,
301
308
  requestTraceId: props.requestTraceId,
302
309
  dialogReq: props.dialogReq,
303
310
  mode: props.mode,
@@ -320,6 +327,11 @@ export default {
320
327
 
321
328
  watch(toRef(props, 'config'), () => {
322
329
  initPageConfig({
330
+ components: props.components,
331
+ confirmInstance: props.confirmInstance,
332
+ openChildDialogInstance: props.openChildDialogInstance,
333
+ buttonActions: props.buttonActions,
334
+ builtPolyfillReq: props.builtPolyfillReq,
323
335
  requestTraceId: props.requestTraceId,
324
336
  dialogReq: props.dialogReq,
325
337
  mode: props.mode,
@@ -361,7 +373,7 @@ export default {
361
373
  provide('hireRelatMapRules', hireRelatMapRulesRef) // 组件对应的规则集合
362
374
 
363
375
  provide('buttonActions', props.buttonActions)
364
- provide('components', toRef(props, 'components'))
376
+ provide('components', componentsRef)
365
377
  provide('selects', toRef(props, 'selects'))
366
378
  provide('_rootInstance', instance)
367
379
  provide('rootValue', computed({
@@ -381,13 +393,27 @@ export default {
381
393
  provide('_parentDynamicMapComp', props.parentDynamicMapComp)
382
394
  provide('_selectionsObj', props.selectionsObj)
383
395
  provide('_polyfillConfigs', props.polyfillConfigs)
384
- provide('requestTraceId', toRef(props, 'requestTraceId')) // 所有渲染器调用的接口,都需要加次参数(生哥提)
396
+ const requestTraceIdRef = toRef(props, 'requestTraceId')
397
+ provide('requestTraceId', requestTraceIdRef) // 所有渲染器调用的接口,都需要加次参数(生哥提)
385
398
 
386
399
  const rootForm = ref(null)
387
400
  provide('rootForm', rootForm)
388
401
 
389
402
  const validate = (cb) => {
390
- toValidate(rootForm, cb, dynamicMapComp)
403
+ if (OPEN_DATA_RULES) {
404
+ validateByData({
405
+ rootConfig: props.config,
406
+ rootValue: props.modelValue,
407
+ mode: props.mode,
408
+ lang: props.lang,
409
+ messageInstance: props.messageInstance,
410
+ formRef:rootForm,
411
+ cb,
412
+ dynamicMapComp,
413
+ })
414
+ } else {
415
+ toValidate(rootForm, cb, dynamicMapComp)
416
+ }
391
417
  }
392
418
  provide('_validate', validate)
393
419
  expose({
@@ -637,6 +637,7 @@ export function assignmentPathVal(obj = {}, path, val, separator = '.') {
637
637
  const currentIdx = parseInt(match[2])
638
638
  if (!Number.isNaN(currentIdx)) {
639
639
  !retObj[currentIdx] && (retObj[currentIdx] = {})
640
+ retObj = retObj[currentIdx]
640
641
  }
641
642
  }
642
643
  }
@@ -26,14 +26,15 @@ import {
26
26
  MODE,
27
27
 
28
28
  isHidden,
29
- CYCLE_COMPONETS
29
+ CYCLE_COMPONETS,
30
+ EXECTE_CLICK_EVENT_COMPONENTS
30
31
  } from './const.js'
31
32
  import { preserveCheck } from './preserveFunc.js'
32
33
  import { isArray, isFunction, isString } from './is.js'
33
34
  import CustomComponentPlain from '../components/packages-web/CustomComponentPlain.vue'
34
35
  // import QuestionFilled from '../components/icons/question-filled.vue'
35
36
  import infoIcon from '../components/icons/info.vue'
36
- import { dispatchClickEvent, dispatchClickEvents, getTableConfig } from '../components/helper/eventOrchestration.js'
37
+ import { dispatchClickEvent, dispatchClickEvents, executeEventOrchestration, getTableConfig } from '../components/helper/eventOrchestration.js'
37
38
  import CmiFormItem from '../components/cmiFormItem'
38
39
  import loadModule from './loadModule.js'
39
40
  import dayjs from 'dayjs'
@@ -119,6 +120,11 @@ export function generateFormConfig(lang = 'zh', isH5) {
119
120
  * @param {*} config 通过接口获取的配置对象
120
121
  */
121
122
  export function parsePageConfig({
123
+ components,
124
+ confirmInstance,
125
+ openChildDialogInstance,
126
+ buttonActions,
127
+ builtPolyfillReq,
122
128
  requestTraceId,
123
129
  dialogReq,
124
130
  mode,
@@ -140,6 +146,11 @@ export function parsePageConfig({
140
146
  const cbs = []
141
147
  window?.performance?.mark('noraml_config_start')
142
148
  let { pageConfig, mapComp } = normalConfig({
149
+ components,
150
+ confirmInstance,
151
+ openChildDialogInstance,
152
+ buttonActions,
153
+ builtPolyfillReq,
143
154
  requestTraceId,
144
155
  dialogReq,
145
156
  lang,
@@ -204,6 +215,20 @@ function correctConfigDynamicMapHandler({config, dynamicMapComp, changedDynamicH
204
215
  }
205
216
  }
206
217
  }
218
+
219
+ function canReuse(
220
+ dynamicMapComp,
221
+ dynamicHireRelat,
222
+ currentIdx
223
+ ) {
224
+ // 如果组件上的rowIndex等于当前的idx,说明这个config已经没有被用到了,我们可以直接拿过来复用
225
+ const currentCg = dynamicMapComp[dynamicHireRelat]
226
+ if (currentCg?.rowIndex === currentIdx) {
227
+ return true
228
+ }
229
+ return false
230
+ }
231
+
207
232
  /**
208
233
  * {
209
234
  * children: [], // 子元素
@@ -212,6 +237,11 @@ function correctConfigDynamicMapHandler({config, dynamicMapComp, changedDynamicH
212
237
  * @param {*} config
213
238
  */
214
239
  export function normalConfig({
240
+ components,
241
+ confirmInstance,
242
+ openChildDialogInstance,
243
+ buttonActions,
244
+ builtPolyfillReq,
215
245
  requestTraceId,
216
246
  dialogReq,
217
247
  lang,
@@ -229,6 +259,7 @@ export function normalConfig({
229
259
  noParsePageMetaList,
230
260
  changeConfig,
231
261
  notParseConfig,
262
+ parentConfig,
232
263
  }, config, hireRelat = '', mapComp = {}, needformItem = false, dynamicHireRelat = '', unWatchsList = []) {
233
264
 
234
265
  const metaCode = config.metaCode || ''
@@ -250,10 +281,10 @@ export function normalConfig({
250
281
  vm: null, // 具体渲染的组件
251
282
  wrapVm: null, // 当前组件的实例(也就是analysisComponent)
252
283
  hireRelat,
253
- parent: null, // 这个是执行过程中,动态获取的
254
284
  }
255
285
  if (!OPEN_DATA_RULES) {
256
286
  extendNativeObj.dynamicHireRelat = ''
287
+ extendNativeObj.parent = null
257
288
  } else {
258
289
  if (changeConfig) {
259
290
  // 设置multiPmPageMetaList的时候,如果数组变了,如果数组中的值变换了位置,需要对dynamicMapComp设置正确的映射
@@ -263,6 +294,7 @@ export function normalConfig({
263
294
  dynamicMapComp[dynamicHireRelat] = config
264
295
  definePrivatelyProp(config, '_rootValue', rootValue)
265
296
  definePrivatelyProp(config, 'refValue', useVmodels(config).modelValue)
297
+ definePrivatelyProp(config, 'parent', parentConfig) // 这边手动设置一下,防止组件复用的时候不会刷新,造成parent的丢失
266
298
  }
267
299
 
268
300
  if (!notParseConfig) {
@@ -351,6 +383,23 @@ export function normalConfig({
351
383
  })?.sort((a, b) => a.seqNo - b.seqNo)
352
384
  }
353
385
  } else {
386
+ compatibilityConfig({
387
+ config,
388
+ builtPolyfillReq,
389
+ components,
390
+ requestTraceId,
391
+ rootValue,
392
+ axiosInstance,
393
+ polyfillConfigs,
394
+ confirmInstance,
395
+ dynamicMapComp,
396
+ openChildDialogInstance,
397
+ messageInstance,
398
+ messageCb,
399
+ buttonActions,
400
+ lang,
401
+ dialogReq,
402
+ })
354
403
  // 如果有子项,需要进行递归遍历
355
404
  if (pageConfig.pmPageMetaList && pageConfig.pmPageMetaList.length && !noParsePageMetaList) {
356
405
  normalPmPageMetaList(pageConfig)
@@ -379,59 +428,72 @@ export function normalConfig({
379
428
 
380
429
 
381
430
  config._unPageMetaListWatch = watch(() => getPathVal(unref(rootValue), config.dynamicHireRelat, '->'), (val) => {
431
+ let noParseConfigs = []
382
432
  const list = getPathVal(unref(rootValue), config.dynamicHireRelat, '->')
383
433
  if (list && list.length) {
384
434
  const cbFns = []
385
- const pageMetaList = list.map((row, idx) => {
435
+ const pageMetaList = new Array(list.length)
436
+ for (let idx = 0; idx < list.length; idx++) {
437
+ const row = list[idx];
386
438
  const columnsCgs = config._rowColumnConfgsMap.get(row)
387
439
  if (columnsCgs) {
388
440
  columnsCgs.forEach(config => {
389
441
  config.rowIndex = idx
390
442
  config.rowScope.$index =idx
391
443
  })
392
- return columnsCgs
444
+ pageMetaList.splice(idx, 1, columnsCgs)
393
445
  } else {
394
- let retColumnConfigs = config.pmPageMetaList.map((itemConfig, relIdx) => {
395
- const ret = cloneDeep(itemConfig)
396
- if (findComponent(['CustomComponentTable'], config.renderby) !== -1 || findComponent(['CustomComponentTable'], config.metaType) !== -1) {
397
- ret.labelHidden = '1'
398
- if (ret.width && !ret.columnWidth) {
399
- ret.columnWidth = ret.width
400
- delete ret.width
401
- }
402
- ret.isColumn = true
403
- }
404
- ret.rowScope = {$index: idx, row}
405
- ret.columnId = generateUniqueId()
406
- ret.rowIndex = idx
407
- definePrivatelyProp(ret, 'refConfig', config.pmPageMetaList?.[relIdx])
408
- definePrivatelyProp(ret, 'parent', config) // 这边手动设置一下,防止组件复用的时候不会刷新,造成parent的丢失
409
- return ret
410
- })
411
- retColumnConfigs = reactive(retColumnConfigs)
412
446
  cbFns.push(() => {
447
+ let retColumnConfigs = config.pmPageMetaList.map((itemConfig, relIdx) => {
448
+ const compareDynamicHireRelat = `${config.dynamicHireRelat}[${idx}]->${itemConfig.metaCode}`
449
+ let ret = null
450
+ if (canReuse(dynamicMapComp, compareDynamicHireRelat, idx)) {
451
+ ret = dynamicMapComp[compareDynamicHireRelat]
452
+ noParseConfigs.push(ret)
453
+ } else {
454
+ ret = cloneDeep(itemConfig)
455
+ if (findComponent(['CustomComponentTable'], config.renderby) !== -1 || findComponent(['CustomComponentTable'], config.metaType) !== -1) {
456
+ ret.labelHidden = '1'
457
+ if (ret.width && !ret.columnWidth) {
458
+ ret.columnWidth = ret.width
459
+ delete ret.width
460
+ }
461
+ ret.isColumn = true
462
+ }
463
+ ret.rowScope = {$index: idx, row}
464
+ ret.rowIndex = idx
465
+ ret.columnId = generateUniqueId()
466
+ }
467
+ definePrivatelyProp(ret, 'parent', parentConfig) // 这边手动设置一下,防止组件复用的时候不会刷新,造成parent的丢失
468
+ definePrivatelyProp(ret, 'refConfig', config.pmPageMetaList?.[relIdx])
469
+ return ret
470
+ })
471
+ retColumnConfigs = reactive(retColumnConfigs)
413
472
  simpleNormalPmPageMetaList({
414
- pmPageMetaList: retColumnConfigs,
473
+ pmPageMetaList: retColumnConfigs.filter(cg => !noParseConfigs.some(cg1 => cg === cg1)),
415
474
  dynamicHireRelat: `${config.dynamicHireRelat}[${idx}]`,
416
475
  unWatchsList: currentUnWatchsList,
417
476
  noParsePageMetaList: false,
418
477
  changeConfig: true,
419
478
  notParseConfig: true,
420
479
  })
480
+ config._rowColumnConfgsMap.set(row, retColumnConfigs)
481
+
482
+ pageMetaList.splice(idx, 1, retColumnConfigs)
421
483
  })
422
- config._rowColumnConfgsMap.set(row, retColumnConfigs)
423
- return retColumnConfigs
424
484
  }
425
- })
426
- config.multiPmPageMetaList = pageMetaList
485
+ }
427
486
  cbFns.forEach(cb => cb())
487
+ config.multiPmPageMetaList = pageMetaList
428
488
 
429
489
  const mapKeys = config._rowColumnConfgsMap.keys()
430
490
  Array.from(mapKeys).forEach(row => {
431
491
  // 如果已经没有对应的数据循环config了,删除子级的PmPageMetaList监听
432
492
  if (!list.some(row2 => row2 === row)) {
433
493
  config._rowColumnConfgsMap.get(row)?.forEach(unWatchConfig => {
434
- unWatchConfig?._unWatchs?.forEach(un => un?.())
494
+ if (!noParseConfigs.some(cg1 => cg1 === unWatchConfig)) {
495
+ unWatchConfig?._unWatchs?.forEach(un => un?.())
496
+ }
435
497
  })
436
498
  config._rowColumnConfgsMap.delete(row)
437
499
  }
@@ -440,10 +502,9 @@ export function normalConfig({
440
502
  }, {
441
503
  immediate: true,
442
504
  deep: true,
443
- // flush: 'sync'
444
505
  })
445
506
 
446
- oldUnWatchsList?.forEach(list => {
507
+ currentUnWatchsList?.forEach(list => {
447
508
  list?.push(config._unPageMetaListWatch)
448
509
  })
449
510
  }
@@ -451,6 +512,11 @@ export function normalConfig({
451
512
  function simpleNormalPmPageMetaList({pmPageMetaList, dynamicHireRelat, unWatchsList, noParsePageMetaList, changeConfig, notParseConfig}) {
452
513
  return pmPageMetaList.map(metaItem => {
453
514
  const { pageConfig } = normalConfig({
515
+ components,
516
+ confirmInstance,
517
+ openChildDialogInstance,
518
+ buttonActions,
519
+ builtPolyfillReq,
454
520
  requestTraceId,
455
521
  dialogReq,
456
522
  lang,
@@ -468,6 +534,7 @@ export function normalConfig({
468
534
  noParsePageMetaList,
469
535
  changeConfig,
470
536
  notParseConfig,
537
+ parentConfig: config
471
538
  }, metaItem, hireRelat, mapComp, needformItem || [FORM_META_TYPE, FORM_META_TYPE_H5].includes(metaType), dynamicHireRelat, unWatchsList)
472
539
  return pageConfig
473
540
  })?.sort((a, b) => a.seqNo - b.seqNo)
@@ -475,13 +542,83 @@ export function normalConfig({
475
542
  }
476
543
  }
477
544
 
478
-
479
545
  return {
480
546
  mapComp,
481
547
  pageConfig
482
548
  }
483
549
  }
484
550
 
551
+ // 目前做数据进行驱动规则、循环组件的config渲染,需要兼容一些现有业务逻辑
552
+ function compatibilityConfig({
553
+ config,
554
+ builtPolyfillReq,
555
+ components,
556
+ requestTraceId,
557
+ rootValue,
558
+ axiosInstance,
559
+ polyfillConfigs,
560
+ confirmInstance,
561
+ dynamicMapComp,
562
+ openChildDialogInstance,
563
+ messageInstance,
564
+ messageCb,
565
+ buttonActions,
566
+ lang,
567
+ dialogReq,
568
+ }) {
569
+ // 给button组件的vm中添加click事件,因为这边业务都用到了,需要进行兼容
570
+ const needClick = findComponent(EXECTE_CLICK_EVENT_COMPONENTS, config.renderby) !== -1 || findComponent(EXECTE_CLICK_EVENT_COMPONENTS, config.metaType) !== -1
571
+ if (needClick) {
572
+ config.vm = markRaw({
573
+ click(params) {
574
+ executeEventOrchestration({
575
+ ...params,
576
+ builtPolyfillReq,
577
+ components,
578
+ props: {config},
579
+ requestTraceId,
580
+ axiosInstance: axiosInstance,
581
+ polyfillConfigs,
582
+ rootValue: rootValue?.value,
583
+ confirmInstance,
584
+ dynamicMapComp,
585
+ openChildDialog: openChildDialogInstance,
586
+ messageInstance,
587
+ messageCb,
588
+ buttonActions,
589
+ lang,
590
+ dialogReq,
591
+ appContext: null
592
+ })
593
+ }
594
+ })
595
+ }
596
+ // tab需要兼容setActiveTab方法,业务侧有没加载就使用
597
+ const needSetActive = findComponent(['CustomComponentTabs'], config.renderby) !== -1 || findComponent(['CustomComponentTabs'], config.metaType) !== -1
598
+ if (needSetActive) {
599
+ config.vm = markRaw({
600
+ setActiveTab(val) {
601
+ const tabpanes = config.pmPageMetaList || []
602
+ tabpanes.forEach(tab => {
603
+ if (assertMetaType(tab, 'CustomComponentCycleTabPane') || tab?.isCycle == '1') {
604
+ if (/^cycleTabpane-(\d+)$/.test(val)) {
605
+ tab.currentCode = val
606
+ } else {
607
+ tab.currentCode = ''
608
+ }
609
+ } else if (tab.metaType === 'CustomComponentTabPane') {
610
+ if (tab.metaCode === val) {
611
+ tab.defaultShowFlag = '1'
612
+ } else {
613
+ tab.defaultShowFlag = '0'
614
+ }
615
+ }
616
+ })
617
+ }
618
+ })
619
+ }
620
+ }
621
+
485
622
  // 从按钮的服务编排中,获取到按钮中配置的表格中的config,并且绑定表格的分页
486
623
  function getTableServices(lcpPageServiceMapVOList = [], { dynamicMapComp, dynamicMapCompKeys, dynamicHireRelat }) {
487
624
  const mixinServiceConfig = lcpPageServiceMapVOList.find(service => service.serviceType == '1')
@@ -1311,3 +1448,7 @@ function labelMouseEnenter(e, config, lang) {
1311
1448
  config._triggerRef = e.target
1312
1449
  }
1313
1450
  }
1451
+
1452
+ export function assertMetaType(config, metaType) {
1453
+ return config.renderby === metaType || config.metaType === metaType
1454
+ }