@zhsz/cool-design-crud
Version:
156 lines (155 loc) • 3.63 kB
JavaScript
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
};