Merge remote-tracking branch 'origin/test'

This commit is contained in:
fan 2022-06-20 17:47:12 +08:00
commit d568be81ec
81 changed files with 7193 additions and 1833 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 960 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1013 B

BIN
src/assets/ctc_icon/rpb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
src/assets/ctc_icon/rpd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
src/assets/ctc_icon/rpe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
src/assets/ctc_icon/rph.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
src/assets/ctc_icon/rpu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
src/assets/ctc_icon/rpw.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
src/assets/ctc_icon/t3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 953 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -451,6 +451,54 @@ class SkinCode extends defaultStyle {
text: '非常站控',
lightColor: '#ff0',
defaultColor: '#ccc',
},
selfDisciplineThree: {
offset: { x: 0, y: 0 },
text: '分散自律',
lightColor: '#0f0',
defaultColor: '#ccc'
},
graphRoad: {
show: true,
offset: { x: 0, y: 0 },
text: '按图排路',
lightColor: '#0f0',
defaultColor: '#ccc'
},
planControl: {
show: true,
offset: { x: 0, y: 0 },
text: '计划控制',
lightColor: '#0f0',
defaultColor: '#ccc'
},
centerCommunication: {
show: true,
offset: { x: 0, y: 30 },
text: '中心通信',
lightColor: '#0f0',
defaultColor: '#ccc'
},
selfDisciplineCommunication: {
show: true,
offset: { x: 0, y: 30 },
text: '自律机通信',
lightColor: '#0f0',
defaultColor: '#ccc'
},
allowedTurnBack: {
show: true,
offset: { x: 0, y: 30 },
text: '允许转回',
lightColor: '#0f0',
defaultColor: '#ccc'
},
trainControl: {
show: true,
offset: { x: 0, y: 30 },
text: '列控',
lightColor: '#0f0',
defaultColor: '#ccc'
}
}
};

View File

