2022年5月29日从svn移到git

This commit is contained in:
daihh
2022-05-29 18:56:34 +08:00
commit b050613020
488 changed files with 68444 additions and 0 deletions

25
src/store/getters.js Normal file
View File

@@ -0,0 +1,25 @@
const getters = {
init: state => state.app.initData,
sidebar: state => state.app.sidebar,
size: state => state.app.size,
device: state => state.app.device,
visitedViews: state => state.tagsView.visitedViews,
cachedViews: state => state.tagsView.cachedViews,
avatar: state => state.user.info.avatar,
userInfo: state => state.user.info,
newslist: state => state.user.newslist,
orgId: state => state.user.orgId,
permissions: state => state.user.permissions,
identity: state => state.user.identity,
curIdentity: state => state.user.curIdentity,
permission_routes: state => state.permission.routes,
sidebarRouters: state => state.permission.sidebarRouters,
portalCase: state => state.portal.case,
portalLoginRememberMe: state => state.portal.loginRememberMe,
resOwnerMap:state => state.resOwner.resOwnerMap,
sysTypeMap:state => state.sysType.sysTypeMap,
userMsg:state => state.user.msg,
messagesBeReviewed:state => state.user.messagesBeReviewed,
studyTaskCount:state => state.user.studyTaskCount,
}
export default getters

29
src/store/index.js Normal file
View File

@@ -0,0 +1,29 @@
import Vue from 'vue'
import Vuex from 'vuex'
import app from './modules/app'
import user from './modules/user'
import tagsView from './modules/tagsView'
import permission from './modules/permission'
import settings from './modules/settings'
import portal from './modules/portal'
import getters from './getters'
import sysType from './modules/sysType'
import resOwner from './modules/resOwner'
Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
app,
user,
tagsView,
permission,
settings,
portal,
sysType,
resOwner
},
getters
})
export default store

60
src/store/modules/app.js Normal file
View File

@@ -0,0 +1,60 @@
import Cookies from 'vue-cookies'
const state = {
initData:false,
sidebar: {
opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,
withoutAnimation: false
},
device: 'desktop',//默认是桌面以后会有android,ios,minapp
size: Cookies.get('size') || 'medium' //字段大小
}
const mutations = {
SET_INITDATA: (state, init) => {
state.initData = init
},
TOGGLE_SIDEBAR: state => {
state.sidebar.opened = !state.sidebar.opened
state.sidebar.withoutAnimation = false
if (state.sidebar.opened) {
Cookies.set('sidebarStatus', 1)
} else {
Cookies.set('sidebarStatus', 0)
}
},
CLOSE_SIDEBAR: (state, withoutAnimation) => {
Cookies.set('sidebarStatus', 0)
state.sidebar.opened = false
state.sidebar.withoutAnimation = withoutAnimation
},
TOGGLE_DEVICE: (state, device) => {
state.device = device
},
SET_SIZE: (state, size) => {
state.size = size
Cookies.set('size', size)
}
}
const actions = {
toggleSideBar({ commit }) {
commit('TOGGLE_SIDEBAR')
},
closeSideBar({ commit }, { withoutAnimation }) {
commit('CLOSE_SIDEBAR', withoutAnimation)
},
toggleDevice({ commit }, device) {
commit('TOGGLE_DEVICE', device)
},
setSize({ commit }, size) {
commit('SET_SIZE', size)
}
}
export default {
namespaced: true,
state,
mutations,
actions
}

View File

