This commit is contained in:
sunzhenyu 2021-10-28 18:04:32 +08:00
commit fe156c28bb
13 changed files with 505 additions and 34 deletions

View File

@ -250,8 +250,8 @@
<div v-else class="stationButton station_jumpTrain disabled">连续扣车</div> <div v-else class="stationButton station_jumpTrain disabled">连续扣车</div>
</div> </div>
<div class="station_buttonGroupR"> <div class="station_buttonGroupR">
<div v-if="allowCancle" :id="cancelTrainId" class="stationButton" @click="stationCancleTrain">取消设置</div> <div v-if="allowCancle" :id="cancelTrainId" class="stationButton" @click="stationCancleTrain">恢复原状</div>
<div v-else class="stationButton disabled">取消设置</div> <div v-else class="stationButton disabled">恢复原状</div>
<div v-if="allowJump" :id="setJumpStopId" class="stationButton station_jumpTrain" @click="stationJumpTrain">此站不停</div> <div v-if="allowJump" :id="setJumpStopId" class="stationButton station_jumpTrain" @click="stationJumpTrain">此站不停</div>
<div v-else class="stationButton station_jumpTrain disabled">此站不停</div> <div v-else class="stationButton station_jumpTrain disabled">此站不停</div>
</div> </div>

View File

