@arco-vue-pro-components/pro-components
Version:
基于@arco-design/web-vue组件的高级组件,包括pro-table
476 lines (475 loc) • 13.1 kB
JavaScript
;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
var vue = require("vue");
var webVue = require("@arco-design/web-vue");
var getValueByPath = require("../../_utils/get-value-by-path.js");
var is = require("../../_utils/is.js");
var index = require("../default-render/index.js");
var index$2 = require("../status/index.js");
var index$1 = require("../my-tool-tip/index.js");
function _isSlot(s) {
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !vue.isVNode(s);
}
function useActionType(actionRef, action, props) {
const userAction = {
pageInfo: action.pageInfo,
reload: async (resetPageIndex) => {
if (resetPageIndex) {
await props.onCleanSelected();
}
action == null ? void 0 : action.reload();
},
getSelected: props.getSelected,
reloadAndRest: async () => {
props.onCleanSelected();
await action.setPageInfo({
current: 1
});
await (action == null ? void 0 : action.reload());
},
reset: async () => {
var _a;
await props.resetAll();
await ((_a = action == null ? void 0 : action.reset) == null ? void 0 : _a.call(action));
await (action == null ? void 0 : action.reload());
},
fullScreen: () => props.fullScreen(),
getPopupContainer: () => action == null ? void 0 : action.getPopupContainer(),
clearSelected: () => props.onCleanSelected(),
setPageInfo: (rest) => action.setPageInfo(rest)
};
actionRef.value = userAction;
}
const genColumnKey = (key, index2) => {
if (key) {
return Array.isArray(key) ? key.join("-") : key.toString();
}
return `${index2}`;
};
const reduceWidth = (width) => {
if (width === void 0) {
return width;
}
if (typeof width === "string") {
if (!width.includes("calc")) {
return `calc(100% - ${width})`;
}
return width;
}
if (typeof width === "number") {
return width - 32;
}
return width;
};
const genEllipsis = (dom, item, text) => {
if (!item.ellipsis) {
return dom;
}
return vue.createVNode(index$1, {
"position": "bottom",
"content": text
}, {
default: () => [vue.createVNode("span", null, [dom])]
});
};
const genCopyable = (dom, item) => {
if (item.copyable || item.ellipsis) {
return vue.createVNode(webVue.TypographyParagraph, {
"style": {
width: reduceWidth(item.width),
margin: 0,
padding: 0
},
"copyable": item.copyable,
"ellipsis": item.ellipsis
}, _isSlot(dom) ? dom : {
default: () => [dom]
});
}
return dom;
};
function genProColumnToColumn(props) {
const {
columns,
type,
columnEmptyText,
action,
slots,
parentColumnKey
} = props;
return columns.map((item, columnsIndex) => {
const {
key,
dataIndex,
valueType = "text",
valueEnum,
title,
children
} = item;
const columnKey = genColumnKey(key || (dataIndex == null ? void 0 : dataIndex.toString()), [parentColumnKey, columnsIndex].filter(Boolean).join("-"));
const noNeedPro = !valueType && !valueEnum && !children;
if (noNeedPro) {
return {
...item,
key: columnKey,
index: columnsIndex
};
}
const config = {
fixed: item.fixed
};
const tempColumns = {
ellipsis: false,
...item,
index: columnsIndex,
key: columnKey,
title: title && typeof title === "function" ? title(item, "table") : title,
fixed: config.fixed,
sortable: item.sortable || (item.sorter ? {
sortDirections: ["ascend", "descend"],
defaultSortOrder: item.defaultSortOrder
} : void 0),
filterable: item.filterable || (item.filters === true && item.valueEnum ? {
filters: parsingValueEnumToArray(ObjToMap(runFunction(valueEnum, void 0))).filter((valueItem) => valueItem && valueItem.value !== "all"),
multiple: true,
defaultFilteredValue: item.defaultFilteredValue,
filter: item.onFilter === true ? (value, record) => {
return value.includes(record[item.dataIndex]);
} : item.onFilter
} : void 0),
width: item.width || (item.fixed ? 200 : void 0),
children: item.children ? genProColumnToColumn({
...props,
columns: item == null ? void 0 : item.children,
parentColumnKey: columnKey
}) : void 0,
render: (data) => columRender({
item,
record: data.record,
rowIndex: data.rowIndex,
columnEmptyText,
action,
slots,
columnKey
})
};
return omitUndefinedAndEmptyArr(tempColumns);
}).filter((item) => !item.hideInTable);
}
function getType(obj) {
const type = Object.prototype.toString.call(obj).match(/^\[object (.*)\]$/)[1].toLowerCase();
if (type === "string" && typeof obj === "object")
return "object";
if (obj === null)
return "null";
if (obj === void 0)
return "undefined";
return type;
}
const ObjToMap = (value) => {
if (!value) {
return value;
}
if (getType(value) === "map") {
return value;
}
return new Map(Object.entries(value));
};
const parsingText = (text, valueEnum, pure) => {
if (!valueEnum) {
return text;
}
if (!valueEnum.has(text) && !valueEnum.has(`${text}`)) {
return text;
}
const domText = valueEnum.get(text) || valueEnum.get(`${text}`);
if (domText.status) {
if (pure) {
return domText.text;
}
const {
status
} = domText;
const Status = index$2[status || "Default"];
if (Status) {
return Status({
text: domText.text
});
}
}
return domText.text || domText;
};
const checkUndefinedOrNull = (value) => value !== void 0 && value !== null;
const columRender = ({
item,
record,
rowIndex,
columnEmptyText,
action,
slots,
columnKey
}) => {
var _a;
if (!action.value) {
return null;
}
const text = (_a = getValueByPath.getValueByPath(record, item.dataIndex)) != null ? _a : "";
const {
renderText = (val) => val,
valueEnum = {}
} = item;
const renderTextStr = renderText(parsingText(text, ObjToMap(valueEnum)), {
record,
rowIndex,
action: action.value
});
const textDom = index["default"](renderTextStr, item.valueType || "text", rowIndex, record, columnEmptyText, item, columnKey);
const dom = genEllipsis(genCopyable(textDom, item), item, renderText(parsingText(text, ObjToMap(valueEnum), true), {
record,
rowIndex,
action: action.value
}));
const data = {
dom,
column: item,
record,
rowIndex,
action: action.value
};
if (item.render) {
const renderDom = item.render(data);
if (renderDom && item.valueType === "option" && Array.isArray(renderDom)) {
return vue.createVNode(webVue.Space, {
"class": "pro-table-options"
}, {
split: () => vue.createVNode(webVue.Divider, {
"direction": "vertical"
}, null),
default: () => renderDom.map((optionDom) => optionDom)
});
}
return renderDom;
}
if (!item.slotName && (item.valueType === "index" || item.valueType === "indexBorder")) {
return slots.index(data);
}
if (item.slotName && slots[item.slotName]) {
return slots[item.slotName](data);
}
return checkUndefinedOrNull(dom) ? dom : null;
};
const omitUndefinedAndEmptyArr = (obj) => {
const newObj = {};
Object.keys(obj || {}).forEach((key) => {
var _a;
if (Array.isArray(obj[key]) && ((_a = obj[key]) == null ? void 0 : _a.length) === 0) {
return;
}
if (obj[key] === void 0) {
return;
}
newObj[key] = obj[key];
});
return newObj;
};
function mergePagination(pagination, pageInfo, setPageInfo, emit) {
if (pagination === false) {
return false;
}
const {
current,
pageSize
} = pageInfo.value;
const defaultPagination = typeof pagination === "object" ? pagination : {};
return {
showTotal: true,
showJumper: true,
showPageSize: true,
hideOnSinglePage: false,
pageSizeOptions: [5, 10, 20, 30, 40, 50],
...defaultPagination,
...pageInfo.value,
onChange: (page) => {
if (current !== page) {
setPageInfo({
current: page
});
}
emit("pageChange", page);
},
onPageSizeChange: (newPageSize) => {
if (newPageSize !== pageSize) {
setPageInfo({
pageSize: newPageSize
});
}
emit("pageSizeChange", newPageSize);
}
};
}
const columnFixedSort = (a, b) => {
const {
fixed: aFixed
} = a;
const {
fixed: bFixed
} = b;
if (aFixed === "left" && bFixed !== "left" || bFixed === "right" && aFixed !== "right") {
return -2;
}
if (bFixed === "left" && aFixed !== "left" || aFixed === "right" && bFixed !== "right") {
return 2;
}
return 0;
};
const columnSortOrderSort = (a, b) => {
return a.sortOrder - b.sortOrder;
};
function loopFilter(column, parentFixed = void 0, columnsMap = {}, isTable = true) {
return column.map((item) => {
const config = columnsMap.value[item.key] || {
fixed: item.fixed
};
if (isTable && config && config.show === false) {
return false;
}
const fixed = config.fixed || parentFixed;
const sortOrder = config.order === void 0 ? item.index : config.order;
if (item.children) {
return {
...item,
fixed,
sortOrder,
children: loopFilter(item.children, fixed, columnsMap, isTable)
};
}
return {
...item,
sortOrder,
fixed
};
}).filter(Boolean).sort(columnFixedSort).sort(columnSortOrderSort);
}
function formatFormFields(data) {
if (!is.isObject(data) || !Object.keys(data).length) {
return {};
}
const fields = {};
Object.keys(data).forEach((key) => {
fields[key] = {
value: data[key]
};
});
return fields;
}
const setFields = (defaultFormData, form) => {
const fieldsData = formatFormFields(defaultFormData);
form.setFields(fieldsData);
};
const parsingValueEnumToArray = (valueEnum = /* @__PURE__ */ new Map()) => {
const enumArray = [];
valueEnum.forEach((_, key) => {
if (!valueEnum.has(key) && !valueEnum.has(`${key}`)) {
return;
}
const value = valueEnum.get(key) || valueEnum.get(`${key}`);
if (!value) {
return;
}
if (typeof value === "object" && (value == null ? void 0 : value.text)) {
enumArray.push({
text: value == null ? void 0 : value.text,
label: value == null ? void 0 : value.text,
value: key
});
return;
}
enumArray.push({
text: value || "",
label: value || "",
value: key
});
});
return enumArray;
};
function runFunction(valueEnum, ...rest) {
if (typeof valueEnum === "function") {
return valueEnum(...rest);
}
return valueEnum;
}
function flattenChildren(arr = [], rowKey) {
if (!is.isArray(arr) || !arr.length) {
return {};
}
let data = {};
for (let item of arr) {
if (!item || item[rowKey] == void 0) {
continue;
}
data[item[rowKey]] = item;
if (!is.isArray(item.children) || !item.children.length) {
continue;
}
data = {
...data,
...flattenChildren(item.children, rowKey)
};
}
return data;
}
typeof process !== "undefined" && process.versions != null && process.versions.node != null;
function getArrDiff(distArr, ...rest) {
if (!distArr || !is.isArray(distArr) || !distArr.length) {
return [];
}
let restArr = [];
for (let i = 0; i < rest.length; i++) {
restArr.push(...rest[i]);
}
const data = [...new Set(restArr)];
return distArr.filter((item) => !data.includes(item));
}
function deepClone(obj, map = /* @__PURE__ */ new WeakMap()) {
if (typeof obj !== "object" || obj === null) {
return obj;
}
if (obj instanceof Date) {
return new Date(obj);
}
if (obj instanceof RegExp) {
return new RegExp(obj);
}
if (map.has(obj)) {
return map.get(obj);
}
if (vue.isVNode(obj)) {
return vue.cloneVNode(obj);
}
let cloneObj = new obj.constructor();
map.set(obj, cloneObj);
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
cloneObj[key] = deepClone(obj[key], map);
}
}
return cloneObj;
}
exports.ObjToMap = ObjToMap;
exports.checkUndefinedOrNull = checkUndefinedOrNull;
exports.columnFixedSort = columnFixedSort;
exports.columnSortOrderSort = columnSortOrderSort;
exports.deepClone = deepClone;
exports.flattenChildren = flattenChildren;
exports.formatFormFields = formatFormFields;
exports.genColumnKey = genColumnKey;
exports.genProColumnToColumn = genProColumnToColumn;
exports.getArrDiff = getArrDiff;
exports.loopFilter = loopFilter;
exports.mergePagination = mergePagination;
exports.parsingText = parsingText;
exports.parsingValueEnumToArray = parsingValueEnumToArray;
exports.reduceWidth = reduceWidth;
exports.runFunction = runFunction;
exports.setFields = setFields;
exports.useActionType = useActionType;