sunadmin-core
Version:
一句命令即可集成的通用后台管理系统框架(配套tp-swoole后端,同样是一句命令即可安装https://gitee.com/sunjinglong/sunadmin-server),便捷的更新方案,您可以随时更新sunadmin,而无需担心对您项目的影响
1,356 lines • 271 kB
JavaScript
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+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4YjA3MWM4ZS1kOTI0LTQ2OGUtOWI5ZC0xNDJiYjQ0MjBkZjIiIHN0RXZ0OndoZW49IjIwMjItMDEtMDJUMDA6MTU6NDYrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2Jl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", 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