tav-ui
Version:
272 lines (267 loc) • 8.35 kB
JavaScript
;
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