From d974d1f4857640724b80e5b50b132c5a20e7bd49 Mon Sep 17 00:00:00 2001 From: Oliver <1069035666@qq.com> Date: Thu, 3 Mar 2022 00:12:06 +0000 Subject: [PATCH] =?UTF-8?q?BasicTable=20updateColumn=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Table/src/BasicTable.vue | 2 ++ src/components/Table/src/hooks/useColumns.ts | 37 ++++++++++++++++++-- src/components/Table/src/hooks/useTable.ts | 3 ++ src/components/Table/src/types/table.ts | 1 + 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/components/Table/src/BasicTable.vue b/src/components/Table/src/BasicTable.vue index c2af9a7..673ba19 100644 --- a/src/components/Table/src/BasicTable.vue +++ b/src/components/Table/src/BasicTable.vue @@ -211,6 +211,7 @@ getColumns, setCacheColumnsByField, setColumns, + updateColumn, getColumnsRef, getCacheColumns, } = useColumns(getProps, getPaginationInfo); @@ -334,6 +335,7 @@ redoHeight, setSelectedRowKeys, setColumns, + updateColumn, setLoading, getDataSource, getDelDataSource, diff --git a/src/components/Table/src/hooks/useColumns.ts b/src/components/Table/src/hooks/useColumns.ts index 57aba47..26a8da4 100644 --- a/src/components/Table/src/hooks/useColumns.ts +++ b/src/components/Table/src/hooks/useColumns.ts @@ -5,8 +5,10 @@ import { computed, Ref, ref, toRaw, unref, watch } from 'vue'; import { renderEditCell } from '../components/editable'; import { usePermission } from '/@/hooks/web/usePermission'; import { useI18n } from '/@/hooks/web/useI18n'; -import { isArray, isBoolean, isFunction, isMap, isString } from '/@/utils/is'; -import { cloneDeep, isEqual } from 'lodash-es'; +import { isObject, isArray, isBoolean, isFunction, isMap, isString } from '/@/utils/is'; +import { deepMerge } from '/@/utils'; +import { error } from '/@/utils/log'; +import { cloneDeep, isEqual, uniqBy } from 'lodash-es'; import { formatToDate } from '/@/utils/dateUtil'; import { ACTION_COLUMN_FLAG, DEFAULT_ALIGN, INDEX_COLUMN_FLAG, PAGE_SIZE } from '../const'; @@ -259,6 +261,36 @@ export function useColumns( } } + function updateColumn(data: Partial | Partial[]) { + let updateData: Partial[] = []; + if (isObject(data)) { + updateData.push(data as BasicColumn); + } + if (isArray(data)) { + updateData = [...data]; + } + const hasDataIndex = updateData.every( + (item) => Reflect.has(item, 'dataIndex') && item.dataIndex, + ); + if (!hasDataIndex) { + error('必须包含 dataIndex 字段。'); + return; + } + + const column: BasicColumn[] = []; + updateData.forEach((item) => { + columnsRef.value.forEach((val) => { + if (val.dataIndex === item.dataIndex) { + const newColumn = deepMerge(val, item); + column.push(newColumn as BasicColumn); + } else { + column.push(val); + } + }); + }); + columnsRef.value = uniqBy(column, 'dataIndex'); + } + function getColumns(opt?: GetColumnsParams) { const { ignoreIndex, ignoreAction, sort } = opt || {}; let columns = toRaw(unref(getColumnsRef)); @@ -284,6 +316,7 @@ export function useColumns( getCacheColumns, getColumns, setColumns, + updateColumn, getViewColumns, setCacheColumnsByField, }; diff --git a/src/components/Table/src/hooks/useTable.ts b/src/components/Table/src/hooks/useTable.ts index 022e5cf..f6e59ad 100644 --- a/src/components/Table/src/hooks/useTable.ts +++ b/src/components/Table/src/hooks/useTable.ts @@ -98,6 +98,9 @@ export function useTable(tableProps?: Props): [ setTableData: (values: any[]) => { return getTableInstance().setTableData(values); }, + updateColumn: (column: BasicColumn | BasicColumn[]) => { + getTableInstance().updateColumn(column); + }, setPagination: (info: Partial) => { return getTableInstance().setPagination(info); }, diff --git a/src/components/Table/src/types/table.ts b/src/components/Table/src/types/table.ts index a133e06..502095e 100644 --- a/src/components/Table/src/types/table.ts +++ b/src/components/Table/src/types/table.ts @@ -102,6 +102,7 @@ export interface TableActionType { findTableDataRecord: (rowKey: string | number) => Recordable | void; getColumns: (opt?: GetColumnsParams) => BasicColumn[]; setColumns: (columns: BasicColumn[] | string[]) => void; + updateColumn: (column: BasicColumn | BasicColumn[]) => void; getDataSource: () => T[]; getDelDataSource: () => T[]; getRawDataSource: () => T; -- Gitee