yuang-framework-ui-pc
Version:
yuang-framework-ui-pc Library
108 lines (107 loc) • 3.97 kB
JavaScript
;
const vue = require("vue");
const elementPlus = require("element-plus");
const core = require("../../utils/core");
const _sfc_main = vue.defineComponent({
name: "ItemTitle",
components: { ElIcon: elementPlus.ElIcon, ElBadge: elementPlus.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: core.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 = vue.resolveComponent("ElIcon");
const _component_ElBadge = vue.resolveComponent("ElBadge");
const _component_RouterLink = vue.resolveComponent("RouterLink");
return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
vue.renderSlot(_ctx.$slots, "icon", {
item: _ctx.item,
icon: _ctx.item.icon
}, () => [
_ctx.item.icon ? (vue.openBlock(), vue.createBlock(_component_ElIcon, vue.normalizeProps(vue.mergeProps({ key: 0 }, _ctx.item.iconProps || {})), {
default: vue.withCtx(() => [
(vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.item.icon), {
style: vue.normalizeStyle(_ctx.item.iconStyle)
}, null, 8, ["style"]))
]),
_: 1
}, 16)) : vue.createCommentVNode("", true)
]),
_ctx.showTitle ? vue.renderSlot(_ctx.$slots, "title", {
key: 0,
item: _ctx.item,
title: _ctx.item.title
}, () => [
_ctx.item.title ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_1, vue.toDisplayString(_ctx.item.title), 1)) : vue.createCommentVNode("", true)
]) : vue.createCommentVNode("", true),
_ctx.item.badge != null ? (vue.openBlock(), vue.createBlock(_component_ElBadge, vue.normalizeProps(vue.mergeProps({ key: 1 }, _ctx.item.badge)), null, 16)) : vue.createCommentVNode("", true),
vue.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 ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
_ctx.isExternalLink(_ctx.item.path) ? (vue.openBlock(), vue.createElementBlock("a", {
key: 0,
href: _ctx.item.path,
target: "_blank",
class: "ele-menu-link",
onClick: _cache[0] || (_cache[0] = vue.withModifiers(() => {
}, ["stop"]))
}, null, 8, _hoisted_2)) : _ctx.item.path ? (vue.openBlock(), vue.createBlock(_component_RouterLink, {
key: 1,
to: _ctx.item.path,
class: "ele-menu-link"
}, null, 8, ["to"])) : vue.createCommentVNode("", true)
], 64)) : vue.createCommentVNode("", true)
], 32)
], 64);
}
const itemTitle = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
module.exports = itemTitle;