UNPKG

tav-ui

Version:
272 lines (267 loc) 8.35 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); var lodashEs = require('lodash-es'); require('../../../../locales/index2.js'); var dateUtil = require('../../../../utils/dateUtil2.js'); require('../../../../utils/index2.js'); var is = require('../../../../utils/is2.js'); var index = require('../components/editable/index2.js'); var _const = require('../const2.js'); var transfer = require('../../../../locales/transfer2.js'); var formatNumber = require('../../../../utils/formatNumber2.js'); function handleItem(item, ellipsis) { const { key, dataIndex, children } = item; item.align = item.align || _const.DEFAULT_ALIGN; if (ellipsis) { if (!key) { item.key = dataIndex; } if (!is.isBoolean(item.ellipsis)) { Object.assign(item, { ellipsis }); } } if (children && children.length) { handleChildren(children, !!ellipsis); } } function handleChildren(children, ellipsis) { if (!children) return; children.forEach((item) => { const { children: children2 } = item; handleItem(item, ellipsis); handleChildren(children2, ellipsis); }); } function handleIndexColumn(propsRef, getPaginationRef, columns) { const { showIndexColumn, indexColumnProps, isTreeTable } = vue.unref(propsRef); let pushIndexColumns = false; if (vue.unref(isTreeTable)) { return; } columns.forEach(() => { const indIndex = columns.findIndex((column) => column.flag === _const.INDEX_COLUMN_FLAG); if (showIndexColumn) { pushIndexColumns = indIndex === -1; } else if (!showIndexColumn && indIndex !== -1) { columns.splice(indIndex, 1); } }); if (!pushIndexColumns) return; const isFixedLeft = columns.some((item) => item.fixed === "left"); columns.unshift({ flag: _const.INDEX_COLUMN_FLAG, width: 50, title: transfer.tavI18n("Tav.tablePro.columns.1"), align: "center", customRender: ({ index }) => { const getPagination = vue.unref(getPaginationRef); if (is.isBoolean(getPagination)) { return `${index + 1}`; } const { current = 1, pageSize = _const.PAGE_SIZE } = getPagination; return ((current < 1 ? 1 : current) - 1) * pageSize + index + 1; }, ...isFixedLeft ? { fixed: "left" } : {}, ...indexColumnProps }); } function handleActionColumn(propsRef, columns) { const { actionColumn } = vue.unref(propsRef); if (!actionColumn) return; const hasIndex = columns.findIndex((column) => column.flag === _const.ACTION_COLUMN_FLAG); if (hasIndex === -1) { columns.push({ ...columns[hasIndex], fixed: "right", ...actionColumn, flag: _const.ACTION_COLUMN_FLAG }); } } function useColumns(propsRef, getPaginationRef) { const columnsRef = vue.ref(vue.unref(propsRef).columns); let cacheColumns = vue.unref(propsRef).columns; const getColumnsRef = vue.computed(() => { const columns = lodashEs.cloneDeep(vue.unref(columnsRef)); handleIndexColumn(propsRef, getPaginationRef, columns); handleActionColumn(propsRef, columns); if (!columns) { return []; } const { ellipsis } = vue.unref(propsRef); columns.forEach((item) => { const { customRender, slots } = item; handleItem(item, Reflect.has(item, "ellipsis") ? !!item.ellipsis : !!ellipsis && !customRender && !slots); }); return columns; }); function isIfShow(column) { const ifShow = column.ifShow; let isIfShow2 = true; if (is.isBoolean(ifShow)) { isIfShow2 = ifShow; } if (is.isFunction(ifShow)) { isIfShow2 = ifShow(column); } return isIfShow2; } const getViewColumns = vue.computed(() => { const viewColumns = sortFixedColumn(vue.unref(getColumnsRef)); const columns = lodashEs.cloneDeep(viewColumns); return columns.filter((column) => { return isIfShow(column); }).map((column) => { const { slots, dataIndex, customRender, format, edit, editRow, flag } = column; if (!slots || !slots?.title) { column.slots = { title: `header-${dataIndex}`, ...slots || {} }; column.customTitle = column.title; Reflect.deleteProperty(column, "title"); } const isDefaultAction = [_const.INDEX_COLUMN_FLAG, _const.ACTION_COLUMN_FLAG].includes(flag); if (!customRender && format && !edit && !isDefaultAction) { column.customRender = ({ text, record, index }) => { return formatCell(text, format, record, index); }; } if ((edit || editRow) && !isDefaultAction) { column.customRender = index.renderEditCell(column); } return column; }); }); vue.watch(() => vue.unref(propsRef).columns, (columns) => { columnsRef.value = columns; cacheColumns = columns?.filter((item) => !item.flag) ?? []; }); function setCacheColumnsByField(dataIndex, value) { if (!dataIndex || !value) { return; } cacheColumns.forEach((item) => { if (item.dataIndex === dataIndex) { Object.assign(item, value); return; } }); } function setColumns(columnList) { const columns = lodashEs.cloneDeep(columnList); if (!is.isArray(columns)) return; if (columns.length <= 0) { columnsRef.value = []; return; } const firstColumn = columns[0]; const cacheKeys = cacheColumns.map((item) => item.dataIndex); if (!is.isString(firstColumn)) { columnsRef.value = columns; } else { const columnKeys = columns; const newColumns = []; cacheColumns.forEach((item) => { newColumns.push({ ...item, defaultHidden: !columnKeys.includes(item.dataIndex?.toString() || item.key) }); }); if (!lodashEs.isEqual(cacheKeys, columns)) { newColumns.sort((prev, next) => { return columnKeys.indexOf(prev.dataIndex) - columnKeys.indexOf(next.dataIndex); }); } columnsRef.value = newColumns; } } function getColumns(opt) { const { ignoreIndex, ignoreAction, sort } = opt || {}; let columns = vue.toRaw(vue.unref(getColumnsRef)); if (ignoreIndex) { columns = columns.filter((item) => item.flag !== _const.INDEX_COLUMN_FLAG); } if (ignoreAction) { columns = columns.filter((item) => item.flag !== _const.ACTION_COLUMN_FLAG); } if (sort) { columns = sortFixedColumn(columns); } return columns; } function getCacheColumns() { return cacheColumns; } return { getColumnsRef, getCacheColumns, getColumns, setColumns, getViewColumns, setCacheColumnsByField }; } function sortFixedColumn(columns) { const fixedLeftColumns = []; const fixedRightColumns = []; const defColumns = []; for (const column of columns) { if (column.fixed === "left") { fixedLeftColumns.push(column); continue; } if (column.fixed === "right") { fixedRightColumns.push(column); continue; } defColumns.push(column); } return [...fixedLeftColumns, ...defColumns, ...fixedRightColumns].filter((item) => !item.defaultHidden); } function formatCell(text, format, record, index) { if (!format) { return text; } if (is.isFunction(format)) { return format(text, record, index); } try { const FORMAT_PREFIX = ["date|", "number|"]; const FORMAT_FN = [dateUtil.formatToDate, formatNumber.formatNumber]; const FORMAT_MAP = /* @__PURE__ */ new Map(); FORMAT_PREFIX.forEach((el, index2) => { FORMAT_MAP.set(el, FORMAT_FN[index2]); }); if (is.isString(format)) { const PREFIX = FORMAT_PREFIX.find((prefix) => format.startsWith(prefix)); if (PREFIX) { let dateFormat = format.replace(PREFIX, ""); if (PREFIX === "number|" && dateFormat === "") { dateFormat = "auto"; } if (PREFIX !== "number|" && !dateFormat || text == null) { return text; } const formatFn = FORMAT_MAP.get(PREFIX); if (!formatFn) return text; return formatFn(text, dateFormat); } } if (is.isMap(format)) { return format.get(text); } } catch (error) { return text; } } exports.formatCell = formatCell; exports.useColumns = useColumns; //# sourceMappingURL=useColumns2.js.map