@ -85,7 +85,7 @@ export default {
stepVOList: [ stepVOList: [
{ deviceType: 'bar', orderNum: 1, operateCode: '0024', tip: '鼠标左键点击顶部菜单栏【控制模式转换】' }, { deviceType: 'bar', orderNum: 1, operateCode: '0024', tip: '鼠标左键点击顶部菜单栏【控制模式转换】' },
{ deviceType: 'bar', orderNum: 2, operateCode: '2034', tip: '鼠标左键点击【强制站控】' }, { deviceType: 'bar', orderNum: 2, operateCode: '2034', tip: '鼠标左键点击【强制站控】' },
{ deviceType: 'bar', orderNum: 3, operateCode: '2035', tip: '鼠标左键输入默认密码【123456】后,点击【确定】按钮' }, { deviceType: 'bar', orderNum: 3, operateCode: '2035', tip: '鼠标左键输入默认密码【12】后,点击【确定】按钮' },
{ deviceType: '05', orderNum: 4, operateCode: '2032', tip: '鼠标左键选择所需要转换的控制区域【{1}】', val: '{2}' }, { deviceType: '05', orderNum: 4, operateCode: '2032', tip: '鼠标左键选择所需要转换的控制区域【{1}】', val: '{2}' },
{ deviceType: '05', orderNum: 5, operateCode: '203', tip: '鼠标左键点击【强制站控】', val: '{2}' }, { deviceType: '05', orderNum: 5, operateCode: '203', tip: '鼠标左键点击【强制站控】', val: '{2}' },
{ deviceType: '05', orderNum: 6, operateCode: '2033', tip: '鼠标左键点击【确认】按钮' }, { deviceType: '05', orderNum: 6, operateCode: '2033', tip: '鼠标左键点击【确认】按钮' },

View File

@ -0,0 +1,360 @@
<template>
<div v-dialogDrag>
<div style="height: 130px;width: 100%;" class="el-dialog">
<div class="el-dialog__header" />
<div class="haerbin-01__systerm nav el-dialog__body">
<el-row style="padding: 3px;">
<el-col :span="20">
<div style="width: calc(100% - 10px);border: 2px solid #DDD9CA;border-radius: 1px;height: 132px;">
<el-row style="padding: 4px;">
<div class="tip-content-box">
<div v-if="tipContent[0]">{{ `${tipContent[0].level}` }}</div>
<div v-if="tipContent[0]">{{ `${tipContent[0].time}` }}</div>
<div v-if="tipContent[0]">{{ `${tipContent[0].confirm ? '确认': '未确认'}` }}</div>
</div>
<div class="tip-content-box">
<div v-if="tipContent[1]">{{ `${tipContent[1].level}` }}</div>
<div v-if="tipContent[1]">{{ `${tipContent[1].time}` }}</div>
<div v-if="tipContent[1]">{{ `${tipContent[1].confirm ? '确认': '未确认'}` }}</div>
</div>
<div class="tip-content-box">
<div v-if="tipContent[2]">{{ `${tipContent[2].level}` }}</div>
<div v-if="tipContent[2]">{{ `${tipContent[2].time}` }}</div>
<div v-if="tipContent[2]">{{ `${tipContent[2].confirm ? '确认': '未确认'}` }}</div>
</div>
</el-row>
<div style="padding: 5px;height:20px;line-height: 20px;border-top: 2px solid #DDD9CA;display: flex;justify-content: space-between;">
<div>
<div class="div-simulate-button" style="width: 40px;" @click="handleDialogShow('rpsDialog')">背投</div>
<div class="div-simulate-button" style="width: 40px;" @click="handleDialogShow('carPack')">车场</div>
<div class="div-simulate-button" style="width: 40px;" @click="handleDialogShow('troDialog')">轨道</div>
<div class="div-simulate-button" style="width: 40px;">系统</div>
<div class="div-simulate-button" style="width: 40px;" @click="handleDialogShow('traDialog')">列车</div>
</div>
<div>
<div class="div-simulate-button" style="width: 40px;">联锁</div>
<div class="div-simulate-button" style="width: 40px;" @click="handleDialogShow('tmtDialog')">列监</div>
<div class="div-simulate-button" style="width: 40px;">运图</div>
<div class="div-simulate-button" style="width: 55px;" @click="handleDialogShow('ttlDialog')">时刻表</div>
<div class="div-simulate-button" style="width: 40px;">编表</div>
<div class="div-simulate-button" style="width: 40px;" @click="handleDialogShow('atrDialog')">调度</div>
<div class="div-simulate-button" style="width: 40px;">站控</div>
<div class="div-simulate-button" style="width: 40px;">计划</div>
</div>
<div>
<div class="div-simulate-button" style="width: 40px;">SDM</div>
</div>
<div>
<div class="div-simulate-button" style="width: 55px;">管理员</div>
<div class="div-simulate-button" style="width: 40px;">职权</div>
</div>
<div>
<div class="div-simulate-button" style="width: 40px;">拷屏</div>
<div class="div-simulate-button" style="width: 40px;">录放</div>
<div class="div-simulate-button" style="width: 40px;">布局</div>
</div>
</div>
</div>
</el-col>
<el-col :span="2">
<div style="width: calc(100% - 10px);border: 2px solid #DDD9CA;border-radius: 1px;">
<el-row style="margin-top: 20px;margin-bottom: 18px;">
<el-col :span="16">
<el-row class="button-row">
<div style="width: 25px;" class="div-simulate-button" :style="{background:isNoRecoverLevelA || isNoConfirmLevelA?'#F00':'#DDD' }" :class="{'headerBox' :isNoConfirmLevelA}" @click="showHimAlarm('A')">A</div>
<div style="width: 25px;" class="div-simulate-button" :style="{background:isNoRecoverLevelB || isNoConfirmLevelB?'#F00':'#DDD' }" :class="{'headerBox' :isNoConfirmLevelB}" @click="showHimAlarm('B')">B</div>
<div style="width: 25px;" class="div-simulate-button" :style="{background:isNoRecoverLevelC?'#F00':'#DDD' }" @click="showHimAlarm('C')">C</div>
</el-row>
<el-row class="button-row" style="margin-top: 20px;">
<div style="width: 40px;" class="div-simulate-button" @click="showDiary">日记</div>
<div style="width: 40px;" class="div-simulate-button" @click="showDiary">命令</div>
</el-row>
</el-col>
<el-col :span="8">
<div style="width: 40px;height: 60px;line-height: 60px;" class="div-simulate-button" @click="controlAudio(false)">静音</div>
</el-col>
</el-row>
<el-row class="button-row" style="margin: 10px 0;">
<div style="width: 40px;" class="div-simulate-button" @click="undeveloped">档案</div>
<div style="width: 40px;" class="div-simulate-button" @click="undeveloped">归档</div>
<div style="width: 40px;" class="div-simulate-button" @click="undeveloped">统计</div>
</el-row>
</div>
</el-col>
<el-col :span="2" style="border: 2px solid #DDD9CA;border-radius: 1px;">
<el-row style="height: 88px;">
<div style="font-size: 15px;color: #000;display: flex;justify-content: space-around;align-items: center;margin-top: 40px;">
<span>{{ dateString }}</span>
<span>{{ time }}</span>
</div>
</el-row>
<el-row class="button-row" style="margin: 10px 0;">
<div style="width: 40px;" class="div-simulate-button" @click="undeveloped">锁屏</div>
<div style="width: 40px;" class="div-simulate-button" @click="undeveloped">退出</div>
</el-row>
</el-col>
</el-row>
</div>
<alarm-table-hmi ref="alarmTableHmi" />
<log-detail ref="logDetail" />
<audio id="buzzer" controls loop="loop" style="width: 0;height: 0">
<source :src="buzzerAudio" type="audio/mpeg">
</audio>
</div>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import { timeFormat } from '@/utils/date';
import BuzzerAudio from '@/assets/buzzer.mp3';
import AlarmTableHmi from '@/jmapNew/theme/nanjing_02/menus/menuDialog/alarmTableHmi';
import LogDetail from '@/jmapNew/theme/nanjing_02/menus/menuDialog/logDetail';
import { prefixIntrger } from '@/utils/date';
export default {
name: 'BaSiDi',
components: {
AlarmTableHmi,
LogDetail
},
data() {
return {
dialogVisible: true,
tipContent: [],
buzzerAudio: BuzzerAudio,
sound: false,
noConfirmMapA: {},
noConfirmMapB: {},
confirmNoRecoverMapA: {},
confirmNoRecoverMapB: {},
confirmNoRecoverMapC: {},
noConfirmMapAString: '{}',
noConfirmMapBString: '{}',
confirmNoRecoverMapAString: '{}',
confirmNoRecoverMapBString: '{}',
confirmNoRecoverMapCString: '{}',
time: '00:00:00',
dateString: '00.00.0000'
};
},
computed: {
...mapGetters('training', [
'mode',
'started',
'steps',
'order'
]),
...mapGetters('map', [
'stationList',
'trainList'
]),
userId() {
return this.$store.state.user ? this.$store.state.user.id : '';
},
isNoConfirmLevelA() {
return this.noConfirmMapAString !== '{}';
},
isNoConfirmLevelB() {
return this.noConfirmMapBString !== '{}';
},
isNoRecoverLevelA() {
return this.confirmNoRecoverMapAString !== '{}';
},
isNoRecoverLevelB() {
return this.confirmNoRecoverMapBString !== '{}';
},
isNoRecoverLevelC() {
return this.confirmNoRecoverMapCString !== '{}';
}
},
watch: {
'$store.state.training.initTime': function (initTime) {
const date = new Date(initTime);
this.initDate(date);
},
'$store.state.socket.simulationTimeSync': function (time) { // 仿
this.$store.dispatch('training/setInitTime', +new Date(`${new Date().toLocaleDateString()} ${timeFormat(time)}`));
},
'$store.state.socket.simulationAlarmInfo': function(val) {
(val || []).forEach(item => {
if (!item.confirmed) {
this.tipContent.push(item);
this.handleAlarm(item);
if (this.tipContent.length > 3) {
this.tipContent.shift();
}
if (item.level === 'A') {
this.noConfirmMapA[item.code] = item;
this.noConfirmMapAString = JSON.stringify(this.noConfirmMapA);
} else if (item.level === 'B') {
this.noConfirmMapB[item.code] = item;
this.noConfirmMapBString = JSON.stringify(this.noConfirmMapB);
}
} else if (!item.recovered) {
if (item.level === 'A') {
delete this.noConfirmMapA[item.code];
this.confirmNoRecoverMapA[item.code] = item;
this.noConfirmMapAString = JSON.stringify(this.noConfirmMapA);
this.confirmNoRecoverMapAString = JSON.stringify(this.confirmNoRecoverMapA);
} else if (item.level === 'B') {
delete this.noConfirmMapB[item.code];
this.confirmNoRecoverMapB[item.code] = item;
this.noConfirmMapBString = JSON.stringify(this.noConfirmMapB);
this.confirmNoRecoverMapBString = JSON.stringify(this.confirmNoRecoverMapB);
} else if (item.level === 'C') {
this.confirmNoRecoverMapC[item.code] = item;
this.confirmNoRecoverMapCString = JSON.stringify(this.confirmNoRecoverMapC);
}
} else {
if (item.level === 'A') {
delete this.noConfirmMapA[item.code];
delete this.confirmNoRecoverMapA[item.code];
this.noConfirmMapAString = JSON.stringify(this.noConfirmMapA);
this.confirmNoRecoverMapAString = JSON.stringify(this.confirmNoRecoverMapA);
} else if (item.level === 'B') {
delete this.noConfirmMapB[item.code];
delete this.confirmNoRecoverMapB[item.code];
this.noConfirmMapBString = JSON.stringify(this.noConfirmMapB);
this.confirmNoRecoverMapBString = JSON.stringify(this.confirmNoRecoverMapB);
} else if (item.level === 'C') {
delete this.confirmNoRecoverMapC[item.code];
this.confirmNoRecoverMapCString = JSON.stringify(this.confirmNoRecoverMapC);
}
}
});
}
},
methods: {
undeveloped() {
this.doClose();
this.$alert(this.$t('menu.menuBar.implemented'), this.$t('global.tips'), {
confirmButtonText: this.$t('global.confirm'),
callback: action => {
}
});
},
showHimAlarm(level) {
this.$refs.alarmTableHmi.doShow(level);
},
showDiary() {
this.$refs.logDetail.doShow();
},
controlAudio(val) {
const audio = document.getElementById('buzzer');
this.sound = val;
if (audio !== null) {
if (val) {
audio.play();
} else if (val === false) {
audio.pause();
}
}
},
handleDialogShow(type) {
this.$emit('handleDialogShow', type);
},
selectBeginTime() {
this.$emit('selectBeginTime');
},
end() {
this.$emit('end');
},
back() {
this.$emit('back');
},
initDate(date) {
this.time = `${prefixIntrger(date.getHours(), 2)}:${prefixIntrger(date.getMinutes(), 2)}:${prefixIntrger(date.getSeconds(), 2)}`;
const years = date.getFullYear() + '';
let months = date.getMonth() + 1 + '';
let dates = date.getDate() + '';
if (months.length < 2) { months = '0' + months; }
if (dates.length < 2) { dates = '0' + dates; }
this.dateString = dates + '.' + months + '.' + years;
}
}
};
</script>
<style scoped rel="stylesheet/scss" lang="scss">
@import "src/styles/mixin.scss";
$width: 30px;
$height: 90px;
$menuPadding: 10px;
$menuItemHeight: 30px;
$menuItemWidth: 190px;
$menuItemPadding: 5px;
.nav {
display: block;
cursor: pointer;
color: #0000;
background: -webkit-linear-gradient(#FDFDFE, #DEE3F3);
background: -o-linear-gradient(#FDFDFE, #DEE3F3);
background: -moz-linear-gradient(#FDFDFE, #DEE3F3);
background: linear-gradient(#FDFDFE, #DEE3F3);
border: 1px solid #B6BCCC !important;
border-bottom: 2px solid #B6BCCC !important;
list-style: none;
}
.div-simulate-button{
height: 20px;
line-height: 20px;
display: inline-block;
font-size: 14px;
color: #303030;
border: 1px solid #44556D;
background: #DDD;
text-align: center;
border-radius: 1px;
width: 80px;
}
.tip-content-box{
height: 30px;
width: 100%;
line-height: 30px;
background: #001528;
color: #C20F29;
font-size: 14px;
display: flex;
justify-content: space-around;
}
.button-row{
height: 20px;
line-height: 20px;
display: flex;
justify-content:space-between;
}
@keyframes fade {
from {
opacity: 1.0;
}
50% {
opacity: 0.4;
}
to {
opacity: 1.0;
}
}
@-webkit-keyframes fade {
from {
opacity: 1.0;
}
50% {
opacity: 0.4;
}
to {
opacity: 1.0;
}
}
.headerBox {
background: #f00;
animation: fade 600ms infinite;
-webkit-animation: fade 600ms infinite;
}
/deep/.el-dialog__body{
padding: 0;
}
</style>

View File

@ -1,14 +1,6 @@
<template> <template>
<div class="main" :style="{width: '100%',height:'100%',position:'absolute',overflow:'hidden'}" style="background: #000;"> <div class="main" :style="{width: '100%',height:'100%',position:'absolute',overflow:'hidden'}" style="background: #000;">
<ba-si-di <ba-si-di ref="baSiDi" @handleDialogShow="handleDialogShow" />
ref="baSiDi"
:is-run-plan="isRunPlan"
:data-error="dataError"
@handleDialogShow="handleDialogShow"
@end="end"
@back="back"
@selectBeginTime="selectBeginTime"
/>
<rps-dialog ref="rpsDialog" :is-run-plan="isRunPlan" :train-list="trainList" /> <rps-dialog ref="rpsDialog" :is-run-plan="isRunPlan" :train-list="trainList" />
<tro-dialog ref="troDialog" :is-run-plan="isRunPlan" :train-list="trainList" :station-list="stationList" /> <tro-dialog ref="troDialog" :is-run-plan="isRunPlan" :train-list="trainList" :station-list="stationList" />
<car-pack ref="carPack" /> <car-pack ref="carPack" />
@ -19,6 +11,15 @@
<atr-dialog ref="atrDialog" /> <atr-dialog ref="atrDialog" />
<train-trunk-detail ref="trainTrunkDetail" @openTra="openTra" /> <train-trunk-detail ref="trainTrunkDetail" @openTra="openTra" />
<set-time ref="setTime" @ConfirmSelectBeginTime="start" /> <set-time ref="setTime" @ConfirmSelectBeginTime="start" />
<div class="display-draft">
<el-button-group class="button-group-box">
<template v-if="!dataError">
<el-button type="success" :disabled="isRunPlan" size="small" @click="selectBeginTime">{{ $t('display.demon.drivingByPlan') }}</el-button>
<el-button type="danger" size="small" @click="end">{{ $t('display.demon.initialize') }}</el-button>
</template>
<el-button type="primary" size="small" @click="back">{{ $t('display.demon.back') }}</el-button>
</el-button-group>
</div>
</div> </div>
</template> </template>
<script> <script>
@ -34,7 +35,7 @@ import { loadMapDataById } from '@/utils/loaddata';
import { EventBus } from '@/scripts/event-bus'; import { EventBus } from '@/scripts/event-bus';
import { getSimulationMemberList, getAllSimulationUser } from '@/api/simulation'; import { getSimulationMemberList, getAllSimulationUser } from '@/api/simulation';
import { getMemberListCommon, getUserListCommon } from '@/api/rtSimulation'; import { getMemberListCommon, getUserListCommon } from '@/api/rtSimulation';
import BaSiDi from './baSiDi'; import BaSiDi from './baSiDiNew';
import RpsDialog from './rps'; import RpsDialog from './rps';
import TroDialog from './tro'; import TroDialog from './tro';
import CarPack from './carPack'; import CarPack from './carPack';
@ -408,6 +409,16 @@ export default {
} }
}; };
</script> </script>
<style scoped rel="stylesheet/scss" lang="scss">
.display-draft {
position: fixed;
right: 10px;
bottom: 15px;
.button-group-box{
float: right;
}
}
</style>
<style> <style>
.nanjing-02__systerm .el-dialog { .nanjing-02__systerm .el-dialog {
background: #d8d8d8; background: #d8d8d8;
@ -469,5 +480,4 @@ export default {
border: 1px solid #B1B1B1; border: 1px solid #B1B1B1;
color: #ABABAB; color: #ABABAB;
} }
</style> </style>

View File

@ -145,7 +145,7 @@
</div> </div>
<div v-else-if="operationType === 'update'" style="display: flex;justify-content: flex-start;"> <div v-else-if="operationType === 'update'" style="display: flex;justify-content: flex-start;">
<div> <div>
<el-table :data="tableData" border style="width: 280px;margin-top: 20px;" height="200"> <el-table :data="tableData" border style="width: 280px;margin-top: 20px;" height="200" @current-change="handleCurrentChange">
<el-table-column prop="date" label="方向" width="60" /> <el-table-column prop="date" label="方向" width="60" />
<el-table-column label="列车号" width="157"> <el-table-column label="列车号" width="157">
<template slot-scope="scope"> <template slot-scope="scope">
@ -222,7 +222,7 @@
</div> </div>
<div v-else-if="operationType === 'move'" style="display: flex;justify-content: flex-start;"> <div v-else-if="operationType === 'move'" style="display: flex;justify-content: flex-start;">
<div> <div>
<el-table :data="tableData" border style="width: 280px;margin-top: 20px;" height="200"> <el-table :data="tableData" border style="width: 280px;margin-top: 20px;" height="200" @current-change="handleCurrentChange">
<el-table-column prop="date" label="方向" width="60" /> <el-table-column prop="date" label="方向" width="60" />
<el-table-column prop="name" label="列车号" width="157"> <el-table-column prop="name" label="列车号" width="157">
<template slot-scope="scope"> <template slot-scope="scope">
@ -361,14 +361,19 @@ export default {
this.$store.dispatch('training/emitTipFresh'); this.$store.dispatch('training/emitTipFresh');
}); });
}, },
handleCurrentChange(val) {
const train = this.$store.getters['map/getDeviceByCode'](val.code);
this.selected = train;
this.nowTrainCode = train.destinationCode + (train.serviceNumber.substr(1)) + (train.tripNumber.substr(train.tripNumber.length - 2));
this.nowSectionCode = train.sectionCode;
this.groupNumber1 = train.code;
this.direction = train.right ? 'right' : 'left';
},
doClose() { doClose() {
this.loading = false; this.loading = false;
this.dialogShow = false; this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh'); this.$store.dispatch('training/emitTipFresh');
}, },
handleSelect(tab) {
this.activeIndex = tab;
},
trainFind() { trainFind() {
// this.$store.state.map.activeTrainList // this.$store.state.map.activeTrainList
this.tableData = []; this.tableData = [];
@ -396,6 +401,14 @@ export default {
if (type === 'create') { if (type === 'create') {
this.changeShowMode(); this.changeShowMode();
} }
if (type === 'create' || type === 'update' || type === 'move' || type === 'delete') {
this.$store.state.map.activeTrainList.forEach(item => {
const train = this.$store.getters['map/getDeviceByCode'](item);
this.tableData.push(train);
});
} else if (type === 'show') {
this.trainFind();
}
this.operationType = type; this.operationType = type;
}, },
trainCommit() { trainCommit() {

View File

@ -42,7 +42,7 @@ export default {
}, },
data() { data() {
return { return {
dialogShow: true, dialogShow: false,
mapData: null, mapData: null,
deviceCode: '', deviceCode: '',
selfJmap: null, selfJmap: null,

View File

@ -122,6 +122,7 @@ export default {
this.$emit('goTroDialog'); this.$emit('goTroDialog');
}, },
changeStation(value) { changeStation(value) {
this.deviceCode = this.deviceCode || this.stationList[0].code;
const device = this.$store.getters['map/getDeviceByCode'](this.deviceCode); const device = this.$store.getters['map/getDeviceByCode'](this.deviceCode);
const stationSn = device.sn + value; const stationSn = device.sn + value;
const station = this.stationList.find((item) => { const station = this.stationList.find((item) => {

View File

@ -207,6 +207,7 @@ export default {
this.$store.dispatch('scriptRecord/updateSimulationPause', resp.data.pause); // this.$store.dispatch('scriptRecord/updateSimulationPause', resp.data.pause); //
this.$store.dispatch('training/setInitTime', +new Date(`${new Date().toLocaleDateString()} ${timeFormat(resp.data.systemTime)}`)); this.$store.dispatch('training/setInitTime', +new Date(`${new Date().toLocaleDateString()} ${timeFormat(resp.data.systemTime)}`));
// this.$store.dispatch('training/countTime'); // this.$store.dispatch('training/countTime');
this.$store.dispatch('training/setPrdType', resp.data.prodType);
this.$store.dispatch('runPlan/setRunPlanInfo', resp.data.runPlan); this.$store.dispatch('runPlan/setRunPlanInfo', resp.data.runPlan);
this.planRunning = resp.data.planRunning; this.planRunning = resp.data.planRunning;
if (resp.data.planRunning) { if (resp.data.planRunning) {

View File

@ -102,9 +102,6 @@ export default {
isShowLeftSlider() { isShowLeftSlider() {
return this.$route.query.lessonId != '0' && !this.isOther; return this.$route.query.lessonId != '0' && !this.isOther;
}, },
prdType() {
return this.$route.query.prdType;
},
project() { project() {
return getSessionStorage('project'); return getSessionStorage('project');
}, },
@ -127,6 +124,18 @@ export default {
'$store.state.training.operateErrMsg': function (val) { '$store.state.training.operateErrMsg': function (val) {
this.tipInfo({ color: val.color, message: val.errMsg }); this.tipInfo({ color: val.color, message: val.errMsg });
}, },
'$store.state.training.simulationUserList': function(val) {
const userInfo = this.$store.state.training.simulationUserList.find(user => user.userId == this.$store.state.user.id );
if (userInfo.type === 'STATION_SUPERVISOR') {
this.$store.dispatch('map/setShowCentralizedStationCode', userInfo.deviceCode);
const mapDevice = this.$store.state.map.mapDevice;
const list = [];
for (const key in mapDevice) {
list.push(mapDevice[key]);
}
this.$jlmap.updateShowStation(list, userInfo.deviceCode);
}
},
async $route() { async $route() {
loadTrainingInSimulation(this.group, this.$route.query.trainingId).then(resp => { loadTrainingInSimulation(this.group, this.$route.query.trainingId).then(resp => {
this.setTrainingData(resp); this.setTrainingData(resp);

View File

@ -244,7 +244,7 @@ export default {
const showMode = { '01': '03', '02': '02'}[prdType] || ''; const showMode = { '01': '03', '02': '02'}[prdType] || '';
Vue.prototype.$theme = new Theme(); Vue.prototype.$theme = new Theme();
Vue.prototype.$jlmap = new Jlmap({ this.selfJlmap = Vue.prototype.$jlmap = new Jlmap({
dom: document.getElementById(this.canvasId), dom: document.getElementById(this.canvasId),
config: { config: {
renderer: 'canvas', renderer: 'canvas',

View File

@ -5,9 +5,20 @@
<ibp-plate v-show="ibpShow" ref="ibpPlate" @hideIbp="hideIbp" /> <ibp-plate v-show="ibpShow" ref="ibpPlate" @hideIbp="hideIbp" />
<template v-show="panelShow" :panelShow="panelShow"> <template v-show="panelShow" :panelShow="panelShow">
<transition name="el-zoom-in-bottom"> <transition name="el-zoom-in-bottom">
<map-system-draft ref="mapCanvas" @back="back" /> <map-system-draft v-show="!specialDispatch" ref="mapCanvas" @back="back" />
</transition> </transition>
<div v-if="lineCode === '14'" v-show="prdType=='02'">
<ba-si-di ref="baSiDi" @handleDialogShow="handleDialogShow" />
<rps-dialog ref="rpsDialog" :is-run-plan="isRunPlan" :train-list="trainList" />
<tro-dialog ref="troDialog" :is-run-plan="isRunPlan" :train-list="trainList" :station-list="stationList" />
<car-pack ref="carPack" />
<tro-detail ref="troDetail" :is-run-plan="isRunPlan" :train-list="trainList" :station-list="stationList" @goTroDialog="troClick" />
<tra-dialog ref="traDialog" @openTrainTrunkDetail="openTrainTrunkDetail" />
<ttl-dialog ref="ttlDialog" />
<tmt-dialog ref="tmtDialog" />
<atr-dialog ref="atrDialog" />
<train-trunk-detail ref="trainTrunkDetail" @openTra="openTra" />
</div>
<menu-demon-joint <menu-demon-joint
ref="demonMenu" ref="demonMenu"
:group="group" :group="group"
@ -45,7 +56,7 @@
/> />
<join-fault-choose ref="faultChoose" :group="group" :offset="offset" /> <join-fault-choose ref="faultChoose" :group="group" :offset="offset" />
<join-run-plan-Load ref="runPlanLoad" :group="group" /> <join-run-plan-Load ref="runPlanLoad" :group="group" />
<menu-system-time ref="menuSystemTime" :offset="offset" :group="group" /> <menu-system-time v-show="!specialDispatch" ref="menuSystemTime" :offset="offset" :group="group" />
<menu-train-list v-if="prdType=='02'" @setCenter="setCenter" /> <menu-train-list v-if="prdType=='02'" @setCenter="setCenter" />
<members-manage ref="membersManage" :is-admin="isAdmin" @addSimulationMember="addSimulationMember" /> <!-- 成员管理 --> <members-manage ref="membersManage" :is-admin="isAdmin" @addSimulationMember="addSimulationMember" /> <!-- 成员管理 -->
<add-member ref="addMember" :station-list="stationList" /> <add-member ref="addMember" :station-list="stationList" />
@ -84,6 +95,17 @@ import { Message } from 'element-ui';
import { getToken } from '@/utils/auth'; import { getToken } from '@/utils/auth';
import MembersManage from './memberManage/membersManage'; import MembersManage from './memberManage/membersManage';
import AddMember from './memberManage/addMember'; import AddMember from './memberManage/addMember';
import BaSiDi from '@/views/newMap/displayBaSiDi/baSiDiNew';
import RpsDialog from '@/views/newMap/displayBaSiDi/rps';
import TroDialog from '@/views/newMap/displayBaSiDi/tro';
import CarPack from '@/views/newMap/displayBaSiDi/carPack';
import TroDetail from '@/views/newMap/displayBaSiDi/troDetail';
import TraDialog from '@/views/newMap/displayBaSiDi/tra';
import TtlDialog from '@/views/newMap/displayBaSiDi/ttl';
import TmtDialog from '@/views/newMap/displayBaSiDi/tmt';
import AtrDialog from '@/views/newMap/displayBaSiDi/atr';
import TrainTrunkDetail from '@/views/newMap/displayBaSiDi/trainTrunkDetail';
import Vue from 'vue';
export default { export default {
name: 'JointTrainingDraft', name: 'JointTrainingDraft',
@ -100,7 +122,17 @@ export default {
IbpPlate, IbpPlate,
MembersManage, MembersManage,
AddMember, AddMember,
Jl3dDevice Jl3dDevice,
BaSiDi,
RpsDialog,
TroDialog,
CarPack,
TroDetail,
TraDialog,
TtlDialog,
TmtDialog,
AtrDialog,
TrainTrunkDetail
}, },
data() { data() {
return { return {
@ -127,7 +159,8 @@ export default {
isAdmin: false, isAdmin: false,
deviceif:false, deviceif:false,
deviceShow: true, deviceShow: true,
centralizedStationMap: {} centralizedStationMap: {},
selfJmap: null
}; };
}, },
computed: { computed: {
@ -139,7 +172,8 @@ export default {
'bigScreenConfig', 'bigScreenConfig',
'stationList', 'stationList',
'sectionList', 'sectionList',
'signalList' 'signalList',
'trainList'
]), ]),
width() { width() {
return this.$store.state.app.width; return this.$store.state.app.width;
@ -155,12 +189,25 @@ export default {
}, },
project() { project() {
return getSessionStorage('project'); return getSessionStorage('project');
},
specialDispatch() {
return this.lineCode === '14' && this.$store.state.training.prdType === '02';
},
isRunPlan() {
return this.$store.state.training.started;
} }
}, },
watch: { watch: {
'$store.state.config.menuBarLoadedCount': function (val) { // menuBar '$store.state.config.menuBarLoadedCount': function (val) { // menuBar
this.setPosition(); this.setPosition();
}, },
'$store.state.menuOperation.selectedCount':function(em) {
const device = this.$store.state.menuOperation.selected;
if (device && device._type === 'Station' && this.$store.state.menuOperation.subType === 'troButton') {
this.$refs.troDialog.doClose();
this.$refs.troDetail.doShow(device.code);
}
},
'$store.state.training.prdType': function (prdType) { '$store.state.training.prdType': function (prdType) {
this.setPosition(); this.setPosition();
if (prdType == '01') { if (prdType == '01') {
@ -230,6 +277,8 @@ export default {
async mounted() { async mounted() {
await this.setWindowSize(); await this.setWindowSize();
await this.initLoadData(); await this.initLoadData();
this.selfJmap = Vue.prototype.$jlmap;
console.log(this.selfJmap, Vue.prototype.$jlmap);
}, },
async beforeDestroy() { async beforeDestroy() {
await this.$store.dispatch('training/end', null); await this.$store.dispatch('training/end', null);
@ -363,10 +412,15 @@ export default {
this.endViewLoading(); this.endViewLoading();
} }
}, },
handleDialogShow(type) {
this.$refs[type].doShow();
},
// prdTyperole // prdTyperole
setSimulationPrdType(deviceCode) { setSimulationPrdType(deviceCode) {
// Dispatcher STATION_SUPERVISOR Audience Driver MAINTAINER // Dispatcher STATION_SUPERVISOR Audience Driver MAINTAINER
this.showStation = ''; this.showStation = '';
let tempData;
let dataZoom;
switch (this.userRole) { switch (this.userRole) {
case 'DISPATCHER': case 'DISPATCHER':
this.$store.dispatch('training/setPrdType', '02'); this.$store.dispatch('training/setPrdType', '02');
@ -379,11 +433,21 @@ export default {
this.jl3dmaintainershow = false; this.jl3dmaintainershow = false;
break; break;
case 'STATION_SUPERVISOR': case 'STATION_SUPERVISOR':
if (this.selfJmap) { Vue.prototype.$jlmap = this.selfJmap; }
this.$store.dispatch('training/setPrdType', '01'); this.$store.dispatch('training/setPrdType', '01');
this.$store.dispatch('training/setRoles', 'STATION_SUPERVISOR'); this.$store.dispatch('training/setRoles', 'STATION_SUPERVISOR');
this.$refs.menuSchema.chiShowStation = deviceCode; this.$refs.menuSchema.chiShowStation = deviceCode;
this.showStation = deviceCode; this.showStation = deviceCode;
// this.changePrdType('01'); // this.changePrdType('01');
if (this.lineCode === '14') {
const list = [];
const mapDevice = this.$store.state.map.mapDevice;
this.$jlmap.setMap(this.$store.state.map.map, this.$store.state.map.mapDevice, {routeData:this.$store.state.map.routeData, autoReentryData: this.$store.state.map.autoReentryData});
for (const key in mapDevice) {
list.push(mapDevice[key]);
}
this.$jlmap.updateShowMode(list, '02');
}
this.$jlmap.amendDevice([...this.sectionList, ...this.signalList]); this.$jlmap.amendDevice([...this.sectionList, ...this.signalList]);
this.mapViewLoadedOver && this.switchStationMode(deviceCode); this.mapViewLoadedOver && this.switchStationMode(deviceCode);
this.jl3dmaintainershow = false; this.jl3dmaintainershow = false;
@ -404,8 +468,8 @@ export default {
} }
this.$jlmap.updateShowStation(list, showStation); this.$jlmap.updateShowStation(list, showStation);
} }
const tempData = this.$store.state.map.map.displayList.find(item => { return item.stationCodeList.includes(deviceCode); }); tempData = this.$store.state.map.map.displayList.find(item => { return item.stationCodeList.includes(deviceCode); });
const dataZoom = { offsetX: tempData.offsetX, offsetY: tempData.offsetY, scaleRate: tempData.scaleRate }; dataZoom = { offsetX: tempData.offsetX, offsetY: tempData.offsetY, scaleRate: tempData.scaleRate };
this.$store.commit('map/setDataZoom', dataZoom); this.$store.commit('map/setDataZoom', dataZoom);
this.$jlmap.setDepot(dataZoom); this.$jlmap.setDepot(dataZoom);
this.jl3dmaintainershow = false; this.jl3dmaintainershow = false;
@ -629,6 +693,15 @@ export default {
addSimulationMember() { addSimulationMember() {
this.$refs.addMember.doShow(); this.$refs.addMember.doShow();
}, },
troClick() {
this.$refs.troDialog.doShow();
},
openTrainTrunkDetail(index) {
this.$refs.trainTrunkDetail.doShow(index);
},
openTra() {
this.$refs.traDialog.doShow();
},
checkRoleChange(data) { checkRoleChange(data) {
data.forEach(item => { data.forEach(item => {
if (item.messageType === 'KICK_OUT' && item.userId == this.userId) { if (item.messageType === 'KICK_OUT' && item.userId == this.userId) {
@ -651,9 +724,10 @@ export default {
<style scoped lang="scss" rel="stylesheep/scss"> <style scoped lang="scss" rel="stylesheep/scss">
.main { .main {
display: block; display: block;
width: 100%; width: 100% !important;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
position: relative; position: relative;
background: #000000;
} }
</style> </style>

View File

@ -132,6 +132,9 @@ export default {
const dataList = convertSheetToList(wb.Sheets[index], true); const dataList = convertSheetToList(wb.Sheets[index], true);
if (dataList.length) { if (dataList.length) {
const accountMap = {}; const accountMap = {};
if (!dataList[0][0].includes('学号') || !dataList[1][0].includes('姓名')) {
throw new Error('检测到Excel格式错误请使用模板格式导入');
}
for ( let i = 1; i <= dataList[0].length; i++) { for ( let i = 1; i <= dataList[0].length; i++) {
const studentId = dataList[0][i]; const studentId = dataList[0][i];
const name = dataList[1][i]; const name = dataList[1][i];