@chewel/naive-ui-plus
Version:
## Document & Online preview
185 lines (184 loc) • 6.53 kB
JavaScript
import { useMessage as z, useDialog as L, NIcon as d, NBreadcrumb as M, NBreadcrumbItem as x, NDropdown as k, NTooltip as I, NDivider as V, NAvatar as A } from "naive-ui";
import { defineComponent as U, inject as j, computed as b, ref as q, createElementBlock as g, openBlock as n, createElementVNode as a, createVNode as s, unref as e, createBlock as c, withCtx as i, Fragment as N, renderList as H, createCommentVNode as h, resolveDynamicComponent as S, toDisplayString as _, withModifiers as G } from "vue";
import { MenuUnfoldOutlined as J, MenuFoldOutlined as K, ReloadOutlined as Q, FullscreenOutlined as W, FullscreenExitOutlined as X } from "@vicons/antd";
import { useRouter as Y, useRoute as Z } from "vue-router";
import { usePLayoutStore as $ } from "../layout.js";
const ee = { class: "layout-header" }, te = { class: "layout-header-left" }, oe = { class: "link-text" }, le = {
key: 1,
class: "link-text"
}, ne = { class: "layout-header-right" }, ae = { class: "layout-header-trigger layout-header-trigger-min" }, re = { class: "layout-header-trigger layout-header-trigger-min" }, se = { class: "avatar" }, pe = /* @__PURE__ */ U({
__name: "PHeader",
setup(ie) {
const m = z(), C = L(), r = $(), f = Y(), P = Z(), y = j("reloadPage"), F = (l) => f.push({ name: l }), B = b(() => v(P.matched)), v = (l) => l.map((t) => {
const u = {
key: t.name,
label: t.meta.title,
icon: t.meta.icon,
meta: t.meta,
disabled: t.path === "/",
children: void 0
};
return t.children && t.children.length > 0 && (u.children = v(
t.children
)), u;
}), p = q(!1), E = () => {
document.fullscreenElement ? document.exitFullscreen && (document.exitFullscreen(), p.value = !1) : (document.documentElement.requestFullscreen(), p.value = !0);
}, O = b(() => {
const l = [];
return l.push({
label: "退出登录",
key: "logout"
}), r.state.settingPages && r.state.settingPages.length > 0 && r.state.settingPages.forEach((t) => {
l.push({
label: t.title,
key: t.route
});
}), l;
}), w = (l) => {
switch (l) {
case "logout":
T();
break;
default:
f.push({ name: l });
}
}, T = () => {
C.info({
title: "提示",
content: "您确定要退出登录吗",
positiveText: "确定",
negativeText: "取消",
onPositiveClick: async () => {
if (r.state.logout)
try {
await r.state.logout(), localStorage.removeItem("TABS-ROUTES"), m.error("退出成功");
} catch (l) {
console.error(l), m.error("退出登录失败");
} finally {
location.reload();
}
else
m.error("没有配置登出接口, 请配置[usePLayoutStore.logout]方法");
},
onNegativeClick: () => {
}
});
};
return (l, t) => {
const u = I, D = V, R = A;
return n(), g("div", ee, [
a("div", te, [
a("div", {
class: "ml-1 layout-header-trigger layout-header-trigger-min",
onClick: t[0] || (t[0] = //@ts-ignore
(...o) => e(r).collapse && e(r).collapse(...o))
}, [
e(r).state.collapsed ? (n(), c(e(d), {
key: 0,
size: "18"
}, {
default: i(() => [
s(e(J))
]),
_: 1
})) : (n(), c(e(d), {
key: 1,
size: "18"
}, {
default: i(() => [
s(e(K))
]),
_: 1
}))
]),
a("div", {
class: "mr-1 layout-header-trigger layout-header-trigger-min",
onClick: t[1] || (t[1] = //@ts-ignore
(...o) => e(y) && e(y)(...o))
}, [
s(e(d), { size: "18" }, {
default: i(() => [
s(e(Q))
]),
_: 1
})
]),
s(e(M), null, {
default: i(() => [
(n(!0), g(N, null, H(B.value, (o) => (n(), g(N, {
key: o.label
}, [
o.label ? (n(), c(e(x), { key: 0 }, {
default: i(() => [
o.children && o.children.length ? (n(), c(e(k), {
key: 0,
options: o.children,
onSelect: F
}, {
default: i(() => [
a("span", oe, [
o.icon ? (n(), c(S(o.icon), { key: 0 })) : h("", !0),
a("span", null, _(o.label), 1)
])
]),
_: 2
}, 1032, ["options"])) : (n(), g("span", le, [
o.icon ? (n(), c(S(o.icon), { key: 0 })) : h("", !0),
a("span", null, _(o.label), 1)
]))
]),
_: 2
}, 1024)) : h("", !0)
], 64))), 128))
]),
_: 1
})
]),
a("div", ne, [
a("div", ae, [
s(u, { placement: "bottom" }, {
trigger: i(() => [
s(e(d), {
size: "18",
onClick: G(E, ["stop"])
}, {
default: i(() => [
p.value ? (n(), c(e(X), { key: 1 })) : (n(), c(e(W), { key: 0 }))
]),
_: 1
})
]),
default: i(() => [
t[2] || (t[2] = a("span", null, "全屏", -1))
]),
_: 1,
__: [2]
})
]),
a("div", re, [
s(e(k), {
trigger: "hover",
onSelect: w,
options: O.value
}, {
default: i(() => [
a("div", se, [
a("span", null, _(e(r).state.uname), 1),
s(D, { vertical: "" }),
s(R, {
round: "",
src: e(r).state.avatar
}, null, 8, ["src"])
])
]),
_: 1
}, 8, ["options"])
])
])
]);
};
}
});
export {
pe as default
};