修改代码
This commit is contained in:
parent
93546fe1fc
commit
c5c813753c
@ -1,9 +1,9 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
'@vue/app'
|
||||
],
|
||||
plugins: [
|
||||
'@babel/plugin-transform-runtime',
|
||||
'@babel/plugin-syntax-dynamic-import'
|
||||
]
|
||||
// plugins: [
|
||||
// '@babel/plugin-transform-runtime',
|
||||
// '@babel/plugin-syntax-dynamic-import'
|
||||
// ]
|
||||
};
|
||||
|
38
src/App.vue
38
src/App.vue
@ -6,13 +6,12 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { handleToken } from '@/utils/auth';
|
||||
import { creatSubscribe, clearSubscribe, perpetualTopic, commonTopic } from '@/utils/stomp';
|
||||
import { getToken } from '@/utils/auth';
|
||||
import { creatSubscribe, perpetualTopic, commonTopic } from '@/utils/stomp';
|
||||
import { getSessionStorage } from '@/utils/auth';
|
||||
import { ProjectIcon, loginInfo } from '@/scripts/ConstDic';
|
||||
import DeomonTopic from '@/views/demonstration/deomonTopic';
|
||||
import WindowResizeHandler from '@/mixin/WindowResizeHandler';
|
||||
import Cookies from 'js-cookie';
|
||||
import { ProjectIcon } from '@/scripts/ConstDic';
|
||||
import { logout } from '@/api/login';
|
||||
|
||||
export default {
|
||||
name: 'App',
|
||||
@ -27,6 +26,16 @@ export default {
|
||||
if (val.creatorId) {
|
||||
this.subscribeMessage(val);
|
||||
}
|
||||
},
|
||||
'$store.state.socket.beLogout': async function(val) {
|
||||
this.$alert(this.$t('tip.logoutTips'), this.$t('tip.hint'), {
|
||||
confirmButtonText: this.$t('tip.confirm'),
|
||||
callback: action => {
|
||||
this.$store.dispatch('LogOut').then(resp => {
|
||||
this.$router.push({path: loginInfo[getSessionStorage('project')].loginPath});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
@ -40,28 +49,19 @@ export default {
|
||||
window.addEventListener('unload', async e => {
|
||||
gap_time = new Date().getTime() - beforeUnload_time;
|
||||
if (gap_time <= 5) {
|
||||
await this.pageDestory();
|
||||
await this.$store.dispatch('LogOut');
|
||||
}
|
||||
});
|
||||
window.addEventListener('beforeunload', async e => {
|
||||
beforeUnload_time = new Date().getTime();
|
||||
if (isFireFox) {
|
||||
await this.pageDestory();
|
||||
await this.$store.dispatch('LogOut');
|
||||
}
|
||||
});
|
||||
|
||||
this.subscribe();
|
||||
},
|
||||
methods: {
|
||||
async pageDestory() {
|
||||
this.clearSubscribe();
|
||||
const token = handleToken();
|
||||
Cookies.remove('UserDesignName');
|
||||
Cookies.remove('UserDesignToken');
|
||||
Cookies.remove('UserName');
|
||||
Cookies.remove('UserToken');
|
||||
await logout(token);
|
||||
},
|
||||
resizeHandler() {
|
||||
this.$store.dispatch('app/resize', {width: this._clientWidth, height: this._clientHeight});
|
||||
},
|
||||
@ -78,17 +78,13 @@ export default {
|
||||
},
|
||||
subscribe() {
|
||||
this.$nextTick(() => {
|
||||
const token = handleToken();
|
||||
const token = getToken();
|
||||
if (token && this.$route.path != '/404') {
|
||||
const header = { group: '', 'X-Token': token };
|
||||
creatSubscribe(perpetualTopic, header);
|
||||
creatSubscribe(commonTopic, header);
|
||||
}
|
||||
});
|
||||
},
|
||||
clearSubscribe() {
|
||||
clearSubscribe(perpetualTopic);
|
||||
clearSubscribe(commonTopic);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -76,17 +76,6 @@ export function simulationNotify({ mapId, mapPrdId }) {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 大屏系统CBTC
|
||||
* @param {*} mapId
|
||||
*/
|
||||
export function bitScreenNotify({ mapId }) {
|
||||
return request({
|
||||
url: `/api/simulation/bigScreen/${mapId}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 实训系统CBTC
|
||||
* @param {*} data
|
||||
|
@ -125,7 +125,7 @@
|
||||
</el-table-column>
|
||||
</template>
|
||||
</el-table>
|
||||
<div v-if="queryList.selectCheckShow" style="margin-top: 8px; margin-left: 8px;">
|
||||
<div v-if="!queryList.selectCheckShow" style="margin-top: 8px; margin-left: 8px;">
|
||||
<el-button
|
||||
size="mini"
|
||||
:type="'primary'"
|
||||
|
41
src/directive/dialogLoading/dialogLoading.js
Normal file
41
src/directive/dialogLoading/dialogLoading.js
Normal file
@ -0,0 +1,41 @@
|
||||
import Vue from 'vue';
|
||||
import dLoading from './dialogLoading.vue';
|
||||
|
||||
const Mask = Vue.extend(dLoading);
|
||||
|
||||
const toggleLoading = (el, binding) => {
|
||||
if (binding.value) {
|
||||
Vue.nextTick(() => {
|
||||
el.instance.visible = true;
|
||||
});
|
||||
} else {
|
||||
el.instance.visible = false;
|
||||
}
|
||||
};
|
||||
|
||||
export default {
|
||||
bind: function (em, binding, vnode) {
|
||||
const el = em.querySelector('.el-dialog');
|
||||
const mask = new Mask({
|
||||
el: document.createElement('div'),
|
||||
data () {}
|
||||
});
|
||||
|
||||
el.instance = mask;
|
||||
el.mask = mask.$el;
|
||||
el.maskStyle = {};
|
||||
el.appendChild(el.mask);
|
||||
|
||||
binding.value && toggleLoading(el, binding);
|
||||
},
|
||||
update: function (em, binding) {
|
||||
const el = em.querySelector('.el-dialog');
|
||||
if (binding.oldValue !== binding.value) {
|
||||
toggleLoading(el, binding);
|
||||
}
|
||||
},
|
||||
unbind: function (em, binding) {
|
||||
const el = em.querySelector('.el-dialog');
|
||||
el.instance && el.instance.$destroy();
|
||||
}
|
||||
};
|
86
src/directive/dialogLoading/dialogLoading.vue
Normal file
86
src/directive/dialogLoading/dialogLoading.vue
Normal file
@ -0,0 +1,86 @@
|
||||
<template>
|
||||
<div v-show="visible" class="loading">
|
||||
<div class="loading__container">
|
||||
<div class="loader-inner ball-beat">
|
||||
<div />
|
||||
<div />
|
||||
<div />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
visible: false
|
||||
};
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.loading {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
background: rgba(255, 255, 255, 0.5);
|
||||
z-index:100;
|
||||
|
||||
&__container {
|
||||
top: 50%;
|
||||
margin-top: -30px;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@-webkit-keyframes ball-beat {
|
||||
50% {
|
||||
opacity: 0.2;
|
||||
-webkit-transform: scale(0.75);
|
||||
transform: scale(0.75);
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 1;
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes ball-beat {
|
||||
50% {
|
||||
opacity: 0.2;
|
||||
-webkit-transform: scale(0.75);
|
||||
transform: scale(0.75);
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 1;
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
.ball-beat > div {
|
||||
background-color: #279fcf;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
border-radius: 100% !important;
|
||||
margin: 2px;
|
||||
-webkit-animation-fill-mode: both;
|
||||
animation-fill-mode: both;
|
||||
display: inline-block;
|
||||
-webkit-animation: ball-beat 0.7s 0s infinite linear;
|
||||
animation: ball-beat 0.7s 0s infinite linear;
|
||||
}
|
||||
|
||||
.ball-beat > div:nth-child(2n-1) {
|
||||
animation-delay: 0.35s !important;
|
||||
}
|
||||
}
|
||||
</style>
|
8
src/directive/dialogLoading/index.js
Normal file
8
src/directive/dialogLoading/index.js
Normal file
@ -0,0 +1,8 @@
|
||||
import Vue from 'vue';
|
||||
import install from './dialogLoading';
|
||||
|
||||
const dialogLoading = function(Vue) {
|
||||
Vue.directive('dialogLoading', install);
|
||||
};
|
||||
|
||||
Vue.use(dialogLoading);
|
@ -1,6 +1,8 @@
|
||||
export default {
|
||||
confirm: 'confirm',
|
||||
cancel: 'cancel',
|
||||
confirmLogin: 'Relanding',
|
||||
logoutTips: 'You have been signed out. Please sign in again!',
|
||||
creatingSuccessful: 'Created successfully!',
|
||||
creatingFailed: 'Create a failure',
|
||||
confirmDeletion: 'Confirm deletion?',
|
||||
|
@ -1,6 +1,8 @@
|
||||
export default {
|
||||
confirm: '确 定',
|
||||
cancel: '取 消',
|
||||
confirmLogin: '重新登陆',
|
||||
logoutTips: '你已被登出,请重新登录',
|
||||
creatingSuccessful: '创建成功!',
|
||||
creatingFailed: '创建失败',
|
||||
confirmDeletion: '是否确认删除?',
|
||||
|
@ -3,7 +3,7 @@ import StompClient from '@/utils/sock';
|
||||
import { getTrainingCbtcDemon, runDiagramStart, runDiagramOver, setTrainingCbtcInitTime } from '@/api/simulation';
|
||||
|
||||
import { creatSubscribe, clearSubscribe, displayTopic } from '@/utils/stomp';
|
||||
import { handleToken } from '@/utils/auth';
|
||||
import { getToken } from '@/utils/auth';
|
||||
import router from '@/router';
|
||||
|
||||
// 定于仿真socket接口
|
||||
@ -41,7 +41,7 @@ export function Jl3dDriving(updatemmi, sound) {
|
||||
var datatype = '00';
|
||||
this.teststomp = new StompClient();
|
||||
this.topic = '/user/queue/simulation/jl3d';
|
||||
const header = {'X-Token': handleToken() };
|
||||
const header = {'X-Token': getToken() };
|
||||
|
||||
this.updatamap = function(mapdata, materiallist, nowaction, scene) {
|
||||
// console.log(mapdata);
|
||||
|
@ -3,7 +3,7 @@ import StompClient from '@/utils/sock';
|
||||
import { getTrainingCbtcDemon, runDiagramStart, runDiagramOver, setTrainingCbtcInitTime } from '@/api/simulation';
|
||||
|
||||
import { creatSubscribe, clearSubscribe, displayTopic } from '@/utils/stomp';
|
||||
import { handleToken } from '@/utils/auth';
|
||||
import { getToken } from '@/utils/auth';
|
||||
import router from '@/router';
|
||||
|
||||
// 定于仿真socket接口
|
||||
@ -41,7 +41,7 @@ export function Jlmap3dSubscribe(jlmap3d) {
|
||||
var datatype = '00';
|
||||
this.teststomp = new StompClient();
|
||||
this.topic = '/user/queue/simulation/jl3d';
|
||||
const header = {'X-Token': handleToken() };
|
||||
const header = {'X-Token': getToken() };
|
||||
|
||||
this.updatamap = function(mapdata, materiallist, nowaction, scene) {
|
||||
// console.log(mapdata);
|
||||
|
@ -1,6 +1,6 @@
|
||||
import StompClient from '@/utils/sock';
|
||||
import { displayTopic } from '@/utils/stomp';
|
||||
import { handleToken } from '@/utils/auth';
|
||||
import { getToken } from '@/utils/auth';
|
||||
import router from '@/router';
|
||||
|
||||
// 定于仿真socket接口
|
||||
@ -23,7 +23,7 @@ export function Jlmap3dSubscribe(worker) {
|
||||
|
||||
this.teststomp = new StompClient();
|
||||
this.topic = displayTopic;
|
||||
const header = { group: router.currentRoute.query.group, 'X-Token': handleToken() };
|
||||
const header = { group: router.currentRoute.query.group, 'X-Token': getToken() };
|
||||
|
||||
this.updatamap = function (mapdata, materiallist, nowaction, scene) {
|
||||
// console.log(mapdata);
|
||||
|
@ -84,12 +84,8 @@ export default {
|
||||
} else if (this.operation == OperationEvent.Switch.turnoutForce.menu.operation) {
|
||||
return this.$t('menu.menuSwitch.switchForcedPull');
|
||||
} else if (this.operation == OperationEvent.Switch.split.menu.operation) {
|
||||
this.activeShow = true;
|
||||
this.radio = '2';
|
||||
return this.$t('menu.menuSwitch.sectionResection');
|
||||
} else if (this.operation == OperationEvent.Switch.active.menu.operation) {
|
||||
this.activeShow = true;
|
||||
this.radio = '1';
|
||||
return this.$t('menu.menuSwitch.sectionActive');
|
||||
}
|
||||
return '';
|
||||
@ -112,7 +108,15 @@ export default {
|
||||
this.stationName = station.name;
|
||||
}
|
||||
}
|
||||
|
||||
this.operation = operate.operation;
|
||||
if (this.operation == OperationEvent.Switch.split.menu.operation) {
|
||||
this.activeShow = true;
|
||||
this.radio = '2';
|
||||
} else if (this.operation == OperationEvent.Switch.active.menu.operation) {
|
||||
this.activeShow = true;
|
||||
this.radio = '1';
|
||||
}
|
||||
}
|
||||
this.dialogShow = true;
|
||||
this.$nextTick(function () {
|
||||
|
@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<el-dialog v-dialogDrag :title="$t('global.chooseRoom')" :visible.sync="centerDialogVisible" width="30%" center>
|
||||
<el-dialog v-dialogDrag :title="$t('global.chooseRoom')" :visible.sync="dialogShow" width="30%" center>
|
||||
<el-input v-model="input" :placeholder="$t('global.inputRoomNumber')" />
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="centerDialogVisible = false">{{ $t('global.cancel') }}</el-button>
|
||||
<el-button type="primary" @click="comit">{{ $t('global.confirm') }}</el-button>
|
||||
<el-button @click="dialogShow = false">{{ $t('global.cancel') }}</el-button>
|
||||
<el-button v-loading="loading" :disabled="!input.length" type="primary" @click="comit">{{ $t('global.confirm') }}</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</template>
|
||||
@ -15,8 +15,9 @@ export default {
|
||||
name: 'Dashboard',
|
||||
data() {
|
||||
return {
|
||||
centerDialogVisible: false,
|
||||
input: ''
|
||||
input: '',
|
||||
dialogShow: false,
|
||||
loading: false
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -26,21 +27,20 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
doShow() {
|
||||
this.centerDialogVisible = true;
|
||||
this.dialogShow = true;
|
||||
},
|
||||
doClose() {
|
||||
this.centerDialogVisible = false;
|
||||
this.dialogShow = false;
|
||||
},
|
||||
async comit() {
|
||||
if (this.input) {
|
||||
try {
|
||||
this.loading = true;
|
||||
await getPermissionJoint(`${this.input}`);
|
||||
this.centerDialogVisible = false;
|
||||
this.dialogShow = false;
|
||||
} catch (error) {
|
||||
this.$messageBox(`${this.$t('error.scanningError')}:${error.message}`);
|
||||
}
|
||||
} else {
|
||||
this.$messageBox(this.$t('global.inputRoomNumber'));
|
||||
} finally {
|
||||
this.loading = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
import logoImg from '@/assets/logo_changan.png';
|
||||
import logoImgXty from '@/assets/logo_xty.png';
|
||||
import { getSessionStorage } from '@/utils/auth';
|
||||
import { loginTitle } from '@/scripts/ConstDic';
|
||||
import { loginInfo } from '@/scripts/ConstDic';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
@ -20,7 +20,7 @@ export default {
|
||||
},
|
||||
mounted() {
|
||||
const project = getSessionStorage('project');
|
||||
this.systemTitle = loginTitle[project];
|
||||
this.systemTitle = loginInfo[project].title;
|
||||
if (project.endsWith('xty')) {
|
||||
this.logoImg = logoImgXty;
|
||||
} else {
|
||||
|
@ -20,6 +20,7 @@ import '@/permission'; // permission control
|
||||
import '@/scripts/GlobalPlugin';
|
||||
import '@/directive/dialogDrag/index.js';
|
||||
import '@/directive/dialogDragWidth/index.js';
|
||||
import '@/directive/dialogLoading/index.js';
|
||||
import '@/directive/drag/index.js';
|
||||
import '@/directive/focus/index.js';
|
||||
import '@/directive/quickMenuDrag/index.js';
|
||||
|
@ -1,10 +1,9 @@
|
||||
import Vue from 'vue';
|
||||
import store from '@/store';
|
||||
import router from './router';
|
||||
import NProgress from 'nprogress'; // Progress 进度条
|
||||
// import 'nprogress/nprogress.css';// Progress 进度条样式
|
||||
import NProgress from 'nprogress';
|
||||
import { admin, userDesign} from './router';
|
||||
import { getToken, getDesignToken} from '@/utils/auth'; // 验权
|
||||
import { getToken} from '@/utils/auth';
|
||||
import { LoginParams } from '@/utils/login';
|
||||
import { getSessionStorage } from '@/utils/auth';
|
||||
import localStore from 'storejs';
|
||||
@ -28,44 +27,37 @@ const loginDesignXtyPage = whiteList[3];
|
||||
// 获取路径数据
|
||||
function getRouteInfo(to) {
|
||||
let loginPath = '/';
|
||||
let getTokenInfo = () => { };
|
||||
let clientId = '';
|
||||
const toRoutePath = to.redirectedFrom || to.path;
|
||||
if (/^\/designxty/.test(toRoutePath)) {
|
||||
loginPath = loginDesignXtyPage;
|
||||
getTokenInfo = getDesignToken;
|
||||
clientId = LoginParams.Design.clientId;
|
||||
} else if (/^\/design/.test(toRoutePath) || /^\/scriptDisplay/.test(toRoutePath) || /^\/publish/.test(toRoutePath) || /^\/orderauthor/.test(toRoutePath) || /^\/system/.test(toRoutePath) || /^\/display\/record/.test(toRoutePath) || /^\/display\/manage/.test(toRoutePath) || /^\/apply/.test(toRoutePath)) {
|
||||
loginPath = getSessionStorage('project') === 'designxty' ? loginDesignXtyPage : loginDesignPage;
|
||||
getTokenInfo = getDesignToken;
|
||||
clientId = LoginParams.Design.clientId;
|
||||
} else if (/^\/plan/.test(toRoutePath) || /^\/display\/plan/.test(toRoutePath)) {
|
||||
if (getSessionStorage('project').startsWith('design')) {
|
||||
loginPath = getSessionStorage('project') === 'designxty' ? loginDesignXtyPage : loginDesignPage;
|
||||
getTokenInfo = getDesignToken;
|
||||
clientId = LoginParams.Design.clientId;
|
||||
} else {
|
||||
loginPath = getSessionStorage('project') === 'xty' ? loginXtyPage : loginPage;
|
||||
getTokenInfo = getToken;
|
||||
clientId = null;
|
||||
}
|
||||
} else if ( /^\/xty/.test(toRoutePath)) {
|
||||
loginPath = loginXtyPage;
|
||||
getTokenInfo = getToken;
|
||||
clientId = null;
|
||||
} else {
|
||||
loginPath = getSessionStorage('project') === 'xty' ? loginXtyPage : loginPage;
|
||||
getTokenInfo = getToken;
|
||||
clientId = null;
|
||||
}
|
||||
|
||||
return { clientId, loginPath, getTokenInfo };
|
||||
return { clientId, loginPath };
|
||||
}
|
||||
|
||||
function handleRoute(to, from, next, routeInfo) {
|
||||
if (store.getters.roles.length === 0) {
|
||||
// 拉取用户信息
|
||||
store.dispatch('GetInfo', routeInfo.getTokenInfo).then(res => {
|
||||
store.dispatch('GetInfo', getToken()).then(res => {
|
||||
// 根据roles权限生成可访问的路由表
|
||||
const roles = res.roles;
|
||||
if (getSessionStorage('project').startsWith('design')) {
|
||||
@ -83,7 +75,7 @@ function handleRoute(to, from, next, routeInfo) {
|
||||
});
|
||||
|
||||
}).catch(() => {
|
||||
store.dispatch('FedLogOut', routeInfo.clientId).then(() => {
|
||||
store.dispatch('FedLogOut').then(() => {
|
||||
Vue.prototype.$messageBox('验证失败,请重新登录!');
|
||||
next({ path: routeInfo.loginPath });
|
||||
});
|
||||
@ -104,9 +96,8 @@ function handleRoute(to, from, next, routeInfo) {
|
||||
|
||||
router.beforeEach((to, from, next) => {
|
||||
NProgress.start();
|
||||
|
||||
const routeInfo = getRouteInfo(to);
|
||||
if (routeInfo.getTokenInfo()) {
|
||||
if (getToken()) {
|
||||
// 已登录
|
||||
if (to.path === routeInfo.loginPath) {
|
||||
// 登录页面不拦截
|
||||
|
@ -101,7 +101,7 @@ const ScriptApproval = () => import('@/views/approval/script/index');
|
||||
const RunPlanApproval = () => import('@/views/approval/runPlan/index');
|
||||
const News = () => import('@/views/news/index');
|
||||
|
||||
import { loginTitle } from '@/scripts/ConstDic';
|
||||
import { loginInfo } from '@/scripts/ConstDic';
|
||||
import { getSessionStorage } from '@/utils/auth';
|
||||
|
||||
/**
|
||||
@ -863,7 +863,7 @@ const router = createRouter();
|
||||
|
||||
router.beforeEach((to, from, next) => {
|
||||
const project = getSessionStorage('project');
|
||||
document.title = loginTitle[project || 'login'];
|
||||
document.title = loginInfo[project || 'login'].title;
|
||||
next();
|
||||
});
|
||||
|
||||
|
@ -2200,12 +2200,26 @@ export const IbpOperation = {
|
||||
import LangStorage from '@/utils/lang';
|
||||
import Favicon from '@/assets/icon/favicon.png';
|
||||
import FaviconXty from '@/assets/icon/favicon_xty.png';
|
||||
export const loginTitle = {
|
||||
xty: '西安铁路职业技术学院城市轨道交通实训平台',
|
||||
login: LangStorage.getLang() == 'en' ? ' Urban Rail Transit Practical Training Platform' : '城市轨道交通实训平台',
|
||||
design: LangStorage.getLang() == 'en' ? ' Urban Rail Transit Design Platform' : '城市轨道交通设计平台',
|
||||
designxty: '西安铁路职业技术学院城市轨道交通设计平台'
|
||||
|
||||
export const loginInfo = {
|
||||
xty: {
|
||||
title: '西安铁路职业技术学院城市轨道交通实训平台',
|
||||
loginPath: '/xty/login'
|
||||
},
|
||||
login: {
|
||||
title: LangStorage.getLang() == 'en' ? ' Urban Rail Transit Practical Training Platform' : '城市轨道交通实训平台',
|
||||
loginPath: '/login'
|
||||
},
|
||||
design: {
|
||||
title: LangStorage.getLang() == 'en' ? ' Urban Rail Transit Design Platform' : '城市轨道交通设计平台',
|
||||
loginPath: '/design/login'
|
||||
},
|
||||
designxty: {
|
||||
title: '西安铁路职业技术学院城市轨道交通设计平台',
|
||||
loginPath: '/designxty/login'
|
||||
}
|
||||
};
|
||||
|
||||
export const ProjectIcon = {
|
||||
xty: FaviconXty,
|
||||
login: Favicon,
|
||||
|
@ -27,27 +27,6 @@ function setHonePagePath(route, roles) {
|
||||
function hasPermission(roles, route, parentsRoles) {
|
||||
setHonePagePath(route, roles);
|
||||
if (route.meta && route.meta.roles) {
|
||||
// 如果存在本级路由,则使用自己的roles过滤
|
||||
// debugger;
|
||||
// if (getSessionStorage('design')) {
|
||||
// if (route.meta.roles.indexOf(userDesign)===-1) {
|
||||
// route.hidden = true;
|
||||
// } else {
|
||||
// if ((route.meta.roles.indexOf(admin)>=0 && roles.indexOf(admin)>=0)) {
|
||||
// route.hidden = false;
|
||||
// } else if (route.meta.roles.indexOf(user)>=0 && roles.indexOf(user)>=0) {
|
||||
// route.hidden = false;
|
||||
// } else {
|
||||
// route.hidden = true;
|
||||
// }
|
||||
// }
|
||||
|
||||
// } else {
|
||||
// if (route.meta.roles.indexOf(userDesign)>0) {
|
||||
// route.hidden = true;
|
||||
// }
|
||||
// }
|
||||
// return roles.some(role => route.meta.roles.indexOf(role) >= 0);
|
||||
if (getSessionStorage('project').startsWith('design')) {
|
||||
roles = roles.filter(function (role) {
|
||||
return route.meta.roles.indexOf(role) >= 0;
|
||||
@ -95,7 +74,7 @@ function convertRouterRoles({ roles, permissionType }) {
|
||||
*/
|
||||
function filterAsyncRouter(asyncRouter, roles, parentsRoles) {
|
||||
return asyncRouter.filter(route => {
|
||||
if (route.name === '大屏系统' && roles.indexOf(admin)===-1 && roles.indexOf(userScreen) ===-1) {
|
||||
if (route.name === '大屏系统' && roles.indexOf(admin) == -1 && roles.indexOf(userScreen) == -1) {
|
||||
route.hidden = true;
|
||||
}
|
||||
if (hasPermission(roles, route, parentsRoles)) {
|
||||
@ -124,16 +103,11 @@ const permission = {
|
||||
GenerateRoutes({ commit }, data) {
|
||||
return new Promise(resolve => {
|
||||
const { roles } = convertRouterRoles(data);
|
||||
let accessedRouters;
|
||||
if (roles.indexOf(superAdmin) >= 0 && roles.indexOf(admin) < 0) {
|
||||
roles.push(admin);
|
||||
}
|
||||
// if (roles.indexOf(superAdmin) >= 0) {
|
||||
// accessedRouters = asyncRouter;
|
||||
// } else {
|
||||
// eslint-disable-next-line prefer-const
|
||||
accessedRouters = filterAsyncRouter(asyncRouter, roles);
|
||||
// }
|
||||
|
||||
const accessedRouters = filterAsyncRouter(asyncRouter, roles);
|
||||
commit('SET_ROUTERS', accessedRouters);
|
||||
resolve();
|
||||
});
|
||||
|
@ -9,6 +9,9 @@ function handle(state, data) {
|
||||
case 'Order_Pay_Result': // 订单支付结果消息
|
||||
state.payOrder = msg;
|
||||
break;
|
||||
case 'Be_Logged_Out': // 重复登录被登出
|
||||
state.beLogout = msg;
|
||||
break;
|
||||
case 'JointTraining_Room': // 综合演练室-房间消息
|
||||
if (!path.includes('/plan') || !path.includes('/dp/')) {
|
||||
state.jointRoomInfo = msg; // 房间信息
|
||||
@ -193,6 +196,7 @@ const socket = {
|
||||
|
||||
state: {
|
||||
payOrder: {}, // 支付消息
|
||||
beLogout: {}, // 被登出
|
||||
jointRoomInfo: {}, // 受邀请房间信息
|
||||
chatContent: {}, // 聊天室聊天内容
|
||||
roleList: [], // 设置角色信息
|
||||
|
@ -1,15 +1,14 @@
|
||||
import { setSessionStorage } from '@/utils/auth';
|
||||
import { login, logout, getInfo } from '@/api/login';
|
||||
import { getToken, setToken, removeToken, getDesignToken, setDesignToken, removeDesignToken, handleToken, handleRemoveToken } from '@/utils/auth';
|
||||
import { getToken, setToken, removeToken } from '@/utils/auth';
|
||||
import { getUserConfigInfo } from '@/api/management/user';
|
||||
import { LoginParams } from '@/utils/login';
|
||||
import { creatSubscribe, perpetualTopic, commonTopic } from '@/utils/stomp';
|
||||
import { creatSubscribe, clearSubscribe, perpetualTopic, commonTopic } from '@/utils/stomp';
|
||||
import Cookies from 'js-cookie';
|
||||
|
||||
const user = {
|
||||
state: {
|
||||
token: getToken(),
|
||||
tokenDesign: getDesignToken(),
|
||||
name: '',
|
||||
nickname: '',
|
||||
nationcode: '',
|
||||
@ -25,15 +24,6 @@ const user = {
|
||||
SET_TOKEN: (state, token) => {
|
||||
state.token = token;
|
||||
},
|
||||
SET_TOKENSCREEN: (state, token) => {
|
||||
state.tokenScreen = token;
|
||||
},
|
||||
SET_TOKENDESIGN: (state, token) => {
|
||||
state.tokenDesign = token;
|
||||
},
|
||||
SET_TOKENPLAN: (state, token) => {
|
||||
state.tokenPlan = token;
|
||||
},
|
||||
SET_NAME: (state, name) => {
|
||||
state.name = name;
|
||||
},
|
||||
@ -57,6 +47,12 @@ const user = {
|
||||
},
|
||||
SET_ACCOUNT: (state, account) => {
|
||||
state.account = account;
|
||||
},
|
||||
CLEAR_AUTO_PARAMS: () => {
|
||||
Cookies.remove('UserDesignName');
|
||||
Cookies.remove('UserDesignToken');
|
||||
Cookies.remove('UserName');
|
||||
Cookies.remove('UserToken');
|
||||
}
|
||||
},
|
||||
|
||||
@ -67,21 +63,15 @@ const user = {
|
||||
const password = userInfo.password.trim();
|
||||
return new Promise((resolve, reject) => {
|
||||
let params = null;
|
||||
let execFc = null;
|
||||
let execFunc = null;
|
||||
if (userInfo.type == 'design') {
|
||||
params = Object.assign({ account: username, password }, LoginParams.Design);
|
||||
execFc = (token) => {
|
||||
setDesignToken(token);
|
||||
commit('SET_TOKENDESIGN', token);
|
||||
const header = { group: '', 'X-Token': getDesignToken() };
|
||||
execFunc = (header) => {
|
||||
creatSubscribe(commonTopic, header);
|
||||
};
|
||||
} else {
|
||||
params = Object.assign({ account: username, password }, LoginParams.LianKeTang);
|
||||
execFc = (token) => {
|
||||
setToken(token);
|
||||
commit('SET_TOKEN', token);
|
||||
const header = { group: '', 'X-Token': getToken() };
|
||||
execFunc = (header) => {
|
||||
creatSubscribe(perpetualTopic, header);
|
||||
creatSubscribe(commonTopic, header);
|
||||
};
|
||||
@ -89,7 +79,10 @@ const user = {
|
||||
|
||||
// 登录系统
|
||||
login(params).then(resp => {
|
||||
execFc(resp.data);
|
||||
const token = resp.data;
|
||||
commit('SET_TOKEN', token);
|
||||
setToken(token);
|
||||
execFunc({ group: '', 'X-Token': token });
|
||||
resolve();
|
||||
}).catch(error => { reject(error); });
|
||||
});
|
||||
@ -113,9 +106,9 @@ const user = {
|
||||
},
|
||||
|
||||
// 获取用户信息
|
||||
GetInfo({ commit }, getTokenInfo) {
|
||||
GetInfo({ commit }, token) {
|
||||
return new Promise((resolve, reject) => {
|
||||
getInfo(getTokenInfo()).then(response => {
|
||||
getInfo(token).then(response => {
|
||||
const user = response.data;
|
||||
if (user.roles && user.roles.length > 0) { // 验证返回的roles是否是一个非空数组
|
||||
commit('SET_ROLES', user.roles);
|
||||
@ -145,39 +138,29 @@ const user = {
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// 前端登出
|
||||
FedLogOut({ commit }, clientId) {
|
||||
return new Promise(resolve => {
|
||||
if (clientId == LoginParams.Design.clientId) {
|
||||
commit('SET_TOKENDESIGN', '');
|
||||
removeDesignToken();
|
||||
} else {
|
||||
FedLogOut({ commit }) {
|
||||
clearSubscribe(perpetualTopic);
|
||||
clearSubscribe(commonTopic);
|
||||
commit('SET_TOKEN', '');
|
||||
commit('SET_ID', '');
|
||||
removeToken();
|
||||
}
|
||||
|
||||
resolve();
|
||||
});
|
||||
},
|
||||
|
||||
// 登出系统
|
||||
LogOut({ commit }) {
|
||||
LogOut({ commit, dispatch }) {
|
||||
// 清楚自动登陆参数
|
||||
commit('CLEAR_AUTO_PARAMS');
|
||||
const token = getToken();
|
||||
return new Promise((resolve, reject) => {
|
||||
logout(handleToken()).then(() => {
|
||||
commit('SET_TOKEN', '');
|
||||
commit('SET_ROLES', []);
|
||||
commit('SET_ID', '');
|
||||
Cookies.remove('UserDesignName');
|
||||
Cookies.remove('UserDesignToken');
|
||||
Cookies.remove('UserName');
|
||||
Cookies.remove('UserToken');
|
||||
handleRemoveToken();
|
||||
dispatch('FedLogOut').then(resp => {
|
||||
logout(token).then(() => {
|
||||
resolve();
|
||||
}).catch(error => {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
SetAccount({ commit }, account) {
|
||||
|
@ -1,10 +1,8 @@
|
||||
import SessionStorage from 'sessionstorage';
|
||||
import { LoginParams } from '@/utils/login';
|
||||
|
||||
const TokenKey = 'Admin-Token';
|
||||
const TokenDesignKey = 'Design-Token';
|
||||
|
||||
// 设置教学,实训,仿真系统token
|
||||
// 设置教学,实训,仿真系统token, 设置城市轨道交通设计平台token
|
||||
export function getToken() {
|
||||
return SessionStorage.getItem(TokenKey);
|
||||
}
|
||||
@ -15,17 +13,6 @@ export function removeToken() {
|
||||
return SessionStorage.removeItem(TokenKey);
|
||||
}
|
||||
|
||||
// 设置城市轨道交通设计平台token
|
||||
export function getDesignToken() {
|
||||
return SessionStorage.getItem(TokenDesignKey);
|
||||
}
|
||||
export function setDesignToken(token) {
|
||||
return SessionStorage.setItem(TokenDesignKey, token);
|
||||
}
|
||||
export function removeDesignToken() {
|
||||
return SessionStorage.removeItem(TokenDesignKey);
|
||||
}
|
||||
|
||||
// 操作sessionStorage
|
||||
export function getSessionStorage(key) {
|
||||
return SessionStorage.getItem(key);
|
||||
@ -36,42 +23,3 @@ export function setSessionStorage(key, value) {
|
||||
export function removeSessionStorage(key) {
|
||||
return SessionStorage.removeItem(key);
|
||||
}
|
||||
|
||||
// 根据路径判断获取token
|
||||
export function handleToken() {
|
||||
const path = window.location.href;
|
||||
if (path.includes('/design') || path.includes('/scriptDisplay') || path.includes('/publish') || path.includes('/orderauthor') || path.includes('/system') || path.includes('/display/manage') || path.includes('/apply/')) {
|
||||
return getDesignToken();
|
||||
} else if (path.includes('/plan') || path.includes('/display/plan')) {
|
||||
return getDesignToken() || getToken();
|
||||
} else {
|
||||
return getToken();
|
||||
}
|
||||
}
|
||||
|
||||
// 根据路径清除token
|
||||
export function handleRemoveToken() {
|
||||
const path = window.location.href;
|
||||
if (path.includes('/design') || path.includes('/scriptDisplay') || path.includes('/plan') || path.includes('/publish') || path.includes('/orderauthor') || path.includes('/system') || path.includes('/display/plan') || path.includes('/display/manage') || path.includes('/apply/')) {
|
||||
return removeDesignToken();
|
||||
} else {
|
||||
return removeToken();
|
||||
}
|
||||
}
|
||||
|
||||
// 根据route路径判断系统类型
|
||||
export function gainClientId() {
|
||||
const path = window.location.href;
|
||||
let clientId = null;
|
||||
if (path.includes('/dp/') || path.includes('/display/dp')) {
|
||||
clientId = LoginParams.DaPing.clientId;
|
||||
}
|
||||
// else if (path.includes('/plan') || path.includes('/display/plan')) {
|
||||
// clientId = LoginParams.LianJiHua.clientId;
|
||||
// }
|
||||
else if (path.includes('/design') || path.includes('/scriptDisplay') || path.includes('/plan') || path.includes('/publish') || path.includes('/orderauthor') || path.includes('/system') || path.includes('/display/plan') || path.includes('/display/manage') || path.includes('/apply/')) {
|
||||
clientId = LoginParams.Design.clientId;
|
||||
}
|
||||
|
||||
return clientId;
|
||||
}
|
||||
|
@ -3,8 +3,8 @@ export function getBaseUrl() {
|
||||
let BASE_API;
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
// BASE_API = 'https://joylink.club/jlcloud';
|
||||
BASE_API = 'https://test.joylink.club/jlcloud';
|
||||
// BASE_API = 'http://192.168.3.5:9000'; // 袁琪
|
||||
// BASE_API = 'https://test.joylink.club/jlcloud';
|
||||
BASE_API = 'http://192.168.3.5:9000'; // 袁琪
|
||||
// BASE_API = 'http://192.168.3.6:9000'; // 旭强
|
||||
// BASE_API = 'http://192.168.3.41:9000'; // 杜闪
|
||||
// BASE_API = 'http://192.168.3.82:9000'; // 杜康
|
||||
|
@ -2,8 +2,6 @@
|
||||
// 登陆配置参数
|
||||
export const LoginParams = {
|
||||
LianKeTang: { clientId: '1', secret: 'joylink' }, // "城市轨道交通实训平台"
|
||||
// DaPing: { clientId: '2', secret: 'bigscreen' }, // "大屏系统"
|
||||
// LianJiHua: { clientId: '3', secret: 'linkplan' }, // "琏计划"
|
||||
Assistant: { clientId: '4', secret: 'linkassistant' }, // "琏课堂助手"
|
||||
Design: { clientId: '2', secret: 'design' } // "城市轨道交通设计平台"
|
||||
};
|
||||
|
@ -1,7 +1,7 @@
|
||||
import axios from 'axios';
|
||||
import store from '../store';
|
||||
import { MessageBox } from 'element-ui';
|
||||
import { handleToken, gainClientId } from '@/utils/auth';
|
||||
import { getToken } from '@/utils/auth';
|
||||
import { getBaseUrl } from '@/utils/baseUrl';
|
||||
import { EventBus } from '@/scripts/event-bus';
|
||||
|
||||
@ -16,8 +16,8 @@ const service = axios.create({
|
||||
|
||||
// request拦截器
|
||||
service.interceptors.request.use(config => {
|
||||
if (handleToken()) {
|
||||
config.headers['X-Token'] = handleToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
|
||||
if (getToken()) {
|
||||
config.headers['X-Token'] = getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
|
||||
}
|
||||
if (config.time) {
|
||||
config.timeout = config.time; // 让每个请求携带自定义token 请根据实际情况自行修改
|
||||
@ -42,12 +42,12 @@ service.interceptors.response.use(
|
||||
EventBus.$emit('viewLoading', false);
|
||||
// eslint-disable-next-line no-undef
|
||||
EventBus.$emit('clearCheckLogin');
|
||||
MessageBox.confirm('你已被登出,请重新登录', '确定登出', {
|
||||
confirmButtonText: '重新登录',
|
||||
MessageBox.confirm(this.$t('tip.logoutTips'), this.$t('tip.hint'), {
|
||||
confirmButtonText: this.$t('tip.confirmLogin'),
|
||||
showCancelButton: false,
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
store.dispatch('FedLogOut', gainClientId()).then(() => {
|
||||
store.dispatch('FedLogOut').then(() => {
|
||||
location.reload();// 为了重新实例化vue-router对象 避免bug
|
||||
});
|
||||
});
|
||||
|
@ -1,9 +1,8 @@
|
||||
import { handleToken } from '@/utils/auth';
|
||||
import { getToken } from '@/utils/auth';
|
||||
import { checkLoginLine } from '@/api/login';
|
||||
import { getBaseUrl } from '@/utils/baseUrl';
|
||||
import { MessageBox } from 'element-ui';
|
||||
import store from '../store';
|
||||
import { gainClientId } from '@/utils/auth';
|
||||
|
||||
var SockJS = require('sockjs-client');
|
||||
var Stomp = require('stompjs');
|
||||
@ -13,7 +12,7 @@ const websocketUrl = `${getBaseUrl()}/joylink-websocket?token=`;
|
||||
// const websocketUrl = `http://192.168.3.6:9000/joylink-websocket?token=`;
|
||||
|
||||
var StompClient = function (headers) {
|
||||
this.url = websocketUrl + handleToken();
|
||||
this.url = websocketUrl + getToken();
|
||||
this.headers = headers || {};
|
||||
this.connect();
|
||||
};
|
||||
@ -32,7 +31,7 @@ StompClient.prototype = {
|
||||
sockStatus: 0,
|
||||
|
||||
headers: {
|
||||
// 'X-Token': handleToken()
|
||||
// 'X-Token': getToken()
|
||||
},
|
||||
|
||||
count: 0,
|
||||
@ -54,7 +53,7 @@ StompClient.prototype = {
|
||||
}
|
||||
|
||||
// 建立连接对象(还未发起连接)
|
||||
this.socket = new SockJS(websocketUrl + handleToken());
|
||||
this.socket = new SockJS(websocketUrl + getToken());
|
||||
|
||||
// 获取 STOMP 子协议的客户端对象
|
||||
this.clientIns = Stomp.over(this.socket);
|
||||
@ -62,7 +61,7 @@ StompClient.prototype = {
|
||||
this.closeStompDebug();
|
||||
|
||||
// 向服务器发起websocket连接并发送CONNECT帧
|
||||
this.clientIns.connect({ 'X-Token': handleToken() }, () => {
|
||||
this.clientIns.connect({ 'X-Token': getToken() }, () => {
|
||||
console.info('连接成功.');
|
||||
this.count = 0;
|
||||
this.status = true;
|
||||
@ -121,7 +120,7 @@ StompClient.prototype = {
|
||||
this.logOut();
|
||||
}
|
||||
if (err.code == 50008 || err.code == 50014) {
|
||||
this.url = websocketUrl + handleToken();
|
||||
this.url = websocketUrl + getToken();
|
||||
this.connect();
|
||||
}
|
||||
});
|
||||
@ -139,13 +138,13 @@ StompClient.prototype = {
|
||||
showCancelButton: false,
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
store.dispatch('FedLogOut', gainClientId()).then(() => {
|
||||
store.dispatch('FedLogOut').then(() => {
|
||||
location.reload();// 为了重新实例化vue-router对象 避免bug
|
||||
});
|
||||
});
|
||||
}
|
||||
if (err.code == 50008 || err.code == 50014) {
|
||||
this.url = websocketUrl + handleToken();
|
||||
this.url = websocketUrl + getToken();
|
||||
this.status = false;
|
||||
this.count++;
|
||||
this.reconnect(this.count);
|
||||
|
@ -10,9 +10,9 @@ export const commonTopic = '/topic/message'; // 公共topic(不区分用户)
|
||||
|
||||
// 建立连接并订阅地址
|
||||
export function creatSubscribe(topic, header) {
|
||||
if ([displayTopic, planTopic, designDisplayTopic].includes(topic)) {
|
||||
topic = `${topic}/${header.group}`;
|
||||
}
|
||||
// if ([displayTopic, planTopic, designDisplayTopic].includes(topic)) {
|
||||
// topic = `${topic}/${header.group}`;
|
||||
// }
|
||||
|
||||
try {
|
||||
if (!Vue.prototype.$stomp) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
v-dialogDrag
|
||||
v-dialogLoading="pageLoading"
|
||||
:title="title"
|
||||
:visible.sync="show"
|
||||
width="600px"
|
||||
@ -12,25 +13,26 @@
|
||||
<el-scrollbar wrap-class="scrollbar-wrapper" :style="{height: height+'px'}">
|
||||
<el-tree
|
||||
ref="tree"
|
||||
node-key="group"
|
||||
class="filter-tree"
|
||||
default-expand-all
|
||||
:data="trainingList"
|
||||
:props="defaultProps"
|
||||
default-expand-all
|
||||
:filter-node-method="filterNode"
|
||||
:style="{height: height+'px'}"
|
||||
@node-click="clickEvent"
|
||||
>
|
||||
<span slot-scope="{ node, data }">
|
||||
<div slot-scope="{ node, data }" class="list-elem">
|
||||
<span v-if="data.state=='01'">{{ '['+data.mapName+']'+($t('global.trainingNotStart').replace('{name}', data.creator.nickName)) }}</span>
|
||||
<span v-else>{{ '['+data.mapName+']'+($t('global.trainingHasStart').replace('{name}', data.creator.nickName)) }}</span>
|
||||
</span>
|
||||
</div>
|
||||
</el-tree>
|
||||
</el-scrollbar>
|
||||
<span
|
||||
slot="footer"
|
||||
class="dialog-footer"
|
||||
>
|
||||
<el-button type="primary" @click="handleJoin">{{ $t('global.joinRoom') }}</el-button>
|
||||
<el-button v-loading="loading" type="primary" :disabled="!group" @click="handleJoin">{{ $t('global.joinRoom') }}</el-button>
|
||||
<el-button @click="dialogShow = false">{{ $t('global.cancel') }}</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
@ -46,7 +48,6 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
dialogShow: false,
|
||||
loading: false,
|
||||
height: 120,
|
||||
trainingList: [],
|
||||
defaultProps: {
|
||||
@ -54,7 +55,9 @@ export default {
|
||||
},
|
||||
group: '',
|
||||
state: '',
|
||||
mapId: ''
|
||||
mapId: '',
|
||||
loading: false,
|
||||
pageLoading: false
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -81,25 +84,34 @@ export default {
|
||||
this.group = obj.group;
|
||||
this.mapId = obj.mapId;
|
||||
},
|
||||
async getList() {
|
||||
async doShow() {
|
||||
try {
|
||||
this.pageLoading = true;
|
||||
this.dialogShow = true;
|
||||
this.loading = false;
|
||||
const res = await getjointTrainList();
|
||||
this.trainingList = res.data;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
this.trainingList = res.data || [];
|
||||
this.$nextTick(() => {
|
||||
var training = this.trainingList[0] || {};
|
||||
if (training) {
|
||||
this.state = training.state;
|
||||
this.group = training.group;
|
||||
this.mapId = training.mapId;
|
||||
this.$refs.tree.setCurrentKey(this.group);
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
} finally {
|
||||
this.pageLoading = false;
|
||||
}
|
||||
},
|
||||
doShow() {
|
||||
this.getList();
|
||||
this.loading = false;
|
||||
this.dialogShow = true;
|
||||
},
|
||||
doClose() {
|
||||
this.loading = false;
|
||||
async doClose() {
|
||||
this.dialogShow = false;
|
||||
},
|
||||
async handleJoin() {
|
||||
if (this.group) {
|
||||
try {
|
||||
this.loading = true;
|
||||
await getjointTraining(this.group);
|
||||
if (this.state == '02') {
|
||||
launchFullscreen();
|
||||
@ -111,8 +123,10 @@ export default {
|
||||
const query = { group: this.group };
|
||||
this.$router.push({ path: `/trainroom`, query: query });
|
||||
}
|
||||
} else {
|
||||
this.$message.info(this.$t('global.pleaseChooseRoom'));
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
} finally {
|
||||
this.loading = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -127,6 +141,10 @@ export default {
|
||||
|
||||
.el-tree {
|
||||
overflow: hidden !important;
|
||||
.list-elem {
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.el-tree-node.is-current>.el-tree-node__content {
|
||||
|
@ -11,7 +11,7 @@
|
||||
>
|
||||
<div style="height: 80px; line-height: 80px; font-size: 16px; padding-left: 10px;">{{ roomName }}{{ $t('global.inviteJoinRoom') }}</div>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="handleJoin">{{ $t('global.confirm') }}</el-button>
|
||||
<el-button v-loading="loading" type="primary" @click="handleJoin">{{ $t('global.confirm') }}</el-button>
|
||||
<el-button @click="dialogShow = false">{{ $t('global.cancel') }}</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
@ -30,7 +30,8 @@ export default {
|
||||
group: '',
|
||||
roomName: '',
|
||||
state: '',
|
||||
mapId: ''
|
||||
mapId: '',
|
||||
loading: false
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -50,11 +51,14 @@ export default {
|
||||
this.state = data.state;
|
||||
this.mapId = data.mapId;
|
||||
this.dialogShow = true;
|
||||
this.loading = false;
|
||||
},
|
||||
doClose() {
|
||||
this.dialogShow = false;
|
||||
},
|
||||
async handleJoin() {
|
||||
try {
|
||||
this.loading = true;
|
||||
if (this.state == '02') {
|
||||
launchFullscreen();
|
||||
await putJointTrainingSimulationEntrance(this.group);
|
||||
@ -66,7 +70,12 @@ export default {
|
||||
this.$router.push({ path: `/trainroom`, query: query });
|
||||
}
|
||||
this.dialogShow = false;
|
||||
getjointTraining(this.group);
|
||||
await getjointTraining(this.group);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
} finally {
|
||||
this.loading = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<el-dialog v-dialogDrag v-loading="loadingUpload" :title="$t('map.createNewMap')" :visible.sync="dialogShow" width="30%" :close-on-click-modal="false" :before-close="handleClose">
|
||||
<el-dialog v-dialogDrag v-dialogLoading="loadingUpload" :title="$t('map.createNewMap')" :visible.sync="dialogShow" width="30%" :close-on-click-modal="false" :before-close="handleClose">
|
||||
<div>
|
||||
<el-tabs v-model="activeTab" type="card">
|
||||
<el-tab-pane :label="$t('map.normalCreate')" name="first">
|
||||
@ -126,12 +126,14 @@ export default {
|
||||
},
|
||||
initLoadData() {
|
||||
this.lineCodeList = [];
|
||||
getLineCodeList().then(response => {
|
||||
this.lineCodeList = response.data;
|
||||
});
|
||||
this.$Dictionary.cityType().then(list => {
|
||||
this.cityList = list;
|
||||
});
|
||||
|
||||
getLineCodeList().then(response => {
|
||||
this.lineCodeList = response.data;
|
||||
});
|
||||
|
||||
getMapListByProject().then(response => {
|
||||
this.publishMapList = response.data;
|
||||
}).catch(() => {
|
||||
|
@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
v-dialogDrag
|
||||
v-dialogLoading="dialogLoading"
|
||||
:title="title"
|
||||
:visible.sync="dialogShow"
|
||||
width="100%"
|
||||
@ -151,7 +152,8 @@ export default {
|
||||
},
|
||||
absoluteTime: 2 * 3600,
|
||||
indexKmRangeMap: {},
|
||||
runPlanData: {}
|
||||
runPlanData: {},
|
||||
dialogLoading: false
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -195,14 +197,21 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doShow() {
|
||||
async doShow() {
|
||||
try {
|
||||
this.dialogLoading = true;
|
||||
this.dialogShow = true;
|
||||
this.loadInitData(this.series);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
} finally {
|
||||
this.dialogLoading = false;
|
||||
}
|
||||
},
|
||||
doClose() {
|
||||
async doClose() {
|
||||
this.dialogShow = false;
|
||||
},
|
||||
loadChartPage() {
|
||||
async loadChartPage() {
|
||||
const stations = this.$store.state.runPlan.stations;
|
||||
const planData = this.$store.state.runPlan.planData;
|
||||
this.series = [];
|
||||
|
@ -43,10 +43,10 @@
|
||||
</el-tabs>
|
||||
</div>
|
||||
<div class="btn-buy">
|
||||
<el-button type="success" @click="buy">{{ $t('exam.buy') }}</el-button>
|
||||
<el-button v-if="hasPermssion" type="primary" @click="distribute">{{ $t('exam.distributePermission') }}</el-button>
|
||||
<el-button v-if="hasPermssion" type="primary" @click="transfer">{{ $t('global.transferQRCode') }}</el-button>
|
||||
<el-button v-if="isAddRule" type="primary" @click="checkCourse">{{ $t('exam.viewCoursePapers') }}</el-button>
|
||||
<el-button v-loading="loading" type="success" @click="buy">{{ $t('exam.buy') }}</el-button>
|
||||
<el-button v-if="hasPermssion" v-loading="loading" type="primary" @click="distribute">{{ $t('exam.distributePermission') }}</el-button>
|
||||
<el-button v-if="hasPermssion" v-loading="loading" type="primary" @click="transfer">{{ $t('global.transferQRCode') }}</el-button>
|
||||
<el-button v-if="isAddRule" v-loading="loading" type="primary" @click="checkCourse">{{ $t('exam.viewCoursePapers') }}</el-button>
|
||||
<el-button type="primary" @click="backLessonList">{{ $t('exam.returnCourseList') }}</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
@ -156,20 +156,23 @@ export default {
|
||||
path: `${UrlConfig.trainingPlatform.examRuleManage}`,
|
||||
query: { lessonId: this.courseModel.id }
|
||||
});
|
||||
this.loading = false;
|
||||
},
|
||||
transfer() { // 转增
|
||||
this.loading = false;
|
||||
this.loading = true;
|
||||
if (this.$refs) {
|
||||
this.activeName = 'second';
|
||||
this.$refs.limitList.transfer(this.courseModel);
|
||||
}
|
||||
this.loading = false;
|
||||
},
|
||||
distribute() { // 分发
|
||||
this.loading = false;
|
||||
this.loading = true;
|
||||
if (this.$refs) {
|
||||
this.activeName = 'second';
|
||||
this.$refs.limitList.distribute(this.courseModel);
|
||||
}
|
||||
this.loading = false;
|
||||
},
|
||||
clickEvent(obj, node, data) {
|
||||
if (this.valid || obj.trial) {
|
||||
|
@ -56,8 +56,8 @@
|
||||
</div>
|
||||
<div class="draft">
|
||||
<el-button-group>
|
||||
<el-button v-show="!isEdit" type="primary" @click="create">{{ $t('global.append') }}</el-button>
|
||||
<el-button v-show="isEdit" type="primary" @click="update">{{ $t('global.update') }}</el-button>
|
||||
<el-button v-show="!isEdit" v-loading="loading" type="primary" @click="create">{{ $t('global.append') }}</el-button>
|
||||
<el-button v-show="isEdit" v-loading="loading" type="primary" @click="update">{{ $t('global.update') }}</el-button>
|
||||
<el-button type="primary" @click="back">{{ $t('global.back') }}</el-button>
|
||||
</el-button-group>
|
||||
</div>
|
||||
@ -99,7 +99,8 @@ export default {
|
||||
detail: {
|
||||
mapId: '',
|
||||
prdId: ''
|
||||
}
|
||||
},
|
||||
loading: false
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -188,10 +189,13 @@ export default {
|
||||
create() {
|
||||
this.$refs.form.validate((valid) => {
|
||||
if (valid) {
|
||||
this.loading = true;
|
||||
createLessonChapter(this.chapterModel).then(response => {
|
||||
this.$emit('refresh');
|
||||
this.$message.success(this.$t('tip.createSuccess'));
|
||||
this.loading = false;
|
||||
}).catch(() => {
|
||||
this.loading = false;
|
||||
this.$messageBox(this.$t('error.refreshFailed'));
|
||||
});
|
||||
}
|
||||
@ -200,11 +204,14 @@ export default {
|
||||
update() {
|
||||
this.$refs.form.validate((valid) => {
|
||||
if (valid) {
|
||||
this.loading = true;
|
||||
updateLessonChapter(this.chapterModel).then(response => {
|
||||
this.$emit('refresh');
|
||||
this.$message.success(this.$t('tip.updateSuccessfully'));
|
||||
this.loading = false;
|
||||
}).catch(() => {
|
||||
this.$messageBox(this.$t('error.refreshFailed'));
|
||||
this.loading = false;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -2,7 +2,7 @@
|
||||
<el-dialog v-dialogDrag :title="title" :visible.sync="dialogVisible" width="25%" :before-close="doClose" center>
|
||||
<data-form ref="dataform" :form="form" :form-model="formModel" :rules="rules" />
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="doSave">{{ $t('global.confirm') }}</el-button>
|
||||
<el-button v-loading="loading" type="primary" @click="doSave">{{ $t('global.confirm') }}</el-button>
|
||||
<el-button @click="doClose">{{ $t('global.cancel') }}</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
@ -23,7 +23,8 @@ export default {
|
||||
parameter: this.$route.query.mapId,
|
||||
type: '01'
|
||||
},
|
||||
isShow: false
|
||||
isShow: false,
|
||||
loading: false
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -66,12 +67,6 @@ export default {
|
||||
doShow() {
|
||||
this.dialogVisible = true;
|
||||
},
|
||||
doSave() {
|
||||
const self = this;
|
||||
this.$refs.dataform.validateForm(() => {
|
||||
self.create();
|
||||
});
|
||||
},
|
||||
doClose() {
|
||||
this.formModel = {
|
||||
parameter: this.$route.query.mapId,
|
||||
@ -81,6 +76,14 @@ export default {
|
||||
this.isShow = false;
|
||||
this.dialogVisible = false;
|
||||
},
|
||||
async doSave() {
|
||||
const self = this;
|
||||
this.$refs.dataform.validateForm(async () => {
|
||||
self.loading = true;
|
||||
await self.create();
|
||||
self.loading = false;
|
||||
});
|
||||
},
|
||||
async create() {
|
||||
const self = this;
|
||||
try {
|
||||
|
@ -100,9 +100,9 @@ import QrcodeVue from 'qrcode.vue';
|
||||
import { getLoginWmurl, checkLoginStatus } from '@/api/login';
|
||||
import { LoginParams } from '@/utils/login';
|
||||
import bgImg from '@/assets/bg1.jpg';
|
||||
import { setToken, setDesignToken } from '@/utils/auth';
|
||||
import { loginTitle } from '@/scripts/ConstDic';
|
||||
import { removeToken, removeDesignToken} from '@/utils/auth';
|
||||
import { setToken } from '@/utils/auth';
|
||||
import { loginInfo } from '@/scripts/ConstDic';
|
||||
import { removeToken } from '@/utils/auth';
|
||||
import LangStorage from '@/utils/lang';
|
||||
import { UrlConfig } from '@/router/index';
|
||||
import logoImgXty from '@/assets/logo_xty.png';
|
||||
@ -164,11 +164,11 @@ export default {
|
||||
return this.$route.path.split('/')[1];
|
||||
},
|
||||
title() {
|
||||
return loginTitle[this.$route.path.split('/')[1]];
|
||||
return loginInfo[this.$route.path.split('/')[1]].title;
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
document.title = loginTitle[this.project];
|
||||
document.title = loginInfo[this.project].title;
|
||||
this.loginRefresh();
|
||||
},
|
||||
created() {
|
||||
@ -205,7 +205,7 @@ export default {
|
||||
this.language = 'English';
|
||||
}
|
||||
removeToken();
|
||||
removeDesignToken();
|
||||
removeToken();
|
||||
setSessionStorage('project', this.project);
|
||||
},
|
||||
clearTimer(timer) {
|
||||
@ -243,12 +243,7 @@ export default {
|
||||
this.clearTimer(this.checkLogin);
|
||||
this.checkLogin = setTimeout(() => {
|
||||
checkLoginStatus(self.sessionId).then(response => {
|
||||
if (this.project.startsWith('design')) {
|
||||
setDesignToken(response.data.token);
|
||||
|
||||
} else {
|
||||
setToken(response.data.token);
|
||||
}
|
||||
// 设置扫码登录
|
||||
self.$store.dispatch('QrLoginSetting', { key: 'SET_TOKEN', value: response.data.token }).then(() => {
|
||||
// 清除定时器,设置路由
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
<script>
|
||||
import MapCommon from './common/index';
|
||||
import { handleToken } from '@/utils/auth';
|
||||
import { getToken } from '@/utils/auth';
|
||||
import { creatSubscribe, clearSubscribe, displayTopic, planTopic, designDisplayTopic} from '@/utils/stomp';
|
||||
import { sendCommand } from '@/api/jmap/training';
|
||||
import { getSessionStorage } from '@/utils/auth';
|
||||
@ -104,7 +104,7 @@ export default {
|
||||
},
|
||||
async subscribe() {
|
||||
this.clearSubscribe();
|
||||
const header = { group: this.group || '', 'X-Token': handleToken() };
|
||||
const header = { group: this.group || '', 'X-Token': getToken() };
|
||||
|
||||
if (this.mode === 'plan') {
|
||||
creatSubscribe(planTopic, header);
|
||||
|
Loading…
Reference in New Issue
Block a user