大铁线路调整8

This commit is contained in:
fan 2022-04-22 14:40:31 +08:00
parent 140f6306ed
commit 5e30c99d2c
13 changed files with 678 additions and 86 deletions

View File

@ -492,7 +492,19 @@ export const menuOperate = {
operation: OperationEvent.Train.deleteDestinationTrainId.menu.operation, operation: OperationEvent.Train.deleteDestinationTrainId.menu.operation,
cmdType: CMD.TrainWindow.CMD_TRAIN_SET_MANUAL cmdType: CMD.TrainWindow.CMD_TRAIN_SET_MANUAL
} }
} },
CTC: {
//接预
receivingNotice: {
operation: OperationEvent.CTCCommand.receivingNotice.menu.operation,
cmdType: CMD.CTC.CTC_RECEIVING_NOTICE
},
// 发预
departureNotice: {
operation: OperationEvent.CTCCommand.departureNotice.menu.operation,
cmdType: CMD.CTC.CTC_DEPARTURE_NOTICE
}
}
}; };
@ -530,12 +542,15 @@ export function commitOperate(operate, paramList, over, fillStep = {}) {
Object.assign(step, fillStep); Object.assign(step, fillStep);
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
console.log(step, '=============');
store.dispatch('training/nextNew', step).then(({ valid }) => { store.dispatch('training/nextNew', step).then(({ valid }) => {
console.log(valid, '===11');
if (valid) { if (valid) {
store.dispatch('menuOperation/handleBreakFlag', { break: true }); store.dispatch('menuOperation/handleBreakFlag', { break: true });
} }
resolve({ valid: valid, operate: {...step} }); resolve({ valid: valid, operate: {...step} });
}).catch(error=>{ }).catch(error=>{
console.log(error, '===22');
reject(error); reject(error);
}); });
}); });

View File

@ -0,0 +1,146 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm stand-stop-time"
title="作业窗口"
:visible.sync="show"
width="500px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div>
<el-form :model="form" class="demo-form-inline">
<el-form-item label="作业任务:">
<el-input v-model="form.work" type="textarea" :rows="2" :disabled="true"/>
</el-form-item>
<el-form-item label="操作时间:">
<el-input v-model="form.time" type="textarea" :rows="1" :disabled="true"/>
</el-form-item>
<el-form-item label="操作信息:">
<el-input v-model="form.info" type="textarea" :rows="2" :disabled="true"/>
</el-form-item>
</el-form>
<div style="text-align: center;"><el-button v-if="type === 'rec'" style="width: 200px;" @click="commit(menuOperate.CTC.receivingNotice)">完成接预</el-button></div>
<div style="text-align: center;margin-top: 10px;"><el-button v-if="type === 'dep'" style="width: 200px;" @click="commit(menuOperate.CTC.departureNotice)">完成发预</el-button></div>
<div style="text-align: center;margin-top: 10px;"><el-button v-if="type === 'rec'" style="width: 200px;" disabled>取消接预</el-button></div>
<div style="text-align: center;margin-top: 10px;"><el-button v-if="type === 'dep'" style="width: 200px;" disabled>取消接预</el-button></div>
<el-button @click="doClose" style="height: 50px;width: 50px;position: relative;left: 370px;">关闭</el-button>
</div>
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import CancelMouseState from '@/mixin/CancelMouseState';
import { getUploadFile } from '@/api/pdf';
import { DrawingType } from '@/scripts/ConstDic';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name: 'TrainMove',
mixins: [
CancelMouseState
],
data() {
return {
selected: null,
selectedType: '',
dialogShow: false,
menuOperate: menuOperate,
type: '',
stationCode: '',
tripNumber: '',
loading: false,
tableData: [],
deviceTypeList: [
{ label: '区段', value: 'Section' },
{ label: '信号机', value: 'Signal' },
{ label: '道岔', value: 'Switch' },
{ label: '车站', value: 'Station' }
],
deviceIdList: [],
form: {
work: '',
time: '',
info: ''
}
};
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
title() {
if (this.selectedType === 'normStudy') {
return '规范学习';
} else if (this.selectedType === 'clCaAn') {
return '经典案例分析';
} else if (this.selectedType === 'baDeTr') {
return '基础设备培训';
} else {
return '图纸检索';
}
}
},
methods: {
doShow(row, type, stationCode) {
this.type = type;
this.loading = true;
this.stationCode = stationCode;
this.tripNumber = row.tripNumber;
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit(type) {
this.loading = true;
//menuOperate.CTC.receivingNotice
commitOperate(type, {stationCode: this.stationCode, tripNumber: this.tripNumber}, 3).then(({valid, operate})=>{
this.loading = false;
if (valid) {
this.doClose();
}
}).catch((error) => {
this.loading = false;
this.doClose();
console.error(error);
this.$refs.noticeInfo.doShow();
});
}
}
};
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -18px;
padding: 0 5px;
background-color: #F0F0F0;
}
.text-button{
color: #148ad0;
cursor:pointer;
}
.text-button:active{
color: #b938e1;
text-decoration: underline;
}
.text-button:hover{
color: #b938e1;
text-decoration: underline;
}
</style>

View File