@@ -0,0 +1,101 @@
import { constantRoutes } from '@/router'
/**import { getRouters } from '@/api/menu'**/
import Layout from '@/layout/index'
import ParentView from '@/components/ParentView';
const permission = {
state: {
routes: [],
addRoutes: [],
sidebarRouters: []
},
mutations: {
SET_ROUTES: (state, routes) => {
state.addRoutes = routes
state.routes = constantRoutes.concat(routes)
},
SET_SIDEBAR_ROUTERS: (state, routers) => {
state.sidebarRouters = constantRoutes.concat(routers)
},
},
actions: {
// 生成路由
GenerateRoutes({commit},menu){
return new Promise(resolve => {
const sdata = JSON.parse(JSON.stringify(menu.routers))
const rdata = JSON.parse(JSON.stringify(menu.routers))
const sidebarRoutes = filterAsyncRouter(sdata)
const rewriteRoutes = filterAsyncRouter(rdata, true)
rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
commit('SET_ROUTES', rewriteRoutes)
commit('SET_SIDEBAR_ROUTERS', sidebarRoutes);
resolve(rewriteRoutes);
});
/**
return new Promise(resolve => {
// 向后端请求路由数据
getRouters().then(res => {
const sdata = JSON.parse(JSON.stringify(res.data))
const rdata = JSON.parse(JSON.stringify(res.data))
const sidebarRoutes = filterAsyncRouter(sdata)
const rewriteRoutes = filterAsyncRouter(rdata, true)
rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
commit('SET_ROUTES', rewriteRoutes)
commit('SET_SIDEBAR_ROUTERS', sidebarRoutes)
resolve(rewriteRoutes)
})
})
**/
}
}
}
// 遍历后台传来的路由字符串,转换为组件对象
function filterAsyncRouter(asyncRouterMap, isRewrite = false) {
return asyncRouterMap.filter(route => {
if (isRewrite && route.children) {
route.children = filterChildren(route.children)
}
if (route.component) {
// Layout ParentView 组件特殊处理
if (route.component === 'Layout') {
route.component = Layout
} else if (route.component === 'ParentView') {
route.component = ParentView
} else {
route.component = loadView(route.component)
}
}
if (route.children != null && route.children && route.children.length) {
route.children = filterAsyncRouter(route.children, route, isRewrite)
}
return true
})
}
function filterChildren(childrenMap) {
var children = []
childrenMap.forEach((el, index) => {
if (el.children && el.children.length) {
if (el.component === 'ParentView') {
el.children.forEach(c => {
c.path = el.path + '/' + c.path
if (c.children && c.children.length) {
children = children.concat(filterChildren(c.children, c))
return
}
children.push(c)
})
return
}
}
children = children.concat(el)
})
return children
}
export const loadView = (view) => { // 路由懒加载
return (resolve) => require([`@/views/${view}`], resolve)
}
export default permission

View File

@@ -0,0 +1,45 @@
const state = {
case: {
readProtocol: sessionStorage.getItem("readProtocol") == null ? false : JSON.parse(sessionStorage.getItem("readProtocol"))
},
loginRememberMe: sessionStorage.getItem("loginRememberMe") == null ? {} : JSON.parse(sessionStorage.getItem("loginRememberMe"))
}
const mutations = {
SET_ReadProtocol: (state, iden) => {
state.case.readProtocol = iden;
sessionStorage.setItem("readProtocol", iden);
},
SET_LoginRememberMe: (state, iden) => {
state.loginRememberMe = iden;
sessionStorage.setItem("loginRememberMe", JSON.stringify(iden));
}
}
const actions = {
//设置已读案例协议
SetReadProtocol({
commit
}, iden) {
return new Promise((resolve) => {
commit('SET_ReadProtocol', iden);
resolve();
})
},
//设置登录记住密码
SetLoginRememberMe({
commit
}, iden) {
return new Promise((resolve) => {
commit('SET_LoginRememberMe', iden);
resolve();
})
}
}
export default {
namespaced: true,
state,
mutations,
actions
}

View File

