Initial commit

This commit is contained in:
danshihao
2024-06-11 15:39:01 +08:00
commit 00acf31aa3
1589 changed files with 520803 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
import Vue from 'vue'
import { USER_INFO, ENHANCE_PRE } from '@/store/mutation-types'
const getters = {
device: state => state.app.device,
theme: state => state.app.theme,
color: state => state.app.color,
token: state => state.user.token,
avatar: state => {
state.user.avatar = Vue.ls.get(USER_INFO).avatar
return state.user.avatar
},
username: state => state.user.username,
nickname: state => {
state.user.realname = Vue.ls.get(USER_INFO).realname
return state.user.realname
},
welcome: state => state.user.welcome,
permissionList: state => state.user.permissionList,
userInfo: state => {
state.user.info = Vue.ls.get(USER_INFO)
return state.user.info
},
addRouters: state => state.permission.addRouters,
onlAuthFields: state => {
return state.online.authFields
},
enhanceJs: (state) => (code) => {
state.enhance.enhanceJs[code] = Vue.ls.get(ENHANCE_PRE + code)
return state.enhance.enhanceJs[code]
},
isEmbedded: state => state.app.isEmbedded,
defaultHeight: state => state.app.defaultHeight
}
export default getters
+31
View File
@@ -0,0 +1,31 @@
import Vue from 'vue'
import Vuex from 'vuex'
import app from './modules/app'
import user from './modules/user'
import enhance from './modules/enhance'
import online from './modules/online'
import permission from './modules/permission'
import getters from './getters'
Vue.use(Vuex)
export default new Vuex.Store({
modules: {
app,
user,
permission,
enhance,
online
},
state: {
},
mutations: {
},
actions: {
},
getters
})
+134
View File
@@ -0,0 +1,134 @@
import Vue from 'vue'
import {
SIDEBAR_TYPE,
DEFAULT_THEME,
DEFAULT_LAYOUT_MODE,
DEFAULT_COLOR,
DEFAULT_COLOR_WEAK,
DEFAULT_FIXED_HEADER,
DEFAULT_FIXED_SIDEMENU,
DEFAULT_FIXED_HEADER_HIDDEN,
DEFAULT_CONTENT_WIDTH_TYPE,
DEFAULT_MULTI_PAGE
} from '@/store/mutation-types'
const app = {
state: {
sidebar: {
opened: true,
withoutAnimation: false
},
device: 'desktop',
theme: '',
layout: '',
contentWidth: '',
fixedHeader: false,
fixSiderbar: false,
autoHideHeader: false,
color: null,
weak: false,
multipage: true, // 默认多页签模式
isEmbedded: false, // 是否嵌入其他系统
defaultHeight: {} // 包含用户信息的高度、面包屑的高度、单行查询条件的高度、单行操作列的高度
},
mutations: {
SET_SIDEBAR_TYPE: (state, type) => {
state.sidebar.opened = type
Vue.ls.set(SIDEBAR_TYPE, type)
},
CLOSE_SIDEBAR: (state, withoutAnimation) => {
Vue.ls.set(SIDEBAR_TYPE, true)
state.sidebar.opened = false
state.sidebar.withoutAnimation = withoutAnimation
},
TOGGLE_DEVICE: (state, device) => {
state.device = device
},
TOGGLE_THEME: (state, theme) => {
// setStore('_DEFAULT_THEME', theme)
Vue.ls.set(DEFAULT_THEME, theme)
state.theme = theme
},
TOGGLE_LAYOUT_MODE: (state, layout) => {
Vue.ls.set(DEFAULT_LAYOUT_MODE, layout)
state.layout = layout
},
TOGGLE_FIXED_HEADER: (state, fixed) => {
Vue.ls.set(DEFAULT_FIXED_HEADER, fixed)
state.fixedHeader = fixed
},
TOGGLE_FIXED_SIDERBAR: (state, fixed) => {
Vue.ls.set(DEFAULT_FIXED_SIDEMENU, fixed)
state.fixSiderbar = fixed
},
TOGGLE_FIXED_HEADER_HIDDEN: (state, show) => {
Vue.ls.set(DEFAULT_FIXED_HEADER_HIDDEN, show)
state.autoHideHeader = show
},
TOGGLE_CONTENT_WIDTH: (state, type) => {
Vue.ls.set(DEFAULT_CONTENT_WIDTH_TYPE, type)
state.contentWidth = type
},
TOGGLE_COLOR: (state, color) => {
Vue.ls.set(DEFAULT_COLOR, color)
state.color = color
},
TOGGLE_WEAK: (state, flag) => {
Vue.ls.set(DEFAULT_COLOR_WEAK, flag)
state.weak = flag
},
SET_MULTI_PAGE (state, multipageFlag) {
Vue.ls.set(DEFAULT_MULTI_PAGE, multipageFlag)
state.multipage = multipageFlag
},
SET_IS_EMBEDDED (state, isEmbedded) {
state.isEmbedded = isEmbedded
},
SET_DEFAULT_HEIGHT (state, defaultHeight) {
state.defaultHeight = defaultHeight
}
},
actions: {
setSidebar: ({ commit }, type) => {
commit('SET_SIDEBAR_TYPE', type)
},
CloseSidebar ({ commit }, { withoutAnimation }) {
commit('CLOSE_SIDEBAR', withoutAnimation)
},
ToggleDevice ({ commit }, device) {
commit('TOGGLE_DEVICE', device)
},
ToggleTheme ({ commit }, theme) {
commit('TOGGLE_THEME', theme)
},
ToggleLayoutMode ({ commit }, mode) {
commit('TOGGLE_LAYOUT_MODE', mode)
},
ToggleFixedHeader ({ commit }, fixedHeader) {
if (!fixedHeader) {
commit('TOGGLE_FIXED_HEADER_HIDDEN', false)
}
commit('TOGGLE_FIXED_HEADER', fixedHeader)
},
ToggleFixSiderbar ({ commit }, fixSiderbar) {
commit('TOGGLE_FIXED_SIDERBAR', fixSiderbar)
},
ToggleFixedHeaderHidden ({ commit }, show) {
commit('TOGGLE_FIXED_HEADER_HIDDEN', show)
},
ToggleContentWidth ({ commit }, type) {
commit('TOGGLE_CONTENT_WIDTH', type)
},
ToggleColor ({ commit }, color) {
commit('TOGGLE_COLOR', color)
},
ToggleWeak ({ commit }, weakFlag) {
commit('TOGGLE_WEAK', weakFlag)
},
ToggleMultipage ({ commit }, multipageFlag) {
commit('SET_MULTI_PAGE', multipageFlag)
}
}
}
export default app
+37
View File
@@ -0,0 +1,37 @@
import Vue from 'vue'
const enhance = {
state: {
enhanceJs: {
}
},
mutations: {
ADD_TABLE_ENHANCE: (state, record) => {
if (!state.enhanceJs) {
const obj = {}
const arr = []
arr.push({ ...record })
obj[record.code] = arr
state.enhanceJs = obj
} else {
if (!state.enhanceJs[record.code]) {
const arr = []
arr.push({ ...record })
state.enhanceJs[record.code] = arr
}
state.enhanceJs[record.code].push({ ...record })
}
const arr = state.enhanceJs[record.code]
while (arr.length > 16) {
arr.shift()
}
Vue.ls.set('enhance_' + record.code, arr)
}
},
actions: {
addEhanceRecord ({ commit }, record) {
commit('ADD_TABLE_ENHANCE', record)
}
}
}
export default enhance
+22
View File
@@ -0,0 +1,22 @@
import Vue from 'vue'
const online = {
state: {
// 存储对象属性 value,text
authFields: []
},
mutations: {
SET_AUTHFIELDS: (state, fields) => {
console.log('fields', fields)
Vue.set(state, 'authFields', fields)
}
},
actions: {
// TODO 如果没找到可以尝试请求一下
xxxxxx ({ commit }, userInfo) {
}
}
}
export default online
+84
View File
@@ -0,0 +1,84 @@
import { asyncRouterMap, constantRouterMap } from '@/config/router.config'
/**
* 过滤账户是否拥有某一个权限,并将菜单从加载列表移除
*
* @param permission
* @param route
* @returns {boolean}
*/
function hasPermission (permission, route) {
if (route.meta && route.meta.permission) {
let flag = -1
for (let i = 0, len = permission.length; i < len; i++) {
flag = route.meta.permission.indexOf(permission[i])
if (flag >= 0) {
return true
}
}
return false
}
return true
}
/**
* 单账户多角色时,使用该方法可过滤角色不存在的菜单
*
* @param roles
* @param route
* @returns {*}
*/
// eslint-disable-next-line
function hasRole(roles, route) {
if (route.meta && route.meta.roles) {
return route.meta.roles.indexOf(roles.id)
} else {
return true
}
}
function filterAsyncRouter (routerMap, roles) {
return routerMap.filter(route => {
if (hasPermission(roles.permissionList, route)) {
if (route.children && route.children.length) {
route.children = filterAsyncRouter(route.children, roles)
}
return true
}
return false
})
}
const permission = {
state: {
routers: constantRouterMap,
addRouters: []
},
mutations: {
SET_ROUTERS: (state, data) => {
state.addRouters = data
state.routers = constantRouterMap.concat(data)
}
},
actions: {
GenerateRoutes ({ commit }, data) {
return new Promise(resolve => {
const { roles } = data
const accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
commit('SET_ROUTERS', accessedRouters)
resolve()
})
},
// 动态添加主界面路由,需要缓存
UpdateAppRouter ({ commit }, routes) {
return new Promise(resolve => {
// const [ roles ] = routes.constRoutes
const routelist = routes.constRoutes
commit('SET_ROUTERS', routelist)
resolve()
})
}
}
}
export default permission
+219
View File
@@ -0,0 +1,219 @@
import Vue from 'vue'
import { login, logout, phoneLogin, thirdLogin } from '@/api/login'
import { ACCESS_TOKEN, USER_NAME, USER_INFO, USER_AUTH, SYS_BUTTON_AUTH, UI_CACHE_DB_DICT_DATA, TENANT_ID, CACHE_INCLUDED_ROUTES } from '@/store/mutation-types'
import store from '@/store'
import { welcome } from '@/utils/util'
import { queryPermissionsByUser } from '@/api/api'
import { getAction } from '@/api/manage'
const user = {
state: {
token: '',
username: '',
realname: '',
tenantid: '',
welcome: '',
avatar: '',
permissionList: [],
info: {}
},
mutations: {
SET_TOKEN: (state, token) => {
state.token = token
},
SET_NAME: (state, { username, realname, welcome }) => {
state.username = username
state.realname = realname
state.welcome = welcome
},
SET_AVATAR: (state, avatar) => {
state.avatar = avatar
},
SET_PERMISSIONLIST: (state, permissionList) => {
state.permissionList = permissionList
},
SET_INFO: (state, info) => {
state.info = info
},
SET_TENANT: (state, id) => {
state.tenantid = id
}
},
actions: {
// CAS验证登录
ValidateLogin ({ commit }, userInfo) {
return new Promise((resolve, reject) => {
getAction('/sys/cas/client/validateLogin', userInfo).then(response => {
console.log('----cas 登录--------', response)
if (response.success) {
const result = response.result
const userInfo = result.userInfo
Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000)
Vue.ls.set(USER_NAME, userInfo.username, 7 * 24 * 60 * 60 * 1000)
Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000)
commit('SET_TOKEN', result.token)
commit('SET_INFO', userInfo)
commit('SET_NAME', { username: userInfo.username, realname: userInfo.realname, welcome: welcome() })
commit('SET_AVATAR', userInfo.avatar)
resolve(response)
} else {
resolve(response)
}
}).catch(error => {
reject(error)
})
})
},
// 登录
Login ({ commit }, userInfo) {
return new Promise((resolve, reject) => {
login(userInfo).then(response => {
if (response.code + '' === '200') {
const result = response.result
const userInfo = result.userInfo
Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000)
Vue.ls.set(USER_NAME, userInfo.username, 7 * 24 * 60 * 60 * 1000)
Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000)
Vue.ls.set(UI_CACHE_DB_DICT_DATA, result.sysAllDictItems, 7 * 24 * 60 * 60 * 1000)
commit('SET_TOKEN', result.token)
commit('SET_INFO', userInfo)
commit('SET_NAME', { username: userInfo.username, realname: userInfo.realname, welcome: welcome() })
commit('SET_AVATAR', userInfo.avatar)
resolve(response)
} else {
reject(response)
}
}).catch(error => {
reject(error)
})
})
},
// 手机号登录
PhoneLogin ({ commit }, userInfo) {
return new Promise((resolve, reject) => {
phoneLogin(userInfo).then(response => {
if (response.code + '' === '200') {
const result = response.result
const userInfo = result.userInfo
Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000)
Vue.ls.set(USER_NAME, userInfo.username, 7 * 24 * 60 * 60 * 1000)
Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000)
Vue.ls.set(UI_CACHE_DB_DICT_DATA, result.sysAllDictItems, 7 * 24 * 60 * 60 * 1000)
commit('SET_TOKEN', result.token)
commit('SET_INFO', userInfo)
commit('SET_NAME', { username: userInfo.username, realname: userInfo.realname, welcome: welcome() })
commit('SET_AVATAR', userInfo.avatar)
resolve(response)
} else {
reject(response)
}
}).catch(error => {
reject(error)
})
})
},
// 获取用户信息
GetPermissionList ({ commit }) {
return new Promise((resolve, reject) => {
queryPermissionsByUser().then(response => {
const menuData = response.result.menu
const authData = response.result.auth
const allAuthData = response.result.allAuth
// Vue.ls.set(USER_AUTH,authData);
sessionStorage.setItem(USER_AUTH, JSON.stringify(authData))
sessionStorage.setItem(SYS_BUTTON_AUTH, JSON.stringify(allAuthData))
if (menuData && menuData.length > 0) {
// update--begin--autor:qinfeng-----date:20200109------for 一级菜单的子菜单全部是隐藏路由,则一级菜单不显示------
menuData.forEach((item) => {
if (item.children) {
const hasChildrenMenu = item.children.filter((i) => {
return !i.hidden || i.hidden === false
})
if (hasChildrenMenu == null || hasChildrenMenu.length === 0) {
item.hidden = true
}
}
})
// console.log(" menu show json ", menuData)
// update--end--autor:qinfeng-----date:20200109------for 一级菜单的子菜单全部是隐藏路由,则一级菜单不显示------
commit('SET_PERMISSIONLIST', menuData)
} else {
Vue.prototype.$Jmodal.error({
title: '无权限',
content: '该用户无权限,请联系管理员!',
okText: '确认',
mask: false,
onOk: () => {
store.dispatch('Logout')
}
})
reject('getPermissionList: permissions must be a non-null array !')
}
resolve(response)
}).catch(error => {
reject(error)
})
})
},
// 登出
Logout ({ commit, state }) {
return new Promise((resolve) => {
const logoutToken = state.token
commit('SET_TOKEN', '')
commit('SET_PERMISSIONLIST', [])
Vue.ls.remove(ACCESS_TOKEN)
Vue.ls.remove(USER_INFO)
Vue.ls.remove(USER_NAME)
Vue.ls.remove(UI_CACHE_DB_DICT_DATA)
Vue.ls.remove(CACHE_INCLUDED_ROUTES)
Vue.ls.remove(TENANT_ID)
// console.log('logoutToken: '+ logoutToken)
logout(logoutToken).then(() => {
if (process.env.VUE_APP_SSO + '' === 'true') {
const sevice = 'http://' + window.location.host + '/'
const serviceUrl = encodeURIComponent(sevice)
window.location.href = process.env.VUE_APP_CAS_BASE_URL + '/logout?service=' + serviceUrl
} else {
window.location.replace(process.env.VUE_APP_LOGOUT_PAGE)
}
resolve()
}).catch(() => {
resolve()
})
})
},
// 第三方登录
ThirdLogin ({ commit }, param) {
return new Promise((resolve, reject) => {
thirdLogin(param.token, param.thirdType).then(response => {
if (response.code + '' === '200') {
const result = response.result
const userInfo = result.userInfo
Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000)
Vue.ls.set(USER_NAME, userInfo.username, 7 * 24 * 60 * 60 * 1000)
Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000)
commit('SET_TOKEN', result.token)
commit('SET_INFO', userInfo)
commit('SET_NAME', { username: userInfo.username, realname: userInfo.realname, welcome: welcome() })
commit('SET_AVATAR', userInfo.avatar)
resolve(response)
} else {
reject(response)
}
}).catch(error => {
reject(error)
})
})
},
saveTenant ({ commit }, id) {
Vue.ls.set(TENANT_ID, id, 7 * 24 * 60 * 60 * 1000)
commit('SET_TENANT', id)
}
}
}
export default user
+28
View File
@@ -0,0 +1,28 @@
export const ACCESS_TOKEN = 'Access-Token'
export const SIDEBAR_TYPE = 'SIDEBAR_TYPE'
export const DEFAULT_THEME = 'DEFAULT_THEME'
export const DEFAULT_LAYOUT_MODE = 'DEFAULT_LAYOUT_MODE'
export const DEFAULT_COLOR = 'DEFAULT_COLOR'
export const DEFAULT_COLOR_WEAK = 'DEFAULT_COLOR_WEAK'
export const DEFAULT_FIXED_HEADER = 'DEFAULT_FIXED_HEADER'
export const DEFAULT_FIXED_SIDEMENU = 'DEFAULT_FIXED_SIDEMENU'
export const DEFAULT_FIXED_HEADER_HIDDEN = 'DEFAULT_FIXED_HEADER_HIDDEN'
export const DEFAULT_CONTENT_WIDTH_TYPE = 'DEFAULT_CONTENT_WIDTH_TYPE'
export const DEFAULT_MULTI_PAGE = 'DEFAULT_MULTI_PAGE'
export const USER_NAME = 'Login_Username'
export const USER_INFO = 'Login_Userinfo'
export const USER_AUTH = 'LOGIN_USER_BUTTON_AUTH'
export const SYS_BUTTON_AUTH = 'SYS_BUTTON_AUTH'
export const ENCRYPTED_STRING = 'ENCRYPTED_STRING'
export const ENHANCE_PRE = 'enhance_'
export const UI_CACHE_DB_DICT_DATA = 'UI_CACHE_DB_DICT_DATA'
export const INDEX_MAIN_PAGE_PATH = '/dashboard/analysis'
export const OAUTH2_LOGIN_PAGE_PATH = '/oauth2-app/login'
export const TENANT_ID = 'TENANT_ID'
export const ONL_AUTH_FIELDS = 'ONL_AUTH_FIELDS'
// 路由缓存问题,关闭了tab页时再打开就不刷新 #842
export const CACHE_INCLUDED_ROUTES = 'CACHE_INCLUDED_ROUTES'
export const CONTENT_WIDTH_TYPE = {
Fluid: 'Fluid',
Fixed: 'Fixed'
}