br-dionysus 1.8.4 → 1.8.6
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/README.md +861 -88
- package/attributes.json +1 -1
- package/cypress/e2e/2-advanced-examples/actions.cy.js +3 -3
- package/cypress/e2e/2-advanced-examples/assertions.cy.js +2 -2
- package/cypress/e2e/2-advanced-examples/cypress_api.cy.js +5 -6
- package/cypress/e2e/2-advanced-examples/files.cy.js +1 -1
- package/cypress/e2e/2-advanced-examples/misc.cy.js +1 -1
- package/cypress/e2e/2-advanced-examples/navigation.cy.js +1 -1
- package/cypress/e2e/2-advanced-examples/network_requests.cy.js +22 -22
- package/cypress/e2e/2-advanced-examples/spies_stubs_clocks.cy.js +7 -7
- package/cypress/e2e/2-advanced-examples/storage.cy.js +8 -8
- package/cypress/e2e/2-advanced-examples/utilities.cy.js +15 -15
- package/dist/br-dionysus.es.js +4708 -4519
- package/dist/br-dionysus.umd.js +8 -8
- package/dist/index.css +1 -1
- package/dist/packages/Hook/useFormInline/useFormInline.d.ts +25 -0
- package/dist/packages/Hook/usePackageConfig/usePackageConfig.d.ts +1 -1
- package/dist/packages/MDialog/src/MDialog.vue.d.ts +1 -1
- package/dist/packages/MInline/src/MInline.vue.d.ts +7 -0
- package/dist/packages/MInputNumber/src/MInputNumber.vue.d.ts +2 -2
- package/dist/packages/MSelectTable/src/MSelectTable.vue.d.ts +2 -2
- package/dist/packages/MSelectTableV1/src/MSelectTableV1.vue.d.ts +3 -3
- package/dist/packages/MSelectV2/src/MSelectV2.vue.d.ts +1 -1
- package/dist/packages/MTableColumnSet/src/MTableColumnSet.vue.d.ts +1 -1
- package/dist/packages/MTableSuper/index.d.ts +4 -0
- package/dist/packages/MTableSuper/src/MTableSuper.vue.d.ts +11 -0
- package/dist/packages/MTableSuper/src/token.d.ts +23 -0
- package/dist/packages/MTableV2/src/MTableV2.vue.d.ts +7 -0
- package/dist/packages/Tool/slotsToData/slotsToData.d.ts +19 -0
- package/dist/packages/index.d.ts +1 -0
- package/package.json +1 -1
- package/packages/Hook/useFormInline/README.md +45 -0
- package/packages/Hook/useFormInline/demo.vue +141 -0
- package/packages/Hook/useFormInline/useFormInline.ts +60 -0
- package/packages/Hook/usePackageConfig/usePackageConfig.ts +1 -1
- package/packages/Hook/useTableConfig/demo.vue +1 -1
- package/packages/Hook/useTableConfig/useTableConfig.ts +10 -10
- package/packages/MDialog/src/MDialog.vue +12 -1
- package/packages/MInline/docs/README.md +7 -6
- package/packages/MInline/docs/demo.vue +16 -13
- package/packages/MInline/src/MInline.vue +127 -3
- package/packages/MInputNumber/docs/demo.vue +42 -2
- package/packages/MInputNumber/src/MInputNumber.vue +7 -7
- package/packages/MSelectTable/src/MSelectTable.vue +1 -1
- package/packages/MTable/src/MTable.vue +0 -32
- package/packages/MTableColumn/src/MTableColumn.vue +0 -41
- package/packages/MTableSuper/docs/README.md +48 -0
- package/packages/MTableSuper/docs/demo.vue +246 -0
- package/packages/MTableSuper/index.ts +10 -0
- package/packages/MTableSuper/src/MTableSuper.vue +140 -0
- package/packages/MTableSuper/src/token.ts +24 -0
- package/packages/MTableV2/docs/README.md +1 -0
- package/packages/MTableV2/docs/demo.vue +9 -7
- package/packages/MTableV2/src/MTableV2.vue +49 -5
- package/packages/SkinConfig/src/useSkin.ts +2 -2
- package/packages/Tool/slotsToData/README.md +26 -0
- package/packages/Tool/slotsToData/slotsToData.ts +38 -0
- package/packages/index.ts +3 -0
- package/packages/list.json +6 -0
- package/packages/typings/global.d.ts +2 -2
- package/src/router.ts +5 -0
- package/tags.json +1 -1
- package/web-types.json +1 -1
|
@@ -60,7 +60,7 @@ const useTableConfig = (name: string = '', tableTitle: TableTitle[] = [], tableD
|
|
|
60
60
|
/** 表格列头 */
|
|
61
61
|
const _tableTitle: Ref<TableTitle[]> = ref<TableTitle[]>([])
|
|
62
62
|
const tableConfig: Ref<TableConfig> = ref<TableConfig>(packageConfig.get('tableConfig' + name))
|
|
63
|
-
const pageConfig = packageConfig.get('tablePage' + name)
|
|
63
|
+
const pageConfig = packageConfig.get('tablePage' + name) as TableConfig
|
|
64
64
|
const page = ref<Page>(new Page(pageConfig))
|
|
65
65
|
const _tableData = tableData || ref<any[]>([])
|
|
66
66
|
/** 列筛选 */
|
|
@@ -69,13 +69,13 @@ const useTableConfig = (name: string = '', tableTitle: TableTitle[] = [], tableD
|
|
|
69
69
|
/** 过滤条件 */
|
|
70
70
|
const filtersValue = ref<FilterValue>({})
|
|
71
71
|
|
|
72
|
-
tableTitle.filter(item => !tableConfig.value[item.prop]).forEach((item, index) => {
|
|
73
|
-
tableConfig.value[item.prop] = {
|
|
72
|
+
tableTitle.filter(item => !tableConfig.value[item.prop as string]).forEach((item, index) => {
|
|
73
|
+
tableConfig.value[item.prop as string] = {
|
|
74
74
|
minWidth: item.minWidth !== undefined ? item.minWidth : '',
|
|
75
75
|
show: true,
|
|
76
76
|
sort: index,
|
|
77
77
|
// showName: item.label,
|
|
78
|
-
label: item.label,
|
|
78
|
+
label: item.label as string,
|
|
79
79
|
headerAlign: item.headerAlign || 'left',
|
|
80
80
|
align: item.align || 'left',
|
|
81
81
|
fixed: item.fixed !== undefined ? item.fixed : false
|
|
@@ -90,12 +90,12 @@ const useTableConfig = (name: string = '', tableTitle: TableTitle[] = [], tableD
|
|
|
90
90
|
}[] | undefined
|
|
91
91
|
}
|
|
92
92
|
const propToFiltersMap: PropToFiltersMap = _tableTitle.value.reduce((map: PropToFiltersMap, item) => {
|
|
93
|
-
map[item.prop] = item.filters
|
|
93
|
+
map[item.prop as string] = item.filters
|
|
94
94
|
return map
|
|
95
95
|
}, {})
|
|
96
96
|
|
|
97
97
|
_tableTitle.value = tableTitle.map(item => {
|
|
98
|
-
const tableConfigItem = tableConfig.value[item.prop]
|
|
98
|
+
const tableConfigItem = tableConfig.value[item.prop as string]
|
|
99
99
|
return {
|
|
100
100
|
...item,
|
|
101
101
|
// label: tableConfigItem?.showName || tableConfigItem?.label || item.label,
|
|
@@ -103,7 +103,7 @@ const useTableConfig = (name: string = '', tableTitle: TableTitle[] = [], tableD
|
|
|
103
103
|
minWidth: tableConfigItem?.minWidth || item.minWidth,
|
|
104
104
|
headerAlign: tableConfigItem?.headerAlign || item.headerAlign || 'left',
|
|
105
105
|
filterMethod,
|
|
106
|
-
filters: item.filters || propToFiltersMap[item.prop] || [],
|
|
106
|
+
filters: item.filters || propToFiltersMap[item.prop as string] || [],
|
|
107
107
|
align: tableConfigItem?.align || item.align,
|
|
108
108
|
fixed: tableConfigItem?.fixed || item.fixed
|
|
109
109
|
}
|
|
@@ -137,7 +137,7 @@ const useTableConfig = (name: string = '', tableTitle: TableTitle[] = [], tableD
|
|
|
137
137
|
/** 初始化列筛选 */
|
|
138
138
|
const initColumnFilter = (tableData: any[]): void => {
|
|
139
139
|
_tableTitle.value = _tableTitle.value.map(item => {
|
|
140
|
-
const data = tableData.map(node => node[item.prop]).map(node => JSON.stringify(node))
|
|
140
|
+
const data = tableData.map(node => node[item.prop as string]).map(node => JSON.stringify(node))
|
|
141
141
|
// 去重
|
|
142
142
|
const filters = [...new Set(data)].filter(node => node !== undefined).map(node => ({
|
|
143
143
|
text: JSON.parse(node),
|
|
@@ -158,8 +158,8 @@ const useTableConfig = (name: string = '', tableTitle: TableTitle[] = [], tableD
|
|
|
158
158
|
)
|
|
159
159
|
|
|
160
160
|
const tableTitleFilter = computed(() => _tableTitle.value
|
|
161
|
-
.filter(item => tableConfig.value[item.prop].show)
|
|
162
|
-
.sort((a, b) => (tableConfig.value[a.prop]?.sort || 0) - (tableConfig.value[b.prop]?.sort || 0)))
|
|
161
|
+
.filter(item => tableConfig.value[item.prop as string].show)
|
|
162
|
+
.sort((a, b) => (tableConfig.value[a.prop as string]?.sort || 0) - (tableConfig.value[b.prop as string]?.sort || 0)))
|
|
163
163
|
|
|
164
164
|
return {
|
|
165
165
|
tableTitle: tableTitleFilter,
|
|
@@ -26,7 +26,9 @@
|
|
|
26
26
|
:style="bodyStyle"
|
|
27
27
|
v-if="name === 'default'"
|
|
28
28
|
>
|
|
29
|
-
<
|
|
29
|
+
<div class="br-u-body-entity">
|
|
30
|
+
<slot name="default"></slot>
|
|
31
|
+
</div>
|
|
30
32
|
</div>
|
|
31
33
|
</template>
|
|
32
34
|
</ElDialog>
|
|
@@ -254,4 +256,13 @@ defineExpose({
|
|
|
254
256
|
transform: rotate(-45deg);
|
|
255
257
|
}
|
|
256
258
|
}
|
|
259
|
+
|
|
260
|
+
.br-u-body {
|
|
261
|
+
display: flex;
|
|
262
|
+
|
|
263
|
+
.br-u-body-entity {
|
|
264
|
+
flex: 1;
|
|
265
|
+
width: 100%;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
257
268
|
</style>
|
|
@@ -13,14 +13,15 @@ import demo from './demo.vue'
|
|
|
13
13
|
|
|
14
14
|
### 2) Attributes
|
|
15
15
|
|
|
16
|
-
| 参数
|
|
17
|
-
|
|
18
|
-
| minWidth
|
|
19
|
-
| maxWidth
|
|
20
|
-
| size
|
|
16
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
17
|
+
|-----------|:-----:|:------:|:-------------------------:|:-------:|
|
|
18
|
+
| minWidth | 列最小宽度 | number | - | 200 |
|
|
19
|
+
| maxWidth | 列最大宽度 | number | - | 300 |
|
|
20
|
+
| size | 组件尺寸 | enum | large \| default \| small | default |
|
|
21
|
+
| configKey | 配置key | string | - | - |
|
|
21
22
|
|
|
22
23
|
### 2) Events
|
|
23
24
|
|
|
24
|
-
|
|
|
25
|
+
| 事件名 | 说明 | 参数 |
|
|
25
26
|
|--------|:----------------------:|:---------------:|
|
|
26
27
|
| switch | 当切换展开与折叠模式时触发,返回当前展开状态 | unfold(boolean) |
|
|
@@ -70,38 +70,38 @@
|
|
|
70
70
|
</el-input>
|
|
71
71
|
</el-form-item>
|
|
72
72
|
<el-form-item
|
|
73
|
-
label="
|
|
74
|
-
prop="
|
|
73
|
+
label="类型"
|
|
74
|
+
prop="type"
|
|
75
75
|
data-item
|
|
76
76
|
>
|
|
77
77
|
<el-input
|
|
78
|
-
v-model="formInline.
|
|
78
|
+
v-model="formInline.type"
|
|
79
79
|
clearable
|
|
80
|
-
placeholder="
|
|
80
|
+
placeholder="请输入类型"
|
|
81
81
|
>
|
|
82
82
|
</el-input>
|
|
83
83
|
</el-form-item>
|
|
84
84
|
<el-form-item
|
|
85
|
-
label="
|
|
86
|
-
prop="
|
|
85
|
+
label="地区"
|
|
86
|
+
prop="region"
|
|
87
87
|
data-item
|
|
88
88
|
>
|
|
89
89
|
<el-input
|
|
90
|
-
v-model="formInline.
|
|
90
|
+
v-model="formInline.region"
|
|
91
91
|
clearable
|
|
92
|
-
placeholder="
|
|
92
|
+
placeholder="请输入地区"
|
|
93
93
|
>
|
|
94
94
|
</el-input>
|
|
95
95
|
</el-form-item>
|
|
96
96
|
<el-form-item
|
|
97
|
-
label="
|
|
98
|
-
prop="
|
|
97
|
+
label="等级"
|
|
98
|
+
prop="level"
|
|
99
99
|
data-item
|
|
100
100
|
>
|
|
101
101
|
<el-input
|
|
102
|
-
v-model="formInline.
|
|
102
|
+
v-model="formInline.level"
|
|
103
103
|
clearable
|
|
104
|
-
placeholder="
|
|
104
|
+
placeholder="请输入等级"
|
|
105
105
|
>
|
|
106
106
|
</el-input>
|
|
107
107
|
</el-form-item>
|
|
@@ -127,7 +127,10 @@ import { reactive } from 'vue'
|
|
|
127
127
|
const formInline = reactive({
|
|
128
128
|
name: '',
|
|
129
129
|
code: '',
|
|
130
|
-
time: ''
|
|
130
|
+
time: '',
|
|
131
|
+
type: '',
|
|
132
|
+
region: '',
|
|
133
|
+
level: ''
|
|
131
134
|
})
|
|
132
135
|
</script>
|
|
133
136
|
|
|
@@ -47,9 +47,11 @@
|
|
|
47
47
|
</template>
|
|
48
48
|
|
|
49
49
|
<script setup lang="ts">
|
|
50
|
-
import { ref, onMounted, useSlots, watch, computed } from 'vue'
|
|
50
|
+
import { ref, onMounted, useSlots, watch, computed, nextTick } from 'vue'
|
|
51
51
|
import { Size } from 'packages/typings/enum'
|
|
52
52
|
import createHash from '../../Tool/createHash/createHash'
|
|
53
|
+
import slotsToData, { SlotsToDataReturn, SlotsToDataReturnItem } from 'packages/Tool/slotsToData/slotsToData'
|
|
54
|
+
import { FormInlineConfigType } from 'packages/Hook/useFormInline/useFormInline'
|
|
53
55
|
|
|
54
56
|
const props = withDefaults(defineProps<{
|
|
55
57
|
/**
|
|
@@ -61,11 +63,14 @@ const props = withDefaults(defineProps<{
|
|
|
61
63
|
* */
|
|
62
64
|
maxWidth?: number,
|
|
63
65
|
/** 组件尺寸 */
|
|
64
|
-
size?: Size
|
|
66
|
+
size?: Size,
|
|
67
|
+
/** 配置key */
|
|
68
|
+
configKey?: string
|
|
65
69
|
}>(), {
|
|
66
70
|
minWidth: 290,
|
|
67
71
|
maxWidth: 400,
|
|
68
|
-
size: Size.DEFAULT
|
|
72
|
+
size: Size.DEFAULT,
|
|
73
|
+
configKey: ''
|
|
69
74
|
})
|
|
70
75
|
|
|
71
76
|
const height = computed(() => {
|
|
@@ -159,6 +164,125 @@ onMounted(() => {
|
|
|
159
164
|
subtree: true // 后代
|
|
160
165
|
})
|
|
161
166
|
})
|
|
167
|
+
|
|
168
|
+
const slotDefaultData = slotsToData(slots)
|
|
169
|
+
const formItemList = slotDefaultData[0].children
|
|
170
|
+
console.log('slotDefaultData', slotDefaultData)
|
|
171
|
+
console.log('formItemList', formItemList)
|
|
172
|
+
/**
|
|
173
|
+
* 重新排列元素顺序
|
|
174
|
+
* */
|
|
175
|
+
// const resetOrder = () => {
|
|
176
|
+
//
|
|
177
|
+
// }
|
|
178
|
+
|
|
179
|
+
type ConfigType = FormInlineConfigType<{
|
|
180
|
+
name: string;
|
|
181
|
+
code: string;
|
|
182
|
+
time: string;
|
|
183
|
+
type: string;
|
|
184
|
+
region: string;
|
|
185
|
+
level: string;
|
|
186
|
+
}>
|
|
187
|
+
const config: ConfigType = {
|
|
188
|
+
name: {
|
|
189
|
+
show: true,
|
|
190
|
+
sort: 2,
|
|
191
|
+
defaultValue: ''
|
|
192
|
+
},
|
|
193
|
+
code: {
|
|
194
|
+
show: true,
|
|
195
|
+
sort: 1,
|
|
196
|
+
defaultValue: ''
|
|
197
|
+
},
|
|
198
|
+
time: {
|
|
199
|
+
show: true,
|
|
200
|
+
sort: 3,
|
|
201
|
+
defaultValue: ''
|
|
202
|
+
},
|
|
203
|
+
type: {
|
|
204
|
+
show: true,
|
|
205
|
+
sort: 4,
|
|
206
|
+
defaultValue: ''
|
|
207
|
+
},
|
|
208
|
+
region: {
|
|
209
|
+
show: true,
|
|
210
|
+
sort: 5,
|
|
211
|
+
defaultValue: ''
|
|
212
|
+
},
|
|
213
|
+
level: {
|
|
214
|
+
show: true,
|
|
215
|
+
sort: 6,
|
|
216
|
+
defaultValue: ''
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
console.log('config', config)
|
|
220
|
+
|
|
221
|
+
const itemDomIndexToPropMap: Record<number, string> = {}
|
|
222
|
+
console.log('itemDomIndexToPropMap', itemDomIndexToPropMap)
|
|
223
|
+
|
|
224
|
+
interface Html_Data extends HTMLElement {
|
|
225
|
+
data_sort?: number,
|
|
226
|
+
data_key?: string
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* 排序dom列表
|
|
231
|
+
* @return Html_Data[]
|
|
232
|
+
* */
|
|
233
|
+
const domListSort = (domList: Html_Data[], configData: ConfigType): Html_Data[] => {
|
|
234
|
+
const slotChildrenList = slotDefaultData[0].children || []
|
|
235
|
+
domList.forEach((e, idx) => {
|
|
236
|
+
itemDomIndexToPropMap[idx] = (slotChildrenList[idx] as SlotsToDataReturnItem).props?.prop
|
|
237
|
+
})
|
|
238
|
+
domList.forEach((item, idx) => {
|
|
239
|
+
item.data_sort = configData[itemDomIndexToPropMap[idx] as keyof typeof configData].sort
|
|
240
|
+
item.data_key = itemDomIndexToPropMap[idx]
|
|
241
|
+
})
|
|
242
|
+
return domList.sort((a, b) => (a?.data_sort || 0) - (b?.data_sort || 0))
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* 设置元素的拖拽事件
|
|
247
|
+
* */
|
|
248
|
+
const setDomDraggableEvent = (formItem: SlotsToDataReturn = []) => {
|
|
249
|
+
const drop = (index: number) => {
|
|
250
|
+
console.log('index', index)
|
|
251
|
+
}
|
|
252
|
+
const dragstart = (keyName: string = '') => {
|
|
253
|
+
console.log('keyName', keyName)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
const domNodeList: NodeList = document.querySelectorAll(`.${boxClassName} [data-box] [data-item]`)
|
|
257
|
+
const domList: HTMLElement[] = []
|
|
258
|
+
domNodeList.forEach(dom => domList.push(dom as HTMLElement))
|
|
259
|
+
for (let i = 0; i < formItem.length; i++) {
|
|
260
|
+
const item = formItem[i]
|
|
261
|
+
|
|
262
|
+
const dom = domList[i]
|
|
263
|
+
if (!dom) continue
|
|
264
|
+
|
|
265
|
+
dom.draggable = true
|
|
266
|
+
dom.ondrop = () => drop(i)
|
|
267
|
+
dom.ondragstart = () => dragstart(item.props?.prop as string)
|
|
268
|
+
}
|
|
269
|
+
const formDom: HTMLDivElement | null = document.querySelector(`.${boxClassName} [data-box]`)
|
|
270
|
+
if (!formDom) return
|
|
271
|
+
formDom.innerHTML = ''
|
|
272
|
+
// console.log(domList)
|
|
273
|
+
const newDomList = domListSort(domList, config)
|
|
274
|
+
console.log(newDomList)
|
|
275
|
+
newDomList.forEach(dom => {
|
|
276
|
+
const clone = dom.cloneNode(true)
|
|
277
|
+
formDom.appendChild(clone)
|
|
278
|
+
})
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
nextTick(() => {
|
|
282
|
+
setDomDraggableEvent(formItemList)
|
|
283
|
+
// const formDom: HTMLDivElement | null = document.querySelector(`.${boxClassName} [data-box]`)
|
|
284
|
+
// console.log('formDom', formDom)
|
|
285
|
+
})
|
|
162
286
|
</script>
|
|
163
287
|
|
|
164
288
|
<style scoped lang="scss">
|
|
@@ -1,13 +1,53 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="g-demo-m-input-number-box">
|
|
3
|
-
<m-input-number
|
|
3
|
+
<m-input-number
|
|
4
|
+
v-model="test"
|
|
5
|
+
@input="numberInput"
|
|
6
|
+
@change="numberChange"
|
|
7
|
+
></m-input-number>
|
|
8
|
+
<h5>对比组</h5>
|
|
9
|
+
<el-input-number
|
|
10
|
+
v-model="test2"
|
|
11
|
+
@input="numberInput2"
|
|
12
|
+
@change="numberChange2"
|
|
13
|
+
></el-input-number>
|
|
4
14
|
</div>
|
|
5
15
|
</template>
|
|
6
16
|
|
|
7
17
|
<script setup lang="ts">
|
|
8
|
-
import { ref } from 'vue'
|
|
18
|
+
import { ref, watch } from 'vue'
|
|
9
19
|
|
|
10
20
|
const test = ref<number>(0)
|
|
21
|
+
const numberInput = (val: number) => {
|
|
22
|
+
console.log('m1', val)
|
|
23
|
+
console.log('m2', test.value)
|
|
24
|
+
}
|
|
25
|
+
const numberChange = (val: number) => {
|
|
26
|
+
console.log('m3', val)
|
|
27
|
+
console.log('m4', test.value)
|
|
28
|
+
}
|
|
29
|
+
watch(
|
|
30
|
+
() => test.value,
|
|
31
|
+
() => {
|
|
32
|
+
console.log('m5', test.value)
|
|
33
|
+
}
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
const test2 = ref<number>(0)
|
|
37
|
+
const numberInput2 = (val: number) => {
|
|
38
|
+
console.log('e1', val)
|
|
39
|
+
console.log('e2', test2.value)
|
|
40
|
+
}
|
|
41
|
+
const numberChange2 = (val: number) => {
|
|
42
|
+
console.log('e3', val)
|
|
43
|
+
console.log('e4', test2.value)
|
|
44
|
+
}
|
|
45
|
+
watch(
|
|
46
|
+
() => test2.value,
|
|
47
|
+
() => {
|
|
48
|
+
console.log('e5', test2.value)
|
|
49
|
+
}
|
|
50
|
+
)
|
|
11
51
|
</script>
|
|
12
52
|
|
|
13
53
|
<style scoped>
|
|
@@ -141,13 +141,13 @@ const syncSize = () => {
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
const input = () => {
|
|
144
|
-
setTimeout(() => {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
144
|
+
// setTimeout(() => {
|
|
145
|
+
// })
|
|
146
|
+
if (data.vValue === undefined) {
|
|
147
|
+
emit('update:modelValue', null)
|
|
148
|
+
return false
|
|
149
|
+
}
|
|
150
|
+
emit('update:modelValue', data.vValue)
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
const onChange = (value?: number) => {
|
|
@@ -14,19 +14,6 @@
|
|
|
14
14
|
@cellClick="cellClick"
|
|
15
15
|
@expandChange="expandChange"
|
|
16
16
|
>
|
|
17
|
-
<!-- 默认插槽 -->
|
|
18
|
-
<!--<slot></slot>-->
|
|
19
|
-
|
|
20
|
-
<!-- 循环处理具名插槽 -->
|
|
21
|
-
<!--<template-->
|
|
22
|
-
<!-- v-for="(slotData, name) in slots"-->
|
|
23
|
-
<!-- #[name]-->
|
|
24
|
-
<!-->-->
|
|
25
|
-
<!-- <slot-->
|
|
26
|
-
<!-- :name="name"-->
|
|
27
|
-
<!-- v-bind="slotData"-->
|
|
28
|
-
<!-- ></slot>-->
|
|
29
|
-
<!--</template>-->
|
|
30
17
|
<slot name="default"></slot>
|
|
31
18
|
<slot name="append"></slot>
|
|
32
19
|
<template
|
|
@@ -286,11 +273,6 @@ defineExpose({
|
|
|
286
273
|
<style lang="scss">
|
|
287
274
|
.br-m-table-box {
|
|
288
275
|
&[data-is-expand='true'] {
|
|
289
|
-
//.el-table__expand-column, colgroup > col:nth-of-type(1) {
|
|
290
|
-
// display: none;
|
|
291
|
-
// //pointer-events: none;
|
|
292
|
-
//}
|
|
293
|
-
|
|
294
276
|
.el-table__expand-column {
|
|
295
277
|
border: 0;
|
|
296
278
|
}
|
|
@@ -298,20 +280,6 @@ defineExpose({
|
|
|
298
280
|
.el-table__expand-column .cell {
|
|
299
281
|
display: none;
|
|
300
282
|
}
|
|
301
|
-
|
|
302
|
-
//.el-table__expand-column {
|
|
303
|
-
// border-right: 0;
|
|
304
|
-
//
|
|
305
|
-
// * {
|
|
306
|
-
// opacity: 0;
|
|
307
|
-
// }
|
|
308
|
-
//}
|
|
309
|
-
//
|
|
310
|
-
//.el-table__expand-column + .el-table__cell {
|
|
311
|
-
// //background-color: #2a598a;
|
|
312
|
-
// transform: translateX(-48px);
|
|
313
|
-
// padding-right: 48px;
|
|
314
|
-
//}
|
|
315
283
|
}
|
|
316
284
|
}
|
|
317
285
|
</style>
|
|
@@ -256,41 +256,6 @@ const getExpandActive = (index: number): boolean => {
|
|
|
256
256
|
|
|
257
257
|
const filterText = ref<string>('')
|
|
258
258
|
|
|
259
|
-
// const checkboxOptions = computed(() => {
|
|
260
|
-
|
|
261
|
-
// let arr = props.filters.map(item => ({
|
|
262
|
-
// ...item,
|
|
263
|
-
// value: checkType(item.value).isArray() || checkType(item.value).isObject() ? JSON.stringify(item.value) : item.value
|
|
264
|
-
// })).filter(item => String(item.value).includes(filterText.value))
|
|
265
|
-
|
|
266
|
-
// if (tableKeyData && Object.keys(props.filtersValue).length) {
|
|
267
|
-
// const processedFilters = props.filters.map(item => ({
|
|
268
|
-
// ...item,
|
|
269
|
-
// value: checkType(item.value).isArray() || checkType(item.value).isObject() ? JSON.stringify(item.value) : item.value
|
|
270
|
-
// }))
|
|
271
|
-
// console.log(props.filters)
|
|
272
|
-
// console.log(arr)
|
|
273
|
-
|
|
274
|
-
// // 收集 tableKeyData.tableData 中所有可能的 value 值
|
|
275
|
-
// const tableDataValues = new Set(
|
|
276
|
-
// tableKeyData.tableData.value.flatMap(data =>
|
|
277
|
-
// Object.values(data).map(val => String(val))
|
|
278
|
-
// )
|
|
279
|
-
// )
|
|
280
|
-
// // 筛选 processedFilters 中的值,只保留那些在 tableDataValues 中存在的项
|
|
281
|
-
// arr = processedFilters.filter(filterItem =>
|
|
282
|
-
// tableDataValues.has(String(filterItem.value))
|
|
283
|
-
// )
|
|
284
|
-
// // arr = tableKeyData.tableData.value.filter(data => {
|
|
285
|
-
// // // 检查 data.value 是否存在于 processedFilters 的 value 中
|
|
286
|
-
// // return processedFilters.some(filterItem =>
|
|
287
|
-
// // Object.values(data).some(val => String(val) === String(filterItem.value))
|
|
288
|
-
// // )
|
|
289
|
-
// // })
|
|
290
|
-
// }
|
|
291
|
-
// return arr
|
|
292
|
-
// })
|
|
293
|
-
|
|
294
259
|
const getCheckboxOptions = (options: { text: string | number, value: string | number }[]) => {
|
|
295
260
|
return options
|
|
296
261
|
.map(item => ({
|
|
@@ -393,7 +358,6 @@ const boxStyle = ref<BoxStyle>({
|
|
|
393
358
|
position: relative;
|
|
394
359
|
width: 14px;
|
|
395
360
|
height: 14px;
|
|
396
|
-
// background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAMdJREFUOE/tkyESwjAQRfMj0Xgkp2AmaQweHCeAS1AuASfAgce0yQynQOLRyHyazpRpoW2YAcnKbP7L7t8sxJeBoM+yLK04Ukp678vzWBhj0iegEK5jgnq+eGTzO4C1dkhyDGAvhBhFKrmSXAC4aK1vjV6dcxPv/QnAoA1C8i6lnCqlzlX+zaw8z2cADh2AeZIkx3qu1W3n3JLktnERWCmldq/gznFZa8NUyvFWjrdV9QcIEfWgz8BgaicgLFj467H9+Gjr+iAPDfV1EeVT6aEAAAAASUVORK5CYII=");
|
|
397
361
|
background-size: 100% 100%;
|
|
398
362
|
transform: translateY(2px);
|
|
399
363
|
cursor: pointer;
|
|
@@ -428,8 +392,6 @@ const boxStyle = ref<BoxStyle>({
|
|
|
428
392
|
|
|
429
393
|
<style lang="scss">
|
|
430
394
|
.m-filter-box {
|
|
431
|
-
//$zIndex: 2050;
|
|
432
|
-
|
|
433
395
|
&[data-is-open="true"] {
|
|
434
396
|
opacity: 1;
|
|
435
397
|
pointer-events: auto;
|
|
@@ -459,8 +421,6 @@ const boxStyle = ref<BoxStyle>({
|
|
|
459
421
|
position: fixed;
|
|
460
422
|
top: 0;
|
|
461
423
|
left: 0;
|
|
462
|
-
//z-index: $zIndex;
|
|
463
|
-
//width: 134px;
|
|
464
424
|
max-width: 50%;
|
|
465
425
|
background: var(--el-bg-color-overlay);
|
|
466
426
|
border: 1px solid var(--el-border-color-light);
|
|
@@ -509,7 +469,6 @@ const boxStyle = ref<BoxStyle>({
|
|
|
509
469
|
}
|
|
510
470
|
|
|
511
471
|
.filter-i {
|
|
512
|
-
// color: var(--el-color-primary);
|
|
513
472
|
background-color: var(--el-color-primary);
|
|
514
473
|
}
|
|
515
474
|
</style>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import demo from './demo.vue'
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
整合表格组件
|
|
6
|
+
=================
|
|
7
|
+
|
|
8
|
+
### 1) 基础用法
|
|
9
|
+
|
|
10
|
+
<Preview comp-name="MTableSuper" demo-name="demo">
|
|
11
|
+
<demo />
|
|
12
|
+
</Preview>
|
|
13
|
+
|
|
14
|
+
### 2) Attributes
|
|
15
|
+
|
|
16
|
+
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
|
17
|
+
|----------------|-----------------------------|------------------|-----|-----------------------------------------------------|
|
|
18
|
+
| data | 表格的数据 | Array | - | [ ] |
|
|
19
|
+
| sole | 行的唯一值 | String , number | - | key |
|
|
20
|
+
| filtersValue | 表格内容筛选(当为null时,不显示筛选图标) | Function \| null | - | null |
|
|
21
|
+
| expandProp | 展开图标列(如使用这个属性则必须存在rowKey属性) | string | - | '' |
|
|
22
|
+
| tableConfigKey | 表格配置key | string | - | '' |
|
|
23
|
+
| 其余参数 | 参考el官网的table | any | - | https://element-plus.org/zh-CN/component/table.html |
|
|
24
|
+
|
|
25
|
+
## 要求
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
sole 必须传递在表格数据内为唯一的值 如id key 等不会发生重复的关键字
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 3) Events
|
|
32
|
+
|
|
33
|
+
| 方法名 | 说明 | 回调参数 |
|
|
34
|
+
|---------------------|--------------------------------------|-----------------------------------------------------|
|
|
35
|
+
| pasteData | 表格粘贴方法 | 共有2个参数,依次为粘贴动作的数据PasteAction ,表格原始数据tableData |
|
|
36
|
+
| update:tableConfig | 表格配置更新 | \[tableConfig: TableConfig] |
|
|
37
|
+
| privateExpandChange | expandProp模式下 当用户对某一行展开或者关闭的时候会触发该事件 | [row: any, expandedRows: any[]] |
|
|
38
|
+
| 其余方法 | 参考el官网的table | https://element-plus.org/zh-CN/component/table.html |
|
|
39
|
+
|
|
40
|
+
### 4) PasteAction
|
|
41
|
+
|
|
42
|
+
| 参数 | 说明 | 类型 |
|
|
43
|
+
|------------|----------------------------------------|--------|
|
|
44
|
+
| editRow | 返回粘贴的对应行的原始数据 | Object |
|
|
45
|
+
| editColumn | 返回粘贴时鼠标所在列的 表格prop值 | String |
|
|
46
|
+
| arr | 返回粘贴时候处理之后的 数组信息 | Array |
|
|
47
|
+
| rowIndex | 根据sole的值 去data内查找 当前操作的 粘贴行在data内的序号 | number |
|
|
48
|
+
|