@ -0,0 +1,302 @@
<template>
<el-dialog v-dialogDrag class="ningbo-01__systerm route-setting" :title="title" :visible.sync="show" :width="showExpand? '1100px': '300px'" :before-close="doClose" :z-index="2000" :modal="false" :close-on-click-modal="false">
<el-row :gutter="24">
<el-col :span="showExpand? 6: 24">
<el-row class="header">
<el-col :span="11"><span>集中站</span></el-col>
<el-col :span="11" :offset="2"><span>始端信号机</span></el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-input v-model="stationName" size="small" disabled />
</el-col>
<el-col :span="11" :offset="2">
<el-input v-model="signalName" size="small" disabled />
</el-col>
</el-row>
<el-row style="margin-top: 10px; line-height: 30px;">
<el-col :span="11"><span>进路列表</span></el-col>
<el-col :span="11" :offset="2">
<el-button class="expand" @click="expandPath">{{ expandTitle }}</el-button>
</el-col>
</el-row>
<el-table ref="table" :data="tempData" border :cell-style="tableStyle" style="width: 100%; height: 460px; margin-top:10px" size="mini" highlight-current-row :show-header="false" @row-click="clickEvent">
<el-table-column :id="domIdChoose" prop="name" style="margin-left:30px" />
</el-table>
<el-row justify="center" class="button-group">
<el-col :span="8" :offset="4">
<el-button :id="domIdConfirm" type="primary" :loading="loading" :disabled="commitDisabled" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-col>
<el-col v-show="showExpand" :span="showExpand? 18: 0">
<map-visual ref="map" :map-data="mapData" :width="780" :height="600" />
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="ningbo-01__systerm" />
<confirm-tip ref="confirmTip" @close="doClose" />
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import { menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import { deepAssign } from '@/utils/index';
import { mouseCancelState} from '@/jmapNew/theme/components/utils/menuItemStatus';
import { mapGetters } from 'vuex';
// import { dbReadData } from '@/utils/indexedDb';
import ConfirmTip from './childDialog/confirmTip';
import MapVisual from './mapVisual';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
export default {
name: 'RouteSelection',
components: {
NoticeInfo,
ConfirmTip,
MapVisual
},
data() {
return {
tempData: [],
beforeSectionList: [],
beforeSwitchList: [],
showExpand: true,
dialogShow: false,
loading: false,
selected: null,
row: null,
operation: '',
display: true,
stationName: '',
signalName: '',
mapData: null,
tableStyle: {
'border-bottom': 'none'
}
};
},
computed: {
...mapGetters('map', [
'overlapData'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdChoose() {
return this.dialogShow ? OperationEvent.Signal.arrangementRoute.choose.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Signal.arrangementRoute.menu.domId : '';
},
title() {
return '进路设置';
},
expandTitle() {
return this.showExpand ? '收起进路预览' : '展开进路预览';
},
commitDisabled() {
let disabled = true;
if (this.row) {
disabled = !this.row.canSetting;
}
return disabled;
}
},
watch: {
'$store.state.map.keyboardEnterCount': function (val) {
if (this.show && !this.commitDisabled) {
this.commit();
}
}
},
created() {
this.mapData = JSON.parse(JSON.stringify(this.$store.state.map.map));
},
methods: {
expandPath() {
this.showExpand = !this.showExpand;
},
doShow(operate, selected, tempData) {
this.$root.$emit('dialogOpen', selected);
this.selected = selected;
//
if (!this.dialogShow) {
this.signalName = '';
this.stationName = '';
if (selected && selected._type.toUpperCase() === 'Signal'.toUpperCase()) {
this.signalName = selected.name;
const station = this.$store.getters['map/getDeviceByCode'](selected.stationCode);
if (station) {
this.stationName = station.name;
}
}
const routeList = JSON.parse(JSON.stringify(tempData || []));
this.tempData = routeList;
this.tempData.forEach(route => {
if (route.turnBack) {
route.name = `${route.name}(Z)`;
}
});
this.operation = operate.operation;
}
this.dialogShow = true;
this.$nextTick(function () {
this.loadData();
this.$store.dispatch('training/emitTipFresh');
});
},
loadData() {
this.beforeSwitchList = [];
this.beforeSectionList = [];
if (this.mapData) {
this.$refs.map.loadData(this.mapData);
}
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.row = null;
this.restoreBeforeDevices();
this.$root.$emit('dialogClose', this.selected);
this.$refs.table.setCurrentRow();
this.$store.dispatch('training/emitTipFresh');
mouseCancelState(this.selected);
},
restoreBeforeDevices() {
//
if (this.beforeSectionList && this.beforeSectionList.length) {
this.beforeSectionList.forEach(el => {
el.routeLock = false;
el.preBlue = false;
el.preGreen = false;
});
}
if (this.beforeSwitchList && this.beforeSwitchList.length) {
this.beforeSwitchList.forEach(el => {
// N- R- NO-() EX-
el.pos = 'NO';
el.routeLock = false;
});
}
this.$refs.map.updateMapDevice([...this.beforeSectionList, ...this.beforeSwitchList]);
this.beforeSectionList = [];
this.beforeSwitchList = [];
},
clickEvent(row, event, column) {
this.row = row;
if (row) {
//
this.row.canSetting = true;
this.restoreBeforeDevices();
const containSectionList = [];
const containSwitchList = [];
if (!row.setting) {
const signalBegin = this.$refs.map.getDeviceByCode(row.startSignalCode);
const signalEnd = this.$refs.map.getDeviceByCode(row.endSignalCode);
const diff = signalBegin.position.x - signalEnd.position.x;
const code = diff > 0 ? row.endSignalCode : row.startSignalCode;
const signal = diff > 0 ? signalEnd : signalBegin;
const switchCodeList = [];
this.$refs.map.setCenterWithOffset(code, 50, signal.position.y);
if (row.routeSectionList && row.routeSectionList.length) {
row.routeSectionList.forEach(code => {
const section = deepAssign({}, this.$refs.map.getDeviceByCode(code));
if (section.logicSectionCodeList && section.logicSectionCodeList.length) {
section.logicSectionCodeList.forEach(sectionCode => {
containSectionList.push({code: sectionCode, preGreen: true, preBlue: false});
});
} else {
containSectionList.push({code, preGreen: true, preBlue: false});
}
if (section.switchSection && section.switch) {
switchCodeList.push(section.switch.code);
}
});
}
if (row.routeSwitchList && row.routeSwitchList.length) {
row.routeSwitchList.filter(el => switchCodeList.includes(el.switchCode)).forEach(el => {
const swch = deepAssign({}, this.$refs.map.getDeviceByCode(el.switchCode));
const sectionA = this.$refs.map.getDeviceByCode(swch.sectionACode);
const sectionB = this.$refs.map.getDeviceByCode(swch.sectionBCode);
const sectionC = this.$refs.map.getDeviceByCode(swch.sectionCCode);
// normalPosition: el.normal, reversePosition: !el.normal
containSwitchList.push({code: el.switchCode, routeLock: true, pos:el.pos });
if (el.normal) {
containSectionList.push({code: sectionA.code, routeLock:true });
containSectionList.push({code: sectionC.code, preBlue: true });
} else {
containSectionList.push({code: sectionC.code, routeLock:true });
containSectionList.push({code: sectionB.code, preBlue: true });
}
});
}
this.$refs.map.updateMapDevice([...containSectionList, ...containSwitchList]);
this.beforeSectionList = containSectionList;
this.beforeSwitchList = containSwitchList;
//
const operate = {
operation: OperationEvent.Signal.arrangementRoute.choose.operation,
val: row.code
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
});
} else {
this.$refs.noticeInfo.doShow('当前进路不允许排列, 与其他进路可能发生冲突');
}
}
},
commit() {
if (this.row && this.row.canSetting) {
this.loading = true;
commitOperate(menuOperate.Signal.arrangementRoute, {routeCode:this.row.code}, 1).then(({valid, operate})=>{
this.loading = false;
if (valid) {
const signal = this.$store.getters['map/getDeviceByCode'](this.row.startSignalCode);
operate.message = `命令:进路设置<br/>始端信号机:${signal.name}<br/>进路:${this.row.name}`;
// this.doClose();
this.$refs.confirmTip.doShow(operate);
}
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
});
}
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
}
};
</script>

View File

@ -1,25 +1,25 @@
<template> <template>
<div class="menus" :style="{width: width + 'px'}"> <div class="menus" :style="{width: width + 'px'}">
<!--<menu-bar v-show="isShowBar" ref="menuBar" :selected="selected" />--> <!--<menu-bar v-show="isShowBar" ref="menuBar" :selected="selected" />-->
<div class="alarm-window"> <div v-if="mode === 'liansuo'" class="alarm-window">
<div v-for="elem in alarmMessages" :key="elem.id" style="font-size: 14px;"> <div v-for="elem in alarmMessages" :key="elem.id" style="font-size: 14px;">
{{ elem.message }} {{ elem.message }}
</div> </div>
</div> </div>
<div class="device-status-window"> <div class="device-status-window">
<div class="device-status-button" style="background: #0f0;">联锁I</div> <div class="device-status-button" :style="{background: mode === 'liansuo' ? '#0f0': '#f00'}" @click="selectedMode('liansuo')">联锁I</div>
<div class="device-status-button" style="background: #f00;">CTC</div> <div class="device-status-button" :style="{background: mode === 'ctc' ? '#0f0': '#f00'}" @click="selectedMode('ctc')">CTC</div>
<!--<div class="device-status-button" style="background: #f00;">联锁II</div>--> <!--<div class="device-status-button" style="background: #f00;">联锁II</div>-->
<!--<div class="device-status-button" style="background: #0f0;">操作A</div>--> <!--<div class="device-status-button" style="background: #0f0;">操作A</div>-->
<!--<div class="device-status-button" style="background: #ff0;">操作B</div>--> <!--<div class="device-status-button" style="background: #ff0;">操作B</div>-->
<!--<div class="device-status-button" style="background: #f00;">维修机</div>--> <!--<div class="device-status-button" style="background: #f00;">维修机</div>-->
</div> </div>
<div class="warning-window"> <div v-if="mode === 'liansuo'" class="warning-window">
<div v-for="elem in warningMessages" :key="elem.id" style="font-size: 14px;color: #ff0"> <div v-for="elem in warningMessages" :key="elem.id" style="font-size: 14px;color: #ff0">
{{ elem.message }} {{ elem.message }}
</div> </div>
</div> </div>
<div style="width: calc(100% - 200px);position: fixed;height: 30px;background: #808080;z-index: 9;bottom: 0;left: 0;display: flex;"> <div v-if="mode === 'liansuo'" style="width: calc(100% - 200px);position: fixed;height: 30px;background: #808080;z-index: 9;bottom: 0;left: 0;display: flex;">
<div style="width: 60%;height: 30px;line-height: 30px;text-align: center;">提示信息窗</div> <div style="width: 60%;height: 30px;line-height: 30px;text-align: center;">提示信息窗</div>
<div style="width: 40%;height: 30px;line-height: 30px;text-align: center;border-left: 2px #ccc solid;">{{ '操控A:主机' + ' ' + dateString + ' ' + time }}</div> <div style="width: 40%;height: 30px;line-height: 30px;text-align: center;border-left: 2px #ccc solid;">{{ '操控A:主机' + ' ' + dateString + ' ' + time }}</div>
</div> </div>
@ -95,7 +95,8 @@ export default {
{ id: 7, message: '这是预警信息七' }, { id: 7, message: '这是预警信息七' },
], ],
time: '00:00:00', time: '00:00:00',
dateString: '' dateString: '',
mode: 'liansuo'
} }
}, },
computed: { computed: {
@ -145,6 +146,9 @@ export default {
if (months.length < 2) { months = '0' + months; } if (months.length < 2) { months = '0' + months; }
if (dates.length < 2) { dates = '0' + dates; } if (dates.length < 2) { dates = '0' + dates; }
this.dateString = years + months + dates; this.dateString = years + months + dates;
},
selectedMode(mode) {
this.mode = mode;
} }
} }
}; };
@ -460,6 +464,7 @@ export default {
height: 30px; height: 30px;
text-align: center; text-align: center;
line-height: 30px; line-height: 30px;
cursor: pointer;
} }
.warning-window { .warning-window {
width: 400px; width: 400px;

View File

@ -116,7 +116,8 @@ export default {
{ label: '全线限速', value: 'LimitControl' }, { label: '全线限速', value: 'LimitControl' },
{ label: '司机', value: 'Driver' }, { label: '司机', value: 'Driver' },
{ label: '列车', value: 'Train' }, { label: '列车', value: 'Train' },
{ label: '方向杆', value: 'DirectionRod'} { label: '方向杆', value: 'DirectionRod'},
{ label: 'CTC', value: 'CTC' }
], ],
simulationDeviceList:[ simulationDeviceList:[

View File

@ -366,5 +366,9 @@ export default {
}, },
DirectionRod: { DirectionRod: {
CMD_DIRECTION_CHANGE: {value: 'Direction_Change', label: '切换方向'} CMD_DIRECTION_CHANGE: {value: 'Direction_Change', label: '切换方向'}
} },
CTC: {
CTC_RECEIVING_NOTICE: {value: 'CTC_RECEIVING_NOTICE', label: '接预'},
CTC_DEPARTURE_NOTICE: {value: 'CTC_DEPARTURE_NOTICE', label: '发预'}
}
}; };

