yuang-framework-ui-pc
Version:
yuang-framework-ui-pc Library
109 lines (108 loc) • 4 kB
JavaScript
import { defineComponent, resolveComponent, createElementBlock, openBlock, Fragment, renderSlot, createCommentVNode, createBlock, createElementVNode, normalizeProps, mergeProps, withCtx, resolveDynamicComponent, normalizeStyle, toDisplayString, withModifiers } from "vue";
import { ElBadge, ElIcon } from "element-plus";
import { isExternalLink } from "../../utils/core";
const _sfc_main = defineComponent({
name: "ItemTitle",
components: { ElIcon, ElBadge },
props: {
/** 菜单项数据 */
item: {
type: Object,
required: true
},
/** 是否需要标题 */
showTitle: {
type: Boolean,
default: true
},
/** 是否需要链接 */
showLink: Boolean
},
emits: {
itemClick: (_item, _e) => true,
itemMouseenter: (_item, _e) => true,
itemMouseleave: (_item, _e) => true
},
setup(_props, { emit }) {
const handleItemClick = (item, e) => {
emit("itemClick", item, e);
};
const handleItemMouseenter = (item, e) => {
emit("itemMouseenter", item, e);
};
const handleItemMouseleave = (item, e) => {
emit("itemMouseleave", item, e);
};
return {
isExternalLink,
handleItemClick,
handleItemMouseenter,
handleItemMouseleave
};
}
});
const _export_sfc = (sfc, props) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props) {
target[key] = val;
}
return target;
};
const _hoisted_1 = {
key: 0,
class: "ele-menu-title"
};
const _hoisted_2 = ["href"];
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_ElIcon = resolveComponent("ElIcon");
const _component_ElBadge = resolveComponent("ElBadge");
const _component_RouterLink = resolveComponent("RouterLink");
return openBlock(), createElementBlock(Fragment, null, [
renderSlot(_ctx.$slots, "icon", {
item: _ctx.item,
icon: _ctx.item.icon
}, () => [
_ctx.item.icon ? (openBlock(), createBlock(_component_ElIcon, normalizeProps(mergeProps({ key: 0 }, _ctx.item.iconProps || {})), {
default: withCtx(() => [
(openBlock(), createBlock(resolveDynamicComponent(_ctx.item.icon), {
style: normalizeStyle(_ctx.item.iconStyle)
}, null, 8, ["style"]))
]),
_: 1
}, 16)) : createCommentVNode("", true)
]),
_ctx.showTitle ? renderSlot(_ctx.$slots, "title", {
key: 0,
item: _ctx.item,
title: _ctx.item.title
}, () => [
_ctx.item.title ? (openBlock(), createElementBlock("span", _hoisted_1, toDisplayString(_ctx.item.title), 1)) : createCommentVNode("", true)
]) : createCommentVNode("", true),
_ctx.item.badge != null ? (openBlock(), createBlock(_component_ElBadge, normalizeProps(mergeProps({ key: 1 }, _ctx.item.badge)), null, 16)) : createCommentVNode("", true),
createElementVNode("div", {
class: "ele-menu-trigger",
onClick: _cache[1] || (_cache[1] = (e) => _ctx.handleItemClick(_ctx.item, e)),
onMouseenter: _cache[2] || (_cache[2] = (e) => _ctx.handleItemMouseenter(_ctx.item, e)),
onMouseleave: _cache[3] || (_cache[3] = (e) => _ctx.handleItemMouseleave(_ctx.item, e))
}, [
_ctx.showLink ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
_ctx.isExternalLink(_ctx.item.path) ? (openBlock(), createElementBlock("a", {
key: 0,
href: _ctx.item.path,
target: "_blank",
class: "ele-menu-link",
onClick: _cache[0] || (_cache[0] = withModifiers(() => {
}, ["stop"]))
}, null, 8, _hoisted_2)) : _ctx.item.path ? (openBlock(), createBlock(_component_RouterLink, {
key: 1,
to: _ctx.item.path,
class: "ele-menu-link"
}, null, 8, ["to"])) : createCommentVNode("", true)
], 64)) : createCommentVNode("", true)
], 32)
], 64);
}
const itemTitle = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export {
itemTitle as default
};