Merge branch 'test' of git.code.tencent.com:lian-cbtc/jl-client into yly

This commit is contained in:
Yuan 2022-07-07 18:14:11 +08:00
commit 9d086724fe
29 changed files with 1536 additions and 458 deletions

View File

@ -51,15 +51,15 @@ const deviceType = {
DirectionRod: 'DirectionRod', DirectionRod: 'DirectionRod',
Responder: 'Responder', Responder: 'Responder',
SignalButton: 'SignalButton', SignalButton: 'SignalButton',
PickArrow: 'PickArrow', PickArrow: 'PickArrow',
DepartArrow: 'DepartArrow', DepartArrow: 'DepartArrow',
Occlusion: 'Occlusion', Occlusion: 'Occlusion',
Accident: 'Accident', Accident: 'Accident',
Recovery: 'Recovery', Recovery: 'Recovery',
PickAssist: 'PickAssist', PickAssist: 'PickAssist',
DepartAssist: 'DepartAssist', DepartAssist: 'DepartAssist',
TotalAssist: 'TotalAssist', TotalAssist: 'TotalAssist',
AssistStatus: 'AssistStatus', AssistStatus: 'AssistStatus',
SectionOccupied: 'SectionOccupied' SectionOccupied: 'SectionOccupied'
}; };
export default deviceType; export default deviceType;

View File

