diff --git a/server/app/controller/menu.js b/server/app/controller/menu.js
new file mode 100644
index 0000000..c24de99
--- /dev/null
+++ b/server/app/controller/menu.js
@@ -0,0 +1,25 @@
+const Controller = require("egg").Controller
+
+const table = "sys_menu";
+
+class User extends Controller {
+ async list() {
+ const {ctx} = this
+ const result = await this.service.db.list("sys_menu", ctx.query)
+ this.ctx.status = 200
+ this.ctx.body = result
+ }
+
+ async info() {
+ const {ctx, app} = this
+ if (!ctx.state.user?.id) {
+ this.ctx.body = {code: 1, msg: "找不到授权用户"}
+ return this.ctx.status = 401
+ }
+ const user = await app.mysql.get(table, {id: ctx.state.user?.id})
+ this.ctx.body = {code: 0, data: user}
+ this.ctx.status = 200
+ }
+}
+
+module.exports = User
diff --git a/web/src/apps/AppMenu.vue b/web/src/apps/AppMenu.vue
new file mode 100644
index 0000000..588a0d7
--- /dev/null
+++ b/web/src/apps/AppMenu.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/web/src/components/sliderNav.vue b/web/src/components/sliderNav.vue
index cd01ae5..78054d9 100644
--- a/web/src/components/sliderNav.vue
+++ b/web/src/components/sliderNav.vue
@@ -4,7 +4,9 @@
-
+
+
+
@@ -19,11 +21,11 @@
@@ -95,4 +112,4 @@ export default {
}
}
}
-
\ No newline at end of file
+
diff --git a/web/src/utils/axios.js b/web/src/utils/axios.js
index 1fced06..6f74a10 100644
--- a/web/src/utils/axios.js
+++ b/web/src/utils/axios.js
@@ -35,6 +35,10 @@ ins.interceptors.response.use(res => {
console.error("服务器异常,请联系管理员!")
}
}, ({response}) => {
- if (response?.data?.error) ElMessage.error(response.data.error)
+ if (response.status == 401) {
+ mainStore().logout()
+ location.replace("/")
+ } else if (response?.data?.error) ElMessage.error(response.data.error)
+
})
-export default ins
\ No newline at end of file
+export default ins
diff --git a/web/src/utils/tools.js b/web/src/utils/tools.js
index f605881..0bbf401 100644
--- a/web/src/utils/tools.js
+++ b/web/src/utils/tools.js
@@ -3,7 +3,29 @@ import {mainStore} from "./store";
export const getToken = () => mainStore()?.token
export const $confirm = () => {
+}
+/**
+ * 数组转tree
+ * @param list 待转化的数组
+ * @param config 配置
+ */
+const $arr2tree = (list, config = {}) => {
+ const {key = 'id', parent = 'parentId', children = 'children'} = config, result = [], itemMap = {}, ids = list?.map(e => `${e[key]}`)?.toString()
+ for (const e of list) {
+ const id = e[key], pid = e[parent]
+ itemMap[id] = {...e, [children]: [itemMap[id]?.[children]].flat().filter(Boolean)}
+ const treeItem = itemMap[id]
+ if (!!pid && ids.indexOf(pid) > -1) {
+ if (!itemMap[pid]) {
+ itemMap[pid] = {
+ children: [],
+ }
+ }
+ itemMap[pid].children.push(treeItem)
+ } else result.push(treeItem)
+ }
+ return result
}
export default {
- getToken, $confirm
-}
\ No newline at end of file
+ getToken, $confirm, $arr2tree
+}