@lx-frontend/wrap-element-ui 1.0.20 → 1.0.21-beta.1
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 +1 -1
- package/src/components/EditableTable/bizHooks/useColumnHeaderOperation.ts +17 -9
- package/src/components/EditableTable/features/bizTableHeaderPopover/index.vue +6 -1
- package/src/components/EditableTable/index.vue +42 -4
- package/src/components/EditableTable/types/index.ts +7 -1
package/package.json
CHANGED
|
@@ -92,6 +92,10 @@ export function useColumnHeaderOperation({ props, tableDomRef, emit, showingColu
|
|
|
92
92
|
return !!(filteredValue.value[item.prop] as any[]).length
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
+
if (item.type === 'slot') {
|
|
96
|
+
return item.active()
|
|
97
|
+
}
|
|
98
|
+
|
|
95
99
|
return !!filteredValue.value[item.prop]
|
|
96
100
|
}
|
|
97
101
|
)
|
|
@@ -139,15 +143,17 @@ export function useColumnHeaderOperation({ props, tableDomRef, emit, showingColu
|
|
|
139
143
|
const params: Record<string, any> = {};
|
|
140
144
|
|
|
141
145
|
const processFilter = (filters: FilterListType) => {
|
|
142
|
-
filters
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
146
|
+
filters
|
|
147
|
+
.filter(item => item.type !== 'slot')
|
|
148
|
+
.forEach((item) => {
|
|
149
|
+
if (item.type === 'doubleDatePicker' || item.type === 'monthDayPicker') {
|
|
150
|
+
const [start, end] = item.prop
|
|
151
|
+
params[start] = filteredValue.value[start];
|
|
152
|
+
params[end] = filteredValue.value[end];
|
|
153
|
+
} else {
|
|
154
|
+
params[item.prop] = filteredValue.value[item.prop];
|
|
155
|
+
}
|
|
156
|
+
});
|
|
151
157
|
}
|
|
152
158
|
|
|
153
159
|
// 仅提交显示的列的相关数据
|
|
@@ -242,6 +248,7 @@ export function useColumnHeaderOperation({ props, tableDomRef, emit, showingColu
|
|
|
242
248
|
|
|
243
249
|
function handleResetFilterValue (column: IColumnConfig) {
|
|
244
250
|
(column.filters || [])
|
|
251
|
+
.filter(item => item.type !== 'slot')
|
|
245
252
|
.forEach(
|
|
246
253
|
(item) => {
|
|
247
254
|
if (item.type === 'radio' || item.type === 'checkbox') {
|
|
@@ -287,6 +294,7 @@ export function useColumnHeaderOperation({ props, tableDomRef, emit, showingColu
|
|
|
287
294
|
// 设置搜索和过滤参数时,如果使用 showingColumns 遍历,会导致通过外部设置未显示的列的搜索和过滤参数丢失
|
|
288
295
|
[props.colorFilterConfig, ...props.columnConfig].forEach(column => {
|
|
289
296
|
(column?.filters ?? [])
|
|
297
|
+
.filter(item => item.type !== 'slot')
|
|
290
298
|
.forEach(
|
|
291
299
|
(item) => {
|
|
292
300
|
if (item.type === 'doubleDatePicker' || item.type === 'monthDayPicker') {
|
|
@@ -40,7 +40,12 @@
|
|
|
40
40
|
:key="index"
|
|
41
41
|
class="editable-table-sort-filter__item editable-table__filter-group__filter"
|
|
42
42
|
>
|
|
43
|
+
<slot
|
|
44
|
+
v-if="filterItem.type === 'slot'"
|
|
45
|
+
:name="filterItem.slotName"
|
|
46
|
+
/>
|
|
43
47
|
<component
|
|
48
|
+
v-else
|
|
44
49
|
:is="componentMap[filterItem.type]"
|
|
45
50
|
:config="filterItem"
|
|
46
51
|
:temp-filtered-value="tempFilteredValue"
|
|
@@ -125,7 +130,7 @@ const emit = defineEmits<{
|
|
|
125
130
|
}>()
|
|
126
131
|
|
|
127
132
|
// 把 filterItem.type 映射到组件
|
|
128
|
-
const componentMap: Record<FilterItem['type'], any> = {
|
|
133
|
+
const componentMap: Record<Exclude<FilterItem['type'], 'slot'>, any> = {
|
|
129
134
|
/** 输入框 */
|
|
130
135
|
input: BizInputFilter,
|
|
131
136
|
/** 日期范围 */
|
|
@@ -162,10 +162,10 @@
|
|
|
162
162
|
:temp-filtered-value="tempFilteredValue"
|
|
163
163
|
@update:tempSummaryList="val => { tempSummaryList = val }"
|
|
164
164
|
@update:tempFilteredValue="(key, value) => { $set(tempFilteredValue, key, value) }"
|
|
165
|
-
@popover-show="() =>
|
|
165
|
+
@popover-show="() => handleOpenFilter(column)"
|
|
166
166
|
@update:sort="handleSort"
|
|
167
|
-
@reset="() =>
|
|
168
|
-
@confirm="() =>
|
|
167
|
+
@reset="() => handleResetFilter(column)"
|
|
168
|
+
@confirm="() => handleConfirmFilter(column)"
|
|
169
169
|
>
|
|
170
170
|
<template #summay-item>
|
|
171
171
|
<slot
|
|
@@ -175,6 +175,16 @@
|
|
|
175
175
|
{{ column.label }}
|
|
176
176
|
</slot>
|
|
177
177
|
</template>
|
|
178
|
+
<!-- 动态地将父组件传递的所有slot下发给孙子组件(biz-table-header-popover),以实现slot的透传 -->
|
|
179
|
+
<template
|
|
180
|
+
v-for="(_, name) in $slots"
|
|
181
|
+
#[name]="slotProps"
|
|
182
|
+
>
|
|
183
|
+
<slot
|
|
184
|
+
:name="name"
|
|
185
|
+
v-bind="slotProps || column"
|
|
186
|
+
/>
|
|
187
|
+
</template>
|
|
178
188
|
</biz-table-header-popover>
|
|
179
189
|
</template>
|
|
180
190
|
<!-- 默认操作按钮,defaultOperations属性不为空数组时展示。编辑状态下隐藏 -->
|
|
@@ -397,6 +407,12 @@ interface IEmits {
|
|
|
397
407
|
(e: 'sort-change', param: { order: 'descending' | 'ascending' | null, prop: string }): void
|
|
398
408
|
/** 双击某一行 */
|
|
399
409
|
(e: 'row-dblclick', param: any): void
|
|
410
|
+
/** 筛选条件打开 */
|
|
411
|
+
(e: 'open-filter', prop: string): void
|
|
412
|
+
/** 重置筛选 */
|
|
413
|
+
(e: 'reset-filter', prop: string): void
|
|
414
|
+
/** 筛选条件确认 */
|
|
415
|
+
(e: 'confirm-filter', prop: string): void
|
|
400
416
|
}
|
|
401
417
|
|
|
402
418
|
const props = withDefaults(defineProps<IProps>(), {
|
|
@@ -565,7 +581,8 @@ const beforeDragStart = () => {
|
|
|
565
581
|
return true;
|
|
566
582
|
};
|
|
567
583
|
|
|
568
|
-
// @ts-
|
|
584
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
585
|
+
// @ts-ignore ts-plugin存在间歇性抛出「类型实例化过深,且可能无限」的错误
|
|
569
586
|
useDragSort({
|
|
570
587
|
emit,
|
|
571
588
|
props,
|
|
@@ -609,6 +626,27 @@ const handleRowDblClick = (e) => {
|
|
|
609
626
|
emit('row-dblclick', e);
|
|
610
627
|
};
|
|
611
628
|
|
|
629
|
+
const handleOpenFilter = (column: IColumnConfig) => {
|
|
630
|
+
emit('open-filter', column.prop);
|
|
631
|
+
nextTick(() => {
|
|
632
|
+
handleHeaderPopoverShow(column)
|
|
633
|
+
})
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
const handleResetFilter = (column: IColumnConfig) => {
|
|
637
|
+
emit('reset-filter', column.prop);
|
|
638
|
+
nextTick(() => {
|
|
639
|
+
handleHeaderOperationReset(column)
|
|
640
|
+
})
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
const handleConfirmFilter = (column: IColumnConfig) => {
|
|
644
|
+
emit('confirm-filter', column.prop);
|
|
645
|
+
nextTick(() => {
|
|
646
|
+
handleHeaderOperationConfirm(column)
|
|
647
|
+
})
|
|
648
|
+
}
|
|
649
|
+
|
|
612
650
|
const bizViewSettingDialogRef = ref(null as unknown as InstanceType<typeof BizViewSettingDialog>)
|
|
613
651
|
const handleViewSettingShow = () => bizViewSettingDialogRef.value.open()
|
|
614
652
|
|
|
@@ -60,7 +60,13 @@ export interface IFilterColorRadio {
|
|
|
60
60
|
options: Array<IFilterSelectOptions & { color: string }>
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
export
|
|
63
|
+
export interface IFilterSolt {
|
|
64
|
+
type: 'slot',
|
|
65
|
+
slotName: string,
|
|
66
|
+
active: () => boolean
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export type FilterItem = IFilterInput | IFilterSelect | IFilterDoubleDatePicker | IFilterMonthDayPicker | IFilterColorRadio | IFilterSolt
|
|
64
70
|
|
|
65
71
|
/** 筛选组件类型 */
|
|
66
72
|
export type FilterListType = Array<FilterItem>
|