|
|
|
|
@ -11,6 +11,7 @@ import { TableColumn } from '../types'
|
|
|
|
|
import { PropType, ref, watch, unref } from 'vue'
|
|
|
|
|
import { cloneDeep } from 'lodash-es'
|
|
|
|
|
import { DEFAULT_FILTER_COLUMN } from '@/constants'
|
|
|
|
|
import { VueDraggable } from 'vue-draggable-plus'
|
|
|
|
|
|
|
|
|
|
const modelValue = defineModel<boolean>()
|
|
|
|
|
|
|
|
|
|
@ -50,7 +51,7 @@ const confirm = () => {
|
|
|
|
|
const newColumns = cloneDeep(unref(settingColumns))?.map((item) => {
|
|
|
|
|
const fixed = unref(settingColumns)?.find((col) => col.field === item.field)?.fixed
|
|
|
|
|
item.hidden = !!!unref(checkColumns)?.includes(item.field)
|
|
|
|
|
item.fixed = fixed !== void 0 ? fixed : undefined
|
|
|
|
|
item.fixed = fixed ? fixed : undefined
|
|
|
|
|
return item
|
|
|
|
|
})
|
|
|
|
|
emit('confirm', [...unref(hiddenColumns), ...(newColumns || [])])
|
|
|
|
|
@ -58,21 +59,20 @@ const confirm = () => {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const restore = () => {
|
|
|
|
|
initColumns([...unref(hiddenColumns), ...(unref(oldColumns) || [])])
|
|
|
|
|
initColumns([...unref(hiddenColumns), ...(unref(oldColumns) || [])], true)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const initColumns = (columns: TableColumn[]) => {
|
|
|
|
|
const newColumns = cloneDeep(
|
|
|
|
|
columns?.filter((item) => {
|
|
|
|
|
const initColumns = (columns: TableColumn[], isReStore = false) => {
|
|
|
|
|
const newColumns = columns?.filter((item) => {
|
|
|
|
|
if (!isReStore) {
|
|
|
|
|
item.fixed = item.fixed !== void 0 ? item.fixed : undefined
|
|
|
|
|
return (item.type && !DEFAULT_FILTER_COLUMN.includes(item.type)) || !item.type
|
|
|
|
|
})
|
|
|
|
|
)
|
|
|
|
|
console.log(newColumns)
|
|
|
|
|
}
|
|
|
|
|
return (item.type && !DEFAULT_FILTER_COLUMN.includes(item.type)) || !item.type
|
|
|
|
|
})
|
|
|
|
|
if (!unref(oldColumns)) {
|
|
|
|
|
oldColumns.value = newColumns
|
|
|
|
|
oldColumns.value = cloneDeep(newColumns)
|
|
|
|
|
}
|
|
|
|
|
settingColumns.value = newColumns
|
|
|
|
|
settingColumns.value = cloneDeep(newColumns)
|
|
|
|
|
|
|
|
|
|
hiddenColumns.value = cloneDeep(
|
|
|
|
|
columns?.filter((item) => item.type && DEFAULT_FILTER_COLUMN.includes(item.type))
|
|
|
|
|
@ -93,7 +93,6 @@ const initColumns = (columns: TableColumn[]) => {
|
|
|
|
|
watch(
|
|
|
|
|
() => props.columns,
|
|
|
|
|
(columns) => {
|
|
|
|
|
console.log(columns)
|
|
|
|
|
initColumns(columns)
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
@ -104,40 +103,57 @@ watch(
|
|
|
|
|
|
|
|
|
|
<template>
|
|
|
|
|
<ElDrawer v-model="modelValue" title="列设置" size="350px">
|
|
|
|
|
<div class="flex items-center justify-between">
|
|
|
|
|
<div>
|
|
|
|
|
<div class="flex items-center justify-between">
|
|
|
|
|
<ElCheckbox
|
|
|
|
|
v-model="checkAll"
|
|
|
|
|
:indeterminate="isIndeterminate"
|
|
|
|
|
@change="handleCheckAllChange"
|
|
|
|
|
/>
|
|
|
|
|
<ElText class="ml-8px!">{{ checkColumns.length }} / {{ settingColumns?.length }}</ElText>
|
|
|
|
|
<div class="flex items-center justify-between">
|
|
|
|
|
<ElCheckbox
|
|
|
|
|
v-model="checkAll"
|
|
|
|
|
:indeterminate="isIndeterminate"
|
|
|
|
|
@change="handleCheckAllChange"
|
|
|
|
|
/>
|
|
|
|
|
<ElText class="ml-8px!">{{ checkColumns.length }} / {{ settingColumns?.length }}</ElText>
|
|
|
|
|
</div>
|
|
|
|
|
<ElText>固定 / 排序</ElText>
|
|
|
|
|
</div>
|
|
|
|
|
<ElText>固定 / 排序</ElText>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="settingColumns?.length">
|
|
|
|
|
<ElCheckboxGroup v-model="checkColumns" @change="handleCheckedColumnsChange">
|
|
|
|
|
<div
|
|
|
|
|
v-for="item in settingColumns"
|
|
|
|
|
:key="item.field"
|
|
|
|
|
class="flex items-center justify-between mt-12px"
|
|
|
|
|
<div v-if="settingColumns?.length">
|
|
|
|
|
<VueDraggable
|
|
|
|
|
v-model="settingColumns"
|
|
|
|
|
target=".el-checkbox-group"
|
|
|
|
|
handle=".handle"
|
|
|
|
|
:animation="150"
|
|
|
|
|
>
|
|
|
|
|
<ElCheckbox :label="item.field">
|
|
|
|
|
{{ item.label }}
|
|
|
|
|
</ElCheckbox>
|
|
|
|
|
<ElRadioGroup size="small" v-model="item.fixed">
|
|
|
|
|
<ElRadioButton label="left">
|
|
|
|
|
<Icon icon="ep:arrow-left" />
|
|
|
|
|
</ElRadioButton>
|
|
|
|
|
<ElRadioButton :label="undefined">
|
|
|
|
|
<Icon icon="ep:close" />
|
|
|
|
|
</ElRadioButton>
|
|
|
|
|
<ElRadioButton label="right">
|
|
|
|
|
<Icon icon="ep:arrow-right" />
|
|
|
|
|
</ElRadioButton>
|
|
|
|
|
</ElRadioGroup>
|
|
|
|
|
</div>
|
|
|
|
|
</ElCheckboxGroup>
|
|
|
|
|
<ElCheckboxGroup
|
|
|
|
|
ref="draggableWrap"
|
|
|
|
|
v-model="checkColumns"
|
|
|
|
|
@change="handleCheckedColumnsChange"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
v-for="item in settingColumns"
|
|
|
|
|
:key="item.field"
|
|
|
|
|
class="flex items-center justify-between mt-12px"
|
|
|
|
|
>
|
|
|
|
|
<ElCheckbox :label="item.field">
|
|
|
|
|
{{ item.label }}
|
|
|
|
|
</ElCheckbox>
|
|
|
|
|
<div class="flex items-center">
|
|
|
|
|
<ElRadioGroup size="small" v-model="item.fixed">
|
|
|
|
|
<ElRadioButton label="left">
|
|
|
|
|
<Icon icon="ep:arrow-left" />
|
|
|
|
|
</ElRadioButton>
|
|
|
|
|
<ElRadioButton :label="undefined">
|
|
|
|
|
<Icon icon="ep:close" />
|
|
|
|
|
</ElRadioButton>
|
|
|
|
|
<ElRadioButton label="right">
|
|
|
|
|
<Icon icon="ep:arrow-right" />
|
|
|
|
|
</ElRadioButton>
|
|
|
|
|
</ElRadioGroup>
|
|
|
|
|
|
|
|
|
|
<div class="ml-12px cursor-move handle"><Icon icon="ep:rank" /></div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</ElCheckboxGroup>
|
|
|
|
|
</VueDraggable>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<template #footer>
|
|
|
|
|
<div>
|
|
|
|
|
|