View File

@ -3536,7 +3536,21 @@ export const OperationEvent = {
domId: '_Tips-Control-StationControl-Confirm{TOP}' domId: '_Tips-Control-StationControl-Confirm{TOP}'
} }
} }
} },
CTCCommand: {
receivingNotice: {
menu: {
operation: '1100',
domId: '_Tips-CTC-ReceivingNotice-Menu{TOP}'
}
},
departureNotice: {
menu: {
operation: '1101',
domId: '_Tips-CTC-DepartureNotice-Menu{TOP}'
}
}
}
}; };

View File

@ -197,6 +197,10 @@ function handle(state, data) {
case 'Simulation_Trip_Plan_Change': case 'Simulation_Trip_Plan_Change':
state.simulationPlanChange = msg; state.simulationPlanChange = msg;
break; break;
// 占线板信息
case 'Simulation_RailCtcStatus':
state.railCtcStatusMsg = msg;
break;
} }
} }
@ -347,7 +351,8 @@ const socket = {
simulationPause: false, simulationPause: false,
simulationPslStatus: [], // PSL面板按钮状态信息 simulationPslStatus: [], // PSL面板按钮状态信息
simulationPlanChange:{}, // 运行图加线/抽线/变化推送消息 simulationPlanChange:{}, // 运行图加线/抽线/变化推送消息
loggedOutMsg: '' loggedOutMsg: '',
railCtcStatusMsg: {}, // 占线板信息
}, },
getters: { getters: {
}, },

