From a3f920c3aa61a1bbbdf042163ea194f092ae466d Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Wed, 11 Mar 2026 12:12:18 +0800
Subject: [PATCH] feat: 退出登录
---
applications/task-work-order/src/components/third-register/main.vue | 4
applications/task-work-order/src/mac/lock.vue | 5
applications/drone-command/src/page/index/top/index.vue | 11
applications/drone-command/src/page/index/useGlobalWS.js | 7
applications/drone-command/src/utils/auth.js | 20 -
applications/task-work-order/src/axios.js | 17 -
applications/task-work-order/src/permission.js | 12
applications/drone-command/src/permission.js | 13
applications/task-work-order/src/page/index/useGlobalWS.js | 7
applications/drone-command/src/axios.js | 17 -
applications/drone-command/src/store/modules/user.js | 17 -
applications/task-work-order/src/store/modules/user.js | 11
applications/drone-command/src/components/third-register/main.vue | 244 ++++++++++----------
applications/drone-command/src/page/lock/index.vue | 197 ++++++++--------
applications/drone-command/src/utils/util.js | 63 +++-
applications/drone-command/src/mac/index.vue | 6
applications/task-work-order/src/page/lock/index.vue | 8
applications/task-work-order/src/mac/index.vue | 5
applications/task-work-order/src/page/index/top/index.vue | 9
applications/drone-command/src/mac/lock.vue | 5
applications/task-work-order/src/utils/util.js | 18 +
21 files changed, 325 insertions(+), 371 deletions(-)
diff --git a/applications/drone-command/src/axios.js b/applications/drone-command/src/axios.js
index 25102b1..037cee8 100644
--- a/applications/drone-command/src/axios.js
+++ b/applications/drone-command/src/axios.js
@@ -9,7 +9,7 @@
import axios from 'axios'
import store from '@/store/'
import router from '@/router/'
-import { serialize } from '@/utils/util'
+import { logOutFun, serialize } from '@/utils/util'
import { getToken, removeToken, removeRefreshToken } from '@/utils/auth'
import { isURL, validatenull } from '@/utils/validate'
import { ElMessage } from 'element-plus'
@@ -30,15 +30,6 @@
//跨域请求,允许保存cookie
axios.defaults.withCredentials = true
-function logOutFun() {
- store.dispatch('FedLogOut').then(() =>{
- const {VITE_APP_PARENT_SYSTEM,VITE_APP_ENV} = import.meta.env
- const isDev = VITE_APP_ENV === 'development'
- isDev
- ? router.push({ path: '/login' })
- : window.location.replace(`${VITE_APP_PARENT_SYSTEM}/#/login`)
- })
-}
//http request拦截
axios.interceptors.request.use(
@@ -115,11 +106,7 @@
const currentRouteName = router.currentRoute.value.name
// 如果当前路由不是登录页,则跳转到登录页
if (currentRouteName !== '登录页') {
- store.dispatch('FedLogOut').then(() =>
- router.push({
- path: '/login',
- })
- )
+ logOutFun()
}
return Promise.reject(new Error(message))
}
diff --git a/applications/drone-command/src/components/third-register/main.vue b/applications/drone-command/src/components/third-register/main.vue
index 64ce5a6..bcf46ee 100644
--- a/applications/drone-command/src/components/third-register/main.vue
+++ b/applications/drone-command/src/components/third-register/main.vue
@@ -1,129 +1,129 @@
<template>
- <el-dialog
- title="账号注册"
- append-to-body
- v-model="accountBox"
- :close-on-click-modal="false"
- :close-on-press-escape="false"
- :show-close="false"
- width="20%"
- >
- <el-form :model="form" ref="form" label-width="80px">
- <el-form-item v-if="tenantMode" label="租户编号">
- <el-input v-model="form.tenantId" placeholder="请输入租户编号"></el-input>
- </el-form-item>
- <el-form-item label="用户姓名">
- <el-input v-model="form.name" placeholder="请输入用户姓名"></el-input>
- </el-form-item>
- <el-form-item label="账号名称">
- <el-input v-model="form.account" placeholder="请输入账号名称"></el-input>
- </el-form-item>
- <el-form-item label="账号密码">
- <el-input v-model="form.password" placeholder="请输入账号密码"></el-input>
- </el-form-item>
- <el-form-item label="确认密码">
- <el-input v-model="form.password2" placeholder="请输入确认密码"></el-input>
- </el-form-item>
- </el-form>
- <template #footer>
- <span class="dialog-footer">
- <el-button type="primary" :loading="loading" @click="handleRegister">确 定</el-button>
- </span>
- </template>
- </el-dialog>
+ <el-dialog
+ title="账号注册"
+ append-to-body
+ v-model="accountBox"
+ :close-on-click-modal="false"
+ :close-on-press-escape="false"
+ :show-close="false"
+ width="20%"
+ >
+ <el-form :model="form" ref="form" label-width="80px">
+ <el-form-item v-if="tenantMode" label="租户编号">
+ <el-input v-model="form.tenantId" placeholder="请输入租户编号"></el-input>
+ </el-form-item>
+ <el-form-item label="用户姓名">
+ <el-input v-model="form.name" placeholder="请输入用户姓名"></el-input>
+ </el-form-item>
+ <el-form-item label="账号名称">
+ <el-input v-model="form.account" placeholder="请输入账号名称"></el-input>
+ </el-form-item>
+ <el-form-item label="账号密码">
+ <el-input v-model="form.password" placeholder="请输入账号密码"></el-input>
+ </el-form-item>
+ <el-form-item label="确认密码">
+ <el-input v-model="form.password2" placeholder="请输入确认密码"></el-input>
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button type="primary" :loading="loading" @click="handleRegister">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
</template>
<script>
-import { mapGetters } from 'vuex';
-import { validatenull } from 'utils/validate';
-import { registerGuest } from '@/api/user';
-import { getTopUrl } from 'utils/util';
-import { info } from '@/api/system/tenant';
-import { resetRouter } from '@/router/index';
+import { mapGetters } from 'vuex'
+import { validatenull } from 'utils/validate'
+import { registerGuest } from '@/api/user'
+import { getTopUrl, logOutFun } from 'utils/util'
+import { info } from '@/api/system/tenant'
+import { resetRouter } from '@/router/index'
export default {
- name: 'thirdRegister',
- data() {
- return {
- form: {
- tenantId: '',
- name: '',
- account: '',
- password: '',
- password2: '',
- },
- loading: false,
- tenantMode: true,
- accountBox: false,
- };
- },
- computed: {
- ...mapGetters(['userInfo']),
- },
- created() {
- this.getTenant();
- },
- mounted() {
- // 若未登录则弹出框进行绑定
- if (validatenull(this.userInfo.user_id) || this.userInfo.user_id < 0) {
- this.form.name = this.userInfo.user_name;
- this.form.account = this.userInfo.account;
- this.accountBox = true;
- }
- },
- methods: {
- handleRegister() {
- if (this.form.tenantId === '') {
- this.$message.warning('请先输入租户编号');
- return;
- }
- if (this.form.account === '') {
- this.$message.warning('请先输入账号名称');
- return;
- }
- if (this.form.password === '' || this.form.password2 === '') {
- this.$message.warning('请先输入密码');
- return;
- }
- if (this.form.password !== this.form.password2) {
- this.$message.warning('两次密码输入不一致');
- return;
- }
- this.loading = true;
- registerGuest(this.form, this.userInfo.oauth_id).then(
- res => {
- this.loading = false;
- const data = res.data;
- if (data.success) {
- this.accountBox = false;
- this.$alert('注册申请已提交,请耐心等待管理员通过!', '注册提示').then(() => {
- this.$store.dispatch('LogOut').then(() => {
- resetRouter();
- this.$router.push({ path: '/login' });
- });
- });
- } else {
- this.$message.error(data.msg || '提交失败');
- }
- },
- error => {
- window.console.log(error);
- this.loading = false;
- }
- );
- },
- getTenant() {
- let domain = getTopUrl();
- // 临时指定域名,方便测试
- //domain = "https://bladex.cn";
- info(domain).then(res => {
- const data = res.data;
- if (data.success && data.data.tenantId) {
- this.form.tenantId = data.data.tenantId;
- this.tenantMode = false;
- }
- });
- },
- },
-};
+ name: 'thirdRegister',
+ data() {
+ return {
+ form: {
+ tenantId: '',
+ name: '',
+ account: '',
+ password: '',
+ password2: '',
+ },
+ loading: false,
+ tenantMode: true,
+ accountBox: false,
+ }
+ },
+ computed: {
+ ...mapGetters(['userInfo']),
+ },
+ created() {
+ this.getTenant()
+ },
+ mounted() {
+ // 若未登录则弹出框进行绑定
+ if (validatenull(this.userInfo.user_id) || this.userInfo.user_id < 0) {
+ this.form.name = this.userInfo.user_name
+ this.form.account = this.userInfo.account
+ this.accountBox = true
+ }
+ },
+ methods: {
+ handleRegister() {
+ if (this.form.tenantId === '') {
+ this.$message.warning('请先输入租户编号')
+ return
+ }
+ if (this.form.account === '') {
+ this.$message.warning('请先输入账号名称')
+ return
+ }
+ if (this.form.password === '' || this.form.password2 === '') {
+ this.$message.warning('请先输入密码')
+ return
+ }
+ if (this.form.password !== this.form.password2) {
+ this.$message.warning('两次密码输入不一致')
+ return
+ }
+ this.loading = true
+ registerGuest(this.form, this.userInfo.oauth_id).then(
+ res => {
+ this.loading = false
+ const data = res.data
+ if (data.success) {
+ this.accountBox = false
+ this.$alert('注册申请已提交,请耐心等待管理员通过!', '注册提示').then(() => {
+ this.$store.dispatch('LogOut').then(() => {
+ resetRouter()
+ logOutFun()
+ })
+ })
+ } else {
+ this.$message.error(data.msg || '提交失败')
+ }
+ },
+ error => {
+ window.console.log(error)
+ this.loading = false
+ }
+ )
+ },
+ getTenant() {
+ let domain = getTopUrl()
+ // 临时指定域名,方便测试
+ //domain = "https://bladex.cn";
+ info(domain).then(res => {
+ const data = res.data
+ if (data.success && data.data.tenantId) {
+ this.form.tenantId = data.data.tenantId
+ this.tenantMode = false
+ }
+ })
+ },
+ },
+}
</script>
diff --git a/applications/drone-command/src/mac/index.vue b/applications/drone-command/src/mac/index.vue
index 675df91..3d3e01c 100644
--- a/applications/drone-command/src/mac/index.vue
+++ b/applications/drone-command/src/mac/index.vue
@@ -60,6 +60,9 @@
import index from '@/mixins/index'
import topLock from '@/page/index/top/top-lock.vue'
+
+import { logOutFun } from '@/utils/util'
+
export default {
mixins: [index],
components: {
@@ -132,8 +135,7 @@
logout () {
this.$store.commit('SET_THEME_NAME', '')
this.$store.dispatch('LogOut').then(() => {
- this.$router.push({ path: '/login' })
- setTimeout(() => location.reload())
+ logOutFun()
})
},
startTimer () {
diff --git a/applications/drone-command/src/mac/lock.vue b/applications/drone-command/src/mac/lock.vue
index 88628df..400ee47 100644
--- a/applications/drone-command/src/mac/lock.vue
+++ b/applications/drone-command/src/mac/lock.vue
@@ -20,6 +20,9 @@
<script>
import { mapGetters } from 'vuex';
+
+import { logOutFun } from '@/utils/util'
+
export default {
data() {
return {
@@ -34,7 +37,7 @@
methods: {
handleLogout() {
this.$store.dispatch('LogOut').then(() => {
- this.$router.push({ path: '/login' });
+ logOutFun()
});
},
handleLogin() {
diff --git a/applications/drone-command/src/page/index/top/index.vue b/applications/drone-command/src/page/index/top/index.vue
index d090627..cacc24e 100644
--- a/applications/drone-command/src/page/index/top/index.vue
+++ b/applications/drone-command/src/page/index/top/index.vue
@@ -63,6 +63,9 @@
import topQna from './top-qna.vue'
import topSetting from '../setting.vue'
+
+import { logOutFun } from '@/utils/util'
+
export default {
components: {
topLock,
@@ -132,13 +135,7 @@
confirmButtonClass: 'command-message-box-confirm',
cancelButtonClass: 'command-message-box-cancel',
}).then(() => {
- this.$store.dispatch('LogOut').then(() => {
- const { VITE_APP_PARENT_SYSTEM, VITE_APP_ENV } = import.meta.env
- const isDev = VITE_APP_ENV === 'development'
- isDev
- ? this.$router.push({ path: '/login' })
- : window.location.replace(`${VITE_APP_PARENT_SYSTEM}/#/login`)
- })
+ logOutFun()
})
},
jumpMH () {
diff --git a/applications/drone-command/src/page/index/useGlobalWS.js b/applications/drone-command/src/page/index/useGlobalWS.js
index 009bc8a..c3f986d 100644
--- a/applications/drone-command/src/page/index/useGlobalWS.js
+++ b/applications/drone-command/src/page/index/useGlobalWS.js
@@ -3,7 +3,7 @@
import { useConnectWebSocket } from '@/utils/websocket/connect-websocket'
import { useStore } from 'vuex'
import dayjs from 'dayjs'
-import { aLinkDownloadUtil } from '@/utils/util'
+import { aLinkDownloadUtil, logOutFun } from '@/utils/util'
import EventBus from '@/utils/eventBus'
import { getStore, setStore } from '@/utils/store'
@@ -41,10 +41,7 @@
const logOut = () => {
store.commit('SET_THEME_NAME', '')
- store.dispatch('LogOut').then(() => {
- router.push({ path: '/login' })
- setTimeout(() => location.reload())
- })
+ logOutFun()
}
function messageHandler(payload) {
switch (payload.biz_code) {
diff --git a/applications/drone-command/src/page/lock/index.vue b/applications/drone-command/src/page/lock/index.vue
index d797a84..ecd193f 100644
--- a/applications/drone-command/src/page/lock/index.vue
+++ b/applications/drone-command/src/page/lock/index.vue
@@ -1,109 +1,110 @@
<template>
- <div class="login-container" @keyup.enter="handleLogin">
- <div class="login-time">
- {{ time }}
- </div>
- <div class="login-weaper">
- <div class="login-left animate__animated animate__fadeInLeft">
- <img class="img" src="/img/logo.png" alt="" />
- <p class="title">{{ $t('login.info') }}</p>
- </div>
- <div class="login-border animate__animated animate__fadeInRight">
- <div class="login-main">
- <div class="lock-form animate__animated animate__bounceInDown">
- <div class="animate__animated" :class="{ shake: passwdError, animate__bounceOut: pass }">
- <h3 style="color: #333">{{ userInfo.username }}</h3>
- <el-input placeholder="请输入登录密码" type="password" class="input-with-select animated" v-model="passwd"
- @keyup.enter="handleLogin">
- <template #append>
- <i class="icon-bofangqi-suoping" @click="handleLogin"></i>
-
- <i class="icon-tuichu" @click="handleLogout"></i>
- </template>
- </el-input>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
+ <div class="login-container" @keyup.enter="handleLogin">
+ <div class="login-time">
+ {{ time }}
+ </div>
+ <div class="login-weaper">
+ <div class="login-left animate__animated animate__fadeInLeft">
+ <img class="img" src="/img/logo.png" alt="" />
+ <p class="title">{{ $t('login.info') }}</p>
+ </div>
+ <div class="login-border animate__animated animate__fadeInRight">
+ <div class="login-main">
+ <div class="lock-form animate__animated animate__bounceInDown">
+ <div class="animate__animated" :class="{ shake: passwdError, animate__bounceOut: pass }">
+ <h3 style="color: #333">{{ userInfo.username }}</h3>
+ <el-input
+ placeholder="请输入登录密码"
+ type="password"
+ class="input-with-select animated"
+ v-model="passwd"
+ @keyup.enter="handleLogin"
+ >
+ <template #append>
+ <i class="icon-bofangqi-suoping" @click="handleLogin"></i>
+
+ <i class="icon-tuichu" @click="handleLogout"></i>
+ </template>
+ </el-input>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
</template>
<script>
import { mapGetters } from 'vuex'
import { removeRefreshToken, removeToken } from '@/utils/auth'
import { ElMessage, ElMessageBox } from 'element-plus'
+import { logOutFun } from '@/utils/util'
export default {
- name: 'lock',
- data () {
- return {
- time: '',
- timeTimer: null,
- passwd: '',
- passwdError: false,
- pass: false,
- }
- },
- created () {
- this.getTime()
- if (this.timeTimer) clearInterval(this.timeTimer)
- this.timeTimer = setInterval(() => {
- this.getTime()
- }, 1000)
- },
- beforeDestroy () {
- if (this.timeTimer) {
- clearInterval(this.timeTimer)
- this.timeTimer = null
- }
- },
- mounted () { },
- computed: {
- ...mapGetters(['userInfo', 'tag', 'lockPasswd']),
- },
- props: [],
- methods: {
- getTime () {
- this.time = this.$dayjs().format('YYYY年MM月DD日 HH:mm:ss')
- },
- handleLogout () {
- ElMessageBox.confirm(`是否退出系统, 是否继续?`, '提示', {
- type: 'warning',
- customClass: 'command-page-view-message-box',
- confirmButtonClass: 'command-message-box-confirm',
- cancelButtonClass: 'command-message-box-cancel',
- }).then(() => {
- this.$store.dispatch('LogOut').then(() => {
- // 清除token信息
- removeToken()
- removeRefreshToken()
- this.$router.push({ path: '/login' })
- })
- })
- },
- handleLogin () {
- if (this.passwd !== this.lockPasswd) {
- this.passwd = ''
- this.$message({
- message: '解锁密码错误,请重新输入',
- type: 'error',
- })
- this.passwdError = true
- setTimeout(() => {
- this.passwdError = false
- }, 1000)
- return
- }
- this.pass = true
- setTimeout(() => {
- this.$store.commit('CLEAR_LOCK')
- this.$router.push({
- path: this.tag.path,
- })
- }, 1000)
- },
- },
- components: {},
+ name: 'lock',
+ data() {
+ return {
+ time: '',
+ timeTimer: null,
+ passwd: '',
+ passwdError: false,
+ pass: false,
+ }
+ },
+ created() {
+ this.getTime()
+ if (this.timeTimer) clearInterval(this.timeTimer)
+ this.timeTimer = setInterval(() => {
+ this.getTime()
+ }, 1000)
+ },
+ beforeDestroy() {
+ if (this.timeTimer) {
+ clearInterval(this.timeTimer)
+ this.timeTimer = null
+ }
+ },
+ mounted() {},
+ computed: {
+ ...mapGetters(['userInfo', 'tag', 'lockPasswd']),
+ },
+ props: [],
+ methods: {
+ getTime() {
+ this.time = this.$dayjs().format('YYYY年MM月DD日 HH:mm:ss')
+ },
+ handleLogout() {
+ ElMessageBox.confirm(`是否退出系统, 是否继续?`, '提示', {
+ type: 'warning',
+ customClass: 'command-page-view-message-box',
+ confirmButtonClass: 'command-message-box-confirm',
+ cancelButtonClass: 'command-message-box-cancel',
+ }).then(() => {
+ logOutFun()
+ })
+ },
+ handleLogin() {
+ if (this.passwd !== this.lockPasswd) {
+ this.passwd = ''
+ this.$message({
+ message: '解锁密码错误,请重新输入',
+ type: 'error',
+ })
+ this.passwdError = true
+ setTimeout(() => {
+ this.passwdError = false
+ }, 1000)
+ return
+ }
+ this.pass = true
+ setTimeout(() => {
+ this.$store.commit('CLEAR_LOCK')
+ this.$router.push({
+ path: this.tag.path,
+ })
+ }, 1000)
+ },
+ },
+ components: {},
}
</script>
diff --git a/applications/drone-command/src/permission.js b/applications/drone-command/src/permission.js
index 6e17a22..9c6195c 100644
--- a/applications/drone-command/src/permission.js
+++ b/applications/drone-command/src/permission.js
@@ -14,7 +14,9 @@
import { getToken } from '@/utils/auth'
import { getUrlParams } from './utils/validate'
import NProgress from 'nprogress' // progress bar
-import 'nprogress/nprogress.css' // progress bar style
+import 'nprogress/nprogress.css'
+import { logOutFun } from '@/utils/util'
+// progress bar style
NProgress.configure({ showSpinner: false })
const lockPage = '/lock' //锁屏页
const urlParams = getUrlParams(window.location.href)
@@ -91,13 +93,7 @@
} else {
const systemToken = store.getters.token || urlParams?.token
if (systemToken === 0) {
- store.dispatch('FedLogOut').then(() =>{
- const {VITE_APP_PARENT_SYSTEM,VITE_APP_ENV} = import.meta.env
- const isDev = VITE_APP_ENV === 'development'
- isDev
- ? router.push({ path: '/login' })
- : window.location.replace(`${VITE_APP_PARENT_SYSTEM}/#/login`)
- })
+ logOutFun()
} else {
const meta = to.meta || {}
const query = to.query || {}
@@ -123,6 +119,7 @@
next()
} else {
next('/login')
+ logOutFun()
}
}
})
diff --git a/applications/drone-command/src/store/modules/user.js b/applications/drone-command/src/store/modules/user.js
index efe73e4..1a63b5e 100644
--- a/applications/drone-command/src/store/modules/user.js
+++ b/applications/drone-command/src/store/modules/user.js
@@ -239,28 +239,13 @@
commit('CLEAR_LOCK')
removeToken()
removeRefreshToken()
+ removeToken()
resolve()
localStorage.clear()
})
.catch(error => {
reject(error)
})
- })
- },
- //注销session
- FedLogOut ({ commit }) {
- return new Promise(resolve => {
- commit('SET_TOKEN', '')
- commit('SET_MENU_ALL_NULL', [])
- commit('SET_MENU', [])
- commit('SET_ROLES', [])
- commit('DEL_ALL_TAG', [])
- commit('CLEAR_LOCK')
- removeToken()
- removeRefreshToken()
- removeToken()
- resolve()
- localStorage.clear()
})
},
GetTopMenu () {
diff --git a/applications/drone-command/src/utils/auth.js b/applications/drone-command/src/utils/auth.js
index e82ec6a..6274b3b 100644
--- a/applications/drone-command/src/utils/auth.js
+++ b/applications/drone-command/src/utils/auth.js
@@ -1,20 +1,9 @@
-/*
- * @Author : yuan
- * @Date : 2026-01-06 09:47:09
- * @LastEditors : yuan
- * @LastEditTime : 2026-01-06 11:03:04
- * @FilePath : \applications\drone-command\src\utils\auth.js
- * @Description :
- * Copyright 2026 OBKoro1, All Rights Reserved.
- * 2026-01-06 09:47:09
- */
-import Cookies from 'js-cookie';
+import Cookies from 'js-cookie'
-const TokenKey = 'command-access-token';
+const TokenKey = 'command-access-token'
const RefreshTokenKey = 'command-refresh-token';
const SessionId = 'JSESSIONID';
const UserId = 'b-user-id';
-
export function getToken() {
return Cookies.get(TokenKey, {
path: '/'
@@ -46,5 +35,6 @@
}
export function removeRefreshToken() {
- return Cookies.remove(RefreshTokenKey);
-}
\ No newline at end of file
+ return Cookies.remove(RefreshTokenKey)
+}
+
diff --git a/applications/drone-command/src/utils/util.js b/applications/drone-command/src/utils/util.js
index c149ad4..2525288 100644
--- a/applications/drone-command/src/utils/util.js
+++ b/applications/drone-command/src/utils/util.js
@@ -469,33 +469,50 @@
return `${url.substring(0, lastDotIndex)}_show.jpeg`
}
// key驼峰转换为下划线
-export function camelToSnake (obj) {
- if (typeof obj !== 'object' || obj === null) {
- return obj
- }
+export function camelToSnake(obj) {
+ if (typeof obj !== 'object' || obj === null) {
+ return obj
+ }
- if (Array.isArray(obj)) {
- return obj.map(item => camelToSnake(item))
- }
+ if (Array.isArray(obj)) {
+ return obj.map(item => camelToSnake(item))
+ }
- const newObj = {}
- for (const key in obj) {
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
- const newKey = key.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase()
- newObj[newKey] = camelToSnake(obj[key])
- }
- }
- return newObj
+ const newObj = {}
+ for (const key in obj) {
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
+ const newKey = key.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase()
+ newObj[newKey] = camelToSnake(obj[key])
+ }
+ }
+ return newObj
}
// a链接直接下载
export const aLinkDownloadUtil = (url, name) => {
- let a = document.createElement('a')
- a.style.display = 'none'
- a.href = url
- a.download = name
- document.body.appendChild(a)
- a.click()
- document.body.removeChild(a)
- a = null
+ let a = document.createElement('a')
+ a.style.display = 'none'
+ a.href = url
+ a.download = name
+ document.body.appendChild(a)
+ a.click()
+ document.body.removeChild(a)
+ a = null
+}
+// 统一退出登录
+export function logOutFun() {
+ // 延迟导入 store 和 router,避免循环依赖:
+ // auth.js → router → store → user.js → auth.js
+ const store = require('@/store').default
+ const router = require('@/router').default
+ const { VITE_APP_PARENT_SYSTEM, VITE_APP_ENV } = import.meta.env
+ store.dispatch('LogOut').then(() => {
+ const isDev = VITE_APP_ENV === 'development'
+ if (isDev) {
+ router.push({ path: '/login' })
+ setTimeout(() => location.reload())
+ } else {
+ window.location.replace(`${VITE_APP_PARENT_SYSTEM}/#/login`)
+ }
+ })
}
diff --git a/applications/task-work-order/src/axios.js b/applications/task-work-order/src/axios.js
index d40e9b3..0c7dc02 100644
--- a/applications/task-work-order/src/axios.js
+++ b/applications/task-work-order/src/axios.js
@@ -9,7 +9,7 @@
import axios from 'axios'
import store from '@/store/'
import router from '@/router/'
-import { serialize } from '@/utils/util'
+import { logOutFun, serialize } from '@/utils/util'
import { getToken, removeToken, removeRefreshToken } from '@/utils/auth'
import { isURL, validatenull } from '@/utils/validate'
import { ElMessage } from 'element-plus'
@@ -34,15 +34,6 @@
withCredentials: true,
})
-function logOutFun() {
- store.dispatch('FedLogOut').then(() =>{
- const {VITE_APP_PARENT_SYSTEM,VITE_APP_ENV} = import.meta.env
- const isDev = VITE_APP_ENV === 'development'
- isDev
- ? router.push({ path: '/login' })
- : window.location.replace(`${VITE_APP_PARENT_SYSTEM}/#/login`)
- })
-}
//http request拦截
@@ -118,11 +109,7 @@
const currentRouteName = router.currentRoute.value.name
// 如果当前路由不是登录页,则跳转到登录页
if (currentRouteName !== '登录页') {
- store.dispatch('FedLogOut').then(() =>
- router.push({
- path: '/login',
- })
- )
+ logOutFun()
}
return Promise.reject(new Error(message))
}
diff --git a/applications/task-work-order/src/components/third-register/main.vue b/applications/task-work-order/src/components/third-register/main.vue
index 64ce5a6..03d055b 100644
--- a/applications/task-work-order/src/components/third-register/main.vue
+++ b/applications/task-work-order/src/components/third-register/main.vue
@@ -37,7 +37,7 @@
import { mapGetters } from 'vuex';
import { validatenull } from 'utils/validate';
import { registerGuest } from '@/api/user';
-import { getTopUrl } from 'utils/util';
+import { getTopUrl, logOutFun } from 'utils/util';
import { info } from '@/api/system/tenant';
import { resetRouter } from '@/router/index';
@@ -99,7 +99,7 @@
this.$alert('注册申请已提交,请耐心等待管理员通过!', '注册提示').then(() => {
this.$store.dispatch('LogOut').then(() => {
resetRouter();
- this.$router.push({ path: '/login' });
+ logOutFun();
});
});
} else {
diff --git a/applications/task-work-order/src/mac/index.vue b/applications/task-work-order/src/mac/index.vue
index 0d7f386..b2d8740 100644
--- a/applications/task-work-order/src/mac/index.vue
+++ b/applications/task-work-order/src/mac/index.vue
@@ -124,10 +124,7 @@
},
logout () {
this.$store.commit('SET_THEME_NAME', '')
- this.$store.dispatch('LogOut').then(() => {
- this.$router.push({ path: '/login' })
- setTimeout(() => location.reload())
- })
+ logOutFun()
},
startTimer () {
setInterval(() => {
diff --git a/applications/task-work-order/src/mac/lock.vue b/applications/task-work-order/src/mac/lock.vue
index 88628df..974089d 100644
--- a/applications/task-work-order/src/mac/lock.vue
+++ b/applications/task-work-order/src/mac/lock.vue
@@ -19,6 +19,7 @@
</template>
<script>
import { mapGetters } from 'vuex';
+import { logOutFun } from '@/utils/util'
export default {
data() {
@@ -33,9 +34,7 @@
},
methods: {
handleLogout() {
- this.$store.dispatch('LogOut').then(() => {
- this.$router.push({ path: '/login' });
- });
+ logOutFun()
},
handleLogin() {
if (this.passwd != this.lockPasswd) {
diff --git a/applications/task-work-order/src/page/index/top/index.vue b/applications/task-work-order/src/page/index/top/index.vue
index 4c5794d..00db31c 100644
--- a/applications/task-work-order/src/page/index/top/index.vue
+++ b/applications/task-work-order/src/page/index/top/index.vue
@@ -46,6 +46,7 @@
import topFull from './top-full.vue'
import topQna from './top-qna.vue'
import topSetting from '../setting.vue'
+import { logOutFun } from '@/utils/util'
export default {
components: {
@@ -87,13 +88,7 @@
cancelButtonText: this.$t('cancelText'),
type: 'warning',
}).then(() => {
- this.$store.dispatch('LogOut').then(() => {
- const {VITE_APP_PARENT_SYSTEM,VITE_APP_ENV} = import.meta.env
- const isDev = VITE_APP_ENV === 'development'
- isDev
- ? this.$router.push({ path: '/login' })
- : window.location.replace(`${VITE_APP_PARENT_SYSTEM}/#/login`)
- })
+ logOutFun()
})
},
jumpMH () {
diff --git a/applications/task-work-order/src/page/index/useGlobalWS.js b/applications/task-work-order/src/page/index/useGlobalWS.js
index 009bc8a..c3f986d 100644
--- a/applications/task-work-order/src/page/index/useGlobalWS.js
+++ b/applications/task-work-order/src/page/index/useGlobalWS.js
@@ -3,7 +3,7 @@
import { useConnectWebSocket } from '@/utils/websocket/connect-websocket'
import { useStore } from 'vuex'
import dayjs from 'dayjs'
-import { aLinkDownloadUtil } from '@/utils/util'
+import { aLinkDownloadUtil, logOutFun } from '@/utils/util'
import EventBus from '@/utils/eventBus'
import { getStore, setStore } from '@/utils/store'
@@ -41,10 +41,7 @@
const logOut = () => {
store.commit('SET_THEME_NAME', '')
- store.dispatch('LogOut').then(() => {
- router.push({ path: '/login' })
- setTimeout(() => location.reload())
- })
+ logOutFun()
}
function messageHandler(payload) {
switch (payload.biz_code) {
diff --git a/applications/task-work-order/src/page/lock/index.vue b/applications/task-work-order/src/page/lock/index.vue
index 1bb977e..6ca67a0 100644
--- a/applications/task-work-order/src/page/lock/index.vue
+++ b/applications/task-work-order/src/page/lock/index.vue
@@ -39,6 +39,7 @@
<script>
import { mapGetters } from 'vuex';
import { removeRefreshToken, removeToken } from '@/utils/auth';
+import { logOutFun } from '@/utils/util'
export default {
name: 'lock',
@@ -72,12 +73,7 @@
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
- this.$store.dispatch('LogOut').then(() => {
- // 清除token信息
- removeToken();
- removeRefreshToken();
- this.$router.push({ path: '/login' });
- });
+ logOutFun()
});
},
handleLogin() {
diff --git a/applications/task-work-order/src/permission.js b/applications/task-work-order/src/permission.js
index b7c3b74..1937b68 100644
--- a/applications/task-work-order/src/permission.js
+++ b/applications/task-work-order/src/permission.js
@@ -14,7 +14,8 @@
import { getToken } from '@/utils/auth'
import { getUrlParams } from './utils/validate'
import NProgress from 'nprogress' // progress bar
-import 'nprogress/nprogress.css' // progress bar style
+import 'nprogress/nprogress.css'
+import { logOutFun } from '@/utils/util' // progress bar style
NProgress.configure({ showSpinner: false })
const lockPage = '/lock' //锁屏页
const urlParams = getUrlParams(window.location.href)
@@ -92,13 +93,7 @@
} else {
const systemToken = store.getters.token || urlParams?.token
if (systemToken === 0) {
- store.dispatch('FedLogOut').then(() =>{
- const {VITE_APP_PARENT_SYSTEM,VITE_APP_ENV} = import.meta.env
- const isDev = VITE_APP_ENV === 'development'
- isDev
- ? router.push({ path: '/login' })
- : window.location.replace(`${VITE_APP_PARENT_SYSTEM}/#/login`)
- })
+ logOutFun()
} else {
const meta = to.meta || {}
const query = to.query || {}
@@ -124,6 +119,7 @@
next()
} else {
next('/login')
+ logOutFun()
// env === 'development' ? next('/login') : window.location.replace(`${adminUrl}#/login`)
}
}
diff --git a/applications/task-work-order/src/store/modules/user.js b/applications/task-work-order/src/store/modules/user.js
index 6c4c7a1..a5d6cbe 100644
--- a/applications/task-work-order/src/store/modules/user.js
+++ b/applications/task-work-order/src/store/modules/user.js
@@ -1,7 +1,7 @@
import { setToken, setRefreshToken, removeToken, removeRefreshToken, getRefreshToken } from '@/utils/auth'
import { setStore, getStore } from '@/utils/store'
import { validatenull } from '@/utils/validate'
-import { deepClone } from '@/utils/util'
+import { deepClone, logOutFun } from '@/utils/util'
import defaultAva from '@/assets/images/defaultava.png'
import {
loginByUsername,
@@ -261,14 +261,7 @@
},
GetMenu({ commit, dispatch }, tenantId) {
const errLogOut = () => {
- dispatch('LogOut').then(() => {
- const env = import.meta.env.VITE_APP_ENV
- const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL
- (window.location.href = '/task-work-order/login')
- // env === 'development'
- // ? (window.location.href = '/task-work-order/login')
- // : window.location.replace(`${adminUrl}#/login`)
- })
+ logOutFun()
}
return new Promise(resolve => {
getRoutes({ tenantId, sysType: 6 })
diff --git a/applications/task-work-order/src/utils/util.js b/applications/task-work-order/src/utils/util.js
index 57c3536..96b35a3 100644
--- a/applications/task-work-order/src/utils/util.js
+++ b/applications/task-work-order/src/utils/util.js
@@ -500,3 +500,21 @@
document.body.removeChild(a)
a = null
}
+
+// 统一退出登录
+export function logOutFun() {
+ // 延迟导入 store 和 router,避免循环依赖:
+ // auth.js → router → store → user.js → auth.js
+ const store = require('@/store').default
+ const router = require('@/router').default
+ const { VITE_APP_PARENT_SYSTEM, VITE_APP_ENV } = import.meta.env
+ store.dispatch('LogOut').then(() => {
+ const isDev = VITE_APP_ENV === 'development'
+ if (isDev) {
+ router.push({ path: '/login' })
+ setTimeout(() => location.reload())
+ } else {
+ window.location.replace(`${VITE_APP_PARENT_SYSTEM}/#/login`)
+ }
+ })
+}
--
Gitblit v1.9.3