forked from github/dataease
feat(xpack): 钉钉工作台免登进入DataEase
This commit is contained in:
parent
0aabb23165
commit
4d4807b821
@ -80,8 +80,7 @@ public class XDingtalkServer {
|
|||||||
return dingtalkXpackService.getQrParam();
|
return dingtalkXpackService.getQrParam();
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/callBack")
|
private ModelAndView privateCallBack(String code, Boolean withoutLogin) {
|
||||||
public ModelAndView callBack(@RequestParam("code") String code, @RequestParam("state") String state) {
|
|
||||||
ModelAndView modelAndView = new ModelAndView("redirect:/");
|
ModelAndView modelAndView = new ModelAndView("redirect:/");
|
||||||
HttpServletResponse response = ServletUtils.response();
|
HttpServletResponse response = ServletUtils.response();
|
||||||
DingtalkXpackService dingtalkXpackService = null;
|
DingtalkXpackService dingtalkXpackService = null;
|
||||||
@ -95,7 +94,7 @@ public class XDingtalkServer {
|
|||||||
if (!isOpen) {
|
if (!isOpen) {
|
||||||
DEException.throwException("未开启钉钉");
|
DEException.throwException("未开启钉钉");
|
||||||
}
|
}
|
||||||
DingUserEntity dingUserEntity = dingtalkXpackService.userInfo(code);
|
DingUserEntity dingUserEntity = withoutLogin ? dingtalkXpackService.userInfoWithoutLogin(code) : dingtalkXpackService.userInfo(code);
|
||||||
String username = dingUserEntity.getUserid();
|
String username = dingUserEntity.getUserid();
|
||||||
SysUserEntity sysUserEntity = authUserService.getUserByDingtalkId(username);
|
SysUserEntity sysUserEntity = authUserService.getUserByDingtalkId(username);
|
||||||
if (null == sysUserEntity) {
|
if (null == sysUserEntity) {
|
||||||
@ -139,6 +138,16 @@ public class XDingtalkServer {
|
|||||||
return modelAndView;
|
return modelAndView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/callBackWithoutLogin")
|
||||||
|
public ModelAndView callBackWithoutLogin(@RequestParam("code") String code) {
|
||||||
|
return privateCallBack(code, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/callBack")
|
||||||
|
public ModelAndView callBack(@RequestParam("code") String code, @RequestParam("state") String state) {
|
||||||
|
return privateCallBack(code, false);
|
||||||
|
}
|
||||||
|
|
||||||
private void bindError(HttpServletResponse response, String url, String errorMsg) {
|
private void bindError(HttpServletResponse response, String url, String errorMsg) {
|
||||||
Cookie cookie_error = new Cookie("DingtalkError", errorMsg);
|
Cookie cookie_error = new Cookie("DingtalkError", errorMsg);
|
||||||
cookie_error.setPath("/");
|
cookie_error.setPath("/");
|
||||||
|
@ -26,7 +26,7 @@ NProgress.configure({
|
|||||||
showSpinner: false
|
showSpinner: false
|
||||||
}) // NProgress Configuration
|
}) // NProgress Configuration
|
||||||
|
|
||||||
const whiteList = ['/login', '/401', '/404', '/delink', '/nolic'] // no redirect whitelist
|
const whiteList = ['/login', '/401', '/404', '/delink', '/nolic', '/de-auto-login'] // no redirect whitelist
|
||||||
|
|
||||||
const routeBefore = (callBack) => {
|
const routeBefore = (callBack) => {
|
||||||
let uiInfo = getSysUI()
|
let uiInfo = getSysUI()
|
||||||
@ -53,7 +53,7 @@ const routeBefore = (callBack) => {
|
|||||||
callBack()
|
callBack()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
router.beforeEach(async(to, from, next) => routeBefore(() => {
|
router.beforeEach(async (to, from, next) => routeBefore(() => {
|
||||||
// start progress bar
|
// start progress bar
|
||||||
NProgress.start()
|
NProgress.start()
|
||||||
const mobileIgnores = ['/delink']
|
const mobileIgnores = ['/delink']
|
||||||
|
@ -91,6 +91,11 @@ export const constantRoutes = [
|
|||||||
path: '/previewFullScreen',
|
path: '/previewFullScreen',
|
||||||
component: () => import('@/components/canvas/components/editor/PreviewFullScreen'),
|
component: () => import('@/components/canvas/components/editor/PreviewFullScreen'),
|
||||||
hidden: true
|
hidden: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/de-auto-login',
|
||||||
|
component: () => import('@/views/DeAutoLogin'),
|
||||||
|
hidden: true
|
||||||
}
|
}
|
||||||
|
|
||||||
// {
|
// {
|
||||||
@ -208,11 +213,11 @@ export const constantRoutes = [
|
|||||||
// ]
|
// ]
|
||||||
// },
|
// },
|
||||||
// 404 page must be placed at the end !!!
|
// 404 page must be placed at the end !!!
|
||||||
// { path: '*', redirect: '/404', hidden: true }
|
// { path: '*', redirect: '/404', hidden: true }
|
||||||
]
|
]
|
||||||
|
|
||||||
const createRouter = () => new Router({
|
const createRouter = () => new Router({
|
||||||
// mode: 'history', // require service support
|
// mode: 'history', // require service support
|
||||||
mode: 'hash',
|
mode: 'hash',
|
||||||
scrollBehavior: () => ({ y: 0 }),
|
scrollBehavior: () => ({ y: 0 }),
|
||||||
routes: constantRoutes
|
routes: constantRoutes
|
||||||
|
@ -29,7 +29,7 @@ const actions = {
|
|||||||
commit('SET_CURRENT_PATH', path)
|
commit('SET_CURRENT_PATH', path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
export const fullScreenRouters = ['XpackThemeForm', 'system/datasource/DsForm', 'dataset/Form']
|
export const fullScreenRouters = ['XpackThemeForm', 'system/datasource/DsForm', 'dataset/Form', 'DeAutoLogin']
|
||||||
export const filterAsyncRouter = (routers) => { // 遍历后台传来的路由字符串,转换为组件对象
|
export const filterAsyncRouter = (routers) => { // 遍历后台传来的路由字符串,转换为组件对象
|
||||||
return routers.map(router => {
|
return routers.map(router => {
|
||||||
if (!fullScreenRouters.includes(router.component) && router.type === 1 && router.pid === 0 && router.component && router.component !== 'Layout') {
|
if (!fullScreenRouters.includes(router.component) && router.type === 1 && router.pid === 0 && router.component && router.component !== 'Layout') {
|
||||||
|
68
frontend/src/views/DeAutoLogin.vue
Normal file
68
frontend/src/views/DeAutoLogin.vue
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
v-loading="loading"
|
||||||
|
class="de-auto-login"
|
||||||
|
>
|
||||||
|
<plugin-com
|
||||||
|
v-if="dingtalkOpen && corpId"
|
||||||
|
ref="DTWithoutLogin"
|
||||||
|
:corp-id="corpId"
|
||||||
|
component-name="DTWithoutLogin"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-if="!loading && !dingtalkOpen"
|
||||||
|
class="auto-login-missing"
|
||||||
|
>
|
||||||
|
<span>未开启钉钉</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-else-if="!loading && !corpId"
|
||||||
|
class="auto-login-missing"
|
||||||
|
>
|
||||||
|
<span>缺失企业ID参数</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import PluginCom from '@/views/system/plugin/PluginCom'
|
||||||
|
import { dingtalkStatus } from '@/api/user'
|
||||||
|
export default {
|
||||||
|
name: 'DeAutoLogin',
|
||||||
|
components: { PluginCom },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
corpId: null,
|
||||||
|
dingtalkOpen: false,
|
||||||
|
loading: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
created() {
|
||||||
|
this.corpId = this.$route.query.corpId
|
||||||
|
dingtalkStatus().then(res => {
|
||||||
|
if (res.success && res.data) {
|
||||||
|
this.dingtalkOpen = true
|
||||||
|
}
|
||||||
|
this.loading = false
|
||||||
|
}).catch(e => {
|
||||||
|
this.loading = false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.de-auto-login {
|
||||||
|
width: 100%;
|
||||||
|
height: 100vh;
|
||||||
|
.auto-login-missing {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in New Issue
Block a user