UNPKG

@zhsz/cool-design-crud

Version:

285 lines (284 loc) 8.32 kB
import { h, createVNode, withDirectives, vShow, mergeProps, isVNode, resolveComponent } from "vue"; import "./test.mjs"; import { useTools, useCore } from "../hooks/core.mjs"; import { isArray, isObject, isString, isBoolean, isFunction } from "./index.mjs"; import "@formily/core"; import { omit } from "lodash-es"; import "../hooks/table.mjs"; import { Tag, Dropdown, Button, DropdownMenu, DropdownItem } from "tdesign-vue-next"; import { EllipsisIcon } from "tdesign-icons-vue-next"; function _isSlot(s) { return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s); } function parseFunctionField(value, { scope }, defaultValue) { if (isBoolean(value)) { return value; } else if (isFunction(value)) { return value({ scope }); } return defaultValue; } function calculateProperties(properties, form) { for (const item in properties) { const element = properties[item]; if (isObject(element) && !isArray(element) && item !== "cProps") { calculateProperties(element, form); } } if (properties.hidden !== void 0) properties._hidden = parseFunctionField(properties.hidden, { scope: form }, false); if (properties.filter !== void 0) properties._filter = parseFunctionField(properties.filter, { scope: form }, false); if (properties.visible !== void 0) properties._visible = parseFunctionField(properties.visible, { scope: form }, true); if (properties.required !== void 0) properties._required = parseFunctionField(properties.required, { scope: form }, false); if (properties == null ? void 0 : properties.properties) { calculateProperties(properties.properties, form); } if (properties == null ? void 0 : properties.items) { calculateProperties(properties.items, form); } } function parseTableDict(value, data) { let list = []; let isText = false; let separator = ","; if (data == null ? void 0 : data.options) { list = data.options; isText = data.text; separator = data.separator; } else { list = data; } const values = isArray(value) ? value : [value]; const arr = values.map((v) => { const d = list.find((d2) => d2.value === v); if (d) { return isText ? d.label : h(Tag, { ...d, style: { margin: "2px" } }, { default: () => d.label }); } else { return v || "-"; } }); return isText ? arr.join(separator) : arr; } function parseTableOpButtons({ buttons, length = 3 }, { scope }) { const { getValue } = useTools(); const list = (getValue(buttons, { scope }) || ["edit", "delete"]).filter((item) => !["", void 0, null].includes(item)); if (list.length <= length) { return list.map((vnode) => { return generateButtons(vnode, scope); }); } else { return generateDropDown(list, scope); } } function generateDropDown(list, scope) { let _slot; const { crud } = useCore(); return createVNode(Dropdown, { "trigger": "click" }, { default: () => [createVNode(Button, { "theme": "default", "variant": "text", "shape": "square" }, { default: () => [createVNode(EllipsisIcon, { "size": "16" }, null)] }), createVNode(DropdownMenu, null, _isSlot(_slot = list.map((vnode) => { if (vnode === "info") { return withDirectives(createVNode(DropdownItem, { "onClick": () => { crud.rowInfo(scope.row); } }, { default: () => { var _a; return [(_a = crud.dict.label) == null ? void 0 : _a.info]; } }), [[vShow, crud.getPermission("info")]]); } else if (vnode === "edit") { return withDirectives(createVNode(DropdownItem, { "onClick": () => { crud.rowEdit(scope.row); } }, { default: () => { var _a; return [(_a = crud.dict.label) == null ? void 0 : _a.update]; } }), [[vShow, crud.getPermission("update")]]); } else if (vnode === "delete") { return withDirectives(createVNode(DropdownItem, { "theme": "error", "onClick": () => { crud.rowDelete(scope.row); } }, { default: () => { var _a; return [(_a = crud.dict.label) == null ? void 0 : _a.delete]; } }), [[vShow, crud.getPermission("delete")]]); } else { return !vnode.hidden && createVNode(DropdownItem, mergeProps(omit(vnode == null ? void 0 : vnode.dropdownProps, ["onClick", "hidden", "label"]), { "onClick": () => { vnode.onClick({ scope }); } }), { default: () => [vnode.label] }); } })) ? _slot : { default: () => [_slot] })] }); } function generateButtons(vnode, scope) { var _a, _b, _c, _d; useTools(); const { crud } = useCore(); if (vnode === "info") { return withDirectives(createVNode(Button, { "size": "small", "onClick": () => { crud.rowInfo(scope.row); } }, { default: () => { var _a2; return [(_a2 = crud.dict.label) == null ? void 0 : _a2.info]; } }), [[vShow, crud.getPermission("info")]]); } else if (vnode === "edit") { return withDirectives(createVNode(Button, { "theme": "primary", "size": "small", "onClick": () => { crud.rowEdit(scope.row); } }, { default: () => { var _a2; return [(_a2 = crud.dict.label) == null ? void 0 : _a2.update]; } }), [[vShow, crud.getPermission("update")]]); } else if (vnode === "delete") { return withDirectives(createVNode(Button, { "theme": "danger", "size": "small", "onClick": () => { crud.rowDelete(scope.row); } }, { default: () => { var _a2; return [(_a2 = crud.dict.label) == null ? void 0 : _a2.delete]; } }), [[vShow, crud.getPermission("delete")]]); } else { return !vnode.hidden && createVNode(Button, mergeProps(omit(vnode.buttonProps, ["variant", "onClick", "hidden", "type", "theme", "size", "label"]), { "variant": ((_a = vnode == null ? void 0 : vnode.buttonProps) == null ? void 0 : _a.variant) || "base", "type": (_b = vnode == null ? void 0 : vnode.buttonProps) == null ? void 0 : _b.type, "size": ((_c = vnode == null ? void 0 : vnode.buttonProps) == null ? void 0 : _c.size) || "small", "theme": (_d = vnode == null ? void 0 : vnode.buttonProps) == null ? void 0 : _d.theme, "onClick": () => { vnode.onClick({ scope }); } }), { default: () => [vnode.label] }); } } function parseExtensionComponent(vnode) { const { getValue } = useTools(); if (["t-select", "t-radio-group", "t-checkbox-group"].includes(vnode.name)) { const list = getValue(vnode.options) || []; const children = createVNode("div", null, [list.map((e, i) => { if (vnode.name === "t-select") { let label, value; if (isString(e)) { label = value = e; } else if (isObject(e)) { label = e.label; value = e.value; } else { return h("div", {}, `组件渲染失败,options 参数错误`); } return createVNode(resolveComponent("t-option"), mergeProps({ "key": i, "label": label, "value": value }, e.props), null); } else if (vnode.name === "t-radio-group") { return createVNode(resolveComponent("t-radio"), mergeProps({ "key": i, "label": e.value }, e.props), { default: () => [e.label] }); } else if (vnode.name === "t-checkbox-group") { return createVNode(resolveComponent("t-checkbox"), mergeProps({ "key": i, "label": e.value }, e.props), { default: () => [e.label] }); } else { return null; } })]); return { children }; } else { return {}; } } export { calculateProperties, parseExtensionComponent, parseFunctionField, parseTableDict, parseTableOpButtons };