Files
pig-farm-controller-fe/node_modules/element-plus/es/components/cascader-panel/src/node2.mjs
2025-09-19 14:25:20 +08:00

184 lines
7.1 KiB
JavaScript

import { defineComponent, inject, computed, openBlock, createElementBlock, unref, normalizeClass, createCommentVNode, createBlock, withModifiers, withCtx, createElementVNode, createVNode, Fragment } from 'vue';
import { ElCheckbox } from '../../checkbox/index.mjs';
import { ElRadio } from '../../radio/index.mjs';
import { ElIcon } from '../../icon/index.mjs';
import { Check, Loading, ArrowRight } from '@element-plus/icons-vue';
import NodeContent from './node-content.mjs';
import { CASCADER_PANEL_INJECTION_KEY } from './types.mjs';
import _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';
import { useNamespace } from '../../../hooks/use-namespace/index.mjs';
const __default__ = defineComponent({
name: "ElCascaderNode"
});
const _sfc_main = /* @__PURE__ */ defineComponent({
...__default__,
props: {
node: {
type: Object,
required: true
},
menuId: String
},
emits: ["expand"],
setup(__props, { emit }) {
const props = __props;
const panel = inject(CASCADER_PANEL_INJECTION_KEY);
const ns = useNamespace("cascader-node");
const isHoverMenu = computed(() => panel.isHoverMenu);
const multiple = computed(() => panel.config.multiple);
const checkStrictly = computed(() => panel.config.checkStrictly);
const showPrefix = computed(() => panel.config.showPrefix);
const checkedNodeId = computed(() => {
var _a;
return (_a = panel.checkedNodes[0]) == null ? void 0 : _a.uid;
});
const isDisabled = computed(() => props.node.isDisabled);
const isLeaf = computed(() => props.node.isLeaf);
const expandable = computed(() => checkStrictly.value && !isLeaf.value || !isDisabled.value);
const inExpandingPath = computed(() => isInPath(panel.expandingNode));
const inCheckedPath = computed(() => checkStrictly.value && panel.checkedNodes.some(isInPath));
const isInPath = (node) => {
var _a;
const { level, uid } = props.node;
return ((_a = node == null ? void 0 : node.pathNodes[level - 1]) == null ? void 0 : _a.uid) === uid;
};
const doExpand = () => {
if (inExpandingPath.value)
return;
panel.expandNode(props.node);
};
const doCheck = (checked) => {
const { node } = props;
if (checked === node.checked)
return;
panel.handleCheckChange(node, checked);
};
const doLoad = () => {
panel.lazyLoad(props.node, () => {
if (!isLeaf.value)
doExpand();
});
};
const handleHoverExpand = (e) => {
if (!isHoverMenu.value)
return;
handleExpand();
!isLeaf.value && emit("expand", e);
};
const handleExpand = () => {
const { node } = props;
if (!expandable.value || node.loading)
return;
node.loaded ? doExpand() : doLoad();
};
const handleClick = () => {
if (isLeaf.value && !isDisabled.value && !checkStrictly.value && !multiple.value) {
handleCheck(true);
} else if ((panel.config.checkOnClickNode && (multiple.value || checkStrictly.value) || isLeaf.value && panel.config.checkOnClickLeaf) && !isDisabled.value) {
handleSelectCheck(!props.node.checked);
} else if (!isHoverMenu.value) {
handleExpand();
}
};
const handleSelectCheck = (checked) => {
if (checkStrictly.value) {
doCheck(checked);
if (props.node.loaded) {
doExpand();
}
} else {
handleCheck(checked);
}
};
const handleCheck = (checked) => {
if (!props.node.loaded) {
doLoad();
} else {
doCheck(checked);
!checkStrictly.value && doExpand();
}
};
return (_ctx, _cache) => {
return openBlock(), createElementBlock("li", {
id: `${__props.menuId}-${__props.node.uid}`,
role: "menuitem",
"aria-haspopup": !unref(isLeaf),
"aria-owns": unref(isLeaf) ? void 0 : __props.menuId,
"aria-expanded": unref(inExpandingPath),
tabindex: unref(expandable) ? -1 : void 0,
class: normalizeClass([
unref(ns).b(),
unref(ns).is("selectable", unref(checkStrictly)),
unref(ns).is("active", __props.node.checked),
unref(ns).is("disabled", !unref(expandable)),
unref(inExpandingPath) && "in-active-path",
unref(inCheckedPath) && "in-checked-path"
]),
onMouseenter: handleHoverExpand,
onFocus: handleHoverExpand,
onClick: handleClick
}, [
createCommentVNode(" prefix "),
unref(multiple) && unref(showPrefix) ? (openBlock(), createBlock(unref(ElCheckbox), {
key: 0,
"model-value": __props.node.checked,
indeterminate: __props.node.indeterminate,
disabled: unref(isDisabled),
onClick: withModifiers(() => {
}, ["stop"]),
"onUpdate:modelValue": handleSelectCheck
}, null, 8, ["model-value", "indeterminate", "disabled", "onClick"])) : unref(checkStrictly) && unref(showPrefix) ? (openBlock(), createBlock(unref(ElRadio), {
key: 1,
"model-value": unref(checkedNodeId),
label: __props.node.uid,
disabled: unref(isDisabled),
"onUpdate:modelValue": handleSelectCheck,
onClick: withModifiers(() => {
}, ["stop"])
}, {
default: withCtx(() => [
createCommentVNode("\n Add an empty element to avoid render label,\n do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485\n "),
createElementVNode("span")
]),
_: 1
}, 8, ["model-value", "label", "disabled", "onClick"])) : unref(isLeaf) && __props.node.checked ? (openBlock(), createBlock(unref(ElIcon), {
key: 2,
class: normalizeClass(unref(ns).e("prefix"))
}, {
default: withCtx(() => [
createVNode(unref(Check))
]),
_: 1
}, 8, ["class"])) : createCommentVNode("v-if", true),
createCommentVNode(" content "),
createVNode(unref(NodeContent), { node: __props.node }, null, 8, ["node"]),
createCommentVNode(" postfix "),
!unref(isLeaf) ? (openBlock(), createElementBlock(Fragment, { key: 3 }, [
__props.node.loading ? (openBlock(), createBlock(unref(ElIcon), {
key: 0,
class: normalizeClass([unref(ns).is("loading"), unref(ns).e("postfix")])
}, {
default: withCtx(() => [
createVNode(unref(Loading))
]),
_: 1
}, 8, ["class"])) : (openBlock(), createBlock(unref(ElIcon), {
key: 1,
class: normalizeClass(["arrow-right", unref(ns).e("postfix")])
}, {
default: withCtx(() => [
createVNode(unref(ArrowRight))
]),
_: 1
}, 8, ["class"]))
], 64)) : createCommentVNode("v-if", true)
], 42, ["id", "aria-haspopup", "aria-owns", "aria-expanded", "tabindex"]);
};
}
});
var ElCascaderNode = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "node.vue"]]);
export { ElCascaderNode as default };
//# sourceMappingURL=node2.mjs.map