@@ -0,0 +1,95 @@
import {getToken} from '@/utils/token'
import apiResowner from '../../api/modules/resowner.js';
const state={
resOwnerTree: [],//资源归属
resOwnerMap:null
}
const mutations={
setResOwnerTree: (state, tree) => {
state.resOwnerTree = tree
},
setResOwnerMap: (state, map) => {
state.resOwnerMap = map
},
}
const actions={
getResOwnerTree({commit}) {
return new Promise((resolve,reject)=>{
if(state.resOwnerTree.length>0){
resolve(state.resOwnerTree);
}else{
let hasData = sessionStorage.getItem('resOwnerTree');
if(hasData){
let treeData = JSON.parse(hasData);
commit('setResOwnerTree', treeData);
resolve(treeData);
}else{
apiResowner.tree(1).then(res=>{
if(res.status === 200) {
sessionStorage.setItem('resOwnerTree',JSON.stringify(res.result));
commit('setResOwnerTree', res.result);
//转化为map放到状态中
let map=new Map();
res.result.forEach(item=>{
map.set(item.code, item.name);
if(item.children && item.children!=''){
item.children.forEach(child=>{
map.set(child.code, child.name);
if(child.children && child.children!=''){
child.children.forEach(last=>{
map.set(last.code, last.name);
})
}
})
}
});
commit('setResOwnerMap', map);
resolve(res.result)
} else {
reject('资源归属获取失败!');
}
})
}
}
});
},
loadResOwners(context){
if(state.resOwnerMap==null){
let hasData = sessionStorage.getItem('resOwnerMap');
if(hasData){
hasData=JSON.parse(hasData);
}
//console.log(hasData,"hasData");
if(hasData && hasData.length>10){
let map=new Map();
hasData.forEach(item=>{
map.set(item.code, item.name);
});
context.commit('setResOwnerMap',map);
}else{
apiResowner.list(1,'').then(res=>{
if(res.status === 200) {
let map=new Map();
res.result.forEach(item=>{
map.set(item.code, item.name);
});
//console.log(map,map);
sessionStorage.setItem('resOwnerMap',JSON.stringify(res.result));
context.commit('setResOwnerMap', map);
} else {
console.log('资源归属获取失败!');
}
});
}
}
}
}
export default {
namespaced: true,
state,
mutations,
actions
}

View File

@@ -0,0 +1,35 @@
// import variables from '@/assets/styles/element-variables.scss'
import defaultSettings from '@/settings'
const { sideTheme, showSettings, tagsView, fixedHeader, sidebarLogo } = defaultSettings
const state = {
theme: 'default',
sideTheme: sideTheme,
showSettings: showSettings,
tagsView: tagsView,
fixedHeader: fixedHeader,
sidebarLogo: sidebarLogo
}
const mutations = {
CHANGE_SETTING: (state, { key, value }) => {
if (state.hasOwnProperty(key)) {
state[key] = value
}
}
}
const actions = {
changeSetting({ commit }, data) {
commit('CHANGE_SETTING', data)
}
}
export default {
namespaced: true,
state,
mutations,
actions
}

View File

@@ -0,0 +1,95 @@
import {getToken} from '@/utils/token'
import apiType from '../../api/modules/type.js'
const state={
sysTypeTree: [], //内容类型
sysTypeMap:null
}
const mutations={
setSysTypeTree: (state, tree) => {
state.sysTypeTree = tree
},
setSysTypeMap: (state, map) => {
state.sysTypeMap = map
},
}
const actions={
getSysTypeTree({commit}) {
return new Promise((resolve,reject)=>{
if(state.sysTypeTree.length>0){
resolve(state.sysTypeTree);
}else{
let hasData = sessionStorage.getItem('sysTypeTree');
if(hasData){
let treeData = JSON.parse(hasData);
commit('setSysTypeTree', treeData);
resolve(treeData);
}else{
apiType.tree(1).then(res=>{
if(res.status === 200) {
sessionStorage.setItem('sysTypeTree',JSON.stringify(res.result));
commit('setSysTypeTree', res.result);
//转化为map放到状态中
let map=new Map();
res.result.forEach(item=>{
map.set(item.id, item.name);
if(item.children && item.children!=''){
item.children.forEach(child=>{
map.set(child.id, child.name);
if(child.children && child.children!=''){
child.children.forEach(last=>{
map.set(last.id, last.name);
})
}
})
}
});
commit('setSysTypeMap', map);
resolve(res.result)
} else {
reject('资源归属获取失败!');
}
})
}
}
});
},
loadSysTypes(context){
if(state.sysTypeMap==null){
let hasData = sessionStorage.getItem('sysTypeMap');
if(hasData){
hasData=JSON.parse(hasData);
}
//console.log(hasData,"hasData");
if(hasData && hasData.length>10){
let map=new Map();
hasData.forEach(item=>{
map.set(item.id, item.name);
});
context.commit('setSysTypeMap',map);
}else{
apiType.list(1,'').then(res=>{
if(res.status === 200) {
let map=new Map();
res.result.forEach(item=>{
map.set(item.id, item.name);
});
//console.log(map,map);
sessionStorage.setItem('sysTypeMap',JSON.stringify(res.result));
context.commit('setSysTypeMap', map);
} else {
console.log('内容分类获取失败!');
}
});
}
}
}
}
export default {
namespaced: true,
state,
mutations,
actions
}

