Commit 3b33817d authored by 万成波's avatar 万成波

后台企微登录

parent d66c6978
...@@ -95,7 +95,7 @@ spring: ...@@ -95,7 +95,7 @@ spring:
# 企业微信配置 # 企业微信配置
wx: wx:
cp: cp:
pc-redirect-url: https://wecom.jift.edu.cn/bbs/pc pc-redirect-url: https://wecom.jift.edu.cn/bbs/pc/wechatlogin
mobile-redirect-url: https://wecom.jift.edu.cn/bbs/h5/pages/login/login mobile-redirect-url: https://wecom.jift.edu.cn/bbs/h5/pages/login/login
corp-id: wxd2a84aa7529d3801 corp-id: wxd2a84aa7529d3801
app-configs: app-configs:
......
...@@ -56,4 +56,16 @@ export function getCodeImg() { ...@@ -56,4 +56,16 @@ export function getCodeImg() {
method: 'get', method: 'get',
timeout: 20000 timeout: 20000
}) })
} }
\ No newline at end of file
// 企业
export function loginByWechatWork(data) {
return request({
url: '/pc/code/login',
headers: {
isToken: false
},
method: 'post',
data: data
})
}
...@@ -8,7 +8,7 @@ import { isRelogin } from '@/utils/request' ...@@ -8,7 +8,7 @@ import { isRelogin } from '@/utils/request'
NProgress.configure({ showSpinner: false }) NProgress.configure({ showSpinner: false })
const whiteList = ['/login', '/register'] const whiteList = ['/login', '/register','/wechatlogin']
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
NProgress.start() NProgress.start()
......
...@@ -46,6 +46,11 @@ export const constantRoutes = [ ...@@ -46,6 +46,11 @@ export const constantRoutes = [
component: () => import('@/views/login'), component: () => import('@/views/login'),
hidden: true hidden: true
}, },
{
path: '/wechatlogin',
component: () => import('@/views/wechatlogin'),
hidden: true
},
{ {
path: '/register', path: '/register',
component: () => import('@/views/register'), component: () => import('@/views/register'),
...@@ -177,7 +182,7 @@ Router.prototype.replace = function push(location) { ...@@ -177,7 +182,7 @@ Router.prototype.replace = function push(location) {
} }
export default new Router({ export default new Router({
base:'/bbspc', base:'/bbs/pc',
mode: 'history', // 去掉url中的# mode: 'history', // 去掉url中的#
scrollBehavior: () => ({ y: 0 }), scrollBehavior: () => ({ y: 0 }),
routes: constantRoutes routes: constantRoutes
......
import { login, logout, getInfo } from '@/api/login' import { login, logout, getInfo, loginByWechatWork } from "@/api/login";
import { getToken, setToken, removeToken } from '@/utils/auth' import { getToken, setToken, removeToken } from "@/utils/auth";
const user = { const user = {
state: { state: {
token: getToken(), token: getToken(),
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_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: {
getWechatLogin({ commit }, code) {
return new Promise((resolve, reject) => {
loginByWechatWork({ code })
.then((res) => {
setToken(res.data);
commit("SET_TOKEN", res.data);
resolve(res);
})
.catch((error) => {
reject(error);
});
});
},
// 登录 // 登录
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;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
login(username, password, code, uuid).then(res => { login(username, password, code, uuid)
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);
});
});
}, },
// 获取用户信息 // 获取用户信息
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) => {
const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar; const user = res.user;
if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 const avatar =
commit('SET_ROLES', res.roles) user.avatar == "" || user.avatar == null
commit('SET_PERMISSIONS', res.permissions) ? require("@/assets/images/profile.jpg")
} else { : process.env.VUE_APP_BASE_API + user.avatar;
commit('SET_ROLES', ['ROLE_DEFAULT']) if (res.roles && res.roles.length > 0) {
} // 验证返回的roles是否是一个非空数组
commit('SET_NAME', user.userName) commit("SET_ROLES", res.roles);
commit('SET_AVATAR', avatar) commit("SET_PERMISSIONS", res.permissions);
resolve(res) } else {
}).catch(error => { commit("SET_ROLES", ["ROLE_DEFAULT"]);
reject(error) }
}) commit("SET_NAME", user.userName);
}) 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;
This diff is collapsed.
<template>
<div>
</div>
</template>
<script>
import { mapActions } from 'vuex'
export default {
mounted() {
if (this.isWeComEnv()) {
// 企业微信环境处理
const code = this.$route.query.code
this.getWechatLogin(code).then(() => {
this.$router.replace('/')
})
} else {
// 非企业微信环境,跳转到普通登录页
this.$router.replace('/login')
}
},
methods: {
// 判断是否为企业微信环境
isWeComEnv() {
// return true
const userAgent = window.navigator.userAgent.toLowerCase()
return userAgent.includes('wxwork') || (userAgent.includes('micromessenger') && userAgent.includes('wxwork'))
},
// 映射 Vuex 中的 getWechatLogin 方法
...mapActions(['getWechatLogin'])
}
}
</script>
...@@ -18,7 +18,7 @@ module.exports = { ...@@ -18,7 +18,7 @@ module.exports = {
// 部署生产环境和开发环境下的URL。 // 部署生产环境和开发环境下的URL。
// 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上 // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。 // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
publicPath: process.env.NODE_ENV === "production" ? "/bbspc" : "/", publicPath: process.env.NODE_ENV === "production" ? "/bbs/pc" : "/",
// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist) // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
outputDir: 'dist', outputDir: 'dist',
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下) // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment