diff --git a/manager/src/api/setting.js b/manager/src/api/setting.js index 43665c98..c021b57c 100644 --- a/manager/src/api/setting.js +++ b/manager/src/api/setting.js @@ -196,3 +196,13 @@ export const verificationPage = (params) => { export const getNoticeMessageDetail = (id, params) => { return getRequest(`/setting/noticeMessage/${id}`, params) } + +// 消息模板聚合分页(站内信 + 微信服务号 + 小程序) +export const getMessageTemplateAggregatePage = params => { + return getRequest("/setting/noticeMessage/aggregate", params); +}; + +// 修改通知类站内信邮箱渠道开关 +export const updateNoticeMessageEmailStatus = (id, status) => { + return putRequest(`/setting/noticeMessage/${id}/email/${status}`); +}; diff --git a/manager/src/libs/axios.js b/manager/src/libs/axios.js index 4113949e..af167735 100644 --- a/manager/src/libs/axios.js +++ b/manager/src/libs/axios.js @@ -1,9 +1,8 @@ import axios from "axios"; import { getStore, setStore } from "./storage.js"; -import { router } from "../router/index"; +import { getRouter } from "./router-holder"; import { Message } from "@/utils/message"; import Cookies from "js-cookie"; -import { handleRefreshToken } from "../api/index"; import {v4 as uuidv4} from 'uuid'; // 统一请求路径前缀 @@ -23,6 +22,27 @@ const service = axios.create({ timeout: 8000, baseURL: managerUrl }); + +function refreshAccessToken(token) { + return service({ + method: "get", + url: `/passport/user/refresh/${token}`, + }); +} + +function redirectToLogin(message) { + const router = getRouter(); + Cookies.set("userInfoManager", ""); + setStore("accessToken", ""); + if (router && router.currentRoute.value.name !== "login") { + if (message) { + Message.error(message); + } else { + Message.error("未知错误,请重新登录"); + } + router.push("/login"); + } +} var isRefreshToken = 0; const refreshToken = getTokenDebounce(); service.interceptors.request.use( @@ -65,17 +85,7 @@ service.interceptors.response.use( break; case 20004: case 401: - // 未登录 清除已登录状态 - Cookies.set("userInfoManager", ""); - setStore("accessToken", ""); - if (router.history.current.name != "login") { - if (data.message !== null) { - Message.error(data.message); - } else { - Message.error("未知错误,请重新登录"); - } - router.push("/login"); - } + redirectToLogin(data.message !== null ? data.message : null); return data; break; case 500: @@ -109,11 +119,11 @@ service.interceptors.response.use( ); return service(error.response.config); } else { - router.go(0); + const router = getRouter(); + if (router) router.go(0); } } else { - Cookies.set("userInfoManager", ""); - router.push("/login"); + redirectToLogin(null); } isRefreshToken = 0; } @@ -135,7 +145,7 @@ function getTokenDebounce() { if (!lock) { lock = true; let oldRefreshToken = getStore("refreshToken"); - handleRefreshToken(oldRefreshToken) + refreshAccessToken(oldRefreshToken) .then(res => { if (res.success) { let { accessToken, refreshToken } = res.result; @@ -147,7 +157,7 @@ function getTokenDebounce() { } else { success = false; lock = false; - router.push("/login"); + redirectToLogin(null); } }) .catch(err => { diff --git a/manager/src/libs/router-holder.js b/manager/src/libs/router-holder.js new file mode 100644 index 00000000..f79ca463 --- /dev/null +++ b/manager/src/libs/router-holder.js @@ -0,0 +1,10 @@ +/** 延迟持有 router 实例,避免 router ↔ util ↔ axios ↔ api 循环依赖 */ +let routerInstance = null; + +export function setRouter(router) { + routerInstance = router; +} + +export function getRouter() { + return routerInstance; +} diff --git a/manager/src/libs/util.js b/manager/src/libs/util.js index faf1b574..d5998aa2 100644 --- a/manager/src/libs/util.js +++ b/manager/src/libs/util.js @@ -1,6 +1,5 @@ -import { getCurrentPermissionList } from "@/api/index"; import lazyLoading from "./lazyLoading.js"; -import { router } from "@/router/index"; +import { getRouter } from "./router-holder"; import Cookies from "js-cookie"; let util = {}; @@ -9,6 +8,8 @@ let util = {}; util.dynamicRouteNames = []; util.clearDynamicRoutes = function () { + const router = getRouter(); + if (!router) return; util.dynamicRouteNames.forEach((name) => { if (router.hasRoute(name)) { router.removeRoute(name); @@ -44,6 +45,8 @@ util.collectLeafRoutes = function (routes, result = [], parentPath = "") { /** Vue Router 4:动态路由必须挂到 otherRouter 下,且刷新/热更新后需重新注册 */ util.registerDynamicRoutes = function (menuData, options = {}) { + const router = getRouter(); + if (!router) return; const { rematch = true } = options; const pendingPath = router.currentRoute.value.fullPath; const pendingUnmatched = router.currentRoute.value.matched.length === 0; @@ -231,7 +234,8 @@ util.initRouter = function(vm) { if (!vm.$store.state.app.added) { // 第一次加载 读取数据 // 加载菜单 - getCurrentPermissionList().then(res => { + import("@/api/index").then(({ getCurrentPermissionList }) => { + getCurrentPermissionList().then(res => { if (!res.success) return false; let menuData = res.result; @@ -261,6 +265,7 @@ util.initRouter = function(vm) { // 缓存数据 修改加载标识 window.localStorage.setItem("menuData", JSON.stringify(menuData)); vm.$store.commit("setAdded", true); + }); }); } else { // 读取缓存数据 diff --git a/manager/src/router/index.js b/manager/src/router/index.js index 60d22ff1..e996481b 100644 --- a/manager/src/router/index.js +++ b/manager/src/router/index.js @@ -2,6 +2,7 @@ import { createRouter, createWebHistory } from "vue-router"; import NProgress from "nprogress"; import "nprogress/nprogress.css"; import Util from "../libs/util"; +import { setRouter } from "../libs/router-holder"; import Cookies from "js-cookie"; import store from "@/store"; import { routers } from "./router"; @@ -13,6 +14,8 @@ export const router = createRouter({ routes: routers, }); +setRouter(router); + router.beforeEach((to, from, next) => { NProgress.start(); Util.title(to.meta.title);