View File

@@ -0,0 +1,159 @@
const state = {
visitedViews: [],
cachedViews: []
}
const mutations = {
ADD_VISITED_VIEW: (state, view) => {
if (state.visitedViews.some(v => v.path === view.path)) return
state.visitedViews.push(
Object.assign({}, view, {
title: view.meta.title || 'no-name'
})
)
},
ADD_CACHED_VIEW: (state, view) => {
if (state.cachedViews.includes(view.name)) return
if (!view.meta.noCache) {
state.cachedViews.push(view.name)
}
},
DEL_VISITED_VIEW: (state, view) => {
for (const [i, v] of state.visitedViews.entries()) {
if (v.path === view.path) {
state.visitedViews.splice(i, 1)
break
}
}
},
DEL_CACHED_VIEW: (state, view) => {
const index = state.cachedViews.indexOf(view.name)
index > -1 && state.cachedViews.splice(index, 1)
},
DEL_OTHERS_VISITED_VIEWS: (state, view) => {
state.visitedViews = state.visitedViews.filter(v => {
return v.meta.affix || v.path === view.path
})
},
DEL_OTHERS_CACHED_VIEWS: (state, view) => {
const index = state.cachedViews.indexOf(view.name)
if (index > -1) {
state.cachedViews = state.cachedViews.slice(index, index + 1)
} else {
state.cachedViews = []
}
},
DEL_ALL_VISITED_VIEWS: state => {
// keep affix tags
const affixTags = state.visitedViews.filter(tag => tag.meta.affix)
state.visitedViews = affixTags
},
DEL_ALL_CACHED_VIEWS: state => {
state.cachedViews = []
},
UPDATE_VISITED_VIEW: (state, view) => {
for (let v of state.visitedViews) {
if (v.path === view.path) {
v = Object.assign(v, view)
break
}
}
}
}
const actions = {
addView({ dispatch }, view) {
dispatch('addVisitedView', view)
dispatch('addCachedView', view)
},
addVisitedView({ commit }, view) {
commit('ADD_VISITED_VIEW', view)
},
addCachedView({ commit }, view) {
commit('ADD_CACHED_VIEW', view)
},
delView({ dispatch, state }, view) {
return new Promise(resolve => {
dispatch('delVisitedView', view)
dispatch('delCachedView', view)
resolve({
visitedViews: [...state.visitedViews],
cachedViews: [...state.cachedViews]
})
})
},
delVisitedView({ commit, state }, view) {
return new Promise(resolve => {
commit('DEL_VISITED_VIEW', view)
resolve([...state.visitedViews])
})
},
delCachedView({ commit, state }, view) {
return new Promise(resolve => {
commit('DEL_CACHED_VIEW', view)
resolve([...state.cachedViews])
})
},
delOthersViews({ dispatch, state }, view) {
return new Promise(resolve => {
dispatch('delOthersVisitedViews', view)
dispatch('delOthersCachedViews', view)
resolve({
visitedViews: [...state.visitedViews],
cachedViews: [...state.cachedViews]
})
})
},
delOthersVisitedViews({ commit, state }, view) {
return new Promise(resolve => {
commit('DEL_OTHERS_VISITED_VIEWS', view)
resolve([...state.visitedViews])
})
},
delOthersCachedViews({ commit, state }, view) {
return new Promise(resolve => {
commit('DEL_OTHERS_CACHED_VIEWS', view)
resolve([...state.cachedViews])
})
},
delAllViews({ dispatch, state }, view) {
return new Promise(resolve => {
dispatch('delAllVisitedViews', view)
dispatch('delAllCachedViews', view)
resolve({
visitedViews: [...state.visitedViews],
cachedViews: [...state.cachedViews]
})
})
},
delAllVisitedViews({ commit, state }) {
return new Promise(resolve => {
commit('DEL_ALL_VISITED_VIEWS')
resolve([...state.visitedViews])
})
},
delAllCachedViews({ commit, state }) {
return new Promise(resolve => {
commit('DEL_ALL_CACHED_VIEWS')
resolve([...state.cachedViews])
})
},
updateVisitedView({ commit }, view) {
commit('UPDATE_VISITED_VIEW', view)
}
}
export default {
namespaced: true,
state,
mutations,
actions
}