@ -22,23 +22,46 @@ export default class SignalButton extends Group {
create() {
const model = this.model;
const fillColor = this.getTypeColor();
this.rectButton = new Rect({
zlevel: this.zlevel,
z: this.z,
shape: {
x: model.position.x,
y: model.position.y,
width: 14,
height: 14
},
style: {
lineDash: null,
stroke: '#69666E',
lineWidth:1,
fill: fillColor
}
});
this.add(this.rectButton);
const queryList = window.location.search.substring(1).split('&');
const queryCtc = queryList.find(item => {
return item.includes('ctc');
});
const ctcArcList = ['OCCLUSION', 'RECOVERY', 'CHANGE_DIRECTION', 'ACCIDENT', 'DEPART_ASSIST', 'PICK_ASSIST', 'ASSIST'];
if (queryCtc && ctcArcList.includes(model.type)){
this.arcShape = new Arc({
zlevel: this.zlevel,
z: this.z,
shape: {
cx: this.model.position.x + 7,
cy: this.model.position.y + 7,
r: 7
},
style: {
stroke: '#69666E',
lineWidth: 1,
fill: fillColor
}
});
this.add(this.arcShape);
} else {
this.rectButton = new Rect({
zlevel: this.zlevel,
z: this.z,
shape: {
x: model.position.x,
y: model.position.y,
width: 14,
height: 14
},
style: {
lineDash: null,
stroke: '#69666E',
lineWidth:1,
fill: fillColor
}
});
this.add(this.rectButton);
}
this.leftLine = new Line({
zlevel: this.zlevel,
z: this.z + 1,
@ -200,9 +223,11 @@ export default class SignalButton extends Group {
recover() {
this.stopAnimation();
this.rectButton && this.rectButton.setStyle({ fill:this.getTypeColor() });
this.arcShape && this.arcShape.setStyle({ fill:this.getTypeColor() });
this.rightLine && this.rightLine.hide();
this.leftLine && this.leftLine.hide();
this.rectButton && this.rectButton.show();
this.arcShape && this.arcShape.show();
this.buttonText && this.buttonText.show();
this.leftBoard && this.leftBoard.hide();
this.rightBoard && this.rightBoard.hide();
@ -242,6 +267,7 @@ export default class SignalButton extends Group {
this.rectButton && this.rectButton.hide();
this.leftLine && this.leftLine.hide();
this.rightLine && this.rightLine.hide();
this.arcShape && this.arcShape.hide();
} else {
if (model.hasSelected) {
this.startAnimate();

View File

@ -0,0 +1,128 @@
import Arc from 'zrender/src/graphic/shape/Arc';
import Group from 'zrender/src/container/Group';
import Text from 'zrender/src/graphic/Text';
/** 三个控制灯*/
export default class EThreeLamp extends Group {
constructor(model) {
super();
this.model = model;
this.zlevel = model.zlevel;
this._subType = model._subType;
this.z = 20;
this.onmouseover = model.mouseover;
this.onmouseout = model.mouseout;
this.create(model);
}
create(model) {
var _subType = 'ControlSignal';
var _val = '0';
if (model.pop) {
_subType = 'ControlButton';
_val = '1';
}
var _nameType = this._subType;
this.control1 = new Arc({
pop: model.pop,
_subType: _subType,
_nameType: _nameType,
_val: _val,
zlevel: this.zlevel,
z: this.z,
shape: {
cx: model.point.x - model.style.Station.StationControl.lamp.radiusR * 3,
cy: model.point.y,
r: model.style.Station.StationControl.lamp.radiusR
},
style: {
lineWidth: model.style.Station.StationControl.lamp.lineWidth || 0,
fill: model.style.Station.StationControl.lamp.grayColor,
stroke: model.style.Station.StationControl.lamp.strokeColor
}
});
this.control2 = new Arc({
pop: model.pop,
_subType: _subType,
_nameType: _nameType,
_val: _val,
zlevel: this.zlevel,
z: this.z,
shape: {
cx: model.point.x,
cy: model.point.y,
r: model.style.Station.StationControl.lamp.radiusR
},
style: {
lineWidth: model.style.Station.StationControl.lamp.lineWidth || 0,
fill: model.style.Station.StationControl.lamp.grayColor,
stroke: model.style.Station.StationControl.lamp.strokeColor
}
});
this.control3 = new Arc({
pop: model.pop,
_subType: _subType,
_nameType: _nameType,
_val: _val,
zlevel: this.zlevel,
z: this.z,
shape: {
cx: model.point.x + model.style.Station.StationControl.lamp.radiusR * 3,
cy: model.point.y,
r: model.style.Station.StationControl.lamp.radiusR
},
style: {
lineWidth: model.style.Station.StationControl.lamp.lineWidth || 0,
fill: model.style.Station.StationControl.lamp.grayColor,
stroke: model.style.Station.StationControl.lamp.strokeColor
}
});
this.text = new Text({
pop: model.pop,
_subType: _subType,
zlevel: this.zlevel,
z: this.z,
position: [0, 0],
style: {
x: model.point.x,
y: model.point.y + model.style.Station.StationControl.lamp.radiusR + model.style.Station.StationControl.text.distance,
fontWeight: model.style.Station.StationControl.text.fontWeight,
fontSize: model.style.Station.StationControl.text.fontSize,
fontFamily: model.style.fontFamily,
text: model.context,
textFill: model.style.Station.StationControl.text.fontColor,
textAlign: model.style.Station.StationControl.text.textAlign,
textVerticalAlign: model.style.Station.StationControl.text.textVerticalAlign
}
});
this.add(this.control1);
this.add(this.control2);
this.add(this.control3);
this.add(this.text);
}
setColor(color) {
// if (color) {
// this.control.setStyle('fill', color);
// }
}
setTextColor(color) {
if (color && !this.model.style.Station.StationControl.lamp.textColorNoChange) {
this.text.setStyle('textFill', color);
}
}
getArcBoundingRect() {
const rect = this.control.getBoundingRect().clone();
const scale = this.control.scale[0];
const offsetX = this.control.position[0];
const offsetY = this.control.position[1];
rect.x = rect.x * scale + offsetX - 2;
rect.y = rect.y * scale + offsetY - 2;
rect.width = rect.width * scale + 4;
rect.height = rect.height * scale + 4;
return rect;
}
}

View File

@ -7,6 +7,7 @@ import EControl from '../element/EControl';
import EMouse from './EMouse';
import EMouseDraw from './EMouseDraw';
import ESingleControl from './ESingleControl';
import EThreeLamp from './EThreeLamp';
import EArrow from './EArrow';
import { arrow } from '../utils/ShapePoints';
import Rect from 'zrender/src/graphic/shape/Rect';
@ -148,7 +149,13 @@ export default class Station extends Group {
createControlMode() {
const model = this.model;
if (!this.style.Station.StationControl.disPlayNone) {
if (this.style.Station.StationControl.special) {
const queryList = window.location.search.substring(1).split('&');
const queryCtc = queryList.find(item => {
return item.includes('ctc');
});
if (queryCtc) {
this.createCtcControlMode()
} else if (this.style.Station.StationControl.special) {
if (model.visible && model.createControlMode) { // model.createControlMode 控制模式
this.createControlModeAU();
this.createControlModeCC();
@ -168,7 +175,122 @@ export default class Station extends Group {
}
this.setState(model);
}
createCtcControlMode() {//大铁
//非常站控
const model = this.model;
// 分散自律
this.selfDisciplineThree = new EThreeLamp({
_subType: 'veryControl',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.controlModePoint.x - this.style.Station.StationControl.lamp.distance * 2 + this.style.Station.StationControl.selfDisciplineThree.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.selfDisciplineThree.offset.y
},
context: this.style.Station.StationControl.selfDisciplineThree.text,
pop: false
});
this.add(this.selfDisciplineThree);
// 非常站控
this.veryControl = new ESingleControl({
_subType: 'veryControl',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.controlModePoint.x - this.style.Station.StationControl.lamp.distance * 2 / 3 + this.style.Station.StationControl.veryControl.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.veryControl.offset.y
},
context: this.style.Station.StationControl.veryControl.text,
pop: false
});
this.add(this.veryControl);
//按图排路
this.graphRoad = new ESingleControl({
_subType: 'graphRoad',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.controlModePoint.x + this.style.Station.StationControl.lamp.distance * 2 / 3 + this.style.Station.StationControl.graphRoad.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.graphRoad.offset.y
},
context: this.style.Station.StationControl.graphRoad.text,
pop: false
});
this.add(this.graphRoad);
//计划控制
this.planControl = new ESingleControl({
_subType: 'planControl',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.controlModePoint.x + this.style.Station.StationControl.lamp.distance * 2 + this.style.Station.StationControl.planControl.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.planControl.offset.y
},
context: this.style.Station.StationControl.planControl.text,
pop: false
});
this.add(this.planControl);
//中心通信
this.centerCommunication = new ESingleControl({
_subType: 'centerCommunication',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.controlModePoint.x - this.style.Station.StationControl.lamp.distance * 2 + this.style.Station.StationControl.centerCommunication.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.centerCommunication.offset.y
},
context: this.style.Station.StationControl.centerCommunication.text,
pop: false
});
this.add(this.centerCommunication);
//自律机通信
this.selfDisciplineCommunication = new ESingleControl({
_subType: 'selfDisciplineCommunication',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.controlModePoint.x - this.style.Station.StationControl.lamp.distance * 2 / 3 + this.style.Station.StationControl.selfDisciplineCommunication.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.selfDisciplineCommunication.offset.y
},
context: this.style.Station.StationControl.selfDisciplineCommunication.text,
pop: false
});
this.add(this.selfDisciplineCommunication);
//允许转回
this.allowedTurnBack = new ESingleControl({
_subType: 'allowedTurnBack',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.controlModePoint.x + this.style.Station.StationControl.lamp.distance * 2 / 3 + this.style.Station.StationControl.allowedTurnBack.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.allowedTurnBack.offset.y
},
context: this.style.Station.StationControl.allowedTurnBack.text,
pop: false
});
this.add(this.allowedTurnBack);
// 列控
this.trainControl = new ESingleControl({
_subType: 'trainControl',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
x: model.controlModePoint.x + this.style.Station.StationControl.lamp.distance * 2 + this.style.Station.StationControl.trainControl.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.trainControl.offset.y
},
context: this.style.Station.StationControl.trainControl.text,
pop: false
});
this.add(this.trainControl);
}
createControlModeAU() { // 西安二
const model = this.model;
this.stationControlAU = new Text({

View File

@ -519,20 +519,104 @@ export const menuOperate = {
}
},
CTC: {
// 接预
// 完成接预
receivingNotice: {
operation: OperationEvent.CTCCommand.receivingNotice.menu.operation,
cmdType: CMD.CTC.CTC_RECEIVING_NOTICE
cmdType: CMD.CTC.CTC_FINISH_RECEIVING_NOTICE
},
// 发预
// 取消接预
cancelReceivingNotice: {
operation: OperationEvent.CTCCommand.cancelReceivingNotice.menu.operation,
cmdType: CMD.CTC.CTC_CANCEL_RECEIVING_NOTICE
},
// 完成到点
finishArrive: {
operation: OperationEvent.CTCCommand.finishArrive.menu.operation,
cmdType: CMD.CTC.CTC_FINISH_ARRIVE
},
// 取消到点
cancelArrive: {
operation: OperationEvent.CTCCommand.cancelArrive.menu.operation,
cmdType: CMD.CTC.CTC_CANCEL_ARRIVE
},
// 完成发预
departureNotice: {
operation: OperationEvent.CTCCommand.departureNotice.menu.operation,
cmdType: CMD.CTC.CTC_DEPARTURE_NOTICE
cmdType: CMD.CTC.CTC_FINISH_DEPARTURE_NOTICE
},
// 取消发预
cancelDepartureNotice: {
operation: OperationEvent.CTCCommand.cancelDepartureNotice.menu.operation,
cmdType: CMD.CTC.CTC_CANCEL_DEPARTURE_NOTICE
},
// 完成发点
finishDeparture: {
operation: OperationEvent.CTCCommand.finishDeparture.menu.operation,
cmdType: CMD.CTC.CTC_FINISH_DEPARTURE
},
// 取消发点
cancelDeparture: {
operation: OperationEvent.CTCCommand.cancelDeparture.menu.operation,
cmdType: CMD.CTC.CTC_CANCEL_DEPARTURE
},
// 自动触发
autoTrigger: {
operation: OperationEvent.CTCCommand.autoTrigger.menu.operation,
cmdType: CMD.CTC.CTC_AUTO_TRIGGER
},
// 批量修改股道
batchModifyTrackSection:{
operation: OperationEvent.CTCCommand.batchModifyTrackSection.menu.operation,
cmdType: CMD.CTC.CTC_BATCH_MODIFY_RUN_PLAN
},
// 移除行车日志
deleteRunplan:{
operation: OperationEvent.CTCCommand.deleteRunplan.menu.operation,
cmdType: CMD.CTC.CTC_REMOVE_RUN_PLAN
},
// 修改行车计划的邻站信息
modifyAdjacentStation:{
operation: OperationEvent.CTCCommand.modifyAdjacentStation.menu.operation,
cmdType: CMD.CTC.CTC_MODIFY_ADJACENT_STATION
},
// 修改车次号(大铁CTC)
modifyTripNumber:{
operation: OperationEvent.CTCCommand.modifyTripNumber.menu.operation,
cmdType: CMD.CTC.CTC_MODIFY_TRIP_NUMBER
},
// 发送发车预告
sendNotcie:{
operation: OperationEvent.CTCCommand.sendNotcie.menu.operation,
cmdType: CMD.CTC.CTC_SEND_NOTICE
},
// 同意发车预告
agreeNotcie:{
operation: OperationEvent.CTCCommand.agreeNotcie.menu.operation,
cmdType: CMD.CTC.CTC_AGREE_NOTICE
},
// 增加列车固定径路
addTrainFixedPath:{
operation: OperationEvent.CTCCommand.addTrainFixedPath.menu.operation,
cmdType: CMD.CTC.CTC_ADD_RUN_PLAN_LIST_TO_EDIT_AREA
},
// 导入列车固定径路
importTrainFixedPath:{
operation: OperationEvent.CTCCommand.importTrainFixedPath.menu.operation,
cmdType: CMD.CTC.CTC_COVER_RUN_PLAN_LIST_TO_EDIT_AREA
},
// 删除列车固定径路
deleteTrainFixedPath:{
operation: OperationEvent.CTCCommand.deleteTrainFixedPath.menu.operation,
cmdType: CMD.CTC.CTC_REMOVE_RUN_PLAN_FROM_EDIT_AREA
},
// 运行计划发布至CTC
releaseTrainFixedPath:{
operation: OperationEvent.CTCCommand.releaseTrainFixedPath.menu.operation,
cmdType: CMD.CTC.CTC_RELEASE_RUN_PLAN_TO_SIMULATION
},
setRoute: {
operation: OperationEvent.CTCCommand.setRoute.menu.operation,
cmdType: CMD.CTC.CTC_SET_ROUTE
}
}

View File

@ -0,0 +1,292 @@
<template>
<div v-show="showTable" style="background: #F0F0F0;z-index: 10;position: absolute;left: 0;bottom: 0;width: 100%;font-size: 14px;">
<i class="el-icon-close close_icon" @click.stop="doClose" />
<el-row>
<el-col :span="11" style="padding: 0 10px;">
<div style="border: 1px solid #C7C7C7;margin-top: 10px;">
<div style="position: relative; top: -8px;left: 15px;width: 130px;background: #f0f0f0;">列车进路序列 可修改</div>
<div style="width: 100%;background: #9F9F9F">
<el-table
ref="sequenceTable"
:data="sequenceList"
height="90"
:row-class-name="tableRowClassName"
border
style="width: 650px"
:cell-style="{padding: 0}"
:default-sort="{prop: 'startTime', order: 'ascending'}"
>
<el-table-column type="index" width="30" label="序" label-class-name="bottom-table-label-header" />
<el-table-column property="tripNumber" label="车次" width="60" label-class-name="bottom-table-label-header">
<template slot-scope="scope">
<div style="width: 100%;height: 22px;" @contextmenu="popMenuShow(scope.row, '' ,$event)">{{ scope.row.tripNumber }}</div>
</template>
</el-table-column>
<el-table-column property="trackName" label="股道" width="50" label-class-name="bottom-table-label-header" />
<el-table-column property="autoTrigger" label="自触" width="50" label-class-name="bottom-table-label-header">
<template slot-scope="scope">
<el-checkbox v-model="scope.row.autoTrigger" @change="triggerChange(scope.row)" />
</template>
</el-table-column>
<el-table-column property="direction" label="方向" width="100" label-class-name="bottom-table-label-header" />
<el-table-column property="startTime" label="开始" width="80" label-class-name="bottom-table-label-header" />
<el-table-column property="planTime" label="计划" width="90" label-class-name="bottom-table-label-header" />
<el-table-column property="" label="状态" width="90" label-class-name="bottom-table-label-header">
<template slot-scope="scope">
<span>{{ getRouteStatus(scope.row.status) }}</span>
</template>
</el-table-column>
<el-table-column property="description" label="进路描述" label-class-name="bottom-table-label-header">
<template slot-scope="scope">
<span>{{ getRouteName(scope.row.routeCode) }}</span>
</template>
</el-table-column>
</el-table>
</div>
</div>
<div style="display: flex;align-items: center;">
<div style="margin-right: 10px;">车站</div>
<el-select v-model="stationCode" size="mini" @change="stationChange">
<el-option
v-for="item in stationList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
<div style="border: 1px outset #C7C7C7;margin-left: 20px;padding: 3px;">释放权限</div>
<div style="margin-left: 10px;">字体</div>
<div style="margin-left: 10px;border: 1px inset #C7C7C7;padding: 3px;">常规</div>
</div>
</el-col>
<el-col :span="13">
<div style="border: 1px solid #C7C7C7;margin-top: 10px;">
<div style="position: relative; top: -8px;left: 15px;width: 103px;background: #f0f0f0;">调车进路 可修改</div>
<el-row>
<el-col :span="12" style="padding: 0 10px;">
<div style="border: 1px solid #C7C7C7;">
<div style="position: relative; top: -8px;left: 15px;width: 86px;background: #f0f0f0;">调车进路序列</div>
<div style="width: 100%;background: #9F9F9F">
<el-table :data="tableData" height="55" border style="width: 465px" :cell-style="{padding: 0}">
<el-table-column type="index" label="顺序" width="50" label-class-name="bottom-table-label-header" />
<el-table-column property="" label="勾序" width="50" label-class-name="bottom-table-label-header" />
<el-table-column property="" label="进路及方向" width="95" label-class-name="bottom-table-label-header" />
<el-table-column property="" label="自触" width="50" label-class-name="bottom-table-label-header" />
<el-table-column property="" label="状态" width="50" label-class-name="bottom-table-label-header" />
<el-table-column property="" label="触发时间" width="80" label-class-name="bottom-table-label-header" />
<el-table-column property="" label="占用时间" label-class-name="bottom-table-label-header" />
</el-table>
</div>
</div>
</el-col>
<el-col :span="12" style="padding: 0 10px;">
<div style="border: 1px solid #C7C7C7;">
<div style="position: relative; top: -8px;left: 15px;width: 44px;background: #f0f0f0;">勾序列</div>
<div style="width: 100%;background: #9F9F9F">
<el-table :data="tableData" height="55" style="width: 360px" border :cell-style="{padding: 0}">
<el-table-column type="index" label="钩计划" width="70" label-class-name="bottom-table-label-header" />
<el-table-column property="" label="股道" width="50" label-class-name="bottom-table-label-header" />
<el-table-column property="" label="操作" width="50" label-class-name="bottom-table-label-header" />
<el-table-column property="" label="状态" width="50" label-class-name="bottom-table-label-header" />
<el-table-column property="" label="记事" width="50" label-class-name="bottom-table-label-header" />
<el-table-column property="" label="作业时间" label-class-name="bottom-table-label-header" />
</el-table>
</div>
</div>
</el-col>
</el-row>
</div>
<el-row>
<div style="display: flex;align-items: center;">
<div>作业单</div>
<el-select v-model="sheetValue" size="mini" style="margin-left: 10px;width: 500px;">
<el-option
v-for="item in sheetList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<div style="border: 1px outset #C7C7C7;margin-left: 20px;padding: 3px;">单头信息</div>
<div style="border: 1px outset #C7C7C7;margin-left: 20px;padding: 3px;">删除</div>
<div style="border: 1px outset #C7C7C7;margin-left: 20px;padding: 3px;">发送</div>
</div>
</el-row>
<el-row>
<div style="display: flex;">
<div>历史进路</div>
<div style="margin-left: 300px;">状态</div>
</div>
</el-row>
</el-col>
</el-row>
<pop-menu ref="popMenu" :menu="menu" style="background: #DFE3E6;" />
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import { EventBus } from '@/scripts/event-bus'; // 996
import { menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import PopMenu from '@/components/PopMenu';
export default {
name: 'BottomTable',
components: {
PopMenu
},
data() {
return {
tableData: [{}],
stationCode: '',
sheetValue: '',
routeParam: {},
showTable: false,
sheetList: [{ label: '历史进路', value: 'historyRoute' }],
sequenceList: [],
sequenceMap: {},
menu: [{label: '人工触发', handler: this.artificialTrigger, disabled: false}, {label: '删除', handler: this.artificialTrigger, disabled: true}]
};
},
computed: {
...mapGetters('map', [
'stationList'
])
},
watch: {
'showTable': function (val) {
const offset = val ? 162 : 0;
EventBus.$emit('setMenuButtonPosition', offset);
},
'$store.state.socket.railCtcStatusMsg': function (val) {
if (val && val.length) {
val.forEach(item => {
if (item && item.routeSequence && item.routeSequence.lines && item.routeSequence.lines.length) {
item.routeSequence.lines.forEach(elem => {
if (!this.sequenceMap[elem.id]) {
this.sequenceMap[elem.id] = Object.assign(elem, { stationCode: item.stationCode, readOnly: item.readOnly });
} else {
this.sequenceMap[elem.id] = Object.assign(this.sequenceMap[elem.id], elem, { stationCode: item.stationCode, readOnly: item.readOnly });
}
});
}
});
this.sequenceList = [];
for (const key in this.sequenceMap) {
if (this.sequenceMap[key].stationCode === this.stationCode) {
this.sequenceList.push(this.sequenceMap[key]);
}
}
}
}
},
mounted() {
EventBus.$on('bottomTableShowOrHidden', () => {
this.showTable = !this.showTable;
});
if (this.stationList && this.stationList.length) {
this.stationCode = this.stationList[0].code;
}
},
methods: {
doShow() {
this.showTable = true;
},
doClose() {
this.showTable = false;
},
getRouteStatus(status) {
if (status === '2') {
return '触发完成';
} else if (status === '1') {
return '正在触发';
} else {
return '等待中';
}
},
triggerChange(row) {
const triggerParam = { stationCode: this.stationCode, tripNumber: row.tripNumber, routeCode: row.routeCode, trigger: row.autoTrigger };
if (row.autoTrigger) {
this.setTrigger(triggerParam, row);
} else {
this.cancelTrigger(triggerParam, row);
}
},
stationChange(stationCode) {
this.sequenceList = [];
for (const key in this.sequenceMap) {
if (this.sequenceMap[key].stationCode === stationCode) {
this.sequenceList.push(this.sequenceMap[key]);
}
}
},
tableRowClassName({row, rowIndex}) {
if (row.status === '0') {
return 'bottom-table-route-wait';
} else if (row.tripNumber) {
return 'bottom-table-route-green';
} else {
return 'bottom-table-route-gray';
}
},
getRouteName(code) {
if (code) {
const route = this.$store.state.map.routeData[code];
return route ? route.name : '';
} else { return ''; }
},
setTrigger(triggerParam, row) {
commitOperate(menuOperate.CTC.autoTrigger, triggerParam, 3).then(({valid, operate})=>{
if (valid) {
this.$message.success('设置自动触发成功!');
}
}).catch((e) => {
console.error(e);
row.autoTrigger = false;
this.$message.error('设置自动触发失败!');
});
},
popMenuShow(item, type, e) {
this.routeParam = {routeCode: item.routeCode, tripNumber: item.tripNumber, force: false, duration: null};
this.$refs.popMenu.resetShowPosition({x: e.x, y:e.y});
},
cancelTrigger(triggerParam, row) {
commitOperate(menuOperate.CTC.autoTrigger, triggerParam, 3).then(({valid, operate})=>{
if (valid) {
this.$message.success('取消自动触发成功!');
}
}).catch((e) => {
console.error(e);
row.autoTrigger = true;
this.$message.error('取消自动触发失败!');
});
},
artificialTrigger() {
commitOperate(menuOperate.CTC.setRoute, this.routeParam, 3).then(({valid, operate})=>{
if (valid) {
this.$message.success('人工触发成功!');
}
}).catch((e) => {
console.error(e);
this.$message.error('人工触发失败!');
});
}
}
};
</script>
<style scoped>
</style>
<style>
.bottom-table-label-header{
background: #FFF3EE;
}
.bottom-table-route-wait {
background: #ff0 !important;
}
.bottom-table-route-gray{
background: #c0c0c0 !important;
}
.bottom-table-route-green{
background: #0f0 !important;
}
</style>

View File

@ -115,7 +115,6 @@ export default {
if (operate.operateNext) {
this.operation = operate.operateNext;
}
console.log(this.operate, '--------------0000operate');
this.dialogShow = true;
this.checkHasInput = false;
this.$nextTick(function () {
@ -158,7 +157,6 @@ export default {
this.encryptionPassword = this.passwordCheck;
}
},
cancel() {
const operate = {
send: false,

View File

@ -0,0 +1,99 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm train-set-plan"
:title="title"
:visible.sync="show"
width="280px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div style="text-align: center;">
确定删除该列车的行车信息
</div>
<el-row justify="center" class="button-group" style="margin-top:20px">
<el-col :span="8" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="3">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name: 'DeleteRunplan',
data() {
return {
dialogShow: false,
loading: false,
model:{
stationCode:'',
runPlanCode:''
}
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.CTCCommand.deleteRunplan.menu.domId : '';
},
title() {
return '警告';
}
},
methods: {
doShow(row) {
// 4. CTC_REMOVE_RUN_PLAN stationCode runPlanCode
this.model.stationCode = row.stationCode;
this.model.runPlanCode = row.code;
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
this.loading = true;
commitOperate(menuOperate.CTC.deleteRunplan, this.model, 2).then(({valid})=>{
this.loading = false;
this.$emit('clearRpRow');
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.$emit('clearRpRow');
this.doClose();
this.$emit('noticeInfo');
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$emit('clearRpRow');
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => { this.doClose(); });
}
}
};
</script>

View File

@ -110,8 +110,8 @@ export default {
window.document.oncontextmenu = function () {
return false;
};
if (this.mapData.skinVO) {
console.log(this.mapData, '---------------');
if (this.mapData && this.mapData.skinVO) {
const parser = parserFactory(ParserType.Graph.value);
this.mapDevice = parser.parser(this.mapData, this.mapData.skinVO.code, this.map.getShowConfig());
}

View File

@ -0,0 +1,154 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm train-set-plan"
:title="title"
:visible.sync="show"
width="360px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div class="modifyAdjacentStation">
<div class="adjacentStationTrip"> {{ tripNumber }}次列车</div>
<div class="adjacentStationStart">
<el-select
v-model="model.arriveStationCode"
placeholder=""
size="mini"
style="width:100px"
popper-class="stationSelect"
>
<el-option
v-for="item in stationList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
<div style="display:inline-block">站驶来</div>
</div>
<div class="adjacentStationEnd">
<div style="display:inline-block">驶向</div>
<el-select
v-model="model.departStationCode"
placeholder=""
size="mini"
style="width:100px"
popper-class="stationSelect"
>
<el-option
v-for="item in stationList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
<div style="display:inline-block"></div>
</div>
</div>
<el-row justify="center" class="button-group" style="margin-top:20px">
<el-col :span="8" :offset="4">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="1">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
// import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name: 'ModifyAdjacentStation',
data() {
return {
dialogShow: false,
loading: false,
tripNumber:'',
stationList:[],
model:{
stationCode:'', //
runPlanCode:'', //
arriveStationCode:'', //
departStationCode:'' //
}
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.CTCCommand.modifyAdjacentStation.menu.domId : '';
},
title() {
return '修改相关车站';
}
},
mounted() {
this.stationList = this.$store.state.map.map.stationList;
},
methods: {
doShow(row) {
this.model.stationCode = row.stationCode;
this.model.runPlanCode = row.code;
this.model.arriveStationCode = (row.arriveRunPlan && row.arriveRunPlan.stationCode) || '';
this.model.departStationCode = (row.departRunPlan && row.departRunPlan.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() {
this.loading = true;
commitOperate(menuOperate.CTC.modifyAdjacentStation, this.model, 2).then(({valid})=>{
this.loading = false;
this.$emit('clearRpRow');
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.$emit('clearRpRow');
this.doClose();
this.$emit('noticeInfo');
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$emit('clearRpRow');
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => { this.doClose(); });
}
}
};
</script>
<style lang="scss" scoped>
.modifyAdjacentStation{text-align: center;font-size: 14px;color: #000;}
.adjacentStationTrip{text-align: center;}
.adjacentStationStart{margin-top: 10px;}
.adjacentStationEnd{margin-top: 10px;}
</style>
<style lang="scss">
.stationSelect{
z-index:2014 !important;
}
</style>

View File

@ -0,0 +1,224 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm train-set-plan"
:title="title"
:visible.sync="show"
width="560px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div class="modifyTripNumber">
<!-- 修改车次号(大铁CTC) -->
<div class="modifyTripNumberT">
<div style="display:inline-block;margin-right:10px">请选择车站</div>
<el-select
v-model="stationCode"
placeholder=""
size="mini"
style="width:100px"
popper-class="stationSelect"
>
<el-option
v-for="item in stationList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</div>
<div class="modifyTripNumberB">
<div class="modifyTripNumberBL">
<div class="modifyTripNumberTip">原列车信息</div>
<div class="modifyTripNumberS">
<div class="modifyTripNumberName">到达车次</div>
<el-input v-model="oldArriveTripNumber" type="text" class="" size="mini" style="width: 140px;" disabled />
</div>
<div class="modifyTripNumberE">
<div class="modifyTripNumberName">出发车次</div>
<el-input v-model="oldDepartTripNumber" type="text" class="" size="mini" style="width: 140px;" disabled />
</div>
</div>
<div class="modifyTripNumberBR">
<div class="modifyTripNumberTip">新列车信息</div>
<div>
<el-form ref="form" :model="model" label-width="85px" :rules="rules">
<el-form-item label="到达车次:" prop="arriveTripNumber">
<el-input v-model="model.arriveTripNumber" style="width:140px" />
</el-form-item>
<el-form-item label="出发车次:" prop="departTripNumber">
<el-input v-model="model.departTripNumber" style="width:140px" />
</el-form-item>
</el-form>
<!-- <div class="modifyTripNumberName">到达车次</div>
<el-input v-model="model.arriveTripNumber" type="text" class="" size="mini" style="width: 95px;" />
</div>
<div class="modifyTripNumberE">
<div class="modifyTripNumberName">出发车次</div>
<el-input v-model="model.departTripNumber" type="text" class="" size="mini" style="width: 95px;" />
</div> -->
</div>
</div>
<el-checkbox-group v-model="trainTypeList" style="text-align:center;margin-top:10px">
<el-checkbox label="保留车" name="type" />
<el-checkbox label="终到车" name="type" />
</el-checkbox-group>
</div>
<el-row justify="center" style="margin-top:10px">
<el-col :span="7" :offset="5">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="7" :offset="2">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</div></el-dialog>
</template>
<script>
// import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name: 'ModifyTripNumber',
data() {
var validateTripNumber = (rule, value, callback) => {
if (value) {
const judge = /^[a-zA-Z0-9]*[\d]$/.test(value);
if (judge) {
if (value.toString().length > 6 || value.toString().length < 2) {
callback('车次长度2-6位');
} else {
callback();
}
} else {
callback('字母+数字,最后一位数字');
}
} else {
callback('请输入车次');
}
};
return {
dialogShow: false,
loading: false,
oldArriveTripNumber:'',
oldDepartTripNumber:'',
trainTypeList:[],
stationList:[],
stationCode:'', //
runPlanCode:'', //
model:{
arriveTripNumber:'', //
departTripNumber:'' //
},
rules: {
arriveTripNumber:[
{ required: true, validator: validateTripNumber, trigger: 'blur' }
// message: ''
],
departTripNumber:[
{ required: true, validator: validateTripNumber, trigger: 'blur' }
]
}
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.CTCCommand.modifyTripNumber.menu.domId : '';
},
title() {
return '设置车次';
}
},
mounted() {
this.stationList = this.$store.state.map.map.stationList;
},
methods: {
doShow(row) {
this.stationCode = row.stationCode;
this.runPlanCode = row.code;
this.oldArriveTripNumber = (row.arriveRunPlan && row.arriveRunPlan.tripNumber) || '';
this.oldDepartTripNumber = (row.departRunPlan && row.departRunPlan.tripNumber) || '';
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.model = {
arriveTripNumber:'', //
departTripNumber:'' //
};
this.$store.dispatch('training/emitTipFresh');
},
commit() {
this.loading = true;
const params = Object.assign({stationCode:this.stationCode, runPlanCode:this.runPlanCode}, this.model);
commitOperate(menuOperate.CTC.modifyTripNumber, params, 2).then(({valid})=>{
this.loading = false;
this.$emit('clearRpRow');
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.$emit('clearRpRow');
this.doClose();
this.$emit('noticeInfo');
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$emit('clearRpRow');
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => { this.doClose(); });
}
}
};
</script>
<style lang="scss" scoped>
.modifyTripNumber{font-size: 15px;color:#201f1e;}
.modifyTripNumberT{}
.modifyTripNumberB{margin-top:20px;color:#201f1e;}
.modifyTripNumberBL,.modifyTripNumberBR{
width: 49%;
display: inline-block;
border: 1px #999795 solid;
padding:20px 10px 10px 10px;
position: relative;
}
.modifyTripNumberTip{
position:absolute;
left:10px;
top:-10px;
background: #ece9d8;
padding: 0px 5px;
}
.modifyTripNumberS{margin-bottom:20px;height: 24px;font-size:0;}
.modifyTripNumberName{display: inline-block;width:85px;text-align: right;font-size: 15px;}
.modifyTripNumberE{margin-bottom: 20px;height: 24px;font-size:0;}
</style>
<style lang="scss">
.chengdou-03__systerm .el-dialog .modifyTripNumber .el-checkbox-group .el-checkbox .el-checkbox__label{font-size: 15px !important;line-height: 16px;}
.chengdou-03__systerm .el-dialog .modifyTripNumber .el-checkbox-group .el-checkbox .el-checkbox__input{vertical-align: top;line-height: 16px;}
.stationSelect{
z-index:2014 !important;
}
.modifyTripNumberBR .el-form-item .el-form-item__label{font-size:15px;padding-right:0px;line-height:24px;vertical-align:top;}
.modifyTripNumberBR .el-form-item{margin-bottom:20px;}
.modifyTripNumberBR .el-form-item .el-form-item__content{line-height:24px;vertical-align: top;height:24px;}
</style>

View File

@ -13,20 +13,24 @@
<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-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-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-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 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;" @click="commit(menuOperate.CTC.cancelReceivingNotice)">取消接预</el-button></div>
<div style="text-align: center;margin-top: 10px;"><el-button v-if="type === 'dep'" style="width: 200px;" @click="commit(menuOperate.CTC.cancelDepartureNotice)">取消发预</el-button></div>
<div style="text-align: center;margin-top: 10px;"><el-button v-if="type === 'arrive'" style="width: 200px;" @click="commit(menuOperate.CTC.finishArrive)">完成到点</el-button></div>
<div style="text-align: center;margin-top: 10px;"><el-button v-if="type === 'arrive'" style="width: 200px;" @click="commit(menuOperate.CTC.cancelArrive)">取消到点</el-button></div>
<div style="text-align: center;margin-top: 10px;"><el-button v-if="type === 'departure'" style="width: 200px;" @click="commit(menuOperate.CTC.finishDeparture)">完成发点</el-button></div>
<div style="text-align: center;margin-top: 10px;"><el-button v-if="type === 'departure'" style="width: 200px;" @click="commit(menuOperate.CTC.cancelDeparture)">取消发点</el-button></div>
<el-button style="height: 50px;width: 50px;position: relative;left: 370px;" @click="doClose">关闭</el-button>
</div>
</el-dialog>
</template>
@ -34,8 +38,6 @@
<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 {
@ -48,10 +50,10 @@ export default {
selected: null,
selectedType: '',
dialogShow: false,
menuOperate: menuOperate,
type: '',
stationCode: '',
tripNumber: '',
menuOperate: menuOperate,
type: '',
stationCode: '',
tripNumber: '',
loading: false,
tableData: [],
deviceTypeList: [
@ -62,9 +64,9 @@ export default {
],
deviceIdList: [],
form: {
work: '',
time: '',
info: ''
work: '',
time: '',
info: ''
}
};
},
@ -74,22 +76,11 @@ export default {
]),
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.type = type;
this.loading = true;
this.stationCode = stationCode;
this.tripNumber = row.tripNumber;
@ -103,28 +94,27 @@ export default {
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();
});
}
commit(type) {
this.loading = true;
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();
this.$message.error('操作失败!');
});
}
}
};
</script>
<style scoped>
.chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x);
/*background: rgba(0, 0, 0, x);*/
position: relative;
left: -5px;
top: -18px;

View File

@ -1,69 +1,69 @@
<template>
<el-dialog v-dialogDrag top="12vh" class="ningbo-01__systerm route-setting" :title="title" :visible.sync="show" width="1100px" :before-close="doClose" :z-index="2000" :modal="false" :close-on-click-modal="false">
<el-row>
<el-col :span="2">列车车次</el-col>
<el-col :span="21"><span style="font-size: 18px;color: #f00;">{{ selected.tripNumber }}</span></el-col>
</el-row>
<el-row style="margin-top: 10px;">
<el-col :span="2">进路描述</el-col>
<el-col :span="21">
<div style="width: 100%;height: 50px;background: #DFE3E6;padding: 10px;">
<span>{{ `${type === 'dep' ? '发车/通过': '接车/通过'} 股道:${selected.trackName};进路按钮:${getRouteNames()}` }}</span>
</div>
</el-col>
</el-row>
<el-row style="margin-top: 10px;">
<el-col :span="2">进路显示</el-col>
<el-col :span="21">
<map-visual ref="map" :map-data="mapData" :width="960" :height="600" />
</el-col>
</el-row>
<!--<el-row :gutter="24">-->
<!--<el-col :span="6">-->
<!--<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-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 :span="18">-->
<!--<map-visual ref="map" :map-data="mapData" :width="780" :height="600" />-->
<!--</el-col>-->
<el-col :span="2">列车车次</el-col>
<el-col :span="21"><span style="font-size: 18px;color: #f00;">{{ selected.tripNumber }}</span></el-col>
</el-row>
<el-row style="margin-top: 10px;">
<el-col :span="2">进路描述</el-col>
<el-col :span="21">
<div style="width: 100%;height: 50px;background: #DFE3E6;padding: 10px;">
<span>{{ `${type === 'dep' ? '发车/通过': '接车/通过'} 股道:${selected.trackName};进路按钮:${getRouteNames()}` }}</span>
</div>
</el-col>
</el-row>
<el-row style="margin-top: 10px;">
<el-col :span="2">进路显示</el-col>
<el-col :span="21">
<map-visual ref="map" :map-data="mapData" :width="960" :height="600" />
</el-col>
</el-row>
<!--<el-row :gutter="24">-->
<!--<el-col :span="6">-->
<!--<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 style="margin-top: 10px;margin-bottom: 10px;">
<el-col :span="21" :offset="2">
<el-radio disabled v-model="radio" label="禁用">分段办理</el-radio>
</el-col>
</el-row>
<div style="display: flex;justify-content: space-between;margin-bottom: 10px;">
<el-button size="mini" v-if="type === 'rec'" :type="selected.receivingRouteAutoTrigger?'warning':''" :disabled="!!route.lock || !selected.receivingNotice" @click="commit">办理接车</el-button>
<el-button size="mini" v-if="type === 'dep'" :type="selected.departureRouteAutoTrigger?'warning':''" :disabled="!!route.lock || !selected.departureNotice" @click="commit">办理发车</el-button>
<el-button size="mini" disabled>办理通过</el-button>
<el-button size="mini" disabled>进路单锁</el-button>
<el-button size="mini" :disabled="cancelRouteDisabled" @click="commit">取消进路</el-button>
<el-button size="mini" @click="doClose">关闭</el-button>
</div>
<!--<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-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 :span="18">-->
<!--<map-visual ref="map" :map-data="mapData" :width="780" :height="600" />-->
<!--</el-col>-->
<!--</el-row>-->
<el-row style="margin-top: 10px;margin-bottom: 10px;">
<el-col :span="21" :offset="2">
<el-radio v-model="radio" disabled label="禁用">分段办理</el-radio>
</el-col>
</el-row>
<div style="display: flex;justify-content: space-between;margin-bottom: 10px;">
<el-button v-if="type === 'rec'" size="mini" :type="selected.receivingRouteAutoTrigger?'warning':''" :disabled="!!route.lock || !selected.receivingNotice" @click="commit">办理接车</el-button>
<el-button v-if="type === 'dep'" size="mini" :type="selected.departureRouteAutoTrigger?'warning':''" :disabled="!!route.lock || !selected.departureNotice" @click="commit">办理发车</el-button>
<el-button size="mini" disabled>办理通过</el-button>
<el-button size="mini" disabled>进路单锁</el-button>
<el-button size="mini" :disabled="cancelRouteDisabled" @click="commit">取消进路</el-button>
<el-button size="mini" @click="doClose">关闭</el-button>
</div>
<notice-info ref="noticeInfo" pop-class="ningbo-01__systerm" />
<confirm-tip ref="confirmTip" @close="doClose" />
</el-dialog>
@ -89,7 +89,7 @@ export default {
},
data() {
return {
radio:'',
radio:'',
beforeSectionList: [],
beforeSwitchList: [],
dialogShow: false,
@ -98,11 +98,11 @@ export default {
operation: '',
display: true,
mapData: null,
route: '',
route: '',
tableStyle: {
'border-bottom': 'none'
},
type: ''
type: ''
};
},
computed: {
@ -124,20 +124,21 @@ export default {
title() {
return '进路办理';
},
cancelRouteDisabled() {
return !!!this.route.lock || (this.type === 'rec' && !this.selected.receivingNotice) || (this.type === 'dep' && !this.selected.departureNotice)
}
cancelRouteDisabled() {
return !this.route.lock || (this.type === 'rec' && !this.selected.receivingNotice) || (this.type === 'dep' && !this.selected.departureNotice);
}
},
watch: {},
created() {
this.mapData = JSON.parse(JSON.stringify(this.$store.state.map.map));
watch: {
'$store.state.map.mapDataLoadedCount': function (val) { //
this.mapData = JSON.parse(JSON.stringify(this.$store.state.map.map));
}
},
methods: {
getRouteNames() {
const receivingRoute = this.$store.state.map.routeData[this.selected.receivingRouteCode];
const departureRoute = this.$store.state.map.routeData[this.selected.departureRouteCode];
return (receivingRoute?receivingRoute.name: '') + ',' + (departureRoute?departureRoute.name: '');
},
getRouteNames() {
const receivingRoute = this.$store.state.map.routeData[this.selected.receivingRouteCode];
const departureRoute = this.$store.state.map.routeData[this.selected.departureRouteCode];
return (receivingRoute ? receivingRoute.name : '') + ',' + (departureRoute ? departureRoute.name : '');
},
doShow(selected, type) {
// this.$root.$emit('dialogOpen', selected);
this.selected = selected;
@ -154,12 +155,12 @@ export default {
if (this.mapData) {
this.$refs.map.loadData(this.mapData);
setTimeout(() => {
if (this.type === 'rec'){
this.clickEvent(this.selected.receivingRouteCode);
} else if (this.type === 'dep'){
this.clickEvent(this.selected.departureRouteCode);
}
}, 100);
if (this.type === 'rec') {
this.clickEvent(this.selected.receivingRouteCode);
} else if (this.type === 'dep') {
this.clickEvent(this.selected.departureRouteCode);
}
}, 100);
}
},
@ -210,7 +211,7 @@ export default {
this.$refs.map.setCenterWithOffset(code, 50, signal.position.y);
if (route.routeSectionList && route.routeSectionList.length) {
route.routeSectionList.forEach(code => {
route.routeSectionList.forEach(code => {
const section = deepAssign({}, this.$refs.map.getDeviceByCode(code));
if (section.logicSectionCodeList && section.logicSectionCodeList.length) {
section.logicSectionCodeList.forEach(sectionCode => {
@ -227,10 +228,10 @@ export default {
}
if (route.routeSwitchList && route.routeSwitchList.length) {
route.routeSwitchList.filter(el => switchCodeList.includes(el.switchCode)).forEach(el => {
route.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 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 });
@ -267,7 +268,7 @@ export default {
commit() {
if (this.route) {
this.loading = true;
const type = this.route.lock ? menuOperate.Signal.cancelTrainRoute :menuOperate.Signal.arrangementRoute;
const type = this.route.lock ? menuOperate.Signal.cancelTrainRoute : menuOperate.Signal.arrangementRoute;
const param = this.route.lock ? { signalCode: this.route.startSignalCode } : { routeCode:this.route.code };
commitOperate(type, param, 3).then(({valid, operate})=>{
this.loading = false;
@ -275,7 +276,6 @@ export default {
this.doClose();
}
}).catch((e) => {
console.error(e);
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
@ -294,7 +294,7 @@ export default {
this.doClose();
});
}
} //D3D8DC
} // D3D8DC
};
</script>
<style scoped>

View File

@ -0,0 +1,265 @@
<template>
<el-dialog
id="sendRunplanClass"
v-dialogDrag
class="chengdou-03__systerm"
:title="title"
:visible.sync="show"
width="1165px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div class="tableList">
<div class="leftTable">
<el-table
id="sendRunplanLeftTable"
:data="tableData1"
border
height="570"
style="width: 100%;border:1px #ccc solid"
>
<el-table-column
type="index"
label="序号"
width="70"
/>
<el-table-column
prop="tripNumber"
label="车次"
width="100"
/>
<el-table-column
prop="type"
label="类型"
width="50"
/>
<el-table-column
prop="arriveRunPlan.accessName"
label="方向"
width="105"
>
<template slot-scope="scope">
<div v-if="scope.row.arriveRunPlan" :title="scope.row.arriveRunPlan.accessName">{{ scope.row.arriveRunPlan.accessName }}</div>
</template>
</el-table-column>
<el-table-column
prop="arriveRunPlan.sectionName"
label="到达股道"
width="95"
/>
<el-table-column
prop="arriveRunPlan.planTime"
label="到达时刻"
width="95"
/>
<el-table-column
prop="departRunPlan.accessName"
label="去向"
width="105"
>
<template slot-scope="scope">
<div v-if="scope.row.departRunPlan" :title="scope.row.departRunPlan.accessName">{{ scope.row.departRunPlan.accessName }}</div>
</template>
</el-table-column>
<el-table-column
prop="departRunPlan.sectionName"
label="出发股道"
width="95"
/>
<el-table-column
prop="departRunPlan.planTime"
label="出发时间"
width="100"
/>
<el-table-column
prop="property"
label="属性"
width="100"
/>
<el-table-column
prop="tips"
label="注意事项"
width="120"
/>
</el-table>
</div>
<div class="rightTable">
<el-table
id="sendRunplanRightTable"
:data="tableData2"
border
height="570"
style="width: 100%;border:1px #ccc solid"
>
<el-table-column
prop="number"
label="序号"
width="40"
/>
<el-table-column
prop="number"
label="受令单位"
width="70"
/>
<el-table-column
prop="number"
label="状态"
width="70"
/>
</el-table>
</div>
</div>
<el-row justify="center" class="button-group">
<el-col :span="8" :offset="2">
<el-button :id="domIdCancel" @click="cancel">取消</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">发送</el-button>
</el-col>
</el-row>
</el-dialog>
<!-- updateTrip -->
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name:'SendRunplan',
data() {
return {
dialogShow:false,
loading: false,
tableData1:[],
tableData2:[],
addModel:{
stationCode:'',
planParamList:[],
force:1
}
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.CTCCommand.batchModifyTrackSection.menu.domId : '';
},
title() {
return '发送计划';
}
},
methods:{
doShow(tableData, activeDepartRunPlan, activeArriveRunPlan, filterSectionList) {
this.addModel.planParamList = [];
this.tableData1 = [];
tableData.forEach(element => {
if (element.arriveRunPlan && element.arriveRunPlan.sectionCode) {
const sectionObj = filterSectionList.find(section=>{ return section.code == element.arriveRunPlan.sectionCode; }) || {name:''};
element.arriveRunPlan.sectionName = sectionObj.name;
}
if (element.departRunPlan && element.departRunPlan.sectionCode) {
const sectionObj = filterSectionList.find(section=>{ return section.code == element.departRunPlan.sectionCode; }) || {name:''};
element.departRunPlan.sectionName = sectionObj.name;
}
this.tableData1.push(element);
});
// filterSectionList
this.addModel.stationCode = this.$store.state.training.roleDeviceCode;
const activeDepartRunPlanList = Object.values(activeDepartRunPlan).filter(activeDepart=>{ return activeDepart.changeSectionCode && activeDepart.changeSectionCode != activeDepart.sectionCode; });
if (activeDepartRunPlanList.length > 0) {
activeDepartRunPlanList.forEach(depart=>{
this.addModel.planParamList.push({
runPlanCode:depart.code,
departSectionCode:depart.changeSectionCode
});
});
}
const activeArriveRunPlanList = Object.values(activeArriveRunPlan).filter(activeArrive=>{ return activeArrive.changeSectionCode && activeArrive.changeSectionCode != activeArrive.sectionCode; });
if (activeArriveRunPlanList.length > 0) {
activeArriveRunPlanList.forEach(arrive=>{
this.addModel.planParamList.push({
runPlanCode:arrive.code,
arriveSectionCode:arrive.changeSectionCode
});
});
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
commit() {
if (this.addModel.planParamList.length > 0) {
const params = this.addModel;
this.loading = true;
commitOperate(menuOperate.CTC.batchModifyTrackSection, params, 3).then(({valid})=>{
this.loading = false;
if (valid) {
this.$emit('closeFlash');
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
this.$emit('noticeInfo');
});
}
// * @param stationCode
// * @param runPlanCode
// * @param arriveSectionCode
// * @param departSectionCode
// * @param force 0:1
},
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>
<style lang="scss" scoped>
.tableList{
display: inline-block
}
.leftTable{
display: inline-block;
width: 955px;
}
.rightTable{
display: inline-block;
margin-left:10px;
font-size:13px;
width:150px
}
.sendRunplanLeftTable{
}
</style>
<style lang="css">
#sendRunplanClass.chengdou-03__systerm .el-dialog .el-dialog__body{
padding: 10px;
}
#sendRunplanClass.chengdou-03__systerm .el-dialog .el-table .cell div{
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>

View File

@ -0,0 +1,62 @@
<template>
<el-dialog
v-dialogDrag
class="fuzhou-01__systerm"
title="调车进路参数"
:visible.sync="show"
width="300px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div style="padding: 10px;text-align: center;">
<div>{{ `${routeName}调车进路预计占用时间:` }}</div>
<div style="display: flex;align-items: center;margin-top: 10px;">
<el-input-number v-model="time" size="small" :controls="false" style="width: 220px;" />
<div>分钟</div>
</div>
<div style="border: 1px solid #000;padding: 10px;margin-top: 10px;">
<el-radio v-model="radio" label="1">电力机车</el-radio>
<el-radio v-model="radio" label="2">内燃机车</el-radio>
</div>
<div style="text-align: center;margin-top: 10px;">
<el-button @click="commit">确定</el-button>
<el-button @click="doClose">取消</el-button>
</div>
</div>
</el-dialog>
</template>
<script>
export default {
name: 'ShuntRoute',
data() {
return {
show: false,
routeName: '',
radio: '',
time: 0
};
},
methods: {
doClose() {
this.show = false;
this.$emit('routeCancel');
},
doShow(route) {
this.show = true;
this.routeName = route.name;
},
commit() {
this.show = false;
this.$emit('routeCommit', '', this.time);
}
}
};
</script>
<style scoped>
</style>

View File

@ -0,0 +1,51 @@
<template>
<el-dialog
v-dialogDrag
class="fuzhou-01__systerm"
title="列车进路办理"
:visible.sync="show"
width="300px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div>{{ `请为进路${routeName}输入车次号:` }}</div>
<el-input v-model="trainCode" size="small" />
<div style="text-align: center;margin-top: 10px;">
<el-button @click="commit">确定</el-button>
<el-button @click="doClose">取消</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
name: 'TrainRoute',
data() {
return {
show: false,
routeName: '',
trainCode: ''
};
},
methods: {
doClose() {
this.show = false;
this.$emit('routeCancel');
},
doShow(route) {
this.show = true;
this.routeName = route.name;
},
commit() {
this.show = false;
this.$emit('routeCommit', this.trainCode);
}
}
};
</script>
<style scoped>
</style>

View File

@ -71,33 +71,31 @@ export default {
});
},
handleTripNumber() {
this.judgeTripNumber();
},
judgeTripNumber() {
const figuresOfServiceMinNumber = 2;
const figuresOfServiceMaxNumber = 6;
// this.$store.state.map.mapConfig.figuresOfServiceNumber;
const tripNumber = this.tripNumber;
const judge = /^[a-zA-Z0-9]*[\d]$/.test(this.tripNumber);
let result = false;
if (judge) {
if (tripNumber.toString().length > figuresOfServiceMaxNumber || tripNumber.toString().length < figuresOfServiceMinNumber) {
this.messageTip1 = '车次号长度' + figuresOfServiceMinNumber + '-' + figuresOfServiceMaxNumber + '位';
result = false;
} else {
// this.tripNumber = tripNumber;
this.messageTip1 = '';
result = true;
}
} else {
this.tripNumber = '';
this.messageTip1 = '请输入车次号(最后一位数字)';
}
return result;
},
commit() {
const figuresOfServiceMinNumber = 2;
const figuresOfServiceMaxNumber = 6;
let result = false;
const tripNumber = this.tripNumber;
if (tripNumber.toString().length > figuresOfServiceMaxNumber || tripNumber.toString().length < figuresOfServiceMinNumber) {
result = false;
} else {
result = true;
}
const result = this.judgeTripNumber();
if (this.tripNumber && result) {
const params = {
tripNumber: this.tripNumber
@ -114,15 +112,7 @@ export default {
this.doClose();
this.$refs.noticeInfo.doShow();
});
} else {
if (this.tripNumber) {
this.messageTip1 = '该车次号长度' + figuresOfServiceMinNumber + '-' + figuresOfServiceMaxNumber + '位';
} else {
this.messageTip1 = '请输入车次号(最后一位数字)';
}
}
},
cancel() {
const operate = {

View File

@ -1,50 +1,44 @@
<template>
<div class="menus" :style="{width: width + 'px'}">
<menu-bar v-if="isCtc" ref="menuBar" :selected="selected" />
<div v-if="isCtc" style="display: flex;position: absolute; top: 6px;z-index: 13;left: 50px;">
<img :src="ctcBarIcon1" class="img-box" />
<img :src="ctcBarIcon2" class="img-box" />
<img :src="ctcBarIcon3" class="img-box" />
<img :src="ctcBarIcon4" class="img-box" />
<img :src="ctcBarIcon5" class="img-box" />
<img :src="ctcBarIcon6" class="img-box" />
<img :src="ctcBarIcon7" class="img-box" />
<img :src="ctcBarIcon8" class="img-box" />
<img :src="ctcBarIcon9" class="img-box" />
<img :src="ctcBarIcon10" class="img-box" />
<img :src="ctcBarIcon11" class="img-box" />
<img :src="ctcBarIcon12" class="img-box" />
<img :src="ctcBarIcon13" class="img-box" />
<img :src="ctcBarIcon14" class="img-box" />
<img :src="ctcBarIcon15" class="img-box" />
<img :src="ctcBarIcon16" class="img-box" />
<img :src="ctcBarIcon17" class="img-box" />
<img :src="ctcBarIcon18" class="img-box" />
</div>
<!--<div v-if="$store.state.training.prdType == '01'" class="alarm-window">-->
<!--<div v-for="elem in alarmMessages" :key="elem.id" style="font-size: 14px;">-->
<!--{{ elem.message }}-->
<!--</div>-->
<!--</div>-->
<!--<div class="device-status-window">-->
<!--<div class="device-status-button" :style="{background: mode === 'liansuo' ? '#0f0': '#f00'}" @click="selectedMode('liansuo')">联锁I</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: #0f0;">操作A</div>-->
<!--<div class="device-status-button" style="background: #ff0;">操作B</div>-->
<!--<div class="device-status-button" style="background: #f00;">维修机</div>-->
<!--</div>-->
<!--<div v-if="$store.state.training.prdType == '01'" class="warning-window">-->
<!--<div v-for="elem in warningMessages" :key="elem.id" style="font-size: 14px;color: #ff0">-->
<!--{{ elem.message }}-->
<!--</div>-->
<!--</div>-->
<div v-if="$store.state.training.prdType == '01'" style="width: 1405px;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: 40%;height: 30px;line-height: 30px;text-align: center;border-left: 2px #ccc solid;">{{ '操控A:主机' + ' ' + dateString + ' ' + time }}</div>
</div>
<div v-if="isCtc" style="font-size: 14px;padding: 0 10px;background: #DEE3F3;line-height: 30px;position: absolute;width: 100%;z-index: 9;">{{ `哈尔滨局CTC3.0(车务终端A机)--王岗${dateString}第一班 18:00 管理员代--` }}</div>
<menu-bar v-if="isCtc" ref="menuBar" :date-strin="dateString1" :selected="selected" />
<div v-if="isCtc" style="position: absolute; top: 64px;z-index: 10;background: #F0F0F0;padding: 2px;height: 65px;width: 100%;">
<div style="display: flex;">
<img :src="ctcBarIcon1" class="img-box">
<img :src="ctcBarIcon2" class="img-box">
<img :src="ctcBarIcon3" class="img-box">
<img :src="ctcBarIcon4" class="img-box">
<img :src="ctcBarIcon5" class="img-box">
<img :src="ctcBarIcon6" class="img-box">
<img :src="ctcBarIcon7" class="img-box">
<img :src="ctcBarIcon8" class="img-box">
<img :src="ctcBarIcon9" class="img-box">
<img :src="ctcBarIcon10" class="img-box">
<img :src="ctcBarIcon11" class="img-box">
<img :src="ctcBarIcon12" class="img-box">
<img :src="ctcBarIcon13" class="img-box">
<img :src="ctcBarIcon14" class="img-box">
<img :src="ctcBarIcon15" class="img-box">
<img :src="ctcBarIcon16" class="img-box">
<img :src="ctcBarIcon17" class="img-box">
<img :src="ctcBarIcon18" class="img-box" @click="handleRunplan">
</div>
<div style="display: flex;padding: 2px;border-top: 2px solid #D1D1D1;margin-top: 3px">
<div class="img-box" style="width: 100px;height: 25px;line-height: 21px;text-align: center;">调度命令</div>
<div style="width: 200px;height: 25px;border: 2px #D1D1D1 inset;line-height: 21px;text-align: center;margin-left: 5px;" />
<div class="img-box" style="width: 100px;height: 25px;line-height: 21px;text-align: center;margin-left: 100px;">阶段计划</div>
<div class="img-box" style="width: 100px;height: 25px;line-height: 21px;text-align: center;margin-left: 5px;">阶段记事</div>
<div style="width: 200px;height: 25px;border: 2px #D1D1D1 inset;line-height: 21px;text-align: center;margin-left: 5px;">{{ dateString1 + ' ' + time }}</div>
<div style="width: 200px;height: 25px;border: 2px #D1D1D1 inset;line-height: 21px;text-align: center;margin-left: 5px;">同步站机通信中断</div>
<div style="width: 200px;height: 25px;border: 2px #D1D1D1 inset;line-height: 21px;text-align: center;margin-left: 5px;">与中心通信正常</div>
</div>
</div>
<div v-if="$store.state.training.prdType == '01'&& !isCtc" style="width: 1405px;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: 40%;height: 30px;line-height: 30px;text-align: center;border-left: 2px #ccc solid;">{{ '操控A:主机' + ' ' + dateString + ' ' + time }}</div>
</div>
<menu-button v-if="!isCtc" ref="menuButton" :selected="selected" />
<menu-button-ctc v-if="isCtc" ref="menuButtonCtc" :selected="selected" />
<menu-button-ctc v-if="isCtc" ref="menuButtonCtc" :selected="selected" />
<menu-station-stand ref="menuStationStand" :selected="selected" />
<menu-switch ref="menuSwitch" :selected="selected" />
<menu-signal ref="menuSignal" :selected="selected" />
@ -54,6 +48,9 @@
<passive-alarm ref="passiveAlarm" />
<passive-contorl ref="passiveControl" pop-class="chengdou-03__systerm" />
<passive-Timeout ref="passiveTimeout" />
<runplan-pane v-if="isCtc" ref="runplanPane" />
<bottom-table ref="bottomTable" />
<menu-panel v-if="isCtc" ref="menuPanel" />
</div>
</template>
@ -68,11 +65,14 @@ import MenuTrain from './menuTrain';
import MenuStation from './menuStation';
import MenuBar from './menuBar';
import MenuButtonCtc from './menuButtonCtc';
import RunplanPane from './runplanPane';
import PassiveAlarm from './passiveDialog/alarm';
import PassiveContorl from '@/jmapNew/theme/components/menus/passiveDialog/control';
import PassiveTimeout from './passiveDialog/timeout';
import { timeFormat } from '@/utils/date';
import { prefixIntrger } from '@/utils/date';
import BottomTable from './bottomTable';
import MenuPanel from './menuPanel';
import CtcBarIcon1 from '@/assets/ctc_icon/pic1.png';
import CtcBarIcon2 from '@/assets/ctc_icon/pic2.png';
import CtcBarIcon3 from '@/assets/ctc_icon/pic3.png';
@ -106,7 +106,10 @@ export default {
PassiveAlarm,
PassiveContorl,
PassiveTimeout,
MenuButtonCtc
MenuButtonCtc,
RunplanPane,
BottomTable,
MenuPanel
},
props: {
selected: {
@ -116,48 +119,49 @@ export default {
}
}
},
data() {
return {
alarmMessages: [
{ id: 1, message: '这是告警信息一' },
{ id: 2, message: '这是告警信息二' },
{ id: 3, message: '这是告警信息三' },
{ id: 4, message: '这是告警信息四' },
{ id: 5, message: '这是告警信息五' },
{ id: 6, message: '这是告警信息六' },
{ id: 7, message: '这是告警信息七' },
],
warningMessages: [
{ id: 1, message: '这是预警信息一' },
{ id: 2, message: '这是预警信息二' },
{ id: 3, message: '这是预警信息三' },
{ id: 4, message: '这是预警信息四' },
{ id: 5, message: '这是预警信息五' },
{ id: 6, message: '这是预警信息六' },
{ id: 7, message: '这是预警信息七' },
],
time: '00:00:00',
dateString: '',
ctcBarIcon1: CtcBarIcon1,
ctcBarIcon2: CtcBarIcon2,
ctcBarIcon3: CtcBarIcon3,
ctcBarIcon4: CtcBarIcon4,
ctcBarIcon5: CtcBarIcon5,
ctcBarIcon6: CtcBarIcon6,
ctcBarIcon7: CtcBarIcon7,
ctcBarIcon8: CtcBarIcon8,
ctcBarIcon9: CtcBarIcon9,
ctcBarIcon10: CtcBarIcon10,
ctcBarIcon11: CtcBarIcon11,
ctcBarIcon12: CtcBarIcon12,
ctcBarIcon13: CtcBarIcon13,
ctcBarIcon14: CtcBarIcon14,
ctcBarIcon15: CtcBarIcon15,
ctcBarIcon16: CtcBarIcon16,
ctcBarIcon17: CtcBarIcon17,
ctcBarIcon18: CtcBarIcon18,
}
},
data() {
return {
alarmMessages: [
{ id: 1, message: '这是告警信息一' },
{ id: 2, message: '这是告警信息二' },
{ id: 3, message: '这是告警信息三' },
{ id: 4, message: '这是告警信息四' },
{ id: 5, message: '这是告警信息五' },
{ id: 6, message: '这是告警信息六' },
{ id: 7, message: '这是告警信息七' }
],
warningMessages: [
{ id: 1, message: '这是预警信息一' },
{ id: 2, message: '这是预警信息二' },
{ id: 3, message: '这是预警信息三' },
{ id: 4, message: '这是预警信息四' },
{ id: 5, message: '这是预警信息五' },
{ id: 6, message: '这是预警信息六' },
{ id: 7, message: '这是预警信息七' }
],
time: '00:00:00',
dateString: '',
dateString1: '',
ctcBarIcon1: CtcBarIcon1,
ctcBarIcon2: CtcBarIcon2,
ctcBarIcon3: CtcBarIcon3,
ctcBarIcon4: CtcBarIcon4,
ctcBarIcon5: CtcBarIcon5,
ctcBarIcon6: CtcBarIcon6,
ctcBarIcon7: CtcBarIcon7,
ctcBarIcon8: CtcBarIcon8,
ctcBarIcon9: CtcBarIcon9,
ctcBarIcon10: CtcBarIcon10,
ctcBarIcon11: CtcBarIcon11,
ctcBarIcon12: CtcBarIcon12,
ctcBarIcon13: CtcBarIcon13,
ctcBarIcon14: CtcBarIcon14,
ctcBarIcon15: CtcBarIcon15,
ctcBarIcon16: CtcBarIcon16,
ctcBarIcon17: CtcBarIcon17,
ctcBarIcon18: CtcBarIcon18
};
},
computed: {
...mapGetters('config', [
'width'
@ -165,19 +169,19 @@ export default {
isShowBar() {
return this.$store.state.training.prdType && this.$store.state.training.prdType !== '07';
},
isCtc() {
return this.$route.query.ctc
}
isCtc() {
return this.$route.query.ctc;
}
},
watch: {
isShowBar(val) {
val && this.$store.dispatch('config/updateMenuBar');
},
'$store.state.socket.simulationTimeSync': function (time) { // 仿
this.$store.dispatch('training/setInitTime', +new Date(`${new Date().toLocaleDateString()} ${timeFormat(time)}`));
const date = new Date(+new Date(`${new Date().toLocaleDateString()} ${timeFormat(time)}`));
this.initDate(date);
}
'$store.state.socket.simulationTimeSync': function (time) { // 仿
this.$store.dispatch('training/setInitTime', +new Date(`${new Date().toLocaleDateString()} ${timeFormat(time)}`));
const date = new Date(+new Date(`${new Date().toLocaleDateString()} ${timeFormat(time)}`));
this.initDate(date);
}
},
mounted() {
this.$nextTick(() => {
@ -199,17 +203,21 @@ export default {
beforeDestroy() {
window.onclick = function (e) {};
},
methods: {
initDate(date) {
this.time = `${prefixIntrger(date.getHours(), 2)}:${prefixIntrger(date.getMinutes(), 2)}:${prefixIntrger(date.getSeconds(), 2)}`;
const years = date.getFullYear() + '';
let months = date.getMonth() + 1 + '';
let dates = date.getDate() + '';
if (months.length < 2) { months = '0' + months; }
if (dates.length < 2) { dates = '0' + dates; }
this.dateString = years + months + dates;
}
}
methods: {
initDate(date) {
this.time = `${prefixIntrger(date.getHours(), 2)}:${prefixIntrger(date.getMinutes(), 2)}:${prefixIntrger(date.getSeconds(), 2)}`;
const years = date.getFullYear() + '';
let months = date.getMonth() + 1 + '';
let dates = date.getDate() + '';
if (months.length < 2) { months = '0' + months; }
if (dates.length < 2) { dates = '0' + dates; }
this.dateString = years + months + dates;
this.dateString1 = years + '年' + months + '月' + dates + '日';
},
handleRunplan() {
this.$refs.runplanPane.doShow();
}
}
};
</script>
@ -468,89 +476,273 @@ export default {
font-weight: normal !important;
color: #000 !important;
}
.fuzhou-01__systerm .el-dialog {
background: rgba(100, 100, 100, 0.3);
border: 2px solid rgb(144, 144, 144, 0.8);
border-radius: 6px;
color: #000;
font-size: 14px;
}
.chengdou-03__systerm .el-dialog .context {
height: 100px;
border: 2px inset #E2E2E2;
overflow-y: scroll;
}
.chengdou-03__systerm .el-dialog .table {
margin-top: 10px;
}
.chengdou-03__systerm .el-dialog .notice {
margin-left: 62px;
line-height: 30px;
}
.chengdou-03__systerm .el-dialog .button-group {
margin-top: 20px;
}
.alarm-window {
width: 450px;
height: 100px;
position: fixed;
top: 10px;
left: 55px;
background: #f00;
z-index: 10;
overflow-y: scroll;
border-bottom: 6px #ccc solid;
border-top: 6px #ccc solid;
border-right: 3px #ccc solid;
border-left: 3px #ccc solid;
.fuzhou-01__systerm .el-dialog .el-dialog__header {
padding: 5px;
height: 26px;
}
.device-status-window {
width: 160px;
height: 35px;
position: fixed;
top: 50px;
right: 10px;
z-index: 10;
display: flex;
border: 2px #FBFCFB solid;
align-items: center;
justify-content: center;
.fuzhou-01__systerm .el-dialog .el-dialog__footer {
background: #F0F0F0;
opacity: 1;
}
.device-status-button {
border-top: 2px #808080 solid;
border-left: 2px #808080 solid;
border-right: 2px #FDFBF9 solid;
border-bottom: 2px #FDFBF9 solid;
width: 79px;
height: 30px;
text-align: center;
.fuzhou-01__systerm .el-dialog .el-dialog__body {
padding-top: 10px;
padding-bottom: 10px;
padding-left: 5px;
padding-right: 5px;
margin: 0px 5px 5px;
border: 2px solid rgba(120, 121, 123, 0.5);
box-shadow: 1px hsla(240, 0%, 100%, 0.5) inset;
background: #F0F0F0;
opacity: 1;
}
.fuzhou-01__systerm .el-dialog .el-dialog__title {
position: absolute;
top: 4px;
color: #000;
border-radius: 4px;
padding: 0px 2px;
height: 20px;
line-height: 20px
}
.fuzhou-01__systerm .el-dialog .el-dialog__title::before {
content: '';
position: absolute;
top: 0;
left: 0;
-webkit-filter: blur(10px);
filter: blur(10px);
height: 20px;
width: -webkit-fill-available;
background: rgba(128, 128, 128, 0.8);
z-index: -1;
}
.fuzhou-01__systerm .el-dialog .el-dialog__headerbtn {
background: linear-gradient(#CD98A0, #C27D6E, #B63022, #C68770);
border: 1px solid #fff;
border-radius: 4px;
top: 4px;
right: 5px;
line-height: 16px;
}
.fuzhou-01__systerm .el-dialog .el-dialog__headerbtn .el-icon-close:before {
font-size: 16px;
}
.fuzhou-01__systerm .el-dialog .el-dialog__headerbtn .el-dialog__close {
color: #fff;
}
.fuzhou-01__systerm .el-dialog .el-button {
height: 32px;
line-height: 32px;
padding: 0px;
width: 80px;
border: 2px outset #E2E2E2;
border-radius: 0px !important;
color: #000;
background: #F0F0F0;
}
.fuzhou-01__systerm .el-dialog .el-button:focus span {
border: 1px dashed gray;
}
.fuzhou-01__systerm .el-dialog .el-button:active {
border: 2px inset #E2E2E2;
}
.fuzhou-01__systerm .el-dialog .el-button:disabled {
border: 2px inset #E2E2E2;
}
.fuzhou-01__systerm .el-dialog .el-button:disabled span {
border: 0px;
}
.fuzhou-01__systerm .el-dialog .el-input {
border: 2px inset #E9E9E9;
}
.fuzhou-01__systerm .el-dialog .el-input .el-input__inner {
color: #000;
background: #fff !important;
border: 0px;
border-radius: 0px !important;
box-sizing: border-box;
}
.fuzhou-01__systerm .el-dialog .el-input.is-disabled .el-input__inner {
background: #F0F0F0 !important;
}
.fuzhou-01__systerm .el-dialog .el-textarea {
border: 2px inset #E9E9E9;
border-radius: 0px;
}
.fuzhou-01__systerm .el-dialog .el-textarea .el-textarea__inner {
color: #000;
background: #fff !important;
border: 0px;
border-radius: 0px !important;
box-sizing: border-box;
}
.fuzhou-01__systerm .el-dialog .el-textarea.is-disabled .el-textarea__inner {
background: #F0F0F0 !important;
}
.fuzhou-01__systerm .el-dialog .el-table {
border: 2px inset #E9E9E9;
color: #000 !important;
}
.fuzhou-01__systerm .el-dialog .el-table .cell {
line-height: unset !important;
}
.fuzhou-01__systerm .el-dialog .el-table th.is-leaf {
background: #F0F0F0 !important;
border-right: 1px solid #BDBDBD !important;
border-bottom: 1px solid #BDBDBD !important;
color: #000 !important;
height: 20px !important;
padding: 0px;
}
.fuzhou-01__systerm .el-dialog .el-table tr td {
height: 20px !important;
padding: 0px;
}
.fuzhou-01__systerm .el-dialog .el-table .el-table__empty-text {
top: 15px !important;
}
.fuzhou-01__systerm .el-dialog .current-row>td {
background: #3399FF !important;
color: #fff !important;
}
.fuzhou-01__systerm .el-dialog .el-checkbox__inner {
border: 1px inset #dcdfe6 !important;
}
.fuzhou-01__systerm .el-dialog .el-checkbox__label {
color: #000 !important;
}
.fuzhou-01__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__inner {
background: #E6E6E6 !important;
}
.fuzhou-01__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__label {
color: #C5C9CC !important;
}
.fuzhou-01__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner {
background: #fff !important;
border: 1px inset #dcdfe6 !important;
}
.fuzhou-01__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner::after {
position: absolute;
-webkit-box-sizing: content-box;
box-sizing: content-box;
content: "";
border: 1px solid #000;
border-left: 0;
border-top: 0;
height: 7px;
left: 4px;
top: 1px;
}
.fuzhou-01__systerm .el-dialog .el-radio__inner {
border: 1px inset #dcdfe6 !important;
}
.fuzhou-01__systerm .el-dialog .el-radio__label {
color: #000 !important;
}
.fuzhou-01__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner {
background: #fff !important;
border: 1px inset #dcdfe6 !important;
}
.fuzhou-01__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner::after {
width: 4px;
height: 4px;
border-radius: 100%;
background-color: #000 !important;
position: absolute;
left: 50%;
top: 50%;
}
.fuzhou-01__systerm .el-dialog .el-radio.is-disabled .el-radio__inner {
background: #E6E6E6 !important;
}
.fuzhou-01__systerm .el-dialog .el-radio.is-disabled .el-radio__label {
color: #C5C9CC !important;
}
.fuzhou-01__systerm .el-dialog .base-label {
background: rgb(240 240 240);
position: relative;
}
.fuzhou-01__systerm .el-dialog .el-form-item label {
font-weight: normal !important;
color: #000 !important;
}
.fuzhou-01__systerm .el-dialog .context {
height: 100px;
border: 2px inset #E2E2E2;
overflow-y: scroll;
}
.fuzhou-01__systerm .el-dialog .table {
margin-top: 10px;
}
.fuzhou-01__systerm .el-dialog .notice {
margin-left: 62px;
line-height: 30px;
cursor: pointer;
}
.warning-window {
width: 400px;
height: 100px;
position: fixed;
right: 10px;
top: 60px;
background: #808080;
z-index: 10;
overflow-y: scroll;
border-bottom: 6px #ccc solid;
border-top: 6px #ccc solid;
border-right: 3px #ccc solid;
border-left: 3px #ccc solid;
padding: 5px;
.fuzhou-01__systerm .el-dialog .button-group {
margin-top: 10px;
}
.img-box{
width: 28px;
height: 28px;
border: 3px #ccc inset;
border: 2px #ccc outset;
margin-top: 0;
background: #fff;
cursor: pointer;
}
.img-box:active{
border: 3px #ccc outset;
border: 2px #ccc inset;
}
.img-box:hover{
border: 3px #ccc outset;
border: 2px #ccc inset;
}
</style>

View File

@ -1,26 +1,6 @@
<template>
<div id="menuBarChengdu3">
<menu-bar ref="menuBar" :menu-normal="menuNormal" style="width:100%" />
<!--<div style="display: flex;">-->
<!--<img :src="ctcBarIcon1" class="img-box" />-->
<!--<img :src="ctcBarIcon2" class="img-box" />-->
<!--<img :src="ctcBarIcon3" class="img-box" />-->
<!--<img :src="ctcBarIcon4" class="img-box" />-->
<!--<img :src="ctcBarIcon5" class="img-box" />-->
<!--<img :src="ctcBarIcon6" class="img-box" />-->
<!--<img :src="ctcBarIcon7" class="img-box" />-->
<!--<img :src="ctcBarIcon8" class="img-box" />-->
<!--<img :src="ctcBarIcon9" class="img-box" />-->
<!--<img :src="ctcBarIcon10" class="img-box" />-->
<!--<img :src="ctcBarIcon11" class="img-box" />-->
<!--<img :src="ctcBarIcon12" class="img-box" />-->
<!--<img :src="ctcBarIcon13" class="img-box" />-->
<!--<img :src="ctcBarIcon14" class="img-box" />-->
<!--<img :src="ctcBarIcon15" class="img-box" />-->
<!--<img :src="ctcBarIcon16" class="img-box" />-->
<!--<img :src="ctcBarIcon17" class="img-box" />-->
<!--<img :src="ctcBarIcon18" class="img-box" />-->
<!--</div>-->
<menu-bar ref="menuBar" :menu-normal="menuNormal" style="width:100%;top: 30px;" />
<station-control-convert ref="stationControlConvert" />
<password-box ref="passwordBox" @setLoginResult="getLoginResult" />
<view-name ref="viewName" />
@ -45,24 +25,7 @@ import ViewName from './menuDialog/viewName';
import ManageUser from './menuDialog/manageUser';
import HelpAbout from './menuDialog/helpAbout';
import SetLimitSpeed from './menuDialog/setLimitSpeed';
import CtcBarIcon1 from '@/assets/ctc_icon/pic1.png';
import CtcBarIcon2 from '@/assets/ctc_icon/pic2.png';
import CtcBarIcon3 from '@/assets/ctc_icon/pic3.png';
import CtcBarIcon4 from '@/assets/ctc_icon/pic4.png';
import CtcBarIcon5 from '@/assets/ctc_icon/pic5.png';
import CtcBarIcon6 from '@/assets/ctc_icon/pic6.png';
import CtcBarIcon7 from '@/assets/ctc_icon/pic7.png';
import CtcBarIcon8 from '@/assets/ctc_icon/pic8.png';
import CtcBarIcon9 from '@/assets/ctc_icon/pic9.png';
import CtcBarIcon10 from '@/assets/ctc_icon/pic10.png';
import CtcBarIcon11 from '@/assets/ctc_icon/pic11.png';
import CtcBarIcon12 from '@/assets/ctc_icon/pic12.png';
import CtcBarIcon13 from '@/assets/ctc_icon/pic13.png';
import CtcBarIcon14 from '@/assets/ctc_icon/pic14.png';
import CtcBarIcon15 from '@/assets/ctc_icon/pic15.png';
import CtcBarIcon16 from '@/assets/ctc_icon/pic16.png';
import CtcBarIcon17 from '@/assets/ctc_icon/pic17.png';
import CtcBarIcon18 from '@/assets/ctc_icon/pic18.png';
import { EventBus } from '@/scripts/event-bus';
export default {
name: 'MenuBarChengdu03',
@ -78,31 +41,20 @@ export default {
HelpAbout,
SetLimitSpeed
},
props: {
dateString: {
type: String,
default: () => {
return '';
}
}
},
data() {
return {
ctcBarIcon1: CtcBarIcon1,
ctcBarIcon2: CtcBarIcon2,
ctcBarIcon3: CtcBarIcon3,
ctcBarIcon4: CtcBarIcon4,
ctcBarIcon5: CtcBarIcon5,
ctcBarIcon6: CtcBarIcon6,
ctcBarIcon7: CtcBarIcon7,
ctcBarIcon8: CtcBarIcon8,
ctcBarIcon9: CtcBarIcon9,
ctcBarIcon10: CtcBarIcon10,
ctcBarIcon11: CtcBarIcon11,
ctcBarIcon12: CtcBarIcon12,
ctcBarIcon13: CtcBarIcon13,
ctcBarIcon14: CtcBarIcon14,
ctcBarIcon15: CtcBarIcon15,
ctcBarIcon16: CtcBarIcon16,
ctcBarIcon17: CtcBarIcon17,
ctcBarIcon18: CtcBarIcon18,
menuNormal: {
Local: [
{
title: '系统',
// operate: OperationEvent.Command.mBar.system,
title: '登录',
operate: '',
children: [
{
@ -113,20 +65,6 @@ export default {
title: '注销',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '连接主用中心',
click: this.undeveloped
},
{
title: '连接备用中心',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '退出',
click: this.undeveloped
@ -134,125 +72,45 @@ export default {
]
},
{
title: '临时限速',
operate: OperationEvent.Command.mBar.limitSpeed,
children: [
{
title: '设置临时限速',
operate: OperationEvent.Section.setLimitSpeed,
click: this.setLimitSpeed
},
{
title: '取消临时限速',
operate: OperationEvent.Section.cancelSpeed,
click: this.cancleLimitSpeed
}
]
},
{
title: '查看',
// operate: OperationEvent.Command.mBar.check,
title: '显示',
operate: '',
children: [
{
title: '运行图',
click: this.undeveloped
},
{
title: '报告分析',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '视图',
click: this.undeveloped,
title: '工具栏',
operate: '',
children: [{
title: '报警',
click: this.undeveloped
},
{
title: '列车运行信息',
click: this.undeveloped
},
{
title: '设备状态',
click: this.undeveloped
},
{
title: '列车详细信息',
click: this.undeveloped
},
{
title: '站台详细信息',
click: this.undeveloped
}]
children: [
{
title: '标准按钮',
click: this.undeveloped
},
{
title: '签收栏',
click: this.undeveloped
},
{
title: '显示系统信息窗口',
click: this.undeveloped
},
{
title: '显示进路序列管理窗口',
click: this.bottomTableShowOrHidden
},
{
title: '显示信号员计划表',
click: this.undeveloped
},
{
title: '显示信号员注意事项',
click: this.undeveloped
}
]
},
{
title: '终端站发车列表',
title: '站场图',
click: this.undeveloped
},
{
title: '详细设备状态',
click: this.undeveloped
},
{
title: '查找列车',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '显示目的地号',
click: this.undeveloped
},
{
title: '显示轨道名',
click: this.undeveloped
},
{
title: '显示道岔名',
click: this.undeveloped
},
{
title: '显示信号机名',
click: this.undeveloped
},
{
title: '显示车次窗位置',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '显示车次号',
click: this.undeveloped
},
{
title: '显示车组号',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '全屏',
click: this.undeveloped
},
{
title: '放大',
click: this.undeveloped
},
{
title: '缩小',
click: this.undeveloped
},
{
title: '恢复',
title: '行车日志',
click: this.undeveloped
}
]
@ -264,110 +122,92 @@ export default {
// ]
// },
{
title: '显示',
title: '工具',
// operate: OperationEvent.Command.mBar.view,
operate: '',
hide: true,
children: [
{
title: '设置列车识别号显示',
click: this.setTrainIdDisplay,
operate: OperationEvent.Command.view.setTrainIdDisplay
},
{
title: '设置名称显示',
click: this.setNameDisplay,
operate: OperationEvent.Command.view.setNameDisplay
},
{
title: '设置设备显示',
click: this.setDeviceDisplay,
operate: OperationEvent.Command.view.setDeviceDisplay
}
]
},
{
title: 'ATS终端操作',
operate: '',
children: [
{
title: '当天运行车计划',
title: '调度命令管理',
click: this.undeveloped
},
{
title: '出入库预告',
title: '甩挂车作业',
click: this.undeveloped
},
{
title: '列车编组(速报表)',
click: this.undeveloped
},
{
title: '站存车(现存车)',
click: this.undeveloped
},
{
title: '列控命令',
click: this.undeveloped
},
{
title: '车站直接限速',
click: this.undeveloped
},
{
title: '运统46',
click: this.undeveloped
},
{
title: '站场图回放',
click: this.undeveloped
},
{
title: '列控区间占用逻辑检查',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '更新数据',
click: this.undeveloped
},
{
title: '列车固定径路',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '用户管理',
click: this.undeveloped
},
{
title: '选项',
click: this.undeveloped
},
{
type: 'separator'
},
{
type: '时钟显示',
click: this.undeveloped
}
]
},
{
title: '计划车操作',
title: '调试',
operate: '',
children: [
{
title: '添加计划车',
click: this.undeveloped
},
{
title: '平移计划车',
click: this.undeveloped
},
{
title: '删除计划车',
click: this.undeveloped
}
]
children: []
},
{
title: '批处理命令',
title: '窗口',
operate: '',
children: [
{
title: '全线扣车',
click: this.undeveloped
},
{
title: '取消全线扣车',
click: this.undeveloped
},
{
title: '取消上行全线扣车',
click: this.undeveloped
},
{
title: '取消下行全线扣车',
click: this.undeveloped
}
]
},
{
title: '信息管理',
operate: '',
children: [
{
title: '调度日志',
click: this.undeveloped
},
{
title: '调度留言提醒',
click: this.undeveloped
},
{
title: '报警设置',
click: this.undeveloped
}
]
children: []
},
{
title: '帮助',
operate: '',
children: [
{
title: '关于ITS GPC 工作站',
click: this.about,
operate: OperationEvent.Command.help.about
}
]
children: []
}
],
Center: [
@ -671,7 +511,6 @@ export default {
mapLocation(code) {
if (code) {
this.$store.dispatch('training/updateOffsetStationCode', { offsetStationCode: code });
}
},
//
@ -720,6 +559,9 @@ export default {
}
});
},
bottomTableShowOrHidden() {
EventBus.$emit('bottomTableShowOrHidden');
},
undeveloped() {
this.$refs.menuBar.doClose();
this.$alert('实现中......', '提示', {

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,154 @@
<template>
<el-dialog
v-dialogDrag
class="signal-control"
:class="popClass"
title="取消进路"
:visible.sync="dialogShow"
width="350px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div>
<i class="el-icon-warning"/>
<span>{{ showMessage }}</span>
</div>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">{{ $t('menu.confirm') }}</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel">{{ $t('menu.cancel') }}</el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" :pop-class="popClass" />
<password-box ref="passwordBox" @checkOver="passWordCommit" @checkCancel="cancel" />
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import OperationHandler from '@/scripts/cmdPlugin/OperationHandler';
import {menuOperate, commitOperate} from '../../../components/utils/menuOperate';
import NoticeInfo from '../../../components/menus/childDialog/noticeInfo';
import PasswordBox from '../dialog/childDialog/passwordInputBox.vue';
export default {
name: 'routeCancel',
components: {
NoticeInfo,
PasswordBox
},
data() {
return {
dialogShow: false,
signalName: '',
popClass: 'chengdou-03__systerm',
loading: false,
showMessage: ''
}
},
computed: {
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.close.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationHandler.getDomIdByOperation(this.operation) : '';
}
},
methods: {
doClose() {
this.loading = false;
this.dialogShow = false;
this.$root.$emit('dialogClose', this.selected);
this.$store.dispatch('training/emitTipFresh');
this.mouseCancelState(this.selected);
},
doShow(operate, selected) {
this.selected = selected;
this.signalName = '';
if (selected && selected._type.toUpperCase() === 'Signal'.toUpperCase()) {
this.signalName = selected.name;
} else if (selected && selected._type.toUpperCase() === 'Switch'.toUpperCase()){
this.switchName = selected.name;
}
this.operation = operate.operation;
if (this.operation === OperationEvent.Signal.cancelTrainRoute.menu.operation) {
this.showMessage = `下发“取消进路”【信号机:${this.signalName}】命令吗?`;
} else if (this.operation === OperationEvent.Signal.reopenSignal.menu.operation) {
this.showMessage = `下发“信号重开”命令吗?`;
} else if (this.operation === OperationEvent.Signal.guide.menu.operation) {
this.showMessage = `下发“引导进路”命令吗?`;
} else if (this.operation === OperationEvent.Signal.humanTrainRoute.menu.operation) {
this.showMessage = `下发“总人解”命令吗?`
} else if (this.operation === OperationEvent.Switch.locate.menu.operation) {
this.showMessage = `下发“定操【道岔:${this.switchName}】”命令吗?`
} else if (this.operation === OperationEvent.Switch.reverse.menu.operation) {
this.showMessage = `下发“反操【道岔:${this.switchName}】”命令吗?`
} else if (this.operation === OperationEvent.Switch.lock.menu.operation) {
this.showMessage = `下发“单锁【道岔:${this.switchName}】”命令吗?`
} else if (this.operation === OperationEvent.Switch.unlock.menu.operation) {
this.showMessage = `下发“单解【道岔:${this.switchName}】”命令吗?`
} else {
this.showMessage = '';
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
commit() {
if (this.operation === OperationEvent.Signal.cancelTrainRoute.menu.operation) {
this.sendCommand(menuOperate.Signal.cancelTrainRoute);
} else if (this.operation === OperationEvent.Signal.reopenSignal.menu.operation) {
this.sendCommand(menuOperate.Signal.reopenSignal);
} else if (this.operation === OperationEvent.Signal.guide.menu.operation) {
this.$refs.passwordBox.doShow({ operation: OperationEvent.Signal.guide.menu.operation });
} else if (this.operation === OperationEvent.Signal.humanTrainRoute.menu.operation) {
this.sendCommand(menuOperate.Signal.humanTrainRoute);
} else if (this.operation === OperationEvent.Switch.locate.menu.operation) {
this.sendCommand(menuOperate.Switch.locate);
} else if (this.operation === OperationEvent.Switch.reverse.menu.operation ) {
this.sendCommand(menuOperate.Switch.reverse);
}
},
cancel() {
const operate = {
operation: OperationEvent.Command.close.menu.operation
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
this.$refs.noticeInfo.doShow();
});
},
sendCommand(operate) {
this.loading = true;
commitOperate(operate, {}, 2).then(({valid})=>{
this.loading = false;
if (valid) {
this.doClose();
}
}).catch((error) => {
this.loading = false;
this.doClose();
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
passWordCommit(operate) {
if (operate.operation === OperationEvent.Signal.guide.menu.operation) {
this.sendCommand(menuOperate.Signal.guide);
}
}
}
};
</script>
<style scoped>
</style>

View File

@ -0,0 +1,302 @@
<template>
<div v-if="dialogShow" id="faultChoose">
<!-- <div class="falutChooseTitle">ceshi</div>-->
<div class="card" style="padding: 5px;">
<div style="background: #999EA7;display: flex;align-items: center;">
<div class="button-box">
<img :src="t3Pic" class="img-button">
</div>
<div class="button-box">
<img :src="panelPic" class="img-button" @click="showLineBoard">
</div>
<div class="button-box">
<img :src="trainPic" class="img-button">
</div>
<div class="button-box">
<img :src="linkPic" class="img-button">
</div>
<div class="button-box">
<img :src="cameraPic" class="img-button">
</div>
<div style="width: 205px;height: 36px; background: #fff;border-radius: 5px;" />
<div class="button-box">
<img :src="settingPic" class="img-button">
</div>
<div class="button-box">
<img :src="shutdownPic" class="img-button">
</div>
</div>
</div>
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import { MouseEvent } from '@/scripts/ConstDic';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import T3Pic from '@/assets/ctc_icon/t3.png';
import TrainPic from '@/assets/ctc_icon/train.png';
import PanelPic from '@/assets/ctc_icon/panel.png';
import LinkPic from '@/assets/ctc_icon/link.png';
import CameraPic from '@/assets/ctc_icon/camera.png';
import SettingPic from '@/assets/ctc_icon/setting.png';
import ShutdownPic from '@/assets/ctc_icon/shutdown.png';
import { EventBus } from '@/scripts/event-bus';
export default {
name: 'RouteCreate',
components: {
NoticeInfo
},
data() {
return {
dialogShow: true,
loading: false,
selected: null,
t3Pic: T3Pic,
panelPic: PanelPic,
trainPic: TrainPic,
linkPic: LinkPic,
cameraPic: CameraPic,
settingPic: SettingPic,
shutdownPic: ShutdownPic
};
},
computed: {
...mapGetters('map', [
'stationList',
'sectionList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
createDisable() {
return !(this.groupNumber1 && this.groupNumber1.length === 4 && this.nowSectionCode && this.newTrainCode && this.newTrainCode.length === 8);
},
updateDisable() {
return !(this.newTrainCode && this.newTrainCode.length === 8);
},
moveDisable() {
return !this.newSectionCode;
},
deleteDisable() {
return !this.nowTrainCode;
}
},
watch: {
'$store.state.menuOperation.selectedCount':function(em) {
const device = this.$store.state.menuOperation.selected;
if (device && device.code && device._type === 'Section') {
this.nowSectionCode = device.code;
} else if (device && device.code && device._type === 'Train' && device._event === MouseEvent.Left) {
this.doShow(device);
}
}
},
mounted() {
this.dragEvent(); // 24
},
methods: {
doShow(selected) {
this.dialogShow = true;
this.$nextTick(function () {
this.dragEvent();
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
showLineBoard() {
EventBus.$emit('showLineBoard');
},
dragEvent() {
const offset = this.offset;
const dragDom = document.querySelector('#faultChoose');
dragDom.style.cursor = 'move';
/** 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);*/
const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);
dragDom.onmousedown = (e) => {
/** 鼠标按下,计算当前元素距离可视区的距离*/
const disX = e.clientX;
const disY = e.clientY;
/** 获取到的值带px 正则匹配替换*/
let styL, styT;
/** 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px*/
if (sty.left.includes('%')) {
// eslint-disable-next-line no-useless-escape
styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100);
styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100);
} else {
// eslint-disable-next-line no-useless-escape
styL = +sty.left.replace(/\px/g, '');
// eslint-disable-next-line no-useless-escape
styT = +sty.top.replace(/\px/g, '');
}
document.onmousemove = function (e) {
/** 通过事件委托,计算移动的距离*/
const l = e.clientX - disX;
const t = e.clientY - disY;
/** 移动当前元素*/
// dragDom.style.left = `${l + styL}px`;
// dragDom.style.top = `${t + styT}px`;
/** 移动当前元素*/
if (l + styL < 0) {
dragDom.style.left = `0px`;
} else if (l + styL > document.body.clientWidth - dragDom.clientWidth - 10) {
dragDom.style.left = `${document.body.clientWidth - dragDom.clientWidth - 10}px`;
} else {
dragDom.style.left = `${l + styL}px`;
}
if (t + styT <= offset) {
dragDom.style.top = offset + `px`;
} else if (t + styT > document.body.clientHeight - dragDom.clientHeight - 10) {
dragDom.style.top = `${document.body.clientHeight - dragDom.clientHeight - 10}px`;
} else {
dragDom.style.top = `${t + styT}px`;
}
/** 将此时的位置传出去*/
// binding.value({ x: e.pageX, y: e.pageY });
};
document.onmouseup = function () {
document.onmousemove = null;
document.onmouseup = null;
};
};
}
}
};
</script>
<style lang="scss">
#faultChoose .el-button--mini {
margin-left: 5px;
}
.triggerFaultListLeft{
display: inline-block;
float: left;
width: 730px;
}
// safariqq360
//
#faultChoose .el-table__body-wrapper::-webkit-scrollbar {
width: 6px;
height: 6px;
// height: 110px;
background-color: #FFFFFF;
}
/*定义滚动条轨道 内阴影+圆角*/
#faultChoose .el-table__body-wrapper::-webkit-scrollbar-track {
// box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
border-radius: 10px;
background-color: #FFFFFF;;
}
/*定义滑块 内阴影+圆角*/
#faultChoose .el-table__body-wrapper::-webkit-scrollbar-thumb {
border-radius: 10px;
// box-shadow: inset 0 0 6px rgba(0,0,0,.3);
background-color: #eaeaea;
}
/*滑块效果*/
#faultChoose .el-table__body-wrapper::-webkit-scrollbar-thumb:hover {
border-radius: 5px;
// box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
background: rgba(0,0,0,0.4);
}
/*IE滚动条颜色*/
html {
scrollbar-face-color:#bfbfbf;/*滚动条颜色*/
scrollbar-highlight-color:#000;
scrollbar-3dlight-color:#000;
scrollbar-darkshadow-color:#000;
scrollbar-Shadow-color:#adadad;/*滑块边色*/
scrollbar-arrow-color:rgba(0,0,0,0.4);/*箭头颜色*/
scrollbar-track-color:#eeeeee;/*背景颜色*/
}
</style>
<style rel="stylesheet/scss" lang="scss" scoped>
.triggerFaultInfo{
margin-bottom:10px;
padding: 10px 0px 10px 15px;
}
.triggerFaultList{
font-size: 14px;
margin-top: 10px;
line-height: 20px;
}
.triggerFaultTitle{
font-size: 15px;
font-weight: bold;
}
.falutChooseTitle{
cursor: all-scroll;
background-color: #c0c0c0;
height: 30px;
line-height: 30px;
color: #000;
padding-left: 10px;
border-radius: 6px 6px 0 0;
}
#faultChoose{
width: 510px;
position: absolute;
left: 50%;
top: 0;
border-radius: 6px;
z-index:2009;
background-color: #E2E2E2;
}
.faultChooseFoot{
display: inline-block;
float: right;
margin-right: 20px;
margin-top: 20px;
}
.closeFalutChoose{
position: absolute;
right: 0px;
top: 0px;
width: 30px;
height: 30px;
cursor: pointer;
line-height: 30px;
}
.closeFalutChooseIn{
font-size: 20px;
margin-left: 5px;
background-color: #f00;
color: #FFF;
border: 1px solid #fff;
border-radius: 5px;
}
.img-button{
width: 30px;
height: 30px;
background: #EBEBEB;
border: 2px inset #fff;
border-radius: 5px;
}
.img-button:hover{
border: 2px outset #fff;
}
.img-button:active{
border: 2px outset #fff;
}
.button-box{
padding: 3px;
background: #EBEBEB;
width: 36px;
height: 36px;
border-radius: 5px;
margin: 3px;
cursor: pointer;
}
</style>

View File

@ -24,7 +24,6 @@ import CMD from '@/scripts/cmdPlugin/CommandEnum';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import { DeviceMenu, OperateMode } from '@/scripts/ConstDic';
import { menuOperate, commitOperate } from '@/jmapNew/theme/components/utils/menuOperate';
// import LoadSpareTrain from '@/jmapNew/theme/components/menus/dialog/loadSpareTrain';
import AddSpareTrain from './dialog/addSpareTrain';
import DrawSelect from './dialog/drawSelect';
@ -122,7 +121,8 @@ export default {
},
watch: {
'$store.state.menuOperation.menuCount': function (val) {
if (this.$store.getters['menuOperation/checkDialogIsOpen'](DeviceMenu.Section) && !this.buttonOperation) {
console.log(this.buttonOperation, '***********');
if (this.$store.getters['menuOperation/checkDialogIsOpen'](DeviceMenu.Section) && (!this.buttonOperation || this.$route.query.ctc)) {
this.doShow(this.$store.state.menuOperation.menuPosition);
} else {
this.doClose();

View File

@ -9,6 +9,7 @@
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
<password-box ref="passwordBox" pop-class="chengdou-03__systerm" @checkOver="passWordCommit" />
<draw-select ref="drawSelect" />
<route-cancel ref="routeCancel" />
<set-fault ref="setFault" pop-class="chengdou-03__systerm" />
</div>
</template>
@ -21,6 +22,7 @@ import RouteSelection from './dialog/routeSelection';
import RouteDetail from './dialog/routeDetail';
import RouteHandControl from './dialog/routeHandControl';
import RouteGuide from './dialog/routeGuide';
import RouteCancel from './menuDialog/routeCancel';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
@ -29,6 +31,7 @@ import CMD from '@/scripts/cmdPlugin/CommandEnum';
import PasswordBox from '@/jmapNew/theme/components/menus/childDialog/passwordInputBox';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import DrawSelect from './dialog/drawSelect';
import { EventBus } from '@/scripts/event-bus';
export default {
name: 'SignalMenu',
@ -42,7 +45,8 @@ export default {
NoticeInfo,
PasswordBox,
SetFault,
DrawSelect
DrawSelect,
RouteCancel
},
props: {
selected: {
@ -57,49 +61,52 @@ export default {
menu: [],
menuNormal: {
Local: [
// {
// label: '',
// handler: this.drawingCall
// },
// {
// label: '',
// handler: this.baDeTrCall
// }
// {
// label: '',
// handler: this.arrangementRoute,
// cmdType: CMD.Signal.CMD_SIGNAL_SET_ROUTE
// },
// {
// label: '',
// handler: this.guide,
// cmdType: CMD.Signal.CMD_SIGNAL_ROUTE_GUIDE
// },
// {
// label: '',
// handler: this.cancelTrainRoute,
// cmdType: CMD.Signal.CMD_SIGNAL_CANCEL_ROUTE
// },
// {
// label: '', //
// handler: this.humanTrainRoute,
// cmdType: CMD.Signal.CMD_SIGNAL_HUMAN_RELEASE_ROUTE
// },
// {
// label: '',
// handler: this.humanControl,
// cmdType: CMD.Signal.CMD_SIGNAL_CLOSE_AUTO_SETTING
// },
// {
// label: '',
// handler: this.atsAutoControl,
// cmdType: CMD.Signal.CMD_SIGNAL_OPEN_AUTO_SETTING
// },
// {
// label: '',
// handler: this.detail,
// cmdType: CMD.Signal.CMD_SIGNAL_OPEN_AUTO_SETTING
// }
{
label: '办理 通过进路',
handler: this.arrangementRoute,
cmdType: CMD.Signal.CMD_SIGNAL_SET_ROUTE
},
{
type: 'separator'
},
{
label: '列车 办理进路',
handler: this.arrangementRoute,
cmdType: CMD.Signal.CMD_SIGNAL_SET_ROUTE
},
{
label: '取消进路',
handler: this.cancelTrainRoute,
cmdType: CMD.Signal.CMD_SIGNAL_CANCEL_ROUTE
},
{
label: '信号重开',
handler: this.reopenSignal,
cmdType: CMD.Signal.CMD_SIGNAL_REOPEN_SIGNAL
},
{
label: '封锁/解封',
handler: '',
cmdType: ''
},
{
label: '总人解',
handler: this.humanTrainRoute,
cmdType: CMD.Signal.CMD_SIGNAL_HUMAN_RELEASE_ROUTE
},
{
type: 'separator'
},
{
label: '引导',
handler: this.guide,
cmdType: CMD.Signal.CMD_SIGNAL_ROUTE_GUIDE
},
{
label: '坡道解锁',
handler: '',
cmdType: ''
}
],
Center: [
// {
@ -190,7 +197,8 @@ export default {
},
watch: {
'$store.state.menuOperation.menuCount': function (val) {
if (this.$store.getters['menuOperation/checkDialogIsOpen'](DeviceMenu.Signal) && !this.buttonOperation) {
console.log(DeviceMenu.Signal, val, this.$store.getters['menuOperation/checkDialogIsOpen'](DeviceMenu.Signal), this.buttonOperation);
if (this.$store.getters['menuOperation/checkDialogIsOpen'](DeviceMenu.Signal) && (!this.buttonOperation || this.$route.query.ctc)) {
this.doShow(this.$store.state.menuOperation.menuPosition);
} else {
this.doClose();
@ -262,7 +270,8 @@ export default {
arrangementRoute() {
commitOperate(menuOperate.Signal.arrangementRoute, {signalCode: this.selected.code}, 0).then(({valid, operate}) => {
if (valid) {
this.$refs.routeSelection.doShow(operate, this.selected, this.getRouteList(this.selected));
// this.$refs.routeSelection.doShow(operate, this.selected, this.getRouteList(this.selected));
EventBus.$emit('arrangementRouteMenu', this.selected);
}
});
},
@ -270,7 +279,8 @@ export default {
guide() {
commitOperate(menuOperate.Signal.guide, {signalCode: this.selected.code}, 0).then(({valid, operate}) => {
if (valid) {
this.$refs.passwordBox.doShow({...operate, ...{selected: this.selected}, ...{routesList: this.getRouteList(this.selected)}});
// this.$refs.passwordBox.doShow({...operate, ...{selected: this.selected}, ...{routesList: this.getRouteList(this.selected)}});
this.$refs.routeCancel.doShow(operate, this.selected)
}
});
},
@ -278,7 +288,7 @@ export default {
cancelTrainRoute() {
commitOperate(menuOperate.Signal.cancelTrainRoute, {signalCode: this.selected.code}, 0).then(({valid, operate}) => {
if (valid) {
this.$refs.routeControl.doShow(operate, this.selected);
this.$refs.routeCancel.doShow(operate, this.selected);
}
});
},
@ -286,8 +296,7 @@ export default {
humanTrainRoute() {
commitOperate(menuOperate.Signal.humanTrainRoute, {signalCode: this.selected.code}, 0).then(({valid, operate}) => {
if (valid) {
Object.assign(operate, {operation: OperationEvent.Signal.humanTrainRoute.button.operation });
this.$refs.passwordBox.doShow({...operate, ...{selected: this.selected}});
this.$refs.routeCancel.doShow(operate, this.selected);
}
});
},
@ -295,10 +304,25 @@ export default {
reopenSignal() {
commitOperate(menuOperate.Signal.reopenSignal, {signalCode: this.selected.code}, 0).then(({valid, operate}) => {
if (valid) {
this.$refs.routeControl.doShow(operate, this.selected);
this.$refs.routeCancel.doShow(operate, this.selected);
}
});
},
lockOrUnlock() {
if (this.selected.lock) {
commitOperate(menuOperate.Signal.lock, {signalCode: this.selected.code}, 0).then(({valid, operate}) => {
if (valid) {
this.$refs.routeControl.doShow(operate, this.selected);
}
})
} else {
commitOperate(menuOperate.Signal.unlock, {signalCode: this.selected.code}, 0).then(({valid, operate}) => {
if (valid) {
this.$refs.routeControl.doShow(operate, this.selected);
}
})
}
},
//
lock() {
commitOperate(menuOperate.Signal.lock, {signalCode: this.selected.code}, 0).then(({valid, operate}) => {

View File

@ -7,6 +7,7 @@
<switch-hook-lock ref="switchHookLock" pop-class="chengdou-03__systerm" />
<set-fault ref="setFault" pop-class="datie-02__systerm" />
<draw-select ref="drawSelect" />
<route-cancel ref="routeCancel" />
</div>
</template>
@ -23,6 +24,7 @@ import CancelMouseState from '@/mixin/CancelMouseState';
import { mapGetters } from 'vuex';
import { DeviceMenu, OperateMode } from '@/scripts/ConstDic';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import RouteCancel from './menuDialog/routeCancel';
export default {
name: 'SwitchMenu',
@ -33,7 +35,8 @@ export default {
NoticeInfo,
SetFault,
SwitchHookLock,
DrawSelect
DrawSelect,
RouteCancel
},
mixins: [
CancelMouseState
@ -51,14 +54,66 @@ export default {
menu: [],
menuNormal: {
Local: [
// {
// label: '',
// handler: this.drawingCall
// },
// {
// label: '',
// handler: this.baDeTrCall
// }
{
label: '定操',
handler: this.locate,
cmdType: CMD.Switch.CMD_SWITCH_NORMAL_POSITION
},
{
label: '反操',
handler: this.reverse,
cmdType: CMD.Switch.CMD_SWITCH_REVERSE_POSITION
},
{
label: '单锁',
handler: this.lock,
cmdType: CMD.Switch.CMD_SWITCH_SINGLE_LOCK
},
{
label: '单解',
handler: this.unlock,
cmdType: CMD.Switch.CMD_SWITCH_SINGLE_UNLOCK
},
{
label: '封锁/解封',
handle: ''
},
{
label: '区故解',
handle: ''
},
{
label: '岔前 分路不良',
handle: ''
},
{
label: '定位 分路不良',
handle: ''
},
{
label: '反位 分路不良',
handle: ''
},
{
label: '接触网定位无电',
handle: ''
},
{
label: '接触网反位无电',
handle: ''
},
{
label: '添加调机号',
handle: ''
},
{
label: '删除调机号',
handle: ''
},
{
label: '修改调机号',
handle: ''
}
],
Center: [
// {
@ -132,7 +187,7 @@ export default {
},
watch: {
'$store.state.menuOperation.menuCount': function (val) {
if (this.$store.getters['menuOperation/checkDialogIsOpen'](DeviceMenu.Switch) && !this.buttonOperation) {
if (this.$store.getters['menuOperation/checkDialogIsOpen'](DeviceMenu.Switch) && (!this.buttonOperation || this.$route.query.ctc)) {
this.doShow(this.$store.state.menuOperation.menuPosition);
} else {
this.doClose();
@ -243,7 +298,8 @@ export default {
locate() {
commitOperate(menuOperate.Switch.locate, {switchCode:this.selected.code}, 0).then(({valid, operate})=>{
if (valid) {
this.$refs.switchControl.doShow(operate, this.selected);
// this.$refs.switchControl.doShow(operate, this.selected);
this.$refs.routeCancel.doShow(operate, this.selected);
}
});
},
@ -251,7 +307,8 @@ export default {
reverse() {
commitOperate(menuOperate.Switch.reverse, {switchCode:this.selected.code}, 0).then(({valid, operate})=>{
if (valid) {
this.$refs.switchControl.doShow(operate, this.selected);
// this.$refs.switchControl.doShow(operate, this.selected);
this.$refs.routeCancel.doShow(operate, this.selected);
}
});
},

View File

@ -227,7 +227,7 @@ export default {
},
watch: {
'$store.state.menuOperation.menuCount': function () {
if (this.$store.getters['menuOperation/checkDialogIsOpen'](DeviceMenu.Train) && !this.buttonOperation) {
if (this.$store.getters['menuOperation/checkDialogIsOpen'](DeviceMenu.Train) && (!this.buttonOperation || this.$route.query.ctc)) {
this.doShow(this.$store.state.menuOperation.menuPosition);
} else {
this.doClose();

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@ import router from './router/index';
import {loginInfo, ProjectCode, localPackageProject} from '@/scripts/ProjectConfig';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import { setToken, getToken, removeToken, getSessionStorage } from '@/utils/auth';
import { setToken, getToken, removeToken, getSessionStorage, setSessionStorage } from '@/utils/auth';
import { getBaseUrlByProject } from '@/api/projectServer';
import localStore from 'storejs';
import { handlerUrl } from '@/utils/baseUrl';
@ -69,6 +69,10 @@ function handleRoute(to, next, loginPath) {
}
router.beforeEach( async (to, from, next) => {
if (to.query.thirdJump) {
setToken(to.query.key);
setSessionStorage('project', to.query.project);
}
let project = '';
if (to.path.includes('login')) {
project = to.query.project;

View File

@ -44,6 +44,7 @@ const DisplayBaSiDi = () => import('@/views/newMap/displayBaSiDi/index');
const DesignDisplayNew = () => import('@/views/newMap/displayNew/scriptDisplay/scriptPreview/index');
const PracticeDisplay = () => import('@/views/newMap/displayNew/practiceDisplay');
const BigLPFStrategy = () => import('@/views/newMap/displayNew/bigLPFStrategy');
const BigTrainRunplanManage = () => import('@/views/bigTrainRunplanManage/index');
const JointTrainingNew = () => import('@/views/newMap/jointTrainingNew/index');
const jointTrainingNewCCTV = () => import('@/views/newMap/jointTrainingNew/realCCTV');
@ -680,7 +681,14 @@ export const publicAsyncRoute = [
hidden: true
}
]
}
},
{
// 大铁项目 管理终端
path: '/bigTrainRunplanManage',
component: BigTrainRunplanManage,
hidden: true
},
];
// 城市轨道项目
export const asyncRouter = [

View File

@ -17,11 +17,13 @@ import FaviconSdy from '@/assets/icon/favicon_jdy.png';
import FaviconCgy from '@/assets/icon/favicon_cgy.png';
import FaviconRichor from '@/assets/icon/favicon_richor.png';
import FaviconZzww from '@/assets/icon/favicon_zzww.png';
import FaviconUnittec from '@/assets/icon/favicon_unittec.png';
import FaviconSay from '@/assets/icon/favicon_say.png';
import Link_Bxkc from '@/assets/icon/link_bxkc.png';
import Link_Crsc from '@/assets/icon/link_crsc.png';
import Link_Hls from '@/assets/icon/link_hls.png';
import Link_Bjd from '@/assets/icon/link_bjd.png';
import Link_Unittec from '@/assets/icon/link_unittec.png';
import TransparentIcon from '@/assets/icon/transparent.png';
// title:页面title; loginPath:退出登录跳转路径; loginParam:登录接口参数project;loginTitle:登录页左上角titlelogoWidth登录页左上角logo宽度
@ -569,6 +571,30 @@ export const loginInfo = {
navigationMarginLeft: '60px',
systemType: '011'
},
designrichorhhcj: {
title: '红河财经学校城市轨道交通设计平台',
loginPath: '/design/login?project=richorhhcj',
bottomColumn: '中航锐创(北京)科技发展有限公司 联系电话:4000500081',
loginParam: 'RICHOR_HHCJ',
linkIcon: FaviconRichor,
titleIcon: FaviconRichor,
titleDistance: '-150px',
navigationLogoWidth: '40px',
navigationMarginLeft: '60px',
systemType: '011'
},
richorhhcj: {
title: '红河财经学校城市轨道交通实训平台',
loginPath: '/login?project=richorhhcj',
bottomColumn: '中航锐创(北京)科技发展有限公司 联系电话:4000500081',
loginParam: 'RICHOR_HHCJ',
linkIcon: FaviconRichor,
titleIcon: FaviconRichor,
titleDistance: '-150px',
navigationLogoWidth: '40px',
navigationMarginLeft: '60px',
systemType: '011'
},
designjxgm: {
title: '江西工业贸易职业技术学院城市轨道交通设计平台',
loginPath: '/design/login?project=jxgm',
@ -622,6 +648,30 @@ export const loginInfo = {
navigationLogoWidth: '40px',
navigationMarginLeft: '60px',
systemType: '026'
},
unittecsty: {
title: '城市轨道交通实训平台',
loginPath: '/login?project=unittecsty',
loginParam: 'UNITTEC_STY',
titleDistance: '-150px',
titleIcon: Link_Unittec,
linkIcon: Link_Unittec,
titleImgWidth: '250px',
navigationLogoWidth: '60px',
navigationMarginLeft: '80px',
systemType: '011'
},
designunittecsty: {
title: '城市轨道交通设计平台',
loginPath: '/design/login?project=unittecsty',
loginParam: 'UNITTEC_STY',
titleDistance: '-150px',
titleIcon: Link_Unittec,
linkIcon: Link_Unittec,
titleImgWidth: '250px',
navigationLogoWidth: '60px',
navigationMarginLeft: '80px',
systemType: '011'
}
};
@ -681,7 +731,9 @@ export const ProjectIcon = {
richorygy: FaviconRichor,
designrichorygy: FaviconRichor,
say: FaviconSay,
designsay: FaviconSay
designsay: FaviconSay,
unittecsty: FaviconUnittec,
designunittecsty: FaviconUnittec
};
export const ProjectCode = {
@ -731,18 +783,20 @@ export const ProjectCode = {
say: 'SAY',
designsay: 'SAY',
xzexam:'SAY',
unittecsty: 'UNITTEC_STY',
designunittecsty: 'UNITTEC_STY'
};
/** 嵌入第三方平台 导航栏右上角 清空 */
export const ThirdLoginList = ['richor', 'designrichor', 'richorygy', 'designrichorygy'];
/** 底部栏仅展示公司信息不展示备案号 */
export const BottomColumnOnlyConInfo = ['heb', 'designheb', 'jyd', 'designjyd', 'tky', 'designtky', 'bxkc', 'designbxkc', 'crsc', 'designcrsc', 'hls',
'designhls', 'hyd', 'designhyd', 'cgy', 'designcgy', 'richor', 'richorlesson3d', 'richorjoint', 'designrichorjoint', 'nologo', 'designnologo', 'richorygy',
'designrichorygy'];
'designrichorygy', 'unittecsty', 'designunittecsty'];
/** 实训设计平台通过项目code获取地图列表的项目 */
export const GetMapListByProjectList = ['xty', 'designxty', 'gzb', 'designgzb', 'xadt', 'designxadt', 'heb', 'designheb', 'designdrts', 'drts', 'wjls',
'nty', 'designnty', 'sdy', 'designsdy', 'ntyc', 'designntyc', 'ntyl', 'designntyl', 'designbjd', 'cgy', 'designcgy', 'zzww', 'zzwwtest', 'richor',
'richorlesson3d', 'richorjoint', 'designrichorjoint', 'nologo', 'designnologo', 'srsandbox', 'designsrsandbox', 'designhlsdrts', 'hlsdrts', 'jxgm', 'designjxgm',
'richorygy', 'designrichorygy', 'say', 'designsay'];
'richorygy', 'designrichorygy', 'say', 'designsay', 'unittecsty', 'designunittecsty'];
/** 案例展示隐藏的项目 */
export const CaseHideProjectList = ['heb', 'designheb', 'cgy', 'designcgy'];
/** 登录页右下角版本开发基于不展示 */
@ -751,12 +805,12 @@ export const VersionBaseNoShow = ['heb', 'designheb', 'hls', 'designhls', 'drts'
/** 登录页右下角主体不展示 */
export const MainBodyNoShow = ['heb', 'designheb', 'jyd', 'designjyd', 'tky', 'designtky', 'bxkc', 'designbxkc', 'crsc', 'designcrsc', 'hls',
'designhls', 'hyd', 'designhyd', 'cgy', 'designcgy', 'xadt', 'designxadt', 'richor', 'richorlesson3d', 'richorjoint', 'nologo', 'designnologo',
'srsandbox', 'designsrsandbox', 'designhlsdrts', 'hlsdrts', 'jxgm', 'designjxgm', 'xzexam', 'richorygy', 'designrichorygy'];
'srsandbox', 'designsrsandbox', 'designhlsdrts', 'hlsdrts', 'jxgm', 'designjxgm', 'xzexam', 'richorygy', 'designrichorygy', 'unittecsty', 'designunittecsty'];
/** 登录页项目 title 登录输入框上方 大字体 加粗居中 */
export const ProjectLoginStyleList = ['gzb', 'designgzb', 'xty', 'designxty', 'xadt', 'designxadt', 'tky', 'designtky', 'jyd', 'designjyd', 'bxkc', 'designbxkc',
'crsc', 'designcrsc', 'hls', 'designhls', 'drts', 'wjls', 'hyd', 'designhyd', 'nty', 'designnty', 'bjd', 'designbjd', 'sdy', 'designsdy', 'ntyc', 'designntyc',
'ntyl', 'designntyl', 'cgy', 'designcgy', 'zzww', 'zzwwtest', 'srsandbox', 'designsrsandbox', 'designhlsdrts', 'hlsdrts', 'jxgm', 'designjxgm', 'xzexam',
'richorygy', 'designrichorygy', 'say', 'designsay'];
'richorygy', 'designrichorygy', 'say', 'designsay', 'unittecsty', 'designunittecsty'];
/** 登录页 登录输入框无二维码 */
export const NoQrcodeList = ['heb', 'designheb', 'cgy', 'designcgy', 'ntyl', 'designntyl'];
/** 综合演练 无二维码 */
@ -811,7 +865,9 @@ export const goOtherPlatformMenu = {
jxgm: '/design/login?project=jxgm',
designjxgm: '/login?project=jxgm',
say: '/design/login?project=say',
designsay: '/login?project=say'
designsay: '/login?project=say',
unittecsty: '/design/login?project=unittecsty',
designunittecsty: '/login?project=unittecsty'
};
export const ProjectList = [
{value:'xty', label:'西铁院'},
@ -836,7 +892,8 @@ export const ProjectList = [
{value: 'sr_sandbox', label: '上饶沙盘'},
{value: 'jxgm', label: '江西工贸' },
{value: 'richor_ygy', label: '扬州工业'},
{value: 'say', label: '苏安院'}
{value: 'say', label: '苏安院'},
{value: 'unittec_sty', label: '众合-陕铁院'}
];
/** 本地项目打包 */
export const localPackageProject = {

View File

@ -379,8 +379,14 @@ export default {
CMD_DIRECTION_CHANGE: {value: 'Direction_Change', label: '切换方向'}
},
CTC: {
CTC_RECEIVING_NOTICE: {value: 'CTC_RECEIVING_NOTICE', label: '接预'},
CTC_DEPARTURE_NOTICE: {value: 'CTC_DEPARTURE_NOTICE', label: '发预'},
CTC_FINISH_RECEIVING_NOTICE: {value: 'CTC_FINISH_RECEIVING_NOTICE', label: '完成接预'},
CTC_CANCEL_RECEIVING_NOTICE: {value: 'CTC_CANCEL_RECEIVING_NOTICE', label: '取消接预'},
CTC_FINISH_ARRIVE: {value: 'CTC_FINISH_ARRIVE', label: '完成到点'},
CTC_CANCEL_ARRIVE: {value: 'CTC_CANCEL_ARRIVE', label: '取消到点'},
CTC_FINISH_DEPARTURE_NOTICE: {value: 'CTC_FINISH_DEPARTURE_NOTICE', label: '完成发预'},
CTC_CANCEL_DEPARTURE_NOTICE: {value: 'CTC_CANCEL_DEPARTURE_NOTICE', label: '取消发预'},
CTC_FINISH_DEPARTURE: {value: 'CTC_FINISH_DEPARTURE', label: '完成发点'},
CTC_CANCEL_DEPARTURE: {value: 'CTC_CANCEL_DEPARTURE', label: '取消发点'},
CTC_ASSIST_PRESS_DOWN_TURN_DIRECTION:{value:'ASSIST_PRESS_DOWN_TURN_DIRECTION', label:'改方'},
CTC_AUTO_TRIGGER: {value: 'CTC_AUTO_TRIGGER', label: '自动触发'},
CTC_ASSIST_PRESS_MAIN_ASSIST:{value: 'ASSIST_PRESS_MAIN_ASSIST', label: '总辅助'},
@ -388,6 +394,17 @@ export default {
CTC_ASSIST_PRESS_DELIVER_ASSIST:{value: 'ASSIST_PRESS_DELIVER_ASSIST', label: '发辅助'},
CTC_ASSIST_PRESS_BLOCK:{value: 'ASSIST_PRESS_BLOCK', 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_REMOVE_RUN_PLAN:{value: 'CTC_REMOVE_RUN_PLAN', label: '移除行车日志'},
CTC_MODIFY_ADJACENT_STATION:{value: 'CTC_MODIFY_ADJACENT_STATION', label: '修改邻站信息'},
CTC_MODIFY_TRIP_NUMBER:{value: 'CTC_MODIFY_TRIP_NUMBER', label: '修改车次号(大铁CTC)'},
CTC_SEND_NOTICE:{value: 'CTC_SEND_NOTICE', label: '发送发车预告'},
CTC_AGREE_NOTICE:{value: 'CTC_AGREE_NOTICE', label: '同意发车预告'},
CTC_ADD_RUN_PLAN_LIST_TO_EDIT_AREA:{value: 'CTC_ADD_RUN_PLAN_LIST_TO_EDIT_AREA', label: '增加列车固定径路'},
CTC_COVER_RUN_PLAN_LIST_TO_EDIT_AREA:{value: 'CTC_COVER_RUN_PLAN_LIST_TO_EDIT_AREA', label: '导入列车固定径路'},
CTC_REMOVE_RUN_PLAN_FROM_EDIT_AREA:{value: 'CTC_REMOVE_RUN_PLAN_FROM_EDIT_AREA', label: '删除列车固定径路'},
CTC_RELEASE_RUN_PLAN_TO_SIMULATION:{value: 'CTC_RELEASE_RUN_PLAN_TO_SIMULATION', label: '运行计划发布至CTC'},
CTC_SET_ROUTE:{value: 'CTC_SET_ROUTE', label: 'CTC办理进路'}
}
};

View File

@ -1761,15 +1761,15 @@ export const OperationEvent = {
},
// 点灯 (大铁)
signalLight: {
menuButton: {
operation: '3231',
menuButton: {
operation: '3231',
domId: '_Tips-Signal-signalLight-MenuButton{BOTTOM}'
}
},
// 灭灯 (大铁)
signalDestroy: {
menuButton: {
operation: '3232',
menuButton: {
operation: '3232',
domId: '_Tips-Signal-signalDestroy-MenuButton{BOTTOM}'
}
}
@ -2991,16 +2991,16 @@ export const OperationEvent = {
},
// 引导总锁Station_Master_Lock
stationMasterLock: {
menuButton: {
operation: '621',
menuButton: {
operation: '621',
domId: '_Tips-Station-stationMasterLock'
},
leftButton: {
operation: '6211',
operation: '6211',
domId: '_Tips-Station-stationMasterLock-leftButton'
},
rightButton: {
operation: '6212',
operation: '6212',
domId: '_Tips-Station-stationMasterLock-rightButton'
}
}
@ -3607,15 +3607,15 @@ export const OperationEvent = {
}
},
CTCCommand: {
receivingNotice: {
menu: {
operation: '1100',
receivingNotice: {
menu: {
operation: '1100',
domId: '_Tips-CTC-ReceivingNotice-Menu{TOP}'
}
},
departureNotice: {
menu: {
operation: '1101',
menu: {
operation: '1101',
domId: '_Tips-CTC-DepartureNotice-Menu{TOP}'
}
},
@ -3626,48 +3626,166 @@ export const OperationEvent = {
}
},
autoTrigger: {
menu: {
operation: '1103',
menu: {
operation: '1103',
domId: '_Tips-CTC-AutoTrigger-Menu{TOP}'
}
},
assistPressMainAssist:{
menu: {
operation: '1104',
operation: '1104',
domId: '_Tips-CTC-AssistPressMainAssist-Menu{TOP}'
}
},
assistPressReceiveAssist:{
menu: {
operation: '1105',
operation: '1105',
domId: '_Tips-CTC-AssistPressReceiveAssist-Menu{TOP}'
}
},
assistPressDeliverAssist:{
menu: {
operation: '1106',
operation: '1106',
domId: '_Tips-CTC-AssistPressDeliverAssist-Menu{TOP}'
}
},
assistPressBlock:{
menu: {
operation: '1107',
operation: '1107',
domId: '_Tips-CTC-AssistPressBlock-Menu{TOP}'
}
},
assistPressRestore:{
menu: {
operation: '1108',
operation: '1108',
domId: '_Tips-CTC-AssistPressRestore-Menu{TOP}'
}
},
assistPressAccident:{
menu: {
operation: '1109',
operation: '1109',
domId: '_Tips-CTC-AssistPressAccident-Menu{TOP}'
}
},
// 批量修改股道
batchModifyTrackSection:{
menu: {
operation: '1111',
domId: '_Tips-CTC-batchModifyTrackSection-Menu{TOP}'
}
},
// 移除行车日志
deleteRunplan:{
menu: {
operation: '1112',
domId: '_Tips-CTC-deleteRunplan-Menu{TOP}'
}
},
// 修改行车计划的邻站信息
modifyAdjacentStation:{
menu: {
operation: '1113',
domId: '_Tips-CTC-modifyAdjacentStation-Menu{TOP}'
}
},
// 修改车次号(大铁CTC)
modifyTripNumber:{
menu: {
operation: '1114',
domId: '_Tips-CTC-modifyTripNumber-Menu{TOP}'
}
},
// 发送发车预告
sendNotcie:{
menu: {
operation: '1115',
domId: '_Tips-CTC-sendNotcie-Menu{TOP}'
}
},
// 同意发车预告
agreeNotcie:{
menu: {
operation: '1116',
domId: '_Tips-CTC-agreeNotcie-Menu{TOP}'
}
},
// 取消接预
cancelReceivingNotice: {
menu: {
operation: '1117',
domId: '_Tips-CTC-CancelReceivingNotice-Menu{TOP}'
}
},
// 取消发预
cancelDepartureNotice: {
menu: {
operation: '1118',
domId: '_Tips-CTC-CancelDepartureNotice-Menu{TOP}'
}
},
// 完成到点 FINISH_ARRIVE
finishArrive: {
menu: {
operation: '1119',
domId: '_Tips-CTC-FinishArrive-Menu{TOP}'
}
},
// 取消到点
cancelArrive: {
menu: {
operation: '1120',
domId: '_Tips-CTC-CancelArrive-Menu{TOP}'
}
},
// 完成发点 CTC_FINISH_DEPARTURE
finishDeparture: {
menu: {
operation: '1121',
domId: '_Tips-CTC_FinishDeparture-Menu{TOP}'
}
},
// 取消发点
cancelDeparture: {
menu: {
operation: '1122',
domId: '_Tips-CTC_CancelDeparture-Menu{TOP}'
}
},
// 增加列车固定径路
addTrainFixedPath:{
menu: {
operation: '1123',
domId: '_Tips-CTC-addTrainFixedPath-Menu{TOP}'
}
},
// 导入列车固定径路
importTrainFixedPath:{
menu: {
operation: '1124',
domId: '_Tips-CTC-importTrainFixedPath-Menu{TOP}'
}
},
// 删除列车固定径路
deleteTrainFixedPath:{
menu: {
operation: '1125',
domId: '_Tips-CTC-deleteTrainFixedPath-Menu{TOP}'
}
},
// 运行计划发布至CTC
releaseTrainFixedPath:{
menu: {
operation: '1126',
domId: '_Tips-CTC-releaseTrainFixedPath-Menu{TOP}'
}
},
// 设置进路
setRoute: {
menu: {
operation: '1127',
domId: '_Tips-CTC-setRoute-Menu{TOP}'
}
}
}
};

View File

@ -1,4 +1,5 @@
import store from '@/store/index';
import { copyAssign } from '@/utils/index';
import { Notification } from 'element-ui';
function handleSockInfo(state, msg, type) {
@ -198,11 +199,75 @@ function handle(state, data) {
state.simulationPlanChange = msg;
break;
// 占线板信息
case 'Simulation_RailCtcStatus':
state.railCtcStatusMsg = msg;
break;
case 'Simulation_RailCtcStatus':
state.railCtcStatusMsg = msg;
break;
// 大铁项目 ctc 运行图初始化信息
case 'SIMULATION_CTC_RUN_PLAN_INIT':
msg.forEach(element => {
const tripNumberDe = element.departRunPlan && element.departRunPlan.tripNumber;
const tripNumberAr = element.arriveRunPlan && element.arriveRunPlan.tripNumber;
if (tripNumberDe) { parseInt(tripNumberDe[tripNumberDe.length - 1]) % 2 == 0 ? element.departRunPlan.up = tripNumberDe : element.departRunPlan.down = tripNumberDe; }
if (tripNumberAr) { parseInt(tripNumberAr[tripNumberAr.length - 1]) % 2 == 0 ? element.arriveRunPlan.up = tripNumberAr : element.arriveRunPlan.down = tripNumberAr; }
const code = element.stationCode + '' + element.code;
state.railCtcRunplanInitMsg[code] = element;
});
break;
// 大铁项目 ctc 运行图改变信息
case 'SIMULATION_CTC_RUN_PLAN_CHANGE':
msg.forEach(element => {
const tripNumberDe = element.departRunPlan && element.departRunPlan.tripNumber;
const tripNumberAr = element.arriveRunPlan && element.arriveRunPlan.tripNumber;
if (tripNumberDe) {
element.departRunPlan.up = '';
element.departRunPlan.down = '';
parseInt(tripNumberDe[tripNumberDe.length - 1]) % 2 == 0 ? element.departRunPlan.up = tripNumberDe : element.departRunPlan.down = tripNumberDe;
}
if (tripNumberAr) {
element.arriveRunPlan.up = '';
element.arriveRunPlan.down = '';
parseInt(tripNumberAr[tripNumberAr.length - 1]) % 2 == 0 ? element.arriveRunPlan.up = tripNumberAr : element.arriveRunPlan.down = tripNumberAr;
}
const code = element.stationCode + '' + element.code;
state.railCtcRunplanInitMsg[code] = copyAssign(state.railCtcRunplanInitMsg[code], element);
});
state.railCtcRunplanChange++;
break;
// 大铁项目 ctc 车务管理端 初始化消息
case 'SIMULATION_CTC_MANAGER_RUN_PLAN_EDIT_INIT':
state.railCtcStationManageRpMsg = {};
msg.forEach(element => {
const code = element.stationCode + '' + element.tripNumber;
state.railCtcStationManageRpMsg[code] = element;
});
// state.railCtcStationManageRpChange++;
break;
// 大铁项目 ctc 车务管理端 修改/增加消息
case 'SIMULATION_CTC_MANAGER_RUN_PLAN_EDIT_CHANGE':
msg.forEach(element => {
const code = element.stationCode + '' + element.tripNumber;
state.railCtcStationManageRpMsg[code] = copyAssign(state.railCtcStationManageRpMsg[code] || {}, element);
});
state.railCtcStationManageRpChange++;
break;
// 大铁项目 ctc 车务管理端 移除消息
case 'SIMULATION_CTC_MANAGER_RUN_PLAN_EDIT_REMOVE':
msg.forEach(element => {
const code = element.stationCode + '' + element.tripNumber;
delete state.railCtcStationManageRpMsg[code];
});
state.railCtcStationManageRpChange++;
break;
// // 大铁项目 ctc 车务管理端 覆盖消息
// case 'SIMULATION_CTC_MANAGER_RUN_PLAN_EDIT_COVER':
// state.railCtcStationManageRpMsg = {};
// msg.forEach(element => {
// const code = element.stationCode + '' + element.tripNumber;
// state.railCtcStationManageRpMsg[code] = element;
// });
// state.railCtcStationManageRpChange++;
// break;
}
}
// 操作聊天信息
@ -352,7 +417,11 @@ const socket = {
simulationPslStatus: [], // PSL面板按钮状态信息
simulationPlanChange:{}, // 运行图加线/抽线/变化推送消息
loggedOutMsg: '',
railCtcStatusMsg: {}, // 占线板信息
railCtcStatusMsg: {}, // 占线板信息
railCtcRunplanInitMsg:{}, // 大铁项目 ctc 运行图初始化信息
railCtcRunplanChange:0, // 大铁项目 ctc 运行图信息变化
railCtcStationManageRpMsg:{}, // 大铁项目 ctc 车务管理 端运行图信息
railCtcStationManageRpChange:0 // 大铁项目 ctc 车务管理 运行图信息变化
},
getters: {
},

View File

@ -24,7 +24,7 @@ export function handlerUrl(data) {
if (process.env.NODE_ENV === 'development') {
// const data = null;
// BASE_API = 'https://joylink.club/jlcloud';
BASE_API = 'https://test.joylink.club/jlcloud';
// BASE_API = 'https://test.joylink.club/jlcloud';
// BASE_API = 'http://114.116.51.125/jlcloud';
// BASE_API = 'http://192.168.8.152:9000'; // 袁琪
// BASE_API = 'http://192.168.8.172:9200'; // 旭强
@ -33,7 +33,7 @@ export function handlerUrl(data) {
// BASE_API = 'http://192.168.3.37:9000'; // 卫志宏
// BASE_API = 'http://b29z135112.zicp.vip';
// BASE_API = 'http://2925963m2a.zicp.vip'; // 杜康
// BASE_API = 'http://2i38984j47.qicp.vip'; // 张赛
BASE_API = 'http://2i38984j47.qicp.vip'; // 张赛
// BASE_API = data && data.domainName ? 'https://' + data.domainName : BASE_API;
BASE_API = data && data.domainName ? 'http://' + data.domainName : BASE_API;
VOICE_API = data && data.resourcesDomainName ? 'https://' + data.resourcesDomainName : 'https://joylink.club/oss/joylink';

View File

@ -185,6 +185,18 @@ export function segmentsIntr(a, b, c, d) {
return { x: a.x + dx, y: a.y + dy };
}
export function copyAssign(...param) {
const result = Object.assign({}, ...param);
for (const item of param) {
for (const [idx, val] of Object.entries(item)) {
if (typeof val === 'object') {
result[idx] = copyAssign(result[idx], val);
}
}
}
return result;
}
// export function deepAssign(obj, item) {
// function * colneData(item) {
// for (const keys in item) {

View File

@ -31,7 +31,15 @@ export function getTopic(type, group, stationCode) {
case 'ISCSPIS':
topic = `/queue/simulation/${group}/iscs/pis`;
break;
case 'CTC':
topic = `/user/queue/simulation/${group}/ctc`;
break;
case 'CTC_MANAGE':
// topic = `/user/queue/simulation/${group}/ctc/manage`;
topic = `/user/queue/simulation/${group}/ctcManage`;
break;
}
return topic;
}

View File

@ -0,0 +1,424 @@
<template>
<el-dialog
v-dialogDrag
class="datie-02__systerm"
:title="title"
:visible.sync="show"
width="460px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div class="DpRunplanPane">
<el-form ref="form" :model="addModel" label-width="70px" :rules="rules">
<el-form-item label="车站:" prop="stationCode">
<el-select v-model="addModel.stationCode" placeholder="" style="width:135px" disabled>
<el-option
v-for="item in stationList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item label="股道:" prop="trackSectionCode">
<el-select v-model="addModel.trackSectionCode" placeholder="" style="width:135px">
<el-option
v-for="item in filterSectionList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item label="到达车次:" prop="arriveTripNumber">
<el-input v-model="addModel.arriveTripNumber" style="width:135px" />
</el-form-item>
<el-form-item label="到达时间:" prop="arriveTime">
<el-time-picker v-model="addModel.arriveTime" value-format="HH:mm" format="HH:mm" style="width:135px" />
</el-form-item>
<el-form-item label="出发车次:" prop="departTripNumber">
<el-input v-model="addModel.departTripNumber" style="width:135px" />
</el-form-item>
<el-form-item label="出发时间:" prop="departTime">
<el-time-picker v-model="addModel.departTime" value-format="HH:mm" format="HH:mm" style="width:135px" />
</el-form-item>
<el-form-item label="入口:" prop="arriveDirectionCode">
<el-select v-model="addModel.arriveDirectionCode" placeholder="" style="width:135px">
<el-option
v-for="item in mapStationDirectionList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item label="后方车站:" prop="arriveStationCode">
<el-select v-model="addModel.arriveStationCode" placeholder="" style="width:135px">
<el-option
v-for="item in stationList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item label="出口:" prop="departDirectionCode">
<el-select v-model="addModel.departDirectionCode" placeholder="" style="width:135px">
<el-option
v-for="item in mapStationDirectionList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item label="前方车站:" prop="departStationCode">
<el-select v-model="addModel.departStationCode" placeholder="" style="width:135px">
<el-option
v-for="item in stationList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
</el-form>
</div>
<el-row justify="center" class="button-group">
<el-col :span="6" :offset="7">
<el-button :id="domIdCancel" @click="cancel">取消</el-button>
</el-col>
<el-col :span="8" :offset="0">
<el-button :id="domIdConfirm " type="primary" :loading="loading" @click="commit">确定 </el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="datie-02__systerm" />
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name: 'TrainSetPlan',
components: {
NoticeInfo
},
data() {
var validateTripNumber = (rule, value, callback) => {
if (value) {
const judge = /^[a-zA-Z0-9]*[\d]$/.test(value);
if (judge) {
if (value.toString().length > 6 || value.toString().length < 2) {
callback('车次长度2-6位');
} else {
callback();
}
} else {
callback('字母+数字,最后一位数字');
}
} else {
callback('请输入车次');
}
};
return {
dialogShow: false,
loading: false,
mapStationDirectionList:[],
filterSectionList:[],
addModel:{
stationCode:'', //
trackSectionCode:'', //
arriveTripNumber:'', //
departTripNumber:'', //
arriveTime:'', //
departTime:'', //
arriveDirectionCode:'', //
departDirectionCode:'', //
arriveStationCode:'', //
departStationCode:'' //
},
rules: {
trackSectionCode: [
{ required: true, message: '请选择股道', trigger: 'blur' },
{ required: true, message: '请选择股道', trigger: 'change' }
],
arriveTripNumber:[
{ required: true, validator: validateTripNumber, trigger: 'blur' }
// message: ''
],
departTripNumber:[
{ required: true, validator: validateTripNumber, trigger: 'blur' }
],
// message: ''
arriveTime: [
{ required: true, message: '请选择到达时间', trigger: 'blur' },
{ required: true, message: '请选择到达时间', trigger: 'change' }
],
departTime: [
{ required: true, message: '请选择出发时间', trigger: 'blur' },
{ required: true, message: '请选择出发时间', trigger: 'change' }
],
arriveDirectionCode: [
{ required: true, message: '请选择入口', trigger: 'blur' },
{ required: true, message: '请选择入口', trigger: 'change' }
],
departDirectionCode: [
{ required: true, message: '请选择出口', trigger: 'blur' },
{ required: true, message: '请选择出口', trigger: 'change' }
],
arriveStationCode: [
{ required: true, message: '请选择后方车站', trigger: 'blur' },
{ required: true, message: '请选择后方车站', trigger: 'change' }
],
departStationCode: [
{ required: true, message: '请选择前方车站', trigger: 'blur' },
{ required: true, message: '请选择前方车站', trigger: 'change' }
]
}
};
},
computed: {
...mapGetters('map', [
'stationList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.CTCCommand.addTrainFixedPath.menu.domId : '';
},
title() {
return '列车固定径路';
}
},
methods:{
doShow({stationCode, filterSectionMap, mapStationDirectionMap}) {
this.mapStationDirectionList = Object.values(mapStationDirectionMap);
this.filterSectionList = Object.values(filterSectionMap);
this.dialogShow = true;
this.addModel.stationCode = stationCode;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.addModel = {
stationCode:'', //
trackSectionCode:'', //
arriveTripNumber:'', //
departTripNumber:'', //
arriveTime:'', //
departTime:'', //
arriveDirectionCode:'', //
departDirectionCode:'', //
arriveStationCode:'', //
departStationCode:'' //
};
this.$refs.form && this.$refs.form.resetFields();
this.$store.dispatch('training/emitTipFresh');
},
commit() {
this.$refs.form.validate((valid) => {
if (valid) {
this.loading = true;
const param = {stationCode:this.addModel.stationCode, runPlanParamList:[this.addModel]};
commitOperate(menuOperate.CTC.addTrainFixedPath, param, 3).then(({valid})=>{
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
this.$emit('noticeInfo');
});
}
});
},
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>
<style rel="stylesheet/scss" lang="scss" scoped>
</style>
<style lang="scss">
.DpRunplanPane{margin-bottom: 15px;}
.DpRunplanPane .el-form-item{
display:inline-block;
width:210px;
margin-bottom:20px;
}
.DpRunplanPane .el-form-item__content{
line-height:30px;
}
// .chengdou-03__systerm .el-dialog .expand {
// width: 120px;
// }
// .chengdou-03__systerm .el-dialog .el-button:focus span {
// border: 1px dashed gray;
// }
// .chengdou-03__systerm .el-dialog .el-button:active {
// border: 2px inset #E2E2E2;
// }
// .chengdou-03__systerm .el-dialog .el-button:disabled {
// border: 2px inset #E2E2E2;
// }
// .chengdou-03__systerm .el-dialog .el-button:disabled span {
// border: 0px;
// }
// .chengdou-03__systerm .el-dialog .el-textarea {
// border: 2px inset #E9E9E9;
// border-radius: 0px;
// }
// .chengdou-03__systerm .el-dialog .el-textarea .el-textarea__inner {
// color: #000;
// background: #fff !important;
// border: 0px;
// border-radius: 0px !important;
// box-sizing: border-box;
// }
// .chengdou-03__systerm .el-dialog .el-textarea.is-disabled .el-textarea__inner {
// background: #F0F0F0 !important;
// }
// .chengdou-03__systerm .el-dialog .el-table--border th.gutter {
// background: #EBEADB !important;
// }
// .chengdou-03__systerm .el-dialog .el-table {
// border: 2px inset #E9E9E9;
// color: #000 !important;
// }
// .chengdou-03__systerm .el-dialog .el-table .cell {
// height: 22px;
// line-height: 22px;
// }
// .chengdou-03__systerm .el-dialog .el-table th.is-leaf {
// background: #F0F0F0 !important;
// border-right: 1px solid #BDBDBD !important;
// border-bottom: 1px solid #BDBDBD !important;
// color: #000 !important;
// height: 20px !important;
// padding: 0px;
// }
// .chengdou-03__systerm .el-dialog .el-table tr td {
// height: 20px !important;
// padding: 0px;
// }
// .chengdou-03__systerm .el-dialog .el-table .el-table__empty-text {
// top: 15px !important;
// }
// .chengdou-03__systerm .el-dialog .current-row>td {
// background: #3399FF !important;
// color: #fff !important;
// }
.datie-02__systerm .el-dialog .el-checkbox__inner {
border: 1px inset #dcdfe6 !important;
}
.datie-02__systerm .el-dialog .el-checkbox__label {
color: #000 !important;
}
.datie-02__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__inner {
background: #E6E6E6 !important;
}
.datie-02__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__label {
color: #C5C9CC !important;
}
.datie-02__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner {
background: #fff !important;
border: 1px inset #dcdfe6 !important;
}
.datie-02__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner::after {
position: absolute;
-webkit-box-sizing: content-box;
box-sizing: content-box;
content: "";
border: 1px solid #000;
border-left: 0;
border-top: 0;
height: 7px;
left: 4px;
top: 1px;
}
// .chengdou-03__systerm .el-dialog .el-radio__inner {
// border: 1px inset #dcdfe6 !important;
// }
// .chengdou-03__systerm .el-dialog .el-radio__label {
// color: #000 !important;
// }
// .chengdou-03__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner {
// background: #fff !important;
// border: 1px inset #dcdfe6 !important;
// }
// .chengdou-03__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner::after {
// width: 4px;
// height: 4px;
// border-radius: 100%;
// background-color: #000 !important;
// position: absolute;
// left: 50%;
// top: 50%;
// }
// .chengdou-03__systerm .el-dialog .el-radio.is-disabled .el-radio__inner {
// background: #E6E6E6 !important;
// }
// .chengdou-03__systerm .el-dialog .el-radio.is-disabled .el-radio__label {
// color: #C5C9CC !important;
// }
// .chengdou-03__systerm .el-dialog .base-label {
// background: rgba(0, 0, 0, x);
// position: relative;
// left: -15px;
// top: -18px;
// }
// .chengdou-03__systerm .el-dialog .notice {
// margin-left: 62px;
// line-height: 30px;
// }
// .chengdou-03__systerm .el-dialog .button-group {
// margin-top: 20px;
// }
</style>

View File

@ -0,0 +1,308 @@
<template>
<div class="BTRp">
<div class="BTRpMenuBarOut">
<div class="BTRpMenuBar">
<div class="eachBTRpMenuBar" @click="addTab('StationTrack')">车站股道</div>
<div class="eachBTRpMenuBar">车站出入口</div>
<div class="eachBTRpMenuBar" @click="addTab('TrainFixedPath')">列车固定路径</div>
<div class="eachBTRpMenuBar">车站用户管理</div>
<div class="eachBTRpMenuBar">备份区名称</div>
<div class="eachBTRpMenuBar">工作区选择</div>
<div class="eachBTRpMenuBar">帮助</div>
</div>
<div class="BTRunplanClose" @click="quit">
<i class="el-icon-close" />
</div>
</div>
<div class="BTRpTabs">
<el-tabs v-model="activeTab" type="card" closable @tab-remove="removeTab">
<el-tab-pane
v-for="(item) in currentTabs"
:key="item.name"
:label="item.title"
:name="item.name"
>
<component
:is="item.component"
:ref="item.name"
@noticeInfo="noticeInfo"
/>
</el-tab-pane>
</el-tabs>
</div>
<notice-info ref="noticeInfo" pop-class="datie-02__systerm" />
</div>
</template>
<script>
import { getToken } from '@/utils/auth';
import StationTrack from './stationTrack';
import TrainFixedPath from './trainFixedPath';
import { loadMapDataById } from '@/utils/loaddata';
import { creatSubscribe, clearSubscribe, getTopic, displayTopic } from '@/utils/stomp';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
export default {
name:'BigTrainRunplanManage',
components: {
NoticeInfo
},
data() {
return {
activeTab:'StationTrack',
stationCode:'',
groupModel: '',
currentTabs: [
// {
// title: '',
// name: 'StationTrack',
// component:StationTrack
// },
// {
// title: '',
// name: 'TrainFixedPath',
// component:TrainFixedPath
// }
]
};
},
watch: {
'$store.state.map.mapDataLoadedCount': function (val) { //
this.$store.commit('training/notifyGetCommandDefinition', this.$route.query.lineCode);
this.subscribe();
}
},
beforeDestroy() {
this.clearSubscribe();
},
async mounted() {
this.$store.dispatch('training/setPrdType', this.$route.query.prdType);
this.groupModel = this.$route.query.group;
this.stationCode = this.$route.query.stationCode;
this.initLoadData();
},
methods:{
removeTab(targetName) {
const tabs = this.currentTabs;
let activeName = this.activeTab;
if (activeName === targetName) {
tabs.forEach((tab, index) => {
if (tab.name === targetName) {
const nextTab = tabs[index + 1] || tabs[index - 1];
if (nextTab) {
activeName = nextTab.name;
}
}
});
}
this.activeTab = activeName;
this.currentTabs = tabs.filter(tab => tab.name !== targetName);
},
addTab(name) {
const nameMap = {'StationTrack':{title:'车站股道', component:StationTrack }, 'TrainFixedPath':{title:'列车固定路径', component:TrainFixedPath}};
const findTab = this.currentTabs.find(tab=>{
return tab.name == name;
});
if (!findTab) {
this.currentTabs.push(Object.assign( {name:name}, nameMap[name]));
this.$nextTick(()=>{
this.$refs[this.activeTab][0].loadStation();
});
}
this.activeTab = name;
},
quit() {
window.close();
},
initLoadData() {
loadMapDataById(this.$route.query.mapId, 'parse');
},
async subscribe() {
this.clearSubscribe();
const header = { group: this.$route.query.group || '', 'X-Token': getToken() };
// creatSubscribe(`${displayTopic}\/${this.$route.query.group}`, header);
// creatSubscribe(getTopic('CTC', this.$route.query.group), header);
creatSubscribe(getTopic('CTC_MANAGE', this.$route.query.group), header);
// await this.$store.dispatch('training/setHasSubscribed');
},
clearSubscribe() {
// clearSubscribe(`${displayTopic}\/${this.groupModel}`);
// clearSubscribe(getTopic('CTC', this.groupModel));
clearSubscribe(getTopic('CTC_MANAGE', this.groupModel));
},
noticeInfo() {
this.$refs.noticeInfo.doShow();
}
// ''
//
}
};
</script>
<style lang="scss" scoped>
.BTRp{height:100%;width:100%;padding-top:30px}
.BTRpMenuBarOut{
position: absolute;
width: 100%;
left:0;
top:0;
background: #bad8fb;
border-bottom: 1px #8fb2dd solid;
height: 29px;
}
.BTRpTabs{height:100%;background: #cccccd;}
.BTRpMenuBar{
display: inline-block;
background: #d2e0f3;
border-bottom-right-radius: 10px;
border-top-right-radius: 10px;
padding-right: 10px;
border-right: 1px #93a3b4 solid;
border-bottom: 1px #cadaef solid;
position: absolute;
height: 29px;
}
.eachBTRpMenuBar{
display: inline-block;
padding: 5px 15px;
font-size: 14px;
cursor: pointer;
height: 29px;
}
.eachBTRpMenuBar:hover{
background: #a6cdfb;
}
.BTRunplanClose{
display: inline-block;
float: right;
margin-right: 10px;
padding: 4px 8px;
cursor: pointer;
}
</style>
<style lang="scss">
.BTRpTabs .el-tabs--card>.el-tabs__header{background: #c5dffd;font-size: 13px;color: #1f4678;border-bottom: 2px #84827f solid;margin-bottom:0px;}
.BTRpTabs .el-tabs--card>.el-tabs__header .el-tabs__item.is-top.is-active{background:#fafbfa;}
.BTRpTabs .el-tabs__item.is-active{color: #003589;font-weight: bold;}
.BTRpTabs .el-tabs--card>.el-tabs__header .el-tabs__item.is-top{font-size:13px;border-top-right-radius: 40px;height: 30px;
line-height: 30px;padding: 0 15px 0px 10px;background: #b9d2f1;vertical-align: text-bottom;border-top: 1px #5e6a79 solid;
border-left: 1px #94b6f0 solid;border-right: 1px #c9d3e0 solid;}
.BTRpTabs .el-tabs--card>.el-tabs__header .el-tabs__nav{border:none}
.datie-02__systerm {
overflow: hidden !important;
}
.datie-02__systerm .el-dialog {
background-image: linear-gradient(#9ab6ce, #b3cce8);
box-shadow: 1px 1px 2px #65666c;
border: 1px solid #326b7f;
border-radius: 6px;
font-size: 13px !important;
color: #000;
}
.datie-02__systerm .el-dialog span {
font-size: 13px !important;
line-height: 22px;
}
.datie-02__systerm .el-dialog span .el-icon-arrow-up{
line-height: 21px;
}
.datie-02__systerm .el-dialog .el-dialog__footer {
background: #ECE9D8;
opacity: 1;
}
.datie-02__systerm .el-dialog .el-dialog__body {
padding: 15px 5px;
margin: 0px 0px 1px 1px;
border: 1px solid rgba(120, 121, 123, 0.5);
box-shadow: 1px hsla(240, 0%, 100%, 0.5) inset;
background: #eeeeee;
opacity: 1;
}
.datie-02__systerm .el-dialog .el-dialog__title {
font-size: 16px;
color: #000;
position: absolute;
top: 4px;
left: 7px;
}
.datie-02__systerm .el-dialog .el-dialog__headerbtn {
background: linear-gradient(#CD98A0, #C27D6E, #B63022, #C68770);
border: 1px solid #fff;
border-radius: 4px;
top: 6px;
right: 3px;
line-height: 16px;
}
.datie-02__systerm .el-dialog .el-dialog__headerbtn .el-icon-close:before {
font-size: 16px;
}
.datie-02__systerm .el-dialog .el-dialog__headerbtn .el-dialog__close {
color: #fff;
}
.datie-02__systerm .el-dialog .el-input {
// border: 2px inset #E9E9E9;
height: 24px !important;
line-height: 22px !important;
border: 1px #8bacba solid;
border-radius: 5px;
}
.datie-02__systerm .el-dialog .el-input__inner {
color: #000;
background: #fff !important;
border: 0px;
// border-radius: 3px !important;
box-sizing: border-box;
height: 22px !important;
line-height: 22px !important;
// border: 1px #8bacba solid;
}
.datie-02__systerm .el-dialog .el-input.is-disabled{
border: 1px solid #c1c1c1;
}
.datie-02__systerm .el-dialog .el-input.is-disabled .el-input__inner {
background: #f3f3f3 !important;
}
.datie-02__systerm .el-dialog .el-button {
height: 24px;
line-height: 22px;
padding: 0px;
width: 80px;
// border: 2px outset #E2E2E2;
// border-radius: 4px !important;
color: #000;
background-image: linear-gradient(#fff, #d8d8d8);
}
.datie-02__systerm .el-dialog .el-button:hover{
background-image: linear-gradient(#efffff, #a8daf3);
}
.datie-02__systerm .el-dialog .el-form-item label {
font-weight: normal !important;
color: #000 !important;
padding-right: 5px;
font-size:13px;
line-height:30px;
}
.datie-02__systerm .el-dialog span.el-input__prefix .el-input__icon{
line-height:22px;
}
.datie-02__systerm .el-dialog span.el-input__suffix .el-input__icon{
line-height:22px;
}
.datie-02__systerm .el-dialog .context {
height: 100px;
border: 2px inset #E2E2E2;
overflow-y: scroll;
margin-bottom: 10px;
}
</style>

View File

@ -0,0 +1,168 @@
<template>
<div class="stationTrack" :style="{ height: height+'px' }">
<!-- {{ '车站股道' }} -->
<div class="stationTrackL">
<terminal-station-list ref="terminalStationList" />
</div>
<div class="stationTrackR">
<div class="stationTrackRMenu">
<div class="stationTrackRMenuL">
<!-- :id="domIdConfirm" :loading="loading" @click="commit"-->
<el-button class="stationTrackButton" size="small">修改</el-button>
</div>
<div class="stationTrackRMenuR">
<span class="stationTrackRVer">版本号</span>
<el-button class="stationTrackButton" size="small">备份</el-button>
<el-button class="stationTrackButton" size="small">更新至生效区</el-button>
<el-button class="stationTrackButton" size="small">导入</el-button>
<el-button class="stationTrackButton" size="small">比较</el-button>
</div>
</div>
<div class="stationTrackRTable" :style="{ height: (height-40)+'px' }">
<el-table
id="stationTrackTableIn"
ref="stationTrackTableIn"
:data="tableData"
border
height="600px"
highlight-current-row
style="border:1px #ccc solid;width:1103px"
>
<!-- @cell-click="selectedTripNumber" -->
<!-- @current-change="handleCurrentChange" -->
<el-table-column
type="index"
label="序号"
width="100"
/>
<el-table-column
prop="trackName"
label="股道名称"
width="100"
/>
<el-table-column
prop="lineType"
label="线路性质"
width="100"
/>
<el-table-column
prop="RVdirection"
label="接发车方向"
width="100"
/>
<el-table-column
prop="RVType"
label="接发车类型"
width="100"
/>
<el-table-column
prop="transType"
label="超限类型"
width="100"
/>
<el-table-column
prop="stationStand"
label="站台"
width="100"
/>
<el-table-column
prop="allowEMU"
label="允许动车组"
width="100"
/>
<el-table-column
prop="waterEquip"
label="上水设备"
width="100"
/>
<el-table-column
prop="sewageEquip"
label="排污设备"
width="100"
/>
<el-table-column
prop="military"
label="军用"
width="100"
/>
</el-table>
</div>
</div>
</div>
</template>
<script>
import TerminalStationList from './terminalStationList';
export default {
name:'StationTrack',
components: {
TerminalStationList
},
data() {
return {
height: this.$store.state.app.height - 61,
tableData:[
{trackName:'IG', lineType:'正线', RVType:'上下行', RVdirection:'客货车', transType:'超额超限', stationStand:'无', allowEMU:'否', waterEquip:'无',
sewageEquip:'无', military:'否'},
{trackName:'IIG', lineType:'正线', RVType:'上下行', RVdirection:'客货车', transType:'超额超限', stationStand:'低', allowEMU:'否', waterEquip:'无',
sewageEquip:'无', military:'否' }
]
};
},
methods:{
loadStation() {
this.$refs.terminalStationList.loadStation();
},
loadStationData(stationCode) {
}
}
};
</script>
<style lang="scss" scoped>
.stationTrack{
padding-left:200px;
}
.stationTrackL{
width: 200px;
height: 100%;
position: absolute;
border-right: 1px #797979 solid;
left: 0;
top: 0;
}
.stationTrackR{
padding:0px 5px 0px 5px;
height: 100%;
background: #d8d8d8;
}
.stationTrackRMenu{
background:#eeeeee;
display: inline-block;
width:100%;
padding:5px;
border-left: 1px #707070 solid;
}
.stationTrackRMenuL{display: inline-block;}
.stationTrackRMenuR{float:right;display: inline-block;}
.stationTrackRTable{background:#a9a9a9;border-left: 1px #707070 solid;}
.stationTrackRVer{
font-size: 14px;
margin-right: 10px;
color: #87a7c9;
}
.stationTrackButton{
background-image: linear-gradient(#ffffff,#d8d8d8);
color: #000;
padding: 5px 10px;
border: 1px #737373 solid;
}
.stationTrackButton:hover{
background-image: linear-gradient(#efffff,#a8daf3);
}
</style>
<style lang="scss">
#stationTrackTableIn.el-table td, #stationTrackTableIn.el-table th{
padding-top: 5px;
padding-bottom: 5px;
border-color: #a5a5a5;
}
</style>

View File

@ -0,0 +1,113 @@
<template>
<div class="terminalStationList">
<div class="terminalStationListT">
<span class="terminalStationListTName">区段:</span>
<el-select v-model="section" disabled placeholder="请选择" size="mini" class="terminalStationListTSelect">
<el-option
v-for="item in sectionList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</div>
<div class="terminalStationListB">
<el-tree
id="terminalStationTree"
ref="terminalStationTree"
:data="treeList"
:props="defaultProps"
:default-expanded-keys="['allStation']"
:highlight-current="true"
:check-on-click-node="true"
node-key="id"
style="color:#000"
@current-change="handleChange"
/>
<!-- @node-click="handleNodeClick" -->
</div>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
export default {
name:'TerminalStationList',
data() {
return {
treeList:[{
id:'allStation',
label: '车站列表',
children: []
}],
defaultProps: {
children: 'children',
label: 'label'
},
section:'T121',
sectionList:[{
code:'T121',
name:'兰五台'
}]
};
},
computed: {
...mapGetters('map', [
'stationList'
])
},
watch: {
// '$store.state.map.mapDataLoadedCount': function (val) { //
// this.stationList.forEach(station => {
// if (!station.depot) {
// this.treeList[0].children.push({id:station.code, label:station.name});
// }
// });
// this.$nextTick(()=>{
// const currentKey = this.treeList[0].children[0].id;
// this.$refs.terminalStationTree.setCurrentKey(currentKey);
// });
// }
},
async mounted() {
},
methods:{
handleChange(data, node) {
this.$emit('loadStationData', data.id);
},
loadStation() {
this.treeList[0].children = [];
this.stationList.forEach(station => {
if (!station.depot) {
this.treeList[0].children.push({id:station.code, label:station.name});
}
});
this.$nextTick(()=>{
const currentKey = this.treeList[0].children[0].id;
this.$refs.terminalStationTree.setCurrentKey(currentKey);
this.$emit('loadStationData', currentKey);
});
}
}
};
</script>
<style lang="scss" scoped>
.terminalStationListTSelect{width: 100px;}
.terminalStationListTName{font-size:14px;margin-left: 10px;margin-right: 8px;}
.terminalStationListT{display: inline-block;position:absolute;left:0;top:0;padding:5px;background:#eee;width:100%;}
.terminalStationList{
padding-top:40px;
height: 100%;
}
.terminalStationListB{
height: 100%;
width: 100%;
background: #fff;
}
</style>
<style lang="scss">
#terminalStationTree.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{
background: #fff;
color: #2525ff;
}
</style>

View File

@ -0,0 +1,492 @@
<template>
<div class="trainFixedPath" :style="{ height: height+'px' }">
<!-- {{ '列车固定径路' }} -->
<div class="trainFixedPathL">
<terminal-station-list ref="terminalStationList" @loadStationData="loadStationData" />
</div>
<div class="trainFixedPathR">
<div class="trainFixedPathRMenu">
<div class="trainFixedPathRMenuL">
<el-button class="trainFixedPathButton" size="small" @click="addRunplan">增加</el-button>
<el-button class="trainFixedPathButton" size="small">批量增加</el-button>
<el-button class="trainFixedPathButton" size="small">基本图导入</el-button>
<el-button class="trainFixedPathButton" size="small">基本图申请</el-button>
<el-button class="trainFixedPathButton" size="small">其他站导入</el-button>
<el-button class="trainFixedPathButton" size="small">删除</el-button>
<el-button class="trainFixedPathButton" size="small">全部清空</el-button>
<el-button class="trainFixedPathButton" size="small">修改</el-button>
<el-button class="trainFixedPathButton" size="small">查找</el-button>
<el-button class="trainFixedPathButton" size="small">导出excel</el-button>
<el-button class="trainFixedPathButton" size="small">流程批量设置</el-button>
</div>
<div class="trainFixedPathRMenuR">
<span class="trainFixedPathRVer">版本号</span>
<el-button class="trainFixedPathButton" size="small" @click="exportData">备份</el-button>
<el-button class="trainFixedPathButton" size="small" @click="releaseTrainFixedPath">更新至生效区</el-button>
<el-button class="trainFixedPathButton trainFixedPathUpload" size="small">
导入
<input ref="files" type="file" class="file_box" accept=".json, application/json" @change="importf">
</el-button>
<el-button class="trainFixedPathButton" size="small">比较</el-button>
</div>
</div>
<div class="trainFixedPathRTable" :style="{ height: (height-40)+'px' }">
<el-table
id="trainFixedPathTableIn"
ref="trainFixedPathTableIn"
:data="tableData"
border
height="600px"
highlight-current-row
style="border:1px #ccc solid;"
>
<!-- @cell-click="selectedTripNumber" -->
<!-- @current-change="handleCurrentChange" -->
<el-table-column
type="index"
label="序号"
width="50"
/>
<el-table-column
prop="stationCode"
label="车站"
width="100"
>
<template slot-scope="scope">
{{ stationMap[scope.row.stationCode].name }}
</template>
</el-table-column>
<el-table-column
prop="arriveTripNumber"
label="到达车次"
width="80"
/>
<el-table-column
prop="arriveTime"
label="到达时间"
width="70"
>
<template slot-scope="scope">
{{ scope.row.arriveTime }}
</template>
</el-table-column>
<el-table-column
prop="departTripNumber"
label="出发车次"
width="80"
/>
<el-table-column
prop="departTime"
label="出发时间"
width="70"
/>
<el-table-column
prop="trackSectionCode"
label="股道"
width="75"
>
<template slot-scope="scope">
{{ filterSectionMap[scope.row.trackSectionCode].name }}
</template>
</el-table-column>
<el-table-column
prop="departStationCode"
label="后方车站"
width="110"
>
<template slot-scope="scope">
{{ stationMap[scope.row.departStationCode].name }}
</template>
</el-table-column>
<el-table-column
prop="arriveDirectionCode"
label="入口"
width="155"
>
<template slot-scope="scope">
{{ mapStationDirectionData[scope.row.arriveDirectionCode].name }}
</template>
</el-table-column>
<el-table-column
prop="departDirectionCode"
label="出口"
width="155"
>
<template slot-scope="scope">
{{ mapStationDirectionData[scope.row.departDirectionCode].name }}
</template>
</el-table-column>
<el-table-column
prop="arriveStationCode"
label="前方车站"
width="110"
>
<template slot-scope="scope">
{{ stationMap[scope.row.arriveStationCode].name }}
</template>
</el-table-column>
<el-table-column
prop="RVType"
label="技术停点"
width="70"
/>
<el-table-column
prop="trainInspection"
label="列检"
width="40"
>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.trainInspection" />
</template>
</el-table-column>
<el-table-column
prop="crossZero"
label="交零"
width="40"
>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.crossZero" />
</template>
</el-table-column>
<el-table-column
prop="columnEnd"
label="列尾"
width="40"
>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.columnEnd" />
</template>
</el-table-column>
<el-table-column
prop="locomotive"
label="机车"
width="40"
>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.locomotive" />
</template>
</el-table-column>
<el-table-column
prop="goodsInspection"
label="货检"
width="40"
>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.goodsInspection" />
</template>
</el-table-column>
<el-table-column
prop="multiplyDown"
label="乘降"
width="40"
>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.multiplyDown" />
</template>
</el-table-column>
<el-table-column
prop="sailUpstream"
label="上水"
width="40"
>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.sailUpstream" />
</template>
</el-table-column>
<el-table-column
prop="pickUp"
label="摘挂"
width="40"
>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.pickUp" />
</template>
</el-table-column>
<el-table-column
prop="transfer"
label="换乘"
width="40"
>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.transfer" />
</template>
</el-table-column>
<el-table-column
prop="handling"
label="装卸"
width="40"
>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.handling" />
</template>
</el-table-column>
<el-table-column
prop="pollution"
label="吸污"
width="40"
>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.pollution" />
</template>
</el-table-column>
<el-table-column
prop="crossing"
label="道口"
width="40"
>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.crossing" />
</template>
</el-table-column>
<el-table-column
prop="trainNumber"
label="车号"
width="40"
>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.trainNumber" />
</template>
</el-table-column>
<el-table-column
prop="affair"
label="站务"
width="40"
>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.affair" />
</template>
</el-table-column>
</el-table>
</div>
</div>
<add-runplan ref="addRunplan" @noticeInfo="noticeInfo" />
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import { now} from '@/utils/date';
import TerminalStationList from './terminalStationList';
import AddRunplan from './addRunplan';
import { copyAssign } from '@/utils/index';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name:'TrainFixedPath',
components: {
TerminalStationList,
AddRunplan
},
data() {
return {
height: this.$store.state.app.height - 61,
currentStationCode:'',
tableData:[],
filterSectionMap:{}
};
},
computed:{
...mapGetters('map', [
'sectionList',
'stationList'
]),
mapStationDirectionData() {
return this.$store.state.map.mapStationDirectionData;
},
stationMap() {
const stationMap = {};
this.stationList.forEach(station=>{
stationMap[station.code] = {code:station.code, name:station.name};
});
return stationMap;
}
},
watch:{
'$store.state.socket.railCtcStationManageRpChange': function (val) {
this.handleData();
}
},
methods:{
loadStation() {
this.$refs.terminalStationList.loadStation();
},
loadStationData(stationCode) {
this.currentStationCode = stationCode;
this.filterSectionMap = {};
this.sectionList.forEach(section=>{
if (section.standTrack && section.belongStation == this.currentStationCode) {
this.filterSectionMap[section.code] = {code:section.code, name:section.name};
}
});
this.handleData();
},
addRunplan() {
this.$refs.addRunplan.doShow({
stationCode:this.currentStationCode,
filterSectionMap:this.filterSectionMap,
mapStationDirectionMap:this.mapStationDirectionData
});
},
noticeInfo() {
this.$emit('noticeInfo');
},
exportData() {
const currentDay = now().replace(/(-|:)|\s/g, '');
const content = new Blob(
[JSON.stringify({stationCode:this.currentStationCode, runPlanParamList:this.tableData})]
);
const urlObject = window.URL || window.webkitURL || window;
const url = urlObject.createObjectURL(content);
const el = document.createElement('a');
el.href = url;
el.download = `TRAIN_WAY_LIST-${currentDay}.json`;
el.click();
urlObject.revokeObjectURL(url);
},
importf() {
const that = this;
setTimeout(() => {
const obj = this.$refs.files;
if (!obj.files) return;
const f = obj.files[0];
if (f.type != 'application/json') {
this.$message.error('请上传json格式的文件');
return;
}
const loading = this.$loading({
lock: true,
text: '正在导入中...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
const reader = new FileReader();
reader.readAsText(f, 'utf-8');
reader.onload = function(e) {
const data = e.target.result;
that.formDisplay = true;
const json = JSON.parse(data);
if (json && json.runPlanParamList && json.stationCode) {
if (json.runPlanParamList.length > 0) {
const param = {stationCode:json.stationCode, runPlanParamList:json.runPlanParamList};
commitOperate(menuOperate.CTC.importTrainFixedPath, param, 3).then(({valid})=>{
if (valid) {
loading.close();
that.$message.success('导入成功!');
}
}).catch(() => {
loading.close();
that.$message.error('导入失败');
});
} else {
that.$message.error('该文件数据为空');
loading.close();
}
} else {
that.$message.error('该文件数据结构不正确');
loading.close();
}
};
});
},
releaseTrainFixedPath() {
const that = this;
commitOperate(menuOperate.CTC.releaseTrainFixedPath, { stationCode:this.currentStationCode}, 3).then(({valid})=>{
if (valid) {
that.$message.success('发布成功!');
}
}).catch(() => {
that.$message.error('发布失败');
});
},
coverTime(time) {
return time.split(':').splice(0, 2).join(':');
},
handleData() {
this.tableData = [];
const railCtcStationManageRpMsg = copyAssign({}, this.$store.state.socket.railCtcStationManageRpMsg);
this.tableData = Object.values(railCtcStationManageRpMsg).filter(data=>{
data.arriveTime = this.coverTime(data.arriveTime);
data.departTime = this.coverTime(data.departTime);
return data.stationCode == this.currentStationCode;
});
// stationCode
// trackSectionCode
// arriveTripNumber
// departTripNumber
// arriveTime
// departTime
// arriveDirectionCode
// departDirectionCode
// arriveStationCode
// departStationCode
//
}
}
};
</script>
<style lang="scss" scoped>
.trainFixedPath{
padding-left:200px;
}
.trainFixedPathL{
width: 200px;
height: 100%;
position: absolute;
border-right: 1px #797979 solid;
left: 0;
top: 0;
}
.trainFixedPathR{
padding:0px 5px 0px 5px;
height: 100%;
background: #d8d8d8;
}
.trainFixedPathRMenu{
background:#eeeeee;
display: inline-block;
width:100%;
padding:5px;
border-left: 1px #707070 solid;
}
.trainFixedPathRMenuL{display: inline-block;}
.trainFixedPathRMenuR{float:right;display: inline-block;}
.trainFixedPathRVer{
font-size: 14px;
margin-right: 10px;
color: #87a7c9;
}
.trainFixedPathButton{
background-image: linear-gradient(#ffffff,#d8d8d8);
color: #000;
padding: 5px 10px;
border: 1px #737373 solid;
}
.trainFixedPathButton:hover{
background-image: linear-gradient(#efffff,#a8daf3);
}
.trainFixedPathRTable{background:#a9a9a9;border-left: 1px #707070 solid;}
.trainFixedPathUpload {
position: relative;
overflow: hidden;
cursor: pointer;
input {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
opacity: 0;
cursor: pointer;
font-size: 0;
}
}
</style>
<style lang="scss">
#trainFixedPathTableIn.el-table td, #trainFixedPathTableIn.el-table th{
padding-top: 5px;
padding-bottom: 5px;
border-color: #a5a5a5;
}
#trainFixedPathTableIn.el-table .cell{ padding-left: 5px;padding-right: 5px; text-align: center;font-size: 13px;}
</style>

View File

@ -15,6 +15,16 @@
<el-form-item :label="this.$t('ibp.yCoordinate')">
<el-input-number v-model="form.y" controls-position="right" :min="1" />
</el-form-item>
<el-form-item label="表示状态">
<el-select v-model="form.mean" placeholder="请选择">
<el-option
v-for="item in showMeanList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="方向">
<el-select v-model="form.direction" placeholder="请选择">
<el-option
@ -50,6 +60,7 @@ export default {
x: 10,
y: 10,
direction: null,
mean: ''
},
rules: {
code: [
@ -64,6 +75,10 @@ export default {
{ name: '上行', value: true},
{ name: '下行', value: false},
],
showMeanList: [
{label: '信号-蜂鸣器', value: 'SIGNAL_ALARM'},
{label: '屏蔽门-蜂鸣器', value: 'PSD_ALARM'}
]
};
},
computed: {
@ -80,6 +95,7 @@ export default {
this.form.alarmWidth = model.width;
this.form.x = model.point.x;
this.form.y = model.point.y;
this.form.mean = model.mean;
this.form.direction = model.direction
}
}
@ -96,6 +112,7 @@ export default {
y: this.form.y
},
code: this.form.code,
mean: this.form.mean,
_type: 'Alarm',
width: this.form.alarmWidth,
direction: this.form.direction
@ -115,6 +132,7 @@ export default {
},
code: this.form.code,
_type: 'Alarm',
mean: this.form.mean,
width: this.form.alarmWidth,
direction: this.form.direction
};
@ -130,6 +148,7 @@ export default {
alarmWidth: '',
x: 10,
y: 10,
mean: '',
direction: null
};
},

View File

@ -100,7 +100,9 @@ export default {
{ label: "计轴复位", value: "AXLE_RESET" },
{ label: "计轴区段复位", value: "AXLE_PRE_RESET" },
{ label: "计轴预复位", value: "PRERESET_Z" },
{ label: "试灯", value: "SD" }
{ label: "试灯", value: "SD" },
{ label: "首末开门", value: 'PSD_SMKM' },
{ label: "屏蔽门试灯", value: 'PSD_SD' }
],
colors: ["red", "yellow", "blue", "green", "gray"],
operateWithoutDirections: ["AXLE_RESET", "AXLE_PRE_RESET", "PRERESET_Z", "SD"],

View File

@ -71,7 +71,8 @@ export default {
},
operateMeanList: [
{ label: '上行钥匙', value: 'SXYS' },
{ label: '下行钥匙', value: 'XXYS' }
{ label: '下行钥匙', value: 'XXYS' },
{ label: '互锁解除', value: 'PSD_HSJC' }
],
rules: {
code: [

View File

@ -59,6 +59,10 @@ export default {
{label: '关门灯', value: 'gmLight'},
{label: '开门灯', value: 'kmLight'},
{label: '紧急停车灯', value: 'jjtcLight'},
{label: '操作允许灯', value: 'PSD_CZYX_LIGHT'},
{label: '互锁解除灯', value: 'PSD_HSJC_LIGHT'},
{label: '手动操作灯', value: 'PSD_SDCZ_LIGHT'},
{label: '故障报警灯', value: 'PSD_GZBJ_LIGHT'}
],
form: {
code: '',

View File

@ -159,7 +159,7 @@ export default {
{label: '交流输出电压', value: 'acOutputVoltage'},
{label: '直流电压信号', value: 'dcVoltageSignal'}
];
} else if (this.$router.query.lineCode === '01') {
} else if (this.$route.query.lineCode === '01') {
return [
{label: 'ibp操作允许上行', value: 'ibpOperationAllowsUp'},
{label: 'ibp操作允许下行', value: 'ibpOperationAllowsDown'},

View File

@ -19,7 +19,7 @@
</div>
<div v-if="!syncLogin" class="content-box" :style="noQrcodeList.includes(project)?'width: 450px;':''">
<div v-if="isProject && !syncLogin" class="text-box" :style="{top: titleDistance}">
<img v-if="!loginTitle" class="logo" :src="logoImg" style="width: 80px">
<img v-if="!loginTitle" class="logo" :src="logoImg" :style="{width: titleImgWidth}">
<span>{{ title }}</span>
</div>
<div v-if="!noQrcodeList.includes(project)" class="qrcode-main">
@ -245,6 +245,9 @@ export default {
titleDistance() {
return loginInfo[this.project].titleDistance || '-60px';
},
titleImgWidth() {
return loginInfo[this.project].titleImgWidth || '80px';
},
logoImg() {
const projectName = this.project;
return ProjectIcon[projectName];

View File

@ -10,18 +10,18 @@
top="25vh"
>
<el-form ref="ruleForm" :model="form" :rules="rules" label-width="110px" class="demo-ruleForm">
<el-form-item prop="email">
<template slot="label">
<span>邮箱(账号)</span>
</template>
<el-input v-model="form.email" />
</el-form-item>
<el-form-item prop="nickname">
<template slot="label">
<span>&emsp;&emsp;</span>
</template>
<el-input v-model="form.nickname" autocomplete="new-password" />
</el-form-item>
<el-form-item prop="email">
<template slot="label">
<span>邮箱(账号)</span>
</template>
<el-input v-model="form.email" />
</el-form-item>
<el-form-item label="密码:" prop="password">
<template slot="label">
<span>&emsp;&emsp;</span>

View File

@ -1,381 +1,528 @@
<template>
<el-dialog
title="车站股道图"
:visible.sync="dialogVisible"
width="99%"
top="5vh"
class="lineBoard"
center
:before-close="handleClose">
<div style="height: 500px; overflow-y: auto;background: #DFE3E6;padding: 7px;">
<div style="width: 100%;display: flex;align-items: center;margin-bottom: 10px;">
<div
:key="item.code"
v-for="item in stationList"
class="tab-box"
@click="selectStandCode(item.code)"
:style="{background: selectCode === item.code ? '#F1F1F1': '#DBDBDB', color: selectCode === item.code ? '#000': '#ccc'}">
{{ item.name }}
</div>
</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 style="padding: 5px 20px;border-radius: 5px;border-width: 2px;border-style: solid;"
:style="{borderColor: item.occupied ? '#f00': '#DFE3E6', fontWeight: item.occupied? 'bold': 'normal', color:item.occupied? '#f00':'#1e2024' }">{{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>
<el-select v-model="item.process" placeholder="请选择" size="mini" style="width: 120px;" :disabled="true">
<el-option
v-for="elem in sectionStatusList"
:key="elem.value"
:label="elem.label"
:value="elem.value"
/>
</el-select>
</div>
<div style="display: flex;">
<div :style="{ background: item.receivingNotice ? '#29CA42': '#ccc' }" class="button-box-fir" @click="doShowRecDep(item,'rec')">接预</div>
<div
class="button-box-sec"
:style="{ background: handleBackground(item.receivingRouteLock, item.receivingRouteAutoTrigger) }"
@contextmenu="popMenuShow(item, 'rec' ,$event)"
@click="doShowRoute(item, 'rec')">
{{ '接路' + (item.receivingRouteLock ? '':getRouteName(item.receivingRouteCode)) }}
</div>
<div :style="{ background: item.arrive ? '#29CA42': '#ccc' }" class="button-box-fir" style="margin-left: 10px;cursor: default;">到点</div>
</div>
<div>
<div>{{item.arriveTime}}</div>
<div>{{item.departureTime}}</div>
</div>
<div>
<div>{{ item.planArriveTime }}</div>
<div>{{ item.planDepartureTime }}</div>
</div>
<div></div><!--起点--终点-->
<div style="display: flex;">
<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.departureRouteAutoTrigger) }"
@contextmenu="popMenuShow(item, 'dep' ,$event)"
@click="doShowRoute(item, 'dep')">
{{ '发路' + (item.departureRouteLock ? '':getRouteName(item.departureRouteCode)) }}
</div>
<div :style="{ background: item.departure ? '#29CA42': '#ccc' }" class="button-box-fir" style="margin-left: 10px;cursor: default;">发点</div>
</div>
<div>{{ item.tripNumber }}</div>
<div :style="{fontWeight: item.occupied? 'bold': 'normal', color:item.occupied? '#f00': '#1e2024' }">{{ item.trackName }}</div>
</div>
</div>
<!--<div style="display: flex; justify-content: center;">-->
<!--<img class="img-box" :src="arrowPic" />-->
<!--<img class="img-box" :src="picT3" />-->
<!--<img class="img-box" :src="controlPanelPic" />-->
<!--<img class="img-box" :src="trainPic" />-->
<!--<img class="img-box" :src="controlPanel2Pic"/>-->
<!--<img class="img-box" :src="linkPic"/>-->
<!--<img class="img-box" :src="cameraPic"/>-->
<!--</div>-->
<div style="display: flex;margin-top: 5px;justify-content: space-around;background: #DEE2E5;">
<div style="width: 49%;margin-top: 10px;">
<div style="display: flex;align-items: center;">
<div style="background: #0f0;">{{ `进路序列模式:&lt;${readOnly ? '只读':'可修改'}&gt;` }}</div>
<el-button size="mini" style="padding: 7px 4px;" disabled>修改申请</el-button>
<el-button size="mini" style="padding: 7px 4px;" disabled>只读申请</el-button>
<el-button size="mini" style="padding: 7px 4px;margin-left: 30px;">查找列车</el-button>
<el-input style="width: 70px;height: 25px;" size="mini" v-model="searchTrain" />
<div style="margin-left: 10px;">上下行</div>
<el-select size="mini" v-model="andDown" style="width: 80px;margin-left: 5px;">
<el-option
v-for="item in andDownList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<div style="margin-left: 10px;">接车口</div>
<el-select size="mini" v-model="andDown" style="width: 100px;margin-left: 5px;" disabled>
<el-option
v-for="item in andDownList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<div style="margin-left: 10px;">发车口</div>
<el-select size="mini" v-model="andDown" style="width: 100px;margin-left: 5px;" disabled>
<el-option
v-for="item in andDownList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
<el-table
:data="tableData"
style="width: 100%;margin-top: 10px;"
highlight-current-row
:row-style="{ background: '#ff0' }"
height="180"
border
>
<el-table-column width="50" label="序号" align="center">
<template slot-scope="scope">
<!--:style="{ background: scope.$index? '#f00':'#ff0' }" -->
<div>{{ scope.$index }}</div>
</template>
</el-table-column>
<el-table-column property="date" label="注意确认"/>
<el-table-column property="tripNumber" label="车次"/>
<el-table-column property="trackName" label="股道"/>
<el-table-column property="autoTrigger" label="自触">
<template slot-scope="scope">
<div style="width: 100%;height: 22px;" @contextmenu="popMenuShow(scope.row, '' ,$event)">{{ scope.row.autoTrigger? '√':'' }}</div>
</template>
</el-table-column>
<el-table-column property="type" label="类型"/>
<el-table-column property="status" label="状态"/>
<el-table-column property="startTime" label="开始时间"/>
<el-table-column property="planTime" label="计划时间"/>
<el-table-column property="direction" label="方向"/>
<el-table-column property="routeCode" label="序列描述">
<template slot-scope="scope">
<div>{{getRouteName(scope.row.routeCode)}}</div>
</template>
</el-table-column>
</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 style="width: 49%;margin-top: 10px;">
<div style="display: flex;align-items: center;">
<el-select size="mini" v-model="unknow" disabled>
<el-option
v-for="item in unknowList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<div>调机-J101</div>
<el-button size="mini" disabled>进路预览</el-button>
<el-select size="mini" v-model="unknow1" disabled>
<el-option
v-for="item in unknowList1"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-button size="mini" disabled>办理进路</el-button>
<el-button size="mini" disabled>发送机车</el-button>
</div>
<el-table
:data="tableData1"
style="width: 100%;margin-top: 10px;"
highlight-current-row
border
height="180"
>
<el-table-column type="index" width="50" label="勾"/>
<el-table-column property="line" label="线路"/>
<el-table-column property="method" label="方法"/>
<el-table-column property="nums" label="辆数"/>
<el-table-column property="direction" label="方向"/>
<el-table-column property="leadWire" label="牵出线"/>
<el-table-column property="status" label="状态"/>
<el-table-column property="leadRoute" label="牵出进路"/>
<el-table-column property="pushRoute" label="推入进路"/>
<el-table-column property="note" label="记事"/>
</el-table>
</div>
</div>
<rec-dep ref="recDep" />
<route-selection ref="routeSelection" />
<pop-menu ref="popMenu" :menu="menu" style="background: #DFE3E6;"/>
</el-dialog>
<el-dialog
title="车站股道图"
:visible.sync="dialogVisible"
width="99%"
z-index="3000"
top="5vh"
class="lineBoard"
center
:before-close="handleClose"
>
<div style="height: 500px; overflow-y: auto;background: #DFE3E6;padding: 7px;">
<div style="width: 100%;display: flex;align-items: center;margin-bottom: 10px;">
<div
v-for="item in stationList"
:key="item.code"
class="tab-box"
:style="{background: selectCode === item.code ? '#F1F1F1': '#DBDBDB', color: selectCode === item.code ? '#000': '#ccc'}"
@click="selectStandCode(item.code)"
>
{{ item.name }}
</div>
</div>
<div v-for="item in trackList" :key="item.id" style="display: flex; justify-content: space-between;border-top: 1px solid #fff;padding: 3px;height: 36px;align-items: center;" :style="{background: item.oddNumber? '#BAC4CF':'#D2D8DB'}">
<!--<div
style="padding: 5px 20px;border-radius: 5px;border-width: 2px;border-style: solid;width: 120px;"
:style="{borderColor: item.occupied ? '#f00': '#DFE3E6', fontWeight: item.occupied? 'bold': 'normal', color:item.occupied? '#f00':'#1e2024' }"
>{{ item.trackName }}</div>-->
<div style="width: 150px;display: flex;">
<el-dropdown v-show="item.showTrack" trigger="click">
<div
style="width: 110px;padding: 5px 20px;border-radius: 5px;border-width: 2px;border-style: solid;display: flex;justify-content: space-between;background: #fff;"
:style="{borderColor: item.occupied ? '#f00': '#DFE3E6', fontWeight: item.occupied? 'bold': 'normal', color:item.occupied? '#f00':'#1e2024' }"
>
<span>{{ item.trackName }}</span>
<i class="el-icon-caret-bottom" />
</div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>黄金糕</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<div v-show="item.showTrack" style="width: 30px;height: 30px;background: #fff;border-radius: 5px;margin-left: 5px;" />
</div>
<div v-show="!item.noData" style="width: 80px;color: #f00;font-weight: bolder;">{{ item.tripNumber }}</div>
<div v-show="!item.noData" style="background: #FFCBEC;border: 1px solid #315FD1;border-radius: 3px;font-size: 10px;width: 15px;" :style="{borderColor:item.trainType?'#315FD1':'#DFE3E6'}">{{ item.trainType?'':'' }}</div>
<div v-show="!item.noData" style="width: 60px;">{{ item.trainDistanceInfo }}</div>
<div v-show="!item.noData" style="width: 120px;">
<el-select v-model="item.process" placeholder="请选择" size="mini" style="width: 120px;" :disabled="true">
<el-option
v-for="elem in sectionStatusList"
:key="elem.value"
:label="elem.label"
:value="elem.value"
/>
</el-select>
</div>
<div v-show="!item.noData" style="display: flex;width: 300px;">
<div v-show="item.receivingRouteCode" :style="{ background: item.receivingNotice ? '#29CA42': '#ccc' }" class="button-box-fir" @click="doShowRecDep(item,'rec')">接预</div>
<div
v-show="item.receivingRouteCode"
class="button-box-sec"
:style="{ background: handleBackground(item.receivingRouteLock, item.receivingRouteAutoTrigger) }"
@contextmenu="popMenuShow(item, 'rec' ,$event)"
@click="doShowRoute(item, 'rec')"
>
{{ '接路' + (item.receivingRouteLock ? '':getRouteName(item.receivingRouteCode)) }}
</div>
<div v-show="item.receivingRouteCode" :style="{ background: item.arrive ? '#29CA42': '#ccc' }" class="button-box-fir" style="margin-left: 10px;cursor: default;" @click="doShowRecDep(item, 'arrive')">到点</div>
</div>
<div v-show="!item.noData" style="width: 120px;color: #f00;">
<el-row><div>{{ item.arriveTime || '-' }}</div></el-row>
<el-row><div>{{ item.departureTime|| '-' }}</div></el-row>
</div>
<div v-show="!item.noData" style="width: 120px;color: #f00;font-style:italic;">
<el-row><div>{{ item.planArriveTime|| '-' }}</div></el-row>
<el-row><div>{{ item.planDepartureTime || '-' }}</div></el-row>
</div>
<div v-show="!item.noData" style="width: 150px;color: #f00;">
<el-row>{{ item.receivingDirection||'-' }}</el-row>
<el-row>{{ item.departureDirection||'-' }}</el-row>
</div>
<div /><!--起点--终点-->
<div v-show="!item.noData" style="display: flex;width: 300px;">
<div v-show="item.departureRouteCode" :style="{ background: item.departureNotice ? '#29CA42': '#ccc' }" class="button-box-fir" @click="doShowRecDep(item,'dep')">发预</div>
<div
v-show="item.departureRouteCode"
class="button-box-sec"
:style="{ background: handleBackground(item.departureRouteLock, item.departureRouteAutoTrigger) }"
@contextmenu="popMenuShow(item, 'dep' ,$event)"
@click="doShowRoute(item, 'dep')"
>
{{ '发路' + (item.departureRouteLock ? '':getRouteName(item.departureRouteCode)) }}
</div>
<div v-show="item.departureRouteCode" :style="{ background: item.departure ? '#29CA42': '#ccc' }" class="button-box-fir" style="margin-left: 10px;cursor: default;" @click="doShowRecDep(item, 'departure')">发点</div>
</div>
<div v-show="!item.noData" style="width: 80px;color: #f00;font-weight: bolder;">{{ item.tripNumber }}</div>
<div style="width: 120px" :style="{fontWeight: item.occupied? 'bold': 'normal', color:item.occupied? '#f00': '#1e2024' }">{{ item.showTrack ? item.trackName: '' }}</div>
</div>
</div>
<div style="background: #DFE3E6;">
<div style="padding: 5px;text-align: center;width: 700px;margin: 0 auto;">
<div style="background: #999EA7;display: flex;align-items: center;">
<div class="button-box">
<img :src="arrowPic" class="img-button">
</div>
<div class="button-box">
<img :src="controlPanelPic" class="img-button">
</div>
<div class="button-box">
<img :src="t3Pic" class="img-button">
</div>
<div class="button-box">
<img :src="panelPic" class="img-button">
</div>
<div class="button-box">
<img :src="trainPic" class="img-button">
</div>
<div class="button-box">
<img :src="linkPic" class="img-button">
</div>
<div class="button-box">
<img :src="cameraPic" class="img-button">
</div>
<div style="width: 270px;height: 36px; background: #fff;border-radius: 5px;" />
<div class="button-box">
<img :src="unknowPic" class="img-button">
</div>
<div class="button-box">
<div class="img-button"></div>
</div>
<div class="button-box">
<div class="img-button"></div>
</div>
</div>
</div>
</div>
<div style="display: flex;margin-top: 5px;justify-content: space-around;background: #DEE2E5;">
<div style="width: 49%;margin-top: 10px;">
<div style="display: flex;align-items: center;">
<div style="background: #0f0;">{{ `进路序列模式:&lt;${readOnlyMap[selectCode1] ? '只读':'可修改'}&gt;` }}</div>
<el-button size="mini" style="padding: 7px 4px;" disabled>修改申请</el-button>
<el-button size="mini" style="padding: 7px 4px;" disabled>只读申请</el-button>
<el-button size="mini" style="padding: 7px 4px;margin-left: 30px;">查找列车</el-button>
<el-input v-model="searchTrain" style="width: 70px;height: 25px;" size="mini" />
<div style="margin-left: 10px;">上下行</div>
<el-select v-model="andDown" size="mini" style="width: 80px;margin-left: 5px;">
<el-option
v-for="item in andDownList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<div style="margin-left: 10px;">接车口</div>
<el-select v-model="andDown" size="mini" style="width: 100px;margin-left: 5px;" disabled>
<el-option
v-for="item in andDownList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<div style="margin-left: 10px;">发车口</div>
<el-select v-model="andDown" size="mini" style="width: 100px;margin-left: 5px;" disabled>
<el-option
v-for="item in andDownList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
<el-table
:data="sequenceList"
style="width: 100%;margin-top: 10px;"
highlight-current-row
:row-style="{ background: '#ff0' }"
height="180"
:default-sort="{prop: 'startTime', order: 'ascending'}"
border
>
<el-table-column width="50" label="序号" align="center">
<template slot-scope="scope">
<!--:style="{ background: scope.$index? '#f00':'#ff0' }" -->
<div>{{ scope.$index }}</div>
</template>
</el-table-column>
<el-table-column property="date" label="注意确认" />
<el-table-column property="tripNumber" label="车次" />
<el-table-column property="trackName" label="股道" />
<el-table-column property="autoTrigger" label="自触">
<template slot-scope="scope">
<div style="width: 100%;height: 22px;" @contextmenu="popMenuShow(scope.row, '' ,$event)">{{ scope.row.autoTrigger? '√':'' }}</div>
</template>
</el-table-column>
<el-table-column property="departure" label="类型">
<template slot-scope="scope">
<span>{{ scope.row.departure ? '发车':'接车' }}</span>
</template>
</el-table-column>
<el-table-column property="status" label="状态">
<template slot-scope="scope">
<span>{{ getRouteStatus(scope.row.status) }}</span>
</template>
</el-table-column>
<el-table-column property="startTime" label="开始时间" />
<el-table-column property="planTime" label="计划时间" />
<el-table-column property="direction" label="方向" />
<el-table-column property="routeCode" label="序列描述">
<template slot-scope="scope">
<div>{{ getRouteName(scope.row.routeCode) }}</div>
</template>
</el-table-column>
</el-table>
<div style="width: 100%;display: flex;align-items: center;margin: 5px 0;">
<div
v-for="item in stationList"
:key="item.code"
class="tab-box"
:style="{background: selectCode1 === item.code ? '#F1F1F1': '#DBDBDB', color: selectCode1 === item.code ? '#000': '#ccc'}"
@click="selectStandCode1(item.code)"
>
{{ item.name }}
</div>
</div>
</div>
<div style="width: 49%;margin-top: 10px;">
<div style="display: flex;align-items: center;">
<el-select v-model="unknow" size="mini" disabled>
<el-option
v-for="item in unknowList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<div>调机-J101</div>
<el-button size="mini" disabled>进路预览</el-button>
<el-select v-model="unknow1" size="mini" disabled>
<el-option
v-for="item in unknowList1"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-button size="mini" disabled>办理进路</el-button>
<el-button size="mini" disabled>发送机车</el-button>
</div>
<el-table
:data="tableData1"
style="width: 100%;margin-top: 10px;"
highlight-current-row
border
height="180"
>
<el-table-column type="index" width="50" label="勾" />
<el-table-column property="line" label="线路" />
<el-table-column property="method" label="方法" />
<el-table-column property="nums" label="辆数" />
<el-table-column property="direction" label="方向" />
<el-table-column property="leadWire" label="牵出线" />
<el-table-column property="status" label="状态" />
<el-table-column property="leadRoute" label="牵出进路" />
<el-table-column property="pushRoute" label="推入进路" />
<el-table-column property="note" label="记事" />
</el-table>
</div>
</div>
<rec-dep ref="recDep" />
<route-selection ref="routeSelection" />
<pop-menu ref="popMenu" :menu="menu" style="background: #DFE3E6;" />
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import ArrowPic from '@/assets/datie/arrow.png';
import PicT3 from '@/assets/datie/picT3.png';
import ControlPanelPic from '@/assets/datie/controlPanel.png';
import ControlPanel2Pic from '@/assets/datie/controlPanel2.png';
import TrainPic from '@/assets/datie/train.png';
import LinkPic from '@/assets/datie/link.png';
import CameraPic from '@/assets/datie/camera.png';
import RecDep from '@/jmapNew/theme/datie_02/menus/dialog/recDep'
import RouteSelection from '@/jmapNew/theme/datie_02/menus/dialog/routeSelection1';
import PopMenu from '@/components/PopMenu';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import { menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name: 'lineBoard',
components: {
RecDep,
RouteSelection,
PopMenu
},
data() {
return {
menu: [{label: '设置自触', handler: this.setTrigger, disabled: false},{label: '取消自触', handler: this.cancelTrigger, disabled: false}],
dialogVisible: false,
triggerParam: {},
selectCode: '',
selectCode1: '',
readOnly: '',
arrowPic: ArrowPic,
picT3: PicT3,
controlPanelPic: ControlPanelPic,
trainPic: TrainPic,
controlPanel2Pic: ControlPanel2Pic,
linkPic: LinkPic,
cameraPic: CameraPic,
searchTrain: '',
andDown: 'all',
unknow: '',
unknow1: '',
tableData: [],
tableData1: [],
unknowList1: [{label: '全部机车', value: 'all'}],
unknowList: [{label: 'J101-执行中', value: 'J101'}],
andDownList: [{ label: '全部', value: 'all' }, { label: '上行', value: 'up' }, { label: '下行', value: 'down' }],
sectionStatusList: [
{label: '办理接车闭塞', value: 'RECEIVING_BLOCK'},
{label: '准备接车', value: 'RECEIVING'},
{label: '办理接车进路', value: 'RECEIVING_ROUTE'},
{label: '列车到达(通过)报点', value: 'ARRIVE'},
{label: '办理发车闭塞', value: 'DEPARTURE_BLOCK'},
{label: '发车进路办理', value: 'DEPARTURE_ROUTE'},
{label: '发车报点', value: 'DEPARTURE'},
{label: '流程终止', value: 'FINISH'}
],
stationDataMap: {},
infoList : []
}
},
computed: {
...mapGetters('map', [
'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: {
handleClose() {
this.dialogVisible = false;
},
doShow() {
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;
},
selectStandCode(code) {
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, trigger) {
if (flag){
return '#29CA42';
} else {
return trigger ? '#FFBF2F' : '#CCCCCC';
}
},
doShowRecDep(row, type) {
this.$refs.recDep.doShow(row, type, this.selectCode);
},
doShowRoute(row, type) {
this.$refs.routeSelection.doShow(row, type, this.selectCode);
},
popMenuShow(item,type, e){
if (type === 'rec') {
this.menu[0].disabled = item.receivingRouteAutoTrigger;
this.menu[1].disabled = !item.receivingRouteAutoTrigger;
this.triggerParam = { stationCode: this.selectCode, tripNumber: item.tripNumber, routeCode: item.receivingRouteCode }
} else if (type === 'dep') {
this.menu[0].disabled = item.departureRouteAutoTrigger;
this.menu[1].disabled = !item.departureRouteAutoTrigger;
this.triggerParam = { stationCode: this.selectCode, tripNumber: item.tripNumber, routeCode: item.departureRouteCode }
} else {
this.menu[0].disabled = item.autoTrigger;
this.menu[1].disabled = !item.autoTrigger;
this.triggerParam = { stationCode: this.selectCode1, tripNumber: item.tripNumber, routeCode: item.routeCode }
}
this.$refs.popMenu.resetShowPosition({x: e.x, y:e.y});
},
setTrigger() {
const param = { ...this.triggerParam, trigger: true };
commitOperate(menuOperate.CTC.autoTrigger, param, 3).then(({valid, operate})=>{
this.loading = false;
this.triggerParam = {};
if (valid) {
this.doClose();
this.$message.success('设置自动触发成功!')
}
}).catch((e) => {
console.error(e);
this.loading = false;
this.doClose();
this.triggerParam = {};
this.$refs.noticeInfo.doShow();
});
},
cancelTrigger() {
const param = { ...this.triggerParam, trigger: false };
console.log(menuOperate.CTC.autoTrigger, 'trigger');
commitOperate(menuOperate.CTC.autoTrigger, param, 3).then(({valid, operate})=>{
this.triggerParam = {};
if (valid) {
this.$message.success('取消自动触发成功!')
}
}).catch((e) => {
console.error(e);
this.triggerParam = {};
this.$message.error('取消自动触发失败!')
});
}
}
};
import { mapGetters } from 'vuex';
import ArrowPic from '@/assets/datie/arrow.png';
import PicT3 from '@/assets/datie/picT3.png';
import ControlPanelPic from '@/assets/datie/controlPanel.png';
import ControlPanel2Pic from '@/assets/datie/controlPanel2.png';
import RecDep from '@/jmapNew/theme/datie_02/menus/dialog/recDep';
import RouteSelection from '@/jmapNew/theme/datie_02/menus/dialog/routeSelection1';
import PopMenu from '@/components/PopMenu';
import { menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import T3Pic from '@/assets/ctc_icon/t3.png';
import TrainPic from '@/assets/ctc_icon/train.png';
import PanelPic from '@/assets/ctc_icon/panel.png';
import LinkPic from '@/assets/ctc_icon/link.png';
import CameraPic from '@/assets/ctc_icon/camera.png';
import UnknowPic from '@/assets/ctc_icon/unknow.png';
export default {
name: 'LineBoard',
components: {
RecDep,
RouteSelection,
PopMenu
},
data() {
return {
menu: [{label: '设置自触', handler: this.setTrigger, disabled: false}, {label: '取消自触', handler: this.cancelTrigger, disabled: false}],
dialogVisible: true,
triggerParam: {},
selectCode: '',
selectCode1: '',
arrowPic: ArrowPic,
picT3: PicT3,
controlPanelPic: ControlPanelPic,
controlPanel2Pic: ControlPanel2Pic,
t3Pic: T3Pic,
panelPic: PanelPic,
trainPic: TrainPic,
linkPic: LinkPic,
cameraPic: CameraPic,
unknowPic: UnknowPic,
searchTrain: '',
andDown: 'all',
unknow: '',
unknow1: '',
tableData1: [],
unknowList1: [{label: '全部机车', value: 'all'}],
unknowList: [{label: 'J101-执行中', value: 'J101'}],
andDownList: [{ label: '全部', value: 'all' }, { label: '上行', value: 'up' }, { label: '下行', value: 'down' }],
sectionStatusList: [
{label: '办理接车闭塞', value: 'RECEIVING_BLOCK'},
{label: '准备接车', value: 'RECEIVING'},
{label: '办理接车进路', value: 'RECEIVING_ROUTE'},
{label: '列车到达(通过)报点', value: 'ARRIVE'},
{label: '办理发车闭塞', value: 'DEPARTURE_BLOCK'},
{label: '发车进路办理', value: 'DEPARTURE_ROUTE'},
{label: '发车报点', value: 'DEPARTURE'},
{label: '流程终止', value: 'FINISH'}
],
stationDataMap: {},
sequenceMap: {},
sequenceList: [],
readOnlyMap: {},
standTrackSectionMap: {},
trackList: []
};
},
computed: {
...mapGetters('map', [
'sectionList',
'stationList'
])
},
watch: {
'$store.state.socket.railCtcStatusMsg': function (val) {
if (val && val.length) {
val.forEach(item => {
if (item && item.routeSequence && item.routeSequence.lines && item.routeSequence.lines.length) {
item.routeSequence.lines.forEach(elem => {
if (!this.sequenceMap[elem.id]) {
this.sequenceMap[elem.id] = Object.assign(elem, { stationCode: item.stationCode, readOnly: item.readOnly });
} else {
this.sequenceMap[elem.id] = Object.assign(this.sequenceMap[elem.id], elem, { stationCode: item.stationCode, readOnly: item.readOnly });
}
});
this.readOnlyMap[item.stationCode] = item.readOnly;
}
if (item && item.trackView && item.trackView.trackLineMap) {
for (const key in item.trackView.trackLineMap) {
if (this.standTrackSectionMap[key]) {
this.standTrackSectionMap[key].lines = item.trackView.trackLineMap[key];
}
}
}
if (item && item.trackView && item.trackView.sectionOccupiedMap) {
for (const key in item.trackView.sectionOccupiedMap) {
if (this.standTrackSectionMap[key]) {
this.standTrackSectionMap[key].occupied = item.trackView.sectionOccupiedMap[key];
}
}
}
});
this.sequenceList = [];
for (const key in this.sequenceMap) {
if (this.sequenceMap[key].stationCode === this.selectCode1) {
this.sequenceList.push(this.sequenceMap[key]);
}
}
this.trackList = [];
let oddNumber = true;
for (const key in this.standTrackSectionMap) {
if (this.standTrackSectionMap[key].belongStation === this.selectCode) {
if (this.standTrackSectionMap[key].lines && this.standTrackSectionMap[key].lines.length) {
this.standTrackSectionMap[key].lines.forEach((item, index) => {
this.trackList.push(Object.assign({}, item, { trackName: this.standTrackSectionMap[key].trackName, occupied: this.standTrackSectionMap[key].occupied, oddNumber: oddNumber, showTrack: index === 0 }));
});
oddNumber = !oddNumber;
} else {
this.trackList.push({trackName: this.standTrackSectionMap[key].trackName, occupied: this.standTrackSectionMap[key].occupied, noData: true, oddNumber: oddNumber, showTrack: true});
oddNumber = !oddNumber;
}
}
}
}
},
'$store.state.map.mapDataLoadedCount': function (val) { //
this.sectionList.forEach(item => {
if (item.standTrack) {
this.standTrackSectionMap[item.code] = { trackName: item.name, occupied: false, belongStation:item.belongStation, lines: [] };
}
});
}
},
mounted() {
this.dialogVisible = false;
},
methods: {
handleClose() {
this.dialogVisible = false;
},
doShow() {
this.dialogVisible = true;
if (this.stationList[0]) {
this.selectStandCode(this.stationList[0].code);
this.selectStandCode1(this.stationList[0].code);
}
},
selectStandCode(code) {
this.selectCode = code;
this.trackList = [];
for (const key in this.standTrackSectionMap) {
if (this.standTrackSectionMap[key].belongStation === this.selectCode) {
if (this.standTrackSectionMap[key].lines && this.standTrackSectionMap[key].lines.length) {
this.standTrackSectionMap[key].lines.forEach((item, index) => {
if (!index) {
this.trackList.push(Object.assign({}, item, { sectionName: this.standTrackSectionMap[key].sectionName, occupied: this.standTrackSectionMap[key].occupied }));
} else {
this.trackList.push(Object.assign({}, item));
}
});
} else {
this.trackList.push({sectionName: this.standTrackSectionMap[key].sectionName, occupied: this.standTrackSectionMap[key].occupied});
}
}
}
},
getRouteStatus(status) {
if (status === '2') {
return '触发完成';
} else if (status === '1') {
return '正在触发';
} else {
return '等待中';
}
},
selectStandCode1(code) {
this.selectCode1 = code;
this.sequenceList = [];
for (const key in this.sequenceMap) {
if (this.sequenceMap[key].stationCode === this.selectCode1) {
this.sequenceList.push(this.sequenceMap[key]);
}
}
},
getRouteName(code) {
if (code) {
const route = this.$store.state.map.routeData[code];
return route ? route.name : '';
} else { return ''; }
},
handleBackground(flag, trigger) {
if (flag) {
return '#29CA42';
} else {
return trigger ? '#FFBF2F' : '#CCCCCC';
}
},
doShowRecDep(row, type) {
this.$refs.recDep.doShow(row, type, this.selectCode);
},
doShowRoute(row, type) {
this.$refs.routeSelection.doShow(row, type, this.selectCode);
},
popMenuShow(item, type, e) {
if (type === 'rec') {
this.menu[0].disabled = item.receivingRouteAutoTrigger;
this.menu[1].disabled = !item.receivingRouteAutoTrigger;
this.triggerParam = { stationCode: this.selectCode, tripNumber: item.tripNumber, routeCode: item.receivingRouteCode };
} else if (type === 'dep') {
this.menu[0].disabled = item.departureRouteAutoTrigger;
this.menu[1].disabled = !item.departureRouteAutoTrigger;
this.triggerParam = { stationCode: this.selectCode, tripNumber: item.tripNumber, routeCode: item.departureRouteCode };
} else {
this.menu[0].disabled = item.autoTrigger;
this.menu[1].disabled = !item.autoTrigger;
this.triggerParam = { stationCode: this.selectCode1, tripNumber: item.tripNumber, routeCode: item.routeCode };
}
this.$refs.popMenu.resetShowPosition({x: e.x, y:e.y});
},
setTrigger() {
const param = { ...this.triggerParam, trigger: true };
commitOperate(menuOperate.CTC.autoTrigger, param, 3).then(({valid, operate})=>{
this.loading = false;
this.triggerParam = {};
if (valid) {
this.doClose();
this.$message.success('设置自动触发成功!');
}
}).catch((e) => {
console.error(e);
this.loading = false;
this.doClose();
this.triggerParam = {};
this.$refs.noticeInfo.doShow();
});
},
cancelTrigger() {
const param = { ...this.triggerParam, trigger: false };
commitOperate(menuOperate.CTC.autoTrigger, param, 3).then(({valid, operate})=>{
this.triggerParam = {};
if (valid) {
this.$message.success('取消自动触发成功!');
}
}).catch((e) => {
console.error(e);
this.triggerParam = {};
this.$message.error('取消自动触发失败!');
});
}
}
};
</script>
<style scoped>
@ -437,4 +584,27 @@
.pop-background {
background: #DFE3E6;
}
.img-button{
width: 30px;
height: 30px;
background: #EBEBEB;
border: 2px inset #fff;
border-radius: 5px;
line-height: 27px;
}
.img-button:hover{
border: 2px outset #fff;
}
.img-button:active{
border: 2px outset #fff;
}
.button-box{
padding: 3px;
background: #EBEBEB;
width: 36px;
height: 36px;
border-radius: 5px;
margin: 3px;
cursor: pointer;
}
</style>

View File

@ -1,6 +1,6 @@
<template>
<div>
<div v-if="isAllShow&&project != 'bjd'" class="display_top_draft" :style="allStyle">
<div v-if="isAllShow&&project != 'bjd'&& !isCtc" class="display_top_draft" :style="allStyle">
<div class="btn_hover" @click="menuClick">菜单</div>
<el-button-group ref="button_group_box" class="button_group_box" :style="`margin-left:-${btnWidth}px`">
<!-- 地图错误判断 -->
@ -143,7 +143,10 @@ export default {
},
isLocal() { //
return process.env.VUE_APP_PRO === 'local';
}
},
isCtc() {
return this.$route.query.ctc
}
},
mounted() {
this.group = this.$route.query.group;

View File

@ -183,6 +183,10 @@ export default {
this.textStatusHeight = textStatus.offsetHeight || 0;
textStatus.style.top = this.offset - 15 + 'px';
}
if (this.$route.query.ctc) {
this.offset = 65;
this.offsetBottom = 2;
}
});
},
//

View File

@ -23,7 +23,7 @@
@runPlanLoadShow="runPlanLoadShow"
/>
<div class="display-draft" :class="{'haerbin_btn_box': $route.query.lineCode == '07'||$route.query.lineCode == '14'}" :style="{bottom: offsetBottom + 'px'}">
<div class="display-draft" :class="{'haerbin_btn_box': $route.query.lineCode == '07'||$route.query.lineCode == '14'}" :style="{bottom: offsetBottom + 'px', zIndex: zIndex}">
<el-button-group class="button-group-box">
<template v-if="!dataError&&project != 'bjd'">
<template v-if="isScriptRun">
@ -36,7 +36,7 @@
<el-button type="danger" size="small" @click="end">{{ $t('display.demon.initialize') }}</el-button>
</template>
</template>
<el-button v-if="project !='bjd'" type="primary" size="small" @click="back">{{ projectDevice?'退出':$t('display.demon.back') }}</el-button>
<el-button v-if="project !='bjd'" type="primary" size="small" @click="back">{{ projectDevice || isCtc?'退出':$t('display.demon.back') }}</el-button>
</el-button-group>
</div>
@ -155,6 +155,12 @@ export default {
isDisable() {
return this.$store.state.training.started;
},
isCtc() {
return !!this.$route.query.ctc
},
zIndex() {
return this.$route.query.ctc ? 11:0
},
project() {
return getSessionStorage('project');
},
@ -399,7 +405,7 @@ export default {
// || this.project === 'bjd'
} else {
if (this.project === 'bjd') {
if (this.project === 'bjd' || this.isCtc) {
window.close();
} else {
this.$store.dispatch('map/setShowCentralizedStationCode', '');

View File

@ -12,17 +12,17 @@
</el-select>
<template v-if="!dataError">
<el-button-group v-if="project !== 'bjd'">
<el-button v-if="$route.query.lineCode === '16'" size="small" @click="showLineBoard">占线板</el-button>
<el-button v-if="$route.query.lineCode === '16'" size="small" @click="goCtc">CTC</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="isDemon && !isScheduling && !isContest && !isDepoltSim && $route.query.lineCode!='16'" size="small" :disabled="viewDisabled" type="success" @click="viewRunQuest">{{ $t('display.schema.loadScript') }}</el-button>
<!-- 运行图加载 -->
<!-- notScript && -->
<el-button v-if="running" size="small" :disabled="viewDisabled" @click="viewRunPlan">{{ $t('display.schema.previewRunDiagram') }}</el-button>
<!-- notScript && -->
<el-button v-if="!running && $route.query.lineCode!='16'" size="small" type="warning" @click="loadRunPlan">{{ $t('display.schema.loadRunDiagram') }}</el-button>
<el-button v-if="$route.query.lineCode === '16'&&!isCtc" size="small" @click="goCtc">CTC</el-button>
<el-button v-if="$route.query.lineCode === '16'&&!isCtc" size="small" @click="goRpManage">管理终端</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="isDemon && !isScheduling && !isContest && !isDepoltSim && $route.query.lineCode!='16'" size="small" :disabled="viewDisabled" type="success" @click="viewRunQuest">{{ $t('display.schema.loadScript') }}</el-button>
<!-- 运行图加载 -->
<!-- notScript && -->
<el-button v-if="running" size="small" :disabled="viewDisabled" @click="viewRunPlan">{{ $t('display.schema.previewRunDiagram') }}</el-button>
<!-- notScript && -->
<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 v-if="!isScheduling && project !== 'bjd'" size="small" :type="faultMode ? '':'primary' " @click="changeOperateMode()">{{ faultMode?'切换到普通模式[Tab]':'切换到故障模式[Tab]' }}</el-button>
<el-button v-if="running&&project == 'bjd'" size="small" :disabled="viewDisabled" @click="viewRunPlan">{{ $t('display.schema.previewRunDiagram') }}</el-button>
@ -35,7 +35,7 @@
<run-plan-view ref="runPlanView" :group="group" />
<!-- 加载剧本列表弹窗 -->
<add-quest ref="addQuest" @selectQuest="selectQuest" />
<line-board ref="lineBoard" />
<line-board ref="lineBoard" />
<!-- <run-plan-edit v-if="isScheduling && isDepot" ref="runPlanEdit" /> -->
</div>
</template>
@ -66,7 +66,7 @@ export default {
AddQuest,
// RunPlanEdit,
SelectStation,
LineBoard
LineBoard
},
props: {
offset: {
@ -99,9 +99,9 @@ export default {
notScript() {
return this.$route.params.mode !== 'script';
},
isCtc() {
return !!this.$route.query.ctc;
},
isCtc() {
return !!this.$route.query.ctc;
},
isScript() {
return this.$route.params.mode === 'script';
},
@ -196,6 +196,9 @@ export default {
this.changeOperateMode();
}
});
EventBus.$on('showLineBoard', () => {
this.showLineBoard();
});
},
methods: {
loadRunData() {
@ -213,27 +216,43 @@ export default {
}
});
},
showLineBoard() {
this.$refs.lineBoard.doShow();
},
goCtc() {
const routeData = this.$router.resolve({
path:'/displayNew/demon',
showLineBoard() {
this.$refs.lineBoard.doShow();
},
goCtc() {
const routeData = this.$router.resolve({
path:'/displayNew/demon',
query:{
lineCode:this.$route.query.lineCode,
group: this.$route.query.group,
prdType: this.$route.query.prdType,
mapId:this.$route.query.mapId,
project: this.project,
newApi: this.$route.query.newApi,
ctc: true,
try: this.$route.query.try,
token:getToken(),
noPreLogout: true
}
});
window.open(routeData.href, '_blank');
},
goRpManage() {
const routeData = this.$router.resolve({
path:'/bigTrainRunplanManage',
query:{
lineCode:this.$route.query.lineCode,
group: this.$route.query.group,
prdType: this.$route.query.prdType,
mapId:this.$route.query.mapId,
project: this.project,
newApi: this.$route.query.newApi,
ctc: true,
try: this.$route.query.try,
token:getToken(),
prdType: this.$route.query.prdType,
lineCode:this.$route.query.lineCode,
// stationCode:this.$store.state.training.roleDeviceCode,
// token:getToken(),
noPreLogout: true
}
});
window.open(routeData.href, '_blank');
},
},
changeOperateMode() {
this.faultMode = !this.faultMode;
let mode = OperateMode.NORMAL;

View File

@ -130,7 +130,6 @@ export default {
var device = null;
const point = { x: em.clientX, y: em.clientY };
const lineCode = this.$store.getters['map/lineCode'];
if (em.subType === 'TrainWindow') {
if (lineCode != '06') {
device = { _type: deviceType.TrainWindow, code: em.deviceCode, _event: MouseEvent.Right };
@ -182,7 +181,6 @@ export default {
} else if (em.deviceCode && !this.isScreen) {
device = this.getDeviceByEm(em);
}
if (device) {
device = this.getSelectedByLineCode(device);
this.selected = { ...device, _event: MouseEvent.Right};
@ -197,10 +195,14 @@ export default {
menu = getDeviceMenuByDeviceType(device._type);
this.$store.dispatch('menuOperation/setPopMenu', { position: point, menu: menu });
}
}
} else if (this.$route.query.ctc) {
this.$store.dispatch('menuOperation/setSelected', {device: this.selected, subType: em.subType});
menu = getDeviceMenuByDeviceType(device._type);
this.$store.dispatch('menuOperation/setPopMenu', { position: point, menu: menu });
}
} else {
menu = getDeviceMenuByDeviceType('Cancel');
this.$store.dispatch('menuOperation/setPopMenu', { position: point, menu: menu });
this.$store.dispatch('menuOperation/setPopMenu', { position: point, menu: menu });
}
this.$store.dispatch('training/emitTipFresh');
},

View File

@ -120,6 +120,9 @@ export default {
const header = { group: this.$route.query.group || '', 'X-Token': getToken() };
creatSubscribe(`${displayTopic}\/${this.$route.query.group}`, header);
creatSubscribe(getTopic('STATE', this.$route.query.group), header);
if (this.$route.query.ctc == 'true') {
creatSubscribe(getTopic('CTC', this.$route.query.group), header);
}
await this.$store.dispatch('training/setHasSubscribed');
},
async subscribeNew() {
@ -137,7 +140,10 @@ export default {
},
clearSubscribe() {
clearSubscribe(`${displayTopic}\/${this.groupModel}`);
clearSubscribe(getTopic('STATE', this.$route.query.group));
clearSubscribe(getTopic('STATE', this.groupModel));
if (this.$route.query.ctc == 'true') {
clearSubscribe(getTopic('CTC', this.groupModel));
}
},
setCenter(code) {
this.$refs.mapCommon && this.$refs.mapCommon.setCenter(code);

View File

@ -49,6 +49,10 @@
title: 'code',
prop: 'code'
},
{
title: '名称',
prop: 'name'
},
{
title: '关联车站',
prop: 'stationCode',

View File

@ -4,6 +4,9 @@
<el-form-item v-if="isModify" label="编号:" prop="code">
<el-input v-model="addModel.code" style="width: 220px;" disabled />
</el-form-item>
<el-form-item label="名称:" prop="name">
<el-input v-model="addModel.name" style="width: 220px;" />
</el-form-item>
<el-form-item label="关联车站:" prop="stationCode">
<el-select v-model="addModel.stationCode" clearable filterable>
<el-option
@ -145,6 +148,7 @@
directionLabelList: ConstConfig.ConstSelect.directionLabelList,
addModel:{
id: '',
name:'',
stationCode: '',
labelEnum:'',
sectionList: [],
@ -155,6 +159,9 @@
relativeLabelEnum: ''
},
rules: {
'name':[
{ required: true, message: '请输入名称', trigger: 'blur' },
],
'stationCode':[
{ required: true, message: '请选择关联车站', trigger: 'blur' },
{ required: true, message: '请选择关联车站', trigger: 'change' },
@ -260,6 +267,7 @@
this.$refs.form.resetFields();
this.addModel = {
id: '',
name:'',
stationCode: '',
labelEnum:'',
sectionList: [],

View File

@ -47,7 +47,8 @@ export default {
{label: '上饶沙盘', value: 'SR_SANDBOX'},
{label: '江西工贸', value: 'JXGM'},
{label: '扬州工业', value: 'RICHOR_YGY'},
{label: '苏安院', value: 'SAY'}
{label: '苏安院', value: 'SAY'},
{label: '众合-陕铁院', value: 'UNITTEC_STY'}
],
projectMap: {
designxty: 'XTY',
@ -58,7 +59,8 @@ export default {
designsrsandbox: 'SR_SANDBOX',
designjxgm: 'JXGM',
designygy: 'RICHOR_YGY',
designsay: 'SAY'
designsay: 'SAY',
designunittecsty: 'UNITTEC_STY'
},
queryForm: {
labelWidth: '120px',

View File

@ -41,7 +41,7 @@ export default {
},
goRoutePath(data) {
const againEnter = getSessionStorage('againEnter') || null;
if (!againEnter) {
if (!againEnter && !this.$route.query.thirdJump) {
const project = getSessionStorage('project');
const userId = this.$store.state.user.id;
const path = localStore.get('trainingPlatformRoute' + userId + project);