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,30 @@
1
+ <script setup>
2
+ import { computed, inject, useAttrs } from 'vue'
3
+ import Renderer from '../../renderer.jsx'
4
+ import { commonPropsType } from '../../utils/index.js'
5
+ const lang = inject('lang')
6
+ const props = defineProps({
7
+ ...commonPropsType,
8
+ })
9
+ const attrs = useAttrs()
10
+ const tabProps = computed(() => {
11
+ return {
12
+ label: lang.value.indexOf('zh') > -1 ? props.config?.metaNameZh : props.config?.metaNameEn,
13
+ name: props.config?.metaCode,
14
+ disabled: props.config?.editFlag === '0'
15
+ }
16
+ })
17
+ const modelValue = defineModel()
18
+ const pmPageMetaList = computed(() => {
19
+ return (props.config.pmPageMetaList || [])
20
+ })
21
+
22
+ </script>
23
+
24
+ <template>
25
+ <cmi-tab-content v-bind="{...attrs, ...tabProps}">
26
+ <slot>
27
+ <Renderer :config="pmPageMetaList" v-model="modelValue"></Renderer>
28
+ </slot>
29
+ </cmi-tab-content>
30
+ </template>
@@ -0,0 +1,406 @@
1
+
2
+ import { ElTable, ElTableColumn, ElPagination } from 'element-plus'
3
+ import Renderer from '../../renderer.jsx'
4
+ import { computed, inject, watch, h, ref, reactive } from 'vue'
5
+ import { commonPropsType, TABLE_COLUMN_NOT_RENDER_META_TYPE, DISPLAY_SHOW, compareComponet, isPlainObject, hasOwn, cloneDeep, isPromise, isPlainColumn, generateUniqueId, calcDisable, camelize, capitalize, DISPLAY_HIDDEN } from '../../utils/index.js'
6
+ import '../styles/CustomComponenTable.scss'
7
+
8
+ export default {
9
+ props: {
10
+ ...commonPropsType,
11
+ ...ElTable.props,
12
+ ...ElPagination.props
13
+ },
14
+ setup(props, { expose, attrs }) {
15
+ const tableProps = computed(() => {
16
+ const porpsObj = Object.keys(ElTable.props).reduce((ret, key) => {
17
+ if (props[key] !== undefined && props[key] !== null) {
18
+ ret[key] = props[key]
19
+ }
20
+ return ret
21
+ }, {})
22
+ if (!porpsObj.border) {
23
+ porpsObj.border = true
24
+ }
25
+ if (!porpsObj.stripe) {
26
+ porpsObj.stripe = true
27
+ }
28
+ return porpsObj
29
+ })
30
+
31
+ const getCompEvents = (comp) => {
32
+ let emitKeys = comp.emits
33
+ if(!Array.isArray(emitKeys)) {
34
+ emitKeys = Object.keys(emitKeys)
35
+ }
36
+ return emitKeys.reduce((ret, key) => {
37
+ const eventKey = capitalize(camelize(eventKey))
38
+ if (hasOwn(attrs, eventKey)) {
39
+ ret[eventKey] = attrs[eventKey]
40
+ }
41
+ return ret
42
+ }, {})
43
+ }
44
+
45
+ const tableEvents = computed(() => {
46
+ return getCompEvents(ElTable)
47
+ })
48
+ const pagenationEvents = computed(() => {
49
+ return getCompEvents(ElPagination)
50
+ })
51
+
52
+ const lang = inject('lang')
53
+ const rootValue = inject('rootValue')
54
+ const selects = inject('selects')
55
+ const tableColumnFirstMetaCode = ref("")
56
+ const tableColumnConfigs = computed(() => {
57
+ let pmPageMetaList = props.config.pmPageMetaList || []
58
+ return pmPageMetaList.map((config) => {
59
+ if (config.displayType === DISPLAY_SHOW && !tableColumnFirstMetaCode.value) {
60
+ tableColumnFirstMetaCode.value = config.metaCode
61
+ }
62
+ return normalColumnConfig(config)
63
+ })
64
+ })
65
+
66
+ // 获取表格列的属性配置
67
+ const getTableColumnProps = (config, idx) => {
68
+ const nextList = tableColumnConfigs.value.slice(idx + 1)
69
+ const nextConfig = nextList.find(config => config.displayType === DISPLAY_SHOW)
70
+ const props = Object.keys(ElTableColumn.props).reduce((ret, key) => {
71
+ if (config[key]) {
72
+ ret[key] = config[key]
73
+ }
74
+ return ret
75
+ }, {})
76
+ if (!props.prop) {
77
+ props.prop = config.metaCode
78
+ }
79
+ if (!props.columnWidth) {
80
+ props.minWidth = '160px'
81
+ }
82
+ if (props.width == 0 || props.width == '0px') {
83
+ props.className = 'hidden-column'
84
+ props.width = '1px'
85
+ }
86
+ if (nextConfig && (nextConfig.width == 0 || nextConfig.width == '0px')) {
87
+ props.className = `${props.className || ''} next-hidden-column`
88
+ }
89
+ if (isPlainColumn({...config, isColumn: true}, calcDisable(config, props.mode))) {
90
+ props['show-overflow-tooltip'] = true
91
+ }
92
+ return props
93
+ }
94
+
95
+ // 获取表格的配置,这边会做一下配置转化,表格中的不需要labelWidth
96
+ const normalColumnConfig = (config) => {
97
+ return {
98
+ ...config,
99
+ labelWidth: '0px'
100
+ }
101
+ }
102
+
103
+ // 列中是否需要展示render渲染
104
+ const tableColumnNotRender = (config) => {
105
+ if (!config) return true
106
+ // if (config['show-overflow-tooltip'] || config.showOverflowTooltip) return true
107
+ // 'selection', 'index' 是el-table属性type中type的两个枚举,这两个直接使用默认效果
108
+ if (['selection', 'index'].includes(config.type)) {
109
+ return true
110
+ }
111
+ const metaTypeNotRender = TABLE_COLUMN_NOT_RENDER_META_TYPE.some(metaType => compareComponet(metaType, config.metaType)) || !config.metaType
112
+ return !config.renderby && metaTypeNotRender
113
+ }
114
+
115
+ const getValue = (idx) => {
116
+ return props.refValue.value?.[idx]
117
+ }
118
+ const onUpdateModelValue = (val, idx) => {
119
+ if (!props.refValue.value) {
120
+ props.refValue.value = []
121
+ }
122
+ props.refValue.value[idx] = val
123
+ }
124
+
125
+ const multiPmPageMetaList = computed(() => {
126
+ return props.config.multiPmPageMetaList || []
127
+ })
128
+
129
+ /**
130
+ * 设置 multiPmPageMetaList 的值
131
+ * multiPmPageMetaList值主要作用是区分列的每一行都需要有单独的config,接口配置返回的只是列的配置,
132
+ * 所以这边需要单独再坐下处理
133
+ */
134
+ const rowColumnConfgsMap = new Map()
135
+ watch(() => {
136
+ return props.refValue?.value
137
+ }, (length) => {
138
+ let list = []
139
+ if (length) {
140
+ const newVal = props.refValue?.value
141
+ list = newVal.map((row, idx) => {
142
+ const columnsCgs = rowColumnConfgsMap.get(row)
143
+ if (columnsCgs) {
144
+ columnsCgs.forEach(config => {
145
+ config.rowIndex = idx
146
+ })
147
+ return columnsCgs
148
+ } else {
149
+ const retColumnConfigs = tableColumnConfigs.value.map((config, relIdx) => {
150
+ const ret = cloneDeep(config)
151
+ if (ret.width && !ret.columnWidth) {
152
+ ret.columnWidth = ret.width
153
+ delete ret.width
154
+ }
155
+ ret.columnId = generateUniqueId()
156
+ ret.rowIndex = idx
157
+ ret.isColumn = true
158
+ ret.refConfig = props?.config?.pmPageMetaList?.[relIdx]
159
+ ret.parent = props?.config // 这边手动设置一下,防止组件复用的时候不会刷新,造成parent的丢失
160
+ return ret
161
+ })
162
+ rowColumnConfgsMap.set(row, retColumnConfigs)
163
+ return retColumnConfigs
164
+ }
165
+ })
166
+ }
167
+ props.config.multiPmPageMetaList = list
168
+ }, {
169
+ immediate: true,
170
+ deep: true,
171
+ })
172
+ // 统计行定义 ====start======
173
+ const totalMetaCodes = computed(() => {
174
+ return props.config?.totalMetaCodes || []
175
+ })
176
+ const normalTotalCodes = computed(() => {
177
+ return totalMetaCodes.value.map(code => {
178
+ if (typeof code === 'string') {
179
+ return {
180
+ code,
181
+ totalFn: defaultTotalFn
182
+ }
183
+ } else {
184
+ if (isPlainObject(code) && hasOwn(code, 'code')) {
185
+ code.totalFn = typeof code.totalFn === 'function' ? code.totalFn : defaultTotalFn
186
+ return code
187
+ }
188
+ return null
189
+ }
190
+ }).filter(codeInfo => !!codeInfo)
191
+ })
192
+ const totalCodeRenders = computed(() => {
193
+ const defaultTotalObj = {
194
+ [tableColumnFirstMetaCode.value]: () => {
195
+ return <div>{lang.value.indexOf('zh') > -1 ? '总计' : 'Total'}</div>
196
+ }
197
+ }
198
+ return normalTotalCodes.value.reduce((ret, codeInfo) => {
199
+ const { code, render } = codeInfo
200
+ if (render && typeof render === 'function') {
201
+ ret[code] = render
202
+ }
203
+ return ret
204
+ }, defaultTotalObj)
205
+ })
206
+ const defaultTotalFn = (total, val, row) => {
207
+ if (val === undefined || val === null) {
208
+ val = !isNaN(Number(val)) ? 0 : ''
209
+ } else {
210
+ val = val.toString().replace(/[^\d\.]/g, '')
211
+ }
212
+ const numFlag = !isNaN(Number(val))
213
+ if (total === null || total === undefined) {
214
+ total = numFlag ? 0 : ''
215
+ }
216
+ return total + (numFlag ? Number(val) : val)
217
+ }
218
+ const totalRow = computed(() => {
219
+ if (!props.refValue.value?.length || !totalMetaCodes.value.length || !normalTotalCodes.value.length) {
220
+ return []
221
+ }
222
+ // 进行统计的计算
223
+ const row = (props.refValue.value || []).reduce((total, row) => {
224
+ normalTotalCodes.value.forEach(codeInfo => {
225
+ const { code, totalFn } = codeInfo
226
+ total[code] = totalFn(total[code], row[code], row)
227
+ })
228
+ return total
229
+ }, { totalFlag: true })
230
+ return [row]
231
+ })
232
+ // 统计行定义 ====end======
233
+
234
+ // 表格是否开启啦可选择配置
235
+ const selectable = computed(() => {
236
+ return props.config?.selectable
237
+ })
238
+ const selectedRow = ref(null)
239
+ const currentChange = (row) => {
240
+ selectedRow.value = row
241
+ tableEvents?.onCurrentChange?.(row)
242
+ }
243
+ const multipleSelection = ref([])
244
+ const handleSelectionChange = (val) => {
245
+ multipleSelection.value = val
246
+ }
247
+
248
+ // 是否配置分页功能 ====== start======
249
+ const pageable = computed(() => {
250
+ return props.config?.pageable
251
+ })
252
+ const pageAlign = computed(() => {
253
+ return props.config?.pageAlign
254
+ })
255
+ const PAGE_LEFT = 'left'
256
+ const PAGE_CENTER = 'center'
257
+ const PAGE_RIGHT = 'right'
258
+ const pageAlignEnmu = {
259
+ [PAGE_LEFT]: 'flex-start',
260
+ [PAGE_RIGHT]: 'flex-end',
261
+ [PAGE_CENTER]: 'center'
262
+ }
263
+ // 获取分页功能属性
264
+ const paginationProps = computed(() => {
265
+ const attrs = Object.keys(ElPagination.props).reduce((ret, key) => {
266
+ if (hasOwn(props.config, key)) {
267
+ ret[key] = props.config[key]
268
+ }
269
+ return ret
270
+ }, {})
271
+ if (!hasOwn(attrs, 'background')) {
272
+ attrs.background = true
273
+ }
274
+ if (!hasOwn(attrs, 'layout')) {
275
+ attrs.layout = 'prev, pager, next, sizes, jumper'
276
+ }
277
+ if (!hasOwn(attrs, 'page-sizes') && !hasOwn(attrs, 'pageSizes')) {
278
+ attrs.pageSizes = [5, 10, 20, 40]
279
+ }
280
+ return attrs
281
+ })
282
+ const page = reactive({
283
+ pageNum: 1,
284
+ pageSize: 5,
285
+ total: 0,
286
+ })
287
+ // 页码变动
288
+ watch(() => page.pageNum, (val) => {
289
+ const fn = props.config?.currentChange
290
+ const ret = fn && fn(val, props, page)
291
+ if (ret) {
292
+ if (isPromise(ret)) {
293
+ ret.then((res) => {
294
+ res && (props.refValue.value = res)
295
+ })
296
+ } else {
297
+ props.refValue.value = ret
298
+ }
299
+ }
300
+ })
301
+ // 页面大小变动
302
+ watch(() => page.pageSize, (val) => {
303
+ const fn = props.config?.sizeChange
304
+ const ret = fn && fn(val, props, page)
305
+ if (ret) {
306
+ if (isPromise(ret)) {
307
+ ret.then((res) => {
308
+ res && (props.refValue.value = res)
309
+ })
310
+ } else {
311
+ props.refValue.value = ret
312
+ }
313
+ }
314
+ })
315
+
316
+ const tableExposeKeys = [
317
+ 'clearSelection',
318
+ 'getSelectionRows',
319
+ 'toggleRowSelection',
320
+ 'toggleAllSelection',
321
+ 'toggleRowExpansion',
322
+ 'setCurrentRow',
323
+ 'clearSort',
324
+ 'clearFilter',
325
+ 'doLayout',
326
+ 'sort',
327
+ 'scrollTo',
328
+ 'setScrollTop',
329
+ 'setScrollLeft',
330
+ 'columns'
331
+ ]
332
+ const tableRef = ref(null)
333
+ const tableExpose = tableExposeKeys.reduce((ret, key) => {
334
+ ret[key] = (...arg) => {
335
+ tableRef.value?.[key](...arg)
336
+ }
337
+ return ret
338
+ }, {})
339
+
340
+ // 是否配置分页功能 ====== end======
341
+ expose({
342
+ multipleSelection,
343
+ selectedRow,
344
+ page,
345
+ ...tableExpose
346
+ })
347
+
348
+ // console.log('dynamicMapComp===:', inject('dynamicMapComp'))
349
+ return () => {
350
+ return (
351
+ <div class="custom-component-table">
352
+ <ElTable {...tableProps.value} {...tableEvents}
353
+ ref={(e) => {tableRef.value = e}}
354
+ highlight-current-row={selectable.value || tableProps.value?.highlightCurrentRow ? true : false}
355
+ onCurrentChange={selectable.value ? currentChange : () => {}}
356
+ data={[...(props.refValue.value || []), ...totalRow.value]}
357
+ onSelectionChange={handleSelectionChange}
358
+ >
359
+ {
360
+ tableColumnConfigs.value.map((columnConfg, configIdx) => {
361
+ return columnConfg.displayType == DISPLAY_HIDDEN ? null : (
362
+ <ElTableColumn key={columnConfg.requiredFlag} {...getTableColumnProps(columnConfg, configIdx)}>
363
+ {{
364
+ header: () => (
365
+ <span className='head-span' title={lang.value.indexOf('zh') > -1 ? columnConfg.metaNameZh : columnConfg.metaNameEn}>
366
+ { columnConfg.requiredFlag === '1' ? <span style="color: rgb(245, 34, 45); margin-right: 3px;">*</span> : '' }
367
+ { columnConfg.headerRender ? columnConfg.headerRender(h, { props, config: columnConfg, lang, rootValue, selects })
368
+ : (lang.value.indexOf('zh') > -1 ? columnConfg.metaNameZh : columnConfg.metaNameEn)
369
+ }
370
+ </span>
371
+ ),
372
+ // default: ({row, $index}) => {
373
+ // return getValue($index)?.[columnConfg.metaCode]
374
+ // }
375
+ default: ({row, $index}) => {
376
+ if (row.totalFlag) {
377
+ return totalCodeRenders.value[columnConfg.metaCode] ? totalCodeRenders.value[columnConfg.metaCode]({
378
+ val: row[columnConfg.metaCode],
379
+ row,
380
+ h
381
+ }) : null
382
+ }
383
+ const config = multiPmPageMetaList.value?.[$index]?.[configIdx]
384
+ return (
385
+ tableColumnNotRender(config) ? null :
386
+ <Renderer key={`${config.columnId}-${config.rowIndex}`} class="error-tip-block" modelValue={getValue($index)} rowScope={{row, $index}} onUpdate:modelValue={(val) => { onUpdateModelValue(val, $index) }} config={config}></Renderer>
387
+ )
388
+ }
389
+ }}
390
+ </ElTableColumn>
391
+ )
392
+ })
393
+ }
394
+ </ElTable>
395
+ {
396
+ pageable.value ?
397
+ <div class="pagination-wrap" style={{'justify-content': pageAlignEnmu[pageAlign.value || PAGE_RIGHT]}}>
398
+ <ElPagination { ...paginationProps.value } {...pagenationEvents} v-model:current-page={page.pageNum} v-model:page-size={page.pageSize} total={page.total}></ElPagination>
399
+ </div>
400
+ : null
401
+ }
402
+ </div>
403
+ )
404
+ }
405
+ }
406
+ }
@@ -0,0 +1,58 @@
1
+ <script setup>
2
+ import { commonPropsType } from '../../utils/index.js'
3
+ import { computed, inject, ref, useAttrs, watch } from 'vue'
4
+
5
+ const attrs = useAttrs()
6
+ const lang = inject('lang')
7
+ const tableRef = ref(null)
8
+ const props = defineProps({
9
+ ...commonPropsType,
10
+ })
11
+ const tableData = ref([])
12
+ const modelValue = defineModel()
13
+ const tableProps = computed(() => {
14
+ return {
15
+ stripe: props.config?.stripe === '1',
16
+ card: props.config?.displayType === 'card',
17
+ display: props.config?.display,
18
+ open: props.config?.open === '1',
19
+ showlandscape: props.config?.showlandscape === '1',
20
+ }
21
+ })
22
+
23
+ const pmPageMetaList = computed(() => {
24
+ return (props.config.pmPageMetaList || [])
25
+ })
26
+
27
+ const getTableColumnProps = (config) => {
28
+ return {
29
+ label: lang?.value?.indexOf('zh') > -1 ? config.metaNameZh : config.metaNameEn,
30
+ prop: config.metaCode,
31
+ width: config.columnWidth,
32
+ ellipsis: config.ellipsis === '1',
33
+ showexpand: config.showexpand === '1'
34
+ }
35
+ }
36
+
37
+ watch(modelValue, (val) => {
38
+ setTimeout(() => {
39
+ tableData.value = val || (tableProps.value.card ? [{}] : [])
40
+ }, 100);
41
+ tableRef.value?.setTableData(val || [])
42
+ }, {
43
+ immediate: true
44
+ })
45
+ </script>
46
+ <template>
47
+ <cmi-table ref="tableRef" :key="`${tableProps.card}${tableProps.display}`" v-bind="tableProps" :data="tableData">
48
+ <cmi-table-column
49
+ v-for="column in pmPageMetaList" :key="column.metaCode"
50
+ v-bind="{
51
+ ...attrs,
52
+ ...getTableColumnProps(column)
53
+ }"
54
+ >
55
+ </cmi-table-column>
56
+ </cmi-table>
57
+ </template>
58
+ <style></style>
@@ -0,0 +1,75 @@
1
+ <template>
2
+ <Tabs :class="[`tabs-level-${level}`, fullBorder ? 'full-border' : '']" v-bind="{...transTabsProps, ...attrs}" v-model="activeNames">
3
+ <Renderer :config="tabpanes" v-model="props.refValue.value"></Renderer>
4
+ </Tabs>
5
+ </template>
6
+ <script setup>
7
+ import { ElTabs } from 'element-plus'
8
+ import Tabs from '../tabs'
9
+ import Renderer from '../../renderer.jsx'
10
+ import { computed, useAttrs } from 'vue'
11
+ import { commonPropsType, hasOwn } from '../../utils/index.js'
12
+
13
+ // import * as lib from 'element-plus/es/utils/index.mjs'
14
+
15
+ const props = defineProps({
16
+ ...ElTabs.props,
17
+ ...commonPropsType,
18
+ })
19
+ const attrs = useAttrs()
20
+ const tabsProps = computed(() => {
21
+ return Object.keys(ElTabs.props).reduce((ret, key) => {
22
+ ret[key] = props[key]
23
+ return ret
24
+ }, {})
25
+ })
26
+ const tabpanes = computed(() => {
27
+ return props.config.pmPageMetaList || []
28
+ })
29
+ const activeNames = computed({
30
+ get() {
31
+ const currentTab = tabpanes.value.find(tab => tab.defaultShowFlag === '1')
32
+ const currentCycleTab = tabpanes.value.find(tab => tab.currentCode)
33
+ return (currentTab && currentTab.metaCode)
34
+ || (currentCycleTab && currentCycleTab.currentCode)
35
+ || (tabpanes.value[0] && (tabpanes.value[0].metaType === 'CustomComponentTabPane' && tabpanes.value[0].metaCode) || (tabpanes.value[0].metaType === 'CustomComponentCycleTabPane' && `${tabpanes.value[0].metaCode}-0`))
36
+ },
37
+ set(val) {
38
+ tabpanes.value.forEach(tab => {
39
+ if (tab.metaType === 'CustomComponentTabPane') {
40
+ if (tab.metaCode === val) {
41
+ tab.defaultShowFlag = '1'
42
+ } else {
43
+ tab.defaultShowFlag = '0'
44
+ }
45
+ }
46
+ if (tab.metaType === 'CustomComponentCycleTabPane') {
47
+ if (new RegExp(`^${tab.metaCode}-(\d+)$`).test(val)) {
48
+ tab.currentCode = val
49
+ } else {
50
+ tab.currentCode = ''
51
+ }
52
+ }
53
+ })
54
+ }
55
+ })
56
+
57
+ const level = computed(() => {
58
+ return props.config.level || tabpanes.value.find(tabpane => hasOwn(tabpane, 'level'))?.level || 1
59
+ })
60
+ const transTabsProps = computed(() => {
61
+ return level.value == 1 ? {
62
+ stretch: true,
63
+ type: 'border-card'
64
+ } : level.value == 2 ? {
65
+ } : level.value == 3 ? {
66
+ type: 'card'
67
+ } : tabsProps.value
68
+ })
69
+ /**
70
+ * 层级为一的时候,并且只有一个页签,激活的页签头,应该有分割线
71
+ */
72
+ const fullBorder = computed(() => {
73
+ return tabpanes.value.length === 1 && level.value == 1
74
+ })
75
+ </script>
@@ -0,0 +1,86 @@
1
+ <script setup>
2
+ import { computed, inject, useAttrs } from 'vue'
3
+ import { commonPropsType, hasOwn } from '../../utils/index.js'
4
+ import Renderer from '../../renderer.jsx'
5
+ import CustomComponentTabPaneH5 from './CustomComponentTabPaneH5.vue'
6
+
7
+ const props = defineProps({
8
+ ...commonPropsType,
9
+ })
10
+
11
+ const lang = inject('lang')
12
+ const attrs = useAttrs()
13
+ const modelValue = defineModel()
14
+ const tabpanes = computed(() => {
15
+ return props.config.pmPageMetaList || []
16
+ })
17
+
18
+ const activeNames = computed({
19
+ get() {
20
+ const currentTab = tabpanes.value.find(tab => tab.defaultShowFlag === '1')
21
+ const currentCycleTab = tabpanes.value.find(tab => tab.currentCode)
22
+ return (currentTab && currentTab.metaCode)
23
+ || (currentCycleTab && currentCycleTab.currentCode)
24
+ || (tabpanes.value[0] && (tabpanes.value[0].metaType === 'CustomComponentTabPaneH5' && tabpanes.value[0].metaCode) || (tabpanes.value[0].metaType === 'CustomComponentCycleTabPaneH5' && `${tabpanes.value[0].metaCode}-0`))
25
+ },
26
+ set(val) {
27
+ tabpanes.value.forEach(tab => {
28
+ if (tab.metaType === 'CustomComponentTabPane') {
29
+ if (tab.metaCode === val) {
30
+ tab.defaultShowFlag = '1'
31
+ } else {
32
+ tab.defaultShowFlag = '0'
33
+ }
34
+ }
35
+ if (tab.metaType === 'CustomComponentCycleTabPane') {
36
+ if (new RegExp(`^${tab.metaCode}-(\d+)$`).test(val)) {
37
+ tab.currentCode = val
38
+ } else {
39
+ tab.currentCode = ''
40
+ }
41
+ }
42
+ })
43
+ }
44
+ })
45
+ const tabProps = computed(() => {
46
+ return {
47
+ activekey: activeNames.value,
48
+ sticky: props.config?.sticky == '1',
49
+ offsettop: (props.config?.offsetTop || '0') + 'vw',
50
+ type: props.config.displayType,
51
+ title: lang.value?.indexOf('zh') > -1 ? props.config.metaNameZh : props.config.metaNameEn
52
+ }
53
+ })
54
+
55
+ const getValue = (code) => {
56
+ return modelValue.value?.[code]
57
+ }
58
+ const onUpdateModelValue = (val, code) => {
59
+ if (!modelValue.value) {
60
+ modelValue.value = {
61
+ [code]: val
62
+ }
63
+ } else {
64
+ modelValue.value[code] = val
65
+ }
66
+ }
67
+
68
+ </script>
69
+
70
+ <template>
71
+ <cmi-tabs class="custom-component-tabs-h5" v-bind="{...attrs, ...tabProps}">
72
+ <CustomComponentTabPaneH5
73
+ v-for="tabpane in tabpanes" :config="tabpane" :key="tabpane.metaId"
74
+ >
75
+ <Renderer :config="tabpane?.pmPageMetaList || []" :additionConfigs="[tabpane]" :modelValue="getValue(tabpane.metaCode)" @update:modelValue="(val) => { onUpdateModelValue(val, tabpane.metaCode) }"></Renderer>
76
+ </CustomComponentTabPaneH5>
77
+ </cmi-tabs>
78
+ </template>
79
+
80
+ <style lang="scss" scoped>
81
+ .custom-component-tabs-h5 {
82
+ // &.cmi-tabs {
83
+ // --cmi-tab-item-min-width: 90px;
84
+ // }
85
+ }
86
+ </style>
@@ -0,0 +1,28 @@
1
+ <script setup>
2
+ import { ElTree } from 'element-plus'
3
+ import { computed, useAttrs } from "vue";
4
+ import { commonPropsType } from '../../utils/index.js'
5
+
6
+ const props = defineProps({
7
+ ...commonPropsType,
8
+ ...ElTree.props
9
+ })
10
+
11
+ const attrs = useAttrs()
12
+ const calcProps = computed(() => {
13
+ return Object.keys(ElTree.props).reduce((ret, key) => {
14
+ ret[key] = props[key]
15
+ return ret
16
+ }, {})
17
+ })
18
+ const options = computed(() => {
19
+ return props.options || []
20
+ })
21
+
22
+ </script>
23
+ <template>
24
+ <el-tree
25
+ v-bind="{...attrs, ...calcProps}"
26
+ :data="options"
27
+ />
28
+ </template>