mirror of
https://gitee.com/beijing_hongye_huicheng/lilishop-ui.git
synced 2026-08-06 02:47:29 +08:00
feat: 新增消息模板聚合接口及通知类站内信邮箱状态更新功能
- 在 setting.js 中添加了消息模板聚合分页接口和更新通知类站内信邮箱渠道开关的功能。 - 在 axios.js 中重构了 token 刷新和登录重定向逻辑,避免循环依赖。 - 新增 router-holder.js 文件以延迟持有 router 实例,优化依赖管理。 - 更新 util.js 中的动态路由管理逻辑,确保在无 router 实例时不执行相关操作。
This commit is contained in:
@@ -196,3 +196,13 @@ export const verificationPage = (params) => {
|
|||||||
export const getNoticeMessageDetail = (id, params) => {
|
export const getNoticeMessageDetail = (id, params) => {
|
||||||
return getRequest(`/setting/noticeMessage/${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}`);
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import { getStore, setStore } from "./storage.js";
|
import { getStore, setStore } from "./storage.js";
|
||||||
import { router } from "../router/index";
|
import { getRouter } from "./router-holder";
|
||||||
import { Message } from "@/utils/message";
|
import { Message } from "@/utils/message";
|
||||||
import Cookies from "js-cookie";
|
import Cookies from "js-cookie";
|
||||||
import { handleRefreshToken } from "../api/index";
|
|
||||||
import {v4 as uuidv4} from 'uuid';
|
import {v4 as uuidv4} from 'uuid';
|
||||||
|
|
||||||
// 统一请求路径前缀
|
// 统一请求路径前缀
|
||||||
@@ -23,6 +22,27 @@ const service = axios.create({
|
|||||||
timeout: 8000,
|
timeout: 8000,
|
||||||
baseURL: managerUrl
|
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;
|
var isRefreshToken = 0;
|
||||||
const refreshToken = getTokenDebounce();
|
const refreshToken = getTokenDebounce();
|
||||||
service.interceptors.request.use(
|
service.interceptors.request.use(
|
||||||
@@ -65,17 +85,7 @@ service.interceptors.response.use(
|
|||||||
break;
|
break;
|
||||||
case 20004:
|
case 20004:
|
||||||
case 401:
|
case 401:
|
||||||
// 未登录 清除已登录状态
|
redirectToLogin(data.message !== null ? data.message : null);
|
||||||
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");
|
|
||||||
}
|
|
||||||
return data;
|
return data;
|
||||||
break;
|
break;
|
||||||
case 500:
|
case 500:
|
||||||
@@ -109,11 +119,11 @@ service.interceptors.response.use(
|
|||||||
);
|
);
|
||||||
return service(error.response.config);
|
return service(error.response.config);
|
||||||
} else {
|
} else {
|
||||||
router.go(0);
|
const router = getRouter();
|
||||||
|
if (router) router.go(0);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Cookies.set("userInfoManager", "");
|
redirectToLogin(null);
|
||||||
router.push("/login");
|
|
||||||
}
|
}
|
||||||
isRefreshToken = 0;
|
isRefreshToken = 0;
|
||||||
}
|
}
|
||||||
@@ -135,7 +145,7 @@ function getTokenDebounce() {
|
|||||||
if (!lock) {
|
if (!lock) {
|
||||||
lock = true;
|
lock = true;
|
||||||
let oldRefreshToken = getStore("refreshToken");
|
let oldRefreshToken = getStore("refreshToken");
|
||||||
handleRefreshToken(oldRefreshToken)
|
refreshAccessToken(oldRefreshToken)
|
||||||
.then(res => {
|
.then(res => {
|
||||||
if (res.success) {
|
if (res.success) {
|
||||||
let { accessToken, refreshToken } = res.result;
|
let { accessToken, refreshToken } = res.result;
|
||||||
@@ -147,7 +157,7 @@ function getTokenDebounce() {
|
|||||||
} else {
|
} else {
|
||||||
success = false;
|
success = false;
|
||||||
lock = false;
|
lock = false;
|
||||||
router.push("/login");
|
redirectToLogin(null);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
|
|||||||
10
manager/src/libs/router-holder.js
Normal file
10
manager/src/libs/router-holder.js
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
/** 延迟持有 router 实例,避免 router ↔ util ↔ axios ↔ api 循环依赖 */
|
||||||
|
let routerInstance = null;
|
||||||
|
|
||||||
|
export function setRouter(router) {
|
||||||
|
routerInstance = router;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getRouter() {
|
||||||
|
return routerInstance;
|
||||||
|
}
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
import { getCurrentPermissionList } from "@/api/index";
|
|
||||||
import lazyLoading from "./lazyLoading.js";
|
import lazyLoading from "./lazyLoading.js";
|
||||||
import { router } from "@/router/index";
|
import { getRouter } from "./router-holder";
|
||||||
import Cookies from "js-cookie";
|
import Cookies from "js-cookie";
|
||||||
|
|
||||||
let util = {};
|
let util = {};
|
||||||
@@ -9,6 +8,8 @@ let util = {};
|
|||||||
util.dynamicRouteNames = [];
|
util.dynamicRouteNames = [];
|
||||||
|
|
||||||
util.clearDynamicRoutes = function () {
|
util.clearDynamicRoutes = function () {
|
||||||
|
const router = getRouter();
|
||||||
|
if (!router) return;
|
||||||
util.dynamicRouteNames.forEach((name) => {
|
util.dynamicRouteNames.forEach((name) => {
|
||||||
if (router.hasRoute(name)) {
|
if (router.hasRoute(name)) {
|
||||||
router.removeRoute(name);
|
router.removeRoute(name);
|
||||||
@@ -44,6 +45,8 @@ util.collectLeafRoutes = function (routes, result = [], parentPath = "") {
|
|||||||
|
|
||||||
/** Vue Router 4:动态路由必须挂到 otherRouter 下,且刷新/热更新后需重新注册 */
|
/** Vue Router 4:动态路由必须挂到 otherRouter 下,且刷新/热更新后需重新注册 */
|
||||||
util.registerDynamicRoutes = function (menuData, options = {}) {
|
util.registerDynamicRoutes = function (menuData, options = {}) {
|
||||||
|
const router = getRouter();
|
||||||
|
if (!router) return;
|
||||||
const { rematch = true } = options;
|
const { rematch = true } = options;
|
||||||
const pendingPath = router.currentRoute.value.fullPath;
|
const pendingPath = router.currentRoute.value.fullPath;
|
||||||
const pendingUnmatched = router.currentRoute.value.matched.length === 0;
|
const pendingUnmatched = router.currentRoute.value.matched.length === 0;
|
||||||
@@ -231,7 +234,8 @@ util.initRouter = function(vm) {
|
|||||||
if (!vm.$store.state.app.added) {
|
if (!vm.$store.state.app.added) {
|
||||||
// 第一次加载 读取数据
|
// 第一次加载 读取数据
|
||||||
// 加载菜单
|
// 加载菜单
|
||||||
getCurrentPermissionList().then(res => {
|
import("@/api/index").then(({ getCurrentPermissionList }) => {
|
||||||
|
getCurrentPermissionList().then(res => {
|
||||||
if (!res.success) return false;
|
if (!res.success) return false;
|
||||||
let menuData = res.result;
|
let menuData = res.result;
|
||||||
|
|
||||||
@@ -261,6 +265,7 @@ util.initRouter = function(vm) {
|
|||||||
// 缓存数据 修改加载标识
|
// 缓存数据 修改加载标识
|
||||||
window.localStorage.setItem("menuData", JSON.stringify(menuData));
|
window.localStorage.setItem("menuData", JSON.stringify(menuData));
|
||||||
vm.$store.commit("setAdded", true);
|
vm.$store.commit("setAdded", true);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// 读取缓存数据
|
// 读取缓存数据
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { createRouter, createWebHistory } from "vue-router";
|
|||||||
import NProgress from "nprogress";
|
import NProgress from "nprogress";
|
||||||
import "nprogress/nprogress.css";
|
import "nprogress/nprogress.css";
|
||||||
import Util from "../libs/util";
|
import Util from "../libs/util";
|
||||||
|
import { setRouter } from "../libs/router-holder";
|
||||||
import Cookies from "js-cookie";
|
import Cookies from "js-cookie";
|
||||||
import store from "@/store";
|
import store from "@/store";
|
||||||
import { routers } from "./router";
|
import { routers } from "./router";
|
||||||
@@ -13,6 +14,8 @@ export const router = createRouter({
|
|||||||
routes: routers,
|
routes: routers,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
setRouter(router);
|
||||||
|
|
||||||
router.beforeEach((to, from, next) => {
|
router.beforeEach((to, from, next) => {
|
||||||
NProgress.start();
|
NProgress.start();
|
||||||
Util.title(to.meta.title);
|
Util.title(to.meta.title);
|
||||||
|
|||||||
Reference in New Issue
Block a user