UNPKG

tav-ui

Version:
1 lines 19.6 kB
{"version":3,"file":"useColumns2.mjs","sources":["../../../../../../../../packages/components/table/src/hooks/useColumns.ts"],"sourcesContent":["// import { usePermission } from \"/@/hooks/web/usePermission\";\nimport { computed, ref, toRaw, unref, watch } from 'vue'\nimport { cloneDeep, isEqual } from 'lodash-es'\nimport { tavI18n } from '@tav-ui/locales'\nimport { formatToDate } from '@tav-ui/utils/dateUtil'\nimport { type VueNode, formatNumber } from '@tav-ui/utils'\nimport { isArray, isBoolean, isFunction, isMap, isString } from '@tav-ui/utils/is'\nimport { renderEditCell } from '../components/editable'\nimport { ACTION_COLUMN_FLAG, DEFAULT_ALIGN, INDEX_COLUMN_FLAG, PAGE_SIZE } from '../const'\nimport type { ComputedRef, Ref } from 'vue'\nimport type { PaginationProps } from '../types/pagination'\nimport type {\n BasicColumn,\n BasicTableProps,\n CellFormat,\n GetColumnsParams,\n RowKeyType,\n} from '../types/table'\n\ntype Recordable<T = any> = Record<string, T>\n\nfunction handleItem(item: BasicColumn, ellipsis: boolean) {\n const { key, dataIndex, children } = item\n item.align = item.align || DEFAULT_ALIGN\n if (ellipsis) {\n if (!key) {\n item.key = dataIndex as RowKeyType\n }\n if (!isBoolean(item.ellipsis)) {\n Object.assign(item, {\n ellipsis,\n })\n }\n }\n if (children && children.length) {\n handleChildren(children, !!ellipsis)\n }\n}\n\nfunction handleChildren(children: BasicColumn[] | undefined, ellipsis: boolean) {\n if (!children) return\n children.forEach((item) => {\n const { children } = item\n handleItem(item, ellipsis)\n handleChildren(children, ellipsis)\n })\n}\n\nfunction handleIndexColumn(\n propsRef: ComputedRef<BasicTableProps>,\n getPaginationRef: ComputedRef<boolean | PaginationProps>,\n columns: BasicColumn[]\n) {\n const { showIndexColumn, indexColumnProps, isTreeTable } = unref(propsRef)\n\n let pushIndexColumns = false\n if (unref(isTreeTable)) {\n return\n }\n columns.forEach(() => {\n const indIndex = columns.findIndex((column) => column.flag === INDEX_COLUMN_FLAG)\n if (showIndexColumn) {\n pushIndexColumns = indIndex === -1\n } else if (!showIndexColumn && indIndex !== -1) {\n columns.splice(indIndex, 1)\n }\n })\n\n if (!pushIndexColumns) return\n\n const isFixedLeft = columns.some((item) => item.fixed === 'left')\n\n columns.unshift({\n flag: INDEX_COLUMN_FLAG,\n width: 50,\n title: tavI18n('Tav.tablePro.columns.1'),\n align: 'center',\n customRender: ({ index }) => {\n const getPagination = unref(getPaginationRef)\n if (isBoolean(getPagination)) {\n return `${index + 1}`\n }\n const { current = 1, pageSize = PAGE_SIZE } = getPagination\n return ((current < 1 ? 1 : current) - 1) * pageSize + index + 1\n },\n ...(isFixedLeft\n ? {\n fixed: 'left',\n }\n : {}),\n ...indexColumnProps,\n })\n}\n\nfunction handleActionColumn(propsRef: ComputedRef<BasicTableProps>, columns: BasicColumn[]) {\n const { actionColumn } = unref(propsRef)\n if (!actionColumn) return\n\n const hasIndex = columns.findIndex((column) => column.flag === ACTION_COLUMN_FLAG)\n if (hasIndex === -1) {\n columns.push({\n ...columns[hasIndex],\n fixed: 'right',\n ...actionColumn,\n flag: ACTION_COLUMN_FLAG,\n })\n }\n}\n\nexport function useColumns(\n propsRef: ComputedRef<BasicTableProps>,\n getPaginationRef: ComputedRef<boolean | PaginationProps>\n) {\n const columnsRef = ref(unref(propsRef).columns) as unknown as Ref<BasicColumn[]>\n let cacheColumns = unref(propsRef).columns\n\n const getColumnsRef = computed(() => {\n const columns = cloneDeep(unref(columnsRef))\n\n handleIndexColumn(propsRef, getPaginationRef, columns)\n handleActionColumn(propsRef, columns)\n if (!columns) {\n return []\n }\n const { ellipsis } = unref(propsRef)\n\n columns.forEach((item) => {\n const { customRender, slots } = item\n\n handleItem(\n item,\n Reflect.has(item, 'ellipsis') ? !!item.ellipsis : !!ellipsis && !customRender && !slots\n )\n })\n return columns\n })\n\n function isIfShow(column: BasicColumn): boolean {\n const ifShow = column.ifShow\n\n let isIfShow = true\n\n if (isBoolean(ifShow)) {\n isIfShow = ifShow\n }\n if (isFunction(ifShow)) {\n isIfShow = ifShow(column)\n }\n return isIfShow\n }\n // const { hasPermission } = usePermission();\n\n const getViewColumns = computed(() => {\n const viewColumns = sortFixedColumn(unref(getColumnsRef))\n\n const columns = cloneDeep(viewColumns)\n return columns\n .filter((column) => {\n // return hasPermission(column.auth) && isIfShow(column);\n return isIfShow(column)\n })\n .map((column) => {\n const { slots, dataIndex, customRender, format, edit, editRow, flag } = column\n\n if (!slots || !slots?.title) {\n column.slots = { title: `header-${dataIndex}`, ...(slots || {}) }\n column.customTitle = column.title as VueNode\n Reflect.deleteProperty(column, 'title')\n }\n const isDefaultAction = [INDEX_COLUMN_FLAG, ACTION_COLUMN_FLAG].includes(flag!)\n if (!customRender && format && !edit && !isDefaultAction) {\n column.customRender = ({ text, record, index }) => {\n return formatCell(text, format, record, index)\n }\n }\n\n // edit table\n if ((edit || editRow) && !isDefaultAction) {\n column.customRender = renderEditCell(column)\n }\n return column\n })\n })\n\n watch(\n () => unref(propsRef).columns,\n (columns) => {\n columnsRef.value = columns\n cacheColumns = columns?.filter((item) => !item.flag) ?? []\n }\n )\n\n function setCacheColumnsByField(dataIndex: string | undefined, value: Partial<BasicColumn>) {\n if (!dataIndex || !value) {\n return\n }\n cacheColumns.forEach((item) => {\n if (item.dataIndex === dataIndex) {\n Object.assign(item, value)\n return\n }\n })\n }\n /**\n * set columns\n * @param columnList key|column\n */\n function setColumns(columnList: Partial<BasicColumn>[] | string[]) {\n const columns = cloneDeep(columnList)\n if (!isArray(columns)) return\n\n if (columns.length <= 0) {\n columnsRef.value = []\n return\n }\n\n const firstColumn = columns[0]\n\n const cacheKeys = cacheColumns.map((item) => item.dataIndex)\n\n if (!isString(firstColumn)) {\n columnsRef.value = columns as BasicColumn[]\n } else {\n const columnKeys = columns as string[]\n const newColumns: BasicColumn[] = []\n cacheColumns.forEach((item) => {\n newColumns.push({\n ...item,\n defaultHidden: !columnKeys.includes(item.dataIndex?.toString() || (item.key as string)),\n })\n })\n // Sort according to another array\n if (!isEqual(cacheKeys, columns)) {\n newColumns.sort((prev, next) => {\n return (\n columnKeys.indexOf(prev.dataIndex as string) -\n columnKeys.indexOf(next.dataIndex as string)\n )\n })\n }\n columnsRef.value = newColumns\n }\n }\n\n function getColumns(opt?: GetColumnsParams) {\n const { ignoreIndex, ignoreAction, sort } = opt || {}\n let columns = toRaw(unref(getColumnsRef))\n if (ignoreIndex) {\n columns = columns.filter((item) => item.flag !== INDEX_COLUMN_FLAG)\n }\n if (ignoreAction) {\n columns = columns.filter((item) => item.flag !== ACTION_COLUMN_FLAG)\n }\n\n if (sort) {\n columns = sortFixedColumn(columns)\n }\n\n return columns\n }\n function getCacheColumns() {\n return cacheColumns\n }\n\n return {\n getColumnsRef,\n getCacheColumns,\n getColumns,\n setColumns,\n getViewColumns,\n setCacheColumnsByField,\n }\n}\n\nfunction sortFixedColumn(columns: BasicColumn[]) {\n const fixedLeftColumns: BasicColumn[] = []\n const fixedRightColumns: BasicColumn[] = []\n const defColumns: BasicColumn[] = []\n for (const column of columns) {\n if (column.fixed === 'left') {\n fixedLeftColumns.push(column)\n continue\n }\n if (column.fixed === 'right') {\n fixedRightColumns.push(column)\n continue\n }\n defColumns.push(column)\n }\n return [...fixedLeftColumns, ...defColumns, ...fixedRightColumns].filter(\n (item) => !item.defaultHidden\n )\n}\n\n// format cell\nexport function formatCell(text: string, format: CellFormat, record: Recordable, index: number) {\n if (!format) {\n return text\n }\n\n // custom function\n if (isFunction(format)) {\n return format(text, record, index)\n }\n\n try {\n //#region define prefix\n const FORMAT_PREFIX = ['date|', 'number|'] as const\n const FORMAT_FN = [formatToDate, formatNumber] as const\n type MapKeyType = typeof FORMAT_PREFIX[number]\n\n const FORMAT_MAP = new Map<MapKeyType, (...args: any[]) => any>()\n FORMAT_PREFIX.forEach((el, index) => {\n FORMAT_MAP.set(el, FORMAT_FN[index])\n })\n //#endregion\n\n if (isString(format)) {\n const PREFIX = FORMAT_PREFIX.find((prefix) => format.startsWith(prefix))\n if (PREFIX) {\n let dateFormat: string | undefined = format.replace(PREFIX, '')\n /**\n * 表格的数值格式化全局修改\n * 数值格式化方法的格式 取默认值\n */\n if (PREFIX === 'number|' && dateFormat === '') {\n dateFormat = 'auto'\n }\n\n if ((PREFIX !== 'number|' && !dateFormat) || text == null) {\n return text\n }\n const formatFn = FORMAT_MAP.get(PREFIX)\n if (!formatFn) return text\n return formatFn(text, dateFormat)\n }\n }\n\n // Map\n if (isMap(format)) {\n return format.get(text)\n }\n } catch (error) {\n return text\n }\n}\n"],"names":[],"mappings":"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"}