diff --git a/rc_autoplc_front/src/utils/request.ts b/rc_autoplc_front/src/utils/request.ts
index f8a18d3..ab58ed7 100644
--- a/rc_autoplc_front/src/utils/request.ts
+++ b/rc_autoplc_front/src/utils/request.ts
@@ -15,6 +15,7 @@ const TokenManager = {
setToken(token: string) {
const authStore = useAuthStore()
authStore.setToken(token)
+ isAuthExpired = false
// 同时设置默认请求头
request.defaults.headers.common['Authorization'] = `Bearer ${token}`
},
@@ -45,15 +46,23 @@ TokenManager.initToken()
// 登录过期提示防重复标志
let isLoginExpiredShown = false
+let isAuthExpired = false
+
+const isAuthExpiredRequest = (url: string) => {
+ if (!isAuthExpired) return false
+ if (!url) return true
+ return !url.includes('/user/login') && !url.includes('/user/register')
+}
// 处理登录过期(防重复提示)
const handleLoginExpired = () => {
if (!isLoginExpiredShown) {
isLoginExpiredShown = true
+ isAuthExpired = true
// 清除token
TokenManager.removeToken()
// 显示提示消息
- ElMessage.error('登录已过期,请重新登录')
+ ElMessage.error('用户信息过期,请重新登录')
// 跳转到登录页
router.replace('/login').finally(() => {
// 延迟重置标志位,确保跳转完成后再允许下次提示
@@ -149,6 +158,11 @@ request.interceptors.response.use(
return Promise.reject(error)
}
+ // 如果是认证过期后的后续请求,静默处理业务错误,避免弹出部门加载失败等页面提示
+ if (isAuthExpiredRequest(url) && errorMsg) {
+ return Promise.reject(error)
+ }
+
// 网络错误或其他错误
ElMessage.error(errorMsg)
return Promise.reject(error)
diff --git a/rc_autoplc_front/src/views/Login.vue b/rc_autoplc_front/src/views/Login.vue
index f927ac0..24793e7 100644
--- a/rc_autoplc_front/src/views/Login.vue
+++ b/rc_autoplc_front/src/views/Login.vue
@@ -12,7 +12,7 @@
:rules="loginRules"
class="login-form"
label-width="0"
- @keyup.enter="handleLogin"
+ @submit.prevent="handleLogin"
>
@@ -33,7 +34,7 @@
:prefix-icon="Lock"
show-password
clearable
- @keyup.enter="handleLogin"
+ @keydown.enter.prevent="handleLogin"
/>
@@ -191,54 +192,53 @@ const registerRules: FormRules = {
// 处理登录
const handleLogin = async () => {
- if (!loginFormRef.value) return
-
- await loginFormRef.value.validate(async (valid) => {
- if (valid) {
- loginLoading.value = true
- try {
- const response: any = await userlogin(loginForm.username, loginForm.password)
- const loginData = response?.data ?? response
- const token = loginData?.token || response?.token || loginData
- const permissions = Array.isArray(loginData?.permissions)
- ? loginData.permissions
- : Array.isArray(response?.permissions)
- ? response.permissions
- : []
- const roles = Array.isArray(loginData?.roles)
- ? loginData.roles
- : Array.isArray(response?.roles)
- ? response.roles
- : []
- const userInfo = typeof loginData === 'object' ? loginData : { token }
+ if (!loginFormRef.value || loginLoading.value) return
- if (token) {
- authStore.setToken(token)
- authStore.setUserInfo({
- ...userInfo,
- username: userInfo.username || loginForm.username,
- token,
- roles,
- permissions,
- })
- authStore.setPermissions(permissions)
- localStorage.setItem('username', userInfo.username || loginForm.username)
- localStorage.setItem('token', token)
- localStorage.setItem('permissions', JSON.stringify(permissions))
+ const valid = await loginFormRef.value.validate().catch(() => false)
+ if (!valid) return
- ElMessage.success(response?.message || '登录成功')
- router.push('/home')
- } else {
- ElMessage.error(response?.message || '登录失败,未获取到令牌')
- }
- } catch (error: any) {
- // 错误提示已在全局响应拦截中处理,这里不重复弹出
- console.warn('login error:', error)
- } finally {
- loginLoading.value = false
- }
+ loginLoading.value = true
+ try {
+ const response: any = await userlogin(loginForm.username, loginForm.password)
+ const loginData = response?.data ?? response
+ const token = loginData?.token || response?.token || loginData
+ const permissions = Array.isArray(loginData?.permissions)
+ ? loginData.permissions
+ : Array.isArray(response?.permissions)
+ ? response.permissions
+ : []
+ const roles = Array.isArray(loginData?.roles)
+ ? loginData.roles
+ : Array.isArray(response?.roles)
+ ? response.roles
+ : []
+ const userInfo = typeof loginData === 'object' ? loginData : { token }
+
+ if (token) {
+ authStore.setToken(token)
+ authStore.setUserInfo({
+ ...userInfo,
+ username: userInfo.username || loginForm.username,
+ token,
+ roles,
+ permissions,
+ })
+ authStore.setPermissions(permissions)
+ localStorage.setItem('username', userInfo.username || loginForm.username)
+ localStorage.setItem('token', token)
+ localStorage.setItem('permissions', JSON.stringify(permissions))
+
+ ElMessage.success('登录成功')
+ router.push('/home')
+ } else {
+ ElMessage.error(response?.message || '登录失败,未获取到令牌')
}
- })
+ } catch (error: any) {
+ // 错误提示已在全局响应拦截中处理,这里不重复弹出
+ console.warn('login error:', error)
+ } finally {
+ loginLoading.value = false
+ }
}
// 处理注册
diff --git a/rc_autoplc_front/src/views/devparam/index.vue b/rc_autoplc_front/src/views/devparam/index.vue
index 7d18884..4566a6c 100644
--- a/rc_autoplc_front/src/views/devparam/index.vue
+++ b/rc_autoplc_front/src/views/devparam/index.vue
@@ -86,25 +86,31 @@
-
- 下拉框
-
-
- {{ getFormTypeLabel(row.formType) || '暂无' }}
-
+
+
+ 下拉框
+
+ 下拉框
+
+
+
+ {{ getFormTypeLabel(row.formType) || '暂无' }}
+
+ {{ getFormTypeLabel(row.formType) || '暂无' }}
+
{{ getFormTypeLabel(row.formType) || '暂无' }}
@@ -236,12 +242,13 @@
/>
配置
+ 配置
@@ -259,11 +266,13 @@
/>
配置
+ 配置
@@ -371,10 +380,11 @@