plus-pro-components
Version:
Page level components developed based on Element Plus.
216 lines (211 loc) • 8.68 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var iconsVue = require('@element-plus/icons-vue');
var elementPlus = require('element-plus');
require('../../../hooks/index.js');
require('../../utils/index.js');
var useLocale = require('../../../hooks/useLocale.js');
var is = require('../../utils/is.js');
const _hoisted_1 = { class: "plus-header__left" };
const _hoisted_2 = ["src"];
const _hoisted_3 = {
key: 1,
class: "plus-header__title"
};
const _hoisted_4 = /* @__PURE__ */ vue.createElementVNode(
"div",
{ class: "plus-header__placeholder" },
null,
-1
/* HOISTED */
);
const _hoisted_5 = { class: "plus-header__right" };
const _hoisted_6 = { class: "plus-header__dropdown-area" };
const _hoisted_7 = ["src"];
const _hoisted_8 = { class: "plus-header__username" };
const _hoisted_9 = {
key: 0,
class: "plus-header-placeholder"
};
var _sfc_main = /* @__PURE__ */ vue.defineComponent({
...{
name: "PlusHeader"
},
__name: "index",
props: {
logo: { default: "https://plus-pro-components.com/logo.png" },
fixed: { type: Boolean, default: false },
title: { default: "PlusProComponents" },
logoutText: { default: "" },
trigger: { default: "click" },
userInfo: { default: () => ({}) },
hasUserInfo: { type: Boolean, default: true },
dropdownList: { default: () => [] },
renderHeaderLeft: {},
renderHeaderRight: {}
},
emits: ["clickDropdownItem"],
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const { t } = useLocale.useLocale();
const logoutItem = {
label: props.logoutText || t("plus.header.logout"),
value: "logout"
};
const handleClickItem = (item) => {
emit("clickDropdownItem", item);
};
return (_ctx, _cache) => {
return vue.openBlock(), vue.createElementBlock(
vue.Fragment,
null,
[
vue.createVNode(vue.unref(elementPlus.ElHeader), {
class: vue.normalizeClass(["plus-header", { "is-fixed": _ctx.fixed }])
}, {
default: vue.withCtx(() => [
vue.createElementVNode("div", _hoisted_1, [
_ctx.renderHeaderLeft && vue.unref(is.isFunction)(_ctx.renderHeaderLeft) ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.renderHeaderLeft), {
key: 0,
logo: _ctx.logo,
title: _ctx.title
}, null, 8, ["logo", "title"])) : _ctx.$slots["header-left"] ? vue.renderSlot(_ctx.$slots, "header-left", {
key: 1,
logo: _ctx.logo,
title: _ctx.title
}) : (vue.openBlock(), vue.createElementBlock(
vue.Fragment,
{ key: 2 },
[
_ctx.logo ? (vue.openBlock(), vue.createElementBlock("img", {
key: 0,
src: _ctx.logo,
alt: "",
class: "plus-header__logo"
}, null, 8, _hoisted_2)) : vue.createCommentVNode("v-if", true),
_ctx.title ? (vue.openBlock(), vue.createElementBlock(
"h2",
_hoisted_3,
vue.toDisplayString(_ctx.title),
1
/* TEXT */
)) : vue.createCommentVNode("v-if", true)
],
64
/* STABLE_FRAGMENT */
))
]),
_hoisted_4,
vue.createElementVNode("div", _hoisted_5, [
_ctx.renderHeaderRight && vue.unref(is.isFunction)(_ctx.renderHeaderRight) ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.renderHeaderRight), {
key: 0,
"user-info": _ctx.userInfo,
title: _ctx.title
}, null, 8, ["user-info", "title"])) : _ctx.$slots["header-right"] ? vue.renderSlot(_ctx.$slots, "header-right", {
key: 1,
userInfo: _ctx.userInfo,
title: _ctx.title
}) : vue.createCommentVNode("v-if", true),
_ctx.hasUserInfo ? (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElDropdown), {
key: 2,
placement: "bottom-end",
trigger: "click"
}, {
dropdown: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElDropdownMenu), { class: "header-dropdown" }, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElDropdownItem), {
onClick: _cache[0] || (_cache[0] = ($event) => handleClickItem(logoutItem))
}, {
default: vue.withCtx(() => [
vue.createTextVNode(
vue.toDisplayString(_ctx.logoutText || vue.unref(t)("plus.header.logout")),
1
/* TEXT */
)
]),
_: 1
/* STABLE */
}),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(_ctx.dropdownList, (item) => {
return vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElDropdownItem), {
key: item.value,
onClick: ($event) => handleClickItem(item)
}, {
default: vue.withCtx(() => [
vue.createTextVNode(
vue.toDisplayString(item.label),
1
/* TEXT */
)
]),
_: 2
/* DYNAMIC */
}, 1032, ["onClick"]);
}),
128
/* KEYED_FRAGMENT */
))
]),
_: 1
/* STABLE */
})
]),
default: vue.withCtx(() => [
vue.createElementVNode("span", _hoisted_6, [
vue.createCommentVNode(" avatar "),
_ctx.userInfo.avatar ? (vue.openBlock(), vue.createElementBlock("img", {
key: 0,
src: _ctx.userInfo.avatar,
alt: "",
class: "plus-header__avatar"
}, null, 8, _hoisted_7)) : (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElIcon), {
key: 1,
size: 20,
class: "plus-header__avatar"
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(iconsVue.User))
]),
_: 1
/* STABLE */
})),
vue.createCommentVNode(" username "),
vue.createElementVNode(
"p",
_hoisted_8,
vue.toDisplayString(_ctx.userInfo.username || "admin"),
1
/* TEXT */
),
vue.createVNode(vue.unref(elementPlus.ElIcon), { class: "el-icon-caret-bottom el-icon--right" }, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(iconsVue.ArrowDown))
]),
_: 1
/* STABLE */
})
])
]),
_: 1
/* STABLE */
})) : vue.createCommentVNode("v-if", true)
])
]),
_: 3
/* FORWARDED */
}, 8, ["class"]),
_ctx.fixed ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_9)) : vue.createCommentVNode("v-if", true)
],
64
/* STABLE_FRAGMENT */
);
};
}
});
exports.default = _sfc_main;