element-plus|element-plus el-table 动态设置列显示隐藏

import { ref, Ref, onMounted, nextTick, unref } from 'vue'; import _ from 'lodash'; import * as DbCacheUtils from '@/utils/DbCacheUtils'; import type { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults'; import { setup as useRx } from './RxBusMixins'; interface MyProps { table: Ref; /** 是否自动加载配置 */ auto?: boolean; cacheKey?: string; }interface MyOption { label: string; prop: string; is_check: boolean; }interface TableStore { commit(name: string, ...args); states: { _columns: Ref; }; updateColumns(); }function SaveData(key: string, options: MyOption[]) { return DbCacheUtils.SetValue(key, JSON.stringify(options)); }async function GetData(key: string): Promise { const json = await DbCacheUtils.GetValue(key); if (!json) return null; return JSON.parse(json); }/** * @param props * @returns */ export function useTableColumns(props: MyProps) { const options = ref([]); const rxHub = useRx(); function GetCacheKey() { return props.cacheKey || 'table'; }let storeColumns: TableColumnCtx[]; /** * 根据配置初始化列 */ async function InitShowColumns() { const table = props.table.value; const store: TableStore = table.store; const array = unref(store.states._columns); storeColumns = _.clone(array); const list = await GetData(GetCacheKey()); if (list != null && list.length > 0) { options.value = https://www.it610.com/article/list; InitConfig(); } else { const array = unref(store.states._columns); options.value = array.filter(t => t.property != null).map(t => ({ prop: t.property, label: t.label, is_check: true, })); }// console.log('table store', table.store); }onMounted(async () => { await nextTick(); if (props.auto !== false) { InitShowColumns(); } }); /** * 弹出列设置 */ function ShowColumnsConfig() { rxHub.emit('ShowTableColumnDialog', { options: options.value, callback: async (list) => { options.value = https://www.it610.com/article/list; InitConfig(); } }); }async function InitConfig() { const table = props.table.value; const store: TableStore = table.store; const array = unref(store.states._columns); options.value.forEach(option => { if (option.is_check === false) { const col = array.find(t => t.property === option.prop); if (col != null) { store.commit('removeColumn', col, null); } } else { const col = storeColumns.find(t => t.property === option.prop); if (!array.some(t => t.property === option.prop)) { store.commit('insertColumn', col, null); } } }); await nextTick(); store.updateColumns(); await SaveData(GetCacheKey(), options.value); }return { InitShowColumns, ShowColumnsConfig, }; }

    推荐阅读