js文件更改

xuhongjie
严飞永 1 month ago
parent e56a2879ae
commit cd2ecc1ef5

@ -5,9 +5,12 @@ VUE_APP_TITLE = 苏州工业园区工业上楼管理系统
ENV = 'production' ENV = 'production'
# 苏州工业园区工业上楼管理系统/生产环境 # 苏州工业园区工业上楼管理系统/生产环境
# 个人环境
VUE_APP_BASE_API = ''
# VUE_APP_BASE_API = ''
# 测试环境 # 测试环境
# VUE_APP_BASE_API = 'http://39.101.188.84:7071' # VUE_APP_BASE_API = 'http://39.101.188.84:7071'
# 正式环境 # 正式环境
# VUE_APP_BASE_API = 'https://gysl.sipac.gov.cn/api' VUE_APP_BASE_API = 'https://gysl.sipac.gov.cn/api'

@ -87,6 +87,7 @@
"connect": "3.6.6", "connect": "3.6.6",
"eslint": "7.15.0", "eslint": "7.15.0",
"eslint-plugin-vue": "7.2.0", "eslint-plugin-vue": "7.2.0",
"html-webpack-plugin": "^5.6.3",
"lint-staged": "10.5.3", "lint-staged": "10.5.3",
"runjs": "4.4.2", "runjs": "4.4.2",
"sass": "1.32.13", "sass": "1.32.13",

File diff suppressed because it is too large Load Diff

@ -0,0 +1,10 @@
import request from "@/utils/request"
// 政务端单点登录
export function governmentGetInfo(params) {
return request({
url: "/system/chief",
method: "get",
params
})
}

