综合演练问题调整

This commit is contained in:
fan 2022-12-01 10:58:16 +08:00
parent ad1ba2efd4
commit 797afc7258
18 changed files with 177 additions and 1314 deletions

View File

@ -377,3 +377,7 @@ export const UserOperationType = {
CHOOSEVALUE: '选择', CHOOSEVALUE: '选择',
FILLVALUE: '填写' FILLVALUE: '填写'
}; };
export const SimulationUserType = {
TEACHER: 'TEACHER',
STUDENT: 'STUDENT'
};

View File

@ -3,6 +3,7 @@ import { TrainingMode } from '@/scripts/ConstDic';
import deviceType from '../../jmapNew/constant/deviceType'; import deviceType from '../../jmapNew/constant/deviceType';
import LangStorage from '@/utils/lang'; import LangStorage from '@/utils/lang';
import { deepAssign } from '@/utils/index'; import { deepAssign } from '@/utils/index';
import store from '@/store/index';
/** /**
* 实训状态数据 * 实训状态数据
@ -47,7 +48,8 @@ const training = {
trainingStart: false, // 实训开始状态 trainingStart: false, // 实训开始状态
notifySelected: null, // 场景弹窗内容 notifySelected: null, // 场景弹窗内容
runPathList:[], // 运行线 (宁波三号线) runPathList:[], // 运行线 (宁波三号线)
domConfig: {} // 线路功能前端配置项 domConfig: {}, // 线路功能前端配置项
simulationUserType: '' // 仿真用户角色
}, },
getters: { getters: {
@ -211,6 +213,12 @@ const training = {
} }
}, },
setSimulationUserList: (state, simulationUserList) => { setSimulationUserList: (state, simulationUserList) => {
state.simulationUserType = '';
simulationUserList.forEach(item => {
if (item.userId == store.state.user.id ) {
state.simulationUserType = item.userType;
}
});
state.simulationUserList = simulationUserList; state.simulationUserList = simulationUserList;
}, },
updateMemberTrust:(state, {deviceCode, trust}) => { updateMemberTrust:(state, {deviceCode, trust}) => {
@ -244,7 +252,7 @@ const training = {
user.online = item.online; user.online = item.online;
user.memberId = item.memberId; user.memberId = item.memberId;
user.role = item.role; user.role = item.role;
user.type = item.type; user.memberType = item.memberType;
user.deviceCode = item.deviceCode; user.deviceCode = item.deviceCode;
memberIndex = index; memberIndex = index;
} }

View File

@ -23,13 +23,13 @@ export function handlerUrl() {
let OSS_URL; let OSS_URL;
if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
// 开发分支 // 开发分支
BASE_API = 'http://192.168.3.233/rtss-server'; // BASE_API = 'http://192.168.3.233/rtss-server';
// BASE_API = 'https://joylink.club/jlcloud'; // BASE_API = 'https://joylink.club/jlcloud';
// BASE_API = 'https://test.joylink.club/jlcloud'; // BASE_API = 'https://test.joylink.club/jlcloud';
// BASE_API = 'http://114.116.51.125/jlcloud'; // BASE_API = 'http://114.116.51.125/jlcloud';
// BASE_API = 'http://192.168.3.90:9000'; // 周寅 // BASE_API = 'http://192.168.3.90:9000'; // 周寅
// BASE_API = 'http://192.168.3.94:9000'; // 旭强 // BASE_API = 'http://192.168.3.94:9000'; // 旭强
// BASE_API = 'http://192.168.3.15:9000'; // 张赛 BASE_API = 'http://192.168.3.15:9000'; // 张赛
// BASE_API = 'http://192.168.3.5:9000'; // 夏增彬 // BASE_API = 'http://192.168.3.5:9000'; // 夏增彬
// BASE_API = 'http://192.168.3.37:9000'; // 卫志宏 // BASE_API = 'http://192.168.3.37:9000'; // 卫志宏
// BASE_API = 'http://b29z135112.zicp.vip'; // BASE_API = 'http://b29z135112.zicp.vip';

View File

@ -62,6 +62,9 @@ export function getTopic(type, group, param) {
case 'YJDDZH': case 'YJDDZH':
topic = `/topic/yjddzh/trainPosition`; topic = `/topic/yjddzh/trainPosition`;
break; break;
case 'RUNFACT':
topic = `/user/queue/simulation/${group}/runFact`;
break;
} }
return topic; return topic;

View File

@ -29,6 +29,7 @@ import TrainingMenu from './trainingList/trainingMenu';
import TrainingDesign from './trainingDesign/designPane.vue'; import TrainingDesign from './trainingDesign/designPane.vue';
import VoiceChatBox from './voiceChatBox'; import VoiceChatBox from './voiceChatBox';
import DesignTrainingMenu from './trainingList/designTrainingMenu'; import DesignTrainingMenu from './trainingList/designTrainingMenu';
import { SimulationUserType } from '@/scripts/ConstDic';
export default { export default {
name: 'DisplayDraft', name: 'DisplayDraft',
components: { components: {
@ -99,7 +100,9 @@ export default {
this.$store.dispatch('trainingNew/clearStepOverCount'); this.$store.dispatch('trainingNew/clearStepOverCount');
this.$store.dispatch('trainingNew/trainingEnd'); this.$store.dispatch('trainingNew/trainingEnd');
this.$store.dispatch('trainingNew/changeTeachMode', ''); this.$store.dispatch('trainingNew/changeTeachMode', '');
clearSimulation(this.group); if (this.$store.state.training.simulationUserType === SimulationUserType.TEACHER) {
clearSimulation(this.group);
}
}, },
methods:{ methods:{
// //
@ -141,9 +144,6 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
EventBus.$emit('viewLoading', false); EventBus.$emit('viewLoading', false);
}); });
},
// 仿退
async back() {
} }
} }
}; };

View File

@ -4,6 +4,7 @@
:title="title" :title="title"
:visible.sync="dialogVisible" :visible.sync="dialogVisible"
width="500px" width="500px"
append-to-body
:before-close="handleClose" :before-close="handleClose"
center center
:close-on-click-modal="false" :close-on-click-modal="false"
@ -100,7 +101,7 @@ export default {
} }
}, },
methods: { methods: {
initData(row) { initData() {
this.filterStationList = []; this.filterStationList = [];
this.stationList.forEach(item => { this.stationList.forEach(item => {
if (!item.depot) { if (!item.depot) {
@ -108,8 +109,8 @@ export default {
} }
}); });
}, },
doShow(row) { doShow() {
this.initData(row); this.initData();
this.dialogVisible = true; this.dialogVisible = true;
}, },
doSave() { doSave() {

View File

@ -16,8 +16,8 @@
@node-contextmenu="handleShowContextMenu" @node-contextmenu="handleShowContextMenu"
> >
<span slot-scope="{ node, data }"> <span slot-scope="{ node, data }">
<span v-if="node.data.online" style="color: green;">{{ data.nickName + (data.admin? '管理':'') + (data.referee? '裁判员':'') + (data.deviceVO? ` -- (${data.deviceVO.code})`:'') }}</span> <span v-if="node.data.online" style="color: green;">{{ data.nickName + (data.userType === 'TEACHER'? '':'') + (data.referee? '裁判员':'') + (data.deviceVO? ` -- (${data.deviceVO.code})`:'') }}</span>
<span v-else style="color: #ccc;">{{ data.nickName + (data.admin? '【管理员】':'') + (data.referee? '【裁判员】':'') + (data.deviceVO? ` -- (${data.deviceVO.code})`:'') }}</span> <span v-else style="color: #ccc;">{{ data.nickName + (data.userType === 'TEACHER'? '【教员】':'') + (data.referee? '【裁判员】':'') + (data.deviceVO? ` -- (${data.deviceVO.code})`:'') }}</span>
</span> </span>
</el-tree> </el-tree>
</el-scrollbar> </el-scrollbar>
@ -29,6 +29,7 @@
<script> <script>
import { DeviceMenu } from '@/scripts/ConstDic'; import { DeviceMenu } from '@/scripts/ConstDic';
import ContentMenu from './content-menu'; import ContentMenu from './content-menu';
import { SimulationUserType } from '@/scripts/ConstDic';
export default { export default {
components: { components: {
@ -42,12 +43,6 @@ export default {
members: { members: {
type: Array, type: Array,
required: true required: true
},
isAdmin: {
type: Boolean,
default() {
return false;
}
} }
}, },
data() { data() {
@ -97,7 +92,7 @@ export default {
x: e.clientX, x: e.clientX,
y: e.clientY y: e.clientY
}; };
if (this.isAdmin) { if (this.$store.state.training.simulationUserType === SimulationUserType.TEACHER) {
this.clickUserId = `${obj.userId || ''}`; this.clickUserId = `${obj.userId || ''}`;
this.menuDisabled = !!obj.deviceVO; this.menuDisabled = !!obj.deviceVO;
this.$store.dispatch('menuOperation/setPopMenu', { position, menu: DeviceMenu.JointRoom }); this.$store.dispatch('menuOperation/setPopMenu', { position, menu: DeviceMenu.JointRoom });

View File

@ -43,13 +43,13 @@
class="room__container--members" class="room__container--members"
:room="room" :room="room"
:members="simulationUserList" :members="simulationUserList"
:is-admin="isAdmin"
style="height: 100%" style="height: 100%"
@message="messageInfo" @message="messageInfo"
/> />
</div> </div>
<div class="room__footer" /> <div class="room__footer" />
</div> </div>
<add-member ref="addMember" :station-list="stationList" />
</el-drawer> </el-drawer>
</template> </template>
@ -57,18 +57,12 @@
import eMembers from './e-members'; import eMembers from './e-members';
import { EventBus } from '@/scripts/event-bus'; import { EventBus } from '@/scripts/event-bus';
import { assignUsersPlayRoles } from '@/api/jointSimulation'; import { assignUsersPlayRoles } from '@/api/jointSimulation';
import AddMember from './addMember';
export default { export default {
name: 'MembersManage', name: 'MembersManage',
components: { components: {
eMembers eMembers,
}, AddMember
props: {
isAdmin: {
type: Boolean,
default() {
return false;
}
}
}, },
data() { data() {
return { return {
@ -166,7 +160,6 @@ export default {
return this.$store.state.user.nickname; return this.$store.state.user.nickname;
}, },
roles() { roles() {
console.log(this.$store.state.training.userRole, '-----------------');
return this.$store.state.training.roles; return this.$store.state.training.roles;
} }
}, },
@ -404,7 +397,7 @@ export default {
}); });
}, },
addMember() { addMember() {
this.$emit('addSimulationMember'); this.$refs.addMember.doShow();
}, },
filterNode(value, data) { filterNode(value, data) {
let flag = false; let flag = false;
@ -427,6 +420,8 @@ export default {
this.$store.dispatch('training/setUserRole', userRole); this.$store.dispatch('training/setUserRole', userRole);
this.$store.dispatch('training/setRoles', userRole); this.$store.dispatch('training/setRoles', userRole);
this.$store.dispatch('training/updateMemberAndUser', { simulationUserList: [item], userId: this.userId }); this.$store.dispatch('training/updateMemberAndUser', { simulationUserList: [item], userId: this.userId });
} else {
this.$store.dispatch('training/updateMemberAndUser', { simulationUserList: [item], userId: this.userId });
} }
}); });
} }

View File

@ -5,9 +5,18 @@
<span style="margin-left: 10px;font-size: 14px;">{{ dateString }}</span> <span style="margin-left: 10px;font-size: 14px;">{{ dateString }}</span>
</div> </div>
<div style="display: flex;"> <div style="display: flex;">
<el-button class="controlButton" type="info" style="background: #000;" :loading="pauseLoading" circle :class="simulationPaused?'el-icon-video-play':'el-icon-video-pause'" @click="startOrPause" /> <el-button
class="controlButton"
type="info"
style="background: #000;"
:disabled="isDisabled"
:loading="pauseLoading"
circle
:class="simulationPaused?'el-icon-video-play':'el-icon-video-pause'"
@click="startOrPause"
/>
<div> <div>
<div class="simulationMenu" @click="showMenuSpeedList">{{ `x${speed}` }}</div> <div class="simulationMenu" :style="{cursor: isDisabled ? 'not-allowed':'pointer'}" @click="showMenuSpeedList">{{ `x${speed}` }}</div>
<div v-show="isShowSpeedMenuList" class="simulationMenuList" style="right: 85px;"> <div v-show="isShowSpeedMenuList" class="simulationMenuList" style="right: 85px;">
<div v-for="(each, index) in speedList" :key="index"> <div v-for="(each, index) in speedList" :key="index">
<div class="eachSimulationMenu" :class="{'active' :speed === each.value}" @click="speedChange(each.value)">{{ each.label }}</div> <div class="eachSimulationMenu" :class="{'active' :speed === each.value}" @click="speedChange(each.value)">{{ each.label }}</div>
@ -15,7 +24,7 @@
</div> </div>
</div> </div>
<div> <div>
<div class="simulationMenu" style="width: 70px;" :style="{background: nowMode === '正常操作' ? '#0fb20b' :'#efc007'}" @click="changeOperateMode">{{ nowMode }}</div> <div class="simulationMenu" style="width: 70px;" :style="{background: nowMode === '正常操作' ? '#0fb20b' :'#efc007',cursor: isDisabled ? 'not-allowed':'pointer'}" @click="changeOperateMode">{{ nowMode }}</div>
</div> </div>
</div> </div>
</div> </div>
@ -25,6 +34,7 @@ import { simulationPause, simulationStart, timesSpeedPlayback } from '@/api/rtSi
import { OperateMode } from '@/scripts/ConstDic'; import { OperateMode } from '@/scripts/ConstDic';
import { getSessionStorage } from '@/utils/auth'; import { getSessionStorage } from '@/utils/auth';
import { timestampFormat } from '@/utils/date'; import { timestampFormat } from '@/utils/date';
import { SimulationUserType } from '@/scripts/ConstDic';
export default { export default {
name:'SimulationControl', name:'SimulationControl',
data() { data() {
@ -76,6 +86,9 @@ export default {
} else { } else {
return '正常操作'; return '正常操作';
} }
},
isDisabled() {
return this.$store.state.training.simulationUserType !== SimulationUserType.TEACHER;
} }
}, },
watch: { watch: {
@ -96,21 +109,25 @@ export default {
this.dateString = timestampFormat('YYYYMMDD', date); this.dateString = timestampFormat('YYYYMMDD', date);
}, },
changeOperateMode() { changeOperateMode() {
let val = ''; if (this.$store.state.training.simulationUserType === SimulationUserType.TEACHER) {
if (this.nowMode === '正常操作') { let val = '';
val = OperateMode.FAULT; if (this.nowMode === '正常操作') {
} else { val = OperateMode.FAULT;
val = OperateMode.NORMAL; } else {
val = OperateMode.NORMAL;
}
this.$store.dispatch('training/changeOperateMode', { mode: val });
} }
this.$store.dispatch('training/changeOperateMode', { mode: val });
}, },
showMenuModeList() { showMenuModeList() {
event.stopPropagation(); event.stopPropagation();
this.isShowModeMenuList = !this.isShowModeMenuList; this.isShowModeMenuList = !this.isShowModeMenuList;
}, },
showMenuSpeedList(event) { showMenuSpeedList(event) {
event.stopPropagation(); if (this.$store.state.training.simulationUserType === SimulationUserType.TEACHER) {
this.isShowSpeedMenuList = !this.isShowSpeedMenuList; event.stopPropagation();
this.isShowSpeedMenuList = !this.isShowSpeedMenuList;
}
}, },
startOrPause() { startOrPause() {
this.pauseLoading = true; this.pauseLoading = true;

File diff suppressed because it is too large Load Diff

View File

@ -16,8 +16,6 @@
<select-exam ref="selectExam" @examStart="examStart" /> <select-exam ref="selectExam" @examStart="examStart" />
<exam-panel ref="examPanel" /> <exam-panel ref="examPanel" />
<device-manage ref="deviceManage" /> <device-manage ref="deviceManage" />
<diagram-load ref="diagramLoad" :group="group" />
<diagram-preview ref="diagramPreview" />
<qr-code ref="qrCode" /> <qr-code ref="qrCode" />
</div> </div>
</template> </template>
@ -35,8 +33,7 @@ import ExamPanel from '../exam/examPanel';
import getErrorTip from '@/scripts/errorTip'; import getErrorTip from '@/scripts/errorTip';
import DeviceManage from './deviceManage'; import DeviceManage from './deviceManage';
import QrCode from '@/components/QrCode'; import QrCode from '@/components/QrCode';
import DiagramLoad from './diagramLoad'; import { SimulationUserType } from '@/scripts/ConstDic';
import DiagramPreview from './diagramPreview';
export default { export default {
name: 'SimulationMenu', name: 'SimulationMenu',
@ -49,9 +46,7 @@ export default {
Jl3dDevice, Jl3dDevice,
MemberManage, MemberManage,
DeviceManage, DeviceManage,
QrCode, QrCode
DiagramPreview,
DiagramLoad
}, },
data() { data() {
return { return {
@ -62,16 +57,14 @@ export default {
deviceShow: true, deviceShow: true,
allMenuList: [ allMenuList: [
{ label: '设备视图', name: 'jlmap3dmodel', click: this.jlmap3dmodel, isDisabled: () => { return false; }, isShow: () => { return true; } }, { label: '设备视图', name: 'jlmap3dmodel', click: this.jlmap3dmodel, isDisabled: () => { return false; }, isShow: () => { return true; } },
{ label: '设备管理', name: 'deviceManage', click: this.deviceManage, isDisabled: () => { return false; }, isShow: () => { return this.$store.state.training.domConfig.hasDeviceManage; } }, { label: '设备管理', name: 'deviceManage', click: this.deviceManage, isDisabled: () => { return false; }, isShow: () => { return this.$store.state.training.domConfig.hasDeviceManage && this.$store.state.training.simulationUserType === SimulationUserType.TEACHER; } },
{ label: '联系方式', name: 'contectUs', click: this.contectUs, isDisabled: () => { return false; }, isShow: () => { return true; } }, { label: '联系方式', name: 'contectUs', click: this.contectUs, isDisabled: () => { return false; }, isShow: () => { return true; } },
{ label: '生成二维码', name: 'generateQrCode', click: this.generateQrCode, isDisabled: () => { return false; }, isShow: () => { return this.$store.state.training.domConfig.isJoint; } }, { label: '生成二维码', name: 'generateQrCode', click: this.generateQrCode, isDisabled: () => { return false; }, isShow: () => { return this.$store.state.training.domConfig.isJoint && this.$store.state.training.simulationUserType === SimulationUserType.TEACHER; } },
{ label: '切换客流数据', name: 'changeFlowData', click: this.changeFlowData, isDisabled: () => { return false; }, isShow: () => { return this.$store.state.training.domConfig.hasLpf; } }, { label: '切换客流数据', name: 'changeFlowData', click: this.changeFlowData, isDisabled: () => { return false; }, isShow: () => { return this.$store.state.training.domConfig.hasLpf && this.$store.state.training.simulationUserType === SimulationUserType.TEACHER; } },
{ label: '运行图加载', name: 'diagramLoad', click: this.diagramLoad, isDisabled: () => { return false; }, isShow: ()=>{ return this.$route.query.simType === 'METRO'; } }, { label: '成员管理', name: 'memberManage', click: this.memberManage, isDisabled: () => { return false; }, isShow: () => { return !this.$store.state.training.domConfig.hasMemberManage && this.$store.state.training.simulationUserType === SimulationUserType.TEACHER; } },
{ label: '运行图预览', name: 'diagramPreview', click: this.diagramPreview, isDisabled: () => { return false; }, isShow: ()=>{ return this.$route.query.simType === 'METRO'; } }, { label: '考试', name: 'exam', click: this.goExam, isDisabled: () => { return false; }, isShow: () => { return this.$store.state.training.domConfig.hasExam && this.$store.state.training.simulationUserType === SimulationUserType.TEACHER; } },
{ label: '成员管理', name: 'memberManage', click: this.memberManage, isDisabled: () => { return false; }, isShow: () => { return !this.$store.state.training.domConfig.hasMemberManage; } }, { label: '按计划行车', name: 'drivingPlan', click: this.drivingPlan, isDisabled: () => { return this.$store.state.trainingNew.trainingSwitch; }, isShow: () => { return this.$store.state.training.simulationUserType === SimulationUserType.TEACHER; } },
{ label: '考试', name: 'exam', click: this.goExam, isDisabled: () => { return false; }, isShow: () => { return this.$store.state.training.domConfig.hasExam; } }, { label: '初始化', name: 'initialize', click: this.initializeSim, isDisabled: () => { return this.$store.state.trainingNew.trainingSwitch; }, isShow: () => { return this.$store.state.training.simulationUserType === SimulationUserType.TEACHER; } },
{ label: '按计划行车', name: 'drivingPlan', click: this.drivingPlan, isDisabled: () => { return this.$store.state.trainingNew.trainingSwitch; }, isShow: () => { return true; } },
{ label: '初始化', name: 'initialize', click: this.initializeSim, isDisabled: () => { return this.$store.state.trainingNew.trainingSwitch; }, isShow: () => { return true; } },
{ label: '退出', name: 'quit', click: this.exitSim, isDisabled: () => { return false; }, isShow: () => { return true; } } { label: '退出', name: 'quit', click: this.exitSim, isDisabled: () => { return false; }, isShow: () => { return true; } }
] ]
}; };
@ -90,6 +83,22 @@ export default {
return this.$route.query.mapId; return this.$route.query.mapId;
} }
}, },
watch: {
'$store.state.training.simulationUserType': function (val) {
this.handleMenuShow();
},
'$store.state.socket.simulationOver':function(val) {
this.back();
},
'$store.state.socket.simulationRoleList':function(val) {
console.log('**************', val);
(val || []).forEach(item => {
if (item.body.messageType === 'KICK_OUT' && item.body.userId == this.$store.state.user.id) {
this.back();
}
});
}
},
mounted() { mounted() {
window.addEventListener('click', this.close, false); window.addEventListener('click', this.close, false);
}, },
@ -101,14 +110,6 @@ export default {
this.$store.dispatch('trainingNew/changeTeachMode', ''); this.$store.dispatch('trainingNew/changeTeachMode', '');
}, },
methods: { methods: {
diagramLoad() {
this.hideMenuList();
this.$refs.diagramLoad.doShow();
},
diagramPreview() {
this.hideMenuList();
this.$refs.diagramPreview.doShow();
},
generateQrCode() { generateQrCode() {
this.hideMenuList(); this.hideMenuList();
getSimulationQrcode(this.$route.query.group).then(resp => { getSimulationQrcode(this.$route.query.group).then(resp => {
@ -178,17 +179,20 @@ export default {
cancelButtonText: '取 消', cancelButtonText: '取 消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
if (this.projectDevice && this.$route.query.type === 'IM') { this.back();
clearSimulation(this.group).then(() => {
this.logout();
});
} else if (this.projectDevice) {
this.logout();
} else {
this.$router.go(-1);
}
}); });
}, },
back() {
if (this.projectDevice && this.$route.query.type === 'IM') {
clearSimulation(this.group).then(() => {
this.logout();
});
} else if (this.projectDevice) {
this.logout();
} else {
this.$router.go(-1);
}
},
initializeSim() { initializeSim() {
initSimulation(this.group).then(() => { initSimulation(this.group).then(() => {
this.$store.dispatch('training/setMapDefaultState').then(() => { this.$store.dispatch('training/setMapDefaultState').then(() => {

View File

@ -31,7 +31,7 @@ export default {
} }
}, },
watch: { watch: {
'$store.state.map.initJlmapLoadedCount': function (val) { '$store.state.map.initJlmapLoadedCount': function () {
this.handleBigScreenData(); this.handleBigScreenData();
}, },
mapDevice() { mapDevice() {

View File

@ -1,6 +1,6 @@
<template> <template>
<div v-show="show" class="run-plan-dialog" :style="{width: width + 'px',height:height + 'px'}"> <div class="run-plan-dialog" :style="{width: width + 'px',height:height + 'px'}">
<plan-schedule ref="planSchedule" :group="group" @back="doClose" /> <plan-schedule ref="planSchedule" :group="group" />
</div> </div>
</template> </template>
@ -22,8 +22,7 @@ export default {
}, },
data() { data() {
return { return {
menus: null, menus: null
show: false
}; };
}, },
computed: { computed: {
@ -53,19 +52,18 @@ export default {
beforeDestroy() { beforeDestroy() {
this.$store.dispatch('runPlan/setPlanData', []); this.$store.dispatch('runPlan/setPlanData', []);
}, },
methods: { mounted() {
doShow() { this.$nextTick(() => {
this.show = true;
this.$refs.planSchedule.setPosition(); this.$refs.planSchedule.setPosition();
}, this.$refs.planSchedule.loadChartPage();
doClose() { });
this.show = false; },
} methods: {
} }
}; };
</script> </script>
<style rel="stylesheet/scss" lang="scss" scoped> <style rel="stylesheet/scss" lang="scss" scoped>
@import "src/styles/mixin.scss"; @import "src/styles/mixin";
.run-plan-dialog { .run-plan-dialog {
-webkit-user-select: none; -webkit-user-select: none;

View File

@ -1,37 +1,23 @@
<template> <template>
<el-dialog <div id="PlanSchedule" :style="{height: height+'px'}">
v-dialogLoading="dialogLoading" <div class="left">
:title="title" <div :id="runPlanId" />
:width="maxWidth + 'px'"
top="0"
:style="{left:$store.state.app.width> 1920? '50%': '0'}"
:visible.sync="dialogShow"
:before-close="doClose"
:close-on-click-modal="false"
:modal="false"
>
<div id="PlanSchedule" :style="{top: top+'px', height: height+'px'}">
<div class="left">
<div :id="runPlanId" />
</div>
<div class="right">
<data-table
ref="serviceTable1"
:height="height/2"
:config="serviceNumberConfig"
:style="{top: top-height/2+'px'}"
@touch="scheduleTouch"
/>
<data-table
ref="tripTable1"
:height="height/2"
:config="tripNumberConfig"
:style="{top: top-height/2+'px'}"
@touch="trainNumTouch"
/>
</div>
</div> </div>
</el-dialog> <div class="right">
<data-table
ref="serviceTable1"
:height="height/2 - 20"
:config="serviceNumberConfig"
@touch="scheduleTouch"
/>
<data-table
ref="tripTable1"
:height="height/2 - 20"
:config="tripNumberConfig"
@touch="trainNumTouch"
/>
</div>
</div>
</template> </template>
<script> <script>
@ -41,7 +27,7 @@ import DataTable from '@/views/planSchedule/menusPlan/components/dataTable';
import echarts from 'echarts'; import echarts from 'echarts';
import {toTimeStamp, formatDuring} from '@/utils/date'; import {toTimeStamp, formatDuring} from '@/utils/date';
import { deepAssign } from '@/utils/index'; import { deepAssign } from '@/utils/index';
import { EventBus } from '@/scripts/event-bus'; import { clearSubscribe, getTopic} from '@/utils/stomp';
let myChart = null; let myChart = null;
export default { export default {
name: 'DiagramPreview', name: 'DiagramPreview',
@ -50,11 +36,9 @@ export default {
}, },
data() { data() {
return { return {
top: 0,
height: 0, height: 0,
inter:null, inter:null,
runPlanId: 'run-plan-view', runPlanId: 'run-plan-view',
// myChart: null,
PlanParser: {}, PlanParser: {},
serviceNumberConfig: { serviceNumberConfig: {
data: [], data: [],
@ -90,8 +74,6 @@ export default {
kmRangeMap: {}, kmRangeMap: {},
absoluteTime: 2 * 3600, absoluteTime: 2 * 3600,
indexKmRangeMap: {}, indexKmRangeMap: {},
dialogLoading: false,
dialogShow: false,
seriesMap: {}, seriesMap: {},
staticSeries: [], staticSeries: [],
runSeries: [], runSeries: [],
@ -108,9 +90,6 @@ export default {
}, },
maxHeight() { maxHeight() {
return this.$store.state.app.height > 1080 ? 1080 : this.$store.state.app.height; return this.$store.state.app.height > 1080 ? 1080 : this.$store.state.app.height;
},
title() {
return this.$t('display.runPlan.previewRunDiagram');
} }
}, },
watch: { watch: {
@ -124,9 +103,7 @@ export default {
try { try {
await this.loadChartPage(); await this.loadChartPage();
this.selectSeries = []; this.runSeries = []; this.runPlanData = {}; this.selectSeries = []; this.runSeries = []; this.runPlanData = {};
if (this.dialogShow) { await this.loadInitData();
await this.loadInitData();
}
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} finally { } finally {
@ -135,9 +112,7 @@ export default {
}, },
'$store.state.socket.simulationReset': function (val) { '$store.state.socket.simulationReset': function (val) {
this.selectSeries = []; this.runSeries = []; this.runPlanData = {}; this.selectSeries = []; this.runSeries = []; this.runPlanData = {};
if (this.dialogShow) { this.loadInitData();
this.loadInitData();
}
}, },
'$store.state.runPlan.planSizeCount': function () { '$store.state.runPlan.planSizeCount': function () {
this.reSize({ width: this.$store.state.runPlan.width, height: this.$store.state.runPlan.height }); this.reSize({ width: this.$store.state.runPlan.width, height: this.$store.state.runPlan.height });
@ -148,36 +123,19 @@ export default {
} }
} }
}, },
mounted() { async mounted() {
this.staticSeries = []; this.selectSeries = []; this.runSeries = []; this.runPlanData = {}; this.staticSeries = []; this.selectSeries = []; this.runSeries = []; this.runPlanData = {};
this.PlanParser = this.$theme.loadPlanParser(this.$route.query.lineCode); this.PlanParser = this.$theme.loadPlanParser(this.$route.query.lineCode);
// this.loadChartPage(); await this.setPosition();
EventBus.$on('clearRunSeries', () => { await this.loadChartPage();
this.runSeries = []; await this.loadInitData();
});
}, },
beforeDestroy() { beforeDestroy() {
this.$store.dispatch('runPlan/setSelected', null); this.$store.dispatch('runPlan/setSelected', null);
clearSubscribe(getTopic('LPF', this.group));
this.destroy(); this.destroy();
}, },
methods: { methods: {
doShow() {
try {
this.dialogLoading = true;
this.dialogShow = true;
this.setPosition();
this.loadInitData();
this.inter && clearInterval(this.inter);
} catch (e) {
console.error(e);
} finally {
this.dialogLoading = false;
}
},
async doClose() {
this.dialogShow = false;
this.inter && clearInterval(this.inter);
},
serviceNumberChange(row) { serviceNumberChange(row) {
if (row) { if (row) {
this.$store.dispatch('runPlan/setSelected', { serviceNumber: row.serviceNumber, tripNumber: null }); this.$store.dispatch('runPlan/setSelected', { serviceNumber: row.serviceNumber, tripNumber: null });
@ -206,19 +164,12 @@ export default {
}, },
async setPosition() { async setPosition() {
this.$nextTick(() => { this.$nextTick(() => {
const top = 54;
const width = this.maxWidth * 0.85; const width = this.maxWidth * 0.85;
let height = this.maxHeight; const height = this.maxHeight;
height = height - top;
this.$store.dispatch('runPlan/resize', { width, height }); this.$store.dispatch('runPlan/resize', { width, height });
if (this.top != top) {
this.top = top;
}
if (this.height != height) { if (this.height != height) {
this.height = height - top; this.height = height;
} }
}); });
}, },
@ -455,7 +406,7 @@ export default {
this.destroy(); this.destroy();
let startValue = 3600 + this.PlanParser.getTranslation(); let startValue = 3600 + this.PlanParser.getTranslation();
const offsetTime = 3600; const offsetTime = 3600;
const initTime = toTimeStamp(formatDuring(this.$store.state.training.initTime)); const initTime = toTimeStamp(formatDuring(this.$store.state.socket.simulationTimeSync));
startValue = initTime - this.PlanParser.getTranslation(); startValue = initTime - this.PlanParser.getTranslation();
option.dataZoom[0].startValue = option.dataZoom[1].startValue = startValue - offsetTime; option.dataZoom[0].startValue = option.dataZoom[1].startValue = startValue - offsetTime;
option.dataZoom[0].endValue = option.dataZoom[1].endValue = startValue + offsetTime; option.dataZoom[0].endValue = option.dataZoom[1].endValue = startValue + offsetTime;
@ -613,7 +564,7 @@ export default {
}; };
</script> </script>
<style scoped rel="stylesheet/scss" lang="scss"> <style scoped rel="stylesheet/scss" lang="scss">
@import "src/styles/mixin.scss"; @import "src/styles/mixin";
#PlanSchedule { #PlanSchedule {
z-index: 5; z-index: 5;

View File

@ -22,6 +22,8 @@
<emergency-dispatch-work v-else-if="picture === 'emergency'" ref="emergencyDispatchWork" /> <emergency-dispatch-work v-else-if="picture === 'emergency'" ref="emergencyDispatchWork" />
<register-book v-else-if="picture === 'registerBook'" ref="registerBook" /> <register-book v-else-if="picture === 'registerBook'" ref="registerBook" />
<train-ticket v-else-if="picture === 'trainTicket'" ref="trainTicket" /> <train-ticket v-else-if="picture === 'trainTicket'" ref="trainTicket" />
<diagram-load v-else-if="picture === 'diagramLoad'" ref="diagramLoad" :group="group" />
<diagram-preview v-else-if="picture === 'diagramPreview'" ref="diagramPreview" />
<terminal-menu <terminal-menu
v-if="menuShow" v-if="menuShow"
ref="terminalMenu" ref="terminalMenu"
@ -59,6 +61,8 @@ import ScheduleWork from './schedulWork';
import EmergencyDispatchWork from './emergencyDispatchWork'; import EmergencyDispatchWork from './emergencyDispatchWork';
import RegisterBook from './registerBook'; import RegisterBook from './registerBook';
import TrainTicket from './trainTicket/index'; import TrainTicket from './trainTicket/index';
import DiagramLoad from './diagramLoad';
import DiagramPreview from './diagramPreview';
export default { export default {
name: 'Index', name: 'Index',
@ -84,7 +88,9 @@ export default {
ScheduleWork, ScheduleWork,
EmergencyDispatchWork, EmergencyDispatchWork,
RegisterBook, RegisterBook,
TrainTicket TrainTicket,
DiagramLoad,
DiagramPreview
}, },
data() { data() {
return { return {
@ -191,6 +197,9 @@ export default {
case 'YJDDZH': case 'YJDDZH':
creatSubscribe(getTopic(type, this.group), header, defaultCallback); creatSubscribe(getTopic(type, this.group), header, defaultCallback);
break; break;
case 'RUNFACT':
creatSubscribe(getTopic(type, this.group), header, defaultCallback);
break;
} }
}, },
clearSubscribe() { clearSubscribe() {
@ -198,6 +207,7 @@ export default {
clearSubscribe(getTopic('ATS_STATUS', this.group)); clearSubscribe(getTopic('ATS_STATUS', this.group));
clearSubscribe(getTopic('STATE', this.group)); clearSubscribe(getTopic('STATE', this.group));
clearSubscribe(getTopic('CTC', this.group)); clearSubscribe(getTopic('CTC', this.group));
clearSubscribe(getTopic('LPF', this.group));
}, },
loadingChange() { loadingChange() {
this.loading = true; this.loading = true;
@ -215,6 +225,8 @@ export default {
this.$nextTick(() => { this.subscribe('LPF'); }); this.$nextTick(() => { this.subscribe('LPF'); });
} else if (val === 'emergency') { } else if (val === 'emergency') {
this.$nextTick(() => { this.subscribe('YJDDZH'); }); this.$nextTick(() => { this.subscribe('YJDDZH'); });
} else if (val === 'diagramPreview') {
this.$nextTick(() => { this.subscribe('RUNFACT'); });
} }
this.$nextTick(() => { this.loading = false; }); this.$nextTick(() => { this.loading = false; });
}, },

View File

@ -85,6 +85,18 @@ export default {
} }
], ],
'METRO': [ 'METRO': [
{
name: '运行图加载',
code: 'diagramLoad',
roleList: ['DISPATCHER'],
click: this.changePictureShow
},
{
name: '运行图预览',
code: 'diagramPreview',
roleList: ['DISPATCHER', 'STATION_SUPERVISOR', 'DRIVER'],
click: this.changePictureShow
},
{ {
name: '派班工作站', name: '派班工作站',
code: 'scheduleWork', code: 'scheduleWork',

View File

@ -60,6 +60,9 @@ export default {
this.$refs.schedule.setPosition(); this.$refs.schedule.setPosition();
}); });
}, },
loadChartPage() {
this.$refs.schedule.loadChartPage();
},
dispatchDialog(dialogObj) { dispatchDialog(dialogObj) {
this.$nextTick(() => { this.$nextTick(() => {
if (this.$refs[dialogObj.name]) { if (this.$refs[dialogObj.name]) {

View File

@ -3,7 +3,7 @@
<img class="logo" :src="logoImg"> <img class="logo" :src="logoImg">
<span> {{ mapName }} &ensp;</span> <span> {{ mapName }} &ensp;</span>
<span v-if="runPlanName">({{ runPlanName }})</span> <span v-if="runPlanName">({{ runPlanName }})</span>
<span class="system-close el-icon-close" @click="back" /> <!-- <span class="system-close el-icon-close" @click="back" />-->
</div> </div>
</template> </template>
@ -35,9 +35,9 @@ export default {
} }
}, },
methods: { methods: {
back() { // back() {
this.$emit('back'); // this.$emit('back');
} // }
} }
}; };
</script> </script>
@ -58,7 +58,7 @@ export default {
background: -moz-linear-gradient(#0055E8, #0099F8); background: -moz-linear-gradient(#0055E8, #0099F8);
background: linear-gradient(#0055E8, #0099F8); background: linear-gradient(#0055E8, #0099F8);
color: white; color: white;
font: bold; font-weight: bold;
font-size: 16px; font-size: 16px;
.logo { .logo {