UNPKG

@zhsz/cool-design-crud

Version:

156 lines (155 loc) 3.63 kB
import { h, toRaw, resolveComponent } from "vue"; import "./test.mjs"; import { useGlobal } from "../hooks/core.mjs"; import { isString, isFunction, isObject } from "./index.mjs"; import "@formily/core"; import "lodash-es"; import "../hooks/table.mjs"; import { parseExtensionComponent } from "./parse.mjs"; import temp from "./temp.mjs"; const regs = /* @__PURE__ */ new Map(); function parseNode(vnode, options) { var _a; const { scope, prop, slots, children, _data } = options || []; const global = useGlobal(); let comp = null; if (vnode.name.includes("slot-")) { const rn = slots[vnode.name]; if (rn) { return rn({ scope, prop, ..._data }); } else { return h("div", {}, `${vnode.name} is not found`); } } if (vnode.vm && !regs.get(vnode.name)) { temp.vue.component(vnode.name, { ...vnode.vm }); regs.set(vnode.name, { ...vnode.vm }); } if (isFunction(vnode.props)) { vnode.props = vnode.props({ scope, prop, ..._data }); } const props = { ...vnode.props, ..._data, prop, scope }; props.disabled = (_data == null ? void 0 : _data.isDisabled) || props.disabled; if (props && scope) { if (prop) { props.modelValue = scope[prop]; props["onUpdate:modelValue"] = function(val) { scope[prop] = val; }; } } if (vnode.vm) { comp = h(regs.get(vnode.name), props); } else { const isFunctionSlot = !((_a = global.render.functionSlots.exclude) == null ? void 0 : _a.includes(vnode.name)) && (vnode.functionSlot === void 0 ? true : vnode.functionSlot); comp = h(toRaw(resolveComponent(vnode.name)), props, isFunctionSlot ? () => children : children); } if (isFunction(vnode.ref)) { setTimeout(() => { var _a2; vnode.ref((_a2 = comp == null ? void 0 : comp.component) == null ? void 0 : _a2.exposed); }, 0); } return comp; } function renderNode(vnode, options) { var _a, _b, _c; const { item, scope, children, _data, render } = options || {}; if (!vnode) { return null; } if (vnode.__v_isVNode) { return vnode; } if (item) { if (item.component) { if (!item.component.props) { item.component.props = {}; } let placeholder = ""; switch ((_a = item.component) == null ? void 0 : _a.name) { case "t-input": placeholder = "请填写"; break; case "t-select": placeholder = "请选择"; break; } if (placeholder) { if (!item.component.props.placeholder) { item.component.props.placeholder = placeholder + item.label; } } } } if (vnode.vm) { if (!vnode.name) { vnode.name = ((_b = vnode.vm) == null ? void 0 : _b.name) || ((_c = vnode.vm) == null ? void 0 : _c.__hmrId); } return parseNode(vnode, options); } if (isString(vnode)) { if (render === "slot") { if (!vnode.includes("slot-")) { return vnode; } } return parseNode({ name: vnode }, options); } if (isFunction(vnode)) { return vnode({ scope, h, ..._data }); } if (isObject(vnode)) { if (vnode.name) { return parseNode(vnode, { ...options, children, ...parseExtensionComponent(vnode) }); } else { if (options.custom) { return options.custom(vnode); } return h("div", {}, "组件渲染失败,组件 name 不能为空"); } } } export { parseNode, renderNode };