@ -3,10 +3,13 @@ import store from './store'
import { Message } from 'element-ui' import { Message } from 'element-ui'
import NProgress from 'nprogress' import NProgress from 'nprogress'
import 'nprogress/nprogress.css' import 'nprogress/nprogress.css'
import { getToken } from '@/utils/auth' import { getToken, setToken } from '@/utils/auth'
import { isPathMatch } from '@/utils/validate' import { isPathMatch } from '@/utils/validate'
import { isRelogin } from '@/utils/request' import { isRelogin } from '@/utils/request'
import { extractPrefix } from '@/utils/common'; import { extractPrefix } from '@/utils/common'
// 政务登录接口
import { governmentGetInfo } from '@/api/login/index'
NProgress.configure({ showSpinner: false }) NProgress.configure({ showSpinner: false })
@ -17,14 +20,92 @@ const isWhiteList = (path) => {
} }
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
if(!extractPrefix(to.path)){ if (!extractPrefix(to.path)) {
store.commit("SET_CRUMBS",false); store.commit("SET_CRUMBS", false);
} }
NProgress.start() NProgress.start()
if (getToken()) {
//政务登录
const url = window.location.href
// 检查是否包含政务平台返回的关键参数
const hasUserToken = url.includes('userToken=')
const hasSignature = url.includes('signature=')
const hasTimespan = url.includes('timespan=')
if (hasUserToken && hasSignature && hasTimespan) {
const regUserToken = /[?&]userToken=([^&#]+)/
const regSignature = /[?&]signature=([^&#]+)/
const regTimespan = /[?&]timespan=([^&#]+)/
const userTokenMatch = url.match(regUserToken)
const signatureMatch = url.match(regSignature)
const timespanMatch = url.match(regTimespan)
const userToken = userTokenMatch ? userTokenMatch[1] : null
const signature = signatureMatch ? signatureMatch[1] : null
const timespan = timespanMatch ? timespanMatch[1] : null
if (userToken && signature && timespan) {
// 调用政务系统登录接口
governmentGetInfo({
userToken,
signature,
timespan
}).then(res => {
// 假设 res.token 是返回的 token
const token = res.token
if (token) {
setToken(token) // 存储 token
localStorage.setItem('otherToken', userToken)
// 清除 URL 中的敏感参数
const cleanUrl = url
.replace(regUserToken, '')
.replace(regSignature, '')
.replace(regTimespan, '')
.replace(/^&/, '?')
window.history.replaceState({}, '', cleanUrl)
// 继续路由守卫流程
if (store.getters.roles.length === 0) {
isRelogin.show = true
store.dispatch('GetInfo').then(() => {
isRelogin.show = false
store.dispatch('GenerateRoutes').then(accessRoutes => {
router.addRoutes(accessRoutes)
next({ ...to, replace: true })
})
}).catch(err => {
store.dispatch('LogOut').then(() => {
Message.error(err)
next({ path: '/' })
})
})
} else {
next()
}
}
}).catch(err => {
console.error('政务系统登录失败:', err)
Message.error('政务系统登录失败,请重新登录')
})
} else {
Message.error('缺少必要的登录参数')
next(`/login?redirect=${encodeURIComponent(to.fullPath)}`)
}
return
}
//原来的登录逻辑
const token = getToken()
if (token) {
to.meta.title && store.dispatch('settings/setTitle', to.meta.title) to.meta.title && store.dispatch('settings/setTitle', to.meta.title)
/* has token*/
if (to.path === '/login') { if (to.path === '/login') {
next({ path: '/' }) next({ path: '/' })
NProgress.done() NProgress.done()
@ -33,31 +114,27 @@ router.beforeEach((to, from, next) => {
} else { } else {
if (store.getters.roles.length === 0) { if (store.getters.roles.length === 0) {
isRelogin.show = true isRelogin.show = true
// 判断当前用户是否已拉取完user_info信息
store.dispatch('GetInfo').then(() => { store.dispatch('GetInfo').then(() => {
isRelogin.show = false isRelogin.show = false
store.dispatch('GenerateRoutes').then(accessRoutes => { store.dispatch('GenerateRoutes').then(accessRoutes => {
// 根据roles权限生成可访问的路由表 router.addRoutes(accessRoutes)
router.addRoutes(accessRoutes) // 动态添加可访问路由表 next({ ...to, replace: true })
next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
}) })
}).catch(err => { }).catch(err => {
store.dispatch('LogOut').then(() => { store.dispatch('LogOut').then(() => {
Message.error(err) Message.error(err)
next({ path: '/' }) next({ path: '/' })
})
}) })
})
} else { } else {
next() next()
} }
} }
} else { } else {
// 没有token
if (isWhiteList(to.path)) { if (isWhiteList(to.path)) {
// 在免登录白名单,直接进入
next() next()
} else { } else {
next(`/login?redirect=${encodeURIComponent(to.fullPath)}`) // 否则全部重定向到登录页 next(`/login?redirect=${encodeURIComponent(to.fullPath)}`)
NProgress.done() NProgress.done()
} }
} }
@ -65,4 +142,4 @@ router.beforeEach((to, from, next) => {
router.afterEach(() => { router.afterEach(() => {
NProgress.done() NProgress.done()
}) })

@ -1,109 +1,137 @@
import { login, logout, getInfo } from '@/api/login' import { login, logout, getInfo } from "@/api/login";
import { getToken, setToken, removeToken } from '@/utils/auth' import { getToken, setToken, removeToken } from "@/utils/auth";
import { isHttp, isEmpty } from "@/utils/validate" import { isHttp, isEmpty } from "@/utils/validate";
import defAva from '@/assets/images/profile.jpg' import defAva from "@/assets/images/profile.jpg";
import { governmentGetInfo } from "@/api/login";
const user = { const user = {
state: { state: {
token: getToken(), token: getToken(),
id: '', id: "",
name: '', name: "",
avatar: '', avatar: "",
roles: [], roles: [],
permissions: [] permissions: [],
}, },
mutations: { mutations: {
SET_TOKEN: (state, token) => { SET_TOKEN: (state, token) => {
state.token = token state.token = token;
}, },
SET_ID: (state, id) => { SET_ID: (state, id) => {
state.id = id state.id = id;
}, },
SET_NAME: (state, name) => { SET_NAME: (state, name) => {
state.name = name state.name = name;
}, },
SET_AVATAR: (state, avatar) => { SET_AVATAR: (state, avatar) => {
state.avatar = avatar state.avatar = avatar;
}, },
SET_ROLES: (state, roles) => { SET_ROLES: (state, roles) => {
state.roles = roles state.roles = roles;
}, },
SET_PERMISSIONS: (state, permissions) => { SET_PERMISSIONS: (state, permissions) => {
state.permissions = permissions state.permissions = permissions;
} },
}, },
actions: { actions: {
// 登录 // 登录
Login({ commit }, userInfo) { Login({ commit }, userInfo) {
const username = userInfo.username.trim() const username = userInfo.username.trim();
const password = userInfo.password const password = userInfo.password;
const code = userInfo.code const code = userInfo.code;
const uuid = userInfo.uuid const uuid = userInfo.uuid;
const loginRole = userInfo.loginRole const loginRole = userInfo.loginRole;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
login(username, password, code, uuid,loginRole).then(res => { login(username, password, code, uuid, loginRole)
setToken(res.token) .then((res) => {
commit('SET_TOKEN', res.token) setToken(res.token);
resolve() commit("SET_TOKEN", res.token);
}).catch(error => { resolve();
reject(error) })
}) .catch((error) => {
}) reject(error);
});
});
}, },
// 政务端登录
governmentLogin({ commit, state }, info) {
return new Promise((resolve, reject) => {
governmentGetInfo(info)
.then((res) => {
// console.log(res);
setUserToken(info.userToken);
commit("SET_USERTOKEN", res.data.token);
setToken(res.data.token);
commit("SET_TOKEN", res.data.token);
resolve();
})
.catch((error) => {
// console.log(error);
// reject(error)
});
});
},
// 获取用户信息 // 获取用户信息
GetInfo({ commit, state }) { GetInfo({ commit, state }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
getInfo().then(res => { getInfo()
const user = res.user .then((res) => {
let avatar = user.avatar || "" const user = res.user;
if (!isHttp(avatar)) { let avatar = user.avatar || "";
avatar = (isEmpty(avatar)) ? defAva : process.env.VUE_APP_BASE_API + avatar if (!isHttp(avatar)) {
} avatar = isEmpty(avatar)
if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 ? defAva
commit('SET_ROLES', res.roles) : process.env.VUE_APP_BASE_API + avatar;
commit('SET_PERMISSIONS', res.permissions) }
} else { if (res.roles && res.roles.length > 0) {
commit('SET_ROLES', ['ROLE_DEFAULT']) // 验证返回的roles是否是一个非空数组
} commit("SET_ROLES", res.roles);
commit('SET_ID', user.userId) commit("SET_PERMISSIONS", res.permissions);
} else {
commit('SET_NAME', user.nickName) commit("SET_ROLES", ["ROLE_DEFAULT"]);
}
commit('SET_AVATAR', avatar) commit("SET_ID", user.userId);
resolve(res)
}).catch(error => { commit("SET_NAME", user.nickName);
reject(error)
}) commit("SET_AVATAR", avatar);
}) resolve(res);
})
.catch((error) => {
reject(error);
});
});
}, },
// 退出系统 // 退出系统
LogOut({ commit, state }) { LogOut({ commit, state }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
logout(state.token).then(() => { logout(state.token)
commit('SET_TOKEN', '') .then(() => {
commit('SET_ROLES', []) commit("SET_TOKEN", "");
commit('SET_PERMISSIONS', []) commit("SET_ROLES", []);
removeToken() commit("SET_PERMISSIONS", []);
resolve() removeToken();
}).catch(error => { resolve();
reject(error) })
}) .catch((error) => {
}) reject(error);
});
});
}, },
// 前端 登出 // 前端 登出
FedLogOut({ commit }) { FedLogOut({ commit }) {
return new Promise(resolve => { return new Promise((resolve) => {
commit('SET_TOKEN', '') commit("SET_TOKEN", "");
removeToken() removeToken();
resolve() resolve();
}) });
} },
} },
} };
export default user export default user;

@ -46,7 +46,7 @@ module.exports = {
proxy: { proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy // detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: { [process.env.VUE_APP_BASE_API]: {
target: `http://192.168.0.105:7071/`, // target: `http://192.168.0.109:7071/`,
// target: `http://39.101.188.84:7071/`, // target: `http://39.101.188.84:7071/`,
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {

Loading…
Cancel
Save