@ -564,10 +564,25 @@ export const menuOperate = {
operation: OperationEvent.CTCCommand.autoTrigger.menu.operation, operation: OperationEvent.CTCCommand.autoTrigger.menu.operation,
cmdType: CMD.CTC.CTC_AUTO_TRIGGER cmdType: CMD.CTC.CTC_AUTO_TRIGGER
}, },
// 批量修改股道 // // 批量修改股道
batchModifyTrackSection:{ // batchModifyTrackSection:{
operation: OperationEvent.CTCCommand.batchModifyTrackSection.menu.operation, // operation: OperationEvent.CTCCommand.batchModifyTrackSection.menu.operation,
cmdType: CMD.CTC.CTC_BATCH_MODIFY_RUN_PLAN // cmdType: CMD.CTC.CTC_BATCH_MODIFY_RUN_PLAN
// },
// 修改股道
modifyTrackSection:{
operation: OperationEvent.CTCCommand.modifyTrackSection.menu.operation,
cmdType: CMD.CTC.CTC_MODIFY_SECTION
},
// 车站发送计划
stationSendRunplan:{
operation: OperationEvent.CTCCommand.stationSendRunplan.menu.operation,
cmdType: CMD.CTC.CTC_STATION_SEND_OUT_RUN_PLAN
},
// 车站取消红闪
stationCancleTwinkle:{
operation: OperationEvent.CTCCommand.stationCancleTwinkle.menu.operation,
cmdType: CMD.CTC.CTC_CANCEL_TWINKLE
}, },
// 移除行车日志 // 移除行车日志
deleteRunplan:{ deleteRunplan:{
@ -642,6 +657,16 @@ export const menuOperate = {
modifyDispatcherLogerRpSection:{ modifyDispatcherLogerRpSection:{
operation: OperationEvent.CTCCommand.modifyDispatcherLogerRpSection.menu.operation, operation: OperationEvent.CTCCommand.modifyDispatcherLogerRpSection.menu.operation,
cmdType: CMD.CTC.CTC_ZONE_SAVE_TRACK_SECTION cmdType: CMD.CTC.CTC_ZONE_SAVE_TRACK_SECTION
},
// 调度台行车计划修改时间
modifyDispatcherLogerRpPlanTime:{
operation: OperationEvent.CTCCommand.modifyDispatcherLogerRpSection.menu.operation,
cmdType: CMD.CTC.CTC_ZONE_SAVE_PLAN_TIME
},
// 调度台行车计划修改出入口
modifyDispatcherLogerRpDirection:{
operation: OperationEvent.CTCCommand.modifyDispatcherLogerRpSection.menu.operation,
cmdType: CMD.CTC.CTC_ZONE_SAVE_DIRECTION
} }
}, },
Rail: { Rail: {
@ -653,6 +678,10 @@ export const menuOperate = {
operation: OperationEvent.RailCommand.railQueryTicket.menu.operation, operation: OperationEvent.RailCommand.railQueryTicket.menu.operation,
cmdType: CMD.RAIL.CMD_RAIL_QUERY_TICKET cmdType: CMD.RAIL.CMD_RAIL_QUERY_TICKET
}, },
railGiveTicketTo: {
operation: OperationEvent.RailCommand.railGiveTicketTo.menu.operation,
cmdType: CMD.RAIL.CMD_RAIL_GIVE_TICKET_TO
},
railFillInRegister: { railFillInRegister: {
operation: OperationEvent.RailCommand.railFillInRegister.menu.operation, operation: OperationEvent.RailCommand.railFillInRegister.menu.operation,
cmdType: CMD.RAIL.CMD_RAIL_FILL_IN_REGISTER cmdType: CMD.RAIL.CMD_RAIL_FILL_IN_REGISTER

View File

@ -134,9 +134,9 @@ export default {
tableData1:[], tableData1:[],
tableData2:[], tableData2:[],
addModel:{ addModel:{
stationCode:'', stationCode:''
planParamList:[], // planParamList:[],
force:1 // force:1
} }
}; };
}, },
@ -148,15 +148,15 @@ export default {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : ''; return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
}, },
domIdConfirm() { domIdConfirm() {
return this.dialogShow ? OperationEvent.CTCCommand.batchModifyTrackSection.menu.domId : ''; return this.dialogShow ? OperationEvent.CTCCommand.stationSendRunplan.menu.domId : '';
}, },
title() { title() {
return '发送计划'; return '发送计划';
} }
}, },
methods:{ methods:{
doShow(tableData, activeDepartRunPlan, activeArriveRunPlan, filterSectionList) { doShow(tableData, filterSectionList) {
this.addModel.planParamList = []; // this.addModel.planParamList = [];
this.tableData1 = []; this.tableData1 = [];
tableData.forEach(element => { tableData.forEach(element => {
if (element.arriveRunPlan && element.arriveRunPlan.sectionCode) { if (element.arriveRunPlan && element.arriveRunPlan.sectionCode) {
@ -171,24 +171,24 @@ export default {
}); });
// filterSectionList // filterSectionList
this.addModel.stationCode = this.$store.state.training.roleDeviceCode; this.addModel.stationCode = this.$store.state.training.roleDeviceCode;
const activeDepartRunPlanList = Object.values(activeDepartRunPlan).filter(activeDepart=>{ return activeDepart.changeSectionCode && activeDepart.changeSectionCode != activeDepart.sectionCode; }); // const activeDepartRunPlanList = Object.values(activeDepartRunPlan).filter(activeDepart=>{ return activeDepart.changeSectionCode && activeDepart.changeSectionCode != activeDepart.sectionCode; });
if (activeDepartRunPlanList.length > 0) { // if (activeDepartRunPlanList.length > 0) {
activeDepartRunPlanList.forEach(depart=>{ // activeDepartRunPlanList.forEach(depart=>{
this.addModel.planParamList.push({ // this.addModel.planParamList.push({
runPlanCode:depart.code, // runPlanCode:depart.code,
departSectionCode:depart.changeSectionCode // departSectionCode:depart.changeSectionCode
}); // });
}); // });
} // }
const activeArriveRunPlanList = Object.values(activeArriveRunPlan).filter(activeArrive=>{ return activeArrive.changeSectionCode && activeArrive.changeSectionCode != activeArrive.sectionCode; }); // const activeArriveRunPlanList = Object.values(activeArriveRunPlan).filter(activeArrive=>{ return activeArrive.changeSectionCode && activeArrive.changeSectionCode != activeArrive.sectionCode; });
if (activeArriveRunPlanList.length > 0) { // if (activeArriveRunPlanList.length > 0) {
activeArriveRunPlanList.forEach(arrive=>{ // activeArriveRunPlanList.forEach(arrive=>{
this.addModel.planParamList.push({ // this.addModel.planParamList.push({
runPlanCode:arrive.code, // runPlanCode:arrive.code,
arriveSectionCode:arrive.changeSectionCode // arriveSectionCode:arrive.changeSectionCode
}); // });
}); // });
} // }
this.dialogShow = true; this.dialogShow = true;
this.$nextTick(function () { this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh'); this.$store.dispatch('training/emitTipFresh');
@ -200,21 +200,21 @@ export default {
this.$store.dispatch('training/emitTipFresh'); this.$store.dispatch('training/emitTipFresh');
}, },
commit() { commit() {
if (this.addModel.planParamList.length > 0) { // if (this.addModel.planParamList.length > 0) {
const params = this.addModel; const params = this.addModel;
this.loading = true; this.loading = true;
commitOperate(menuOperate.CTC.batchModifyTrackSection, params, 3).then(({valid})=>{ commitOperate(menuOperate.CTC.stationSendRunplan, params, 3).then(({valid})=>{
this.loading = false; this.loading = false;
if (valid) { if (valid) {
this.$emit('closeFlash'); // this.$emit('closeFlash');
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose(); this.doClose();
this.$emit('noticeInfo'); }
}); }).catch(() => {
} this.loading = false;
this.doClose();
this.$emit('noticeInfo');
});
// }
// * @param stationCode // * @param stationCode
// * @param runPlanCode // * @param runPlanCode

View File

@ -53,9 +53,12 @@
width="100" width="100"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.status==-1">删除</div> <div v-if="scope.row.arriveSectionCode">
<div v-else-if="scope.row.status==1">{{ sectionMap[scope.row.arriveSectionCode] }}</div> <div v-if="scope.row.status==-1">删除</div>
<div v-else-if="scope.row.arriveSectionCode">{{ sectionMap[scope.row.arriveSectionCode]+'['+sectionMap[scope.row.oldArriveSectionCode]+']' }}</div> <!-- scope.row.status==1||( -->
<div v-else-if="scope.row.arriveSectionCode&&!scope.row.oldArriveSectionCode">{{ sectionMap[scope.row.arriveSectionCode] }}</div>
<div v-else>{{ sectionMap[scope.row.arriveSectionCode]+'['+sectionMap[scope.row.oldArriveSectionCode]+']' }}</div>
</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -64,8 +67,10 @@
width="170" width="170"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.status==-1">删除</div> <div v-if="scope.row.arrivePlanTime">
<div v-else>{{ scope.row.arrivePlanTime }}</div> <div v-if="scope.row.status==-1">删除</div>
<div v-else>{{ scope.row.arrivePlanTime }}</div>
</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -74,10 +79,13 @@
width="100" width="100"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.status==-1">删除</div> <div v-if="scope.row.departSectionCode">
<!-- {{ sectionMap }} --> <div v-if="scope.row.status==-1">删除</div>
<div v-else-if="scope.row.status==1">{{ sectionMap[scope.row.departSectionCode] }}</div> <!-- {{ sectionMap }} -->
<div v-else-if="scope.row.departSectionCode">{{ sectionMap[scope.row.departSectionCode]+'['+sectionMap[scope.row.oldDepartSectionCode]+']' }}</div> <!-- scope.row.status==1 -->
<div v-else-if="scope.row.departSectionCode&&!scope.row.oldDepartSectionCode">{{ sectionMap[scope.row.departSectionCode] }}</div>
<div v-else>{{ sectionMap[scope.row.departSectionCode]+'['+sectionMap[scope.row.oldDepartSectionCode]+']' }}</div>
</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -86,8 +94,10 @@
width="170" width="170"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.status==-1">删除</div> <div v-if="scope.row.departPlanTime">
<div v-else>{{ scope.row.departPlanTime }}</div> <div v-if="scope.row.status==-1">删除</div>
<div v-else>{{ scope.row.departPlanTime }}</div>
</div>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@ -77,6 +77,7 @@
border border
height="695" height="695"
highlight-current-row highlight-current-row
:row-class-name="judgeColor"
style="width: 100%;border:1px #ccc solid" style="width: 100%;border:1px #ccc solid"
@cell-click="selectedTripNumber" @cell-click="selectedTripNumber"
@current-change="handleCurrentChange" @current-change="handleCurrentChange"
@ -88,7 +89,7 @@
width="100" width="100"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<div>{{ scope.row.tripNumber }} {{ scope.row.delete?'(删)':'' }}</div> <div :class="scope.row.twinkle?'flashTrip noChange':'noChange'" style="color:#000">{{ scope.row.tripNumber }} {{ scope.row.delete?'(删)':scope.row.twinkle?'(*)':'' }}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="到 达"> <el-table-column label="到 达">
@ -98,12 +99,18 @@
<div class="runplanTableTname"><br><br>&nbsp;</div> <div class="runplanTableTname"><br><br>&nbsp;</div>
<div class="runplanTableNo">1</div> <div class="runplanTableNo">1</div>
</template> </template>
<template slot-scope="scope">
<div v-if="scope.row.arriveRunPlan" class="noChange">{{ scope.row.arriveRunPlan.down }}</div>
</template>
</el-table-column> </el-table-column>
<el-table-column width="80" prop="arriveRunPlan.up"> <el-table-column width="80" prop="arriveRunPlan.up">
<template slot="header"> <template slot="header">
<div class="runplanTableTname"><br><br>&nbsp;</div> <div class="runplanTableTname"><br><br>&nbsp;</div>
<div class="runplanTableNo">2</div> <div class="runplanTableNo">2</div>
</template> </template>
<template slot-scope="scope">
<div v-if="scope.row.arriveRunPlan" class="noChange">{{ scope.row.arriveRunPlan.up }}</div>
</template>
</el-table-column> </el-table-column>
</el-table-column> </el-table-column>
<el-table-column width="155" prop="arriveRunPlan.accessName"> <el-table-column width="155" prop="arriveRunPlan.accessName">
@ -112,7 +119,7 @@
<div class="runplanTableNo">3</div> <div class="runplanTableNo">3</div>
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.arriveRunPlan" class="accessName" :title="scope.row.arriveRunPlan.accessName">{{ scope.row.arriveRunPlan.accessName }}</div> <div v-if="scope.row.arriveRunPlan" class="noChange" :title="scope.row.arriveRunPlan.accessName">{{ scope.row.arriveRunPlan.accessName }}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="60" prop="arriveRunPlan.sectionCode"> <el-table-column width="60" prop="arriveRunPlan.sectionCode">
@ -127,9 +134,9 @@
placeholder="" placeholder=""
size="mini" size="mini"
popper-class="stationSelect" popper-class="stationSelect"
@focus="focusArriveRunPlan($event,scope.row)"
@change="changeArriveRunPlan($event,scope.row,scope.$index)" @change="changeArriveRunPlan($event,scope.row,scope.$index)"
> >
<!-- :class="judgeColor({scope.row,scope.$index})" -->
<el-option <el-option
v-for="item in filterSectionList" v-for="item in filterSectionList"
:key="item.code" :key="item.code"
@ -169,7 +176,7 @@
<div class="runplanTableNo">7</div> <div class="runplanTableNo">7</div>
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.arriveRunPlan">{{ coverTime(scope.row.arriveRunPlan.planTime) }}</div> <div v-if="scope.row.arriveRunPlan" class="noChange">{{ coverTime(scope.row.arriveRunPlan.planTime) }}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="70" prop="arriveRunPlan.actualTime"> <el-table-column width="70" prop="arriveRunPlan.actualTime">
@ -177,6 +184,11 @@
<div class="runplanTableTname runplanFourLevel"><br></div> <div class="runplanTableTname runplanFourLevel"><br></div>
<div class="runplanTableNo">8</div> <div class="runplanTableNo">8</div>
</template> </template>
<template slot-scope="scope">
<div v-if="scope.row.arriveRunPlan" style="line-height:28px" :class="scope.row.arriveRunPlan.finish? (scope.row.passenger=='PASSENGER'?'fontRed':'fontBlue'):'fontBlack'">
{{ scope.row.arriveRunPlan.actualTime }}
</div>
</template>
</el-table-column> </el-table-column>
</el-table-column> </el-table-column>
</el-table-column> </el-table-column>
@ -271,12 +283,18 @@
<div class="runplanTableTname"><br><br>&nbsp;</div> <div class="runplanTableTname"><br><br>&nbsp;</div>
<div class="runplanTableNo">19</div> <div class="runplanTableNo">19</div>
</template> </template>
<template slot-scope="scope">
<div v-if="scope.row.departRunPlan" class="noChange">{{ scope.row.departRunPlan.down }}</div>
</template>
</el-table-column> </el-table-column>
<el-table-column width="80" prop="departRunPlan.up"> <el-table-column width="80" prop="departRunPlan.up">
<template slot="header"> <template slot="header">
<div class="runplanTableTname"><br><br>&nbsp;</div> <div class="runplanTableTname"><br><br>&nbsp;</div>
<div class="runplanTableNo">20</div> <div class="runplanTableNo">20</div>
</template> </template>
<template slot-scope="scope">
<div v-if="scope.row.departRunPlan" class="noChange">{{ scope.row.departRunPlan.up }}</div>
</template>
</el-table-column> </el-table-column>
</el-table-column> </el-table-column>
<el-table-column width="60" prop="departRunPlan.sectionCode"> <el-table-column width="60" prop="departRunPlan.sectionCode">
@ -291,7 +309,6 @@
placeholder="" placeholder=""
size="mini" size="mini"
popper-class="stationSelect" popper-class="stationSelect"
@focus="focusDepartRunPlan($event,scope.row)"
@change="changeDepartRunPlan($event,scope.row,scope.$index)" @change="changeDepartRunPlan($event,scope.row,scope.$index)"
> >
<el-option <el-option
@ -309,7 +326,7 @@
<div class="runplanTableNo">22</div> <div class="runplanTableNo">22</div>
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.departRunPlan" class="accessName" :title="scope.row.departRunPlan.accessName">{{ scope.row.departRunPlan.accessName }}</div> <div v-if="scope.row.departRunPlan" class="noChange" :title="scope.row.departRunPlan.accessName">{{ scope.row.departRunPlan.accessName }}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="时 分"> <el-table-column label="时 分">
@ -342,7 +359,7 @@
<div class="runplanTableNo">25</div> <div class="runplanTableNo">25</div>
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.departRunPlan">{{ coverTime(scope.row.departRunPlan.planTime) }}</div> <div v-if="scope.row.departRunPlan" class="noChange">{{ coverTime(scope.row.departRunPlan.planTime) }}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="70" prop="departRunPlan.actualTime"> <el-table-column width="70" prop="departRunPlan.actualTime">
@ -350,6 +367,11 @@
<div class="runplanTableTname runplanFourLevel"><br></div> <div class="runplanTableTname runplanFourLevel"><br></div>
<div class="runplanTableNo">26</div> <div class="runplanTableNo">26</div>
</template> </template>
<template slot-scope="scope">
<div v-if="scope.row.departRunPlan" :class="scope.row.departRunPlan.finish? (scope.row.passenger=='PASSENGER'?'fontRed':'fontBlue'):'fontBlack'">
{{ scope.row.departRunPlan.actualTime }}
</div>
</template>
</el-table-column> </el-table-column>
</el-table-column> </el-table-column>
</el-table-column> </el-table-column>
@ -422,7 +444,7 @@
<div class="eachRpMenu" @click="modifyAdjacentStation">修改相关邻站</div> <div class="eachRpMenu" @click="modifyAdjacentStation">修改相关邻站</div>
<div class="eachRpMenu" @click="deleteRunplan">删除</div> <div class="eachRpMenu" @click="deleteRunplan">删除</div>
<div class="eachRpSep" /> <div class="eachRpSep" />
<div class="eachRpMenu">清楚闪烁</div> <div class="eachRpMenu" @click="clearFlash">清除闪烁</div>
<div class="eachRpMenu">全体信息</div> <div class="eachRpMenu">全体信息</div>
</div> </div>
</div> </div>
@ -483,7 +505,8 @@
</div> </div>
</div> </div>
<send-runplan ref="sendRunplan" @closeFlash="closeFlash" @noticeInfo="noticeInfo" /> <send-runplan ref="sendRunplan" @noticeInfo="noticeInfo" />
<!-- @closeFlash="closeFlash" -->
<stage-runplan ref="stageRunplan" @closeFlash="closeStageFlash" @noticeInfo="noticeInfo" /> <stage-runplan ref="stageRunplan" @closeFlash="closeStageFlash" @noticeInfo="noticeInfo" />
<modify-adjacent-station ref="modifyAdjacentStation" @clearRpRow="clearRpRow" @noticeInfo="noticeInfo" /> <modify-adjacent-station ref="modifyAdjacentStation" @clearRpRow="clearRpRow" @noticeInfo="noticeInfo" />
<delete-runplan ref="deleteRunplan" @clearRpRow="clearRpRow" @noticeInfo="noticeInfo" /> <delete-runplan ref="deleteRunplan" @clearRpRow="clearRpRow" @noticeInfo="noticeInfo" />
@ -542,8 +565,8 @@ export default {
Rph:Rph, Rph:Rph,
tableData:[], tableData:[],
filterSectionList:[], filterSectionList:[],
activeDepartRunPlan:{}, // activeDepartRunPlan:{},
activeArriveRunPlan:{}, // activeArriveRunPlan:{},
currentRailwaySimulationRunplan:{}, currentRailwaySimulationRunplan:{},
// radioSelected:'' // radioSelected:''
currentRow:null currentRow:null
@ -560,11 +583,45 @@ export default {
}, },
'$store.state.socket.railwaySimulationRunplanSendChange': function (val) { '$store.state.socket.railwaySimulationRunplanSendChange': function (val) {
this.getRailwaySimulationRunplanSend(); this.getRailwaySimulationRunplanSend();
},
'$store.state.socket.changedCtcRunplanMap': function (val) {
this.judgeStationCtcRunplan();
},
// 仿-仿
'$store.state.socket.simulationReset': function (val) {
this.$store.dispatch('socket/resetRailCtcRunplanInitMsg');
this.loadData();
} }
// railwaySimulationRunplanSendMap
// railwaySimulationRunplanSendChange
}, },
methods:{ methods:{
judgeColor({row, rowIndex}) {
if (row.effect) {
if (row.passenger == 'PASSENGER') {
return 'fontRed';
} else if (row.passenger == 'GOODS_TRAIN') {
return 'fontBlue';
} else {
return 'fontBlack';
}
} else {
if (row.passenger == 'PASSENGER') {
return 'fontPink';
} else if (row.passenger == 'GOODS_TRAIN') {
return 'fontLightBlue';
} else {
return 'fontBlack';
}
}
},
judgeStationCtcRunplan() {
const changedCtcRunplanMap = this.$store.state.socket.changedCtcRunplanMap;
const stationCode = this.$store.state.training.roleDeviceCode;
if (changedCtcRunplanMap[stationCode]) {
document.getElementById('sendRunplan').classList.add('active');
} else {
this.closeFlash();
}
},
getRailwaySimulationRunplanSend() { getRailwaySimulationRunplanSend() {
const stationCode = this.$store.state.training.roleDeviceCode; const stationCode = this.$store.state.training.roleDeviceCode;
const railwaySimulationRunplanSendMap = this.$store.state.socket.railwaySimulationRunplanSendMap; const railwaySimulationRunplanSendMap = this.$store.state.socket.railwaySimulationRunplanSendMap;
@ -573,8 +630,8 @@ export default {
document.getElementById('stageRunplan').classList.add('active'); document.getElementById('stageRunplan').classList.add('active');
this.currentRailwaySimulationRunplan = railwaySimulationRunplanSendMap; this.currentRailwaySimulationRunplan = railwaySimulationRunplanSendMap;
} else { } else {
const sendRunplan = document.getElementById('stageRunplan').className; const stageRunplan = document.getElementById('stageRunplan').className;
document.getElementById('stageRunplan').className = sendRunplan.replace('active', ''); document.getElementById('stageRunplan').className = stageRunplan.replace('active', '');
} }
}, },
loadData() { loadData() {
@ -594,8 +651,11 @@ export default {
return data.stationCode == this.$store.state.training.roleDeviceCode; return data.stationCode == this.$store.state.training.roleDeviceCode;
}); });
this.tableData.sort((prev, next)=>{ this.tableData.sort((prev, next)=>{
const prevPlanTime = prev.departRunPlan ? prev.departRunPlan.planTime : prev.arriveRunPlan ? prev.arriveRunPlan.planTime : '00:00:00'; const prevPlanTime = prev.departRunPlan ? (prev.departRunPlan.actualTime || prev.departRunPlan.planTime)
const nextPlanTime = next.departRunPlan ? next.departRunPlan.planTime : next.arriveRunPlan ? next.arriveRunPlan.planTime : '00:00:00'; : prev.arriveRunPlan ? (prev.arriveRunPlan.actualTime || prev.arriveRunPlan.planTime) : '00:00:00';
const nextPlanTime = next.departRunPlan ? (next.departRunPlan.actualTime || next.departRunPlan.planTime)
: next.arriveRunPlan ? (next.arriveRunPlan.actualTime || next.arriveRunPlan.planTime) : '00:00:00';
// const nextPlanTime = next.departRunPlan ? next.departRunPlan.planTime : next.arriveRunPlan ? next.arriveRunPlan.planTime : '00:00:00';
return new Date('2000-06-18 ' + prevPlanTime).getTime() - new Date('2000-06-18 ' + nextPlanTime).getTime(); return new Date('2000-06-18 ' + prevPlanTime).getTime() - new Date('2000-06-18 ' + nextPlanTime).getTime();
}); });
}, },
@ -611,6 +671,7 @@ export default {
this.loadData(); this.loadData();
this.isShow = true; this.isShow = true;
this.getRailwaySimulationRunplanSend(); this.getRailwaySimulationRunplanSend();
this.judgeStationCtcRunplan();
window.addEventListener('keydown', this.handleKeyDown); window.addEventListener('keydown', this.handleKeyDown);
// arriveRunPlan: Object // arriveRunPlan: Object
// code: "00110010" // code: "00110010"
@ -654,7 +715,8 @@ export default {
}, },
sendRunplan() { sendRunplan() {
if (document.getElementById('sendRunplan').className.includes('active')) { if (document.getElementById('sendRunplan').className.includes('active')) {
this.$refs.sendRunplan.doShow(this.tableData, this.activeDepartRunPlan, this.activeArriveRunPlan, this.filterSectionList); this.$refs.sendRunplan.doShow(this.tableData, this.filterSectionList);
// this.activeDepartRunPlan, this.activeArriveRunPlan,
} }
}, },
stageRunplan() { stageRunplan() {
@ -663,28 +725,56 @@ export default {
this.$refs.stageRunplan.doShow(this.currentRailwaySimulationRunplan[stationCode]); this.$refs.stageRunplan.doShow(this.currentRailwaySimulationRunplan[stationCode]);
} }
}, },
focusDepartRunPlan(event, row) {
this.activeDepartRunPlan[row.code] = {sectionCode:event, code:row.code};
},
//
changeDepartRunPlan(event, row, index) { changeDepartRunPlan(event, row, index) {
const activeDepart = this.activeDepartRunPlan[row.code]; const params = {
if (activeDepart) { stationCode:row.stationCode,
activeDepart.changeSectionCode = event; runPlanCode:row.code,
document.getElementById('sendRunplan').classList.add('active'); arriveSection:'',
} departSection:row.departRunPlan.sectionCode,
force:1
};
commitOperate(menuOperate.CTC.modifyTrackSection, params, 3).then(({valid})=>{
this.loading = false;
if (valid) {
}
}).catch(() => {
this.loading = false;
});
// const activeDepart = this.activeDepartRunPlan[row.code];
// if (activeDepart) {
// activeDepart.changeSectionCode = event;
// document.getElementById('sendRunplan').classList.add('active');
// }
// console.log(event, this.tableData[index].departRunPlan.sectionCode, row.departRunPlan.sectionCode, '------'); // console.log(event, this.tableData[index].departRunPlan.sectionCode, row.departRunPlan.sectionCode, '------');
}, },
focusArriveRunPlan(event, row) {
this.activeArriveRunPlan[row.code] = {sectionCode:event, code:row.code};
},
changeArriveRunPlan(event, row, index) { changeArriveRunPlan(event, row, index) {
const activeArrive = this.activeArriveRunPlan[row.code]; const params = {
if (activeArrive) { stationCode:row.stationCode,
activeArrive.changeSectionCode = event; runPlanCode:row.code,
// if(activeArrive.changeSectionCode!=) arriveSection:row.arriveRunPlan.sectionCode,
document.getElementById('sendRunplan').classList.add('active'); departSection:'',
} force:1
};
// stationCode
// runPlanCode
// arriveSection
// departSection
// force
// element.arriveRunPlan.sectionCode
// element.departRunPlan.sectionCode
commitOperate(menuOperate.CTC.modifyTrackSection, params, 3).then(({valid})=>{
this.loading = false;
if (valid) {
}
}).catch(() => {
this.loading = false;
});
// const activeArrive = this.activeArriveRunPlan[row.code];
// if (activeArrive) {
// activeArrive.changeSectionCode = event;
// // if(activeArrive.changeSectionCode!=)
// document.getElementById('sendRunplan').classList.add('active');
// }
// CTC_MODIFY_TRACK_SECTION // CTC_MODIFY_TRACK_SECTION
// //
// * @param stationCode // * @param stationCode
@ -704,18 +794,18 @@ export default {
// force 0:1 // force 0:1
}, },
closeDialog() { closeDialog() {
this.closeFlash(); // this.closeFlash();
this.doClose(); this.doClose();
this.activeDepartRunPlan = {}; // this.activeDepartRunPlan = {};
this.activeArriveRunPlan = {}; // this.activeArriveRunPlan = {};
}, },
closeFlash() { closeFlash() {
const sendRunplan = document.getElementById('sendRunplan').className; const sendRunplan = document.getElementById('sendRunplan').className;
document.getElementById('sendRunplan').className = sendRunplan.replace('active', ''); document.getElementById('sendRunplan').className = sendRunplan.replace('active', '');
}, },
closeStageFlash() { closeStageFlash() {
const sendRunplan = document.getElementById('stageRunplan').className; const stageRunplan = document.getElementById('stageRunplan').className;
document.getElementById('stageRunplan').className = sendRunplan.replace('active', ''); document.getElementById('stageRunplan').className = stageRunplan.replace('active', '');
const stationCode = this.$store.state.training.roleDeviceCode; const stationCode = this.$store.state.training.roleDeviceCode;
this.$store.dispatch('socket/deleteRailwaySimulationRunplan', stationCode); this.$store.dispatch('socket/deleteRailwaySimulationRunplan', stationCode);
}, },
@ -764,6 +854,24 @@ export default {
this.rpMenuPopShow = false; this.rpMenuPopShow = false;
this.$refs.deleteRunplan.doShow(this.currentRow); this.$refs.deleteRunplan.doShow(this.currentRow);
}, },
//
clearFlash() {
if (this.currentRow && this.currentRow.twinkle) {
event.stopPropagation();
this.rpMenuPopShow = false;
commitOperate(menuOperate.CTC.stationCancleTwinkle, {stationCode:this.currentRow.stationCode, runPlanCode: this.currentRow.code}, 3).then(({valid})=>{
this.loading = false;
this.clearRpRow();
if (valid) {
// this.doClose();
}
}).catch(() => {
this.loading = false;
this.clearRpRow();
this.noticeInfo();
});
}
},
// //
sendNotcie() { sendNotcie() {
// && this.currentRow.departRunPlan && this.currentRow.departRunPlan.adjacentMessage == 0 // && this.currentRow.departRunPlan && this.currentRow.departRunPlan.adjacentMessage == 0
@ -1028,6 +1136,14 @@ export default {
-moz-animation:changeColor 1s infinite; /* Firefox */ -moz-animation:changeColor 1s infinite; /* Firefox */
-webkit-animation:changeColor 1s infinite; /* Safari and Chrome */ -webkit-animation:changeColor 1s infinite; /* Safari and Chrome */
} }
.flashTrip{
animation:flashColor 1s infinite;
-moz-animation:flashColor 1s infinite; /* Firefox */
-webkit-animation:flashColor 1s infinite; /* Safari and Chrome */
}
.noChange{
line-height: 28px;
}
@keyframes changeColor @keyframes changeColor
{ {
0% {background:#f0f0f0;} 0% {background:#f0f0f0;}
@ -1046,6 +1162,24 @@ export default {
50% {background:#ff1900;} 50% {background:#ff1900;}
100% {background:#f0f0f0;} 100% {background:#f0f0f0;}
} }
@keyframes flashColor
{
0% {background:#fff;}
50% {background:#ff1900;}
100% {background:#fff;}
}
@-moz-keyframes flashColor /* Firefox */
{
0% {background:#fff;}
50% {background:#ff1900;}
100% {background:#fff;}
}
@-webkit-keyframes flashColor /* Safari and Chrome */
{
0% {background:#fff;}
50% {background:#ff1900;}
100% {background:#fff;}
}
.eachRpImage{display: inline-block;vertical-align: top;margin-top: 3px;} .eachRpImage{display: inline-block;vertical-align: top;margin-top: 3px;}
.eachRpImageIn{height:26px;cursor: pointer;} .eachRpImageIn{height:26px;cursor: pointer;}
.rpMenuPop{ .rpMenuPop{
@ -1122,4 +1256,9 @@ export default {
} }
.passagerTrain{background:#f00;width: 100%;height: 28px;} .passagerTrain{background:#f00;width: 100%;height: 28px;}
.goodTrain{background:#00f;width: 100%;height: 28px;} .goodTrain{background:#00f;width: 100%;height: 28px;}
.fontRed{color:#f00}
.fontBlue{color:#00f}
.fontBlack{color:#000}
.fontPink{color: #FF1493;}
.fontLightBlue{color: #87CEFA;}
</style> </style>

View File

@ -395,7 +395,12 @@ export default {
CTC_ASSIST_PRESS_BLOCK:{value: 'ASSIST_PRESS_BLOCK', label: '阻塞'}, CTC_ASSIST_PRESS_BLOCK:{value: 'ASSIST_PRESS_BLOCK', label: '阻塞'},
CTC_ASSIST_PRESS_RESTORE:{value: 'ASSIST_PRESS_RESTORE', label: '复原'}, CTC_ASSIST_PRESS_RESTORE:{value: 'ASSIST_PRESS_RESTORE', label: '复原'},
CTC_ASSIST_PRESS_ACCIDENT:{value: 'ASSIST_PRESS_ACCIDENT', label: '事故'}, CTC_ASSIST_PRESS_ACCIDENT:{value: 'ASSIST_PRESS_ACCIDENT', label: '事故'},
CTC_BATCH_MODIFY_RUN_PLAN:{value: 'CTC_BATCH_MODIFY_RUN_PLAN', label: '批量修改股道'},
// CTC_BATCH_MODIFY_RUN_PLAN:{value: 'CTC_BATCH_MODIFY_RUN_PLAN', label: '批量修改股道'},
CTC_MODIFY_SECTION:{value: 'CTC_MODIFY_SECTION', label: '修改股道'},
CTC_STATION_SEND_OUT_RUN_PLAN:{value: 'CTC_STATION_SEND_OUT_RUN_PLAN', label: '车站发送计划'},
CTC_CANCEL_TWINKLE:{value: 'CTC_CANCEL_TWINKLE', label: '车站取消红闪'},
CTC_REMOVE_RUN_PLAN:{value: 'CTC_REMOVE_RUN_PLAN', label: '移除行车日志'}, CTC_REMOVE_RUN_PLAN:{value: 'CTC_REMOVE_RUN_PLAN', label: '移除行车日志'},
CTC_MODIFY_ADJACENT_STATION:{value: 'CTC_MODIFY_ADJACENT_STATION', label: '修改邻站信息'}, CTC_MODIFY_ADJACENT_STATION:{value: 'CTC_MODIFY_ADJACENT_STATION', label: '修改邻站信息'},
CTC_MODIFY_TRIP_NUMBER:{value: 'CTC_MODIFY_TRIP_NUMBER', label: '修改车次号(大铁CTC)'}, CTC_MODIFY_TRIP_NUMBER:{value: 'CTC_MODIFY_TRIP_NUMBER', label: '修改车次号(大铁CTC)'},
@ -415,14 +420,16 @@ export default {
CTC_ZONE_SAVE_TRACK_SECTION:{value:'CTC_ZONE_SAVE_TRACK_SECTION', label: '调度台行车计划修改股道'}, CTC_ZONE_SAVE_TRACK_SECTION:{value:'CTC_ZONE_SAVE_TRACK_SECTION', label: '调度台行车计划修改股道'},
CTC_ZONE_SAVE_TRIP_NUMBER:{value:'CTC_ZONE_SAVE_TRIP_NUMBER', label: '调度台行车计划修改车次'}, CTC_ZONE_SAVE_TRIP_NUMBER:{value:'CTC_ZONE_SAVE_TRIP_NUMBER', label: '调度台行车计划修改车次'},
CTC_ZONE_SAVE_PLAN_TIME:{value:'CTC_ZONE_SAVE_PLAN_TIME', label: '调度台行车计划修改到达计划时间'}, CTC_ZONE_SAVE_PLAN_TIME:{value:'CTC_ZONE_SAVE_PLAN_TIME', label: '调度台行车计划修改时间'},
CTC_ZONE_SAVE_DIRECTION:{value:'CTC_ZONE_SAVE_DIRECTION', label: '调度台行车计划修改出入口'}, CTC_ZONE_SAVE_DIRECTION:{value:'CTC_ZONE_SAVE_DIRECTION', label: '调度台行车计划修改出入口'},
CTC_ZONE_SAVE_STATION:{value:'CTC_ZONE_SAVE_STATION', label: '调度台行车计划修改到发车站'} CTC_ZONE_SAVE_STATION:{value:'CTC_ZONE_SAVE_STATION', label: '调度台行车计划修改到发车站'}
}, },
RAIL: { RAIL: {
CMD_RAIL_FILL_IN_TICKET: {value: 'RAIL_FILL_IN_TICKET', label: '填写票据'}, CMD_RAIL_FILL_IN_TICKET: {value: 'RAIL_FILL_IN_TICKET', label: '填写票据'},
CMD_RAIL_QUERY_TICKET: {value: 'RAIL_QUERY_TICKET', label: '查询票据'}, CMD_RAIL_QUERY_TICKET: {value: 'RAIL_QUERY_TICKET', label: '查询票据'},
CMD_RAIL_FILL_IN_REGISTER: {value: 'RAIL_FILL_IN_REGISTER', label: '填写行车簿册'}, CMD_RAIL_FILL_IN_REGISTER: {value: 'RAIL_FILL_IN_REGISTER', label: '填写行车簿册'},
CMD_RAIL_QUERY_REGISTER: {value: 'RAIL_QUERY_REGISTER', label: '查询行车簿册'} CMD_RAIL_QUERY_REGISTER: {value: 'RAIL_QUERY_REGISTER', label: '查询行车簿册'},
CMD_RAIL_GIVE_TICKET_TO: {value: 'RAIL_GIVE_TICKET_TO', label: '给出票据'}
} }
}; };

View File

@ -3667,11 +3667,18 @@ export const OperationEvent = {
domId: '_Tips-CTC-AssistPressAccident-Menu{TOP}' domId: '_Tips-CTC-AssistPressAccident-Menu{TOP}'
} }
}, },
// 批量修改股道 // // 批量修改股道
batchModifyTrackSection:{ // batchModifyTrackSection:{
// menu: {
// operation: '1111',
// domId: '_Tips-CTC-batchModifyTrackSection-Menu{TOP}'
// }
// },
// 修改股道
modifyTrackSection:{
menu: { menu: {
operation: '1111', operation: '1111',
domId: '_Tips-CTC-batchModifyTrackSection-Menu{TOP}' domId: '_Tips-CTC-modifyTrackSection-Menu{TOP}'
} }
}, },
// 移除行车日志 // 移除行车日志
@ -3820,7 +3827,37 @@ export const OperationEvent = {
operation: '1132', operation: '1132',
domId: '_Tips-CTC-modifyDispatcherLogerRpSection-Menu{TOP}' domId: '_Tips-CTC-modifyDispatcherLogerRpSection-Menu{TOP}'
} }
},
// 车站发送计划
stationSendRunplan:{
menu: {
operation: '1133',
domId: '_Tips-CTC-stationSendRunplan-Menu{TOP}'
}
},
// 车站取消红闪
stationCancleTwinkle:{
menu: {
operation: '1134',
domId: '_Tips-CTC-stationCancleTwinkle-Menu{TOP}'
}
},
// 调度台行车计划修改时间
modifyDispatcherLogerRpPlanTime:{
menu: {
operation: '1135',
domId: '_Tips-CTC-modifyDispatcherLogerRpPlanTime-Menu{TOP}'
}
},
// 调度台行车计划修改出入口
modifyDispatcherLogerRpDirection:{
menu: {
operation: '1136',
domId: '_Tips-CTC-modifyDispatcherLogerRpDirection-Menu{TOP}'
}
} }
// CTC_ZONE_SAVE_TRIP_NUMBER
// CTC_ZONE_SAVE_STATION
}, },
RailCommand: { RailCommand: {
railFillInTicket: { railFillInTicket: {
@ -3846,6 +3883,12 @@ export const OperationEvent = {
operation: '1204', operation: '1204',
domId: '_Tips-Rail-railQueryTicket' domId: '_Tips-Rail-railQueryTicket'
} }
},
railGiveTicketTo: {
menu: {
operation: '1205',
domId: '_Tips-Rail-railGiveTicketTo'
}
} }
} }
}; };

View File

@ -269,6 +269,14 @@ function handle(state, data) {
case 'SIMULATION_RAIL_CTC_DISPATCH_COMMAND': case 'SIMULATION_RAIL_CTC_DISPATCH_COMMAND':
state.dispatchCommandMsg = msg; state.dispatchCommandMsg = msg;
break; break;
// 车站发送计划信息
case 'SIMULATION_CTC_RUN_PLAN_CONFIRM_SEND':
state.changedCtcRunplanMap = msg;
break;
case 'SIMULATION_RAIL_TICKET':
state.ticketInfo = msg;
break;
//
// // 大铁项目 调度台 运行图信息 初始化消息 // // 大铁项目 调度台 运行图信息 初始化消息
// case 'SIMULATION_RAILWAY_RUN_PLAN_INIT': // case 'SIMULATION_RAILWAY_RUN_PLAN_INIT':
// state.railwaySimulationRpMsg = {}; // state.railwaySimulationRpMsg = {};
@ -400,6 +408,7 @@ const socket = {
overConversition: {}, // 仿真会话结束 overConversition: {}, // 仿真会话结束
exitConversition: {}, // 仿真成员退出会话 exitConversition: {}, // 仿真成员退出会话
conversationInfo: {}, // 仿真会话消息 conversationInfo: {}, // 仿真会话消息
ticketInfo: {}, // 路票消息
message: {}, // 仿真聊天 message: {}, // 仿真聊天
msgQueue: [], // 命令请求列表(旧版控制权转移可能在用,新版不用这个) msgQueue: [], // 命令请求列表(旧版控制权转移可能在用,新版不用这个)
@ -445,6 +454,7 @@ const socket = {
loggedOutMsg: '', loggedOutMsg: '',
railCtcStatusMsg: {}, // 占线板信息 railCtcStatusMsg: {}, // 占线板信息
dispatchCommandMsg: {}, // 调度命令信息 dispatchCommandMsg: {}, // 调度命令信息
changedCtcRunplanMap:{}, // 大铁项目 ctc 被修改运行计划的车站信息
railCtcRunplanInitMsg:{}, // 大铁项目 ctc 运行图初始化信息 railCtcRunplanInitMsg:{}, // 大铁项目 ctc 运行图初始化信息
railCtcRunplanChange:0, // 大铁项目 ctc 运行图信息变化 railCtcRunplanChange:0, // 大铁项目 ctc 运行图信息变化
railCtcStationManageRpMsg:{}, // 大铁项目 ctc 车务管理 端运行图信息 railCtcStationManageRpMsg:{}, // 大铁项目 ctc 车务管理 端运行图信息
@ -545,6 +555,9 @@ const socket = {
}, },
clearDispatchCommandMsg: (state, data) => { clearDispatchCommandMsg: (state, data) => {
state.dispatchCommandMsg = {}; state.dispatchCommandMsg = {};
},
resetRailCtcRunplanInitMsg: (state) => {
state.railCtcRunplanInitMsg = {};
} }
}, },
@ -642,6 +655,9 @@ const socket = {
}, },
deleteRailwaySimulationRunplan:({ commit }, stationCode) => { deleteRailwaySimulationRunplan:({ commit }, stationCode) => {
commit('deleteRailwaySimulationRunplan', stationCode); commit('deleteRailwaySimulationRunplan', stationCode);
},
resetRailCtcRunplanInitMsg:({ commit }) => {
commit('resetRailCtcRunplanInitMsg');
} }
} }
}; };

View File

@ -450,7 +450,6 @@ const training = {
rtn && rtn.valid && commit('next'); rtn && rtn.valid && commit('next');
} }
} }
console.log(rtn, '*********');
resolve(rtn); resolve(rtn);
}).catch(error => { }).catch(error => {
// console.error(error); // console.error(error);

View File

@ -173,7 +173,23 @@ export default {
filterDepSectionList:[], filterDepSectionList:[],
filterSectionList:[], filterSectionList:[],
trainTypeList:[ trainTypeList:[
{name:'跨局快速旅客列车', code:'FAST_PASSENGER_TRAIN' } //
{name:'管内特快旅客列车', code:'LOCAL_EXPRESS_PASSENGER_TRAIN' },
{name:'管内快速旅客列车', code:'LOCAL_FAST_PASSENGER_TRAIN' },
{name:'管内普通旅客快车', code:'LOCAL_PASSENGER_TRAIN' },
{name:'管内普通旅客慢车', code:'LOCAL_SLOW_PASSENGER_TRAIN' },
{name:'管内临时旅客列车', code:'LOCAL_TEMPORARY_PASSENGER_TRAIN' },
{name:'管内临时旅游列车', code:'LOCAL_TEMPORARY_TOURIST_TRAIN' },
//
{name:'跨局快速旅客列车', code:'FAST_PASSENGER_TRAIN' },
{name:'跨局临时旅游列车', code:'TEMPORARY_TOURIST_TRAIN' },
{name:'跨两局普通旅客快车', code:'TWO_PASSENGER_TRAIN' },
{name:'跨两局普通旅客慢车', code:'TWO_SLOW_PASSENGER_TRAIN' },
{name:'跨两局临时旅客列车', code:'TWO_TEMPORARY_PASSENGER_TRAIN' },
{name:'跨三局及其以上普通旅客快车', code:'MORE_PASSENGER_TRAIN' },
//
{name:'回送出入厂客车底列车', code:'BACK_FACTORY_PASSENGER_TRAIN' },
{name:'因故折返旅客列车', code:'FAULT_TRUE_BACK_PASSENGER_TRAIN' }
], ],
runTypeList:[ runTypeList:[
{name:'快速旅客列车', code:'FAST_PASSENGER_TRAIN' } {name:'快速旅客列车', code:'FAST_PASSENGER_TRAIN' }
@ -246,8 +262,8 @@ export default {
} }
}, },
methods: { methods: {
doShow({filterSectionList, mapStationDirectionMap}) { doShow({filterSectionList, mapStationDirectionList}) {
this.mapStationDirectionList = Object.values(mapStationDirectionMap); this.mapStationDirectionList = mapStationDirectionList;
this.filterSectionList = filterSectionList; this.filterSectionList = filterSectionList;
this.dialogShow = true; this.dialogShow = true;
this.$nextTick(function () { this.$nextTick(function () {

View File

@ -67,7 +67,22 @@
<el-table-column prop="arriveDirectionCode" label="接车口"> <el-table-column prop="arriveDirectionCode" label="接车口">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.arriveDirectionCode" class="accessName" :title="scope.row.arriveDirectionCode"> <div v-if="scope.row.arriveDirectionCode" class="accessName" :title="scope.row.arriveDirectionCode">
{{ mapStationDirectionData[scope.row.arriveDirectionCode].name }} <!-- {{ mapStationDirectionData[scope.row.arriveDirectionCode].name }} -->
<el-select
v-model="tableData[scope.$index].arriveDirectionCode"
placeholder=""
size="mini"
:disabled="scope.row.status==-1"
popper-class="stationSelect"
@change="changeArriveDirectionCode($event,scope.row,scope.$index)"
>
<el-option
v-for="item in mapStationDirectionData.filter(station=>{return station.stationCode == scope.row.stationCode})"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@ -75,32 +90,49 @@
<el-table-column prop="departDirectionCode" label="发车口"> <el-table-column prop="departDirectionCode" label="发车口">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.departDirectionCode" class="accessName" :title="scope.row.departDirectionCode"> <div v-if="scope.row.departDirectionCode" class="accessName" :title="scope.row.departDirectionCode">
{{ mapStationDirectionData[scope.row.departDirectionCode].name }} <!-- {{ mapStationDirectionData[scope.row.departDirectionCode].name }} -->
<el-select
v-model="tableData[scope.$index].departDirectionCode"
placeholder=""
size="mini"
:disabled="scope.row.status==-1"
popper-class="stationSelect"
@change="changeDepartDirectionCode($event,scope.row,scope.$index)"
>
<el-option
v-for="item in mapStationDirectionData.filter(station=>{return station.stationCode == scope.row.stationCode})"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="155" prop="arriveSectionCode" label="接车股道"> <el-table-column width="155" prop="arriveSectionCode" label="接车股道">
<template slot-scope="scope"> <template slot-scope="scope">
<el-select <div v-if="scope.row.arriveSectionCode" class="accessName">
v-model="tableData[scope.$index].arriveSectionCode" <el-select
placeholder="" v-model="tableData[scope.$index].arriveSectionCode"
size="mini" placeholder=""
:disabled="scope.row.status==-1" size="mini"
popper-class="stationSelect" :disabled="scope.row.status==-1"
@change="changeArriveRunPlan($event,scope.row,scope.$index)" popper-class="stationSelect"
> @change="changeArriveRunPlan($event,scope.row,scope.$index)"
<el-option >
v-for="item in filterSectionList" <el-option
:key="item.code" v-for="item in filterSectionList.filter(section=>{return section.stationCode == scope.row.stationCode})"
:label="item.name" :key="item.code"
:value="item.code" :label="item.name"
/> :value="item.code"
</el-select> />
</el-select>
</div>
<!-- <!--
electrical electrical
电力 电力
passenger passenger
办理客运 --> 办理客运 -->
<!-- <div v-if="scope.row.arriveSectionCode" class="accessName"> <!-- <div v-if="scope.row.arriveSectionCode" class="accessName">
{{ filterSectionMap[scope.row.arriveSectionCode].name }} {{ filterSectionMap[scope.row.arriveSectionCode].name }}
</div> </div>
@ -108,37 +140,41 @@ passenger
</template></el-table-column> </template></el-table-column>
<el-table-column width="155" prop="departSectionCode" label="发车股道"> <el-table-column width="155" prop="departSectionCode" label="发车股道">
<template slot-scope="scope"> <template slot-scope="scope">
<el-select <div v-if="scope.row.departSectionCode" class="accessName">
v-model="tableData[scope.$index].departSectionCode" <el-select
placeholder="" v-model="tableData[scope.$index].departSectionCode"
size="mini" placeholder=""
popper-class="stationSelect" size="mini"
:disabled="scope.row.status==-1" popper-class="stationSelect"
@change="changeDepartRunPlan($event,scope.row,scope.$index)" :disabled="scope.row.status==-1"
> @change="changeDepartRunPlan($event,scope.row,scope.$index)"
<el-option >
v-for="item in filterSectionList" <el-option
:key="item.code" v-for="item in filterSectionList.filter(section=>{return section.stationCode == scope.row.stationCode})"
:label="item.name" :key="item.code"
:value="item.code" :label="item.name"
/> :value="item.code"
</el-select> />
</el-select>
</div>
<!-- <div v-if="scope.row.departSectionCode" class="accessName"> <!-- <div v-if="scope.row.departSectionCode" class="accessName">
{{ filterSectionMap[scope.row.departSectionCode].name }} {{ filterSectionMap[scope.row.departSectionCode].name }}
</div> --> </div> -->
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="155" prop="arrivePlanTime" label="到达时间"> <el-table-column width="175" prop="arrivePlanTime" label="到达时间">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.arrivePlanTime" class="accessName"> <div v-if="scope.row.arrivePlanTime" class="accessName">
{{ scope.row.arrivePlanTime }} <!-- {{ scope.row.arrivePlanTime }} -->
<el-date-picker v-model="scope.row.arrivePlanTime" size="mini" type="datetime" value-format="yyyy-MM-dd HH:mm" format="yyyy-MM-dd HH:mm" style="width:165px" @change="changeArrivePlanTime($event,scope.row,scope.$index)" />
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="155" prop="departPlanTime" label="出发时间"> <el-table-column width="175" prop="departPlanTime" label="出发时间">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.departPlanTime" class="accessName"> <div v-if="scope.row.departPlanTime" class="accessName">
{{ scope.row.departPlanTime }} <!-- {{ scope.row.departPlanTime }} -->
<el-date-picker v-model="scope.row.departPlanTime" size="mini" type="datetime" value-format="yyyy-MM-dd HH:mm" style="width:165px" format="yyyy-MM-dd HH:mm" @change="changeDepartPlanTime($event,scope.row,scope.$index)" />
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@ -171,6 +207,7 @@ export default {
isShow:false, isShow:false,
height: this.$store.state.app.height - 37, height: this.$store.state.app.height - 37,
filterSectionList:[], filterSectionList:[],
mapStationDirectionData:[],
// filterSectionMap:{}, // filterSectionMap:{},
tableData:[], tableData:[],
group:'', group:'',
@ -182,10 +219,7 @@ export default {
computed: { computed: {
...mapGetters('map', [ ...mapGetters('map', [
'sectionList' 'sectionList'
]), ])
mapStationDirectionData() {
return this.$store.state.map.mapStationDirectionData;
}
}, },
watch:{ watch:{
// '$store.state.socket.railwaySimulationRpChange': function (val) { // '$store.state.socket.railwaySimulationRpChange': function (val) {
@ -216,6 +250,7 @@ export default {
}, },
doShow() { doShow() {
this.loadFilterSectionMap(); this.loadFilterSectionMap();
this.mapStationDirectionData = Object.values(this.$store.state.map.mapStationDirectionData);
// this.tableData = []; // this.tableData = [];
// this.loadData(); // this.loadData();
this.isShow = true; this.isShow = true;
@ -248,6 +283,55 @@ export default {
changeDepartRunPlan(event, row, index) { changeDepartRunPlan(event, row, index) {
this.modifyDispatcherLogerRpSection(row, row.departSectionCode, 'D'); this.modifyDispatcherLogerRpSection(row, row.departSectionCode, 'D');
}, },
//
changeArrivePlanTime(event, row, index) {
this.modifyDispatcherLogerRpPlanTime(row, row.arrivePlanTime, 'R');
},
changeDepartPlanTime(event, row, index) {
this.modifyDispatcherLogerRpPlanTime(row, row.departPlanTime, 'D');
},
changeArriveDirectionCode(event, row, index) {
this.modifyDispatcherLogerRpDirection(row, row.arriveDirectionCode, 'R');
},
changeDepartDirectionCode(event, row, index) {
this.modifyDispatcherLogerRpDirection(row, row.departDirectionCode, 'D');
},
//
modifyDispatcherLogerRpDirection(row, directionCode, type) {
const params = {stationCode:row.stationCode, runPlanCode:row.runPlanCode, directionCode:directionCode, model:type};
commitOperate(menuOperate.CTC.modifyDispatcherLogerRpDirection, params, 3).then(({valid, response})=>{
if (valid) {
const reslut = response.data;
this.tableData.map(data=>{
if (data.stationCode == reslut.stationCode && data.runPlanCode == reslut.runPlanCode) {
data.arriveDirectionCode = reslut.arriveDirectionCode;
data.departDirectionCode = reslut.departDirectionCode;
}
});
}
}).catch(() => {
// this.$message.error('');
});
},
//
modifyDispatcherLogerRpPlanTime(row, planTime, type) {
const params = {stationCode:row.stationCode, runPlanCode:row.runPlanCode, planTime:planTime, model:type};
commitOperate(menuOperate.CTC.modifyDispatcherLogerRpPlanTime, params, 3).then(({valid, response})=>{
if (valid) {
const reslut = response.data;
this.tableData.map(data=>{
if (data.stationCode == reslut.stationCode && data.runPlanCode == reslut.runPlanCode) {
data.arrivePlanTime = reslut.arrivePlanTime;
data.departPlanTime = reslut.departPlanTime;
}
});
}
}).catch(() => {
// this.$message.error('');
});
},
//
modifyDispatcherLogerRpSection(row, sectionCode, type) { modifyDispatcherLogerRpSection(row, sectionCode, type) {
// stationCode // stationCode
// runPlanCode // runPlanCode
@ -304,7 +388,7 @@ export default {
addRunplan() { addRunplan() {
this.$refs.addDispatcherLogerRunplan.doShow({ this.$refs.addDispatcherLogerRunplan.doShow({
filterSectionList:this.filterSectionList, filterSectionList:this.filterSectionList,
mapStationDirectionMap:this.mapStationDirectionData mapStationDirectionList:this.mapStationDirectionData
}); });
}, },
selectedTripNumber(row, column, cell, event) { selectedTripNumber(row, column, cell, event) {

View File

@ -26,14 +26,18 @@
<div class="top-title">收令箱</div> <div class="top-title">收令箱</div>
<div class="top-table"> <div class="top-table">
<el-table :data="cmdTableData" style="width: 100%" height="160" highlight-current-row :row-class-name="tableRowClassName" @current-change="handleCurrentChange"> <el-table :data="cmdTableData" style="width: 100%" height="160" highlight-current-row :row-class-name="tableRowClassName" @current-change="handleCurrentChange">
<el-table-column prop="title" label="标题" /> <el-table-column prop="title" label="标题" show-overflow-tooltip />
<el-table-column prop="number" label="号码" width="80" /> <el-table-column prop="number" label="号码" width="80" />
<el-table-column label="命令类型" width="100"> <el-table-column label="命令类型" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<span style="margin-left: 10px">{{ typeObj[scope.row.type] || '' }}</span> <span style="margin-left: 10px">{{ typeObj[scope.row.type] || '' }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="sendTime" label="收令日期" width="160" /> <el-table-column prop="sendTime" label="收令日期" width="160">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ getSignInfo(scope.row.receiverInfos).receivedTime || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="companyOfSender" label="发令单位" /> <el-table-column prop="companyOfSender" label="发令单位" />
<el-table-column prop="senderName" label="发令人" /> <el-table-column prop="senderName" label="发令人" />
<el-table-column label="签否"> <el-table-column label="签否">
@ -153,22 +157,9 @@ export default {
}, },
getTableData() { getTableData() {
const receiverList = Object.values(this.currentInfo.receiverInfos || {}); const receiverList = Object.values(this.currentInfo.receiverInfos || {});
const mList = [];
receiverList.forEach(ii => {
const obj = this.memberList.find(item => {
return item.id == ii.receiverId;
});
if (obj) {
mList.push({
commandId: this.commandId,
...ii,
...obj
});
}
});
const list = []; const list = [];
mList.forEach(item => { receiverList.forEach(item => {
const device = this.$store.getters['map/getDeviceByCode'](item.deviceCode); const device = this.$store.getters['map/getDeviceByCode'](item.receiverId);
const obj = { const obj = {
...this.currentInfo, ...this.currentInfo,
...item, ...item,
@ -201,6 +192,7 @@ export default {
return 'unsigned-row'; return 'unsigned-row';
}, },
doShow() { doShow() {
this.searchCmd();
this.dialogShow = true; this.dialogShow = true;
this.$store.commit('socket/clearDispatchCommandMsg'); this.$store.commit('socket/clearDispatchCommandMsg');
}, },
@ -209,9 +201,30 @@ export default {
}, },
handleCurrentChange(obj) { handleCurrentChange(obj) {
this.currentInfo = obj; this.currentInfo = obj;
if (!this.getSignInfo(obj.receiverInfos).receivedTime) {
const data = {
commandId: obj.id
};
sendCommandNew(this.group, 'CTC_READ_DISPATCH_COMMAND', data).then((res) => {
console.log(res, '---res');
const index = this.cmdTableData.findIndex(item => {
return item.id == obj.id;
});
if (index >= 0) {
const obj = this.cmdTableData[index];
const devCode = this.getActiveUser.deviceCode || '';
if (obj.receiverInfos[devCode]) {
obj.receiverInfos[devCode].receivedTime = parseTime(this.initTime);
this.cmdTableData.splice(index, 1, obj);
}
}
}).catch(error => {
console.log(error, '---已读命令error');
});
}
}, },
getSignInfo(info) { getSignInfo(info) {
const obj = info[this.getActiveUser.memberId] || {}; const obj = info[this.getActiveUser.deviceCode] || {};
return obj; return obj;
}, },
getSignedBy(info) { getSignedBy(info) {
@ -241,20 +254,40 @@ export default {
this.$messageBox(`${this.signedStatusObj[status]}调度命令失败:${error.message}`); this.$messageBox(`${this.signedStatusObj[status]}调度命令失败:${error.message}`);
}); });
}, },
changeReadStatus(signInfo) {
const index = this.cmdTableData.findIndex(item => {
return item.id == signInfo.commandId;
});
if (index >= 0) {
const obj = this.cmdTableData[index];
const devCode = this.getActiveUser.deviceCode || '';
if (obj.receiverInfos[devCode]) {
const mId = signInfo.signedBy;
obj.receiverInfos[devCode].signedBy = mId;
obj.receiverInfos[devCode].signedStatus = signInfo.signedStatus;
obj.receiverInfos[devCode].time = parseTime(this.initTime);
this.cmdTableData.splice(index, 1, obj);
}
}
},
changeSignedStatus(signInfo) { changeSignedStatus(signInfo) {
const index = this.cmdTableData.findIndex(item => { const index = this.cmdTableData.findIndex(item => {
return item.id == signInfo.commandId; return item.id == signInfo.commandId;
}); });
if (index >= 0) { if (index >= 0) {
const obj = this.cmdTableData[index]; const obj = this.cmdTableData[index];
const mId = signInfo.signedBy; const devCode = this.getActiveUser.deviceCode || '';
obj.receiverInfos[mId].signedBy = mId; if (obj.receiverInfos[devCode]) {
obj.receiverInfos[mId].signedStatus = signInfo.signedStatus; const mId = signInfo.signedBy;
obj.receiverInfos[mId].time = parseTime(this.initTime); obj.receiverInfos[devCode].signedBy = mId;
this.cmdTableData.splice(index, 1, obj); obj.receiverInfos[devCode].signedStatus = signInfo.signedStatus;
obj.receiverInfos[devCode].time = parseTime(this.initTime);
this.cmdTableData.splice(index, 1, obj);
}
} }
}, },
searchCmd() { searchCmd() {
this.cmdTableData = [];
sendCommandNew(this.group, 'CTC_QUERY_DISPATCH_COMMAND').then((res) => { sendCommandNew(this.group, 'CTC_QUERY_DISPATCH_COMMAND').then((res) => {
console.log(res, '---res'); console.log(res, '---res');
if (res.code == 200) { if (res.code == 200) {

View File

@ -19,7 +19,132 @@
<el-tab-pane label="操作" name="operate"> <el-tab-pane label="操作" name="operate">
<div class="operate-box"> <div class="operate-box">
<div class="create-cmd"> <div class="create-cmd">
<el-button type="primary" @click="createCmd">新建调度命令</el-button> <!-- <span>数据库正常</span> -->
<div>
<!-- <el-input-number v-model="numTime" controls-position="right" :min="1" :max="24" size="mini" style="width: 83px" /> -->
<el-select v-model="numTime" placeholder="请选择" style="width: 66px;">
<el-option label="24" value="24" />
<el-option label="12" value="12" />
</el-select>
<span>小时</span>
</div>
<span style="width: 85px; font-weight: bold; text-align: end;">{{ getSimulationTime }}</span>
</div>
<div class="create-cmd">
<!-- <span>通信正常</span> -->
<el-button type="primary" @click="refreshSearch">刷新</el-button>
<el-button type="primary" style="width: 100px" @click="createCmd">新建调度命令</el-button>
</div>
<div class="box-title">
<div class="contant-null" />
<div class="contant-text">缓存命令</div>
<div class="contant-icon" @click="active1=!active1">
<i v-if="active1" class="el-icon-arrow-down" />
<i v-else class="el-icon-arrow-up" />
</div>
</div>
<div v-show="active1" class="left-table1">
<el-table ref="table1" :data="cacheTableData" border style="width: 100%" height="100" highlight-current-row @current-change="handleCurrentChange($event, 'table1')">
<el-table-column prop="number" label="命令号" width="80" />
<el-table-column prop="deviceName" label="识别号" width="80" />
<el-table-column prop="title" label="命令标题" show-overflow-tooltip />
<el-table-column prop="sendTime" label="接收单位" show-overflow-tooltip width="160">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ JoinDeviceNameStr(scope.row.receiverInfos) || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="senderName" label="发令人" />
<el-table-column prop="companyOfSender" label="发令单位" />
<el-table-column label="命令类型" width="100">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ typeObj[scope.row.type] || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="content" label="命令正文" show-overflow-tooltip />
</el-table>
</div>
<div class="box-title">
<div class="contant-null" />
<div class="contant-text">接受命令</div>
<div class="contant-icon" @click="active2=!active2">
<i v-if="active2" class="el-icon-arrow-down" />
<i v-else class="el-icon-arrow-up" />
</div>
</div>
<div v-show="active2" class="left-table1">
<el-table ref="table2" :data="receivedTableData" border style="width: 100%" height="100" highlight-current-row @current-change="handleCurrentChange($event, 'table2')">
<el-table-column prop="number" label="命令号" width="80" />
<el-table-column prop="title" label="命令标题" show-overflow-tooltip />
<el-table-column prop="sendTime" label="接收单位" show-overflow-tooltip width="160">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ JoinDeviceNameStr(scope.row.receiverInfos) || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="senderName" label="发令人" />
<el-table-column prop="companyOfSender" label="发令单位" />
<el-table-column label="命令类型" width="100">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ typeObj[scope.row.type] || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="content" label="命令正文" show-overflow-tooltip />
</el-table>
</div>
<div class="box-title">
<div class="contant-null" />
<div class="contant-text">发送命令</div>
<div class="contant-icon" @click="active3=!active3">
<i v-if="active3" class="el-icon-arrow-down" />
<i v-else class="el-icon-arrow-up" />
</div>
</div>
<div v-show="active3" class="left-table1">
<el-table ref="table3" :data="sendTableData" border style="width: 100%" height="150" highlight-current-row @current-change="handleCurrentChange($event, 'table3')">
<el-table-column prop="number" label="命令号" width="80" />
<el-table-column prop="title" label="命令标题" show-overflow-tooltip />
<el-table-column prop="sendTime" label="接收单位" show-overflow-tooltip width="160">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ JoinDeviceNameStr(scope.row.receiverInfos) || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="sendTime" label="发令时间" width="160" />
<el-table-column prop="senderName" label="发令人" />
<el-table-column prop="companyOfSender" label="发令单位" />
<el-table-column label="命令类型" width="100">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ typeObj[scope.row.type] || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="content" label="命令正文" show-overflow-tooltip />
</el-table>
</div>
<div class="box-title">
<div class="contant-null" />
<div class="contant-text">签收完成</div>
<div class="contant-icon" @click="active4=!active4">
<i v-if="active4" class="el-icon-arrow-down" />
<i v-else class="el-icon-arrow-up" />
</div>
</div>
<div v-show="active4" class="left-table1">
<el-table ref="table4" :data="allSignedTableData" border style="width: 100%" height="170" highlight-current-row @current-change="handleCurrentChange($event, 'table4')">
<el-table-column prop="number" label="命令号" width="80" />
<el-table-column prop="title" label="命令标题" show-overflow-tooltip />
<el-table-column prop="sendTime" label="接收单位" show-overflow-tooltip width="160">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ JoinDeviceNameStr(scope.row.receiverInfos) || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="sendTime" label="发令时间" width="160" />
<el-table-column prop="senderName" label="发令人" />
<el-table-column prop="companyOfSender" label="发令单位" />
<el-table-column label="命令类型" width="100">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ typeObj[scope.row.type] || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="content" label="命令正文" show-overflow-tooltip />
</el-table>
</div> </div>
</div> </div>
</el-tab-pane> </el-tab-pane>
@ -126,7 +251,7 @@
<el-tab-pane label="命令正文" name="text"> <el-tab-pane label="命令正文" name="text">
<div class="cmd-box"> <div class="cmd-box">
<div> <div>
<el-input v-model="cmdTextarea" type="textarea" :rows="6" placeholder="请输入内容" /> <el-input v-model="command.content" type="textarea" :rows="6" placeholder="请输入内容" />
</div> </div>
</div> </div>
</el-tab-pane> </el-tab-pane>
@ -139,15 +264,23 @@
<div class="table"> <div class="table">
<el-table ref="table" :data="getTableData" border style="width: 100%" height="200" @selection-change="selectionChange"> <el-table ref="table" :data="getTableData" border style="width: 100%" height="200" @selection-change="selectionChange">
<el-table-column type="selection" width="50" /> <el-table-column type="selection" width="50" />
<el-table-column prop="deviceName" label="受令单位" width="180" /> <el-table-column label="受令单位" width="160">
<el-table-column prop="copyers" label="抄送" width="180" />
<el-table-column label="签收状态">
<template slot-scope="scope"> <template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.nickName ? signedStatusObj[scope.row.signedStatus] : '' }}</span> <span style="margin-left: 10px">{{ getDeviceName(scope.row.receiverId) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="nickName" label="签收人" /> <el-table-column prop="copyers" label="抄送" width="120" show-overflow-tooltip />
<el-table-column prop="signTime" label="签收时间" /> <el-table-column label="签收状态">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ signedStatusObj[scope.row.signedStatus] || '' }}</span>
</template>
</el-table-column>
<el-table-column label="签收人">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ getSignedBy(scope.row) || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="time" label="签收时间" width="160" />
</el-table> </el-table>
</div> </div>
</div> </div>
@ -169,6 +302,7 @@
<script> <script>
import { sendCommandNew } from '@/api/jmap/training'; import { sendCommandNew } from '@/api/jmap/training';
import { mapState } from 'vuex'; import { mapState } from 'vuex';
import { parseTime } from '@/utils/index';
export default { export default {
name:'DispatcherCmd', name:'DispatcherCmd',
data() { data() {
@ -177,9 +311,9 @@ export default {
activeTab: 'operate', activeTab: 'operate',
cmdTab: 'cmd', cmdTab: 'cmd',
textTab: 'text', textTab: 'text',
typeOptions: [ typeObj: {
{label: '正常调度命令', value: 'NORMAL'} NORMAL: '正常调度命令'
], },
signedStatusObj: { signedStatusObj: {
UNSIGNED: '未签收', UNSIGNED: '未签收',
SIGNED: '签收', SIGNED: '签收',
@ -198,19 +332,50 @@ export default {
reviewerId: '', reviewerId: '',
author: '', author: '',
receiverIds: [], receiverIds: [],
type: '', type: 'NORMAL',
content: '', content: '',
allSigned: '' allSigned: ''
}, },
cmdTextarea: '',
tableChecked: false, tableChecked: false,
memberDataList: [] memberDataList: [],
active1: true,
active2: true,
active3: true,
active4: true,
numTime: 24,
seachData: [],
cacheTableData: [],
currentInfo: {}
}; };
}, },
computed: { computed: {
...mapState('training', [ ...mapState('training', [
'memberList', 'memberData', 'simulationUserList' 'memberList', 'memberData', 'simulationUserList', 'initTime'
]), ]),
typeOptions() {
const list = [];
Object.keys(this.typeObj).forEach(item => {
list.push({
label: this.typeObj[item],
value: item
});
});
return list;
},
getSimulationTime() {
const t = parseTime(this.initTime, '{h}:{i}:{s}');
const tArr = t.split(':');
let s = ' ';
let h = tArr[0];
if (this.numTime != 24) {
s = '上午';
if (h > 12) {
s = '下午';
h = h - 12;
}
}
return `${s} ${h}:${tArr[1]}:${tArr[2]}`;
},
show() { show() {
return this.dialogShow; return this.dialogShow;
}, },
@ -228,23 +393,48 @@ export default {
return obj; return obj;
}, },
getTableData() { getTableData() {
const mList = this.memberList.filter(item => { const mList = [];
const filterArr = this.memberList.filter(item => {
return item.type == 'STATION_SUPERVISOR'; return item.type == 'STATION_SUPERVISOR';
}); });
const list = []; filterArr.forEach(item => {
mList.forEach(item => { let cInfo = {};
const device = this.$store.getters['map/getDeviceByCode'](item.deviceCode); if (this.currentInfo.receiverInfos && this.currentInfo.receiverInfos[item.deviceCode]) {
const useInfo = this.mapSimulationUserList[item.userId]; cInfo = this.currentInfo.receiverInfos[item.deviceCode];
const obj = { }
...item, mList.push({
userId: item.userId + '', receiverId: item.deviceCode || '',
deviceName: device ? device.name : '', signedBy: '',
nickName: useInfo ? useInfo.nickName : '', receivedTime: '',
copyers: '', signedStatus: '',
signedStatus: 'UNSIGNED', time: '',
signTime: '' ...cInfo
}; });
list.push(obj); });
return mList;
},
getActiveSender() {
const userInfo = this.memberDataList.find(item => {
return item.userId == this.$store.state.user.id;
});
const activeUser = userInfo || {};
return activeUser;
},
receivedTableData() {
const list = this.seachData.filter(item => {
return item.receiverInfos[this.getActiveSender.deviceCode];
});
return list;
},
sendTableData() {
const list = this.seachData.filter(item => {
return item.senderName == this.getActiveSender.labelName;
});
return list;
},
allSignedTableData() {
const list = this.seachData.filter(item => {
return item.allSigned;
}); });
return list; return list;
} }
@ -253,6 +443,69 @@ export default {
beforeDestroy() {}, beforeDestroy() {},
mounted() {}, mounted() {},
methods:{ methods:{
setCurrentRow(obj, refName) {
const tableArr = ['table1', 'table2', 'table3', 'table4'];
tableArr.forEach(key => {
if (key != refName) {
this.$refs[key] && this.$refs[key].setCurrentRow();
} else {
this.$refs[key] && this.$refs[key].setCurrentRow(obj);
}
});
},
handleCurrentChange(obj, refName) {
if (!obj) { return; }
this.currentInfo = obj;
this.command = {...obj};
this.setCurrentRow(obj, refName);
const infoList = Object.keys(this.currentInfo.receiverInfos || {});
if (infoList.length) {
this.command.receiverIds = infoList;
setTimeout(() => {
infoList.forEach(item => {
const findObj = this.getTableData.find(ii => {
return ii.receiverId == item;
});
findObj && this.$refs.table.toggleRowSelection(findObj, true);
});
}, 200);
} else {
this.$refs.table.clearSelection();
}
},
getSignedBy(info) {
const signedInfo = this.simulationUserList.find(item => {
return item.memberId == info.signedBy;
});
let name = '';
if (signedInfo) {
name = signedInfo.nickName;
}
return name;
},
getDeviceName(receiverId) {
let name = '';
if (receiverId) {
const device = this.$store.getters['map/getDeviceByCode'](receiverId);
name = device ? device.name : '';
}
return name;
},
JoinDeviceNameStr(info) {
let name = '';
const devCodeArr = Object.keys(info);
const nameArr = [];
devCodeArr.forEach(ii => {
const device = this.$store.getters['map/getDeviceByCode'](ii);
nameArr.push(device ? device.name : '');
});
name = nameArr.join(',');
return name;
},
refreshSearch() {
console.log('刷新');
this.searchCmd();
},
createCmd() { createCmd() {
this.$confirm('当前调度命令已经被编辑修改过了,你要放弃所有的修改吗?', '操作提示', { this.$confirm('当前调度命令已经被编辑修改过了,你要放弃所有的修改吗?', '操作提示', {
confirmButtonText: '是', confirmButtonText: '是',
@ -277,12 +530,13 @@ export default {
reviewerId: '', reviewerId: '',
author: '', author: '',
receiverIds: [], receiverIds: [],
type: '', type: 'NORMAL',
content: '', content: '',
allSigned: '' allSigned: ''
}; };
this.cmdTextarea = ''; this.currentInfo = {};
this.$refs.table.clearSelection(); this.$refs.table && this.$refs.table.clearSelection();
this.setCurrentRow();
}, },
senderChange(memberId) { senderChange(memberId) {
const obj = this.mapSimulationUserList.find(item => { const obj = this.mapSimulationUserList.find(item => {
@ -304,8 +558,10 @@ export default {
} }
}, },
doShow() { doShow() {
this.searchCmd();
this.getSenderName(); this.getSenderName();
this.dialogShow = true; this.dialogShow = true;
this.initData();
}, },
doClose() { doClose() {
this.dialogShow = false; this.dialogShow = false;
@ -316,27 +572,43 @@ export default {
selectionChange(selection) { selectionChange(selection) {
const arr = []; const arr = [];
selection.forEach(item => { selection.forEach(item => {
arr.push(item.id); arr.push(item.receiverId);
}); });
this.command.receiverIds = arr; this.command.receiverIds = arr;
console.log(this.simulationUserList, '----simulationUserList----');
}, },
sendCmd() { sendCmd() {
this.command.content = this.cmdTextarea; const test = `${this.command.number}】号调度命令下达到以下受令人:`;
const data = { const messageData = [test];
command: this.command const h = this.$createElement;
}; this.command.receiverIds.forEach((item, index) => {
sendCommandNew(this.group, 'CTC_SEND_DISPATCH_COMMAND', data).then((res) => { const device = this.$store.getters['map/getDeviceByCode'](item);
console.log(res, '---res'); const msg = `${index + 1}. ${device ? device.name : ''}`;
this.$message.success('发送调度命令成功!'); messageData.push(h('p', null, msg));
this.initData(); });
}).catch(error => { this.$confirm('提示', {
this.$messageBox('发送调度命令失败:' + error.message); title: '操作提示',
message: h('div', null, messageData),
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const data = {
command: this.command
};
sendCommandNew(this.group, 'CTC_SEND_DISPATCH_COMMAND', data).then((res) => {
console.log(res, '---res');
this.$message.success('发送调度命令成功!');
this.searchCmd();
this.initData();
}).catch(error => {
this.$messageBox('发送调度命令失败:' + error.message);
});
}); });
}, },
searchCmd() { searchCmd() {
sendCommandNew(this.group, 'CTC_QUERY_DISPATCH_COMMAND').then((res) => { sendCommandNew(this.group, 'CTC_QUERY_DISPATCH_COMMAND').then((res) => {
console.log(res, '---res----'); console.log(res, '---res----');
this.seachData = res.data;
}).catch(error => { }).catch(error => {
this.$messageBox('查询调度命令失败:' + error.message); this.$messageBox('查询调度命令失败:' + error.message);
}); });
@ -352,8 +624,35 @@ export default {
height: 100%; height: 100%;
.left { .left {
height: 100%; height: 100%;
.operate-box {
overflow-y: auto;
}
.create-cmd { .create-cmd {
text-align: end; height: 30px;
display: flex;
justify-content: flex-end;
align-items: center;
}
.box-title {
height: 28px;
display: flex;
justify-content: center;
align-items: center;
background: #B3B2C2;
.contant-null, .contant-icon {
width: 20px;
display: flex;
justify-content: center;
}
.contant-icon:hover {
cursor: pointer;
}
.contant-text {
display: flex;
justify-content: center;
flex: 1;
color: blue;
}
} }
} }
/deep/ .el-tabs__item { /deep/ .el-tabs__item {

View File

@ -64,7 +64,11 @@
<div class="box-table"> <div class="box-table">
<el-table :data="getTableData" style="width: 100%" height="200"> <el-table :data="getTableData" style="width: 100%" height="200">
<el-table-column type="index" label="序" width="50" /> <el-table-column type="index" label="序" width="50" />
<el-table-column prop="deviceName" label="受令单位" /> <el-table-column prop="deviceName" label="受令单位">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ getDeviceName(scope.row.receiverId) }}</span>
</template>
</el-table-column>
<el-table-column prop="copyers" label="抄知处所" /> <el-table-column prop="copyers" label="抄知处所" />
</el-table> </el-table>
</div> </div>
@ -149,26 +153,11 @@ export default {
}, },
getTableData() { getTableData() {
const receiverList = Object.values(this.signedData.receiverInfos || {}); const receiverList = Object.values(this.signedData.receiverInfos || {});
const mList = [];
receiverList.forEach(ii => {
const obj = this.memberList.find(item => {
return item.id == ii.receiverId;
});
if (obj) {
mList.push({
commandId: this.commandId,
...ii,
...obj
});
}
});
const list = []; const list = [];
mList.forEach(item => { receiverList.forEach(item => {
const device = this.$store.getters['map/getDeviceByCode'](item.deviceCode);
const obj = { const obj = {
...this.signedData, ...this.signedData,
...item, ...item
deviceName: device ? device.name : ''
}; };
list.push(obj); list.push(obj);
}); });
@ -179,6 +168,14 @@ export default {
beforeDestroy() {}, beforeDestroy() {},
mounted() {}, mounted() {},
methods:{ methods:{
getDeviceName(receiverId) {
let name = '';
if (receiverId) {
const device = this.$store.getters['map/getDeviceByCode'](receiverId);
name = device ? device.name : '';
}
return name;
},
getParseTime(val, f) { getParseTime(val, f) {
return val ? parseTime(val, f) : ''; return val ? parseTime(val, f) : '';
}, },
@ -197,6 +194,7 @@ export default {
this.getSenderName(); this.getSenderName();
this.getSignedData(); this.getSignedData();
this.dialogShow = true; this.dialogShow = true;
this.hasReadCmd();
}, },
doClose() { doClose() {
this.dialogShow = false; this.dialogShow = false;
@ -209,7 +207,7 @@ export default {
} }
}, },
getSignInfo(info) { getSignInfo(info) {
const obj = info[this.getActiveUser.memberId] || {}; const obj = info[this.getActiveUser.deviceCode] || {};
return obj; return obj;
}, },
getSignedBy(info) { getSignedBy(info) {
@ -222,6 +220,17 @@ export default {
} }
return name; return name;
}, },
hasReadCmd() {
if (!this.commandId) { return; }
const data = {
commandId: this.commandId
};
sendCommandNew(this.group, 'CTC_READ_DISPATCH_COMMAND', data).then((res) => {
console.log(res, '---res');
}).catch(error => {
console.log(error, '---已读命令error');
});
},
signCmd(status) { signCmd(status) {
if (!this.commandId) { return; } if (!this.commandId) { return; }
const signInfo = { commandId: this.commandId, signedBy: this.signedId, signedStatus: status }; const signInfo = { commandId: this.commandId, signedBy: this.signedId, signedStatus: status };
@ -230,7 +239,7 @@ export default {
}; };
sendCommandNew(this.group, 'CTC_SIGN_DISPATCH_COMMAND', data).then((res) => { sendCommandNew(this.group, 'CTC_SIGN_DISPATCH_COMMAND', data).then((res) => {
console.log(res, '---res'); console.log(res, '---res');
this.$emit('changeSignedStatus', signInfo); // this.$emit('changeSignedStatus', signInfo);
this.doClose(); this.doClose();
}).catch(error => { }).catch(error => {
this.$messageBox('查询调度命令失败:' + error.message); this.$messageBox('查询调度命令失败:' + error.message);

View File

@ -40,7 +40,7 @@
<div style="position:relative"> <div style="position:relative">
<div v-for="(item, index) in treeData" :key="index" class="proper_box"> <div v-for="(item, index) in treeData" :key="index" class="proper_box">
<div class="proper_title">{{ item.label }}</div> <div class="proper_title">{{ item.label }}</div>
<div v-for="(data, i) in item.children" :key="i" style="position: relative; width: 73px; heigth: 73px; margin-left: 5px; float: left;"> <div v-for="(data, i) in item.children" :key="i" style="position: relative; width: 73px; height: 73px; margin-left: 5px; float: left;">
<div v-if="data.show && item.id == 'driver'" :id="'proper_content_box'+data.id" class="proper_content_box" :class="{'active': data.active,'isInviting':data.isInviting}" @click="handleCheckChange(data)"> <div v-if="data.show && item.id == 'driver'" :id="'proper_content_box'+data.id" class="proper_content_box" :class="{'active': data.active,'isInviting':data.isInviting}" @click="handleCheckChange(data)">
<span class="proper_content_box_text">{{ data.label + (data.userId? '(' + (simulationUsers[data.userId]||{}).nickName + ')': '') }}</span> <span class="proper_content_box_text">{{ data.label + (data.userId? '(' + (simulationUsers[data.userId]||{}).nickName + ')': '') }}</span>
</div> </div>

View File

@ -503,6 +503,9 @@ export default {
}, },
setOffset(data, num, sum, obj) { setOffset(data, num, sum, obj) {
this.$jlmap.switchScreen(data, num, sum, obj); this.$jlmap.switchScreen(data, num, sum, obj);
},
pictureChanged(picture) {
} }
} }
}; };

View File

@ -64,6 +64,7 @@
<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" />
<ticket-info v-if="lineCode === '16'" ref="ticketInfo" />
<Jl3d-Device <Jl3d-Device
v-if="deviceif" v-if="deviceif"
v-show="deviceShow" v-show="deviceShow"
@ -110,6 +111,7 @@ import TmtDialog from '@/views/newMap/displayBaSiDi/tmt';
import AtrDialog from '@/views/newMap/displayBaSiDi/atr'; import AtrDialog from '@/views/newMap/displayBaSiDi/atr';
import TrainTrunkDetail from '@/views/newMap/displayBaSiDi/trainTrunkDetail'; import TrainTrunkDetail from '@/views/newMap/displayBaSiDi/trainTrunkDetail';
import DispatcherStation from './dispatcherStation'; import DispatcherStation from './dispatcherStation';
import TicketInfo from '../trainTicket/ticketInfo';
import Vue from 'vue'; import Vue from 'vue';
export default { export default {
@ -138,7 +140,8 @@ export default {
TmtDialog, TmtDialog,
AtrDialog, AtrDialog,
TrainTrunkDetail, TrainTrunkDetail,
DispatcherStation DispatcherStation,
TicketInfo
}, },
data() { data() {
return { return {
@ -274,6 +277,11 @@ export default {
if (list && list.length) { // if (list && list.length) { //
this.checkRoleChange(list); this.checkRoleChange(list);
} }
},
'$store.state.socket.ticketInfo': function(val) {
if (val) {
this.$refs.ticketInfo.doShow(val);
}
} }
}, },
async created() { async created() {

View File

@ -56,6 +56,7 @@
<script> <script>
import eMembers from './e-members'; import eMembers from './e-members';
import { EventBus } from '@/scripts/event-bus';
import { assignUsersPlayRoles } from '@/api/jointSimulation'; import { assignUsersPlayRoles } from '@/api/jointSimulation';
export default { export default {
name: 'MembersManage', name: 'MembersManage',
@ -186,7 +187,7 @@ export default {
ctcOperatorList.push(this.memberData[item.id]); ctcOperatorList.push(this.memberData[item.id]);
break; break;
case 'STATION_ASSISTANT': case 'STATION_ASSISTANT':
this.memberData[item.id].labelName = '车站助理' + +device.name + (item.name ? `-${item.name }` : ''); this.memberData[item.id].labelName = '车站助理-' + device.name + (item.name ? `-${item.name }` : '');
stationAssistantList.push(this.memberData[item.id]); stationAssistantList.push(this.memberData[item.id]);
break; break;
} }
@ -225,6 +226,7 @@ export default {
children: stationAssistantList children: stationAssistantList
} }
]; ];
EventBus.$emit('trainTicketMember', [...stationSupervisorList, ...stationAssistantList]);
this.$nextTick(() => { this.$nextTick(() => {
if (this.$refs.tree) { if (this.$refs.tree) {
this.$refs.tree.filter(this.queryMember); this.$refs.tree.filter(this.queryMember);

View File

@ -0,0 +1,64 @@
<template>
<el-dialog
title="画面切换"
:visible.sync="centerDialogVisible"
width="350px"
center
>
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="100px" class="demo-ruleForm">
<el-form-item label="画面名称:" prop="picture">
<el-select v-model="ruleForm.picture" placeholder="请选择">
<el-option
v-for="item in pictureList"
:key="item"
:label="item.name"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="changeForm()">切换</el-button>
</el-form-item>
</el-form>
</el-dialog>
</template>
<script>
export default {
name: 'CreatePicture',
data() {
return {
centerDialogVisible: false,
ruleForm: { picture: '' },
rules: {
picture: [{ required: true, message: '请选择画面', trigger: 'change' }]
}
};
},
computed: {
pictureList() {
return this.$store.state.map.map.pictureList;
}
},
methods: {
changeForm() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
this.$emit('pictureChanged', this.ruleForm.picture);
}
});
},
doClose() {
this.$refs.ruleForm.resetFields();
this.centerDialogVisible = false;
},
doShow() {
this.centerDialogVisible = true;
}
}
};
</script>
<style scoped>
</style>

View File

@ -0,0 +1,88 @@
<template>
<el-dialog
title="提示"
:visible.sync="centerDialogVisible"
width="350px"
center
>
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="100px" class="demo-ruleForm">
<el-form-item label="画面名称:" prop="name">
<el-input v-model="ruleForm.name" />
</el-form-item>
<el-form-item label="画面类型:" prop="type">
<el-select v-model="ruleForm.type" placeholder="请选择画面类型">
<el-option label="站间透明" value="lucency" />
</el-select>
</el-form-item>
<el-form-item label="所属车站:" prop="stationCode">
<el-select v-model="ruleForm.stationCode" placeholder="请选择">
<el-option
v-for="item in stationList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">创建</el-button>
</el-form-item>
</el-form>
</el-dialog>
</template>
<script>
import {mapGetters} from 'vuex';
import { saveMap } from '@/api/jmap/mapdraft';
export default {
name: 'CreatePicture',
data() {
return {
centerDialogVisible: false,
ruleForm: { name: '', type: '', stationCode: '', deviceList: [] },
rules: {
name: [{ required: true, message: '请输入画面名称', trigger: 'blur' }],
type: [{ required: true, message: '请选择画面类型', trigger: 'change' }],
stationCode: [{ required: true, message: '请选择车站', trigger: 'change' }]
}
};
},
computed: {
...mapGetters('map', [
'stationList'
])
},
methods: {
submitForm() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
const map = this.$store.state.map.map;
if (map && map.pictureList && map.pictureList.length) {
map.pictureList.push({...this.ruleForm});
} else {
map.pictureList = [{...this.ruleForm}];
}
if (map && parseInt(this.$route.params.mapId)) {
saveMap(Object.assign(map, { mapId: this.$route.params.mapId })).then(() => {
this.$message.success('创建画面成功!');
}).catch(() => {
this.$message.error('创建画面失败!');
});
}
}
});
},
doClose() {
this.$refs.ruleForm.resetFields();
this.centerDialogVisible = false;
},
doShow() {
this.centerDialogVisible = true;
}
}
};
</script>
<style scoped>
</style>

View File

@ -24,30 +24,37 @@
:selected="selected" :selected="selected"
:map-saveing="mapSaveing" :map-saveing="mapSaveing"
@saveMapEvent="saveMapEvent" @saveMapEvent="saveMapEvent"
@updateMapModel="updateMapModel" @createPicture="createPicture"
@changePicture="changePicture"
@setCenter="setCenter" @setCenter="setCenter"
/> />
</div> </div>
</div> </div>
<pop-menu ref="popMenu" :menu="menu" /> <pop-menu ref="popMenu" :menu="menu" />
<create-picture ref="createPicture" />
<change-picture ref="changePicture" @pictureChanged="pictureChanged" />
</div> </div>
</transition> </transition>
</template> </template>
<script> <script>
import { saveMap, verifyMap, getMapDetail, postBuildMapImport, getRouteNewList, getAutoReentryList } from '@/api/jmap/mapdraft'; import { saveMap, getMapDetail, postBuildMapImport } from '@/api/jmap/mapdraft';
import { ViewMode, TrainingMode, getDeviceMenuByDeviceType, DeviceMenu } from '@/scripts/ConstDic'; import { ViewMode, TrainingMode, getDeviceMenuByDeviceType, DeviceMenu } from '@/scripts/ConstDic';
import JlmapVisual from '@/views/newMap/jlmapNew/index'; import JlmapVisual from '@/views/newMap/jlmapNew/index';
import MapOperate from './mapoperate/index'; import MapOperate from './mapoperate/index';
import { EventBus } from '@/scripts/event-bus'; import { EventBus } from '@/scripts/event-bus';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import PopMenu from '@/components/PopMenu'; import PopMenu from '@/components/PopMenu';
import CreatePicture from './createPicture';
import ChangePicture from './changePicture';
export default { export default {
name: 'MapView', name: 'MapView',
components: { components: {
JlmapVisual, JlmapVisual,
MapOperate, MapOperate,
PopMenu PopMenu,
CreatePicture,
ChangePicture
}, },
data() { data() {
return { return {
@ -312,115 +319,6 @@ export default {
}); });
return flag; return flag;
}, },
verifySectionRelation(map) {
let flag = true;
const tipInfoList = [];
map.sectionList.forEach(section => {
section.type === '01' && map.sectionList.forEach(item => {
if (section.code !== item.code && item.type === '01' && this.checkSectionPointsHasCoincide(section.points, item.points) && !this.checkCorrelation(section, item)) {
tipInfoList.push('区段' + section.name + '(' + section.code + '): 或者区段' + item.name + '(' + item.code + ')' + '关联关系设置错误!' );
}
});
});
if (!tipInfoList.length) {
flag = true;
} else {
flag = false;
this.$messageBox(this.$t('tip.dataValidationFailed'));
this.tableToExcel(tipInfoList);
}
return flag;
},
async verifyInterlockDevice(map) {
let flag = true;
const tipInfoList = [];
const routeCodeList = [];
const cycleCodeList = [];
const resp1 = await getRouteNewList(this.$route.params.mapId, {pageSize:9999, pageNum:1});
if (resp1.data && resp1.data.list) {
resp1.data.list.forEach(item => {
routeCodeList.push(item.code);
});
}
const resp2 = await getAutoReentryList(this.$route.params.mapId, {pageSize:9999, pageNum:1});
if (resp2.data && resp2.data.list) {
resp2.data.list.forEach(item => {
cycleCodeList.push(item.code);
});
}
map.cycleButtonList.forEach(cycleButton => {
if (!cycleCodeList.includes(cycleButton.cycleCode)) {
flag = false;
tipInfoList.push('自动折返功能按钮' + cycleButton.name + '(' + cycleButton.code + ')' + '的关联自动折返数据不存在!');
}
});
map.automaticRouteButtonList.forEach(routeButton => {
if (!routeCodeList.includes(routeButton.automaticRouteCode)) {
flag = false;
tipInfoList.push('自动进路功能按钮' + routeButton.name + '(' + routeButton.code + ')' + '的关联进路数据不存在!');
}
});
if (!flag) {
this.$messageBox(this.$t('tip.dataValidationFailed'));
this.tableToExcel(tipInfoList);
}
return flag;
},
verifyStationPosition(map) {
let flag = true;
const tipInfoList = [];
map.stationStandList.forEach(stationStand => {
const section = this.$store.getters['map/getDeviceByCode'](stationStand.standTrackCode);
const list = [];
section && section.points.forEach(point => {
list.push(point.x);
});
if (stationStand.position.x > Math.max(...list) || stationStand.position.x < Math.min(...list)) {
flag = false;
tipInfoList.push('站台' + stationStand.name + '(' + stationStand.code + ')' + '位置偏移出关联站台轨,请检查关联站台轨是否正确!');
}
});
if (!flag) {
this.$messageBox(this.$t('tip.dataValidationFailed'));
this.tableToExcel(tipInfoList);
}
return flag;
},
verifySignalPosition(map) {
let flag = true;
const tipInfoList = [];
map.signalList.forEach(signal => {
const section = this.$store.getters['map/getDeviceByCode'](signal.sectionCode);
if (section) {
const offsetX = signal.positionPoint ? signal.positionPoint.x : 0;
const signalPositionX = signal.position.x - offsetX;
const max = Math.max(section.points[section.points.length - 1].x, section.points[0].x);
const min = Math.min(section.points[section.points.length - 1].x, section.points[0].x);
if (signalPositionX < min && signalPositionX > max) {
tipInfoList.push('信号机' + signal.name + '(' + signal.code + ')未在其关联的区段' + section.name + '(' + section.code + ')里');
}
} else {
tipInfoList.push('信号机' + signal.name + '(' + signal.code + ')所关联的区段不存在');
}
});
if (!tipInfoList.length) {
flag = true;
} else {
flag = false;
this.$messageBox(this.$t('tip.dataValidationFailed'));
this.tableToExcel(tipInfoList);
}
return flag;
},
checkPointsCoincide(point1, point2) { //
if (point1 && point2) {
return point1.x === point2.x && point1.y === point2.y;
}
return false;
},
checkSectionPointsHasCoincide(points1, points2) { //
return points1.length && points2.length && (this.checkPointsCoincide(points1[0], points2[0]) || this.checkPointsCoincide(points1[0], points2[points2.length - 1]) || this.checkPointsCoincide(points1[points1.length - 1], points2[points2.length - 1]) || this.checkPointsCoincide(points1[points1.length - 1], points2[0]));
},
checkCorrelation(section1, section2) { // checkCorrelation(section1, section2) { //
return section1.leftSectionCode === section2.code || section1.rightSectionCode === section2.code; return section1.leftSectionCode === section2.code || section1.rightSectionCode === section2.code;
}, },
@ -450,26 +348,6 @@ export default {
}); });
} }
}, },
async checkOver() {
if (this.$refs.jlmapVisual) {
const map = this.$store.state.map.map;
if (map && this.$route.params.mapId) {
const checkInterlockDevice = await this.verifyInterlockDevice(map);
if (this.verifySectionRelation(map) && this.verifySignalPosition(map) && checkInterlockDevice && this.verifyStationPosition(map)) {
verifyMap(this.$route.params.mapId).then(res => {
if (res.data.length) {
this.tableToExcel(res.data);
this.$messageBox(this.$t('tip.dataValidationFailed'));
} else {
this.$message.success(this.$t('tip.dataValidationSuccess'));
}
}).catch(() => {
this.$message.error(this.$t('tip.requestFailed'));
});
}
}
}
},
tableToExcel(data) { tableToExcel(data) {
const filterVal = ['index']; const filterVal = ['index'];
const arr = []; const arr = [];
@ -486,8 +364,11 @@ export default {
backRoute() { backRoute() {
this.$router.push({ path: `/design/usermap/home` }); this.$router.push({ path: `/design/usermap/home` });
}, },
updateMapModel(models) { // createPicture() { //
this.$store.dispatch('map/updateSystemMapDevices', models); this.$refs.createPicture.doShow();
},
changePicture() {
this.$refs.changePicture.doShow();
}, },
// //
revocation() { revocation() {
@ -554,6 +435,10 @@ export default {
device.instance.drawSelected(flag); device.instance.drawSelected(flag);
} }
} }
},
pictureChanged(picture) {
this.$refs.mapOperate.pictureChanged(picture);
this.$refs.jlmapVisual.pictureChanged(picture);
} }
} }
}; };

View File

@ -15,6 +15,7 @@
<script> <script>
import OperateProperty from './components/operateProperty'; import OperateProperty from './components/operateProperty';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import { deepAssign } from '@/utils/index';
export default { export default {
name: 'Device', name: 'Device',
components: { components: {
@ -22,19 +23,50 @@ export default {
}, },
data() { data() {
return { return {
editModel: {}, editModel: {
rules: {}, code: '',
typeList: [] pictureHide: false,
position: { x: 0, y: 0 }
},
rules: {}
}; };
}, },
computed: { computed: {
...mapGetters('map', [ ...mapGetters('map', [
'signalList', 'arrowList',
'automaticRouteButtonList',
'axleCounterResetButtonList',
'cycleButtonList',
'directionRodList',
'espList',
'indicatorLightList',
'lcList',
'lineList',
'outerFrameList',
'psdList',
'resourceList',
'responderList',
'sectionList', 'sectionList',
'switchList', 'signalButtonList',
'signalList',
'splitStationList',
'stationList', 'stationList',
'stationStandList' 'stationStandList',
'switchList',
'tbStrategyList',
'tempSpeedLimitList',
'textList',
'totalGuideLockButtonVOList',
'trainWindowList',
'zcList'
]), ]),
deviceList () {
return [...this.sectionList, ...this.signalList, ...this.switchList, ...this.psdList, ...this.stationStandList, ...this.stationList, ...this.trainWindowList,
...this.arrowList, ...this.automaticRouteButtonList, ...this.axleCounterResetButtonList, ...this.cycleButtonList, ...this.directionRodList, ...this.espList,
...this.indicatorLightList, ...this.lcList, ...this.lineList, ...this.outerFrameList, ...this.psdList, ...this.resourceList, ...this.responderList,
...this.signalButtonList, ...this.splitStationList, ...this.tbStrategyList, ...this.tempSpeedLimitList, ...this.textList, ...this.totalGuideLockButtonVOList,
...this.zcList];
},
form () { form () {
return { return {
labelWidth: '130px', labelWidth: '130px',
@ -46,34 +78,45 @@ export default {
draw: { draw: {
name: this.$t('map.drawData'), name: this.$t('map.drawData'),
item: [ item: [
{ prop: 'type', label: '类型', type: 'select', optionLabel: 'label', optionValue: 'value', options: this.typeList }, { prop: 'code', label: '设备:', type: 'select', optionLabel: 'name&&code', optionValue: 'code', options: this.deviceList, deviceChange: this.deviceChange },
{ prop: 'code', label: this.$t('map.textCode'), type: 'select', optionLabel: 'code', optionValue: 'code', options: this.textList, deviceChange: this.deviceChange }, { prop: 'pictureHide', label: '隐藏:', type: 'checkbox' },
{ prop: 'position', label: this.$t('map.textPoints'), type: 'coordinate', width: '120px', children: [ { prop: 'position', label: '位置:', type: 'coordinate', width: '120px', children: [
{ prop: 'position.x', firstLevel: 'position', secondLevel: 'x', label: 'x:', type: 'number', labelWidth: '25px', disabled: false }, { prop: 'position.x', firstLevel: 'position', secondLevel: 'x', label: 'x:', type: 'number', labelWidth: '25px', disabled: false },
{ prop: 'position.y', firstLevel: 'position', secondLevel: 'y', label: 'y:', type: 'number', labelWidth: '25px', disabled: false } { prop: 'position.y', firstLevel: 'position', secondLevel: 'y', label: 'y:', type: 'number', labelWidth: '25px', disabled: false }
] } ] }
] ]
},
map: {
name: this.$t('map.mapData'),
item: []
} }
} }
}; };
},
deviceList () {
return [];
} }
}, },
methods: { methods: {
updateMapModel() { deviceSelect(selected) {
this.$refs.form && this.$refs.form.resetFields();
const pointsDevice = ['LINE', 'POWER', 'SECTION'];
const pointDevice = ['OVERAP', 'TRAINWINDOW'];
this.editModel.code = selected.code;
this.editModel.name = selected.name;
if (selected && pointsDevice.includes(selected._type.toUpperCase())) {
this.editModel.position.x = selected.points[0].x;
this.editModel.position.y = selected.points[0].y;
} else if (selected && pointDevice.includes(selected._type.toUpperCase())) {
this.editModel.position.x = selected.point.x;
this.editModel.position.y = selected.point.y;
} else {
this.editModel.position.x = selected.position.x;
this.editModel.position.y = selected.position.y;
}
},
updateMapModel(data) {
this.$emit('updateMapModel', data);
}, },
clearDeviceSelect() { clearDeviceSelect() {
this.editModel = { code: '', pictureHide: false, position: {x:0, y:0} };
}, },
deviceChange() { deviceChange(val) {
this.deviceSelect(val);
} }
} }
}; };

View File

@ -8,7 +8,10 @@
<b>{{ mapInfo.name }}</b> <b>{{ mapInfo.name }}</b>
</el-tooltip> </el-tooltip>
</div> </div>
<el-button v-if="isSave" type="text" style="padding: 3px 0;float: right;" :disabled="$attrs.mapSaveing" @click="saveMapEvent">{{ $t('map.save') }}</el-button> <span>{{ pictureName }}</span>
<el-button type="text" style="padding: 3px 0;float: right;" @click="createPicture">新建</el-button>
<el-button type="text" style="padding: 3px 0;float: right;" @click="changePicture">切换</el-button>
<el-button v-if="isSave" type="text" style="padding: 3px 0;float: right;" :disabled="!pictureName" @click="saveMapEvent">{{ $t('map.save') }}</el-button>
</div> </div>
<el-tabs v-model="enabledTab" class="mapEdit" type="card"> <el-tabs v-model="enabledTab" class="mapEdit" type="card">
<el-tab-pane v-for="(each,index) in tabList" :key="index" :label="each.label" class="tab_pane_box" :name="each.name" :lazy="lazy"> <el-tab-pane v-for="(each,index) in tabList" :key="index" :label="each.label" class="tab_pane_box" :name="each.name" :lazy="lazy">
@ -49,11 +52,13 @@ export default {
return { return {
lazy: true, lazy: true,
tabList:[ tabList:[
{label: '设备', name: 'device', menus: DeviceDraft}, {label: '设备', name: 'Device', menus: DeviceDraft},
{label: '多选', name: 'multiSelect', menus: MultiSelect} {label: '多选', name: 'MultiSelect', menus: MultiSelect}
], ],
pictureList: [],
selectDevice:'', selectDevice:'',
enabledTab: 'Line' enabledTab: 'Device',
pictureName: ''
}; };
}, },
computed: { computed: {
@ -62,12 +67,10 @@ export default {
} }
}, },
watch: { watch: {
'$store.state.map.updateCount': function () {
this.$refs[this.enabledTab][0].edit();
},
selected(val) { selected(val) {
if (this.selected) { if (this.selected) {
this.$nextTick(() => { this.$nextTick(() => {
console.log(this.$refs[this.enabledTab]);
this.$refs[this.enabledTab][0].deviceSelect(val); this.$refs[this.enabledTab][0].deviceSelect(val);
}); });
} }
@ -76,11 +79,12 @@ export default {
mounted() {}, mounted() {},
methods: { methods: {
handleSelectControlPage(device) { handleSelectControlPage(device) {
const type = device._type;
if (this.selectDevice) { if (this.selectDevice) {
this.enabledTab = this.selectDevice; this.enabledTab = this.selectDevice;
} else if (device._type === 'CheckBox') {
this.enabledTab = 'MultiSelect';
} else { } else {
this.enabledTab = type; this.enabledTab = 'Device';
} }
}, },
deviceSelect(type) { deviceSelect(type) {
@ -88,6 +92,15 @@ export default {
}, },
saveMapEvent() { saveMapEvent() {
this.$emit('saveMapEvent'); this.$emit('saveMapEvent');
},
createPicture() {
this.$emit('createPicture');
},
changePicture() {
this.$emit('changePicture');
},
pictureChanged(picture) {
this.pictureName = picture.name;
} }
} }
}; };
@ -99,6 +112,8 @@ export default {
height:17px; height:17px;
text-overflow:ellipsis; text-overflow:ellipsis;
white-space:nowrap; white-space:nowrap;
display: flex;
align-items: center;
} }
.el-dropdown-link { .el-dropdown-link {
cursor: pointer; cursor: pointer;

View File

@ -1,13 +1,100 @@
<template> <template>
<div>
</template> <div class="list-box">
<div
v-for="nor in deviceList"
:key="nor.code"
class="list-content"
@mouseenter="mouseenter(nor)"
@mouseleave="mouseleave(nor)"
>
<div class="name">{{ nor.name || nor.code }}</div>
<div class="close" @click="delList(nor, item.list)"><i class="el-icon-close" /></div>
</div>
</div>
</div></template>
<script> <script>
import {mapGetters} from 'vuex';
export default { export default {
name: "multiSelect" name: 'MultiSelect',
} data() {
return {
modelList: [],
deviceList: []
};
},
computed: {
...mapGetters('map', ['seclectDeviceList'])
},
methods: {
deviceSelect(selected) {
if (selected && selected._type.toUpperCase() == 'CheckBox'.toUpperCase()) {
this.deviceList = [...this.seclectDeviceList];
}
},
mouseenter(model) {
if (model._type == 'Section') {
model.instance.mouseover();
}
},
mouseleave(model) {
if (model._type == 'Section') {
model.instance.mouseout();
}
},
//
delList(model, list) {
list.forEach((nor, index) => {
if (nor.code == model.code) {
list.splice(index, 1);
}
});
this.seclectDeviceList.forEach((item, index) => {
if (item.code == model.code) {
this.seclectDeviceList.splice(index, 1);
}
});
},
clearData() {
}
}
};
</script> </script>
<style scoped> <style lang="scss" scoped>
.list-box {
overflow: hidden;
.list-content {
float: left;
background: #e2e2e2;
margin: 5px;
border-radius: 5px;
height: 30px;
line-height: 30px;
padding-left: 10px;
padding-right: 3px;
cursor: pointer;
&:hover {
background: #ccc;
}
.name {
float: left;
margin-right: 20px;
}
.close {
float: left;
width: 23px;
cursor: pointer;
}
}
}
.title-box {
padding-left: 10px;
border-left: 4px solid red;
margin-bottom: 10px;
}
</style> </style>

View File

@ -20,7 +20,7 @@
<span>线上发车</span> <span>线上发车</span>
</div> </div>
<div style="font-size: 16px;margin-top: 60px;display: flex;align-items: center;justify-content: end;"> <div style="font-size: 16px;margin-top: 60px;display: flex;align-items: center;justify-content: end;">
<div><span style="color: #f00;">{{ showCentralizedStationName }}</span>站名印车站值班员签名</div> <div><span style="color: #f00;">{{ greenLicenseForm.stationSeal }}</span>站名印车站值班员签名</div>
<el-input v-model="greenLicenseForm.signature" :disabled="switchFlag" size="small" style="width: 80px;" /> <el-input v-model="greenLicenseForm.signature" :disabled="switchFlag" size="small" style="width: 80px;" />
</div> </div>
<div style="font-size: 16px;margin-top: 15px;display: flex;align-items: center;margin-bottom: 10px;justify-content: end;"> <div style="font-size: 16px;margin-top: 15px;display: flex;align-items: center;margin-bottom: 10px;justify-content: end;">
@ -31,6 +31,18 @@
<el-input v-model="greenLicenseForm.day" :disabled="switchFlag" size="small" style="width: 80px;" /> <el-input v-model="greenLicenseForm.day" :disabled="switchFlag" size="small" style="width: 80px;" />
<div>日填发</div> <div>日填发</div>
</div> </div>
<div v-if="switchFlag" style="text-align: center;">
<el-select v-model="memberId" size="small" style="width: 200px" placeholder="请选择">
<el-option
v-for="item in giveMemberList"
:key="item.id"
:label="item.labelName"
:disabled="item.userId == userId"
:value="item.id"
/>
</el-select>
<el-button size="small" style="margin-left: 10px;" type="primary" @click="giveTicket">给予</el-button>
</div>
</div> </div>
</template> </template>
@ -46,15 +58,30 @@ export default {
type: Boolean, type: Boolean,
required: true required: true
}, },
showCentralizedStationName: { giveMemberList: {
type: String, type: Array,
required: true default() {
return [];
}
} }
}, },
data() { data() {
return { return {
memberId: ''
}; };
},
computed: {
userId() {
return this.$store.state.user ? this.$store.state.user.id : '';
}
},
methods: {
giveTicket() {
if (this.memberId) {
this.$emit('giveTicket', { ticketId: this.greenLicenseForm.id, memberId: this.memberId });
this.memberId = '';
}
}
} }
}; };
</script> </script>

View File

@ -25,8 +25,8 @@
<el-tabs v-model="activeName" type="card" @tab-click="handleClick"> <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
<el-tab-pane label="路票填写" name="first"> <el-tab-pane label="路票填写" name="first">
<rail-ticket v-if="attachmentType === 'RAIL_TICKET'" :switch-flag="false" :ticket-form="ticketForm" :station-list="stationList" /> <rail-ticket v-if="attachmentType === 'RAIL_TICKET'" :switch-flag="false" :ticket-form="ticketForm" :station-list="stationList" />
<green-licence v-else-if="attachmentType === 'GREEN_LICENCE'" :switch-flag="false" :green-license-form="greenLicenseForm" :show-centralized-station-name="showCentralizedStationName" /> <green-licence v-else-if="attachmentType === 'GREEN_LICENCE'" :switch-flag="false" :green-license-form="greenLicenseForm" />
<red-licence v-else-if="attachmentType === 'RED_LICENCE'" :show-centralized-station-name="showCentralizedStationName" :switch-flag="false" :red-license-form="redLicenseForm" /> <red-licence v-else-if="attachmentType === 'RED_LICENCE'" :switch-flag="false" :red-license-form="redLicenseForm" />
<div style="text-align: center;"> <div style="text-align: center;">
<el-button size="small" style="margin-top: 10px;" type="primary" @click="submit">提交</el-button> <el-button size="small" style="margin-top: 10px;" type="primary" @click="submit">提交</el-button>
</div> </div>
@ -34,17 +34,17 @@
<el-tab-pane label="路票查询" name="second"> <el-tab-pane label="路票查询" name="second">
<div v-if="attachmentType === 'RAIL_TICKET'" style="height: 450px;overflow-y: auto;"> <div v-if="attachmentType === 'RAIL_TICKET'" style="height: 450px;overflow-y: auto;">
<template v-for="(item, index) in railTicketList"> <template v-for="(item, index) in railTicketList">
<rail-ticket :key="index" :switch-flag="true" :ticket-form="item" :station-list="stationList" /> <rail-ticket :key="index" :switch-flag="true" :ticket-form="item" :station-list="stationList" :give-member-list="giveMemberList" @giveTicket="giveTicket" />
</template> </template>
</div> </div>
<div v-else-if="attachmentType === 'GREEN_LICENCE'" style="height: 450px;overflow-y: auto;"> <div v-else-if="attachmentType === 'GREEN_LICENCE'" style="height: 450px;overflow-y: auto;">
<template v-for="(item, index) in greenLicenseList"> <template v-for="(item, index) in greenLicenseList">
<green-licence :key="index" :show-centralized-station-name="showCentralizedStationName" :switch-flag="true" :green-license-form="item" /> <green-licence :key="index" :switch-flag="true" :green-license-form="item" :give-member-list="giveMemberList" @giveTicket="giveTicket" />
</template> </template>
</div> </div>
<div v-else-if="attachmentType === 'RED_LICENCE'" style="height: 450px;overflow-y: auto;"> <div v-else-if="attachmentType === 'RED_LICENCE'" style="height: 450px;overflow-y: auto;">
<template v-for="(item, index) in redLicenseList"> <template v-for="(item, index) in redLicenseList">
<red-licence :key="index" :show-centralized-station-name="showCentralizedStationName" :switch-flag="true" :red-license-form="item" /> <red-licence :key="index" :switch-flag="true" :red-license-form="item" :give-member-list="giveMemberList" @giveTicket="giveTicket" />
</template> </template>
</div> </div>
</el-tab-pane> </el-tab-pane>
@ -132,6 +132,7 @@ import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuO
import RailTicket from './trainTicket'; import RailTicket from './trainTicket';
import GreenLicence from './greenLicence'; import GreenLicence from './greenLicence';
import RedLicence from './redLicence'; import RedLicence from './redLicence';
import { EventBus } from '@/scripts/event-bus';
export default { export default {
name: 'Index', name: 'Index',
components: { components: {
@ -146,13 +147,14 @@ export default {
railTicketList: [], railTicketList: [],
greenLicenseList: [], greenLicenseList: [],
redLicenseList: [], redLicenseList: [],
giveMemberList: [],
activeName: 'first', activeName: 'first',
ticketForm: { ticketForm: {
number: '', number: '',
tripNumber: '', tripNumber: '',
station: '', station: '',
nextStation: '', nextStation: '',
stationSeal: true, stationSeal: '',
no: '', no: '',
deputy: false deputy: false
}, },
@ -161,7 +163,7 @@ export default {
reason: '', reason: '',
tripNumber: '', tripNumber: '',
line: '', line: '',
stationSeal: true, stationSeal: '',
signature: '', signature: '',
year: '', year: '',
moon: '', moon: '',
@ -183,7 +185,7 @@ export default {
noticeHour2: '', noticeHour2: '',
noticeMinute2: '', noticeMinute2: '',
noticeTripNumber2: '', noticeTripNumber2: '',
stationSeal: true, stationSeal: '',
signature: '', signature: '',
year: '', year: '',
moon: '', moon: '',
@ -205,21 +207,37 @@ export default {
computed: { computed: {
...mapGetters('map', [ ...mapGetters('map', [
'stationList' 'stationList'
]), ])
showCentralizedStationName() { },
if (this.$store.state.map.showCentralizedStationCode) { watch: {
const station = this.$store.getters['map/getDeviceByCode'](this.$store.state.map.showCentralizedStationCode); '$store.state.map.showCentralizedStationCode': function (val) {
if (station) { return station.name; } else { return ''; } const station = this.$store.getters['map/getDeviceByCode'](val);
} else { return ''; } if (station) {
this.ticketForm.station = station.name;
this.ticketForm.stationSeal = station.name;
this.greenLicenseForm.stationSeal = station.name;
this.redLicenseForm.stationSeal = station.name;
}
} }
}, },
mounted() {
EventBus.$on('trainTicketMember', (memberList) => {
this.giveMemberList = memberList;
});
},
methods: { methods: {
doClose() { doClose() {
this.trainTicketShow = false; this.trainTicketShow = false;
}, },
doShow() { doShow() {
this.trainTicketShow = true; this.trainTicketShow = true;
this.ticketForm.station = this.showCentralizedStationName; const station = this.$store.getters['map/getDeviceByCode'](this.$store.state.map.showCentralizedStationCode);
if (station) {
this.ticketForm.station = station.name;
this.ticketForm.stationSeal = station.name;
this.greenLicenseForm.stationSeal = station.name;
this.redLicenseForm.stationSeal = station.name;
}
}, },
handleClick() { handleClick() {
if (this.activeName === 'second') { if (this.activeName === 'second') {
@ -232,11 +250,12 @@ export default {
} }
}, },
clearData() { clearData() {
this.ticketForm = {number: '', tripNumber: '', station: '', nextStation: '', stationSeal: true, no: '', deputy: false}; const station = this.$store.getters['map/getDeviceByCode'](this.$store.state.map.showCentralizedStationCode) || {};
this.greenLicenseForm = {number: '', reason: '', tripNumber: '', line: '', stationSeal: true, signature: '', year: '', moon: '', day: '' }; this.ticketForm = {number: '', tripNumber: '', station: station.name, nextStation: '', stationSeal: station.name, no: '', deputy: false};
this.greenLicenseForm = {number: '', reason: '', tripNumber: '', line: '', stationSeal: station.name, signature: '', year: '', moon: '', day: '' };
this.redLicenseForm = {number: '', licenseReceived: true, licenseTripNumber: '', licenseStation: '', licenseNextStation: '', licenseHour: '', this.redLicenseForm = {number: '', licenseReceived: true, licenseTripNumber: '', licenseStation: '', licenseNextStation: '', licenseHour: '',
licenseMinute: '', licenseTripNumber2: '', noticeTripNumber: '', noticeHour1: '', noticeMinute1: '', noticeTripNumber1: '', noticeHour2: '', licenseMinute: '', licenseTripNumber2: '', noticeTripNumber: '', noticeHour1: '', noticeMinute1: '', noticeTripNumber1: '', noticeHour2: '',
noticeMinute2: '', noticeTripNumber2: '', stationSeal: true, signature: '', year: '', moon: '', day: ''}; noticeMinute2: '', noticeTripNumber2: '', stationSeal: station.name, signature: '', year: '', moon: '', day: ''};
}, },
query() { query() {
const params = { type: this.attachmentType }; const params = { type: this.attachmentType };
@ -265,10 +284,18 @@ export default {
} }
commitOperate(menuOperate.Rail.railFillInTicket, params, 3).then(({valid, operate})=>{ commitOperate(menuOperate.Rail.railFillInTicket, params, 3).then(({valid, operate})=>{
this.clearData(); this.clearData();
this.ticketForm.station = this.showCentralizedStationName; this.$message.success('提交路票成功!');
}).catch(()=>{ }).catch(()=>{
this.$message.error('提交路票失败!'); this.$message.error('提交路票失败!');
}); });
},
giveTicket(params) {
commitOperate(menuOperate.Rail.railGiveTicketTo, params, 3).then(({valid, operate}) => {
this.$message.success('给予路票成功!');
this.query();
}).catch(()=> {
this.$message.error('给予路票失败!');
});
} }
} }
}; };

View File

@ -20,11 +20,11 @@
<span>分发出的第</span> <span>分发出的第</span>
<el-input v-model="redLicenseForm.licenseTripNumber2" :disabled="switchFlag" style="display: inline;" size="small" class="inline-input" /> <el-input v-model="redLicenseForm.licenseTripNumber2" :disabled="switchFlag" style="display: inline;" size="small" class="inline-input" />
<span>次列车邻站到达通知</span> <span>次列车邻站到达通知</span>
<el-radio-group v-model="redLicenseForm.licenseReceived" :disabled="switchFlag" style="display: inline;"> <el-radio-group v-model="redLicenseForm.licenseReceived" :disabled="switchFlag" style="display: inline;">
<el-radio label="已"></el-radio> <el-radio :label="true"></el-radio>
<el-radio label="未" style="margin-left: 5px;"></el-radio> <el-radio :label="false" style="margin-left: 5px;"></el-radio>
</el-radio-group> </el-radio-group>
<span>收到</span> <span>收到</span>
</div> </div>
<div style="text-align: center;font-size: 28px;margin-top: 10px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div> <div style="text-align: center;font-size: 28px;margin-top: 10px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
<div style="font-size: 16px;margin-top: 10px;text-indent: 36px;"> <div style="font-size: 16px;margin-top: 10px;text-indent: 36px;">
@ -48,7 +48,7 @@
<span>次列车</span> <span>次列车</span>
</div> </div>
<div style="font-size: 16px;margin-top: 60px;display: flex;align-items: center;justify-content: end;"> <div style="font-size: 16px;margin-top: 60px;display: flex;align-items: center;justify-content: end;">
<div><span style="color: #f00;">{{ showCentralizedStationName }}</span>站名印车站值班员签名</div> <div><span style="color: #f00;">{{ redLicenseForm.stationSeal }}</span>站名印车站值班员签名</div>
<el-input v-model="redLicenseForm.signature" :disabled="switchFlag" size="small" style="width: 80px;" /> <el-input v-model="redLicenseForm.signature" :disabled="switchFlag" size="small" style="width: 80px;" />
</div> </div>
<div style="font-size: 16px;margin-top: 15px;display: flex;align-items: center;margin-bottom: 10px;justify-content: end;"> <div style="font-size: 16px;margin-top: 15px;display: flex;align-items: center;margin-bottom: 10px;justify-content: end;">
@ -59,6 +59,18 @@
<el-input v-model="redLicenseForm.day" :disabled="switchFlag" size="small" style="width: 80px;" /> <el-input v-model="redLicenseForm.day" :disabled="switchFlag" size="small" style="width: 80px;" />
<div>日填发</div> <div>日填发</div>
</div> </div>
<div v-if="switchFlag" style="text-align: center;">
<el-select v-model="memberId" size="small" style="width: 200px" placeholder="请选择">
<el-option
v-for="item in giveMemberList"
:key="item.id"
:label="item.labelName"
:disabled="item.userId == userId"
:value="item.id"
/>
</el-select>
<el-button size="small" style="margin-left: 10px;" type="primary" @click="giveTicket">给予</el-button>
</div>
</div> </div>
</template> </template>
@ -74,15 +86,30 @@ export default {
type: Boolean, type: Boolean,
required: true required: true
}, },
showCentralizedStationName: { giveMemberList: {
type: String, type: Array,
required: true default() {
return [];
}
} }
}, },
data() { data() {
return { return {
memberId: ''
}; };
},
computed: {
userId() {
return this.$store.state.user ? this.$store.state.user.id : '';
}
},
methods: {
giveTicket() {
if (this.memberId) {
this.$emit('giveTicket', { ticketId: this.redLicenseForm.id, memberId: this.memberId });
this.memberId = '';
}
}
} }
}; };
</script> </script>

View File

@ -0,0 +1,90 @@
<template>
<el-dialog
title="路票"
:visible="trainTicketShow"
width="640px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
center
>
<div v-for="(item, index) in trainTicketList" :key="index">
<train-ticket v-if="item.type === 'RAIL_TICKET'" :station-list="stationList" :switch-flag="true" :ticket-form="item" :give-member-list="giveMemberList" @giveTicket="giveTicket" />
<green-licence v-else-if="item.type === 'GREEN_LICENCE'" :switch-flag="true" :green-license-form="item" :give-member-list="giveMemberList" @giveTicket="giveTicket" />
<red-licence v-else-if="item.type === 'RED_LICENCE'" :switch-flag="true" :red-license-form="item" :give-member-list="giveMemberList" @giveTicket="giveTicket" />
</div>
</el-dialog>
</template>
<script>
import TrainTicket from './trainTicket';
import RedLicence from './redLicence';
import GreenLicence from './greenLicence';
import {mapGetters} from 'vuex';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import { EventBus } from '@/scripts/event-bus';
export default {
name: 'TicketInfo',
components: {
TrainTicket,
RedLicence,
GreenLicence
},
data() {
return {
trainTicketShow: false,
trainTicketList: [],
giveMemberList: []
};
},
computed: {
...mapGetters('map', [
'stationList'
])
},
mounted() {
EventBus.$on('trainTicketMember', (memberList) => {
this.giveMemberList = memberList;
});
},
methods: {
doClose() {
this.trainTicketList = [];
this.trainTicketShow = false;
},
doShow(info) {
this.trainTicketShow = true;
this.trainTicketList.push(info);
},
giveTicket(params) {
const index = this.trainTicketList.findIndex(item => item.id === params.ticketId);
commitOperate(menuOperate.Rail.railGiveTicketTo, params, 3).then(({valid, operate}) => {
this.$message.success('给予路票成功!');
// this.doClose();
this.trainTicketList.splice(index, 1);
}).catch(()=> {
this.$message.error('给予路票失败!');
});
}
}
};
</script>
<style scoped>
/deep/.inline-input .el-input__inner{
width: 80px;
}
/deep/.station-input .el-input__inner{
width: 200px;
height: 50px;
line-height: 50px;
font-size: 40px;
}
/deep/.el-radio__label{
font-size: 16px;
}
/deep/.el-radio{
margin-right: 0;
}
</style>

View File

@ -25,14 +25,23 @@
</div> </div>
</div> </div>
<div style="display: flex; justify-content: space-between;font-size: 18px;margin-top: 25px;margin-bottom: 25px;align-items: center;"> <div style="display: flex; justify-content: space-between;font-size: 18px;margin-top: 25px;margin-bottom: 25px;align-items: center;">
<div style="margin-left: 50px;"><span style="color: #f00">{{ ticketForm.station }}</span>站名印</div> <div style="margin-left: 50px;"><span style="color: #f00">{{ ticketForm.stationSeal }}</span>站名印</div>
<div> <div>
<span>编号</span> <span>编号</span>
<el-input v-model="ticketForm.no" size="small" :disabled="switchFlag" style="width: 80px;" /> <el-input v-model="ticketForm.no" size="small" :disabled="switchFlag" style="width: 80px;" />
</div> </div>
</div> </div>
<div style="text-align: center;"> <div v-if="switchFlag" style="text-align: center;">
<!-- <el-select v-model=""></el-select>--> <el-select v-model="memberId" size="small" style="width: 200px" placeholder="请选择">
<el-option
v-for="item in giveMemberList"
:key="item.id"
:label="item.labelName"
:disabled="item.userId == userId"
:value="item.id"
/>
</el-select>
<el-button size="small" style="margin-left: 10px;" type="primary" @click="giveTicket">给予</el-button>
</div> </div>
</div> </div>
</template> </template>
@ -52,12 +61,31 @@ export default {
stationList: { stationList: {
type: Array, type: Array,
required: true required: true
},
giveMemberList: {
type: Array,
default() {
return [];
}
} }
}, },
data() { data() {
return { return {
memberId: ''
}; };
},
computed: {
userId() {
return this.$store.state.user ? this.$store.state.user.id : '';
}
},
methods: {
giveTicket() {
if (this.memberId) {
this.$emit('giveTicket', { ticketId: this.ticketForm.id, memberId: this.memberId });
this.memberId = '';
}
}
} }
}; };
</script> </script>