View File

@ -4,25 +4,27 @@
:visible.sync="dialogVisible" :visible.sync="dialogVisible"
width="99%" width="99%"
top="5vh" top="5vh"
class="lineBoard"
center center
:before-close="handleClose"> :before-close="handleClose">
<div style="height: 500px; overflow-y: auto;background: #DFE3E6;padding: 7px;"> <div style="height: 500px; overflow-y: auto;background: #DFE3E6;padding: 7px;">
<div :key="item.id" v-for="item in infoList" style="display: flex; justify-content: space-between;border-top: 1px solid #fff;padding: 3px;height: 36px;align-items: center;"> <div style="width: 100%;display: flex;align-items: center;margin-bottom: 10px;">
<div> <div
<el-select v-model="item.sectionCode" filterable placeholder="请选择" size="mini" style="width: 120px;"> :key="item.code"
<el-option v-for="item in stationList"
v-for="elem in sectionList" class="tab-box"
:key="elem.code" @click="selectStandCode(item.code)"
:label="elem.name" :style="{background: selectCode === item.code ? '#F1F1F1': '#DBDBDB', color: selectCode === item.code ? '#000': '#ccc'}">
:value="elem.code" {{ item.name }}
/>
</el-select>
</div> </div>
<div>{{item.trainCode}}</div> </div>
<div style="background: #FFCBEC;border: 1px solid #315FD1;border-radius: 3px;font-size: 10px;"></div> <div :key="item.id" v-for="item in infoList" style="display: flex; justify-content: space-between;border-top: 1px solid #fff;padding: 3px;height: 36px;align-items: center;">
<div>列车未接近</div> <div>{{item.trackName}}</div>
<div>{{item.tripNumber}}</div>
<div style="background: #FFCBEC;border: 1px solid #315FD1;border-radius: 3px;font-size: 10px;">{{ item.trainType?'客':'' }}</div>
<div>{{item.trainDistanceInfo}}</div>
<div> <div>
<el-select v-model="item.sectionStatus" filterable placeholder="请选择" size="mini" style="width: 120px;"> <el-select v-model="item.process" placeholder="请选择" size="mini" style="width: 120px;" :disabled="true">
<el-option <el-option
v-for="elem in sectionStatusList" v-for="elem in sectionStatusList"
:key="elem.value" :key="elem.value"
@ -31,32 +33,42 @@
/> />
</el-select> </el-select>
</div> </div>
<div> <div style="display: flex;">
<div>始发</div> <div :style="{ background: item.receivingNotice ? '#29CA42': '#ccc' }" class="button-box-fir" @click="doShowRecDep(item,'rec')">接预</div>
<div>15:00</div> <div class="button-box-sec" :style="{ background: handleBackground(item.receivingRouteLock, item.receivingRouteCode) }" >{{ '接路' + (item.receivingRouteLock ? '':getRouteName(item.receivingRouteCode)) }}</div>
<div :style="{ background: item.arrive ? '#29CA42': '#ccc' }" class="button-box-fir" style="margin-left: 10px;">到点</div>
</div> </div>
<div> <div>
<div>图定始发</div> <div>{{item.arriveTime}}</div>
<div>15:00</div> <div>{{item.departureTime}}</div>
</div>
<div>
<div>{{ item.planArriveTime }}</div>
<div>{{ item.planDepartureTime }}</div>
</div> </div>
<div>起点-->终点</div> <div>起点-->终点</div>
<div>{{ item.trainCode2 }}</div> <div style="display: flex;">
<div>{{ item.sectionName }}</div> <div :style="{ background: item.departureNotice ? '#29CA42': '#ccc' }" class="button-box-fir" @click="doShowRecDep(item,'dep')">发预</div>
<div class="button-box-sec" :style="{ background: handleBackground(item.departureRouteLock, item.departureRouteCode) }" >{{ '发路' + (item.departureRouteLock ? '':getRouteName(item.departureRouteCode)) }}</div>
<div :style="{ background: item.departure ? '#29CA42': '#ccc' }" class="button-box-fir" style="margin-left: 10px;">发点</div>
</div>
<div>{{ item.tripNumber }}</div>
<div>{{ item.trackName }}</div>
</div> </div>
</div> </div>
<div style="display: flex; justify-content: center;"> <!--<div style="display: flex; justify-content: center;">-->
<img class="img-box" :src="arrowPic" /> <!--<img class="img-box" :src="arrowPic" />-->
<img class="img-box" :src="picT3" /> <!--<img class="img-box" :src="picT3" />-->
<img class="img-box" :src="controlPanelPic" /> <!--<img class="img-box" :src="controlPanelPic" />-->
<img class="img-box" :src="trainPic" /> <!--<img class="img-box" :src="trainPic" />-->
<img class="img-box" :src="controlPanel2Pic"/> <!--<img class="img-box" :src="controlPanel2Pic"/>-->
<img class="img-box" :src="linkPic"/> <!--<img class="img-box" :src="linkPic"/>-->
<img class="img-box" :src="cameraPic"/> <!--<img class="img-box" :src="cameraPic"/>-->
</div> <!--</div>-->
<div style="display: flex;margin-top: 5px;justify-content: space-around;background: #DEE2E5;"> <div style="display: flex;margin-top: 5px;justify-content: space-around;background: #DEE2E5;">
<div style="width: 49%;margin-top: 10px;"> <div style="width: 49%;margin-top: 10px;">
<div style="display: flex;align-items: center;"> <div style="display: flex;align-items: center;">
<div style="background: #0f0;">{{ '进路序列模式:&lt;可修改&gt;' }}</div> <div style="background: #0f0;">{{ `进路序列模式:&lt;${readOnly ? '只读':'可修改'}&gt;` }}</div>
<el-button size="mini" style="padding: 7px 4px;">修改申请</el-button> <el-button size="mini" style="padding: 7px 4px;">修改申请</el-button>
<el-button size="mini" style="padding: 7px 4px;">只读申请</el-button> <el-button size="mini" style="padding: 7px 4px;">只读申请</el-button>
<el-button size="mini" style="padding: 7px 4px;margin-left: 30px;">查找列车</el-button> <el-button size="mini" style="padding: 7px 4px;margin-left: 30px;">查找列车</el-button>
@ -99,20 +111,35 @@
> >
<el-table-column width="50" label="序号" align="center"> <el-table-column width="50" label="序号" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<div :style="{ background: scope.$index? '#f00':'#ff0' }" >{{ scope.$index }}</div> <!--:style="{ background: scope.$index? '#f00':'#ff0' }" -->
<div>{{ scope.$index }}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column property="date" label="注意确认"/> <el-table-column property="date" label="注意确认"/>
<el-table-column property="train" label="车次"/> <el-table-column property="tripNumber" label="车次"/>
<el-table-column property="sectionName" label="股道"/> <el-table-column property="trackName" label="股道"/>
<el-table-column property="touchSelf" label="自触"/> <el-table-column property="touchSelf" label="自触"/>
<el-table-column property="type" label="类型"/> <el-table-column property="type" label="类型"/>
<el-table-column property="status" label="状态"/> <el-table-column property="status" label="状态"/>
<el-table-column property="startTime" label="开始时间"/> <el-table-column property="startTime" label="开始时间"/>
<el-table-column property="planTime" label="计划时间"/> <el-table-column property="planTime" label="计划时间"/>
<el-table-column property="direction" label="方向"/> <el-table-column property="direction" label="方向"/>
<el-table-column property="description" label="序列描述" /> <el-table-column property="routeCode" label="序列描述">
<template slot-scope="scope">
<div>{{getRouteName(scope.row.routeCode)}}</div>
</template>
</el-table-column>
</el-table> </el-table>
<div style="width: 100%;display: flex;align-items: center;margin: 5px 0;">
<div
:key="item.code"
v-for="item in stationList"
class="tab-box"
@click="selectStandCode1(item.code)"
:style="{background: selectCode1 === item.code ? '#F1F1F1': '#DBDBDB', color: selectCode1 === item.code ? '#000': '#ccc'}">
{{ item.name }}
</div>
</div>
</div> </div>
<div style="width: 49%;margin-top: 10px;"> <div style="width: 49%;margin-top: 10px;">
<div style="display: flex;align-items: center;"> <div style="display: flex;align-items: center;">
@ -138,7 +165,7 @@
<el-button size="mini">发送机车</el-button> <el-button size="mini">发送机车</el-button>
</div> </div>
<el-table <el-table
:data="tableData" :data="tableData1"
style="width: 100%;margin-top: 10px;" style="width: 100%;margin-top: 10px;"
highlight-current-row highlight-current-row
border border
@ -157,6 +184,7 @@
</el-table> </el-table>
</div> </div>
</div> </div>
<rec-dep ref="recDep" />
</el-dialog> </el-dialog>
</template> </template>
@ -169,11 +197,18 @@
import TrainPic from '@/assets/datie/train.png'; import TrainPic from '@/assets/datie/train.png';
import LinkPic from '@/assets/datie/link.png'; import LinkPic from '@/assets/datie/link.png';
import CameraPic from '@/assets/datie/camera.png'; import CameraPic from '@/assets/datie/camera.png';
import RecDep from '@/jmapNew/theme/datie_02/menus/dialog/recDep'
export default { export default {
name: 'lineBoard', name: 'lineBoard',
components: {
RecDep
},
data() { data() {
return { return {
dialogVisible: false, dialogVisible: false,
selectCode: '',
selectCode1: '',
readOnly: '',
arrowPic: ArrowPic, arrowPic: ArrowPic,
picT3: PicT3, picT3: PicT3,
controlPanelPic: ControlPanelPic, controlPanelPic: ControlPanelPic,
@ -185,53 +220,89 @@
andDown: 'all', andDown: 'all',
unknow: '', unknow: '',
unknow1: '', unknow1: '',
tableData: [{id: 1},{id: 2}], tableData: [],
tableData1: [],
unknowList1: [{label: '全部机车', value: 'all'}], unknowList1: [{label: '全部机车', value: 'all'}],
unknowList: [{label: 'J101-执行中', value: 'J101'}], unknowList: [{label: 'J101-执行中', value: 'J101'}],
andDownList: [{ label: '全部', value: 'all' }, { label: '上行', value: 'up' }, { label: '下行', value: 'down' }], andDownList: [{ label: '全部', value: 'all' }, { label: '上行', value: 'up' }, { label: '下行', value: 'down' }],
sectionStatusList: [ sectionStatusList: [
{label: '办理发车进路', value: ''} {label: '准备接车', value: 'RECEIVING'},
{label: '办理接车进路', value: 'RECEIVING_ROUTE'},
{label: '列车到达(通过)报点', value: 'ARRIVE'},
{label: '发车进路办理、发车报点', value: 'DEPARTURE'},
{label: '流程终止', value: 'FINISH'}
], ],
infoList : [ stationDataMap: {},
{ id: 1 }, infoList : []
{ id: 2 },
{ id: 3 },
{ id: 4 },
{ id: 5 },
{ id: 6 },
{ id: 7 },
{ id: 8 },
{ id: 9 },
{ id: 10 },
{ id: 11 },
{ id: 12 },
{ id: 13 },
{ id: 14 },
{ id: 15 }
]
} }
}, },
computed: { computed: {
...mapGetters('map', [ ...mapGetters('map', [
'sectionList', 'sectionList',
'stationList'
]) ])
}, },
watch: {
'$store.state.socket.railCtcStatusMsg': function (val) {
if (val && val.length) {
val.forEach(item => {
if (item) {
this.stationDataMap[item.stationCode] = { trackView: item.trackView, routeSequence: item.routeSequence };
}
});
this.infoList = this.stationDataMap[this.selectCode] ? this.stationDataMap[this.selectCode].trackView.lines: [];
this.tableData = this.stationDataMap[this.selectCode1] ? this.stationDataMap[this.selectCode1].routeSequence.lines: [];
this.readOnly = this.stationDataMap[this.selectCode1] ? this.stationDataMap[this.selectCode1].routeSequence.readOnly: false;
};
}
},
methods: { methods: {
handleClose() { handleClose() {
this.dialogVisible = false; this.dialogVisible = false;
}, },
doShow() { doShow() {
this.dialogVisible = true; this.dialogVisible = true;
this.selectCode = this.stationList[0].code;
this.selectCode1 = this.stationList[0].code;
this.infoList = this.stationDataMap[this.selectCode] ? this.stationDataMap[this.selectCode].trackView.lines: [];
this.tableData = this.stationDataMap[this.selectCode1] ? this.stationDataMap[this.selectCode1].routeSequence.lines: [];
this.readOnly = this.stationDataMap[this.selectCode1] ? this.stationDataMap[this.selectCode1].routeSequence.readOnly: false;
}, },
getScope(scope) { selectStandCode(code) {
console.log(scope, '=====',scope.$index); this.selectCode = code;
this.infoList = this.stationDataMap[this.selectCode].trackView.lines;
},
selectStandCode1(code) {
this.selectCode1 = code;
this.tableData = this.stationDataMap[this.selectCode1].routeSequence.lines;
this.readOnly = this.stationDataMap[this.selectCode1].routeSequence.readOnly;
},
getRouteName(code){
if(code){
const route = this.$store.state.map.routeData[code];
return route? route.name: ''
} else { return '' }
},
handleBackground(flag, code) {
if (flag){
return '#29CA42';
} else if(code) {
const route = this.$store.state.map.routeData[code];
return route && route.atsControl ? '#FFBF2F' : '#CCCCCC'
}
},
filterTrain(val ,row){
console.log(val, row);
},
doShowRecDep(row, type) {
this.$refs.recDep.doShow(row, type, this.selectCode);
} }
} }
}; };
</script> </script>
<style scoped> <style scoped>
/deep/ .el-dialog__header{ /deep/ .lineBoard .el-dialog__header{
background: #B4B6B9; background: #B4B6B9;
} }
/deep/ .el-dialog__body{ /deep/ .el-dialog__body{
@ -254,4 +325,33 @@
margin: 10px 5px 5px 5px; margin: 10px 5px 5px 5px;
background: #FAFAFA; background: #FAFAFA;
} }
.tab-box {
padding: 5px;
text-align: center;
width: 33% ;
font-size: 18px;
border: 2px solid #F5F5F5;
cursor: pointer;
border-radius: 5px;
margin-left: 5px;
}
.button-box-sec{
border: 1px solid #ccc;
border-radius: 4px;
font-size: 14px;
background: #ccc;
padding: 5px;
cursor: pointer;
margin-left: 10px;
width: 160px;
text-align: center;
}
.button-box-fir{
border: 1px solid #ccc;
border-radius: 4px;
font-size: 14px;
background: #ccc;
padding: 5px;
cursor: pointer;
}
</style> </style>