218
src/store/modules/user.js Normal file
View File

@@ -0,0 +1,218 @@
import { getToken, setToken, removeToken } from '@/utils/token'
import app from '@/api/console.js'
import apiLogin from '@/api/login.js'
import apiMessage from '@/api/system/message.js'
import apiCourse from "@/api/modules/course.js";
import apiBoeCourse from "@/api/boe/course.js";
import apiBoeLogout from "@/api/boe/login.js";
const user = {
state: {
info: { aid: '', loginName: '', name: '', avatar: '', userNo: '', departId: '', departName: '', departFullName: '',studyTotal:0,studyTotalH:0},
identity: 2, // 1表学员2表教师3表管理员。目前只有3会被设置表示学员教师管理员身份都有
msg:0,//未读消息数
messagesBeReviewed: 0,//待审核的消息
studyTaskCount:0,//学习任务数
curIdentity: sessionStorage.getItem("curIdentity") == null ? 1 : sessionStorage.getItem("curIdentity"), // 用户当前选择的身份 1学员 2教师 3管理员
permissions: []
},
mutations: {
SET_Identity: (state, iden) => {
state.identity = iden
},
SET_Msg: (state, m) => {
state.msg = m
},
SET_MessagesBeReviewed: (state, m) => {
state.messagesBeReviewed = m
},
SET_StudyTaskCount: (state, m) => {
state.studyTaskCount = m
//console.log(state)
},
SET_CurIdentity: (state, iden) => {
state.curIdentity = iden
sessionStorage.setItem("curIdentity", iden);
},
SET_UserInfo: (state, uinfo) => {
state.info = uinfo
},
SET_PERMISSIONS: (state, permissions) => {
state.permissions = permissions
}
},
actions: {
refrashMsg({ commit }) {
apiMessage.isRead().then(res=>{
if(res.status==200){
commit('SET_Msg',res.result);
}else{
console.log("读取未读消息失败:"+res.message);
}
})
},
refrashReviewed({ commit }) {
apiCourse.countWaitAudit().then(res=>{
if(res.status==200){
commit('SET_MessagesBeReviewed',res.result);
}else{
console.log("读取待审核消息失败:"+res.message);
}
})
},
refrashStudyTaskCount({ commit }) {
apiBoeCourse.cmtaskList({page:1,size:1}).then(res=>{
if(res.status==200){
let count = 0;
if(res.result.count > 0){
count = res.result.count;
}
commit('SET_StudyTaskCount',count);
}else{
console.log("读取学习任务数失败:"+res.message);
}
})
},
//设置用户身份
SetIdentity({ commit }, iden) {
return new Promise((resolve) => {
commit('SET_Identity', iden);
resolve();
})
},
// 设置当前身份状态
SetCurIdentity({ commit }, iden) {
return new Promise((resolve) => {
commit('SET_CurIdentity', iden);
resolve();
})
},
//登录
Login({ commit }, userInfo) {
const loginName = userInfo.loginName.trim()
const password = userInfo.password
const code = userInfo.code
const key = userInfo.key
let that = this;
return new Promise((resolve, reject) => {
apiLogin.login(loginName, password, code,key).then(res => {
if(res.status == 200){
setToken(res.result.access_token);
// 重置portal中case页面的阅读协议状态
that.dispatch('portal/SetReadProtocol', false);
}
resolve(res);
}).catch(error => {
reject(error)
})
})
},
//初始化框架数据,获取用户信息,用户菜单
InitData({ commit, state }) {
let token = getToken();
return new Promise((resolve, reject) => {
//console.log(token);
app.initData().then(res =>{
let studyTotalH = 0;// 小时显示
let t1=parseFloat(res.result.studyTotal);
let t2=parseFloat(res.result.learningDuration);
if(t1 > 0 || t2 > 0){
studyTotalH = parseFloat((t1 + t2)/ 3600).toFixed(1);
}
// 只保留二级
let dfn = "";
if(res.result.departFullName){
let dfnArray = res.result.departFullName.split('/');
if(dfnArray.length > 2){
dfn = dfnArray[0] + "/" + dfnArray[1];
}else{
dfn = res.result.departFullName;
}
}
const user = {
aid: res.result.aid,
sysId:res.result.sysId,
name: res.result.name,
avatar: res.result.avatar,
sex:res.result.sex? res.result.sex:1,
loginName: res.result.loginName,
userNo: res.result.userNo,
departId: res.result.departId,
departName: res.result.departName,
departFullName: dfn,
studyTotal: res.result.studyTotal,
studyTotalH:studyTotalH
};
// user.avatar = user.avatar == "" ? require("@/assets/images/user/default.png") : process.env.VUE_APP_FILE_BASE_URL + user.avatar;
user.avatar = user.avatar == "" ? "" : process.env.VUE_APP_FILE_BASE_URL + user.avatar;
commit('SET_UserInfo', user);
commit('SET_Identity', res.result.userType);
//console.log(user)
resolve(res)
}).catch(error => {
reject(error)
})
})
},
//获取用户信息
// GetUserInfo({ commit, state }) {
// return new Promise((resolve, reject) => {
// apiUser.getUserInfo(state.token).then(res => {
// const user = {
// aid: res.result.aid,
// name: res.result.name,
// avatar: res.result.avatar,
// loginName: res.result.loginName,
// userNo: res.result.userNo,
// departId: res.result.departId,
// departName: res.result.departName
// };
// user.avatar = user.avatar == "" ? require("@/assets/images/user/default.png") : process.env.VUE_APP_BASE_API + res.result.avatar;
// commit('SET_UserInfo', user);
// commit('SET_Identity', res.result.userType);
// resolve(res)
// }).catch(error => {
// reject(error)
// })
// })
// },
//更新用户信息
// UpdateUserInfo({ commit, state }, uinfo) {
// return new Promise((resolve, reject) => {
// apiUser.saveUserInfo(uinfo).then(res => {
// commit('SET_UserInfo', uinfo);
// resolve(res)
// }).catch(error => {
// reject(error)
// })
// })
// },
// 退出系统
LogOut({ commit, state }) {
return new Promise((resolve, reject) => {
apiBoeLogout.logout();
commit('SET_PERMISSIONS', [])
removeToken()
//resolve()
apiLogin.logout().then(() => {
resolve()
}).catch(error => {
reject(error)
})
})
},
// 前端 登出
FedLogOut({ commit }) {
return new Promise(resolve => {
commit('SET_TOKEN', '')
removeToken()
resolve()
})
}
}
}
export default user