From 93a9184bde5d9995cac8b404ea04c64417e68711 Mon Sep 17 00:00:00 2001 From: XingQue Date: Sat, 27 Jun 2026 01:38:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=90=8E=E8=A2=AB401=E8=AF=AF=E8=B8=A2?= =?UTF-8?q?=E5=87=BA=E5=8F=8A=E9=85=8D=E7=BD=AE=E9=A1=B5=E8=B4=A6=E5=8F=B7?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- src/utils/request.js | 12 +++++++++--- src/views/Layout.vue | 2 +- src/views/Login.vue | 1 + src/views/miniapp/MiniappConfig.vue | 12 ++++++------ 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/utils/request.js b/src/utils/request.js index 0bf71ba..03a73c7 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -34,9 +34,15 @@ service.interceptors.response.use( if (error.response) { const status = error.response.status if (status === 401) { - localStorage.removeItem('token') - router.push('/login') - ElMessage.error('登录已过期,请重新登录') + const data = error.response.data || {} + const detail = typeof data.detail === 'string' ? data.detail : '' + // 业务层 401(如 phone 校验失败)不踢登录,仅 JWT 失效才跳转 + const isBiz401 = data.code !== undefined || detail === '认证失败' + if (!isBiz401) { + localStorage.removeItem('token') + router.push('/login') + ElMessage.error('登录已过期,请重新登录') + } } else if (status === 403) { ElMessage.error('没有权限') } else { diff --git a/src/views/Layout.vue b/src/views/Layout.vue index 75f9055..efddbc5 100644 --- a/src/views/Layout.vue +++ b/src/views/Layout.vue @@ -215,7 +215,7 @@ const toggleCollapse = () => { } const currentTitle = computed(() => route.meta?.title || '客服终端') -const userPhone = ref(localStorage.getItem('username') || '未知账号') +const userPhone = ref((localStorage.getItem('username') || '未知账号').trim()) const stats = ref({ jinrichuli: 0, diff --git a/src/views/Login.vue b/src/views/Login.vue index 2f3e1d2..aafaa50 100644 --- a/src/views/Login.vue +++ b/src/views/Login.vue @@ -83,6 +83,7 @@ onMounted(() => { }) const handleLogin = async () => { + form.username = form.username.trim() if (!form.username || !form.password || !form.ip) { ElMessage.warning('请填写完整信息') return diff --git a/src/views/miniapp/MiniappConfig.vue b/src/views/miniapp/MiniappConfig.vue index 603f248..1dcb3bc 100644 --- a/src/views/miniapp/MiniappConfig.vue +++ b/src/views/miniapp/MiniappConfig.vue @@ -101,7 +101,7 @@ import { ref, reactive, onMounted } from 'vue' import { ElMessage } from 'element-plus' import request from '@/utils/request' -const zhanghao = ref(localStorage.getItem('username') || '') +const username = ref(localStorage.getItem('username') || '') const hasPermission = ref(true) const activeTab = ref('sys') const ossBaseUrl = ref(window.$ossURL || '') @@ -137,7 +137,7 @@ const fullUrl = (path) => { const loadSysConfig = async () => { sysLoading.value = true try { - const res = await request.post('/peizhi/xcxsyshq', { zhanghao: zhanghao.value }) + const res = await request.post('/peizhi/xcxsyshq', { username: username.value }) if (res.code === 403 || res.code === 1 && res.msg?.includes('权限')) { hasPermission.value = false return @@ -174,7 +174,7 @@ const saveSysConfig = async () => { if (!payload.weixin_official_secret) delete payload.weixin_official_secret if (!payload.weixin_shanghu_miyao) delete payload.weixin_shanghu_miyao const res = await request.post('/peizhi/xcxsysgx', { - zhanghao: zhanghao.value, + username: username.value, config: payload, }) if (res.code === 0) { @@ -194,7 +194,7 @@ const loadAssets = async () => { assetLoading.value = true try { const res = await request.post('/peizhi/xcxyzycx', { - zhanghao: zhanghao.value, + username: username.value, ziyuan_zu: assetGroup.value, }) if (res.code === 403) { @@ -228,7 +228,7 @@ const saveAssets = async () => { ziyuan_path: row.ziyuan_path, })) const res = await request.post('/peizhi/xcxyzgx', { - zhanghao: zhanghao.value, + username: username.value, items, }) if (res.code === 0) { @@ -246,7 +246,7 @@ const saveAssets = async () => { const uploadAsset = async ({ file }, row) => { const formData = new FormData() - formData.append('zhanghao', zhanghao.value) + formData.append('username', username.value) formData.append('ziyuan_zu', row.ziyuan_zu) formData.append('ziyuan_key', row.ziyuan_key) formData.append('image', file)