UNPKG

sunadmin-core

Version:

一句命令即可集成的通用后台管理系统框架(配套tp-swoole后端,同样是一句命令即可安装https://gitee.com/sunjinglong/sunadmin-server),便捷的更新方案,您可以随时更新sunadmin,而无需担心对您项目的影响

1,356 lines 271 kB
import { defineStore as H, createPinia as Re } from "pinia"; import Me from "axios"; import { ElMessageBox as J, ElMessage as S, ElNotification as ze, ElCollapseItem as De, ElCollapse as Oe, ElTag as je, ElButton as We, ElDialog as Ne, ElIcon as Ye, ElImage as He } from "element-plus"; import { useRouter as se, createRouter as Pe, createWebHistory as Ge } from "vue-router"; import { resolveComponent as s, createElementBlock as _, openBlock as d, createElementVNode as r, Fragment as R, renderList as z, normalizeClass as Z, createCommentVNode as B, createVNode as o, withCtx as n, createBlock as C, resolveDynamicComponent as te, toDisplayString as b, ref as M, createTextVNode as p, KeepAlive as Ue, Transition as ee, withDirectives as O, TransitionGroup as Ze, vShow as pe, computed as U, onMounted as Xe, onUnmounted as Je, unref as Ke, vModelText as ue, resolveDirective as W, normalizeStyle as N, withModifiers as ne, mergeProps as qe, markRaw as Y, createSlots as Ae, nextTick as $e, defineComponent as _e, watch as et, renderSlot as q } from "vue"; import * as tt from "@element-plus/icons-vue"; import { SwitchButton as me, Sunny as re, Moon as ge, Aim as he, FullScreen as fe, CopyDocument as ot, Refresh as ye, Search as nt, VideoPlay as lt, Edit as st, Document as ve, Tools as it, Setting as at, Plus as be, CircleCloseFilled as rt, Camera as ct } from "@element-plus/icons-vue"; import dt from "pinia-plugin-persistedstate"; const j = { baseURL: "", timeout: 0, headers: {}, wsUrl: "" }; let ae = !1; const F = Me.create({ baseURL: j.baseURL, timeout: j.timeout }); function Ce() { F.defaults.baseURL = j.baseURL, F.defaults.timeout = j.timeout, j.headers && Object.assign(F.defaults.headers, j.headers); } F.interceptors.request.use( (t) => { const e = D().token; return e && (t.headers.Authorization = `Bearer ${e}`), t; }, (t) => Promise.reject(t) ); F.interceptors.response.use( (t) => { const { data: e } = t; switch (e.code) { case 401: D().tokenAuthFail(e.message); break; } return e; }, (t) => (console.error("网络请求错误:", t), ae || (ae = !0, J.alert("<strong>请求域</strong>:" + t.config.baseURL + "<br /><strong>地址</strong>:" + t.config.url, "网络错误", { confirmButtonText: "我知道了", type: "error", dangerouslyUseHTMLString: !0 }).finally(() => { ae = !1; })), Promise.reject(t)) ); function ce(t, e = {}) { const i = { url: t, method: "get", params: { ...e } }; return F(i); } function le(t, e = {}) { return F({ url: t, method: "post", data: e }); } function ut(t, e = {}) { return F({ url: t, method: "delete", data: e }); } const Ni = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: F, del: ut, get: ce, post: le, service: F, updateAxiosConfig: Ce }, Symbol.toStringTag, { value: "Module" })); class mt { constructor() { this.ws = null, this.url = "", this.reconnectInterval = 3e3, this.reconnectTimer = null, this.messageHandlers = /* @__PURE__ */ new Set(), this.isManualClose = !1, this.accountStore = null, this.heartbeatInterval = 3e3, this.heartbeatTimer = null, this.heartbeatMsg = JSON.stringify({ type: "ping" }); } addMessageHandler(e) { return this.messageHandlers.add(e), () => this.removeMessageHandler(e); } removeMessageHandler(e) { this.messageHandlers.delete(e); } async connect() { if (this.accountStore = D(), !this.accountStore.isLogin) { console.warn("未登录,不连接ws"); return; } if (this.ws && this.ws.readyState !== WebSocket.CLOSED) { console.warn("ws已连接,不需要重复连接"); return; } this.url = `${j.wsUrl}?token=${D().token}`, this.ws = new WebSocket(this.url), this.ws.onopen = () => { console.log("[WS] 连接成功"), this.startHeartbeat(); }, this.ws.onmessage = (e) => { let i; try { i = JSON.parse(e.data); } catch (c) { console.error("[WS] 消息解析失败:", c); return; } switch (i.type) { case "pone": console.log("[WS] 收到心跳响应"); break; case "offLine": S.info("您已被超管断开后台链接"), this.accountStore.loginOut(); break; } this.messageHandlers.forEach((c) => c(i)); }, this.ws.onclose = (e) => { console.warn("[WS] 连接关闭", e); let i = this.getWsCloseReason(e.code); ze({ title: "提示", message: i, type: "warning" }), this.ws = null, this.stopHeartbeat(), this.isManualClose || this.reconnect(); }, this.ws.onerror = (e) => { var i; console.error("[WS] 错误:", e), this.stopHeartbeat(), (i = this.ws) == null || i.close(), this.ws = null; }; } startHeartbeat() { this.stopHeartbeat(), this.heartbeatTimer = setInterval(() => { this.ws && this.ws.readyState === WebSocket.OPEN && this.ws.send(this.heartbeatMsg); }, this.heartbeatInterval); } stopHeartbeat() { this.heartbeatTimer && (clearInterval(this.heartbeatTimer), this.heartbeatTimer = null); } send(e) { this.ws && this.ws.readyState === WebSocket.OPEN ? this.ws.send(JSON.stringify(e)) : console.warn("[WS] 发送失败,连接尚未打开"); } disconnect() { this.isManualClose = !0, this.stopHeartbeat(), this.ws && (this.ws.close(), this.ws = null); } reconnect() { this.reconnectTimer && clearTimeout(this.reconnectTimer), this.reconnectTimer = setTimeout(() => { console.log("[WS] 正在尝试重连..."), this.connect(); }, this.reconnectInterval); } //ws关闭事件代码 getWsCloseReason(e) { switch (e) { case 1e3: return "连接正常关闭"; case 1001: return "服务器断开或页面关闭"; case 1002: return "协议错误,无法建立连接"; case 1003: return "收到不可识别的数据格式"; case 1005: return "连接失败,未返回状态码"; case 1006: return "服务器拒绝连接,认证失败或服务未响应"; case 1007: return "数据格式错误,连接被关闭"; case 1008: return "连接被拒绝,权限或策略不符"; case 1009: return "发送数据过大,连接被服务器断开"; case 1011: return "服务器内部错误,连接中断"; default: return "ws关闭,未知错误(代码: " + e + ")"; } } messageHandlers() { } } const X = new mt(), P = H("menus", { state: () => ({ /** * [{ label: "首页", path: "/" }, { label: "测试", path: "test", children: [{ label: '测试1', path: '/test/test1', }, { label: '测试测试测试2', path: '/test/test2', }] }, { label: "运维", path: "maintenance", children: [{ label: '后台菜单', path: '/maintenance/menus', }, { label: '数据字典', path: '/maintenance/dataDictionary' }, { label: '附件管理', path: '/maintenance/attachment' }] }, ] */ navigationMenusList: [], //过滤后可供导航组件显示的菜单数据 menuOriginData: [], //完整原始的menus数据,一般在管理员角色组权限选择处使用 currentLevel1MenuKey: "", currentLevel2MenuKey: "" //当前活动的菜单页面key }), persist: !0, getters: {}, actions: { //处理后端来的菜单数据 handleAccountMenus(t) { this.menuOriginData = t; let e = (i) => Array.isArray(i) ? i.filter((c) => ["menu_group", "route"].includes(c.type)).map((c) => (c.label = c.name, c.path = c.route_path, { ...c, children: c.children ? e(c.children) : [] })) : []; this.navigationMenusList = e(t), console.log(this.navigationMenusList); }, //超管获取所有菜单数据 getAllMenus() { return F.get("/sunAdmin/menus/getAllMenus"); }, editMenuItem(t) { return F.post("/sunAdmin/menus/edit", t); }, delMenu(t) { return F.get("/sunAdmin/menus/deleteMenus/" + t); } } }), K = H("layout", { state: () => ({ tags: {}, //打开的历史菜单标签 { idxxx:{与menu菜单保持一致,isActivity:false} } showTags: !1, //是否展示tag标签页 showBreadcrumb: !0, //是否显示面包屑导航 showFooter: !0, //是否显示页面框架底部footer showLevel2MenuIcon: !0, //是否展示二级菜单icon currentLevel1MenuKey: "", //当前活动的1级菜单key currentLevel2MenuKey: "" //当前活动的2级菜单页面key }), getters: { //当前活动tab的id currentActivityTagId() { for (let t in this.tags) if (this.tags[t].isActivity) return t; } }, actions: { // 仅仅在路由守卫处调用 // toRoute = 前往的路由信息 addTags(t = {}) { let e = ["path", "meta", "params"], i = {}; e.map((c) => { i[c] = t[c]; }), this.tags[t.path] = i, this.activationTag(t.path); }, //激活某个tag activationTag(t = "") { for (let e in this.tags) { let i = this.tags[e]; i.isActivity = !1, i.path == t && (i.isActivity = !0); } }, //移除tag removeTag(t) { if (this.tags[t]) { if (this.tags[t].isActivity) { const e = Object.keys(this.tags); if (e.length > 0) { const i = e[0]; this.tags[i].isActivity = !0, $.push(this.tags[i].path); } } delete this.tags[t]; } } } }), L = (t, e) => { const i = t.__vccOpts || t; for (const [c, l] of e) i[c] = l; return i; }, gt = { setup() { const t = se(), e = K(), i = P(); return { router: t, layoutStore: e, menusStore: i }; }, data() { return {}; }, created() { }, methods: { menuClick(t, e) { let i = this.findPathInTree(e); this.router.push(i.path); }, //确定点击后跳转的路由 findPathInTree(t) { if (t.type == "route") return t; for (let e of t.children) { const i = this.findPathInTree(e); if (i) return i; } return null; } } }, ht = { style: { "overflow-y": "auto", height: "100%", "border-right": "1px solid rgb(238, 238, 238)" }, class: "column" }, ft = { class: "flex1 menus_view" }, pt = ["onClick"], At = { class: "column item xy_center" }, _t = { class: "title_view" }, yt = { key: 0, class: "select_bg_view column xy_center" }; function vt(t, e, i, c, l, a) { const g = s("el-icon"); return d(), _("div", ht, [ r("div", ft, [ (d(!0), _(R, null, z(c.menusStore.navigationMenusList, (m, u) => (d(), _("div", { class: Z(["item_view column click", { selectMenu: c.menusStore.currentLevel1MenuKey == m.path }]), onClick: (f) => a.menuClick(u, m) }, [ r("div", At, [ o(g, { class: "icon_view", size: "24" }, { default: n(() => [ (d(), C(te(m.icon))) ]), _: 2 }, 1024), r("div", _t, [ r("span", null, b(m.label), 1) ]) ]), c.menusStore.currentLevel1MenuKey == m.path ? (d(), _("div", yt, e[0] || (e[0] = [ r("div", { class: "select_bg" }, null, -1) ]))) : B("", !0) ], 10, pt))), 256)) ]) ]); } const bt = /* @__PURE__ */ L(gt, [["render", vt], ["__scopeId", "data-v-ddd5cbfe"]]), Ct = H("system", { state: () => ({}), getters: {}, actions: {} }), kt = { components: { FullScreen: fe, Aim: he, Moon: ge, Sunny: re, SwitchButton: me }, setup() { const t = M(!1), e = M(document.body.classList.contains("dark-theme")), i = Ct(); return { isFullscreen: t, isDark: e, toggleFullScreen: () => { document.fullscreenElement ? (document.exitFullscreen(), t.value = !1) : (document.documentElement.requestFullscreen(), t.value = !0); }, toggleTheme: () => { e.value = !e.value, e.value ? document.body.classList.add("dark-theme") : document.body.classList.remove("dark-theme"); }, handleLogout: () => { J.confirm("确认退出系统吗?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }).then(() => { D().loginOut(); }).catch(() => { }); }, FullScreen: fe, Aim: he, Moon: ge, Sunny: re, SwitchButton: me, systemStore: i }; } }, It = { style: { width: "100%", height: "100%", "border-bottom": "1px solid var(--el-border-color-light)", padding: "0 20px", gap: "10px" }, class: "row y_center" }, wt = { class: "logo row y_center", style: { "font-weight": "600", color: "var(--el-color-primary)" } }, Et = { class: "header-right row y_center" }; function St(t, e, i, c, l, a) { const g = s("Sunny"), m = s("el-icon"), u = s("el-button"), f = s("el-button-group"); return d(), _("div", It, [ r("div", wt, [ o(m, { size: "34" }, { default: n(() => [ o(g) ]), _: 1 }), e[0] || (e[0] = r("div", { class: "row y_center", style: { gap: "8px" } }, [ r("span", { style: { "font-size": "18px" } }, "SunAdmin"), r("span", { style: { "font-size": "12px" }, id: "sunadmin_version" }) ], -1)) ]), r("div", Et, [ o(f, { size: "" }, { default: n(() => [ o(u, { icon: c.isFullscreen ? "Aim" : "FullScreen", onClick: c.toggleFullScreen }, null, 8, ["icon", "onClick"]), o(u, { icon: c.isDark ? "Sunny" : "Moon", onClick: c.toggleTheme }, null, 8, ["icon", "onClick"]), o(u, { type: "primary", icon: c.SwitchButton, onClick: c.handleLogout }, { default: n(() => e[1] || (e[1] = [ p("退出 ") ])), _: 1, __: [1] }, 8, ["icon", "onClick"]) ]), _: 1 }) ]) ]); } const Bt = /* @__PURE__ */ L(kt, [["render", St], ["__scopeId", "data-v-a7e246c2"]]), Lt = {}, xt = { style: { height: "100%", position: "relative", width: "100%", "overflow-y": "auto", "box-shadow": "0px 0px 15px 0px #ececec" } }; function Qt(t, e) { const i = s("router-view"); return d(), _("div", xt, [ o(i, null, { default: n(({ Component: c }) => [ (d(), C(Ue, null, [ o(ee, { name: "router_view_transition" }, { default: n(() => [ (d(), C(te(c), { style: { width: "100%", height: "100%" } })) ]), _: 2 }, 1024) ], 1024)) ]), _: 1 }) ]); } const Tt = /* @__PURE__ */ L(Lt, [["render", Qt], ["__scopeId", "data-v-455a1564"]]), Ft = { setup() { const t = se(), e = K(); return { router: t, layoutStore: e }; }, computed: { showTags() { return this.layoutStore.showTags ? Object.keys(this.layoutStore.tags).length > 0 : !1; } }, methods: { tagClick(t) { this.router.push(t.path); } } }, Vt = { style: { "background-color": "#fff", padding: "10px", "margin-bottom": "4px" }, class: "tag_view" }; function Rt(t, e, i, c, l, a) { const g = s("el-tag"); return O((d(), _("div", Vt, [ o(Ze, { name: "list" }, { default: n(() => [ (d(!0), _(R, null, z(c.layoutStore.tags, (m, u) => (d(), C(g, { class: "click", size: "large", bordered: !1, style: { "margin-right": "5px" }, onClick: (f) => a.tagClick(m), onClose: (f) => c.layoutStore.removeTag(m.path), closable: "", type: m.isActivity ? "primary" : "info", key: u }, { default: n(() => [ p(b(m.meta.title), 1) ]), _: 2 }, 1032, ["onClick", "onClose", "type"]))), 128)) ]), _: 1 }) ], 512)), [ [pe, a.showTags] ]); } const Mt = /* @__PURE__ */ L(Ft, [["render", Rt], ["__scopeId", "data-v-cf144777"]]), zt = { setup() { const t = se(), e = K(), i = P(); return { router: t, layoutStore: e, menusStore: i }; }, computed: { menus() { for (let t = 0; t < this.menusStore.navigationMenusList.length; t++) { let e = this.menusStore.navigationMenusList[t]; if (e.path == this.menusStore.currentLevel1MenuKey) return e.children; } }, showMenu() { return this.menus && this.menus.length > 0; } }, methods: { MenuSelect(t, e, i, c) { this.router.push(t); } } }, Dt = { key: 0, style: { "margin-right": "2px" } }; function Ot(t, e, i, c, l, a) { const g = s("el-icon"), m = s("el-menu-item"), u = s("el-menu"); return d(), C(ee, { name: "list" }, { default: n(() => [ a.showMenu ? (d(), _("div", Dt, [ o(u, { "default-active": c.menusStore.currentLevel2MenuKey, style: { border: "unset", "background-color": "unset" }, onSelect: a.MenuSelect }, { default: n(() => [ (d(!0), _(R, null, z(a.menus, (f, A) => (d(), C(m, { index: f.path, style: { "border-radius": "5px", margin: "0 5px", "margin-top": "5px", height: "44px" } }, { default: n(() => [ c.layoutStore.showLevel2MenuIcon ? (d(), C(g, { key: 0, class: "icon_view", size: "17" }, { default: n(() => [ (d(), C(te(f.icon))) ]), _: 2 }, 1024)) : B("", !0), r("span", null, b(f.label), 1) ]), _: 2 }, 1032, ["index"]))), 256)) ]), _: 1 }, 8, ["default-active", "onSelect"]) ])) : B("", !0) ]), _: 1 }); } const jt = /* @__PURE__ */ L(zt, [["render", Ot], ["__scopeId", "data-v-081ea780"]]), Wt = { components: { pageMenus: jt, pageBody: Tt, pageTags: Mt }, data() { return {}; }, computed: {} }, Nt = { class: "column", style: { height: "100%" } }, Yt = { style: { display: "flex", flex: "1", overflow: "hidden" } }, Ht = { style: { flex: "1", margin: "0 0px", padding: "6px", width: "100%", height: "100%" } }; function Pt(t, e, i, c, l, a) { const g = s("pageTags"), m = s("pageMenus"), u = s("pageBody"); return d(), _("div", Nt, [ o(g), r("div", Yt, [ o(m), r("div", Ht, [ o(u) ]) ]) ]); } const Gt = /* @__PURE__ */ L(Wt, [["render", Pt]]), Ut = "1.0.14", Zt = "2025-06-21T10:25:07.989Z", Xt = "2025-06-21 18:25:07", Jt = { version: Ut, buildTime: Zt, buildDate: Xt }, Kt = { data() { return { version: Jt }; } }, qt = { style: { "font-size": "12px", color: "var(--el-color-info-light-3)" } }; function $t(t, e, i, c, l, a) { var f; const g = s("Sunrise"), m = s("el-icon"), u = s("el-divider"); return d(), _("div", qt, [ o(m, { style: { "margin-right": "6px" } }, { default: n(() => [ o(g) ]), _: 1 }), r("span", null, "SunAdmin " + b(((f = l.version) == null ? void 0 : f.version) || "获取版本号失败"), 1), o(u, { direction: "vertical" }), e[0] || (e[0] = r("a", { href: "https://gitee.com/sunjinglong", target: "_blank", style: { color: "unset" } }, "Gitee Home", -1)), o(u, { direction: "vertical" }), e[1] || (e[1] = r("a", { href: "https://gitee.com/sunjinglong/create-sunadmin--npm/issues", target: "_blank", style: { color: "unset" } }, "Issue", -1)), o(u, { direction: "vertical" }), e[2] || (e[2] = r("a", { href: "https://gitee.com/sunjinglong/create-sunadmin--npm", target: "_blank", style: { color: "unset" } }, "开发文档", -1)) ]); } const eo = /* @__PURE__ */ L(Kt, [["render", $t]]), to = { name: "SunAdminLayout", components: { leftTem: bt, contentTem: Gt, headerTem: Bt, footerTem: eo }, data() { return {}; }, methods: {}, computed: { layoutStore() { return K(); } } }, oo = { style: { "background-color": "var(--color-bg-default)", position: "absolute", top: "0", bottom: "0", right: "0", left: "0" } }; function no(t, e, i, c, l, a) { const g = s("headerTem"), m = s("el-header"), u = s("leftTem"), f = s("el-aside"), A = s("contentTem"), I = s("el-main"), h = s("el-container"), w = s("footerTem"), E = s("el-footer"), v = s("StartLoading"); return d(), _("div", oo, [ o(h, { style: { height: "100%" } }, { default: n(() => [ o(m, { style: { padding: "0" } }, { default: n(() => [ o(g) ]), _: 1 }), o(h, { style: { flex: "1", overflow: "hidden" } }, { default: n(() => [ o(f, { width: "70px", style: { height: "100%" } }, { default: n(() => [ o(u) ]), _: 1 }), o(h, { style: { width: "100%" } }, { default: n(() => [ o(I, { style: { padding: "0" } }, { default: n(() => [ o(A) ]), _: 1 }) ]), _: 1 }) ]), _: 1 }), a.layoutStore.showFooter ? (d(), C(E, { key: 0, style: { height: "50px", "border-top": "1px solid var(--el-color-info-light-9)" }, class: "row xy_center" }, { default: n(() => [ o(w) ]), _: 1 })) : B("", !0) ]), _: 1 }), o(v) ]); } const lo = /* @__PURE__ */ L(to, [["render", no]]), so = { class: "system-info-card" }, io = { __name: "SystemInfo", setup(t) { const e = M("加载中..."), i = M(0), c = M("加载中..."), l = M(0), a = M("加载中..."), g = M("加载中..."), m = M("加载中..."), u = M("加载中..."), f = M("加载中..."), A = M("加载中..."), I = M("加载中..."), h = M(!0), w = U(() => h.value ? "#409EFF" : i.value < 40 ? "#67c23a" : i.value < 70 ? "#e6a23c" : "#f56c6c"), E = U(() => h.value ? "#409EFF" : l.value < 40 ? "#67c23a" : l.value < 70 ? "#e6a23c" : "#f56c6c"); async function v() { try { h.value = !0; const x = await F.get("/sunAdmin/systemInfo/metrics"); if (x.code !== 200) throw new Error(x.message); const k = x.data; e.value = k.cpu_cores, i.value = typeof k.cpu_usage == "number" ? k.cpu_usage : 0, c.value = k.memory_total, l.value = typeof k.memory_usage == "number" ? k.memory_usage : 0, a.value = k.os_version, g.value = k.server_uptime, m.value = k.php_version, u.value = k.swoole_version, f.value = k.mysql_version, A.value = k.redis_version, I.value = k.sun_admin_version; } catch { e.value = "获取失败", i.value = 0, c.value = "获取失败", l.value = 0, a.value = "获取失败", g.value = "获取失败", m.value = "获取失败", u.value = "获取失败", f.value = "获取失败", A.value = "获取失败", I.value = "获取失败"; } finally { h.value = !1; } } let y = null; return Xe(() => { v(), y = X.addMessageHandler((x) => { x.type === "system_metrics" && (typeof x.data.cpu_usage == "number" && (i.value = x.data.cpu_usage), typeof x.data.memory_usage == "number" && (l.value = x.data.memory_usage)); }); }), Je(() => { y && y(); }), (x, k) => { const Q = s("el-progress"), V = s("el-descriptions-item"), ie = s("el-descriptions"); return d(), _("div", so, [ o(ie, { title: "系统状态", column: 2, border: "" }, { default: n(() => [ o(V, { label: "CPU状态" }, { default: n(() => [ o(Q, { percentage: i.value, color: w.value, inline: !0, "stroke-width": 18, "text-inside": !0, format: (G) => h.value ? "加载中..." : `${e.value}核心 / ${G}%`, class: "custom-progress systeminfo-progress" }, null, 8, ["percentage", "color", "format"]) ]), _: 1 }), o(V, { label: "内存状态" }, { default: n(() => [ o(Q, { percentage: l.value, color: E.value, inline: !0, "stroke-width": 18, "text-inside": !0, format: (G) => h.value ? "加载中..." : `${c.value} / ${G}%`, class: "custom-progress systeminfo-progress" }, null, 8, ["percentage", "color", "format"]) ]), _: 1 }), o(V, { label: "操作系统" }, { default: n(() => [ p(b(a.value), 1) ]), _: 1 }), o(V, { label: "服务器运行" }, { default: n(() => [ p(b(g.value), 1) ]), _: 1 }), o(V, { label: "PHP版本" }, { default: n(() => [ p(b(m.value), 1) ]), _: 1 }), o(V, { label: "Swoole版本" }, { default: n(() => [ p(b(u.value), 1) ]), _: 1 }), o(V, { label: "MySQL版本" }, { default: n(() => [ p(b(f.value), 1) ]), _: 1 }), o(V, { label: "Redis版本" }, { default: n(() => [ p(b(A.value), 1) ]), _: 1 }), o(V, { label: "SunAdmin版本", span: 2, "class-name": "sunadmin-version-label" }, { default: n(() => [ p(b(I.value), 1) ]), _: 1 }) ]), _: 1 }) ]); }; } }, ao = /* @__PURE__ */ L(io, [["__scopeId", "data-v-76c14994"]]), ro = { class: "home-center-container" }, co = { class: "welcome-animation-container" }, uo = { class: "welcome-text" }, mo = { __name: "index", setup(t) { const e = D(), i = U(() => `你好, ${e.username || "管理员"}!`), c = M("欢迎回到后台管理系统,祝您工作顺利"); return (l, a) => { const g = s("el-icon"), m = s("el-divider"), u = s("pageViewContainer"); return d(), C(u, { showHeader: !1 }, { default: n(() => [ r("div", ro, [ r("div", co, [ o(g, { size: 72, color: "#f59e0b", class: "welcome-icon" }, { default: n(() => [ o(Ke(re)) ]), _: 1 }), r("div", uo, [ r("h1", null, b(i.value), 1), r("p", null, b(c.value), 1) ]), o(m, { class: "custom-divider" }), o(ao) ]) ]) ]), _: 1 }); }; } }, go = /* @__PURE__ */ L(mo, [["__scopeId", "data-v-85eb474e"]]), ho = { path: "/", name: "home", meta: { title: "首页" }, component: go }, ke = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF8AAABfCAYAAACOTBv1AAABWGlDQ1BERUxMIFUyNDE1AAAoFa3BTSgEYQCA4ffzE1mHVZNy0VdKKb+DnNeS1JZtWpmZHIzZsdSyX7NTfnJycldObsrZiRyUA44uis1Zctpiax3Yxlo5KSfPA3Wao1S2AVhdC3xjalyali2bnhAI2tGIOG5exZLJBFWxZDLBL+U7BFW3fY5S2cPX4kDH48z8VWfr1tlOZZu/taS9vAt8AJ6r/ABEGuhaD1QAYhfQfNOyQRwAWsa0bBDHgLZoWjaIS0DzU0YcRAGIustOGsQz0LuYMuIgCkA0kzLiIApANO3lXb5FJiYTCTmrjwyN8u8CbyOgKp5Tm/5KZjmQMaWynpxec/t7pT6o62BatqSmVEAAor3ZtGxJTe4Fxm6Aa9OyJTULe3BSBO3NtGxJTbcBbRNwrpTjO/wQ5Yb80rDOFxE5hcb9MCzNQVMPVO7D8P00DCtHUP8AF+VPLI9hXJ4GaSoAAAAJcEhZcwAACxMAAAsTAQCanBgAAAXxaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA2LjAtYzAwNiA3OS5kYWJhY2JiLCAyMDIxLzA0LzE0LTAwOjM5OjQ0ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjIuNCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjItMDEtMDJUMDA6MDg6MDkrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIyLTAxLTAyVDAwOjE1OjQ2KzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIyLTAxLTAyVDAwOjE1OjQ2KzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9IkRFTEwgVTI0MTUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OGIwNzFjOGUtZDkyNC00NjhlLTliOWQtMTQyYmI0NDIwZGYyIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ODA3ZWUyZDctMjE4Ny1jZjQwLWEyZTAtMGFjZWU2NTMwOGJiIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6Y2U1YWJjMDUtMzRiZS00OTU1LWJlNjgtMDA2NzVhZDk3MjBkIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZTVhYmMwNS0zNGJlLTQ5NTUtYmU2OC0wMDY3NWFkOTcyMGQiIHN0RXZ0OndoZW49IjIwMjItMDEtMDJUMDA6MDg6MDkrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMi40IChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4YjA3MWM4ZS1kOTI0LTQ2OGUtOWI5ZC0xNDJiYjQ0MjBkZjIiIHN0RXZ0OndoZW49IjIwMjItMDEtMDJUMDA6MTU6NDYrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMi40IChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PozZq9MAABSPSURBVHgBzcG7r615ntjl5/Nba5+69a2me9yai8c2nranx4ONLLDsMRoSZwQkxCQ4RiLBsoS4ZEZE/AMQAQERMnLggAwhRIBAMhdLBMAAQsPYnma6u6rOXu+Xd621z2XXOaf77F1Vp/p5jjPjX/zb/+F/8yf+zG//+eP2vsO8p523MsZpxmabT2eb0zZOZsf4WbIsq9VNy03LslrVSnI2M8fZzDS3bpijmzn4+FufvP+//I9/77//T/79v/M3vv0bv/Gr//K/+m/9vQ++99u/XGM5OfSUtjaMhXBg1lAzpslshjE778DTxdP31vHHf/B//uF/+rf+hT91/Ff+vb//v/3WX/2Xfv0PT+9tTjdsh/EAOdvUreaETbPzsyUJh3JANlSeyTTbjN3myGa2E6cPfnz441Of2W4/6ck3v3v48E9+Yz74U09uo3XbwVO1OS1m7BZiFjJDW2PMGDPeie14WD5Y6/vf+VO/9rf+4z/49Pjdj3/4S589/fbMQcPMMB5q4YmQ3bL8PGNC2MZFmHFnpNmMkU+Xi9K2Jv3UzB8+/e4Pfu/pe+999N7cWJ+ebMcnx8VRTrY1thkX07Ais5loNmMY4104tWy35qe3s310/OY6fvKp25vN3By1lmxmG28tFKVC5K1kMEwYs814rjHjYjCunp5sW9vhsOZgd3v69KfT5oTbk81JTJhtm8aMq8y22c3QxBjGjPEOnKrbre1Jraen2zkeDodlM+ukxkzCeEtjl+xC3l4hZpDaZjyTMMuY4SCDdbRW41DLbq3543FrYuEmrYkOWYU8MzlLsht5h05haJtp6TgohdmYMcZDTUMheQu5E8ZuSF6SF7JLdiuOyi5nozw3uZNnGuO58XVIZoxqFsfNWEvFNqbxYA0NDTIeYPJC8rKURquiaDPJYXIWQmklu4nBSIYxfkGUlKmO5GwG44sbD5efoUIx4xXpYFesg+UXWcKUlOMYM2bGxVryEGPcmfEw+dnGID/HjBFreYCUR5sZD1EpGopVjrO7Pc1MuyUPlVyNPFwyxkvKRSo5C+Ui5KoOxy1asuRnaOdOyOPMmMpDhcPSSq06mgtK0XiUIY9UInJfroYwdrkI9a2+95t/8WZE7mvCIM/kalyMR0oeaUVxe3u7HTdDmUFMHm88SiG7PNOQXRIxYUubq5kfzfd+8LtP14w2F1towww5a1VDuQrjnSqkXI1xbB2amJjkERojyqOUfE7ReC4aRrQ6W/WtfukHv3Nrl120JHfSuJjIS/JOTRp34sNvfHjcHQ6rM4o8QjKMRxiTny8MxlVjI6YPptpi7EKD0YwpSWl8zfLc7e3tHG9ujoctIl9EHqVkvF7khUUnxj0ZxlkqKWcJORuUr025GkpPnz7djofDYU3IRR5vPE65J1eNV4RKtSh3CiF3QvJCvjzjizkej+u4VklFyOOM3Xic5CWDXIyXjIsm1KLsMlpqM4V2aIzxXPlSDBoPEiYZY9fK0cUgkjGSBwoxHmGi3DdInhkXk1G0Yi2GVKwlSyQjki9ddnmwYsXEyebIYKjEUFEeZpB8SSaMi+xyNS5GzmYcS2upQS6Ss3z5xuOMXdJ4uj2dI4MhhFxM3lpD+ULGa0TjuRAxRmjZlUQxxtlIXsiXY/LFLGo6Ho6OdpVcZRd5gFw0Hmxi7MYrxi5yNXZhZZzNVm5bqTDKLoZykavy5UkeoZg2P/r0/9uOihDZRXbJWwqNkYdLYfJ2xkwaOavc3ByPm12eKxoX5Sr5gnI1Hi4MZm0cdTytadZUhJLXqLxJziZjfIlCXsjnzWZ3WIc2zFBeLyVfWB4vFzN8+NFH6zgHTZRCK4+Tkkcqrxpy32paLbNzVlrlTquMqwiJfKnKg407Y5fjdqBDO5TxOMV417bR/HSaJibGUMKMq5BXlEfJ44RtWC1r2xwH2RV5o+zyRjMYjzZeVe6Ms5HBtBnbxswYg3HVCjEUeaF8bcbVCi3FcVIrK8TMEGHGc4PkjUIeZTNeZ9CMjLPNwWlysjl1MvNH893f+uu+mI28nQl5qLHL1biYxnFbo4ZcFGKcjRm7cZU3Kg+R3WRyZ7xW42UN1ijLbnJiRohpnCWGQcvF+LxxNd5KHi86GzYzYxwdV61kl5RxZ5ids2FyUfKKQd7WoFxkvEljGGe5yq7JboxpsrDUEsMYk+xyT8nL8nbGF5OLksWx0qoZCrkoZnJQM2NmPFP54nKWs7xJKVcbGiOq5WJuRWmtptypFcZIXpbPyVsp5LGyC2WtHP0M5U4qZ+W1ZnwBeZOQq9BQIa1v9e0/99sqK4rKc4Mk9+ROuRpvJ8ajFTOeO3qd3FMuyhsV44HGz5XxTGipWMtBWE6ShdE0zhJ5vbxQyFsZ5AsJFXL0eY2zykPlgfJzjNwXWpTm9KP5zl/4q2m0aGjluaFB7imPky9myK4UR3cKkchrla/EGBeT+3KWcTYIiVrdfLvv/PnfXl1QlOdCeb28cyGMq6OXZBfl9fKVyFleJ2c5C0VlrZqnfzTf+Z2/RhFyX97SeBemGAaDY1cKIYS8Q7nIK5KMs21YsQ5Zax3spq0xBhMtF6Hxdsq7kF2sxTrk2EpRiBZjl69dyFnOVgzCWg52nS1aNLRcNIj84hhMrDWmcSS5KgpRvlrjnvGqkPtCZa3D8nlRLorGL5TBLKyhk+Naq3VghhaWi8lXqjw3Q16VO8NgQljUYbkzxkRRLkKuxm68Ku/UYBpjc3a0IooJMTG+WqFxtTCs8VoTg1nMooVZnmtq0VBeNcgryjuV3XK1luNWtkUxMctV3s64GI+TXd7KhFCSs82BFos1rDCuYobyi2Exi5HDgeO2lm1RTFjkAWIwHq5hXGWXN5pxERJjs9vmsMbSoo2FMMOEGMOMr1OlmBhjrRwnZjF2IcbDjKvBeDu5CstVkd24Z8NgFsVhTm5Op7F7Mp/erp6aRbFw3Jj4rDHGGIzPyztUpigXK8dtZXIxIY8yGEzeSkM4uAq5k4uQOzEIazY32zZ2B5+q2yYXDQfMDG3GmBlyT3bjnRmDZcoMyvH29taTJwfrwNjlwcYL4+1NbMPEYMZFuQgrNruxG7Py6e1TP8nY/bil926axdNhw+2cTOO0sZWZRV4YQt6hYZtlNtbhxul06/jtJ8tH73NYLsYjxGBivKVh2Q0hZDeeW3a52OZkM+Zw9P5nee+D9z+0e3p7+vSbHzzJR3l6GMvg4GwGw3hVaLxT24FT3Bxy4+D4v/6X/9k/eHLYbt4/zk0dq7XaeZChaYyr8fNl7MbYzZjdZnfati200262OWzbbK2e9sR3jp89+b/+h//6v+Bv+vaPf/rj//nv/93/bj7+tV8+9Amd+rQbM83xdLu1zTZjfE7Iuzfy5L3j+7dz2o7/+b/9b/zezP/9j+w6fHyY0z8+eYT6Vg7HpRlvpVzMmGFmzJjtR+MN6lvx4bf46Y9m/mjs/t///R/+BH+5/sRH1tNP5vSPT733vRtjefrZZzM/Gr9g6uODdTge+9M//Bsf/Nl//vffX6c//KXf/OHtL//wr5/o4IF++Yd/6ZQO3tLY5cSYTie7wfd+53ddpMEa08ws47t/4S/20z76kx/Oj/+P7//6r//B//P7v//Jx0++u97/td/8wUd/5oe/8f6Tz/6n7/72Xzm99+d+eNzqcJzb00f/9F8zMye72ZmLLeQdmRbruLb10QeH97/1/b/0uzefjpvjv/bv/J3/6Jc//ub7T9apTz/7ZGuVR5hpxni4oZNM7gwzdqkxUU5z6th2840+Pn7WP/yv/u4/wO98+Cvf/+hv/u1/8799/1d/8xsHn9LJ7fGJbdWak4xtZuxmxtnMaLxTWdoODt1Yhyc9PW1z9Kd/68Pbjz8yi89uHVoeZcNgPEw4ODHumRiMTGPNyYjjjenHbr//q9+3+0cff+OXnv5TP/jm6Vd+4DAstCImF9vIbrZxNjPyDk3CFutJTp+Mb39Yx6c3R//kKccjDojyMDGYXIy3t3CYA+OeGTZMjLODs/DJ7cl2e3trN8ftvZ/MNu+9Vz/9ZBxxPI2zLSZmGLth7CZ5t8IJt7fjuHgPx9bJ8WaslbEL2Y23FhqVQXlrDW2ImcGYQUuTcTWDYS0+OCzf8HTZPZlPT8c1TWyDOAwNTw8YF9nlKkLjnRlMLsZmOjiuSZPsQq7K1Xgba/LMjLeWjGdyNUg4bmNwK+OZmMbuacc1JVfFtshuebNBHmXsxoMVh+Eg4XiQhoVxNbnKLj/XsIbGgw22XOVOZgjH2TC2jraQXcjZbTdLB4YVFidk17jKK4bxSIM8yAzhBksWjjrhqWnh4FXjhbzJLI+W3LdJGLOGYWJiQnY5O842NythHZBdRAjbeG5m5AvKg4Qku2Fh4cjJdIulDoQY0XghJq+17MbkwTKaDeOZ7MoMJuOqkHsOY44xOBR5oRHyQr4cM+NtDWpkaQjFsbJklcqEyK6M3YyLBnmtUr4c2S0LaxszrJiVsZuQV0QoiuQsjKsxvhTlIQYzsWjG2XG1rLKKhZDPyc8V5REiu9wzMYgkDELlmdWFiaIIRXI2kTubr03R0JbiuEorxSBXYxfZZZeL8W5EWDJYdjHjnrxZGJ9TvjbjIlfHSqUiNneyG4wX8kb5gsbLcpZnikNsWJMXRo17ck8Yz4yvR87Kc0e77BpnazF5IVeTGeS1yheTFyZL8sKKwYoMxlmrQ9FijYsilKvxNctzg1wca1SyWEzIbjCea5DXyRcxNBjPNcxykV0uomijZHcgRUyEkKvscjFD5euyEMrFUScMlrOJaWjcN8zG5PNGmjxKduNVY0pDa5DJVUOT3Rpjt8VEWFiYXMy4KF+ros1FcZRdLqKY7MbnFWOQ+0Ylj5RXNDQUI8XCoJJx0aQh5GrcF2Fc5Wsy7jlWWlkrW0wkI69TXhHyBWQ3nhsUxlmoDIoGuTPCii1CyK4xEgaNq3wtQlEujqusUhTZ5YFiyCMUck+EJIyEQqzSzm7G2LVoI2Q3JGKGMLnIL4bjWktrWQuLycXI22ooyuOUz2uWkKsiTGRp52zmZFe0MIQwuShX46Jc5d0ZQrkojlY60KJFrpb8fOOiLOQRYoaRizDIxbiaGLtQVHYpu+wiDLKLXA1yJxfl3RgmZmhh0YGjMjELiwYx4wEGeazK2eQqDMK4KLILK3NouVieKYTBEMZr5GK8I2FoMcPhiDjqRiuzGEyMXWS8kFflZeOxxmDykhjKRVjYYms8PUx2t61lZS3a7EYiF2HGVV6I8W5kN8ywDcdFcRzZhvLcDBpmyNXY5U3GYw2NwXhJdjFeMXFKdqfKLoyzjQ5mXIUIM54bTH6uUO6ZYTzAUIgZ1pEOHKfNrJRdDC1X5bnsBvnyRe6bXER2w8RgYvKKaWSMkTwTBuWFyOMUeYCYGRcLKx04ViraEGHGROM1xjsThrHLRVFpZ7dqFUVCErkaF2HGPeVLN3YzPq/sUqNFi6PnIgxWsovGu5F7QsidQcg9C4loGFe5kxfGxSC7fOlyljepFOEoF8XEYHLRMHl3cpH7wuS5sMbFQlFYhOzGq5aLMCFvlMcZjJ9hYdHimBSKkBci717IVdEgBg1LDtPYHWgZY9cYw4zKYLwkL+TNYjxe47UG2zAxcRQilIvBDCvvxLjKS6KhQUwIg4bJ2UJFjJCX5Q1ifEXys4XFsRJy1SCKjK/aeL0RsQzDNGYtsyGSe3IxYSNvNii78VWY8XoxmDI4eslglotxlnzVRnZ5YVyEMI1po0UsOWyN3RgWs5hQxIxXzHhuYlyVXb40M14vY7OVwTEpCotiEPLVSxj3hCHkbLTGrNGkYU3OJmtrOLjYsMVyldfIRXnJ+LKUz4lhYjYmJo5ylYtixsXY5SvVuMjnhLELOQvjvi1tdrFhYoZB455yMb4GecWRQc6KcSd3xheX8kZNGJXPy1kqU4Sxy9k2c9oaa7mTWbER8sKM5wrlqzAz3saRW7oxISYX5U5eNjOuUn6m7MbVuC8G5SL5vKJIWmlhY5U65LmMO+XrVnmdwua5o3VrWrSQs/J6kbxWrsY9eVWuNoSJQeOivDCMs4xdTCGvE7KLcd+Mi3En78Z4bhoXcTz5zKED27AOyETRuJg8N2hclOc2Z6MwuRhyVV6xMNkNk1eEGLsVMZEsx+xCCNmNi7FrjBdmjZcl70QuJqbNdDDlqJNZm1nJCMlzeW6Mq7xsshtmjF00EYaQF7KLDWMXZiifN67GLoTschYaQhhXYXLfeCHGuzWGxsTgWCezNtthOdhUWJqEsGGMGs9kV8YzYxpnzdBiKHfyeoMhjKvyqkHKnYOz6lARuSoXycsmX7+GhcWx7KJUGkTIVXYxrrIrZ8W4alwVQ0gucjXkhWJclV2eyetVKs9F7kQov3jC5Kw4KkVSeaZoGHdKmEE5KwaFyeSiSSW7cZE7+ZxkKMZFeWH8TNWqFLkTDXLPTL5OoSgXxxoHLKMZtVyNizAxKIyXhZmR0bgIzWjyeuMsORsxdrlvaFzFeGFyloO1MoURcjWu8oujlqI4arOMLCPjmTENoozd2KW8ZJjBMISGhKE812AwZnI2kynZRV7SYDNjdzReUs6Wm3U4HJwiYYQw7itfq0otlXC8WTe+8dFHfvrpON7k09vNYMvFxGk2BsMqm6uiGYyZYTYz1LJanqmM8cwW0zgNYzTILgrjmc04xVNjmxQOLurb/fo/95efPlkHT2/49JNbGnUUDq7GVa5mfC0mxlIYjk9/8hM33/uun2ycbkc2Z2O3WCu1ZLeNOZ2YUTmrsXIxk4acjbOZDXku1sJatBjWtjmdNmzIWag4ZK0DlhM++3R8dhobZv5ofuWf+b0/XuXpp+N4iHLYsoaFmTGuJheV8ijl0Q5xuh1HnD4Zx3/3z/5G/8Ef/JP56JvfNovpYLIbE1NmXDWshLUOzpphxsyYwTZWkTs5rOW5orHJNoxdw4FaVnkhs9jkOJyGJ0c+vMl6/4Obnnz/o1//K//s9588ufHx+/nMwWlosBFGttwzM74Ox8l3nmT9ZPzr3179/33O0QUuZRSvAAAAAElFTkSuQmCC", fo = { setup() { const t = se(), e = D(); return { router: t, accountStore: e }; }, data() { return { butLoading: !1, loginInfo: {} }; }, created() { X.disconnect(); }, methods: { loginClick() { this.butLoading = !0, this.loginInfo, this.accountStore.login(this.loginInfo.username, this.loginInfo.password).then((t) => { if (t.code !== 200) throw new Error(t.message); this.router.push("/"); }).catch((t) => { S.error(t.message); }).finally(() => { setTimeout(() => { this.butLoading = !1; }, 200); }); } } }, po = { class: "animated fadeIn login_body column" }, Ao = { class: "login-input-k column" }, _o = { class: "input-k column" }; function yo(t, e, i, c, l, a) { const g = s("el-button"), m = s("StartLoading"); return d(), _("div", null, [ r("div", po, [ r("div", Ao, [ e[5] || (e[5] = r("img", { src: ke, class: "logo" }, null, -1)), e[6] || (e[6] = r("p", { class: "title" }, "用户登录", -1)), r("div", _o, [ r("div", null, [ e[2] || (e[2] = r("span", { class: "iconfont icon-yonghuming" }, null, -1)), O(r("input", { placeholder: "用户名", "onUpdate:modelValue": e[0] || (e[0] = (u) => l.loginInfo.username = u) }, null, 512), [ [ue, l.loginInfo.username] ]) ]), r("div", null, [ e[3] || (e[3] = r("span", { class: "iconfont icon-tianchongxing-" }, null, -1)), O(r("input", { type: "password", placeholder: "密码", "onUpdate:modelValue": e[1] || (e[1] = (u) => l.loginInfo.password = u) }, null, 512), [ [ue, l.loginInfo.password] ]) ]), o(g, { type: "primary", onClick: a.loginClick, loading: l.butLoading }, { default: n(() => e[4] || (e[4] = [ p("登录") ])), _: 1, __: [4] }, 8, ["onClick", "loading"]) ]) ]) ]), o(m) ]); } const vo = /* @__PURE__ */ L(fo, [["render", yo], ["__scopeId", "data-v-1278ac6b"]]), bo = { path: "/login", name: "login", component: vo }, Co = { props: { dialogWidth: { type: Number, default: 500 }, menusList: { type: Array, default: () => [] } }, watch: { show(t, e) { t || (this.menuItem = JSON.parse(JSON.stringify(this.menuItemDefault))); } }, created() { Object.keys(this.menuItem).length === 0 && (this.menuItem = JSON.parse(JSON.stringify(this.menuItemDefault))); }, computed: { valueLabel() { switch (this.menuItem.type) { case "menu_group": return "路由地址"; case "auth": return "权限控制"; } }, _menusList() { return [ { name: "顶级", id: 0 }, ...this.menusList ]; }, menusStore() { return P(); } }, data() { return { show: !1, menuItem: {}, menuItemDefault: { show: 1, sort: 1 }, saveLoading: !1 }; }, methods: { selectIconChange(t) { this.menuItem.icon = t; }, save() { this.saveLoading = !0, this.menusStore.editMenuItem(this.menuItem).then((t) => { if (t.code !== 200) throw new Error(t.message); S.success(t.message), this.$emit("editSuccess"), this.show = !1; }).catch((t) => { S.error(`编辑失败,${t.message}`); }).finally(() => { this.saveLoading = !1; }); } } }, ko = { key: 0 }, Io = { key: 1, style: { height: "50px" } }, wo = { class: "dialog-footer" }; function Eo(t, e, i, c, l, a) { const g = s("el-radio-button"), m = s("el-radio-group"), u = s("el-form-item"), f = s("el-cascader"), A = s("el-input"), I = s("el-input-number"), h = s("iconSelect"), w = s("el-radio"), E = s("el-divider"), v = s("el-form"), y = s("el-button"), x = s("el-dialog"); return d(), C(x, { modelValue: l.show, "onUpdate:modelValue": e[8] || (e[8] = (k) => l.show = k), "destroy-on-close": "", draggable: "", title: "编辑菜单", width: i.dialogWidth }, { footer: n(() => [ r("div", wo, [ o(y, { onClick: e[7] || (e[7] = (k) => l.show = !1) }, { default: n(() => e[12] || (e[12] = [ p("关闭") ])), _: 1, __: [12] }), o(y, { icon: "Check", type: "primary", onClick: a.save, loading: l.saveLoading }, { default: n(() => e[13] || (e[13] = [ p(" 保存 ") ])), _: 1, __: [13] }, 8, ["onClick", "loading"]) ]) ]), default: n(() => [ o(v, { "label-suffix": ":", model: l.menuItem, "label-width": "auto", "label-position": "right", style: { background: "#fafafa", padding: "15px 10px 6px 10px", "border-radius": "5px" } }, { default: n(() => [ o(u, { label: "菜单类型" }, { default: n(() => [ o(m, { modelValue: l.menuItem.type, "onUpdate:modelValue": e[0] || (e[0] = (k) => l.menuItem.type = k) }, { default: n(() => [ o(g, { value: "menu_group", label: "菜单组" }), o(g, { value: "route", label: "页面路由" }), o(g, { value: "auth", label: "权限控制" }) ]), _: 1 }, 8, ["modelValue"]) ]), _: 1 }), o(u, { label: "上级" }, { default: n(() => [ o(f, { placeholder: "请选择", props: { label: "name", value: "id", checkStrictly: !0 }, style: { width: "220px" }, modelValue: l.menuItem.cascader_path, "onUpdate:modelValue": e[1] || (e[1] = (k) => l.menuItem.cascader_path = k), options: a._menusList }, null, 8, ["modelValue", "options"]) ]), _: 1 }), o(u, { label: "名称" }, { default: n(() => [ o(A, { modelValue: l.menuItem.name, "onUpdate:modelValue": e[2] || (e[2] = (k) => l.menuItem.name = k), placeholder: "请输入", style: { width: "220px" } }, null, 8, ["modelValue"]) ]), _: 1 }), o(u, { label: "排序" }, { default: n(() => [ o(I, { modelValue: l.menuItem.sort, "onUpdate:modelValue": e[3] || (e[3] = (k) => l.menuItem.sort = k), precision: 0, min: 1, max: 1e3, style: { width: "115px" } }, null, 8, ["modelValue"]), e[9] || (e[9] = r("div", { class: "form_item_desc", style: { "margin-left": "8px" } }, "*数值越小越靠前", -1)) ]), _: 1, __: [9] }), l.menuItem.type != "auth" ? (d(), _("div", ko, [ o(u, { label: "图标" }, { default: n(() => [ o(h, { onOnChange: a.selectIconChange, defaultValue: l.menuItem.icon }, null, 8, ["onOnChange", "defaultValue"]) ]), _: 1 }), o(u, { label: "状态" }, { default: n(() => [ o(m, { modelValue: l.menuItem.show, "onUpdate:modelValue": e[4] || (e[4] = (k) => l.menuItem.show = k) }, { default: n(() => [ o(w, { value: 1, style: { "margin-right": "10px" } }, { default: n(() => e[10] || (e[10] = [ p("显示") ])), _: 1, __: [10] }), o(w, { value: 0 }, { default: n(() => e[11] || (e[11] = [ p("隐藏") ])), _: 1, __: [11] }) ]), _: 1 }, 8, ["modelValue"]) ]), _: 1 }) ])) : B("", !0), l.menuItem.type && l.menuItem.type != "menu_group" ? (d(), _("div", Io, [ o(E, { "border-style": "dashed", style: { margin: "10px 0" } }), o(ee, { name: "transition1" }, { default: n(() => [ l.menuItem.type == "route" ? (d(), C(u, { key: 0, label: "路由地址" }, { default: n(() => [ o(A, { modelValue: l.menuItem.route_path, "onUpdate:modelValue": e[5] || (e[5] = (k) => l.menuItem.route_path = k), placeholder: "菜单所指向的页面路由地址", style: { width: "220px" } }, null, 8, ["modelValue"]) ]), _: 1 })) : B("", !0) ]), _: 1 }), o(ee, { name: "transition1" }, { default: n(() => [ l.menuItem.type == "auth" ? (d(), C(u, { key: 0, label: "权限标识" }, { default: n(() => [ o(A, { modelValue: l.menuItem.auth_tag, "onUpdate:modelValue": e[6] || (e[6] = (k) => l.menuItem.auth_tag = k), placeholder: "控制dom节点的权限标识", style: { width: "220px" } }, null, 8, ["modelValue"]) ]), _: 1 })) : B("", !0) ]), _: 1 }) ])) : B("", !0) ]), _: 1 }, 8, ["model"]) ]), _: 1 }, 8, ["modelValue", "width"]); } const So = /* @__PURE__ */ L(Co, [["render", Eo], ["__scopeId", "data-v-1d741caa"]]), Bo = { components: { editTem: So }, data() { return { tableLoading: !0, expandRowKeys: [], tableAllOpen: !1, tableData: [], searchOption: [{ componentsName: "el-input", label: "名称", value: "", key: "name" }, { componentsName: "el-date-picker", label: "名称", value: "", key: "name" }] }; }, computed: { menusStore() { return P(); } }, watch: { tableAllOpen(t, e) { this.expandAllRow(t ? "open" : "close"); } }, created() { this.getAllMenus(); }, methods: { delMenu(t) { this.menusStore.delMenu(t).then((e) => { if (e.code !== 200) throw new Error(e.message); S.success(e.message), this.getAllMenus(); }).catch((e) => { S.error(`删除失败,${e.message}`); }); }, getAllMenus() { this.menusStore.getAllMenus().then((t) => { if (t.code !== 200) throw new Error(t.message); this.tableData = t.data.tree; }).catch((t) => { S.error(`数据加载失败,${t.message}`); }).finally(() => { this.tableLoading = !1; }); }, tableRowClassName({ row: t, rowIndex: e }) { return t.isVague ? "vague" : ""; }, //展开 合并所有行 open / close expandAllRow(t = "open") { if (t == "close") { this.expandRowKeys = []; return; } let e = []; const i = (c) => { for (let a = 0; a < c.length; a++) { var l = c[a]; e.push(String(l.id)), l.children && Array.isArray(l.children) && i(l.children); } }; i(this.tableData), this.expandRowKeys = e; }, search(t) { console.log(t), this.tableAllOpen = !0; const e = (i) => { for (let c = 0; c < i.length; c++) { const l = i[c]; l.isVague = !1, l.name.indexOf(t.name) === -1 && (l.isVague = !0), l.children && Array.isArray(l.children) && e(l.children); } }; e(this.tableData); }, edit(t = null) { t && (this.$refs.editTem.menuItem = JSON.parse(JSON.stringify(t))), this.$refs.editTem.show = !0; }, getData() { this.tableData = [{ id: 1, name: "aa", type: "group", //group = 菜单组 route = 路由 dom_auto = dom节点权限 show: "1", value: "", isVague: !1, children: [ { id: 31, name: "bb", type: "group", //group = 菜单组 route = 路由 dom_auto = dom节点权限 show: "1", value: "", isVague: !1 }, { id: 32, name: "cc", type: "group", //group = 菜单组 route = 路由 dom_auto = dom节点权限 show: "1