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.
- package/babel.config.js +14 -0
- package/dist/index.js +2 -0
- package/dist/index.js.LICENSE.txt +8 -0
- package/dist/theme/element/index.css +1 -0
- package/dist/theme/element/src/components/card.scss +4 -0
- package/dist/theme/element/src/components/collapse.scss +16 -0
- package/dist/theme/element/src/components/date.scss +13 -0
- package/dist/theme/element/src/components/form.scss +54 -0
- package/dist/theme/element/src/components/index.scss +42 -0
- package/dist/theme/element/src/components/input.scss +15 -0
- package/dist/theme/element/src/components/message.scss +31 -0
- package/dist/theme/element/src/components/scrollbar.scss +14 -0
- package/dist/theme/element/src/components/select.scss +17 -0
- package/dist/theme/element/src/components/steps.scss +6 -0
- package/dist/theme/element/src/components/table.scss +8 -0
- package/dist/theme/element/src/components/tabs.scss +68 -0
- package/dist/theme/element/src/components/tree.scss +0 -0
- package/dist/theme/element/src/index.scss +79 -0
- package/index.js +17 -0
- package/package.json +45 -0
- package/scripts/gulpfile.mjs +73 -0
- package/scripts/webpack.config.js +81 -0
- package/src/analysisComponent.jsx +166 -0
- package/src/components/helper/button.js +17 -0
- package/src/components/helper/dock.js +120 -0
- package/src/components/icons/question-filled.vue +13 -0
- package/src/components/packages/CmiButton.vue +84 -0
- package/src/components/packages/CmiCalendar.vue +138 -0
- package/src/components/packages/CmiCell.vue +34 -0
- package/src/components/packages/CmiCheckbox.vue +63 -0
- package/src/components/packages/CmiDatetimePicker.vue +84 -0
- package/src/components/packages/CmiDropdownMenu.vue +57 -0
- package/src/components/packages/CmiInput.vue +45 -0
- package/src/components/packages/CmiLink.vue +28 -0
- package/src/components/packages/CmiPicker.vue +120 -0
- package/src/components/packages/CmiRadio.vue +29 -0
- package/src/components/packages/CmiSearch.vue +39 -0
- package/src/components/packages/CmiSelect.vue +84 -0
- package/src/components/packages/CustomComponentCard.vue +40 -0
- package/src/components/packages/CustomComponentCardH5.vue +40 -0
- package/src/components/packages/CustomComponentCol.vue +69 -0
- package/src/components/packages/CustomComponentColH5.vue +8 -0
- package/src/components/packages/CustomComponentCollapse.vue +183 -0
- package/src/components/packages/CustomComponentCollapseH5.vue +37 -0
- package/src/components/packages/CustomComponentCycle.vue +95 -0
- package/src/components/packages/CustomComponentCycleTabPane.vue +92 -0
- package/src/components/packages/CustomComponentDialog.vue +162 -0
- package/src/components/packages/CustomComponentEditor.vue +43 -0
- package/src/components/packages/CustomComponentFormLayout.vue +63 -0
- package/src/components/packages/CustomComponentFormLayoutH5.vue +55 -0
- package/src/components/packages/CustomComponentGrid.vue +29 -0
- package/src/components/packages/CustomComponentGridCol.vue +29 -0
- package/src/components/packages/CustomComponentInputDialog.vue +144 -0
- package/src/components/packages/CustomComponentPlain.vue +80 -0
- package/src/components/packages/CustomComponentRow.vue +67 -0
- package/src/components/packages/CustomComponentSelectEmployees.vue +133 -0
- package/src/components/packages/CustomComponentSendMail.vue +72 -0
- package/src/components/packages/CustomComponentSteps.vue +41 -0
- package/src/components/packages/CustomComponentTabPane.vue +41 -0
- package/src/components/packages/CustomComponentTabPaneH5.vue +30 -0
- package/src/components/packages/CustomComponentTable.jsx +406 -0
- package/src/components/packages/CustomComponentTableH5.vue +58 -0
- package/src/components/packages/CustomComponentTabs.vue +75 -0
- package/src/components/packages/CustomComponentTabsH5.vue +86 -0
- package/src/components/packages/CustomComponentTree.vue +28 -0
- package/src/components/packages/ElButton.vue +90 -0
- package/src/components/packages/ElCheckbox.vue +55 -0
- package/src/components/packages/ElDatePicker.vue +58 -0
- package/src/components/packages/ElInput.vue +23 -0
- package/src/components/packages/ElInputNumber.vue +54 -0
- package/src/components/packages/ElPagination.vue +56 -0
- package/src/components/packages/ElRadio.vue +44 -0
- package/src/components/packages/ElSelect.vue +73 -0
- package/src/components/packages/ElText.vue +48 -0
- package/src/components/packages/ElTimePicker.vue +34 -0
- package/src/components/patchComponents.js +46 -0
- package/src/components/styles/CustomComponenTable.scss +125 -0
- package/src/components/tabs/index.js +8 -0
- package/src/components/tabs/src/constants.js +23 -0
- package/src/components/tabs/src/tab-bar.js +8 -0
- package/src/components/tabs/src/tab-bar.vue +92 -0
- package/src/components/tabs/src/tab-nav.jsx +413 -0
- package/src/components/tabs/src/tab-pane.js +15 -0
- package/src/components/tabs/src/tab-pane.vue +80 -0
- package/src/components/tabs/src/tabs.jsx +217 -0
- package/src/components/tabs/style/css.js +2 -0
- package/src/components/tabs/style/index.js +2 -0
- package/src/components/thirdPartyFrame/index.js +32 -0
- package/src/components/thirdPartyFrame/src/ThirdPartyFrame.vue +123 -0
- package/src/hooks/index.js +129 -0
- package/src/hooks/pageConfig.js +20 -0
- package/src/index.jsx +140 -0
- package/src/renderer.jsx +68 -0
- package/src/rules/eventsSupplement.js +439 -0
- package/src/rules/parseCondition.js +359 -0
- package/src/rules/ruleUtils.js +208 -0
- package/src/rules/rulesDriver.js +118 -0
- package/src/theme/element/components/card.scss +4 -0
- package/src/theme/element/components/collapse.scss +16 -0
- package/src/theme/element/components/date.scss +13 -0
- package/src/theme/element/components/form.scss +54 -0
- package/src/theme/element/components/index.scss +42 -0
- package/src/theme/element/components/input.scss +15 -0
- package/src/theme/element/components/message.scss +31 -0
- package/src/theme/element/components/scrollbar.scss +14 -0
- package/src/theme/element/components/select.scss +17 -0
- package/src/theme/element/components/steps.scss +6 -0
- package/src/theme/element/components/table.scss +8 -0
- package/src/theme/element/components/tabs.scss +68 -0
- package/src/theme/element/components/tree.scss +0 -0
- package/src/theme/element/index.scss +79 -0
- package/src/utils/common.js +230 -0
- package/src/utils/const.js +198 -0
- package/src/utils/defaultVal.js +23 -0
- package/src/utils/format.js +19 -0
- package/src/utils/index.js +4 -0
- package/src/utils/is.js +69 -0
- package/src/utils/preserveFunc.js +33 -0
- package/src/utils/render.jsx +714 -0
- package/src/utils/request.js +10 -0
- 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>
|