6 files modified
2 files deleted
| | |
| | | * @LastEditors : yuan |
| | | * @LastEditTime : 2026-01-16 11:12:30 |
| | | * @FilePath : \applications\task-work-order\src\config\website.js |
| | | * @Description : |
| | | * Copyright 2026 OBKoro1, All Rights Reserved. |
| | | * @Description : |
| | | * Copyright 2026 OBKoro1, All Rights Reserved. |
| | | * 2026-01-06 09:47:27 |
| | | */ |
| | | /** |
| | | * 全局配置文件 |
| | | */ |
| | | export default { |
| | | title: 'saber', |
| | | logo: 'S', |
| | | key: 'work', //配置主键,目前用于存储 |
| | | indexTitle: '', |
| | | clientId: 'saber', // 客户端id |
| | | clientSecret: 'saber_secret', // 客户端密钥 |
| | | tenantMode: true, // 是否开启租户模式 |
| | | tenantId: '000000', // 管理组租户编号 |
| | | captchaMode: true, // 是否开启验证码模式 |
| | | switchMode: false, // 是否开启部门切换模式 |
| | | lockPage: '/lock', |
| | | tokenTime: 3000, |
| | | tokenHeader: 'Blade-Auth', |
| | | //http的status默认放行不才用统一处理的, |
| | | statusWhiteList: [], |
| | | //配置首页不可关闭 |
| | | setting: { |
| | | sidebar: 'vertical', |
| | | tag: true, |
| | | debug: true, |
| | | collapse: true, |
| | | search: true, |
| | | color: true, |
| | | lock: true, |
| | | screenshot: true, |
| | | fullscreen: true, |
| | | theme: true, |
| | | menu: true, |
| | | }, |
| | | fistPage: { |
| | | name: '数据驾驶舱', |
| | | path: '/dataCockpit/index', |
| | | // path: '/tickets/ticket', |
| | | |
| | | }, |
| | | //配置菜单的属性 |
| | | menu: { |
| | | iconDefault: 'icon-caidan', |
| | | label: 'name', |
| | | path: 'path', |
| | | icon: 'source', |
| | | children: 'children', |
| | | query: 'query', |
| | | href: 'path', |
| | | meta: 'meta', |
| | | }, |
| | | //oauth2配置 |
| | | oauth2: { |
| | | // 是否开启注册功能 |
| | | registerMode: true, |
| | | // 使用后端工程 @org.springblade.test.Sm2KeyGenerator 获取 |
| | | publicKey: '请配置国密sm2公钥', |
| | | // 第三方系统授权地址 |
| | | authUrl: 'http://localhost/blade-auth/oauth/render', |
| | | // 单点登录系统认证(cloud端口为8100,boot端口为80) |
| | | ssoUrl: |
| | | 'http://localhost:8100/oauth/authorize?client_id=saber3&response_type=code&redirect_uri=', |
| | | // 单点登录回调地址(Saber服务的登录界面地址) |
| | | redirectUri: 'http://localhost:2888/login', |
| | | }, |
| | | //设计器配置 |
| | | design: { |
| | | // 流程设计器类型(true->nutflow,false->flowable) |
| | | designMode: true, |
| | | // 流程设计器地址(flowable模式) |
| | | designUrl: 'http://localhost:9999', |
| | | // 报表设计器地址(cloud端口为8108,boot端口为80) |
| | | reportUrl: 'http://localhost:8108/ureport', |
| | | }, |
| | | title: 'saber', |
| | | logo: 'S', |
| | | key: 'work', //配置主键,目前用于存储 |
| | | indexTitle: '', |
| | | clientId: 'saber', // 客户端id |
| | | clientSecret: 'saber_secret', // 客户端密钥 |
| | | tenantMode: true, // 是否开启租户模式 |
| | | tenantId: '000000', // 管理组租户编号 |
| | | captchaMode: true, // 是否开启验证码模式 |
| | | switchMode: false, // 是否开启部门切换模式 |
| | | lockPage: '/lock', |
| | | tokenTime: 3000, |
| | | tokenHeader: 'Blade-Auth', |
| | | //http的status默认放行不才用统一处理的, |
| | | statusWhiteList: [], |
| | | //配置首页不可关闭 |
| | | setting: { |
| | | sidebar: 'vertical', |
| | | tag: true, |
| | | debug: true, |
| | | collapse: true, |
| | | search: true, |
| | | color: true, |
| | | lock: true, |
| | | screenshot: true, |
| | | fullscreen: true, |
| | | theme: true, |
| | | menu: true, |
| | | }, |
| | | fistPage: { |
| | | name: '测试页', |
| | | path: '/test', |
| | | }, |
| | | //配置菜单的属性 |
| | | menu: { |
| | | iconDefault: 'icon-caidan', |
| | | label: 'name', |
| | | path: 'path', |
| | | icon: 'source', |
| | | children: 'children', |
| | | query: 'query', |
| | | href: 'path', |
| | | meta: 'meta', |
| | | }, |
| | | //oauth2配置 |
| | | oauth2: { |
| | | // 是否开启注册功能 |
| | | registerMode: true, |
| | | // 使用后端工程 @org.springblade.test.Sm2KeyGenerator 获取 |
| | | publicKey: '请配置国密sm2公钥', |
| | | // 第三方系统授权地址 |
| | | authUrl: 'http://localhost/blade-auth/oauth/render', |
| | | // 单点登录系统认证(cloud端口为8100,boot端口为80) |
| | | ssoUrl: 'http://localhost:8100/oauth/authorize?client_id=saber3&response_type=code&redirect_uri=', |
| | | // 单点登录回调地址(Saber服务的登录界面地址) |
| | | redirectUri: 'http://localhost:2888/login', |
| | | }, |
| | | //设计器配置 |
| | | design: { |
| | | // 流程设计器类型(true->nutflow,false->flowable) |
| | | designMode: true, |
| | | // 流程设计器地址(flowable模式) |
| | | designUrl: 'http://localhost:9999', |
| | | // 报表设计器地址(cloud端口为8108,boot端口为80) |
| | | reportUrl: 'http://localhost:8108/ureport', |
| | | }, |
| | | } |
| | |
| | | query: firstMenu.query || {}, |
| | | meta: firstMenu.meta || {}, |
| | | }) |
| | | |
| | | store.commit('ADD_TAG', { |
| | | name: toMenu.name, |
| | | path: toMenu.path, |
| | |
| | | const pageTitle = isLoginPage ? '中图智飞低空感知网平台' : '综合管理平台' |
| | | document.title = pageTitle |
| | | store.commit('SET_IS_SEARCH', false) |
| | | }) |
| | | }) |
| | |
| | | import Store from '@/store/' |
| | | |
| | | export default [ |
| | | { |
| | | path: '/login', |
| | | name: '登录页', |
| | | component: () => |
| | | Store.getters.isMacOs ? import('@/mac/login.vue') : import('@/page/login/index.vue'), |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/oauth/redirect/:source', |
| | | name: '第三方登录', |
| | | component: () => |
| | | Store.getters.isMacOs ? import('@/mac/login.vue') : import('@/page/login/index.vue'), |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/lock', |
| | | name: '锁屏页', |
| | | component: () => |
| | | Store.getters.isMacOs ? import('@/mac/lock.vue') : import('@/page/lock/index.vue'), |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/404', |
| | | component: () => import(/* webpackChunkName: "page" */ '@/components/error-page/404.vue'), |
| | | name: '404', |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/403', |
| | | component: () => import(/* webpackChunkName: "page" */ '@/components/error-page/403.vue'), |
| | | name: '403', |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/500', |
| | | component: () => import(/* webpackChunkName: "page" */ '@/components/error-page/500.vue'), |
| | | name: '500', |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/', |
| | | name: '主页', |
| | | redirect: '/wel', |
| | | }, |
| | | // { |
| | | // path: '/', |
| | | // name: '主页', |
| | | // redirect: '/tickets/ticket', |
| | | // }, |
| | | { |
| | | path: '/login', |
| | | name: '登录页', |
| | | component: () => (Store.getters.isMacOs ? import('@/mac/login.vue') : import('@/page/login/index.vue')), |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/oauth/redirect/:source', |
| | | name: '第三方登录', |
| | | component: () => (Store.getters.isMacOs ? import('@/mac/login.vue') : import('@/page/login/index.vue')), |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/lock', |
| | | name: '锁屏页', |
| | | component: () => (Store.getters.isMacOs ? import('@/mac/lock.vue') : import('@/page/lock/index.vue')), |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/404', |
| | | component: () => import(/* webpackChunkName: "page" */ '@/components/error-page/404.vue'), |
| | | name: '404', |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/403', |
| | | component: () => import(/* webpackChunkName: "page" */ '@/components/error-page/403.vue'), |
| | | name: '403', |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | { |
| | | path: '/500', |
| | | component: () => import(/* webpackChunkName: "page" */ '@/components/error-page/500.vue'), |
| | | name: '500', |
| | | meta: { |
| | | keepAlive: true, |
| | | isTab: false, |
| | | isAuth: false, |
| | | }, |
| | | }, |
| | | ] |
| | |
| | | } |
| | | ], |
| | | }, |
| | | // 事件工单 |
| | | // { |
| | | // path: '/tickets', |
| | | // component: () => |
| | | // Store.getters.isMacOs ? import('@/mac/index.vue') : import('@/page/index/index.vue'), |
| | | // redirect: '/tickets/ticket', |
| | | // children: [ |
| | | // { |
| | | // path: 'ticket', |
| | | // name: '事件工单', |
| | | // meta: { |
| | | // i18n: 'dashboard', |
| | | // }, |
| | | // component: () => import(/* webpackChunkName: "views" */ '@/views/tickets/ticket.vue'), |
| | | // }, |
| | | // ], |
| | | // }, |
| | | |
| | | { |
| | | path: '/test', |
| | | component: Layout, |
| | |
| | | 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 { 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 defaultAva from '@/assets/images/defaultava.png' |
| | | import { |
| | | loginByUsername, |
| | | loginBySocial, |
| | | loginBySso, |
| | | loginByPhone, |
| | | getUserInfo, |
| | | logout, |
| | | refreshToken, |
| | | getButtons, |
| | | registerUser, |
| | | getParentDeptInfo |
| | | } from '@/api/user'; |
| | | import { getRoutes, getTopMenu } from '@/api/system/menu'; |
| | | import { formatPath } from '@/router/avue-router'; |
| | | import { ElMessage } from 'element-plus'; |
| | | import { encrypt } from '@/utils/sm2'; |
| | | import md5 from 'js-md5'; |
| | | |
| | | loginByUsername, |
| | | loginBySocial, |
| | | loginBySso, |
| | | loginByPhone, |
| | | getUserInfo, |
| | | logout, |
| | | refreshToken, |
| | | getButtons, |
| | | registerUser, |
| | | getParentDeptInfo, |
| | | } from '@/api/user' |
| | | import { getRoutes, getTopMenu } from '@/api/system/menu' |
| | | import { formatPath } from '@/router/avue-router' |
| | | import { ElMessage } from 'element-plus' |
| | | import { encrypt } from '@/utils/sm2' |
| | | import md5 from 'js-md5' |
| | | |
| | | const user = { |
| | | state: { |
| | | tenantId: getStore({ name: 'tenantId' }) || '', |
| | | userInfo: getStore({ name: 'userInfo' }) || [], |
| | | permission: getStore({ name: 'permission' }) || {}, |
| | | roles: [], |
| | | menuId: {}, |
| | | menu: getStore({ name: 'menu' }) || [], |
| | | menuAll: getStore({ name: 'menuAll' }) || [], |
| | | token: getStore({ name: 'token' }) || '', |
| | | refreshToken: getStore({ name: 'refreshToken' }) || '', |
| | | parentDeptInfo: getStore({ name: 'parentDeptInfo' }) || '', |
| | | state: { |
| | | tenantId: getStore({ name: 'tenantId' }) || '', |
| | | userInfo: getStore({ name: 'userInfo' }) || [], |
| | | permission: getStore({ name: 'permission' }) || {}, |
| | | roles: [], |
| | | menuId: {}, |
| | | menu: getStore({ name: 'menu' }) || [], |
| | | menuAll: getStore({ name: 'menuAll' }) || [], |
| | | token: getStore({ name: 'token' }) || '', |
| | | refreshToken: getStore({ name: 'refreshToken' }) || '', |
| | | parentDeptInfo: getStore({ name: 'parentDeptInfo' }) || '', |
| | | }, |
| | | actions: { |
| | | //根据用户名登录 |
| | | LoginByUsername({ commit }, userInfo = {}) { |
| | | return new Promise((resolve, reject) => { |
| | | loginByUsername( |
| | | userInfo.tenantId, |
| | | userInfo.deptId, |
| | | userInfo.roleId, |
| | | userInfo.username, |
| | | md5(userInfo.password), |
| | | userInfo.type, |
| | | userInfo.key, |
| | | userInfo.code |
| | | ) |
| | | .then(res => { |
| | | const data = res.data |
| | | if (data.error_description) { |
| | | ElMessage({ |
| | | message: data.error_description, |
| | | type: 'error', |
| | | }) |
| | | } else { |
| | | commit('SET_TOKEN', data.access_token) |
| | | commit('SET_REFRESH_TOKEN', data.refresh_token) |
| | | commit('SET_TENANT_ID', data.tenant_id) |
| | | commit('SET_USER_INFO', data) |
| | | commit('SET_PARENT_DEPT_INFO', data.dept_id) |
| | | commit('DEL_ALL_TAG') |
| | | commit('CLEAR_LOCK') |
| | | } |
| | | resolve() |
| | | }) |
| | | .catch(err => { |
| | | reject(err) |
| | | }) |
| | | }) |
| | | }, |
| | | //根据第三方信息登录 |
| | | LoginBySocial({ commit }, userInfo) { |
| | | return new Promise((resolve, reject) => { |
| | | loginBySocial(userInfo.tenantId, userInfo.source, userInfo.code, userInfo.state) |
| | | .then(res => { |
| | | const data = res.data |
| | | if (data.error_description) { |
| | | ElMessage({ |
| | | message: data.error_description, |
| | | type: 'error', |
| | | }) |
| | | } else { |
| | | commit('SET_TOKEN', data.access_token) |
| | | commit('SET_REFRESH_TOKEN', data.refresh_token) |
| | | commit('SET_USER_INFO', data) |
| | | commit('SET_TENANT_ID', data.tenant_id) |
| | | commit('DEL_ALL_TAG') |
| | | commit('CLEAR_LOCK') |
| | | } |
| | | resolve() |
| | | }) |
| | | .catch(err => { |
| | | reject(err) |
| | | }) |
| | | }) |
| | | }, |
| | | //根据单点信息登录 |
| | | LoginBySso({ commit }, userInfo) { |
| | | return new Promise((resolve, reject) => { |
| | | loginBySso(userInfo.state, userInfo.code) |
| | | .then(res => { |
| | | const data = res.data |
| | | if (data.error_description) { |
| | | ElMessage({ |
| | | message: data.error_description, |
| | | type: 'error', |
| | | }) |
| | | } else { |
| | | commit('SET_TOKEN', data.access_token) |
| | | commit('SET_REFRESH_TOKEN', data.refresh_token) |
| | | commit('SET_USER_INFO', data) |
| | | commit('SET_TENANT_ID', data.tenant_id) |
| | | commit('DEL_ALL_TAG') |
| | | commit('CLEAR_LOCK') |
| | | } |
| | | resolve() |
| | | }) |
| | | .catch(err => { |
| | | reject(err) |
| | | }) |
| | | }) |
| | | }, |
| | | //根据手机信息登录 |
| | | LoginByPhone({ commit }, userInfo) { |
| | | return new Promise((resolve, reject) => { |
| | | loginByPhone(userInfo.tenantId, encrypt(userInfo.phone), userInfo.codeId, userInfo.codeValue) |
| | | .then(res => { |
| | | const data = res.data |
| | | if (data.error_description) { |
| | | ElMessage({ |
| | | message: data.error_description, |
| | | type: 'error', |
| | | }) |
| | | } else { |
| | | commit('SET_TOKEN', data.access_token) |
| | | commit('SET_REFRESH_TOKEN', data.refresh_token) |
| | | commit('SET_USER_INFO', data) |
| | | commit('SET_TENANT_ID', data.tenant_id) |
| | | commit('DEL_ALL_TAG') |
| | | commit('CLEAR_LOCK') |
| | | } |
| | | resolve() |
| | | }) |
| | | .catch(err => { |
| | | reject(err) |
| | | }) |
| | | }) |
| | | }, |
| | | //用户注册 |
| | | RegisterUser({ commit }, userInfo = {}) { |
| | | return new Promise((resolve, reject) => { |
| | | registerUser( |
| | | userInfo.tenantId, |
| | | userInfo.name, |
| | | userInfo.account, |
| | | encrypt(userInfo.password), |
| | | userInfo.phone, |
| | | userInfo.email |
| | | ).then(res => { |
| | | const data = res.data |
| | | if (data.error_description) { |
| | | ElMessage({ |
| | | message: data.error_description, |
| | | type: 'error', |
| | | }) |
| | | reject(data.error_description) |
| | | } else { |
| | | commit('SET_TOKEN', data.access_token) |
| | | commit('SET_REFRESH_TOKEN', data.refresh_token) |
| | | commit('SET_USER_INFO', data) |
| | | commit('SET_TENANT_ID', data.tenant_id) |
| | | commit('DEL_ALL_TAG') |
| | | commit('CLEAR_LOCK') |
| | | } |
| | | resolve() |
| | | }) |
| | | }) |
| | | }, |
| | | GetUserInfo({ commit }) { |
| | | return new Promise((resolve, reject) => { |
| | | getUserInfo() |
| | | .then(res => { |
| | | const data = res.data.data |
| | | commit('SET_ROLES', data.roles) |
| | | resolve(data) |
| | | }) |
| | | .catch(err => { |
| | | reject(err) |
| | | }) |
| | | }) |
| | | }, |
| | | //刷新token |
| | | RefreshToken({ state, commit }, userInfo) { |
| | | return new Promise((resolve, reject) => { |
| | | refreshToken( |
| | | getRefreshToken(), |
| | | state.tenantId, |
| | | !validatenull(userInfo) ? userInfo.deptId : state.userInfo.dept_id, |
| | | !validatenull(userInfo) ? userInfo.roleId : state.userInfo.role_id |
| | | ) |
| | | .then(res => { |
| | | const data = res.data |
| | | commit('SET_TOKEN', data.access_token) |
| | | commit('SET_REFRESH_TOKEN', data.refresh_token) |
| | | commit('SET_USER_INFO', data) |
| | | resolve() |
| | | }) |
| | | .catch(error => { |
| | | reject(error) |
| | | }) |
| | | }) |
| | | }, |
| | | // 登出 |
| | | LogOut({ commit }) { |
| | | return new Promise((resolve, reject) => { |
| | | logout() |
| | | .then(() => { |
| | | commit('SET_TOKEN', '') |
| | | commit('SET_MENU_ALL_NULL', []) |
| | | commit('SET_MENU', []) |
| | | commit('SET_ROLES', []) |
| | | commit('DEL_ALL_TAG', []) |
| | | commit('CLEAR_LOCK') |
| | | removeToken() |
| | | removeRefreshToken() |
| | | resolve() |
| | | }) |
| | | .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() |
| | | }) |
| | | }, |
| | | GetTopMenu() { |
| | | return new Promise(resolve => { |
| | | getTopMenu().then(res => { |
| | | const data = res.data.data || [] |
| | | resolve(data) |
| | | }) |
| | | }) |
| | | }, |
| | | 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 |
| | | env === 'development' |
| | | ? (window.location.href = '/task-work-order/login') |
| | | : window.location.replace(`${adminUrl}#/login`) |
| | | }) |
| | | } |
| | | return new Promise(resolve => { |
| | | getRoutes({ tenantId, sysType: 6 }) |
| | | .then(res => { |
| | | const data = res.data.data |
| | | let menu = deepClone(data) |
| | | if (!res.data?.data?.length) { |
| | | errLogOut() |
| | | return |
| | | } |
| | | menu.forEach(ele => formatPath(ele, true)) |
| | | commit('SET_MENU', menu) |
| | | commit('SET_MENU_ALL', menu) |
| | | dispatch('GetButtons') |
| | | resolve(menu) |
| | | }) |
| | | .catch(err => { |
| | | errLogOut() |
| | | }) |
| | | }) |
| | | }, |
| | | GetButtons({ commit }) { |
| | | return new Promise(resolve => { |
| | | getButtons({ sysType: 6 }).then(res => { |
| | | const data = res.data.data |
| | | commit('SET_PERMISSION', data) |
| | | resolve() |
| | | }) |
| | | }) |
| | | }, |
| | | }, |
| | | mutations: { |
| | | SET_PARENT_DEPT_INFO(state, deptId) { |
| | | getParentDeptInfo({ deptId: deptId }).then(res => { |
| | | const data = res.data.data |
| | | state.parentDeptInfo = data |
| | | setStore({ name: 'parentDeptInfo', content: data }) |
| | | }) |
| | | }, |
| | | SET_TOKEN: (state, token) => { |
| | | setToken(token) |
| | | state.token = token |
| | | setStore({ name: 'token', content: state.token }) |
| | | }, |
| | | SET_REFRESH_TOKEN: (state, refreshToken) => { |
| | | setRefreshToken(refreshToken) |
| | | state.refreshToken = refreshToken |
| | | setStore({ name: 'refreshToken', content: state.refreshToken }) |
| | | }, |
| | | SET_MENU_ID(state, menuId) { |
| | | state.menuId = menuId |
| | | }, |
| | | SET_TENANT_ID: (state, tenantId) => { |
| | | state.tenantId = tenantId |
| | | setStore({ name: 'tenantId', content: state.tenantId }) |
| | | }, |
| | | SET_USER_INFO: (state, userInfo) => { |
| | | if (validatenull(userInfo.user_id) && validatenull(userInfo.account)) { |
| | | state.userInfo = { user_name: 'unauth', role_name: 'unauth' } |
| | | } else { |
| | | if (validatenull(userInfo.avatar)) { |
| | | userInfo.avatar = defaultAva |
| | | } |
| | | state.userInfo = userInfo |
| | | } |
| | | setStore({ name: 'userInfo', content: state.userInfo }) |
| | | }, |
| | | SET_MENU_ALL: (state, menuAll) => { |
| | | let menu = state.menuAll |
| | | menuAll.forEach(ele => { |
| | | let index = menu.findIndex(item => item.path === ele.path) |
| | | if (index === -1) { |
| | | menu.push(ele) |
| | | } else { |
| | | menu[index] = ele |
| | | } |
| | | }) |
| | | state.menuAll = menu |
| | | setStore({ name: 'menuAll', content: state.menuAll }) |
| | | }, |
| | | SET_MENU_ALL_NULL: state => { |
| | | state.menuAll = [] |
| | | setStore({ name: 'menuAll', content: state.menuAll }) |
| | | }, |
| | | SET_MENU: (state, menu) => { |
| | | state.menu = menu |
| | | setStore({ name: 'menu', content: state.menu }) |
| | | }, |
| | | SET_ROLES: (state, roles) => { |
| | | state.roles = roles |
| | | }, |
| | | SET_PERMISSION: (state, permission) => { |
| | | let result = [] |
| | | |
| | | }, |
| | | actions: { |
| | | //根据用户名登录 |
| | | LoginByUsername({ commit }, userInfo = {}) { |
| | | return new Promise((resolve, reject) => { |
| | | loginByUsername( |
| | | userInfo.tenantId, |
| | | userInfo.deptId, |
| | | userInfo.roleId, |
| | | userInfo.username, |
| | | md5(userInfo.password), |
| | | userInfo.type, |
| | | userInfo.key, |
| | | userInfo.code |
| | | ) |
| | | .then(res => { |
| | | const data = res.data; |
| | | if (data.error_description) { |
| | | ElMessage({ |
| | | message: data.error_description, |
| | | type: 'error', |
| | | }); |
| | | } else { |
| | | commit('SET_TOKEN', data.access_token); |
| | | commit('SET_REFRESH_TOKEN', data.refresh_token); |
| | | commit('SET_TENANT_ID', data.tenant_id); |
| | | commit('SET_USER_INFO', data); |
| | | commit('SET_PARENT_DEPT_INFO', data.dept_id); |
| | | commit('DEL_ALL_TAG'); |
| | | commit('CLEAR_LOCK'); |
| | | } |
| | | resolve(); |
| | | }) |
| | | .catch(err => { |
| | | reject(err); |
| | | }); |
| | | }); |
| | | }, |
| | | //根据第三方信息登录 |
| | | LoginBySocial({ commit }, userInfo) { |
| | | return new Promise((resolve, reject) => { |
| | | loginBySocial(userInfo.tenantId, userInfo.source, userInfo.code, userInfo.state) |
| | | .then(res => { |
| | | const data = res.data; |
| | | if (data.error_description) { |
| | | ElMessage({ |
| | | message: data.error_description, |
| | | type: 'error', |
| | | }); |
| | | } else { |
| | | commit('SET_TOKEN', data.access_token); |
| | | commit('SET_REFRESH_TOKEN', data.refresh_token); |
| | | commit('SET_USER_INFO', data); |
| | | commit('SET_TENANT_ID', data.tenant_id); |
| | | commit('DEL_ALL_TAG'); |
| | | commit('CLEAR_LOCK'); |
| | | } |
| | | resolve(); |
| | | }) |
| | | .catch(err => { |
| | | reject(err); |
| | | }); |
| | | }); |
| | | }, |
| | | //根据单点信息登录 |
| | | LoginBySso({ commit }, userInfo) { |
| | | return new Promise((resolve, reject) => { |
| | | loginBySso(userInfo.state, userInfo.code) |
| | | .then(res => { |
| | | const data = res.data; |
| | | if (data.error_description) { |
| | | ElMessage({ |
| | | message: data.error_description, |
| | | type: 'error', |
| | | }); |
| | | } else { |
| | | commit('SET_TOKEN', data.access_token); |
| | | commit('SET_REFRESH_TOKEN', data.refresh_token); |
| | | commit('SET_USER_INFO', data); |
| | | commit('SET_TENANT_ID', data.tenant_id); |
| | | commit('DEL_ALL_TAG'); |
| | | commit('CLEAR_LOCK'); |
| | | } |
| | | resolve(); |
| | | }) |
| | | .catch(err => { |
| | | reject(err); |
| | | }); |
| | | }); |
| | | }, |
| | | //根据手机信息登录 |
| | | LoginByPhone({ commit }, userInfo) { |
| | | return new Promise((resolve, reject) => { |
| | | loginByPhone( |
| | | userInfo.tenantId, |
| | | encrypt(userInfo.phone), |
| | | userInfo.codeId, |
| | | userInfo.codeValue |
| | | ) |
| | | .then(res => { |
| | | const data = res.data; |
| | | if (data.error_description) { |
| | | ElMessage({ |
| | | message: data.error_description, |
| | | type: 'error', |
| | | }); |
| | | } else { |
| | | commit('SET_TOKEN', data.access_token); |
| | | commit('SET_REFRESH_TOKEN', data.refresh_token); |
| | | commit('SET_USER_INFO', data); |
| | | commit('SET_TENANT_ID', data.tenant_id); |
| | | commit('DEL_ALL_TAG'); |
| | | commit('CLEAR_LOCK'); |
| | | } |
| | | resolve(); |
| | | }) |
| | | .catch(err => { |
| | | reject(err); |
| | | }); |
| | | }); |
| | | }, |
| | | //用户注册 |
| | | RegisterUser({ commit }, userInfo = {}) { |
| | | return new Promise((resolve, reject) => { |
| | | registerUser( |
| | | userInfo.tenantId, |
| | | userInfo.name, |
| | | userInfo.account, |
| | | encrypt(userInfo.password), |
| | | userInfo.phone, |
| | | userInfo.email |
| | | ).then(res => { |
| | | const data = res.data; |
| | | if (data.error_description) { |
| | | ElMessage({ |
| | | message: data.error_description, |
| | | type: 'error', |
| | | }); |
| | | reject(data.error_description); |
| | | } else { |
| | | commit('SET_TOKEN', data.access_token); |
| | | commit('SET_REFRESH_TOKEN', data.refresh_token); |
| | | commit('SET_USER_INFO', data); |
| | | commit('SET_TENANT_ID', data.tenant_id); |
| | | commit('DEL_ALL_TAG'); |
| | | commit('CLEAR_LOCK'); |
| | | } |
| | | resolve(); |
| | | }); |
| | | }); |
| | | }, |
| | | GetUserInfo({ commit }) { |
| | | return new Promise((resolve, reject) => { |
| | | getUserInfo() |
| | | .then(res => { |
| | | const data = res.data.data; |
| | | commit('SET_ROLES', data.roles); |
| | | resolve(data); |
| | | }) |
| | | .catch(err => { |
| | | reject(err); |
| | | }); |
| | | }); |
| | | }, |
| | | //刷新token |
| | | RefreshToken({ state, commit }, userInfo) { |
| | | return new Promise((resolve, reject) => { |
| | | refreshToken( |
| | | getRefreshToken(), |
| | | state.tenantId, |
| | | !validatenull(userInfo) ? userInfo.deptId : state.userInfo.dept_id, |
| | | !validatenull(userInfo) ? userInfo.roleId : state.userInfo.role_id |
| | | ) |
| | | .then(res => { |
| | | const data = res.data; |
| | | commit('SET_TOKEN', data.access_token); |
| | | commit('SET_REFRESH_TOKEN', data.refresh_token); |
| | | commit('SET_USER_INFO', data); |
| | | resolve(); |
| | | }) |
| | | .catch(error => { |
| | | reject(error); |
| | | }); |
| | | }); |
| | | }, |
| | | // 登出 |
| | | LogOut({ commit }) { |
| | | return new Promise((resolve, reject) => { |
| | | logout() |
| | | .then(() => { |
| | | commit('SET_TOKEN', ''); |
| | | commit('SET_MENU_ALL_NULL', []); |
| | | commit('SET_MENU', []); |
| | | commit('SET_ROLES', []); |
| | | commit('DEL_ALL_TAG', []); |
| | | commit('CLEAR_LOCK'); |
| | | removeToken(); |
| | | removeRefreshToken(); |
| | | resolve(); |
| | | }) |
| | | .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(); |
| | | }); |
| | | }, |
| | | GetTopMenu() { |
| | | return new Promise(resolve => { |
| | | getTopMenu().then(res => { |
| | | const data = res.data.data || []; |
| | | resolve(data); |
| | | }); |
| | | }); |
| | | }, |
| | | 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 |
| | | env === 'development' |
| | | ? window.location.href = "/manage/login" |
| | | : window.location.replace(`${adminUrl}#/login`) |
| | | }) |
| | | } |
| | | return new Promise(resolve => { |
| | | getRoutes({tenantId,sysType: 6}).then(res => { |
| | | const data = res.data.data; |
| | | let menu = deepClone(data); |
| | | if (!res.data?.data?.length){ |
| | | errLogOut() |
| | | return |
| | | } |
| | | menu.forEach(ele => formatPath(ele, true)); |
| | | commit('SET_MENU', menu); |
| | | commit('SET_MENU_ALL', menu); |
| | | dispatch('GetButtons'); |
| | | resolve(menu); |
| | | }).catch(err =>{ |
| | | errLogOut() |
| | | }) |
| | | }); |
| | | }, |
| | | GetButtons({ commit }) { |
| | | return new Promise(resolve => { |
| | | getButtons({sysType: 6}).then(res => { |
| | | const data = res.data.data; |
| | | commit('SET_PERMISSION', data); |
| | | resolve(); |
| | | }); |
| | | }); |
| | | }, |
| | | }, |
| | | mutations: { |
| | | SET_PARENT_DEPT_INFO(state, deptId){ |
| | | getParentDeptInfo({deptId:deptId}).then(res=>{ |
| | | const data = res.data.data; |
| | | state.parentDeptInfo = data; |
| | | setStore({ name: 'parentDeptInfo', content: data }); |
| | | }) |
| | | }, |
| | | SET_TOKEN: (state, token) => { |
| | | setToken(token); |
| | | state.token = token; |
| | | setStore({ name: 'token', content: state.token }); |
| | | }, |
| | | SET_REFRESH_TOKEN: (state, refreshToken) => { |
| | | setRefreshToken(refreshToken); |
| | | state.refreshToken = refreshToken; |
| | | setStore({ name: 'refreshToken', content: state.refreshToken }); |
| | | }, |
| | | SET_MENU_ID(state, menuId) { |
| | | state.menuId = menuId; |
| | | }, |
| | | SET_TENANT_ID: (state, tenantId) => { |
| | | state.tenantId = tenantId; |
| | | setStore({ name: 'tenantId', content: state.tenantId }); |
| | | }, |
| | | SET_USER_INFO: (state, userInfo) => { |
| | | if (validatenull(userInfo.user_id) && validatenull(userInfo.account)) { |
| | | state.userInfo = { user_name: 'unauth', role_name: 'unauth' }; |
| | | } else { |
| | | if (validatenull(userInfo.avatar)) { |
| | | userInfo.avatar = defaultAva; |
| | | } |
| | | state.userInfo = userInfo; |
| | | } |
| | | setStore({ name: 'userInfo', content: state.userInfo }); |
| | | }, |
| | | SET_MENU_ALL: (state, menuAll) => { |
| | | let menu = state.menuAll; |
| | | menuAll.forEach(ele => { |
| | | let index = menu.findIndex(item => item.path === ele.path); |
| | | if (index === -1) { |
| | | menu.push(ele); |
| | | } else { |
| | | menu[index] = ele; |
| | | } |
| | | }); |
| | | state.menuAll = menu; |
| | | setStore({ name: 'menuAll', content: state.menuAll }); |
| | | }, |
| | | SET_MENU_ALL_NULL: state => { |
| | | state.menuAll = []; |
| | | setStore({ name: 'menuAll', content: state.menuAll }); |
| | | }, |
| | | SET_MENU: (state, menu) => { |
| | | state.menu = menu; |
| | | setStore({ name: 'menu', content: state.menu }); |
| | | }, |
| | | SET_ROLES: (state, roles) => { |
| | | state.roles = roles; |
| | | }, |
| | | SET_PERMISSION: (state, permission) => { |
| | | let result = []; |
| | | function getCode(list) { |
| | | list.forEach(ele => { |
| | | if (typeof ele === 'object') { |
| | | const children = ele.children |
| | | const code = ele.code |
| | | if (children) { |
| | | getCode(children) |
| | | } else { |
| | | result.push(code) |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | |
| | | function getCode(list) { |
| | | list.forEach(ele => { |
| | | if (typeof ele === 'object') { |
| | | const children = ele.children; |
| | | const code = ele.code; |
| | | if (children) { |
| | | getCode(children); |
| | | } else { |
| | | result.push(code); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | getCode(permission); |
| | | state.permission = {}; |
| | | result.forEach(ele => { |
| | | state.permission[ele] = true; |
| | | }); |
| | | setStore({ name: 'permission', content: state.permission, type: 'session' }); |
| | | }, |
| | | }, |
| | | }; |
| | | export default user; |
| | | getCode(permission) |
| | | state.permission = {} |
| | | result.forEach(ele => { |
| | | state.permission[ele] = true |
| | | }) |
| | | setStore({ name: 'permission', content: state.permission, type: 'session' }) |
| | | }, |
| | | }, |
| | | } |
| | | export default user |
| | |
| | | <template> |
| | | <div> |
| | | |
| | | 测试 |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | |
| | | </style> |
| | | </style> |