View File

@ -7,9 +7,9 @@
<!-- 设备视图 --> <!-- 设备视图 -->
<el-button v-if="jl3dmodelShow && !isContest && project !== 'bjd'" size="small" @click="jumpjlmap3dmodel">{{ jl3dmodel }}</el-button> <el-button v-if="jl3dmodelShow && !isContest && project !== 'bjd'" size="small" @click="jumpjlmap3dmodel">{{ jl3dmodel }}</el-button>
<!-- 三维视图/数字沙盘 --> <!-- 三维视图/数字沙盘 -->
<el-button v-if="jl3dnameShow && !isContest && project !== 'bjd'" size="small" @click="jumpjlmap3d">{{ jl3dname }}</el-button> <el-button v-if="jl3dnameShow && !isContest && project !== 'bjd' && $route.query.lineCode !== '16'" size="small" @click="jumpjlmap3d">{{ jl3dname }}</el-button>
<!-- cctv视图 --> <!-- cctv视图 -->
<el-button v-if="jl3dnameShow && !isContest && project !== 'bjd'" size="small" @click="jumpjl3dpassflow">{{ jl3dpassflow }}</el-button> <el-button v-if="jl3dnameShow && !isContest && project !== 'bjd' && $route.query.lineCode !== '16'" size="small" @click="jumpjl3dpassflow">{{ jl3dpassflow }}</el-button>
<!-- 客流规划视图 --> <!-- 客流规划视图 -->
<!-- <el-button v-if="trafficplanShow && project == 'bjd' && !isContest" size="small" @click="jumpjl3dtrafficplan">{{ jl3dtrafficplan }}</el-button> <!-- <el-button v-if="trafficplanShow && project == 'bjd' && !isContest" size="small" @click="jumpjl3dtrafficplan">{{ jl3dtrafficplan }}</el-button>
<el-button v-if="trafficplanShow && project == 'bjd' && !isContest" size="small" @click="jumpjl3dtraffictrain">{{ $t('display.demon.traffictraintext') }}</el-button> --> <el-button v-if="trafficplanShow && project == 'bjd' && !isContest" size="small" @click="jumpjl3dtraffictrain">{{ $t('display.demon.traffictraintext') }}</el-button> -->
@ -23,7 +23,6 @@
<el-button v-if="schedulePreviewShow" type="primary" size="small" @click="schedulingView">派班计划预览</el-button> <el-button v-if="schedulePreviewShow" type="primary" size="small" @click="schedulingView">派班计划预览</el-button>
<el-button v-if="isContest" size="small" :disabled="practiceDisabled" @click="fieldPractice">实操练习</el-button> <el-button v-if="isContest" size="small" :disabled="practiceDisabled" @click="fieldPractice">实操练习</el-button>
<el-button v-if="isContest" size="small" @click="goTheoryQuiz">理论考试</el-button> <el-button v-if="isContest" size="small" @click="goTheoryQuiz">理论考试</el-button>
<el-button v-if="$route.query.lineCode === '16'" size="small" @click="showLineBoard">占线板</el-button>
<el-button v-if="messageBoard" size="small" @click="messageBoardShow">留言板</el-button> <el-button v-if="messageBoard" size="small" @click="messageBoardShow">留言板</el-button>
<!-- v-if="isContest" --> <!-- v-if="isContest" -->
<el-button v-if="!isLocal" size="small" @click="contectUs">联系方式</el-button> <el-button v-if="!isLocal" size="small" @click="contectUs">联系方式</el-button>
@ -40,7 +39,6 @@
<scheduling v-if="scheduleLoadShow" ref="scheduling" :group="group" /> <scheduling v-if="scheduleLoadShow" ref="scheduling" :group="group" />
<scheduling-view v-if="schedulePreviewShow" ref="schedulingView" :group="group" /> <scheduling-view v-if="schedulePreviewShow" ref="schedulingView" :group="group" />
<contect-us ref="contectUs" /> <contect-us ref="contectUs" />
<line-board ref="lineBoard" />
</div> </div>
</template> </template>
<script> <script>
@ -52,7 +50,6 @@ import Scheduling from '@/views/newMap/displayNew/demon/scheduling';
import SchedulingView from '@/views/newMap/displayNew/demon/schedulingView'; import SchedulingView from '@/views/newMap/displayNew/demon/schedulingView';
import { EventBus } from '@/scripts/event-bus'; import { EventBus } from '@/scripts/event-bus';
import ContectUs from '@/views/newMap/displayNew/dispatherContest/contectUs'; import ContectUs from '@/views/newMap/displayNew/dispatherContest/contectUs';
import LineBoard from '../displayCity/lineBoard';
import { getPostByProjectCode } from '@/api/learn'; import { getPostByProjectCode } from '@/api/learn';
import { ProjectCode } from '@/scripts/ProjectConfig'; import { ProjectCode } from '@/scripts/ProjectConfig';
export default { export default {
@ -62,8 +59,7 @@ export default {
Jl3dDrive, Jl3dDrive,
Scheduling, Scheduling,
SchedulingView, SchedulingView,
ContectUs, ContectUs
LineBoard
}, },
props:{ props:{
isAllShow:{ isAllShow:{
@ -181,9 +177,6 @@ export default {
this.btnWidth = 0; this.btnWidth = 0;
} }
}, },
showLineBoard() {
this.$refs.lineBoard.doShow();
},
jumpjlmap3dmodel() { jumpjlmap3dmodel() {
if (this.deviceif == false) { if (this.deviceif == false) {
this.deviceif = true; this.deviceif = true;

View File

@ -30,9 +30,9 @@
<el-button type="danger" size="small" @click="handleQuitQuest">退出剧本</el-button> <el-button type="danger" size="small" @click="handleQuitQuest">退出剧本</el-button>
</template> </template>
<template v-else-if="!projectDevice"> <template v-else-if="!projectDevice">
<el-button v-if="project !== 'srsandbox'" type="success" :disabled="isDisable" size="small" @click="selectBeginTime">{{ $t('display.demon.drivingByPlan') }}</el-button> <el-button v-if="project !== 'srsandbox' && $route.query.lineCode !== '16' " type="success" :disabled="isDisable" size="small" @click="selectBeginTime">{{ $t('display.demon.drivingByPlan') }}</el-button>
<!-- isDisable&& --> <!-- isDisable&& -->
<el-button v-if="isAdmin" v-loading="pauseLoading" :type="simulationPaused?'warning':'primary'" size="small" @click="startOrPause">{{ simulationPaused?'开始':'暂停' }}</el-button> <el-button v-if="isAdmin && $route.query.lineCode !== '16' " v-loading="pauseLoading" :type="simulationPaused?'warning':'primary'" size="small" @click="startOrPause">{{ simulationPaused?'开始':'暂停' }}</el-button>
<el-button type="danger" size="small" @click="end">{{ $t('display.demon.initialize') }}</el-button> <el-button type="danger" size="small" @click="end">{{ $t('display.demon.initialize') }}</el-button>
</template> </template>
</template> </template>

View File

@ -12,15 +12,16 @@
</el-select> </el-select>
<template v-if="!dataError"> <template v-if="!dataError">
<el-button-group v-if="project !== 'bjd'"> <el-button-group v-if="project !== 'bjd'">
<el-button v-if="isLocalStation && $route.query.lineCode!='08'" size="small" @click="goIbp">IBP盘</el-button> <el-button v-if="$route.query.lineCode === '16'" size="small" @click="showLineBoard">占线板</el-button>
<el-button v-if="isLocalStation && $route.query.lineCode!='08' && $route.query.lineCode!='16'" size="small" @click="goIbp">IBP盘</el-button>
<el-button v-if="isScheduling && isDepot" size="small" type="primary" @click="runPlanEditShow">运行图编辑</el-button> <el-button v-if="isScheduling && isDepot" size="small" type="primary" @click="runPlanEditShow">运行图编辑</el-button>
<!-- 加载剧本 --> <!-- 加载剧本 -->
<el-button v-if="isDemon && !isScheduling && !isContest && !isDepoltSim" size="small" :disabled="viewDisabled" type="success" @click="viewRunQuest">{{ $t('display.schema.loadScript') }}</el-button> <el-button v-if="isDemon && !isScheduling && !isContest && !isDepoltSim && $route.query.lineCode!='16'" size="small" :disabled="viewDisabled" type="success" @click="viewRunQuest">{{ $t('display.schema.loadScript') }}</el-button>
<!-- 运行图加载 --> <!-- 运行图加载 -->
<!-- notScript && --> <!-- notScript && -->
<el-button v-if="running" size="small" :disabled="viewDisabled" @click="viewRunPlan">{{ $t('display.schema.previewRunDiagram') }}</el-button> <el-button v-if="running" size="small" :disabled="viewDisabled" @click="viewRunPlan">{{ $t('display.schema.previewRunDiagram') }}</el-button>
<!-- notScript && --> <!-- notScript && -->
<el-button v-if="!running" size="small" type="warning" @click="loadRunPlan">{{ $t('display.schema.loadRunDiagram') }}</el-button> <el-button v-if="!running && $route.query.lineCode!='16'" size="small" type="warning" @click="loadRunPlan">{{ $t('display.schema.loadRunDiagram') }}</el-button>
</el-button-group> </el-button-group>
<el-button v-if="!isScheduling && project !== 'bjd'" size="small" :type="faultMode ? '':'primary' " @click="changeOperateMode()">{{ faultMode?'切换到普通模式[Tab]':'切换到故障模式[Tab]' }}</el-button> <el-button v-if="!isScheduling && project !== 'bjd'" size="small" :type="faultMode ? '':'primary' " @click="changeOperateMode()">{{ faultMode?'切换到普通模式[Tab]':'切换到故障模式[Tab]' }}</el-button>
@ -34,6 +35,7 @@
<run-plan-view ref="runPlanView" :group="group" /> <run-plan-view ref="runPlanView" :group="group" />
<!-- 加载剧本列表弹窗 --> <!-- 加载剧本列表弹窗 -->
<add-quest ref="addQuest" @selectQuest="selectQuest" /> <add-quest ref="addQuest" @selectQuest="selectQuest" />
<line-board ref="lineBoard" />
<!-- <run-plan-edit v-if="isScheduling && isDepot" ref="runPlanEdit" /> --> <!-- <run-plan-edit v-if="isScheduling && isDepot" ref="runPlanEdit" /> -->
</div> </div>
</template> </template>
@ -42,6 +44,7 @@ import SelectStation from './selectStation';
import RunPlanLoad from './demon/runPlanLoad'; import RunPlanLoad from './demon/runPlanLoad';
import RunPlanView from './demon/runPlanView'; import RunPlanView from './demon/runPlanView';
import FaultChoose from './demon/faultChoose'; import FaultChoose from './demon/faultChoose';
import LineBoard from '../displayCity/lineBoard';
import AddQuest from './demon/addQuest'; import AddQuest from './demon/addQuest';
import { OperateMode } from '@/scripts/ConstDic'; import { OperateMode } from '@/scripts/ConstDic';
import { getByGroupStationList } from '@/api/jmap/map'; import { getByGroupStationList } from '@/api/jmap/map';
@ -62,7 +65,8 @@ export default {
FaultChoose, FaultChoose,
AddQuest, AddQuest,
// RunPlanEdit, // RunPlanEdit,
SelectStation SelectStation,
LineBoard
}, },
props: { props: {
offset: { offset: {
@ -206,6 +210,9 @@ export default {
} }
}); });
}, },
showLineBoard() {
this.$refs.lineBoard.doShow();
},
changeOperateMode() { changeOperateMode() {
this.faultMode = !this.faultMode; this.faultMode = !this.faultMode;
let mode = OperateMode.NORMAL; let mode = OperateMode.NORMAL;

View File

@ -173,7 +173,7 @@
// this.mapInfo.id, // this.mapInfo.id,
deleteAssist( row.id).then(res=>{ deleteAssist( row.id).then(res=>{
this.$message.success('删除指示灯关联信息成功'); this.$message.success('删除指示灯关联信息成功');
this.reloadData(); this.reloadTable();
this.$emit('refresh'); this.$emit('refresh');
}).catch(error=>{ }).catch(error=>{
this.$messageBox('删除指示灯关联信息失败:' + error.meessage); this.$messageBox('删除指示灯关联信息失败:' + error.meessage);