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: '非常站控', text: '非常站控',
lightColor: '#ff0', lightColor: '#ff0',
defaultColor: '#ccc', 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() { create() {
const model = this.model; const model = this.model;
const fillColor = this.getTypeColor(); const fillColor = this.getTypeColor();
this.rectButton = new Rect({ const queryList = window.location.search.substring(1).split('&');
zlevel: this.zlevel, const queryCtc = queryList.find(item => {
z: this.z, return item.includes('ctc');
shape: { });
x: model.position.x, const ctcArcList = ['OCCLUSION', 'RECOVERY', 'CHANGE_DIRECTION', 'ACCIDENT', 'DEPART_ASSIST', 'PICK_ASSIST', 'ASSIST'];
y: model.position.y, if (queryCtc && ctcArcList.includes(model.type)){
width: 14, this.arcShape = new Arc({
height: 14 zlevel: this.zlevel,
}, z: this.z,
style: { shape: {
lineDash: null, cx: this.model.position.x + 7,
stroke: '#69666E', cy: this.model.position.y + 7,
lineWidth:1, r: 7
fill: fillColor },
} style: {
}); stroke: '#69666E',
this.add(this.rectButton); 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({ this.leftLine = new Line({
zlevel: this.zlevel, zlevel: this.zlevel,
z: this.z + 1, z: this.z + 1,
@ -200,9 +223,11 @@ export default class SignalButton extends Group {
recover() { recover() {
this.stopAnimation(); this.stopAnimation();
this.rectButton && this.rectButton.setStyle({ fill:this.getTypeColor() }); this.rectButton && this.rectButton.setStyle({ fill:this.getTypeColor() });
this.arcShape && this.arcShape.setStyle({ fill:this.getTypeColor() });
this.rightLine && this.rightLine.hide(); this.rightLine && this.rightLine.hide();
this.leftLine && this.leftLine.hide(); this.leftLine && this.leftLine.hide();
this.rectButton && this.rectButton.show(); this.rectButton && this.rectButton.show();
this.arcShape && this.arcShape.show();
this.buttonText && this.buttonText.show(); this.buttonText && this.buttonText.show();
this.leftBoard && this.leftBoard.hide(); this.leftBoard && this.leftBoard.hide();
this.rightBoard && this.rightBoard.hide(); this.rightBoard && this.rightBoard.hide();
@ -242,6 +267,7 @@ export default class SignalButton extends Group {
this.rectButton && this.rectButton.hide(); this.rectButton && this.rectButton.hide();
this.leftLine && this.leftLine.hide(); this.leftLine && this.leftLine.hide();
this.rightLine && this.rightLine.hide(); this.rightLine && this.rightLine.hide();
this.arcShape && this.arcShape.hide();
} else { } else {
if (model.hasSelected) { if (model.hasSelected) {
this.startAnimate(); 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 EMouse from './EMouse';
import EMouseDraw from './EMouseDraw'; import EMouseDraw from './EMouseDraw';
import ESingleControl from './ESingleControl'; import ESingleControl from './ESingleControl';
import EThreeLamp from './EThreeLamp';
import EArrow from './EArrow'; import EArrow from './EArrow';
import { arrow } from '../utils/ShapePoints'; import { arrow } from '../utils/ShapePoints';
import Rect from 'zrender/src/graphic/shape/Rect'; import Rect from 'zrender/src/graphic/shape/Rect';
@ -148,7 +149,13 @@ export default class Station extends Group {
createControlMode() { createControlMode() {
const model = this.model; const model = this.model;
if (!this.style.Station.StationControl.disPlayNone) { 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 控制模式 if (model.visible && model.createControlMode) { // model.createControlMode 控制模式
this.createControlModeAU(); this.createControlModeAU();
this.createControlModeCC(); this.createControlModeCC();
@ -168,7 +175,122 @@ export default class Station extends Group {
} }
this.setState(model); 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() { // 西安二 createControlModeAU() { // 西安二
const model = this.model; const model = this.model;
this.stationControlAU = new Text({ this.stationControlAU = new Text({

View File

@ -519,20 +519,104 @@ export const menuOperate = {
} }
}, },
CTC: { CTC: {
// 接预 // 完成接预
receivingNotice: { receivingNotice: {
operation: OperationEvent.CTCCommand.receivingNotice.menu.operation, 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: { departureNotice: {
operation: OperationEvent.CTCCommand.departureNotice.menu.operation, 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: { autoTrigger: {
operation: OperationEvent.CTCCommand.autoTrigger.menu.operation, operation: OperationEvent.CTCCommand.autoTrigger.menu.operation,
cmdType: CMD.CTC.CTC_AUTO_TRIGGER cmdType: CMD.CTC.CTC_AUTO_TRIGGER
},
// 批量修改股道
batchModifyTrackSection:{
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) { if (operate.operateNext) {
this.operation = operate.operateNext; this.operation = operate.operateNext;
} }
console.log(this.operate, '--------------0000operate');
this.dialogShow = true; this.dialogShow = true;
this.checkHasInput = false; this.checkHasInput = false;
this.$nextTick(function () { this.$nextTick(function () {
@ -158,7 +157,6 @@ export default {
this.encryptionPassword = this.passwordCheck; this.encryptionPassword = this.passwordCheck;
} }
}, },
cancel() { cancel() {
const operate = { const operate = {
send: false, 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 () { window.document.oncontextmenu = function () {
return false; return false;
}; };
console.log(this.mapData, '---------------');
if (this.mapData.skinVO) { if (this.mapData && this.mapData.skinVO) {
const parser = parserFactory(ParserType.Graph.value); const parser = parserFactory(ParserType.Graph.value);
this.mapDevice = parser.parser(this.mapData, this.mapData.skinVO.code, this.map.getShowConfig()); 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> <div>
<el-form :model="form" class="demo-form-inline"> <el-form :model="form" class="demo-form-inline">
<el-form-item label="作业任务:"> <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>
<el-form-item label="操作时间:"> <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>
<el-form-item label="操作信息:">
<el-input v-model="form.info" type="textarea" :rows="2" :disabled="true"/>
</el-form-item>
</el-form> </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;"><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 === '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 === '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;" disabled>取消接预</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>
<el-button @click="doClose" style="height: 50px;width: 50px;position: relative;left: 370px;">关闭</el-button> <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> </div>
</el-dialog> </el-dialog>
</template> </template>
@ -34,8 +38,6 @@
<script> <script>
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import CancelMouseState from '@/mixin/CancelMouseState'; import CancelMouseState from '@/mixin/CancelMouseState';
import { getUploadFile } from '@/api/pdf';
import { DrawingType } from '@/scripts/ConstDic';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate'; import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default { export default {
@ -48,10 +50,10 @@ export default {
selected: null, selected: null,
selectedType: '', selectedType: '',
dialogShow: false, dialogShow: false,
menuOperate: menuOperate, menuOperate: menuOperate,
type: '', type: '',
stationCode: '', stationCode: '',
tripNumber: '', tripNumber: '',
loading: false, loading: false,
tableData: [], tableData: [],
deviceTypeList: [ deviceTypeList: [
@ -62,9 +64,9 @@ export default {
], ],
deviceIdList: [], deviceIdList: [],
form: { form: {
work: '', work: '',
time: '', time: '',
info: '' info: ''
} }
}; };
}, },
@ -74,22 +76,11 @@ export default {
]), ]),
show() { show() {
return this.dialogShow && !this.$store.state.menuOperation.break; 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: { methods: {
doShow(row, type, stationCode) { doShow(row, type, stationCode) {
this.type = type; this.type = type;
this.loading = true; this.loading = true;
this.stationCode = stationCode; this.stationCode = stationCode;
this.tripNumber = row.tripNumber; this.tripNumber = row.tripNumber;
@ -103,28 +94,27 @@ export default {
this.dialogShow = false; this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh'); this.$store.dispatch('training/emitTipFresh');
}, },
commit(type) { commit(type) {
this.loading = true; this.loading = true;
//menuOperate.CTC.receivingNotice commitOperate(type, {stationCode: this.stationCode, tripNumber: this.tripNumber}, 3).then(({valid, operate})=>{
this.loading = false;
commitOperate(type, {stationCode: this.stationCode, tripNumber: this.tripNumber}, 3).then(({valid, operate})=>{ if (valid) {
this.loading = false; this.doClose();
if (valid) { }
this.doClose(); }).catch((error) => {
} this.loading = false;
}).catch((error) => { this.doClose();
this.loading = false; console.error(error);
this.doClose(); // this.$refs.noticeInfo.doShow();
console.error(error); this.$message.error('操作失败!');
this.$refs.noticeInfo.doShow(); });
}); }
}
} }
}; };
</script> </script>
<style scoped> <style scoped>
.chengdou-03__systerm .el-dialog .base-label { .chengdou-03__systerm .el-dialog .base-label {
background: rgba(0, 0, 0, x); /*background: rgba(0, 0, 0, x);*/
position: relative; position: relative;
left: -5px; left: -5px;
top: -18px; top: -18px;

View File

@ -1,69 +1,69 @@
<template> <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-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-row>
<el-col :span="2">列车车次</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-col :span="21"><span style="font-size: 18px;color: #f00;">{{ selected.tripNumber }}</span></el-col>
</el-row> </el-row>
<el-row style="margin-top: 10px;"> <el-row style="margin-top: 10px;">
<el-col :span="2">进路描述</el-col> <el-col :span="2">进路描述</el-col>
<el-col :span="21"> <el-col :span="21">
<div style="width: 100%;height: 50px;background: #DFE3E6;padding: 10px;"> <div style="width: 100%;height: 50px;background: #DFE3E6;padding: 10px;">
<span>{{ `${type === 'dep' ? '发车/通过': '接车/通过'} 股道:${selected.trackName};进路按钮:${getRouteNames()}` }}</span> <span>{{ `${type === 'dep' ? '发车/通过': '接车/通过'} 股道:${selected.trackName};进路按钮:${getRouteNames()}` }}</span>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
<el-row style="margin-top: 10px;"> <el-row style="margin-top: 10px;">
<el-col :span="2">进路显示</el-col> <el-col :span="2">进路显示</el-col>
<el-col :span="21"> <el-col :span="21">
<map-visual ref="map" :map-data="mapData" :width="960" :height="600" /> <map-visual ref="map" :map-data="mapData" :width="960" :height="600" />
</el-col> </el-col>
</el-row> </el-row>
<!--<el-row :gutter="24">--> <!--<el-row :gutter="24">-->
<!--<el-col :span="6">--> <!--<el-col :span="6">-->
<!--<el-row class="header">--> <!--<el-row class="header">-->
<!--<el-col :span="11"><span>集中站</span></el-col>--> <!--<el-col :span="11"><span>集中站</span></el-col>-->
<!--<el-col :span="11" :offset="2"><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-row>--> <!--</el-row>-->
<el-row style="margin-top: 10px;margin-bottom: 10px;"> <!--<el-row>-->
<el-col :span="21" :offset="2"> <!--<el-col :span="11">-->
<el-radio disabled v-model="radio" label="禁用">分段办理</el-radio> <!--<el-input v-model="stationName" size="small" disabled />-->
</el-col> <!--</el-col>-->
</el-row> <!--<el-col :span="11" :offset="2">-->
<div style="display: flex;justify-content: space-between;margin-bottom: 10px;"> <!--<el-input v-model="signalName" size="small" disabled />-->
<el-button size="mini" v-if="type === 'rec'" :type="selected.receivingRouteAutoTrigger?'warning':''" :disabled="!!route.lock || !selected.receivingNotice" @click="commit">办理接车</el-button> <!--</el-col>-->
<el-button size="mini" v-if="type === 'dep'" :type="selected.departureRouteAutoTrigger?'warning':''" :disabled="!!route.lock || !selected.departureNotice" @click="commit">办理发车</el-button> <!--</el-row>-->
<el-button size="mini" disabled>办理通过</el-button> <!--<el-row style="margin-top: 10px; line-height: 30px;">-->
<el-button size="mini" disabled>进路单锁</el-button> <!--<el-col :span="11"><span>进路列表</span></el-col>-->
<el-button size="mini" :disabled="cancelRouteDisabled" @click="commit">取消进路</el-button> <!--</el-row>-->
<el-button size="mini" @click="doClose">关闭</el-button> <!--<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">-->
</div> <!--<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" /> <notice-info ref="noticeInfo" pop-class="ningbo-01__systerm" />
<confirm-tip ref="confirmTip" @close="doClose" /> <confirm-tip ref="confirmTip" @close="doClose" />
</el-dialog> </el-dialog>
@ -89,7 +89,7 @@ export default {
}, },
data() { data() {
return { return {
radio:'', radio:'',
beforeSectionList: [], beforeSectionList: [],
beforeSwitchList: [], beforeSwitchList: [],
dialogShow: false, dialogShow: false,
@ -98,11 +98,11 @@ export default {
operation: '', operation: '',
display: true, display: true,
mapData: null, mapData: null,
route: '', route: '',
tableStyle: { tableStyle: {
'border-bottom': 'none' 'border-bottom': 'none'
}, },
type: '' type: ''
}; };
}, },
computed: { computed: {
@ -124,20 +124,21 @@ export default {
title() { title() {
return '进路办理'; return '进路办理';
}, },
cancelRouteDisabled() { cancelRouteDisabled() {
return !!!this.route.lock || (this.type === 'rec' && !this.selected.receivingNotice) || (this.type === 'dep' && !this.selected.departureNotice) return !this.route.lock || (this.type === 'rec' && !this.selected.receivingNotice) || (this.type === 'dep' && !this.selected.departureNotice);
} }
}, },
watch: {}, watch: {
created() { '$store.state.map.mapDataLoadedCount': function (val) { //
this.mapData = JSON.parse(JSON.stringify(this.$store.state.map.map)); this.mapData = JSON.parse(JSON.stringify(this.$store.state.map.map));
}
}, },
methods: { methods: {
getRouteNames() { getRouteNames() {
const receivingRoute = this.$store.state.map.routeData[this.selected.receivingRouteCode]; const receivingRoute = this.$store.state.map.routeData[this.selected.receivingRouteCode];
const departureRoute = this.$store.state.map.routeData[this.selected.departureRouteCode]; const departureRoute = this.$store.state.map.routeData[this.selected.departureRouteCode];
return (receivingRoute?receivingRoute.name: '') + ',' + (departureRoute?departureRoute.name: ''); return (receivingRoute ? receivingRoute.name : '') + ',' + (departureRoute ? departureRoute.name : '');
}, },
doShow(selected, type) { doShow(selected, type) {
// this.$root.$emit('dialogOpen', selected); // this.$root.$emit('dialogOpen', selected);
this.selected = selected; this.selected = selected;
@ -154,12 +155,12 @@ export default {
if (this.mapData) { if (this.mapData) {
this.$refs.map.loadData(this.mapData); this.$refs.map.loadData(this.mapData);
setTimeout(() => { setTimeout(() => {
if (this.type === 'rec'){ if (this.type === 'rec') {
this.clickEvent(this.selected.receivingRouteCode); this.clickEvent(this.selected.receivingRouteCode);
} else if (this.type === 'dep'){ } else if (this.type === 'dep') {
this.clickEvent(this.selected.departureRouteCode); this.clickEvent(this.selected.departureRouteCode);
} }
}, 100); }, 100);
} }
}, },
@ -210,7 +211,7 @@ export default {
this.$refs.map.setCenterWithOffset(code, 50, signal.position.y); this.$refs.map.setCenterWithOffset(code, 50, signal.position.y);
if (route.routeSectionList && route.routeSectionList.length) { if (route.routeSectionList && route.routeSectionList.length) {
route.routeSectionList.forEach(code => { route.routeSectionList.forEach(code => {
const section = deepAssign({}, this.$refs.map.getDeviceByCode(code)); const section = deepAssign({}, this.$refs.map.getDeviceByCode(code));
if (section.logicSectionCodeList && section.logicSectionCodeList.length) { if (section.logicSectionCodeList && section.logicSectionCodeList.length) {
section.logicSectionCodeList.forEach(sectionCode => { section.logicSectionCodeList.forEach(sectionCode => {
@ -227,10 +228,10 @@ export default {
} }
if (route.routeSwitchList && route.routeSwitchList.length) { 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 swch = deepAssign({}, this.$refs.map.getDeviceByCode(el.switchCode));
const sectionA = this.$refs.map.getDeviceByCode(swch.sectionACode); 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); const sectionC = this.$refs.map.getDeviceByCode(swch.sectionCCode);
// normalPosition: el.normal, reversePosition: !el.normal // normalPosition: el.normal, reversePosition: !el.normal
containSwitchList.push({code: el.switchCode, routeLock: true, pos:el.pos }); containSwitchList.push({code: el.switchCode, routeLock: true, pos:el.pos });
@ -267,7 +268,7 @@ export default {
commit() { commit() {
if (this.route) { if (this.route) {
this.loading = true; 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 }; const param = this.route.lock ? { signalCode: this.route.startSignalCode } : { routeCode:this.route.code };
commitOperate(type, param, 3).then(({valid, operate})=>{ commitOperate(type, param, 3).then(({valid, operate})=>{
this.loading = false; this.loading = false;
@ -275,7 +276,6 @@ export default {
this.doClose(); this.doClose();
} }
}).catch((e) => { }).catch((e) => {
console.error(e);
this.loading = false; this.loading = false;
this.doClose(); this.doClose();
this.$refs.noticeInfo.doShow(); this.$refs.noticeInfo.doShow();
@ -294,7 +294,7 @@ export default {
this.doClose(); this.doClose();
}); });
} }
} //D3D8DC } // D3D8DC
}; };
</script> </script>
<style scoped> <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() { handleTripNumber() {
this.judgeTripNumber();
},
judgeTripNumber() {
const figuresOfServiceMinNumber = 2; const figuresOfServiceMinNumber = 2;
const figuresOfServiceMaxNumber = 6; const figuresOfServiceMaxNumber = 6;
// this.$store.state.map.mapConfig.figuresOfServiceNumber; // this.$store.state.map.mapConfig.figuresOfServiceNumber;
const tripNumber = this.tripNumber; const tripNumber = this.tripNumber;
const judge = /^[a-zA-Z0-9]*[\d]$/.test(this.tripNumber); const judge = /^[a-zA-Z0-9]*[\d]$/.test(this.tripNumber);
let result = false;
if (judge) { if (judge) {
if (tripNumber.toString().length > figuresOfServiceMaxNumber || tripNumber.toString().length < figuresOfServiceMinNumber) { if (tripNumber.toString().length > figuresOfServiceMaxNumber || tripNumber.toString().length < figuresOfServiceMinNumber) {
this.messageTip1 = '车次号长度' + figuresOfServiceMinNumber + '-' + figuresOfServiceMaxNumber + '位'; this.messageTip1 = '车次号长度' + figuresOfServiceMinNumber + '-' + figuresOfServiceMaxNumber + '位';
result = false;
} else { } else {
// this.tripNumber = tripNumber;
this.messageTip1 = ''; this.messageTip1 = '';
result = true;
} }
} else { } else {
this.tripNumber = ''; this.tripNumber = '';
this.messageTip1 = '请输入车次号(最后一位数字)'; this.messageTip1 = '请输入车次号(最后一位数字)';
} }
return result;
}, },
commit() { commit() {
const figuresOfServiceMinNumber = 2; const result = this.judgeTripNumber();
const figuresOfServiceMaxNumber = 6;
let result = false;
const tripNumber = this.tripNumber;
if (tripNumber.toString().length > figuresOfServiceMaxNumber || tripNumber.toString().length < figuresOfServiceMinNumber) {
result = false;
} else {
result = true;
}
if (this.tripNumber && result) { if (this.tripNumber && result) {
const params = { const params = {
tripNumber: this.tripNumber tripNumber: this.tripNumber
@ -114,15 +112,7 @@ export default {
this.doClose(); this.doClose();
this.$refs.noticeInfo.doShow(); this.$refs.noticeInfo.doShow();
}); });
} else {
if (this.tripNumber) {
this.messageTip1 = '该车次号长度' + figuresOfServiceMinNumber + '-' + figuresOfServiceMaxNumber + '位';
} else {
this.messageTip1 = '请输入车次号(最后一位数字)';
}
} }
}, },
cancel() { cancel() {
const operate = { const operate = {

View File

@ -1,50 +1,44 @@
<template> <template>
<div class="menus" :style="{width: width + 'px'}"> <div class="menus" :style="{width: width + 'px'}">
<menu-bar v-if="isCtc" ref="menuBar" :selected="selected" /> <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>
<div v-if="isCtc" style="display: flex;position: absolute; top: 6px;z-index: 13;left: 50px;"> <menu-bar v-if="isCtc" ref="menuBar" :date-strin="dateString1" :selected="selected" />
<img :src="ctcBarIcon1" class="img-box" /> <div v-if="isCtc" style="position: absolute; top: 64px;z-index: 10;background: #F0F0F0;padding: 2px;height: 65px;width: 100%;">
<img :src="ctcBarIcon2" class="img-box" /> <div style="display: flex;">
<img :src="ctcBarIcon3" class="img-box" /> <img :src="ctcBarIcon1" class="img-box">
<img :src="ctcBarIcon4" class="img-box" /> <img :src="ctcBarIcon2" class="img-box">
<img :src="ctcBarIcon5" class="img-box" /> <img :src="ctcBarIcon3" class="img-box">
<img :src="ctcBarIcon6" class="img-box" /> <img :src="ctcBarIcon4" class="img-box">
<img :src="ctcBarIcon7" class="img-box" /> <img :src="ctcBarIcon5" class="img-box">
<img :src="ctcBarIcon8" class="img-box" /> <img :src="ctcBarIcon6" class="img-box">
<img :src="ctcBarIcon9" class="img-box" /> <img :src="ctcBarIcon7" class="img-box">
<img :src="ctcBarIcon10" class="img-box" /> <img :src="ctcBarIcon8" class="img-box">
<img :src="ctcBarIcon11" class="img-box" /> <img :src="ctcBarIcon9" class="img-box">
<img :src="ctcBarIcon12" class="img-box" /> <img :src="ctcBarIcon10" class="img-box">
<img :src="ctcBarIcon13" class="img-box" /> <img :src="ctcBarIcon11" class="img-box">
<img :src="ctcBarIcon14" class="img-box" /> <img :src="ctcBarIcon12" class="img-box">
<img :src="ctcBarIcon15" class="img-box" /> <img :src="ctcBarIcon13" class="img-box">
<img :src="ctcBarIcon16" class="img-box" /> <img :src="ctcBarIcon14" class="img-box">
<img :src="ctcBarIcon17" class="img-box" /> <img :src="ctcBarIcon15" class="img-box">
<img :src="ctcBarIcon18" class="img-box" /> <img :src="ctcBarIcon16" class="img-box">
</div> <img :src="ctcBarIcon17" class="img-box">
<!--<div v-if="$store.state.training.prdType == '01'" class="alarm-window">--> <img :src="ctcBarIcon18" class="img-box" @click="handleRunplan">
<!--<div v-for="elem in alarmMessages" :key="elem.id" style="font-size: 14px;">--> </div>
<!--{{ elem.message }}--> <div style="display: flex;padding: 2px;border-top: 2px solid #D1D1D1;margin-top: 3px">
<!--</div>--> <div class="img-box" style="width: 100px;height: 25px;line-height: 21px;text-align: center;">调度命令</div>
<!--</div>--> <div style="width: 200px;height: 25px;border: 2px #D1D1D1 inset;line-height: 21px;text-align: center;margin-left: 5px;" />
<!--<div class="device-status-window">--> <div class="img-box" style="width: 100px;height: 25px;line-height: 21px;text-align: center;margin-left: 100px;">阶段计划</div>
<!--<div class="device-status-button" :style="{background: mode === 'liansuo' ? '#0f0': '#f00'}" @click="selectedMode('liansuo')">联锁I</div>--> <div class="img-box" style="width: 100px;height: 25px;line-height: 21px;text-align: center;margin-left: 5px;">阶段记事</div>
<!--<div class="device-status-button" :style="{background: mode === 'ctc' ? '#0f0': '#f00'}" @click="selectedMode('ctc')">CTC</div>--> <div style="width: 200px;height: 25px;border: 2px #D1D1D1 inset;line-height: 21px;text-align: center;margin-left: 5px;">{{ dateString1 + ' ' + time }}</div>
<!--<div class="device-status-button" style="background: #f00;">联锁II</div>--> <div style="width: 200px;height: 25px;border: 2px #D1D1D1 inset;line-height: 21px;text-align: center;margin-left: 5px;">同步站机通信中断</div>
<!--<div class="device-status-button" style="background: #0f0;">操作A</div>--> <div style="width: 200px;height: 25px;border: 2px #D1D1D1 inset;line-height: 21px;text-align: center;margin-left: 5px;">与中心通信正常</div>
<!--<div class="device-status-button" style="background: #ff0;">操作B</div>--> </div>
<!--<div class="device-status-button" style="background: #f00;">维修机</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 v-if="$store.state.training.prdType == '01'" class="warning-window">--> <div style="width: 60%;height: 30px;line-height: 30px;text-align: center;">提示信息窗</div>
<!--<div v-for="elem in warningMessages" :key="elem.id" style="font-size: 14px;color: #ff0">--> <div style="width: 40%;height: 30px;line-height: 30px;text-align: center;border-left: 2px #ccc solid;">{{ '操控A:主机' + ' ' + dateString + ' ' + time }}</div>
<!--{{ elem.message }}--> </div>
<!--</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>
<menu-button v-if="!isCtc" ref="menuButton" :selected="selected" /> <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-station-stand ref="menuStationStand" :selected="selected" />
<menu-switch ref="menuSwitch" :selected="selected" /> <menu-switch ref="menuSwitch" :selected="selected" />
<menu-signal ref="menuSignal" :selected="selected" /> <menu-signal ref="menuSignal" :selected="selected" />
@ -54,6 +48,9 @@
<passive-alarm ref="passiveAlarm" /> <passive-alarm ref="passiveAlarm" />
<passive-contorl ref="passiveControl" pop-class="chengdou-03__systerm" /> <passive-contorl ref="passiveControl" pop-class="chengdou-03__systerm" />
<passive-Timeout ref="passiveTimeout" /> <passive-Timeout ref="passiveTimeout" />
<runplan-pane v-if="isCtc" ref="runplanPane" />
<bottom-table ref="bottomTable" />
<menu-panel v-if="isCtc" ref="menuPanel" />
</div> </div>
</template> </template>
@ -68,11 +65,14 @@ import MenuTrain from './menuTrain';
import MenuStation from './menuStation'; import MenuStation from './menuStation';
import MenuBar from './menuBar'; import MenuBar from './menuBar';
import MenuButtonCtc from './menuButtonCtc'; import MenuButtonCtc from './menuButtonCtc';
import RunplanPane from './runplanPane';
import PassiveAlarm from './passiveDialog/alarm'; import PassiveAlarm from './passiveDialog/alarm';
import PassiveContorl from '@/jmapNew/theme/components/menus/passiveDialog/control'; import PassiveContorl from '@/jmapNew/theme/components/menus/passiveDialog/control';
import PassiveTimeout from './passiveDialog/timeout'; import PassiveTimeout from './passiveDialog/timeout';
import { timeFormat } from '@/utils/date'; import { timeFormat } from '@/utils/date';
import { prefixIntrger } 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 CtcBarIcon1 from '@/assets/ctc_icon/pic1.png';
import CtcBarIcon2 from '@/assets/ctc_icon/pic2.png'; import CtcBarIcon2 from '@/assets/ctc_icon/pic2.png';
import CtcBarIcon3 from '@/assets/ctc_icon/pic3.png'; import CtcBarIcon3 from '@/assets/ctc_icon/pic3.png';
@ -106,7 +106,10 @@ export default {
PassiveAlarm, PassiveAlarm,
PassiveContorl, PassiveContorl,
PassiveTimeout, PassiveTimeout,
MenuButtonCtc MenuButtonCtc,
RunplanPane,
BottomTable,
MenuPanel
}, },
props: { props: {
selected: { selected: {
@ -116,48 +119,49 @@ export default {
} }
} }
}, },
data() { data() {
return { return {
alarmMessages: [ alarmMessages: [
{ id: 1, message: '这是告警信息一' }, { id: 1, message: '这是告警信息一' },
{ id: 2, message: '这是告警信息二' }, { id: 2, message: '这是告警信息二' },
{ id: 3, message: '这是告警信息三' }, { id: 3, message: '这是告警信息三' },
{ id: 4, message: '这是告警信息四' }, { id: 4, message: '这是告警信息四' },
{ id: 5, message: '这是告警信息五' }, { id: 5, message: '这是告警信息五' },
{ id: 6, message: '这是告警信息六' }, { id: 6, message: '这是告警信息六' },
{ id: 7, message: '这是告警信息七' }, { id: 7, message: '这是告警信息七' }
], ],
warningMessages: [ warningMessages: [
{ id: 1, message: '这是预警信息一' }, { id: 1, message: '这是预警信息一' },
{ id: 2, message: '这是预警信息二' }, { id: 2, message: '这是预警信息二' },
{ id: 3, message: '这是预警信息三' }, { id: 3, message: '这是预警信息三' },
{ id: 4, message: '这是预警信息四' }, { id: 4, message: '这是预警信息四' },
{ id: 5, message: '这是预警信息五' }, { id: 5, message: '这是预警信息五' },
{ id: 6, message: '这是预警信息六' }, { id: 6, message: '这是预警信息六' },
{ id: 7, message: '这是预警信息七' }, { id: 7, message: '这是预警信息七' }
], ],
time: '00:00:00', time: '00:00:00',
dateString: '', dateString: '',
ctcBarIcon1: CtcBarIcon1, dateString1: '',
ctcBarIcon2: CtcBarIcon2, ctcBarIcon1: CtcBarIcon1,
ctcBarIcon3: CtcBarIcon3, ctcBarIcon2: CtcBarIcon2,
ctcBarIcon4: CtcBarIcon4, ctcBarIcon3: CtcBarIcon3,
ctcBarIcon5: CtcBarIcon5, ctcBarIcon4: CtcBarIcon4,
ctcBarIcon6: CtcBarIcon6, ctcBarIcon5: CtcBarIcon5,
ctcBarIcon7: CtcBarIcon7, ctcBarIcon6: CtcBarIcon6,
ctcBarIcon8: CtcBarIcon8, ctcBarIcon7: CtcBarIcon7,
ctcBarIcon9: CtcBarIcon9, ctcBarIcon8: CtcBarIcon8,
ctcBarIcon10: CtcBarIcon10, ctcBarIcon9: CtcBarIcon9,
ctcBarIcon11: CtcBarIcon11, ctcBarIcon10: CtcBarIcon10,
ctcBarIcon12: CtcBarIcon12, ctcBarIcon11: CtcBarIcon11,
ctcBarIcon13: CtcBarIcon13, ctcBarIcon12: CtcBarIcon12,
ctcBarIcon14: CtcBarIcon14, ctcBarIcon13: CtcBarIcon13,
ctcBarIcon15: CtcBarIcon15, ctcBarIcon14: CtcBarIcon14,
ctcBarIcon16: CtcBarIcon16, ctcBarIcon15: CtcBarIcon15,
ctcBarIcon17: CtcBarIcon17, ctcBarIcon16: CtcBarIcon16,
ctcBarIcon18: CtcBarIcon18, ctcBarIcon17: CtcBarIcon17,
} ctcBarIcon18: CtcBarIcon18
}, };
},
computed: { computed: {
...mapGetters('config', [ ...mapGetters('config', [
'width' 'width'
@ -165,19 +169,19 @@ export default {
isShowBar() { isShowBar() {
return this.$store.state.training.prdType && this.$store.state.training.prdType !== '07'; return this.$store.state.training.prdType && this.$store.state.training.prdType !== '07';
}, },
isCtc() { isCtc() {
return this.$route.query.ctc return this.$route.query.ctc;
} }
}, },
watch: { watch: {
isShowBar(val) { isShowBar(val) {
val && this.$store.dispatch('config/updateMenuBar'); val && this.$store.dispatch('config/updateMenuBar');
}, },
'$store.state.socket.simulationTimeSync': function (time) { // 仿 '$store.state.socket.simulationTimeSync': function (time) { // 仿
this.$store.dispatch('training/setInitTime', +new Date(`${new Date().toLocaleDateString()} ${timeFormat(time)}`)); this.$store.dispatch('training/setInitTime', +new Date(`${new Date().toLocaleDateString()} ${timeFormat(time)}`));
const date = new Date(+new Date(`${new Date().toLocaleDateString()} ${timeFormat(time)}`)); const date = new Date(+new Date(`${new Date().toLocaleDateString()} ${timeFormat(time)}`));
this.initDate(date); this.initDate(date);
} }
}, },
mounted() { mounted() {
this.$nextTick(() => { this.$nextTick(() => {
@ -199,17 +203,21 @@ export default {
beforeDestroy() { beforeDestroy() {
window.onclick = function (e) {}; window.onclick = function (e) {};
}, },
methods: { methods: {
initDate(date) { initDate(date) {
this.time = `${prefixIntrger(date.getHours(), 2)}:${prefixIntrger(date.getMinutes(), 2)}:${prefixIntrger(date.getSeconds(), 2)}`; this.time = `${prefixIntrger(date.getHours(), 2)}:${prefixIntrger(date.getMinutes(), 2)}:${prefixIntrger(date.getSeconds(), 2)}`;
const years = date.getFullYear() + ''; const years = date.getFullYear() + '';
let months = date.getMonth() + 1 + ''; let months = date.getMonth() + 1 + '';
let dates = date.getDate() + ''; let dates = date.getDate() + '';
if (months.length < 2) { months = '0' + months; } if (months.length < 2) { months = '0' + months; }
if (dates.length < 2) { dates = '0' + dates; } if (dates.length < 2) { dates = '0' + dates; }
this.dateString = years + months + dates; this.dateString = years + months + dates;
} this.dateString1 = years + '年' + months + '月' + dates + '日';
} },
handleRunplan() {
this.$refs.runplanPane.doShow();
}
}
}; };
</script> </script>
@ -468,89 +476,273 @@ export default {
font-weight: normal !important; font-weight: normal !important;
color: #000 !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 { .fuzhou-01__systerm .el-dialog .el-dialog__header {
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;
padding: 5px; padding: 5px;
height: 26px;
} }
.device-status-window {
width: 160px; .fuzhou-01__systerm .el-dialog .el-dialog__footer {
height: 35px; background: #F0F0F0;
position: fixed; opacity: 1;
top: 50px;
right: 10px;
z-index: 10;
display: flex;
border: 2px #FBFCFB solid;
align-items: center;
justify-content: center;
} }
.device-status-button {
border-top: 2px #808080 solid; .fuzhou-01__systerm .el-dialog .el-dialog__body {
border-left: 2px #808080 solid; padding-top: 10px;
border-right: 2px #FDFBF9 solid; padding-bottom: 10px;
border-bottom: 2px #FDFBF9 solid; padding-left: 5px;
width: 79px; padding-right: 5px;
height: 30px; margin: 0px 5px 5px;
text-align: center; 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; line-height: 30px;
cursor: pointer;
} }
.warning-window {
width: 400px; .fuzhou-01__systerm .el-dialog .button-group {
height: 100px; margin-top: 10px;
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;
} }
.img-box{ .img-box{
width: 28px; width: 28px;
height: 28px; height: 28px;
border: 3px #ccc inset; border: 2px #ccc outset;
margin-top: 0;
background: #fff; background: #fff;
cursor: pointer; cursor: pointer;
} }
.img-box:active{ .img-box:active{
border: 3px #ccc outset; border: 2px #ccc inset;
} }
.img-box:hover{ .img-box:hover{
border: 3px #ccc outset; border: 2px #ccc inset;
} }
</style> </style>

View File

@ -1,26 +1,6 @@
<template> <template>
<div id="menuBarChengdu3"> <div id="menuBarChengdu3">
<menu-bar ref="menuBar" :menu-normal="menuNormal" style="width:100%" /> <menu-bar ref="menuBar" :menu-normal="menuNormal" style="width:100%;top: 30px;" />
<!--<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>-->
<station-control-convert ref="stationControlConvert" /> <station-control-convert ref="stationControlConvert" />
<password-box ref="passwordBox" @setLoginResult="getLoginResult" /> <password-box ref="passwordBox" @setLoginResult="getLoginResult" />
<view-name ref="viewName" /> <view-name ref="viewName" />
@ -45,24 +25,7 @@ import ViewName from './menuDialog/viewName';
import ManageUser from './menuDialog/manageUser'; import ManageUser from './menuDialog/manageUser';
import HelpAbout from './menuDialog/helpAbout'; import HelpAbout from './menuDialog/helpAbout';
import SetLimitSpeed from './menuDialog/setLimitSpeed'; import SetLimitSpeed from './menuDialog/setLimitSpeed';
import CtcBarIcon1 from '@/assets/ctc_icon/pic1.png'; import { EventBus } from '@/scripts/event-bus';
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';
export default { export default {
name: 'MenuBarChengdu03', name: 'MenuBarChengdu03',
@ -78,31 +41,20 @@ export default {
HelpAbout, HelpAbout,
SetLimitSpeed SetLimitSpeed
}, },
props: {
dateString: {
type: String,
default: () => {
return '';
}
}
},
data() { data() {
return { 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: { menuNormal: {
Local: [ Local: [
{ {
title: '系统', title: '登录',
// operate: OperationEvent.Command.mBar.system,
operate: '', operate: '',
children: [ children: [
{ {
@ -113,20 +65,6 @@ export default {
title: '注销', title: '注销',
click: this.undeveloped click: this.undeveloped
}, },
{
type: 'separator'
},
{
title: '连接主用中心',
click: this.undeveloped
},
{
title: '连接备用中心',
click: this.undeveloped
},
{
type: 'separator'
},
{ {
title: '退出', title: '退出',
click: this.undeveloped click: this.undeveloped
@ -134,125 +72,45 @@ export default {
] ]
}, },
{ {
title: '临时限速', 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,
operate: '', operate: '',
children: [ children: [
{ {
title: '运行图', title: '工具栏',
click: this.undeveloped
},
{
title: '报告分析',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '视图',
click: this.undeveloped,
operate: '', operate: '',
children: [{ children: [
title: '报警', {
click: this.undeveloped title: '标准按钮',
}, click: this.undeveloped
{ },
title: '列车运行信息', {
click: this.undeveloped title: '签收栏',
}, click: this.undeveloped
{ },
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: '显示信号员注意事项',
click: this.undeveloped
}
]
}, },
{ {
title: '终端站发车列表', title: '站场图',
click: this.undeveloped click: this.undeveloped
}, },
{ {
title: '详细设备状态', 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: '恢复',
click: this.undeveloped click: this.undeveloped
} }
] ]
@ -264,110 +122,92 @@ export default {
// ] // ]
// }, // },
{ {
title: '显示', title: '工具',
// operate: OperationEvent.Command.mBar.view, // operate: OperationEvent.Command.mBar.view,
operate: '', operate: '',
hide: true, hide: true,
children: [ children: [
{ {
title: '设置列车识别号显示', 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: '当天运行车计划',
click: this.undeveloped 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 click: this.undeveloped
} }
] ]
}, },
{ {
title: '计划车操作', title: '调试',
operate: '', operate: '',
children: [ children: []
{
title: '添加计划车',
click: this.undeveloped
},
{
title: '平移计划车',
click: this.undeveloped
},
{
title: '删除计划车',
click: this.undeveloped
}
]
}, },
{ {
title: '批处理命令', title: '窗口',
operate: '', operate: '',
children: [ 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
}
]
}, },
{ {
title: '帮助', title: '帮助',
operate: '', operate: '',
children: [ children: []
{
title: '关于ITS GPC 工作站',
click: this.about,
operate: OperationEvent.Command.help.about
}
]
} }
], ],
Center: [ Center: [
@ -671,7 +511,6 @@ export default {
mapLocation(code) { mapLocation(code) {
if (code) { if (code) {
this.$store.dispatch('training/updateOffsetStationCode', { offsetStationCode: code }); this.$store.dispatch('training/updateOffsetStationCode', { offsetStationCode: code });
} }
}, },
// //
@ -720,6 +559,9 @@ export default {
} }
}); });
}, },
bottomTableShowOrHidden() {
EventBus.$emit('bottomTableShowOrHidden');
},
undeveloped() { undeveloped() {
this.$refs.menuBar.doClose(); this.$refs.menuBar.doClose();
this.$alert('实现中......', '提示', { 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 { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import { DeviceMenu, OperateMode } from '@/scripts/ConstDic'; import { DeviceMenu, OperateMode } from '@/scripts/ConstDic';
import { menuOperate, commitOperate } from '@/jmapNew/theme/components/utils/menuOperate'; import { menuOperate, commitOperate } from '@/jmapNew/theme/components/utils/menuOperate';
// import LoadSpareTrain from '@/jmapNew/theme/components/menus/dialog/loadSpareTrain';
import AddSpareTrain from './dialog/addSpareTrain'; import AddSpareTrain from './dialog/addSpareTrain';
import DrawSelect from './dialog/drawSelect'; import DrawSelect from './dialog/drawSelect';
@ -122,7 +121,8 @@ export default {
}, },
watch: { watch: {
'$store.state.menuOperation.menuCount': function (val) { '$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); this.doShow(this.$store.state.menuOperation.menuPosition);
} else { } else {
this.doClose(); this.doClose();

View File

@ -9,6 +9,7 @@
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" /> <notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
<password-box ref="passwordBox" pop-class="chengdou-03__systerm" @checkOver="passWordCommit" /> <password-box ref="passwordBox" pop-class="chengdou-03__systerm" @checkOver="passWordCommit" />
<draw-select ref="drawSelect" /> <draw-select ref="drawSelect" />
<route-cancel ref="routeCancel" />
<set-fault ref="setFault" pop-class="chengdou-03__systerm" /> <set-fault ref="setFault" pop-class="chengdou-03__systerm" />
</div> </div>
</template> </template>
@ -21,6 +22,7 @@ import RouteSelection from './dialog/routeSelection';
import RouteDetail from './dialog/routeDetail'; import RouteDetail from './dialog/routeDetail';
import RouteHandControl from './dialog/routeHandControl'; import RouteHandControl from './dialog/routeHandControl';
import RouteGuide from './dialog/routeGuide'; import RouteGuide from './dialog/routeGuide';
import RouteCancel from './menuDialog/routeCancel';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo'; import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler'; 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 PasswordBox from '@/jmapNew/theme/components/menus/childDialog/passwordInputBox';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate'; import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import DrawSelect from './dialog/drawSelect'; import DrawSelect from './dialog/drawSelect';
import { EventBus } from '@/scripts/event-bus';
export default { export default {
name: 'SignalMenu', name: 'SignalMenu',
@ -42,7 +45,8 @@ export default {
NoticeInfo, NoticeInfo,
PasswordBox, PasswordBox,
SetFault, SetFault,
DrawSelect DrawSelect,
RouteCancel
}, },
props: { props: {
selected: { selected: {
@ -57,49 +61,52 @@ export default {
menu: [], menu: [],
menuNormal: { menuNormal: {
Local: [ Local: [
// { {
// label: '', label: '办理 通过进路',
// handler: this.drawingCall handler: this.arrangementRoute,
// }, cmdType: CMD.Signal.CMD_SIGNAL_SET_ROUTE
// { },
// label: '', {
// handler: this.baDeTrCall type: 'separator'
// } },
// { {
// label: '', label: '列车 办理进路',
// handler: this.arrangementRoute, handler: this.arrangementRoute,
// cmdType: CMD.Signal.CMD_SIGNAL_SET_ROUTE cmdType: CMD.Signal.CMD_SIGNAL_SET_ROUTE
// }, },
// { {
// label: '', label: '取消进路',
// handler: this.guide, handler: this.cancelTrainRoute,
// cmdType: CMD.Signal.CMD_SIGNAL_ROUTE_GUIDE cmdType: CMD.Signal.CMD_SIGNAL_CANCEL_ROUTE
// }, },
// { {
// label: '', label: '信号重开',
// handler: this.cancelTrainRoute, handler: this.reopenSignal,
// cmdType: CMD.Signal.CMD_SIGNAL_CANCEL_ROUTE cmdType: CMD.Signal.CMD_SIGNAL_REOPEN_SIGNAL
// }, },
// { {
// label: '', // label: '封锁/解封',
// handler: this.humanTrainRoute, handler: '',
// cmdType: CMD.Signal.CMD_SIGNAL_HUMAN_RELEASE_ROUTE cmdType: ''
// }, },
// { {
// label: '', label: '总人解',
// handler: this.humanControl, handler: this.humanTrainRoute,
// cmdType: CMD.Signal.CMD_SIGNAL_CLOSE_AUTO_SETTING cmdType: CMD.Signal.CMD_SIGNAL_HUMAN_RELEASE_ROUTE
// }, },
// { {
// label: '', type: 'separator'
// handler: this.atsAutoControl, },
// cmdType: CMD.Signal.CMD_SIGNAL_OPEN_AUTO_SETTING {
// }, label: '引导',
// { handler: this.guide,
// label: '', cmdType: CMD.Signal.CMD_SIGNAL_ROUTE_GUIDE
// handler: this.detail, },
// cmdType: CMD.Signal.CMD_SIGNAL_OPEN_AUTO_SETTING {
// } label: '坡道解锁',
handler: '',
cmdType: ''
}
], ],
Center: [ Center: [
// { // {
@ -190,7 +197,8 @@ export default {
}, },
watch: { watch: {
'$store.state.menuOperation.menuCount': function (val) { '$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); this.doShow(this.$store.state.menuOperation.menuPosition);
} else { } else {
this.doClose(); this.doClose();
@ -262,7 +270,8 @@ export default {
arrangementRoute() { arrangementRoute() {
commitOperate(menuOperate.Signal.arrangementRoute, {signalCode: this.selected.code}, 0).then(({valid, operate}) => { commitOperate(menuOperate.Signal.arrangementRoute, {signalCode: this.selected.code}, 0).then(({valid, operate}) => {
if (valid) { 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() { guide() {
commitOperate(menuOperate.Signal.guide, {signalCode: this.selected.code}, 0).then(({valid, operate}) => { commitOperate(menuOperate.Signal.guide, {signalCode: this.selected.code}, 0).then(({valid, operate}) => {
if (valid) { 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() { cancelTrainRoute() {
commitOperate(menuOperate.Signal.cancelTrainRoute, {signalCode: this.selected.code}, 0).then(({valid, operate}) => { commitOperate(menuOperate.Signal.cancelTrainRoute, {signalCode: this.selected.code}, 0).then(({valid, operate}) => {
if (valid) { if (valid) {
this.$refs.routeControl.doShow(operate, this.selected); this.$refs.routeCancel.doShow(operate, this.selected);
} }
}); });
}, },
@ -286,8 +296,7 @@ export default {
humanTrainRoute() { humanTrainRoute() {
commitOperate(menuOperate.Signal.humanTrainRoute, {signalCode: this.selected.code}, 0).then(({valid, operate}) => { commitOperate(menuOperate.Signal.humanTrainRoute, {signalCode: this.selected.code}, 0).then(({valid, operate}) => {
if (valid) { if (valid) {
Object.assign(operate, {operation: OperationEvent.Signal.humanTrainRoute.button.operation }); this.$refs.routeCancel.doShow(operate, this.selected);
this.$refs.passwordBox.doShow({...operate, ...{selected: this.selected}});
} }
}); });
}, },
@ -295,10 +304,25 @@ export default {
reopenSignal() { reopenSignal() {
commitOperate(menuOperate.Signal.reopenSignal, {signalCode: this.selected.code}, 0).then(({valid, operate}) => { commitOperate(menuOperate.Signal.reopenSignal, {signalCode: this.selected.code}, 0).then(({valid, operate}) => {
if (valid) { 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() { lock() {
commitOperate(menuOperate.Signal.lock, {signalCode: this.selected.code}, 0).then(({valid, operate}) => { 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" /> <switch-hook-lock ref="switchHookLock" pop-class="chengdou-03__systerm" />
<set-fault ref="setFault" pop-class="datie-02__systerm" /> <set-fault ref="setFault" pop-class="datie-02__systerm" />
<draw-select ref="drawSelect" /> <draw-select ref="drawSelect" />
<route-cancel ref="routeCancel" />
</div> </div>
</template> </template>
@ -23,6 +24,7 @@ import CancelMouseState from '@/mixin/CancelMouseState';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import { DeviceMenu, OperateMode } from '@/scripts/ConstDic'; import { DeviceMenu, OperateMode } from '@/scripts/ConstDic';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate'; import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import RouteCancel from './menuDialog/routeCancel';
export default { export default {
name: 'SwitchMenu', name: 'SwitchMenu',
@ -33,7 +35,8 @@ export default {
NoticeInfo, NoticeInfo,
SetFault, SetFault,
SwitchHookLock, SwitchHookLock,
DrawSelect DrawSelect,
RouteCancel
}, },
mixins: [ mixins: [
CancelMouseState CancelMouseState
@ -51,14 +54,66 @@ export default {
menu: [], menu: [],
menuNormal: { menuNormal: {
Local: [ Local: [
// { {
// label: '', label: '定操',
// handler: this.drawingCall handler: this.locate,
// }, cmdType: CMD.Switch.CMD_SWITCH_NORMAL_POSITION
// { },
// label: '', {
// handler: this.baDeTrCall 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: [ Center: [
// { // {
@ -132,7 +187,7 @@ export default {
}, },
watch: { watch: {
'$store.state.menuOperation.menuCount': function (val) { '$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); this.doShow(this.$store.state.menuOperation.menuPosition);
} else { } else {
this.doClose(); this.doClose();
@ -243,7 +298,8 @@ export default {
locate() { locate() {
commitOperate(menuOperate.Switch.locate, {switchCode:this.selected.code}, 0).then(({valid, operate})=>{ commitOperate(menuOperate.Switch.locate, {switchCode:this.selected.code}, 0).then(({valid, operate})=>{
if (valid) { 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() { reverse() {
commitOperate(menuOperate.Switch.reverse, {switchCode:this.selected.code}, 0).then(({valid, operate})=>{ commitOperate(menuOperate.Switch.reverse, {switchCode:this.selected.code}, 0).then(({valid, operate})=>{
if (valid) { 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: { watch: {
'$store.state.menuOperation.menuCount': function () { '$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); this.doShow(this.$store.state.menuOperation.menuPosition);
} else { } else {
this.doClose(); 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 {loginInfo, ProjectCode, localPackageProject} from '@/scripts/ProjectConfig';
import NProgress from 'nprogress'; import NProgress from 'nprogress';
import 'nprogress/nprogress.css'; 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 { getBaseUrlByProject } from '@/api/projectServer';
import localStore from 'storejs'; import localStore from 'storejs';
import { handlerUrl } from '@/utils/baseUrl'; import { handlerUrl } from '@/utils/baseUrl';
@ -69,6 +69,10 @@ function handleRoute(to, next, loginPath) {
} }
router.beforeEach( async (to, from, next) => { router.beforeEach( async (to, from, next) => {
if (to.query.thirdJump) {
setToken(to.query.key);
setSessionStorage('project', to.query.project);
}
let project = ''; let project = '';
if (to.path.includes('login')) { if (to.path.includes('login')) {
project = to.query.project; 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 DesignDisplayNew = () => import('@/views/newMap/displayNew/scriptDisplay/scriptPreview/index');
const PracticeDisplay = () => import('@/views/newMap/displayNew/practiceDisplay'); const PracticeDisplay = () => import('@/views/newMap/displayNew/practiceDisplay');
const BigLPFStrategy = () => import('@/views/newMap/displayNew/bigLPFStrategy'); const BigLPFStrategy = () => import('@/views/newMap/displayNew/bigLPFStrategy');
const BigTrainRunplanManage = () => import('@/views/bigTrainRunplanManage/index');
const JointTrainingNew = () => import('@/views/newMap/jointTrainingNew/index'); const JointTrainingNew = () => import('@/views/newMap/jointTrainingNew/index');
const jointTrainingNewCCTV = () => import('@/views/newMap/jointTrainingNew/realCCTV'); const jointTrainingNewCCTV = () => import('@/views/newMap/jointTrainingNew/realCCTV');
@ -680,7 +681,14 @@ export const publicAsyncRoute = [
hidden: true hidden: true
} }
] ]
} },
{
// 大铁项目 管理终端
path: '/bigTrainRunplanManage',
component: BigTrainRunplanManage,
hidden: true
},
]; ];
// 城市轨道项目 // 城市轨道项目
export const asyncRouter = [ 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 FaviconCgy from '@/assets/icon/favicon_cgy.png';
import FaviconRichor from '@/assets/icon/favicon_richor.png'; import FaviconRichor from '@/assets/icon/favicon_richor.png';
import FaviconZzww from '@/assets/icon/favicon_zzww.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 FaviconSay from '@/assets/icon/favicon_say.png';
import Link_Bxkc from '@/assets/icon/link_bxkc.png'; import Link_Bxkc from '@/assets/icon/link_bxkc.png';
import Link_Crsc from '@/assets/icon/link_crsc.png'; import Link_Crsc from '@/assets/icon/link_crsc.png';
import Link_Hls from '@/assets/icon/link_hls.png'; import Link_Hls from '@/assets/icon/link_hls.png';
import Link_Bjd from '@/assets/icon/link_bjd.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'; import TransparentIcon from '@/assets/icon/transparent.png';
// title:页面title; loginPath:退出登录跳转路径; loginParam:登录接口参数project;loginTitle:登录页左上角titlelogoWidth登录页左上角logo宽度 // title:页面title; loginPath:退出登录跳转路径; loginParam:登录接口参数project;loginTitle:登录页左上角titlelogoWidth登录页左上角logo宽度
@ -569,6 +571,30 @@ export const loginInfo = {
navigationMarginLeft: '60px', navigationMarginLeft: '60px',
systemType: '011' 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: { designjxgm: {
title: '江西工业贸易职业技术学院城市轨道交通设计平台', title: '江西工业贸易职业技术学院城市轨道交通设计平台',
loginPath: '/design/login?project=jxgm', loginPath: '/design/login?project=jxgm',
@ -622,6 +648,30 @@ export const loginInfo = {
navigationLogoWidth: '40px', navigationLogoWidth: '40px',
navigationMarginLeft: '60px', navigationMarginLeft: '60px',
systemType: '026' 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, richorygy: FaviconRichor,
designrichorygy: FaviconRichor, designrichorygy: FaviconRichor,
say: FaviconSay, say: FaviconSay,
designsay: FaviconSay designsay: FaviconSay,
unittecsty: FaviconUnittec,
designunittecsty: FaviconUnittec
}; };
export const ProjectCode = { export const ProjectCode = {
@ -731,18 +783,20 @@ export const ProjectCode = {
say: 'SAY', say: 'SAY',
designsay: 'SAY', designsay: 'SAY',
xzexam:'SAY', xzexam:'SAY',
unittecsty: 'UNITTEC_STY',
designunittecsty: 'UNITTEC_STY'
}; };
/** 嵌入第三方平台 导航栏右上角 清空 */ /** 嵌入第三方平台 导航栏右上角 清空 */
export const ThirdLoginList = ['richor', 'designrichor', 'richorygy', 'designrichorygy']; export const ThirdLoginList = ['richor', 'designrichor', 'richorygy', 'designrichorygy'];
/** 底部栏仅展示公司信息不展示备案号 */ /** 底部栏仅展示公司信息不展示备案号 */
export const BottomColumnOnlyConInfo = ['heb', 'designheb', 'jyd', 'designjyd', 'tky', 'designtky', 'bxkc', 'designbxkc', 'crsc', 'designcrsc', 'hls', 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', 'designhls', 'hyd', 'designhyd', 'cgy', 'designcgy', 'richor', 'richorlesson3d', 'richorjoint', 'designrichorjoint', 'nologo', 'designnologo', 'richorygy',
'designrichorygy']; 'designrichorygy', 'unittecsty', 'designunittecsty'];
/** 实训设计平台通过项目code获取地图列表的项目 */ /** 实训设计平台通过项目code获取地图列表的项目 */
export const GetMapListByProjectList = ['xty', 'designxty', 'gzb', 'designgzb', 'xadt', 'designxadt', 'heb', 'designheb', 'designdrts', 'drts', 'wjls', 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', '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', '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']; 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', 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', '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 登录输入框上方 大字体 加粗居中 */ /** 登录页项目 title 登录输入框上方 大字体 加粗居中 */
export const ProjectLoginStyleList = ['gzb', 'designgzb', 'xty', 'designxty', 'xadt', 'designxadt', 'tky', 'designtky', 'jyd', 'designjyd', 'bxkc', 'designbxkc', 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', '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', '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']; export const NoQrcodeList = ['heb', 'designheb', 'cgy', 'designcgy', 'ntyl', 'designntyl'];
/** 综合演练 无二维码 */ /** 综合演练 无二维码 */
@ -811,7 +865,9 @@ export const goOtherPlatformMenu = {
jxgm: '/design/login?project=jxgm', jxgm: '/design/login?project=jxgm',
designjxgm: '/login?project=jxgm', designjxgm: '/login?project=jxgm',
say: '/design/login?project=say', 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 = [ export const ProjectList = [
{value:'xty', label:'西铁院'}, {value:'xty', label:'西铁院'},
@ -836,7 +892,8 @@ export const ProjectList = [
{value: 'sr_sandbox', label: '上饶沙盘'}, {value: 'sr_sandbox', label: '上饶沙盘'},
{value: 'jxgm', label: '江西工贸' }, {value: 'jxgm', label: '江西工贸' },
{value: 'richor_ygy', label: '扬州工业'}, {value: 'richor_ygy', label: '扬州工业'},
{value: 'say', label: '苏安院'} {value: 'say', label: '苏安院'},
{value: 'unittec_sty', label: '众合-陕铁院'}
]; ];
/** 本地项目打包 */ /** 本地项目打包 */
export const localPackageProject = { export const localPackageProject = {

View File

@ -379,8 +379,14 @@ export default {
CMD_DIRECTION_CHANGE: {value: 'Direction_Change', label: '切换方向'} CMD_DIRECTION_CHANGE: {value: 'Direction_Change', label: '切换方向'}
}, },
CTC: { CTC: {
CTC_RECEIVING_NOTICE: {value: 'CTC_RECEIVING_NOTICE', label: '接预'}, CTC_FINISH_RECEIVING_NOTICE: {value: 'CTC_FINISH_RECEIVING_NOTICE', label: '完成接预'},
CTC_DEPARTURE_NOTICE: {value: 'CTC_DEPARTURE_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_ASSIST_PRESS_DOWN_TURN_DIRECTION:{value:'ASSIST_PRESS_DOWN_TURN_DIRECTION', label:'改方'},
CTC_AUTO_TRIGGER: {value: 'CTC_AUTO_TRIGGER', label: '自动触发'}, CTC_AUTO_TRIGGER: {value: 'CTC_AUTO_TRIGGER', label: '自动触发'},
CTC_ASSIST_PRESS_MAIN_ASSIST:{value: 'ASSIST_PRESS_MAIN_ASSIST', 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_DELIVER_ASSIST:{value: 'ASSIST_PRESS_DELIVER_ASSIST', label: '发辅助'},
CTC_ASSIST_PRESS_BLOCK:{value: 'ASSIST_PRESS_BLOCK', label: '阻塞'}, CTC_ASSIST_PRESS_BLOCK:{value: 'ASSIST_PRESS_BLOCK', label: '阻塞'},
CTC_ASSIST_PRESS_RESTORE:{value: 'ASSIST_PRESS_RESTORE', label: '复原'}, CTC_ASSIST_PRESS_RESTORE:{value: 'ASSIST_PRESS_RESTORE', label: '复原'},
CTC_ASSIST_PRESS_ACCIDENT:{value: 'ASSIST_PRESS_ACCIDENT', label: '事故'} CTC_ASSIST_PRESS_ACCIDENT:{value: 'ASSIST_PRESS_ACCIDENT', label: '事故'},
CTC_BATCH_MODIFY_RUN_PLAN:{value: 'CTC_BATCH_MODIFY_RUN_PLAN', label: '批量修改股道'},
CTC_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: { signalLight: {
menuButton: { menuButton: {
operation: '3231', operation: '3231',
domId: '_Tips-Signal-signalLight-MenuButton{BOTTOM}' domId: '_Tips-Signal-signalLight-MenuButton{BOTTOM}'
} }
}, },
// 灭灯 (大铁) // 灭灯 (大铁)
signalDestroy: { signalDestroy: {
menuButton: { menuButton: {
operation: '3232', operation: '3232',
domId: '_Tips-Signal-signalDestroy-MenuButton{BOTTOM}' domId: '_Tips-Signal-signalDestroy-MenuButton{BOTTOM}'
} }
} }
@ -2991,16 +2991,16 @@ export const OperationEvent = {
}, },
// 引导总锁Station_Master_Lock // 引导总锁Station_Master_Lock
stationMasterLock: { stationMasterLock: {
menuButton: { menuButton: {
operation: '621', operation: '621',
domId: '_Tips-Station-stationMasterLock' domId: '_Tips-Station-stationMasterLock'
}, },
leftButton: { leftButton: {
operation: '6211', operation: '6211',
domId: '_Tips-Station-stationMasterLock-leftButton' domId: '_Tips-Station-stationMasterLock-leftButton'
}, },
rightButton: { rightButton: {
operation: '6212', operation: '6212',
domId: '_Tips-Station-stationMasterLock-rightButton' domId: '_Tips-Station-stationMasterLock-rightButton'
} }
} }
@ -3607,15 +3607,15 @@ export const OperationEvent = {
} }
}, },
CTCCommand: { CTCCommand: {
receivingNotice: { receivingNotice: {
menu: { menu: {
operation: '1100', operation: '1100',
domId: '_Tips-CTC-ReceivingNotice-Menu{TOP}' domId: '_Tips-CTC-ReceivingNotice-Menu{TOP}'
} }
}, },
departureNotice: { departureNotice: {
menu: { menu: {
operation: '1101', operation: '1101',
domId: '_Tips-CTC-DepartureNotice-Menu{TOP}' domId: '_Tips-CTC-DepartureNotice-Menu{TOP}'
} }
}, },
@ -3626,48 +3626,166 @@ export const OperationEvent = {
} }
}, },
autoTrigger: { autoTrigger: {
menu: { menu: {
operation: '1103', operation: '1103',
domId: '_Tips-CTC-AutoTrigger-Menu{TOP}' domId: '_Tips-CTC-AutoTrigger-Menu{TOP}'
} }
}, },
assistPressMainAssist:{ assistPressMainAssist:{
menu: { menu: {
operation: '1104', operation: '1104',
domId: '_Tips-CTC-AssistPressMainAssist-Menu{TOP}' domId: '_Tips-CTC-AssistPressMainAssist-Menu{TOP}'
} }
}, },
assistPressReceiveAssist:{ assistPressReceiveAssist:{
menu: { menu: {
operation: '1105', operation: '1105',
domId: '_Tips-CTC-AssistPressReceiveAssist-Menu{TOP}' domId: '_Tips-CTC-AssistPressReceiveAssist-Menu{TOP}'
} }
}, },
assistPressDeliverAssist:{ assistPressDeliverAssist:{
menu: { menu: {
operation: '1106', operation: '1106',
domId: '_Tips-CTC-AssistPressDeliverAssist-Menu{TOP}' domId: '_Tips-CTC-AssistPressDeliverAssist-Menu{TOP}'
} }
}, },
assistPressBlock:{ assistPressBlock:{
menu: { menu: {
operation: '1107', operation: '1107',
domId: '_Tips-CTC-AssistPressBlock-Menu{TOP}' domId: '_Tips-CTC-AssistPressBlock-Menu{TOP}'
} }
}, },
assistPressRestore:{ assistPressRestore:{
menu: { menu: {
operation: '1108', operation: '1108',
domId: '_Tips-CTC-AssistPressRestore-Menu{TOP}' domId: '_Tips-CTC-AssistPressRestore-Menu{TOP}'
} }
}, },
assistPressAccident:{ assistPressAccident:{
menu: { menu: {
operation: '1109', operation: '1109',
domId: '_Tips-CTC-AssistPressAccident-Menu{TOP}' 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 store from '@/store/index';
import { copyAssign } from '@/utils/index';
import { Notification } from 'element-ui'; import { Notification } from 'element-ui';
function handleSockInfo(state, msg, type) { function handleSockInfo(state, msg, type) {
@ -198,11 +199,75 @@ function handle(state, data) {
state.simulationPlanChange = msg; state.simulationPlanChange = msg;
break; break;
// 占线板信息 // 占线板信息
case 'Simulation_RailCtcStatus': case 'Simulation_RailCtcStatus':
state.railCtcStatusMsg = msg; state.railCtcStatusMsg = msg;
break; 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面板按钮状态信息 simulationPslStatus: [], // PSL面板按钮状态信息
simulationPlanChange:{}, // 运行图加线/抽线/变化推送消息 simulationPlanChange:{}, // 运行图加线/抽线/变化推送消息
loggedOutMsg: '', loggedOutMsg: '',
railCtcStatusMsg: {}, // 占线板信息 railCtcStatusMsg: {}, // 占线板信息
railCtcRunplanInitMsg:{}, // 大铁项目 ctc 运行图初始化信息
railCtcRunplanChange:0, // 大铁项目 ctc 运行图信息变化
railCtcStationManageRpMsg:{}, // 大铁项目 ctc 车务管理 端运行图信息
railCtcStationManageRpChange:0 // 大铁项目 ctc 车务管理 运行图信息变化
}, },
getters: { getters: {
}, },

View File

@ -24,7 +24,7 @@ export function handlerUrl(data) {
if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
// const data = null; // const data = null;
// BASE_API = 'https://joylink.club/jlcloud'; // BASE_API = 'https://joylink.club/jlcloud';
BASE_API = 'https://test.joylink.club/jlcloud'; // BASE_API = 'https://test.joylink.club/jlcloud';
// BASE_API = 'http://114.116.51.125/jlcloud'; // BASE_API = 'http://114.116.51.125/jlcloud';
// BASE_API = 'http://192.168.8.152:9000'; // 袁琪 // BASE_API = 'http://192.168.8.152:9000'; // 袁琪
// BASE_API = 'http://192.168.8.172:9200'; // 旭强 // 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://192.168.3.37:9000'; // 卫志宏
// BASE_API = 'http://b29z135112.zicp.vip'; // BASE_API = 'http://b29z135112.zicp.vip';
// BASE_API = 'http://2925963m2a.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 ? 'https://' + data.domainName : BASE_API;
BASE_API = data && data.domainName ? 'http://' + 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'; 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 }; 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) { // export function deepAssign(obj, item) {
// function * colneData(item) { // function * colneData(item) {
// for (const keys in item) { // for (const keys in item) {

View File

@ -31,7 +31,15 @@ export function getTopic(type, group, stationCode) {
case 'ISCSPIS': case 'ISCSPIS':
topic = `/queue/simulation/${group}/iscs/pis`; topic = `/queue/simulation/${group}/iscs/pis`;
break; 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; 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,10 +15,20 @@
<el-form-item :label="this.$t('ibp.yCoordinate')"> <el-form-item :label="this.$t('ibp.yCoordinate')">
<el-input-number v-model="form.y" controls-position="right" :min="1" /> <el-input-number v-model="form.y" controls-position="right" :min="1" />
</el-form-item> </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-form-item label="方向">
<el-select v-model="form.direction" placeholder="请选择"> <el-select v-model="form.direction" placeholder="请选择">
<el-option <el-option
v-for="(item, i) in directions" v-for="(item, i) in directions"
:key="i" :key="i"
:label="item.name" :label="item.name"
:value="item.value" :value="item.value"
@ -50,6 +60,7 @@ export default {
x: 10, x: 10,
y: 10, y: 10,
direction: null, direction: null,
mean: ''
}, },
rules: { rules: {
code: [ code: [
@ -64,6 +75,10 @@ export default {
{ name: '上行', value: true}, { name: '上行', value: true},
{ name: '下行', value: false}, { name: '下行', value: false},
], ],
showMeanList: [
{label: '信号-蜂鸣器', value: 'SIGNAL_ALARM'},
{label: '屏蔽门-蜂鸣器', value: 'PSD_ALARM'}
]
}; };
}, },
computed: { computed: {
@ -80,6 +95,7 @@ export default {
this.form.alarmWidth = model.width; this.form.alarmWidth = model.width;
this.form.x = model.point.x; this.form.x = model.point.x;
this.form.y = model.point.y; this.form.y = model.point.y;
this.form.mean = model.mean;
this.form.direction = model.direction this.form.direction = model.direction
} }
} }
@ -96,6 +112,7 @@ export default {
y: this.form.y y: this.form.y
}, },
code: this.form.code, code: this.form.code,
mean: this.form.mean,
_type: 'Alarm', _type: 'Alarm',
width: this.form.alarmWidth, width: this.form.alarmWidth,
direction: this.form.direction direction: this.form.direction
@ -115,6 +132,7 @@ export default {
}, },
code: this.form.code, code: this.form.code,
_type: 'Alarm', _type: 'Alarm',
mean: this.form.mean,
width: this.form.alarmWidth, width: this.form.alarmWidth,
direction: this.form.direction direction: this.form.direction
}; };
@ -130,6 +148,7 @@ export default {
alarmWidth: '', alarmWidth: '',
x: 10, x: 10,
y: 10, y: 10,
mean: '',
direction: null direction: null
}; };
}, },

View File

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

View File

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

View File

@ -27,8 +27,8 @@
</el-form-item> </el-form-item>
<el-form-item label="方向"> <el-form-item label="方向">
<el-select v-model="form.direction" placeholder="请选择"> <el-select v-model="form.direction" placeholder="请选择">
<el-option <el-option
v-for="(item, i) in directions" v-for="(item, i) in directions"
:key="i" :key="i"
:label="item.name" :label="item.name"
:value="item.value" :value="item.value"
@ -59,6 +59,10 @@ export default {
{label: '关门灯', value: 'gmLight'}, {label: '关门灯', value: 'gmLight'},
{label: '开门灯', value: 'kmLight'}, {label: '开门灯', value: 'kmLight'},
{label: '紧急停车灯', value: 'jjtcLight'}, {label: '紧急停车灯', value: 'jjtcLight'},
{label: '操作允许灯', value: 'PSD_CZYX_LIGHT'},
{label: '互锁解除灯', value: 'PSD_HSJC_LIGHT'},
{label: '手动操作灯', value: 'PSD_SDCZ_LIGHT'},
{label: '故障报警灯', value: 'PSD_GZBJ_LIGHT'}
], ],
form: { form: {
code: '', code: '',

View File

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

View File

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

View File

@ -10,18 +10,18 @@
top="25vh" top="25vh"
> >
<el-form ref="ruleForm" :model="form" :rules="rules" label-width="110px" class="demo-ruleForm"> <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"> <el-form-item prop="nickname">
<template slot="label"> <template slot="label">
<span>&emsp;&emsp;</span> <span>&emsp;&emsp;</span>
</template> </template>
<el-input v-model="form.nickname" autocomplete="new-password" /> <el-input v-model="form.nickname" autocomplete="new-password" />
</el-form-item> </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"> <el-form-item label="密码:" prop="password">
<template slot="label"> <template slot="label">
<span>&emsp;&emsp;</span> <span>&emsp;&emsp;</span>

View File

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

View File

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

View File

@ -183,6 +183,10 @@ export default {
this.textStatusHeight = textStatus.offsetHeight || 0; this.textStatusHeight = textStatus.offsetHeight || 0;
textStatus.style.top = this.offset - 15 + 'px'; 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" @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"> <el-button-group class="button-group-box">
<template v-if="!dataError&&project != 'bjd'"> <template v-if="!dataError&&project != 'bjd'">
<template v-if="isScriptRun"> <template v-if="isScriptRun">
@ -36,7 +36,7 @@
<el-button type="danger" size="small" @click="end">{{ $t('display.demon.initialize') }}</el-button> <el-button type="danger" size="small" @click="end">{{ $t('display.demon.initialize') }}</el-button>
</template> </template>
</template> </template>
<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> </el-button-group>
</div> </div>
@ -155,6 +155,12 @@ export default {
isDisable() { isDisable() {
return this.$store.state.training.started; return this.$store.state.training.started;
}, },
isCtc() {
return !!this.$route.query.ctc
},
zIndex() {
return this.$route.query.ctc ? 11:0
},
project() { project() {
return getSessionStorage('project'); return getSessionStorage('project');
}, },
@ -399,7 +405,7 @@ export default {
// || this.project === 'bjd' // || this.project === 'bjd'
} else { } else {
if (this.project === 'bjd') { if (this.project === 'bjd' || this.isCtc) {
window.close(); window.close();
} else { } else {
this.$store.dispatch('map/setShowCentralizedStationCode', ''); this.$store.dispatch('map/setShowCentralizedStationCode', '');

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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