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,6 +22,28 @@ export default class SignalButton extends Group {
create() { create() {
const model = this.model; const model = this.model;
const fillColor = this.getTypeColor(); const fillColor = this.getTypeColor();
const queryList = window.location.search.substring(1).split('&');
const queryCtc = queryList.find(item => {
return item.includes('ctc');
});
const ctcArcList = ['OCCLUSION', 'RECOVERY', 'CHANGE_DIRECTION', 'ACCIDENT', 'DEPART_ASSIST', 'PICK_ASSIST', 'ASSIST'];
if (queryCtc && ctcArcList.includes(model.type)){
this.arcShape = new Arc({
zlevel: this.zlevel,
z: this.z,
shape: {
cx: this.model.position.x + 7,
cy: this.model.position.y + 7,
r: 7
},
style: {
stroke: '#69666E',
lineWidth: 1,
fill: fillColor
}
});
this.add(this.arcShape);
} else {
this.rectButton = new Rect({ this.rectButton = new Rect({
zlevel: this.zlevel, zlevel: this.zlevel,
z: this.z, z: this.z,
@ -39,6 +61,7 @@ export default class SignalButton extends Group {
} }
}); });
this.add(this.rectButton); 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

@ -24,9 +24,13 @@
</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 {
@ -74,17 +76,6 @@ 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: {
@ -105,8 +96,6 @@ export default {
}, },
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})=>{ commitOperate(type, {stationCode: this.stationCode, tripNumber: this.tripNumber}, 3).then(({valid, operate})=>{
this.loading = false; this.loading = false;
if (valid) { if (valid) {
@ -116,7 +105,8 @@ export default {
this.loading = false; this.loading = false;
this.doClose(); this.doClose();
console.error(error); console.error(error);
this.$refs.noticeInfo.doShow(); // this.$refs.noticeInfo.doShow();
this.$message.error('操作失败!');
}); });
} }
} }
@ -124,7 +114,7 @@ export default {
</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

@ -53,12 +53,12 @@
<!--</el-row>--> <!--</el-row>-->
<el-row style="margin-top: 10px;margin-bottom: 10px;"> <el-row style="margin-top: 10px;margin-bottom: 10px;">
<el-col :span="21" :offset="2"> <el-col :span="21" :offset="2">
<el-radio disabled v-model="radio" label="禁用">分段办理</el-radio> <el-radio v-model="radio" disabled label="禁用">分段办理</el-radio>
</el-col> </el-col>
</el-row> </el-row>
<div style="display: flex;justify-content: space-between;margin-bottom: 10px;"> <div style="display: flex;justify-content: space-between;margin-bottom: 10px;">
<el-button size="mini" v-if="type === 'rec'" :type="selected.receivingRouteAutoTrigger?'warning':''" :disabled="!!route.lock || !selected.receivingNotice" @click="commit">办理接车</el-button> <el-button v-if="type === 'rec'" size="mini" :type="selected.receivingRouteAutoTrigger?'warning':''" :disabled="!!route.lock || !selected.receivingNotice" @click="commit">办理接车</el-button>
<el-button size="mini" v-if="type === 'dep'" :type="selected.departureRouteAutoTrigger?'warning':''" :disabled="!!route.lock || !selected.departureNotice" @click="commit">办理发车</el-button> <el-button 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>进路单锁</el-button> <el-button size="mini" disabled>进路单锁</el-button>
<el-button size="mini" :disabled="cancelRouteDisabled" @click="commit">取消进路</el-button> <el-button size="mini" :disabled="cancelRouteDisabled" @click="commit">取消进路</el-button>
@ -125,12 +125,13 @@ export default {
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() {
@ -230,7 +231,7 @@ export default {
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 });
@ -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();

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,45 +1,39 @@
<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">
<img :src="ctcBarIcon17" class="img-box">
<img :src="ctcBarIcon18" class="img-box" @click="handleRunplan">
</div> </div>
<!--<div v-if="$store.state.training.prdType == '01'" class="alarm-window">--> <div style="display: flex;padding: 2px;border-top: 2px solid #D1D1D1;margin-top: 3px">
<!--<div v-for="elem in alarmMessages" :key="elem.id" style="font-size: 14px;">--> <div class="img-box" style="width: 100px;height: 25px;line-height: 21px;text-align: center;">调度命令</div>
<!--{{ elem.message }}--> <div style="width: 200px;height: 25px;border: 2px #D1D1D1 inset;line-height: 21px;text-align: center;margin-left: 5px;" />
<!--</div>--> <div class="img-box" style="width: 100px;height: 25px;line-height: 21px;text-align: center;margin-left: 100px;">阶段计划</div>
<!--</div>--> <div class="img-box" style="width: 100px;height: 25px;line-height: 21px;text-align: center;margin-left: 5px;">阶段记事</div>
<!--<div class="device-status-window">--> <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: mode === 'liansuo' ? '#0f0': '#f00'}" @click="selectedMode('liansuo')">联锁I</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: 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;">与中心通信正常</div>
<!--<div class="device-status-button" style="background: #f00;">联锁II</div>--> </div>
<!--<div class="device-status-button" style="background: #0f0;">操作A</div>--> </div>
<!--<div class="device-status-button" style="background: #ff0;">操作B</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 class="device-status-button" style="background: #f00;">维修机</div>-->
<!--</div>-->
<!--<div v-if="$store.state.training.prdType == '01'" class="warning-window">-->
<!--<div v-for="elem in warningMessages" :key="elem.id" style="font-size: 14px;color: #ff0">-->
<!--{{ elem.message }}-->
<!--</div>-->
<!--</div>-->
<div v-if="$store.state.training.prdType == '01'" style="width: 1405px;position: fixed;height: 30px;background: #808080;z-index: 9;bottom: 0;left: 0;display: flex;">
<div style="width: 60%;height: 30px;line-height: 30px;text-align: center;">提示信息窗</div> <div style="width: 60%;height: 30px;line-height: 30px;text-align: center;">提示信息窗</div>
<div style="width: 40%;height: 30px;line-height: 30px;text-align: center;border-left: 2px #ccc solid;">{{ '操控A:主机' + ' ' + dateString + ' ' + time }}</div> <div style="width: 40%;height: 30px;line-height: 30px;text-align: center;border-left: 2px #ccc solid;">{{ '操控A:主机' + ' ' + dateString + ' ' + time }}</div>
</div> </div>
@ -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: {
@ -125,7 +128,7 @@ export default {
{ 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: '这是预警信息一' },
@ -134,10 +137,11 @@ export default {
{ 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: '',
dateString1: '',
ctcBarIcon1: CtcBarIcon1, ctcBarIcon1: CtcBarIcon1,
ctcBarIcon2: CtcBarIcon2, ctcBarIcon2: CtcBarIcon2,
ctcBarIcon3: CtcBarIcon3, ctcBarIcon3: CtcBarIcon3,
@ -155,8 +159,8 @@ export default {
ctcBarIcon15: CtcBarIcon15, ctcBarIcon15: CtcBarIcon15,
ctcBarIcon16: CtcBarIcon16, ctcBarIcon16: CtcBarIcon16,
ctcBarIcon17: CtcBarIcon17, ctcBarIcon17: CtcBarIcon17,
ctcBarIcon18: CtcBarIcon18, ctcBarIcon18: CtcBarIcon18
} };
}, },
computed: { computed: {
...mapGetters('config', [ ...mapGetters('config', [
@ -166,7 +170,7 @@ export default {
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: {
@ -208,6 +212,10 @@ export default {
if (months.length < 2) { months = '0' + months; } if (months.length < 2) { months = '0' + months; }
if (dates.length < 2) { dates = '0' + dates; } if (dates.length < 2) { dates = '0' + dates; }
this.dateString = years + months + dates; this.dateString = years + months + dates;
this.dateString1 = years + '年' + months + '月' + dates + '日';
},
handleRunplan() {
this.$refs.runplanPane.doShow();
} }
} }
}; };
@ -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 {
padding: 5px;
height: 26px;
}
.fuzhou-01__systerm .el-dialog .el-dialog__footer {
background: #F0F0F0;
opacity: 1;
}
.fuzhou-01__systerm .el-dialog .el-dialog__body {
padding-top: 10px;
padding-bottom: 10px;
padding-left: 5px;
padding-right: 5px;
margin: 0px 5px 5px;
border: 2px solid rgba(120, 121, 123, 0.5);
box-shadow: 1px hsla(240, 0%, 100%, 0.5) inset;
background: #F0F0F0;
opacity: 1;
}
.fuzhou-01__systerm .el-dialog .el-dialog__title {
position: absolute;
top: 4px;
color: #000;
border-radius: 4px;
padding: 0px 2px;
height: 20px;
line-height: 20px
}
.fuzhou-01__systerm .el-dialog .el-dialog__title::before {
content: '';
position: absolute;
top: 0;
left: 0;
-webkit-filter: blur(10px);
filter: blur(10px);
height: 20px;
width: -webkit-fill-available;
background: rgba(128, 128, 128, 0.8);
z-index: -1;
}
.fuzhou-01__systerm .el-dialog .el-dialog__headerbtn {
background: linear-gradient(#CD98A0, #C27D6E, #B63022, #C68770);
border: 1px solid #fff;
border-radius: 4px;
top: 4px;
right: 5px;
line-height: 16px;
}
.fuzhou-01__systerm .el-dialog .el-dialog__headerbtn .el-icon-close:before {
font-size: 16px;
}
.fuzhou-01__systerm .el-dialog .el-dialog__headerbtn .el-dialog__close {
color: #fff;
}
.fuzhou-01__systerm .el-dialog .el-button {
height: 32px;
line-height: 32px;
padding: 0px;
width: 80px;
border: 2px outset #E2E2E2;
border-radius: 0px !important;
color: #000;
background: #F0F0F0;
}
.fuzhou-01__systerm .el-dialog .el-button:focus span {
border: 1px dashed gray;
}
.fuzhou-01__systerm .el-dialog .el-button:active {
border: 2px inset #E2E2E2;
}
.fuzhou-01__systerm .el-dialog .el-button:disabled {
border: 2px inset #E2E2E2;
}
.fuzhou-01__systerm .el-dialog .el-button:disabled span {
border: 0px;
}
.fuzhou-01__systerm .el-dialog .el-input {
border: 2px inset #E9E9E9;
}
.fuzhou-01__systerm .el-dialog .el-input .el-input__inner {
color: #000;
background: #fff !important;
border: 0px;
border-radius: 0px !important;
box-sizing: border-box;
}
.fuzhou-01__systerm .el-dialog .el-input.is-disabled .el-input__inner {
background: #F0F0F0 !important;
}
.fuzhou-01__systerm .el-dialog .el-textarea {
border: 2px inset #E9E9E9;
border-radius: 0px;
}
.fuzhou-01__systerm .el-dialog .el-textarea .el-textarea__inner {
color: #000;
background: #fff !important;
border: 0px;
border-radius: 0px !important;
box-sizing: border-box;
}
.fuzhou-01__systerm .el-dialog .el-textarea.is-disabled .el-textarea__inner {
background: #F0F0F0 !important;
}
.fuzhou-01__systerm .el-dialog .el-table {
border: 2px inset #E9E9E9;
color: #000 !important;
}
.fuzhou-01__systerm .el-dialog .el-table .cell {
line-height: unset !important;
}
.fuzhou-01__systerm .el-dialog .el-table th.is-leaf {
background: #F0F0F0 !important;
border-right: 1px solid #BDBDBD !important;
border-bottom: 1px solid #BDBDBD !important;
color: #000 !important;
height: 20px !important;
padding: 0px;
}
.fuzhou-01__systerm .el-dialog .el-table tr td {
height: 20px !important;
padding: 0px;
}
.fuzhou-01__systerm .el-dialog .el-table .el-table__empty-text {
top: 15px !important;
}
.fuzhou-01__systerm .el-dialog .current-row>td {
background: #3399FF !important;
color: #fff !important;
}
.fuzhou-01__systerm .el-dialog .el-checkbox__inner {
border: 1px inset #dcdfe6 !important;
}
.fuzhou-01__systerm .el-dialog .el-checkbox__label {
color: #000 !important;
}
.fuzhou-01__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__inner {
background: #E6E6E6 !important;
}
.fuzhou-01__systerm .el-dialog .el-checkbox.is-disabled .el-checkbox__label {
color: #C5C9CC !important;
}
.fuzhou-01__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner {
background: #fff !important;
border: 1px inset #dcdfe6 !important;
}
.fuzhou-01__systerm .el-dialog .el-checkbox__input.is-checked .el-checkbox__inner::after {
position: absolute;
-webkit-box-sizing: content-box;
box-sizing: content-box;
content: "";
border: 1px solid #000;
border-left: 0;
border-top: 0;
height: 7px;
left: 4px;
top: 1px;
}
.fuzhou-01__systerm .el-dialog .el-radio__inner {
border: 1px inset #dcdfe6 !important;
}
.fuzhou-01__systerm .el-dialog .el-radio__label {
color: #000 !important;
}
.fuzhou-01__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner {
background: #fff !important;
border: 1px inset #dcdfe6 !important;
}
.fuzhou-01__systerm .el-dialog .el-radio__input.is-checked .el-radio__inner::after {
width: 4px;
height: 4px;
border-radius: 100%;
background-color: #000 !important;
position: absolute;
left: 50%;
top: 50%;
}
.fuzhou-01__systerm .el-dialog .el-radio.is-disabled .el-radio__inner {
background: #E6E6E6 !important;
}
.fuzhou-01__systerm .el-dialog .el-radio.is-disabled .el-radio__label {
color: #C5C9CC !important;
}
.fuzhou-01__systerm .el-dialog .base-label {
background: rgb(240 240 240);
position: relative;
}
.fuzhou-01__systerm .el-dialog .el-form-item label {
font-weight: normal !important;
color: #000 !important;
}
.fuzhou-01__systerm .el-dialog .context {
height: 100px; height: 100px;
border: 2px inset #E2E2E2; border: 2px inset #E2E2E2;
overflow-y: scroll; overflow-y: scroll;
} }
.chengdou-03__systerm .el-dialog .table { .fuzhou-01__systerm .el-dialog .table {
margin-top: 10px; margin-top: 10px;
} }
.chengdou-03__systerm .el-dialog .notice { .fuzhou-01__systerm .el-dialog .notice {
margin-left: 62px; margin-left: 62px;
line-height: 30px; line-height: 30px;
} }
.chengdou-03__systerm .el-dialog .button-group { .fuzhou-01__systerm .el-dialog .button-group {
margin-top: 20px; margin-top: 10px;
}
.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;
}
.device-status-window {
width: 160px;
height: 35px;
position: fixed;
top: 50px;
right: 10px;
z-index: 10;
display: flex;
border: 2px #FBFCFB solid;
align-items: center;
justify-content: center;
}
.device-status-button {
border-top: 2px #808080 solid;
border-left: 2px #808080 solid;
border-right: 2px #FDFBF9 solid;
border-bottom: 2px #FDFBF9 solid;
width: 79px;
height: 30px;
text-align: center;
line-height: 30px;
cursor: pointer;
}
.warning-window {
width: 400px;
height: 100px;
position: fixed;
right: 10px;
top: 60px;
background: #808080;
z-index: 10;
overflow-y: scroll;
border-bottom: 6px #ccc solid;
border-top: 6px #ccc solid;
border-right: 3px #ccc solid;
border-left: 3px #ccc solid;
padding: 5px;
} }
.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, operate: '',
children: [ children: [
{ {
title: '设置临时限速', title: '工具栏',
operate: OperationEvent.Section.setLimitSpeed, operate: '',
click: this.setLimitSpeed children: [
{
title: '标准按钮',
click: this.undeveloped
}, },
{ {
title: '取消临时限速', title: '签收栏',
operate: OperationEvent.Section.cancelSpeed, click: this.undeveloped
click: this.cancleLimitSpeed },
{
title: '显示系统信息窗口',
click: this.undeveloped
},
{
title: '显示进路序列管理窗口',
click: this.bottomTableShowOrHidden
},
{
title: '显示信号员计划表',
click: this.undeveloped
},
{
title: '显示信号员注意事项',
click: this.undeveloped
} }
] ]
}, },
{ {
title: '查看', title: '站场图',
// operate: OperationEvent.Command.mBar.check,
operate: '',
children: [
{
title: '运行图',
click: this.undeveloped click: this.undeveloped
}, },
{ {
title: '报告分析', title: '行车日志',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '视图',
click: this.undeveloped,
operate: '',
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.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, click: this.undeveloped
operate: OperationEvent.Command.view.setTrainIdDisplay
}, },
{ {
title: '设置名称显示', title: '甩挂车作业',
click: this.setNameDisplay, click: this.undeveloped
operate: OperationEvent.Command.view.setNameDisplay
}, },
{ {
title: '设置设备显示', title: '列车编组(速报表)',
click: this.setDeviceDisplay, click: this.undeveloped
operate: OperationEvent.Command.view.setDeviceDisplay },
{
title: '站存车(现存车)',
click: this.undeveloped
},
{
title: '列控命令',
click: this.undeveloped
},
{
title: '车站直接限速',
click: this.undeveloped
},
{
title: '运统46',
click: this.undeveloped
},
{
title: '站场图回放',
click: this.undeveloped
},
{
title: '列控区间占用逻辑检查',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '更新数据',
click: this.undeveloped
},
{
title: '列车固定径路',
click: this.undeveloped
},
{
type: 'separator'
},
{
title: '用户管理',
click: this.undeveloped
},
{
title: '选项',
click: this.undeveloped
},
{
type: 'separator'
},
{
type: '时钟显示',
click: this.undeveloped
} }
] ]
}, },
{ {
title: 'ATS终端操作', title: '调试',
operate: '', operate: '',
children: [ children: []
{
title: '当天运行车计划',
click: this.undeveloped
}, },
{ {
title: '出入库预告', title: '窗口',
click: this.undeveloped
}
]
},
{
title: '计划车操作',
operate: '', operate: '',
children: [ children: []
{
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: '取消下行全线扣车',
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('实现中......', '提示', {

View File

@ -1,102 +1,108 @@
<template> <template>
<div v-if="isShowBtn" id="menuButtons_box" class="menu menuButton" style="height: 35px;" :style="{left: point.x+'px', bottom: point.y+'px' }"> <div v-if="isShowBtn" id="menuButtons_box" class="menu menuButton" style="height: 35px;" :style="{left: point.x+'px', bottom: point.y+'px' }">
<button :id="Signal.arrangementRoute.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Signal.arrangementRoute.button.operation, ['Signal'])"> <button :id="Signal.arrangementRoute.button.domId" class="button_box" @click="buttonDown(Signal.arrangementRoute.button.operation, ['Signal','SignalButton'])">
<span style="color: black"> <span :style="{ color: operation === Signal.arrangementRoute.button.operation ? '#ccc':'black'}">
<center><b></b><b></b></center> <center><b></b><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :id="MixinCommand.totalCancel.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(MixinCommand.totalCancel.button.operation, ['Signal','SignalButton'])"> <button :id="MixinCommand.totalCancel.button.domId" class="button_box" @click="buttonDown(MixinCommand.totalCancel.button.operation, ['Signal','SignalButton'])">
<span style="color: black;"> <span :style="{color: operation === MixinCommand.totalCancel.button.operation ? '#ccc': 'black'}">
<center><b></b></center> <center><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :id="Signal.reopenSignal.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Signal.reopenSignal.button.operation, ['Signal'])"> <button :id="Signal.reopenSignal.button.domId" class="button_box" @click="buttonDown(Signal.reopenSignal.button.operation, ['Signal'])">
<span style="color: black;"> <span :style="{color: operation === Signal.reopenSignal.button.operation ? '#ccc': 'black'}">
<center><b></b><b></b></center> <center><b></b><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :id="Station.guideLock.button.domId" class="button_box" :style="{width: width+'px', backgroundColor: guideLockLeftFlag? guideColorDown: guideColorUp}" @click="guideLockLeftButtonDown()"> <button :id="Signal.guide.button.domId" class="button_box" @click="buttonDown(Signal.guide.button.operation, ['SignalButton'])">
<span style="color: #800000"> <span :style="{color: operation === Signal.guide.button.operation? '#ccc':'#800000'}">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="Station.guideLock.button.domId" :disabled="true" class="button_box" @click="buttonDown(Station.guideLock.button.operation, ['Button'])">
<span :style="{color: operation === Station.guideLock.button.operation?'#ccc':'#800000'}">
<center><b></b><b></b></center> <center><b></b><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :id="Signal.humanTrainRoute.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Signal.humanTrainRoute.button.operation, ['Signal','SignalButton'])"> <button :id="Signal.humanTrainRoute.button.domId" class="button_box" @click="buttonDown(Signal.humanTrainRoute.button.operation, ['Signal'])">
<span style="color: #800000"> <span :style="{color: operation === Signal.humanTrainRoute.button.operation ? '#ccc':'#800000'}">
<center><b></b></center> <center><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :id="Switch.locate.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Switch.locate.button.operation, ['Switch'])"> <button :id="Switch.locate.button.domId" class="button_box" @click="buttonDown(Switch.locate.button.operation, ['Switch'])">
<span style="color: black"> <span :style="{color: operation === Switch.locate.button.operation? '#ccc':'black'}">
<center><b></b><b></b></center> <center><b></b><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :id="Switch.reverse.button.domId" class="button_box" :style="{width: width+'px',backgroundColor:buttonUpColor}" @click="buttonDown(Switch.reverse.button.operation, ['Switch'])"> <button :id="Switch.reverse.button.domId" class="button_box" @click="buttonDown(Switch.reverse.button.operation, ['Switch'])">
<span style="color: black"> <span :style="{color: operation === Switch.reverse.button.operation? '#ccc':'black'}">
<center><b></b><b></b></center> <center><b></b><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :id="Switch.lock.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Switch.lock.button.operation, ['Switch'])"> <button :id="Switch.lock.button.domId" class="button_box" @click="buttonDown(Switch.lock.button.operation, ['Switch'])">
<span style="color: black"> <span :style="{color: operation === Switch.lock.button.operation ? '#ccc':'black'}">
<center><b></b><b></b></center> <center><b></b><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :id="Switch.unlock.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Switch.unlock.button.operation, ['Switch'])"> <button :id="Switch.unlock.button.domId" class="button_box" @click="buttonDown(Switch.unlock.button.operation, ['Switch'])">
<span style="color: black"> <span :style="{color: operation === Switch.unlock.button.operation ? '#ccc':'black'}">
<center><b></b><b></b></center> <center><b></b><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :id="MixinCommand.block.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(MixinCommand.lock.button.operation, ['Switch', 'Signal'])"> <button :id="MixinCommand.block.button.domId" class="button_box" @click="buttonDown(MixinCommand.lock.button.operation, ['Switch', 'Signal'])">
<span style="color: black"> <span :style="{color: operation === MixinCommand.block.button.operation ? '#ccc':'black'}">
<center><b></b><b></b></center> <center><b></b><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :id="MixinCommand.functionButton.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(MixinCommand.functionButton.button.operation, ['StationStand', 'Station'])"> <button :id="MixinCommand.functionButton.button.domId" class="button_box" @click="buttonDown(MixinCommand.functionButton.button.operation, ['StationStand', 'Station'])">
<span style="color: black;"> <span :style="{color: operation === MixinCommand.functionButton.button.operation ? '#ccc':'black'}">
<center><b></b><b></b></center> <center><b></b><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :id="111" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown()"> <button :id="111" class="button_box" @click="buttonDown()">
<span style="color: black;"> <span style="color: black;">
<center><b></b><b></b></center> <center><b></b><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :disabled="true" :id="222" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown()"> <button :id="222" :disabled="true" class="button_box" @click="buttonDown()">
<span style="color: black;"> <span style="color: black;">
<center><b></b><b></b></center> <center><b></b><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :id="Command.cancel.clearMbm.domId" class="button_box" :style="{width:width+'px',backgroundColor:buttonUpColor}" @click="buttonDown(Command.cancel.clearMbm.operation)"> <button :id="Command.cancel.clearMbm.domId" class="button_box" @click="commandClear">
<span style="color: black;"> <span style="color: black;">
<center><b></b><b></b></center> <center><b></b><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :id="333" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown()"> <button :id="333" class="button_box" @click="commandOrders">
<span style="color: black;"> <span style="color: black;">
<center><b></b><b></b></center> <center><b></b><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :id="444" class="button_box" :style="{width: width+'px', backgroundColor: buttonUpColor}" @click="buttonDown()"> <button :id="444" class="button_box" @click="buttonDown()">
<span style="color: black;"> <span style="color: black;">
<center><b></b><b></b></center> <center><b></b><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
</span> </span>
</button> </button>
<button :id="555" class="button_box" :style="{width: width+'px', backgroundColor: buttonUpColor}" @click="buttonDown()"> <button :id="555" class="button_box" @click="buttonDown()">
<span style="color: black;"> <span style="color: black;">
<center><b></b><b></b></center> <center><b></b><b></b></center>
<center><b></b><b></b></center> <center><b></b><b></b></center>
@ -104,26 +110,35 @@
</button> </button>
<password-box ref="password" @checkOver="passWordCommit" @checkCancel="clearOperate" /> <password-box ref="password" @checkOver="passWordCommit" @checkCancel="clearOperate" />
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" /> <notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
<pop-menu ref="popMenu" :menu="menu" />
<train-route ref="trainRoute" @routeCommit="routeCommit" @routeCancel="clearOperate" />
<shunt-route ref="shuntRoute" @routeCommit="routeCommit" @routeCancel="clearOperate" />
</div> </div>
</template> </template>
<script> <script>
import PopMenu from '@/components/PopMenu';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler'; import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import OperationHandler from '@/scripts/cmdPlugin/OperationHandler'; import OperationHandler from '@/scripts/cmdPlugin/OperationHandler';
import Handler from '@/scripts/cmdPlugin/Handler'; import Handler from '@/scripts/cmdPlugin/Handler';
import PasswordBox from './dialog/childDialog/passwordInputBox.vue'; import PasswordBox from './dialog/childDialog/passwordInputBox.vue';
import TrainRoute from './dialog/trainRoute.vue';
import ShuntRoute from './dialog/shuntRoute.vue';
import CMD from '@/scripts/cmdPlugin/CommandEnum'; import CMD from '@/scripts/cmdPlugin/CommandEnum';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo'; import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import { MouseEvent } from '@/scripts/ConstDic'; import { MouseEvent, DeviceMenu } from '@/scripts/ConstDic';
import CenterConfig from '../../../../views/newMap/newMapdraft/mapoperate/displayConfig/centerConfig'; import { EventBus } from '@/scripts/event-bus';
export default { export default {
name: 'MapButtonMenu', name: 'MapButtonMenu',
components: { components: {
CenterConfig, // CenterConfig,
PasswordBox, PasswordBox,
NoticeInfo NoticeInfo,
PopMenu,
TrainRoute,
ShuntRoute
}, },
props: { props: {
selected: { selected: {
@ -137,26 +152,37 @@
return { return {
point: { point: {
x: 0, x: 0,
y: 30 y: 0
}, },
operation: '0', operation: '',
buttonName: '', buttonName: '',
guideColorDown: '#FEEE1A', guideColorDown: '#FEEE1A',
guideColorUp: '#DCDCDC', guideColorUp: '#DCDCDC',
buttonDownColor: '#FEEE1A', buttonDownColor: '#FBFBFB',
buttonUpColor: '#DCDCDC', buttonUpColor: '#F0F0F0',
width: 60, width: 45,
tempData: null, tempData: null,
offset: {}, offset: {},
commandTypeList: [], commandTypeList: [],
menuSignal: null,
cmdTypeList: [], cmdTypeList: [],
deviceList: [], deviceList: [],
timeNode: 0, // 15 timeNode: 0, // 15
deviceTimeNode: 0, // 15 deviceTimeNode: 0, // 15
routeDataMap: null, // btnCodeList key routeDataMap: null, // btnCodeList key
routeButtonCodeList: [], // btnCodeList code list routeButtonCodeList: [], // btnCodeList code list
guideLockRightFlag: false, menu: [
guideLockLeftFlag: false {
label: '命令下达',
handler: this.commandOrders
},
{
label: '命令清除',
handler: this.commandClear
}
],
switchOperation: [],
route: null
}; };
}, },
computed: { computed: {
@ -234,8 +260,13 @@
this.commandTypeList = []; this.commandTypeList = [];
this.$store.dispatch('menuOperation/setButtonOperation', null); this.$store.dispatch('menuOperation/setButtonOperation', null);
this.clearOperate(); this.clearOperate();
this.guideLockRightFlag = false; },
this.guideLockLeftFlag = false; '$store.state.menuOperation.menuCount': function (val) {
if (this.$store.getters['menuOperation/checkDialogIsOpen'](DeviceMenu.Cancel)) {
this.$refs && this.$refs.popMenu && this.$refs.popMenu.resetShowPosition(this.$store.state.menuOperation.menuPosition);
} else {
this.$refs && this.$refs.popMenu && this.$refs.popMenu.close();
}
}, },
'$store.state.socket.simulationTimeSync': function (val) { '$store.state.socket.simulationTimeSync': function (val) {
if (this.timeNode && val - this.timeNode >= 15) { if (this.timeNode && val - this.timeNode >= 15) {
@ -255,6 +286,33 @@
this.routeDataMap = null; this.routeDataMap = null;
this.routeButtonCodeList = []; this.routeButtonCodeList = [];
}, },
mounted() {
EventBus.$on('arrangementRouteMenu', (signal) => {
this.clearOperate();
this.buttonDown(this.Signal.arrangementRoute.button.operation, ['Signal', 'SignalButton']);
if (signal.signalButtonList && signal.signalButtonList.length) {
const deviceCode = signal.signalButtonList.find(buttonCode => {
const device = this.$store.getters['map/getDeviceByCode'](buttonCode);
return device.type === 'PICK';
});
this.deviceList.push(this.$store.getters['map/getDeviceByCode'](deviceCode));
}
this.menuSignal = signal;
this.arrangementRouteOperation(this.deviceList, this.menuSignal);
});
this.buttonDown(this.Signal.arrangementRoute.button.operation, ['Signal', 'SignalButton']);
this.switchOperation = [
this.Switch.lock.button.operation,
this.Switch.unlock.button.operation,
this.Switch.locate.button.operation,
this.Switch.reverse.button.operation,
this.Switch.block.button.operation,
this.Switch.unblock.button.operation
];
EventBus.$on('setMenuButtonPosition', (offset) => {
this.point.y = offset;
});
},
methods: { methods: {
// //
passWordCommit(data) { passWordCommit(data) {
@ -278,12 +336,6 @@
trainingOperation(operate) { trainingOperation(operate) {
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => { this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) { if (valid) {
/* 引导总锁输入面后 处理按钮选中状态 */
if (operate.operationPre === this.Switch.guideLock.leftButton.operation || operate.operation === this.Switch.guideLock.leftButton.operation) {
this.guideLockLeftFlag = !this.guideLockLeftFlag;
} else if (operate.operationPre === this.Switch.guideLock.rightButton.operation || operate.operation === this.Switch.guideLock.rightButton.operation) {
this.guideLockRightFlag = !this.guideLockRightFlag;
}
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true }); this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
} }
}).catch((error) => { }).catch((error) => {
@ -319,10 +371,8 @@
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => { this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) { if (valid) {
// //
if (this.guideLockRightFlag) {
operate.nextCmdType = CMD.Switch.CMD_SWITCH_MASTER_UNBLOCK; operate.nextCmdType = CMD.Switch.CMD_SWITCH_MASTER_UNBLOCK;
operate.param = {right: false}; operate.param = {right: false};
}
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true }); this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
operate['operateNext'] = this.Command.close.password.operation; operate['operateNext'] = this.Command.close.password.operation;
this.$refs.password.doShow(operate); this.$refs.password.doShow(operate);
@ -337,10 +387,8 @@
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => { this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) { if (valid) {
// //
if (this.guideLockRightFlag) {
operate.nextCmdType = CMD.Switch.CMD_SWITCH_MASTER_UNBLOCK; operate.nextCmdType = CMD.Switch.CMD_SWITCH_MASTER_UNBLOCK;
operate.param = {right: true}; operate.param = {right: true};
}
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true }); this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
operate['operateNext'] = this.Command.close.password.operation; operate['operateNext'] = this.Command.close.password.operation;
this.$refs.password.doShow(operate); this.$refs.password.doShow(operate);
@ -353,8 +401,12 @@
const operate = { const operate = {
operation: operation operation: operation
}; };
// // 684
const operationList = [this.Signal.humanTrainRoute.button.operation, this.Section.fault.button.operation]; const operationList = [
this.Signal.humanTrainRoute.button.operation,
this.Section.fault.button.operation,
this.Signal.guide.button.operation
];
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => { this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) { if (valid) {
this.operation = operation; this.operation = operation;
@ -400,15 +452,27 @@
deviceList.forEach((device, index) =>{ deviceList.forEach((device, index) =>{
name = name + (index ? '-' : '') + device.code; name = name + (index ? '-' : '') + device.code;
}); });
if (this.menuSignal) {
const signalName = this.menuSignal.code;
return this.routeButtonCodeList.some(item => item.includes(name) || item.includes(signalName));
} else {
return this.routeButtonCodeList.some(item => item.includes(name)); return this.routeButtonCodeList.some(item => item.includes(name));
}
}, },
// OR //
arrangementRouteOperation(deviceList) { handelReopenSignal(device) {
const operate = { const operate = {
operation: this.Signal.arrangementRoute.button.operation operation: this.Signal.reopenSignal.button.operation,
code: device.code,
param: { signalCode: device.code }
}; };
this.$store.dispatch('training/nextNew', operate).then(({valid, response}) => {
}).catch(() => this.$refs.noticeInfo.doShow() );
},
//
arrangementRouteOperation(deviceList) {
const operate = { operation: this.Signal.arrangementRoute.button.operation };
if (!this.routeDataMap) { this.handleRouteDataMap(); } if (!this.routeDataMap) { this.handleRouteDataMap(); }
if (!this.checkHaveRoute(deviceList)) { // deviceList if (!this.checkHaveRoute(deviceList)) { // deviceList
this.$message.error('无效的进路按钮'); this.$message.error('无效的进路按钮');
this.clearOperate(); this.clearOperate();
@ -416,7 +480,6 @@
} }
this.deviceTimeNode = this.$store.state.socket.simulationTimeSync; this.deviceTimeNode = this.$store.state.socket.simulationTimeSync;
const signal = this.$store.getters['map/getDeviceByCode'](deviceList[0].signalCode || deviceList[0].code);// deviceList[0] SignalButton || Signal const signal = this.$store.getters['map/getDeviceByCode'](deviceList[0].signalCode || deviceList[0].code);// deviceList[0] SignalButton || Signal
console.log(deviceList, signal, '***************');
if (deviceList.length === 1 && !signal.routeLock) { // if (deviceList.length === 1 && !signal.routeLock) { //
operate.code = deviceList[0].code; operate.code = deviceList[0].code;
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => { this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
@ -429,15 +492,6 @@
}).catch(() => { }).catch(() => {
this.$refs.noticeInfo.doShow(); this.$refs.noticeInfo.doShow();
}); });
} else if (deviceList.length === 1 && signal.routeLock) { //
operate.operation = this.Signal.reopenSignal.button.operation;
operate.over = true;
operate.cmdType = CMD.Signal.CMD_SIGNAL_REOPEN_SIGNAL;
operate.code = signal.code;
operate.param = {signalCode: signal.code};
this.$store.dispatch('training/nextNew', operate).then(({valid, response}) => {
this.clearOperate();
}).catch(() => this.$refs.noticeInfo.doShow() );
} else if (deviceList.length > 1) { } else if (deviceList.length > 1) {
let key = ''; let key = '';
deviceList.forEach((item, index) => { deviceList.forEach((item, index) => {
@ -445,83 +499,91 @@
}); });
const route = this.routeDataMap[key]; const route = this.routeDataMap[key];
if (route) { if (route) {
operate.over = true;
operate.cmdType = CMD.Signal.CMD_SIGNAL_SET_ROUTE;
operate.code = deviceList[deviceList.length - 1].code; operate.code = deviceList[deviceList.length - 1].code;
operate.param = {routeCode: route.code}; operate.param = {routeCode: route.code};
this.route = route;
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => { this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
this.deviceTimeNode = 0; this.deviceTimeNode = 0;
this.$store.dispatch('training/updateMapState',
[{code: this.deviceList[0].code, _type: this.deviceList[0]._type, hasSelected: 0}, {code: this.deviceList[1].code, _type: this.deviceList[1]._type, hasSelected: 1}]);
}).catch(() => { }).catch(() => {
this.deviceTimeNode = 0; this.deviceTimeNode = 0;
this.clearOperate();
this.$refs.noticeInfo.doShow(); this.$refs.noticeInfo.doShow();
}).finally(() => { this.clearOperate(); }); });
} else if (this.menuSignal) {
key = '';
deviceList.forEach((item, index) => {
key = key + (index ? '-' : '') + (index ? item.code : this.menuSignal.code);
});
const route = this.routeDataMap[key];
if (route) {
operate.code = deviceList[deviceList.length - 1].code;
operate.param = {routeCode: route.code};
this.route = route;
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
this.deviceTimeNode = 0;
this.$store.dispatch('training/updateMapState',
[{code: this.deviceList[0].code, _type: this.deviceList[0]._type, hasSelected: 0}, {code: this.deviceList[1].code, _type: this.deviceList[1]._type, hasSelected: 1}]);
}).catch(() => {
this.deviceTimeNode = 0;
this.clearOperate();
this.$refs.noticeInfo.doShow();
});
}
} }
} }
}, },
// //
handelTotalCancel(model) { handelTotalCancel(model) {
const operate = { const operate = {
over: true,
code: model.code, code: model.code,
operation: this.$store.state.menuOperation.buttonOperation, operation: this.$store.state.menuOperation.buttonOperation,
cmdType: CMD.Signal.CMD_SIGNAL_CANCEL_ROUTE,
param: { param: {
signalCode: model._type === 'Signal' ? model.code : model.signalCode signalCode: model._type === 'Signal' ? model.code : model.signalCode
} }
}; };
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => { this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
this.clearOperate(); }).catch(() => {
}).catch((error) => {
this.clearOperate();
console.error(error);
this.$refs.noticeInfo.doShow(); this.$refs.noticeInfo.doShow();
}); });
}, },
// //
handleGuideSignal(model) { handleGuideSignal(model) {
const operate = { const operate = {
over: true,
code: model.code, code: model.code,
operation: this.Signal.guide.button.operation, operation: this.Signal.guide.button.operation,
cmdType: CMD.Signal.CMD_SIGNAL_ROUTE_GUIDE,
param: {signalCode: model.signalCode} param: {signalCode: model.signalCode}
}; };
const signal = this.$store.getters['map/getDeviceByCode'](model.signalCode); this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
// 15s this.$store.dispatch('training/updateMapState', [{code: model.code, _type: model._type, hasSelected: 1}]);
if (signal.guideTime) { }).catch(() => {
this.sendCommand(operate); this.$refs.noticeInfo.doShow();
} else { });
operate.nextCmdType = CMD.Signal.CMD_SIGNAL_ROUTE_GUIDE;
this.$refs.password.doShow(operate);
}
}, },
// //
handleTotalHumanSolution(model) { handleTotalHumanSolution(model) {
const operate = { const operate = {
over: true,
code: model.code, code: model.code,
operation: this.$store.state.menuOperation.buttonOperation, operation: this.$store.state.menuOperation.buttonOperation,
val: model.code, val: model.code,
cmdType: CMD.Signal.CMD_SIGNAL_HUMAN_RELEASE_ROUTE param: { signalCode: model.code }
}; };
const signal = this.$store.getters['map/getDeviceByCode'](model.signalCode || model.code); this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
if (model._type === 'SignalButton' && model.type === 'PICK' && signal.routeLock) { }).catch(() => {
operate.param = {signalCode: model.signalCode}; this.$refs.noticeInfo.doShow();
this.sendCommand(operate); });
} else if (model._type === 'Signal' && model.type === 'SHUNTING' && signal.routeLock) {
operate.param = {signalCode: model.code};
this.sendCommand(operate);
}
}, },
handelSwitchOperate(model) { handelSwitchOperate(model) {
const operate = { const operate = {
over: true,
code: model.code, code: model.code,
operation: this.$store.state.menuOperation.buttonOperation, operation: this.$store.state.menuOperation.buttonOperation,
cmdType: this.cmdType,
param: { switchCode: model.code} param: { switchCode: model.code}
}; };
this.sendCommand(operate); this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
}).catch(() => {
this.$refs.noticeInfo.doShow();
});
}, },
// //
sendCommand(operate) { sendCommand(operate) {
@ -572,17 +634,16 @@
this.sendCommand(operate); this.sendCommand(operate);
}, },
handleGuideLock(model) { handleGuideLock(model) {
const signal = this.$store.getters['map/getDeviceByCode'](model.signalCode);
if (signal && (this.guideLockRightFlag && signal.right) || (this.guideLockLeftFlag && !signal.right)) {
const operate = { const operate = {
over: true,
code: model.code, code: model.code,
operation: this.guideLockRightFlag ? this.Switch.guideLock.rightButton : this.Switch.guideLock.leftButton, operation: this.Signal.guide.button.operation,
nextCmdType: CMD.Switch.CMD_SWITCH_MASTER_LOCK,
param: {signalCode: model.signalCode} param: {signalCode: model.signalCode}
}; };
this.$refs.password.doShow(operate); this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
} }).catch((e) => {
this.$refs.noticeInfo.doShow();
this.clearOperate();
});
}, },
handelFaultSection(model) { handelFaultSection(model) {
if (model._type === 'Section') { if (model._type === 'Section') {
@ -604,27 +665,28 @@
return; return;
} }
const buttonOperation = this.$store.state.menuOperation.buttonOperation; const buttonOperation = this.$store.state.menuOperation.buttonOperation;
const switchOperation = [ // if (model._type === 'SignalButton' && model.type === 'GUIDE') {
this.Switch.lock.button.operation, // this.handleGuideLock(model);
this.Switch.unlock.button.operation, // this.handleGuideSignal(model);
this.Switch.locate.button.operation, // } else
this.Switch.reverse.button.operation, if (buttonOperation && this.commandTypeList.includes(model._type)) {
this.Switch.block.button.operation,
this.Switch.unblock.button.operation
];
if ((this.guideLockLeftFlag || this.guideLockRightFlag) && model._type === 'SignalButton' && model.type === 'GUIDE') {
this.handleGuideLock(model);
} else if (buttonOperation && this.commandTypeList.includes(model._type)) {
if (buttonOperation === this.MixinCommand.totalCancel.button.operation) { if (buttonOperation === this.MixinCommand.totalCancel.button.operation) {
this.handelTotalCancel(model); this.handelTotalCancel(model);
} else if (buttonOperation === this.Signal.humanTrainRoute.button.operation) { } else if (buttonOperation === this.Signal.humanTrainRoute.button.operation) {
this.handleTotalHumanSolution(model); this.handleTotalHumanSolution(model);
} else if (switchOperation.includes(buttonOperation)) { } else if (this.switchOperation.includes(buttonOperation)) {
this.handelSwitchOperate(model); this.handelSwitchOperate(model);
} else if (buttonOperation === this.Signal.lock.button.operation || buttonOperation === this.Signal.unlock.button.operation) { } else if (buttonOperation === this.Signal.lock.button.operation || buttonOperation === this.Signal.unlock.button.operation) {
this.handelSignalBlockOrUnblock(model); this.handelSignalBlockOrUnblock(model);
} else if (buttonOperation === this.Section.fault.button.operation) { } else if (buttonOperation === this.Section.fault.button.operation) {
this.handelFaultSection(model); this.handelFaultSection(model);
} else if (buttonOperation === this.Signal.reopenSignal.button.operation) {
this.handelReopenSignal(model);
} else if (buttonOperation === this.Signal.arrangementRoute.button.operation) {
this.deviceList.push(model);
this.arrangementRouteOperation(this.deviceList);
} else if (buttonOperation === this.Signal.guide.button.operation ) {
this.handleGuideSignal(model);
} else { } else {
this.clearOperate(); this.clearOperate();
} }
@ -633,7 +695,8 @@
this.handleGuideSignal(model); this.handleGuideSignal(model);
} else if (model._type === 'SignalButton' && model.type === 'CHANGE_DIRECTION') { } else if (model._type === 'SignalButton' && model.type === 'CHANGE_DIRECTION') {
// //
this.changeDirection(model); // this.changeDirection(model);
this.clearOperate();
} else if (model._type === 'SignalButton' && !this.checkSignalBlock(model.signalCode) || (model._type === 'Signal' && !model.blockade)) { } else if (model._type === 'SignalButton' && !this.checkSignalBlock(model.signalCode) || (model._type === 'Signal' && !model.blockade)) {
this.deviceList.push(model); this.deviceList.push(model);
this.arrangementRouteOperation(this.deviceList); this.arrangementRouteOperation(this.deviceList);
@ -650,29 +713,80 @@
} else { return false; } } else { return false; }
}, },
clearOperate() { // clearOperate() { //
this.deviceList && this.deviceList.length && this.$store.dispatch('training/updateMapState', [{code: this.deviceList[0].code, _type: this.deviceList[0]._type, hasSelected: 0}]); const deviceState = [];
this.deviceList = []; if (this.deviceList && this.deviceList[0]) {
Handler.clear(); // deviceState.push({code: this.deviceList[0].code, _type: this.deviceList[0]._type, hasSelected: 0});
this.$store.dispatch('menuOperation/setButtonOperation', null);
},
changeDirection(model) {
const operate = {
over: true,
code: model.code,
operation: this.CTCCommand.assistPressDownTurnDirection.menu.operation,
cmdType: CMD.CTC.CTC_ASSIST_PRESS_DOWN_TURN_DIRECTION,
param: {
labelEnum:model.labelEnum,
stationCode:model.stationCode
} }
}; if (this.deviceList && this.deviceList[1]) {
deviceState.push({code: this.deviceList[1].code, _type: this.deviceList[0]._type, hasSelected: 0});
}
this.$store.dispatch('training/updateMapState', deviceState);
this.deviceList = [];
this.menuSignal = null;
Handler.clear(); //
this.$store.dispatch('menuOperation/setButtonOperation', this.operation);
},
routeCommit(trainCode, duration) {
const operate = {over: true, cmdType: CMD.CTC.CTC_SET_ROUTE, param:{ tripNumber: trainCode || '', duration: duration >= 0 ? duration : null, force: false }};
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => { this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
// this.clearOperate(); this.clearOperate();
}).catch((error) => { }).catch((e) => {
// this.clearOperate(); console.log(e, 'error');
console.error(error);
this.$refs.noticeInfo.doShow(); this.$refs.noticeInfo.doShow();
this.clearOperate();
}); });
},
commandOrders() {
if (this.operation === OperationEvent.Signal.arrangementRoute.button.operation) {
if (this.deviceList && this.deviceList[0] && this.deviceList[0].type === 'PICK') {
this.$refs.trainRoute.doShow(this.route);
} else if (this.deviceList && this.deviceList[0] && this.deviceList[0]._type === 'Signal') {
this.$refs.shuntRoute.doShow(this.route);
} else {
this.routeCommit();
}
} else if (this.operation === OperationEvent.MixinCommand.totalCancel.button.operation) {
const operate = {over: true, cmdType: CMD.Signal.CMD_SIGNAL_CANCEL_ROUTE};
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
this.clearOperate();
}).catch((e) => {
this.$refs.noticeInfo.doShow();
this.clearOperate();
});
} else if (this.operation === OperationEvent.Signal.reopenSignal.button.operation) {
const operate = {over: true, cmdType: CMD.Signal.CMD_SIGNAL_REOPEN_SIGNAL};
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
this.clearOperate();
}).catch(() => {
this.$refs.noticeInfo.doShow();
this.clearOperate();
});
} else if (this.operation === OperationEvent.Signal.guide.button.operation) {
const operate = {over: true, cmdType: CMD.Signal.CMD_SIGNAL_ROUTE_GUIDE};
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
this.$store.dispatch('training/updateMapState', [{code: this.selected.code, _type: this.selected._type, hasSelected: 0}]);
this.clearOperate();
}).catch(() => {
this.$store.dispatch('training/updateMapState', [{code: this.selected.code, _type: this.selected._type, hasSelected: 0}]);
this.$refs.noticeInfo.doShow();
this.clearOperate();
});
} else if (this.operation === OperationEvent.Signal.humanTrainRoute.button.operation) {
const operate = {over: true, cmdType: CMD.Signal.CMD_SIGNAL_HUMAN_RELEASE_ROUTE};
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
}).catch((e) => {
this.$refs.noticeInfo.doShow();
}).finally(() => { this.clearOperate(); });
} else if (this.switchOperation.includes(this.operation)) {
const operate = {over:true, cmdType: this.cmdType};
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
}).catch(() => {
this.$refs.noticeInfo.doShow();
}).finally(() => { this.clearOperate(); });
}
},
commandClear() {
this.clearOperate();
} }
} }
}; };
@ -685,9 +799,15 @@
float: left; float: left;
font-size: 13px; font-size: 13px;
height: 35px; height: 35px;
width: 45px;
background: #F0F0F0;
} }
.menu { .menu {
background-color: $bg; background: -webkit-linear-gradient(#FDFDFE, #DEE3F3);
background: -o-linear-gradient(#FDFDFE, #DEE3F3);
background: -moz-linear-gradient(#FDFDFE, #DEE3F3);
background: linear-gradient(#FDFDFE, #DEE3F3);
width: 100%;
position: fixed; position: fixed;
border: 1px solid gray; border: 1px solid gray;
z-index: 10; z-index: 10;

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

@ -3666,8 +3666,126 @@ export const OperationEvent = {
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) {
@ -201,8 +202,72 @@ function handle(state, data) {
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;
} }
} }
// 操作聊天信息 // 操作聊天信息
@ -353,6 +418,10 @@ const socket = {
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,6 +15,16 @@
<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
@ -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

@ -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

@ -3,28 +3,48 @@
title="车站股道图" title="车站股道图"
:visible.sync="dialogVisible" :visible.sync="dialogVisible"
width="99%" width="99%"
z-index="3000"
top="5vh" top="5vh"
class="lineBoard" class="lineBoard"
center center
:before-close="handleClose"> :before-close="handleClose"
>
<div style="height: 500px; overflow-y: auto;background: #DFE3E6;padding: 7px;"> <div style="height: 500px; overflow-y: auto;background: #DFE3E6;padding: 7px;">
<div style="width: 100%;display: flex;align-items: center;margin-bottom: 10px;"> <div style="width: 100%;display: flex;align-items: center;margin-bottom: 10px;">
<div <div
:key="item.code"
v-for="item in stationList" v-for="item in stationList"
:key="item.code"
class="tab-box" class="tab-box"
:style="{background: selectCode === item.code ? '#F1F1F1': '#DBDBDB', color: selectCode === item.code ? '#000': '#ccc'}"
@click="selectStandCode(item.code)" @click="selectStandCode(item.code)"
:style="{background: selectCode === item.code ? '#F1F1F1': '#DBDBDB', color: selectCode === item.code ? '#000': '#ccc'}"> >
{{ item.name }} {{ item.name }}
</div> </div>
</div> </div>
<div :key="item.id" v-for="item in infoList" style="display: flex; justify-content: space-between;border-top: 1px solid #fff;padding: 3px;height: 36px;align-items: center;"> <div v-for="item in trackList" :key="item.id" style="display: flex; justify-content: space-between;border-top: 1px solid #fff;padding: 3px;height: 36px;align-items: center;" :style="{background: item.oddNumber? '#BAC4CF':'#D2D8DB'}">
<div style="padding: 5px 20px;border-radius: 5px;border-width: 2px;border-style: solid;" <!--<div
:style="{borderColor: item.occupied ? '#f00': '#DFE3E6', fontWeight: item.occupied? 'bold': 'normal', color:item.occupied? '#f00':'#1e2024' }">{{item.trackName}}</div> style="padding: 5px 20px;border-radius: 5px;border-width: 2px;border-style: solid;width: 120px;"
<div>{{item.tripNumber}}</div> :style="{borderColor: item.occupied ? '#f00': '#DFE3E6', fontWeight: item.occupied? 'bold': 'normal', color:item.occupied? '#f00':'#1e2024' }"
<div style="background: #FFCBEC;border: 1px solid #315FD1;border-radius: 3px;font-size: 10px;">{{ item.trainType?'客':'' }}</div> >{{ item.trackName }}</div>-->
<div>{{item.trainDistanceInfo}}</div> <div style="width: 150px;display: flex;">
<div> <el-dropdown v-show="item.showTrack" trigger="click">
<div
style="width: 110px;padding: 5px 20px;border-radius: 5px;border-width: 2px;border-style: solid;display: flex;justify-content: space-between;background: #fff;"
:style="{borderColor: item.occupied ? '#f00': '#DFE3E6', fontWeight: item.occupied? 'bold': 'normal', color:item.occupied? '#f00':'#1e2024' }"
>
<span>{{ item.trackName }}</span>
<i class="el-icon-caret-bottom" />
</div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>黄金糕</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<div v-show="item.showTrack" style="width: 30px;height: 30px;background: #fff;border-radius: 5px;margin-left: 5px;" />
</div>
<div v-show="!item.noData" style="width: 80px;color: #f00;font-weight: bolder;">{{ item.tripNumber }}</div>
<div v-show="!item.noData" style="background: #FFCBEC;border: 1px solid #315FD1;border-radius: 3px;font-size: 10px;width: 15px;" :style="{borderColor:item.trainType?'#315FD1':'#DFE3E6'}">{{ item.trainType?'':'' }}</div>
<div v-show="!item.noData" style="width: 60px;">{{ item.trainDistanceInfo }}</div>
<div v-show="!item.noData" style="width: 120px;">
<el-select v-model="item.process" placeholder="请选择" size="mini" style="width: 120px;" :disabled="true"> <el-select v-model="item.process" placeholder="请选择" size="mini" style="width: 120px;" :disabled="true">
<el-option <el-option
v-for="elem in sectionStatusList" v-for="elem in sectionStatusList"
@ -34,60 +54,96 @@
/> />
</el-select> </el-select>
</div> </div>
<div style="display: flex;"> <div v-show="!item.noData" style="display: flex;width: 300px;">
<div :style="{ background: item.receivingNotice ? '#29CA42': '#ccc' }" class="button-box-fir" @click="doShowRecDep(item,'rec')">接预</div> <div v-show="item.receivingRouteCode" :style="{ background: item.receivingNotice ? '#29CA42': '#ccc' }" class="button-box-fir" @click="doShowRecDep(item,'rec')">接预</div>
<div <div
v-show="item.receivingRouteCode"
class="button-box-sec" class="button-box-sec"
:style="{ background: handleBackground(item.receivingRouteLock, item.receivingRouteAutoTrigger) }" :style="{ background: handleBackground(item.receivingRouteLock, item.receivingRouteAutoTrigger) }"
@contextmenu="popMenuShow(item, 'rec' ,$event)" @contextmenu="popMenuShow(item, 'rec' ,$event)"
@click="doShowRoute(item, 'rec')"> @click="doShowRoute(item, 'rec')"
>
{{ '接路' + (item.receivingRouteLock ? '':getRouteName(item.receivingRouteCode)) }} {{ '接路' + (item.receivingRouteLock ? '':getRouteName(item.receivingRouteCode)) }}
</div> </div>
<div :style="{ background: item.arrive ? '#29CA42': '#ccc' }" class="button-box-fir" style="margin-left: 10px;cursor: default;">到点</div> <div v-show="item.receivingRouteCode" :style="{ background: item.arrive ? '#29CA42': '#ccc' }" class="button-box-fir" style="margin-left: 10px;cursor: default;" @click="doShowRecDep(item, 'arrive')">到点</div>
</div> </div>
<div> <div v-show="!item.noData" style="width: 120px;color: #f00;">
<div>{{item.arriveTime}}</div> <el-row><div>{{ item.arriveTime || '-' }}</div></el-row>
<div>{{item.departureTime}}</div> <el-row><div>{{ item.departureTime|| '-' }}</div></el-row>
</div> </div>
<div> <div v-show="!item.noData" style="width: 120px;color: #f00;font-style:italic;">
<div>{{ item.planArriveTime }}</div> <el-row><div>{{ item.planArriveTime|| '-' }}</div></el-row>
<div>{{ item.planDepartureTime }}</div> <el-row><div>{{ item.planDepartureTime || '-' }}</div></el-row>
</div> </div>
<div></div><!--起点--终点--> <div v-show="!item.noData" style="width: 150px;color: #f00;">
<div style="display: flex;"> <el-row>{{ item.receivingDirection||'-' }}</el-row>
<div :style="{ background: item.departureNotice ? '#29CA42': '#ccc' }" class="button-box-fir" @click="doShowRecDep(item,'dep')">发预</div> <el-row>{{ item.departureDirection||'-' }}</el-row>
</div>
<div /><!--起点--终点-->
<div v-show="!item.noData" style="display: flex;width: 300px;">
<div v-show="item.departureRouteCode" :style="{ background: item.departureNotice ? '#29CA42': '#ccc' }" class="button-box-fir" @click="doShowRecDep(item,'dep')">发预</div>
<div <div
v-show="item.departureRouteCode"
class="button-box-sec" class="button-box-sec"
:style="{ background: handleBackground(item.departureRouteLock, item.departureRouteAutoTrigger) }" :style="{ background: handleBackground(item.departureRouteLock, item.departureRouteAutoTrigger) }"
@contextmenu="popMenuShow(item, 'dep' ,$event)" @contextmenu="popMenuShow(item, 'dep' ,$event)"
@click="doShowRoute(item, 'dep')"> @click="doShowRoute(item, 'dep')"
>
{{ '发路' + (item.departureRouteLock ? '':getRouteName(item.departureRouteCode)) }} {{ '发路' + (item.departureRouteLock ? '':getRouteName(item.departureRouteCode)) }}
</div> </div>
<div :style="{ background: item.departure ? '#29CA42': '#ccc' }" class="button-box-fir" style="margin-left: 10px;cursor: default;">发点</div> <div v-show="item.departureRouteCode" :style="{ background: item.departure ? '#29CA42': '#ccc' }" class="button-box-fir" style="margin-left: 10px;cursor: default;" @click="doShowRecDep(item, 'departure')">发点</div>
</div>
<div v-show="!item.noData" style="width: 80px;color: #f00;font-weight: bolder;">{{ item.tripNumber }}</div>
<div style="width: 120px" :style="{fontWeight: item.occupied? 'bold': 'normal', color:item.occupied? '#f00': '#1e2024' }">{{ item.showTrack ? item.trackName: '' }}</div>
</div>
</div>
<div style="background: #DFE3E6;">
<div style="padding: 5px;text-align: center;width: 700px;margin: 0 auto;">
<div style="background: #999EA7;display: flex;align-items: center;">
<div class="button-box">
<img :src="arrowPic" class="img-button">
</div>
<div class="button-box">
<img :src="controlPanelPic" class="img-button">
</div>
<div class="button-box">
<img :src="t3Pic" class="img-button">
</div>
<div class="button-box">
<img :src="panelPic" class="img-button">
</div>
<div class="button-box">
<img :src="trainPic" class="img-button">
</div>
<div class="button-box">
<img :src="linkPic" class="img-button">
</div>
<div class="button-box">
<img :src="cameraPic" class="img-button">
</div>
<div style="width: 270px;height: 36px; background: #fff;border-radius: 5px;" />
<div class="button-box">
<img :src="unknowPic" class="img-button">
</div>
<div class="button-box">
<div class="img-button"></div>
</div>
<div class="button-box">
<div class="img-button"></div>
</div>
</div> </div>
<div>{{ item.tripNumber }}</div>
<div :style="{fontWeight: item.occupied? 'bold': 'normal', color:item.occupied? '#f00': '#1e2024' }">{{ item.trackName }}</div>
</div> </div>
</div> </div>
<!--<div style="display: flex; justify-content: center;">-->
<!--<img class="img-box" :src="arrowPic" />-->
<!--<img class="img-box" :src="picT3" />-->
<!--<img class="img-box" :src="controlPanelPic" />-->
<!--<img class="img-box" :src="trainPic" />-->
<!--<img class="img-box" :src="controlPanel2Pic"/>-->
<!--<img class="img-box" :src="linkPic"/>-->
<!--<img class="img-box" :src="cameraPic"/>-->
<!--</div>-->
<div style="display: flex;margin-top: 5px;justify-content: space-around;background: #DEE2E5;"> <div style="display: flex;margin-top: 5px;justify-content: space-around;background: #DEE2E5;">
<div style="width: 49%;margin-top: 10px;"> <div style="width: 49%;margin-top: 10px;">
<div style="display: flex;align-items: center;"> <div style="display: flex;align-items: center;">
<div style="background: #0f0;">{{ `进路序列模式:&lt;${readOnly ? '只读':'可修改'}&gt;` }}</div> <div style="background: #0f0;">{{ `进路序列模式:&lt;${readOnlyMap[selectCode1] ? '只读':'可修改'}&gt;` }}</div>
<el-button size="mini" style="padding: 7px 4px;" disabled>修改申请</el-button> <el-button size="mini" style="padding: 7px 4px;" disabled>修改申请</el-button>
<el-button size="mini" style="padding: 7px 4px;" disabled>只读申请</el-button> <el-button size="mini" style="padding: 7px 4px;" disabled>只读申请</el-button>
<el-button size="mini" style="padding: 7px 4px;margin-left: 30px;">查找列车</el-button> <el-button size="mini" style="padding: 7px 4px;margin-left: 30px;">查找列车</el-button>
<el-input style="width: 70px;height: 25px;" size="mini" v-model="searchTrain" /> <el-input v-model="searchTrain" style="width: 70px;height: 25px;" size="mini" />
<div style="margin-left: 10px;">上下行</div> <div style="margin-left: 10px;">上下行</div>
<el-select size="mini" v-model="andDown" style="width: 80px;margin-left: 5px;"> <el-select v-model="andDown" size="mini" style="width: 80px;margin-left: 5px;">
<el-option <el-option
v-for="item in andDownList" v-for="item in andDownList"
:key="item.value" :key="item.value"
@ -96,7 +152,7 @@
/> />
</el-select> </el-select>
<div style="margin-left: 10px;">接车口</div> <div style="margin-left: 10px;">接车口</div>
<el-select size="mini" v-model="andDown" style="width: 100px;margin-left: 5px;" disabled> <el-select v-model="andDown" size="mini" style="width: 100px;margin-left: 5px;" disabled>
<el-option <el-option
v-for="item in andDownList" v-for="item in andDownList"
:key="item.value" :key="item.value"
@ -105,7 +161,7 @@
/> />
</el-select> </el-select>
<div style="margin-left: 10px;">发车口</div> <div style="margin-left: 10px;">发车口</div>
<el-select size="mini" v-model="andDown" style="width: 100px;margin-left: 5px;" disabled> <el-select v-model="andDown" size="mini" style="width: 100px;margin-left: 5px;" disabled>
<el-option <el-option
v-for="item in andDownList" v-for="item in andDownList"
:key="item.value" :key="item.value"
@ -115,11 +171,12 @@
</el-select> </el-select>
</div> </div>
<el-table <el-table
:data="tableData" :data="sequenceList"
style="width: 100%;margin-top: 10px;" style="width: 100%;margin-top: 10px;"
highlight-current-row highlight-current-row
:row-style="{ background: '#ff0' }" :row-style="{ background: '#ff0' }"
height="180" height="180"
:default-sort="{prop: 'startTime', order: 'ascending'}"
border border
> >
<el-table-column width="50" label="序号" align="center"> <el-table-column width="50" label="序号" align="center">
@ -136,8 +193,16 @@
<div style="width: 100%;height: 22px;" @contextmenu="popMenuShow(scope.row, '' ,$event)">{{ scope.row.autoTrigger? '√':'' }}</div> <div style="width: 100%;height: 22px;" @contextmenu="popMenuShow(scope.row, '' ,$event)">{{ scope.row.autoTrigger? '√':'' }}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column property="type" label="类型"/> <el-table-column property="departure" label="类型">
<el-table-column property="status" label="状态"/> <template slot-scope="scope">
<span>{{ scope.row.departure ? '发车':'接车' }}</span>
</template>
</el-table-column>
<el-table-column property="status" label="状态">
<template slot-scope="scope">
<span>{{ getRouteStatus(scope.row.status) }}</span>
</template>
</el-table-column>
<el-table-column property="startTime" label="开始时间" /> <el-table-column property="startTime" label="开始时间" />
<el-table-column property="planTime" label="计划时间" /> <el-table-column property="planTime" label="计划时间" />
<el-table-column property="direction" label="方向" /> <el-table-column property="direction" label="方向" />
@ -149,18 +214,19 @@
</el-table> </el-table>
<div style="width: 100%;display: flex;align-items: center;margin: 5px 0;"> <div style="width: 100%;display: flex;align-items: center;margin: 5px 0;">
<div <div
:key="item.code"
v-for="item in stationList" v-for="item in stationList"
:key="item.code"
class="tab-box" class="tab-box"
:style="{background: selectCode1 === item.code ? '#F1F1F1': '#DBDBDB', color: selectCode1 === item.code ? '#000': '#ccc'}"
@click="selectStandCode1(item.code)" @click="selectStandCode1(item.code)"
:style="{background: selectCode1 === item.code ? '#F1F1F1': '#DBDBDB', color: selectCode1 === item.code ? '#000': '#ccc'}"> >
{{ item.name }} {{ item.name }}
</div> </div>
</div> </div>
</div> </div>
<div style="width: 49%;margin-top: 10px;"> <div style="width: 49%;margin-top: 10px;">
<div style="display: flex;align-items: center;"> <div style="display: flex;align-items: center;">
<el-select size="mini" v-model="unknow" disabled> <el-select v-model="unknow" size="mini" disabled>
<el-option <el-option
v-for="item in unknowList" v-for="item in unknowList"
:key="item.value" :key="item.value"
@ -170,7 +236,7 @@
</el-select> </el-select>
<div>调机-J101</div> <div>调机-J101</div>
<el-button size="mini" disabled>进路预览</el-button> <el-button size="mini" disabled>进路预览</el-button>
<el-select size="mini" v-model="unknow1" disabled> <el-select v-model="unknow1" size="mini" disabled>
<el-option <el-option
v-for="item in unknowList1" v-for="item in unknowList1"
:key="item.value" :key="item.value"
@ -213,16 +279,18 @@
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 CameraPic from '@/assets/datie/camera.png';
import RecDep from '@/jmapNew/theme/datie_02/menus/dialog/recDep'
import RouteSelection from '@/jmapNew/theme/datie_02/menus/dialog/routeSelection1'; import RouteSelection from '@/jmapNew/theme/datie_02/menus/dialog/routeSelection1';
import PopMenu from '@/components/PopMenu'; import PopMenu from '@/components/PopMenu';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import { menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate'; import { menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import T3Pic from '@/assets/ctc_icon/t3.png';
import TrainPic from '@/assets/ctc_icon/train.png';
import PanelPic from '@/assets/ctc_icon/panel.png';
import LinkPic from '@/assets/ctc_icon/link.png';
import CameraPic from '@/assets/ctc_icon/camera.png';
import UnknowPic from '@/assets/ctc_icon/unknow.png';
export default { export default {
name: 'lineBoard', name: 'LineBoard',
components: { components: {
RecDep, RecDep,
RouteSelection, RouteSelection,
@ -231,23 +299,24 @@
data() { data() {
return { return {
menu: [{label: '设置自触', handler: this.setTrigger, disabled: false}, {label: '取消自触', handler: this.cancelTrigger, disabled: false}], menu: [{label: '设置自触', handler: this.setTrigger, disabled: false}, {label: '取消自触', handler: this.cancelTrigger, disabled: false}],
dialogVisible: false, dialogVisible: true,
triggerParam: {}, triggerParam: {},
selectCode: '', selectCode: '',
selectCode1: '', selectCode1: '',
readOnly: '',
arrowPic: ArrowPic, arrowPic: ArrowPic,
picT3: PicT3, picT3: PicT3,
controlPanelPic: ControlPanelPic, controlPanelPic: ControlPanelPic,
trainPic: TrainPic,
controlPanel2Pic: ControlPanel2Pic, controlPanel2Pic: ControlPanel2Pic,
t3Pic: T3Pic,
panelPic: PanelPic,
trainPic: TrainPic,
linkPic: LinkPic, linkPic: LinkPic,
cameraPic: CameraPic, cameraPic: CameraPic,
unknowPic: UnknowPic,
searchTrain: '', searchTrain: '',
andDown: 'all', andDown: 'all',
unknow: '', unknow: '',
unknow1: '', unknow1: '',
tableData: [],
tableData1: [], tableData1: [],
unknowList1: [{label: '全部机车', value: 'all'}], unknowList1: [{label: '全部机车', value: 'all'}],
unknowList: [{label: 'J101-执行中', value: 'J101'}], unknowList: [{label: 'J101-执行中', value: 'J101'}],
@ -263,8 +332,12 @@
{label: '流程终止', value: 'FINISH'} {label: '流程终止', value: 'FINISH'}
], ],
stationDataMap: {}, stationDataMap: {},
infoList : [] sequenceMap: {},
} sequenceList: [],
readOnlyMap: {},
standTrackSectionMap: {},
trackList: []
};
}, },
computed: { computed: {
...mapGetters('map', [ ...mapGetters('map', [
@ -276,15 +349,64 @@
'$store.state.socket.railCtcStatusMsg': function (val) { '$store.state.socket.railCtcStatusMsg': function (val) {
if (val && val.length) { if (val && val.length) {
val.forEach(item => { val.forEach(item => {
if (item) { if (item && item.routeSequence && item.routeSequence.lines && item.routeSequence.lines.length) {
this.stationDataMap[item.stationCode] = { trackView: item.trackView, routeSequence: item.routeSequence }; 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.infoList = this.stationDataMap[this.selectCode] ? this.stationDataMap[this.selectCode].trackView.lines: []; this.readOnlyMap[item.stationCode] = item.readOnly;
this.tableData = this.stationDataMap[this.selectCode1] ? this.stationDataMap[this.selectCode1].routeSequence.lines: [];
this.readOnly = this.stationDataMap[this.selectCode1] ? this.stationDataMap[this.selectCode1].routeSequence.readOnly: false;
};
} }
if (item && item.trackView && item.trackView.trackLineMap) {
for (const key in item.trackView.trackLineMap) {
if (this.standTrackSectionMap[key]) {
this.standTrackSectionMap[key].lines = item.trackView.trackLineMap[key];
}
}
}
if (item && item.trackView && item.trackView.sectionOccupiedMap) {
for (const key in item.trackView.sectionOccupiedMap) {
if (this.standTrackSectionMap[key]) {
this.standTrackSectionMap[key].occupied = item.trackView.sectionOccupiedMap[key];
}
}
}
});
this.sequenceList = [];
for (const key in this.sequenceMap) {
if (this.sequenceMap[key].stationCode === this.selectCode1) {
this.sequenceList.push(this.sequenceMap[key]);
}
}
this.trackList = [];
let oddNumber = true;
for (const key in this.standTrackSectionMap) {
if (this.standTrackSectionMap[key].belongStation === this.selectCode) {
if (this.standTrackSectionMap[key].lines && this.standTrackSectionMap[key].lines.length) {
this.standTrackSectionMap[key].lines.forEach((item, index) => {
this.trackList.push(Object.assign({}, item, { trackName: this.standTrackSectionMap[key].trackName, occupied: this.standTrackSectionMap[key].occupied, oddNumber: oddNumber, showTrack: index === 0 }));
});
oddNumber = !oddNumber;
} else {
this.trackList.push({trackName: this.standTrackSectionMap[key].trackName, occupied: this.standTrackSectionMap[key].occupied, noData: true, oddNumber: oddNumber, showTrack: true});
oddNumber = !oddNumber;
}
}
}
}
},
'$store.state.map.mapDataLoadedCount': function (val) { //
this.sectionList.forEach(item => {
if (item.standTrack) {
this.standTrackSectionMap[item.code] = { trackName: item.name, occupied: false, belongStation:item.belongStation, lines: [] };
}
});
}
},
mounted() {
this.dialogVisible = false;
}, },
methods: { methods: {
handleClose() { handleClose() {
@ -292,26 +414,53 @@
}, },
doShow() { doShow() {
this.dialogVisible = true; this.dialogVisible = true;
this.selectCode = this.stationList[0].code; if (this.stationList[0]) {
this.selectCode1 = this.stationList[0].code; this.selectStandCode(this.stationList[0].code);
this.infoList = this.stationDataMap[this.selectCode] ? this.stationDataMap[this.selectCode].trackView.lines: []; this.selectStandCode1(this.stationList[0].code);
this.tableData = this.stationDataMap[this.selectCode1] ? this.stationDataMap[this.selectCode1].routeSequence.lines: []; }
this.readOnly = this.stationDataMap[this.selectCode1] ? this.stationDataMap[this.selectCode1].routeSequence.readOnly: false;
}, },
selectStandCode(code) { selectStandCode(code) {
this.selectCode = code; this.selectCode = code;
this.infoList = this.stationDataMap[this.selectCode].trackView.lines; this.trackList = [];
for (const key in this.standTrackSectionMap) {
if (this.standTrackSectionMap[key].belongStation === this.selectCode) {
if (this.standTrackSectionMap[key].lines && this.standTrackSectionMap[key].lines.length) {
this.standTrackSectionMap[key].lines.forEach((item, index) => {
if (!index) {
this.trackList.push(Object.assign({}, item, { sectionName: this.standTrackSectionMap[key].sectionName, occupied: this.standTrackSectionMap[key].occupied }));
} else {
this.trackList.push(Object.assign({}, item));
}
});
} else {
this.trackList.push({sectionName: this.standTrackSectionMap[key].sectionName, occupied: this.standTrackSectionMap[key].occupied});
}
}
}
},
getRouteStatus(status) {
if (status === '2') {
return '触发完成';
} else if (status === '1') {
return '正在触发';
} else {
return '等待中';
}
}, },
selectStandCode1(code) { selectStandCode1(code) {
this.selectCode1 = code; this.selectCode1 = code;
this.tableData = this.stationDataMap[this.selectCode1].routeSequence.lines; this.sequenceList = [];
this.readOnly = this.stationDataMap[this.selectCode1].routeSequence.readOnly; for (const key in this.sequenceMap) {
if (this.sequenceMap[key].stationCode === this.selectCode1) {
this.sequenceList.push(this.sequenceMap[key]);
}
}
}, },
getRouteName(code) { getRouteName(code) {
if (code) { if (code) {
const route = this.$store.state.map.routeData[code]; const route = this.$store.state.map.routeData[code];
return route? route.name: '' return route ? route.name : '';
} else { return '' } } else { return ''; }
}, },
handleBackground(flag, trigger) { handleBackground(flag, trigger) {
if (flag) { if (flag) {
@ -330,27 +479,26 @@
if (type === 'rec') { if (type === 'rec') {
this.menu[0].disabled = item.receivingRouteAutoTrigger; this.menu[0].disabled = item.receivingRouteAutoTrigger;
this.menu[1].disabled = !item.receivingRouteAutoTrigger; this.menu[1].disabled = !item.receivingRouteAutoTrigger;
this.triggerParam = { stationCode: this.selectCode, tripNumber: item.tripNumber, routeCode: item.receivingRouteCode } this.triggerParam = { stationCode: this.selectCode, tripNumber: item.tripNumber, routeCode: item.receivingRouteCode };
} else if (type === 'dep') { } else if (type === 'dep') {
this.menu[0].disabled = item.departureRouteAutoTrigger; this.menu[0].disabled = item.departureRouteAutoTrigger;
this.menu[1].disabled = !item.departureRouteAutoTrigger; this.menu[1].disabled = !item.departureRouteAutoTrigger;
this.triggerParam = { stationCode: this.selectCode, tripNumber: item.tripNumber, routeCode: item.departureRouteCode } this.triggerParam = { stationCode: this.selectCode, tripNumber: item.tripNumber, routeCode: item.departureRouteCode };
} else { } else {
this.menu[0].disabled = item.autoTrigger; this.menu[0].disabled = item.autoTrigger;
this.menu[1].disabled = !item.autoTrigger; this.menu[1].disabled = !item.autoTrigger;
this.triggerParam = { stationCode: this.selectCode1, tripNumber: item.tripNumber, routeCode: item.routeCode } this.triggerParam = { stationCode: this.selectCode1, tripNumber: item.tripNumber, routeCode: item.routeCode };
} }
this.$refs.popMenu.resetShowPosition({x: e.x, y:e.y}); this.$refs.popMenu.resetShowPosition({x: e.x, y:e.y});
}, },
setTrigger() { setTrigger() {
const param = { ...this.triggerParam, trigger: true }; const param = { ...this.triggerParam, trigger: true };
commitOperate(menuOperate.CTC.autoTrigger, param, 3).then(({valid, operate})=>{ commitOperate(menuOperate.CTC.autoTrigger, param, 3).then(({valid, operate})=>{
this.loading = false; this.loading = false;
this.triggerParam = {}; this.triggerParam = {};
if (valid) { if (valid) {
this.doClose(); this.doClose();
this.$message.success('设置自动触发成功!') this.$message.success('设置自动触发成功!');
} }
}).catch((e) => { }).catch((e) => {
console.error(e); console.error(e);
@ -362,16 +510,15 @@
}, },
cancelTrigger() { cancelTrigger() {
const param = { ...this.triggerParam, trigger: false }; const param = { ...this.triggerParam, trigger: false };
console.log(menuOperate.CTC.autoTrigger, 'trigger');
commitOperate(menuOperate.CTC.autoTrigger, param, 3).then(({valid, operate})=>{ commitOperate(menuOperate.CTC.autoTrigger, param, 3).then(({valid, operate})=>{
this.triggerParam = {}; this.triggerParam = {};
if (valid) { if (valid) {
this.$message.success('取消自动触发成功!') this.$message.success('取消自动触发成功!');
} }
}).catch((e) => { }).catch((e) => {
console.error(e); console.error(e);
this.triggerParam = {}; this.triggerParam = {};
this.$message.error('取消自动触发失败!') this.$message.error('取消自动触发失败!');
}); });
} }
} }
@ -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,6 +143,9 @@ 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() {

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,8 +12,8 @@
</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>
<!-- 加载剧本 --> <!-- 加载剧本 -->
@ -196,6 +196,9 @@ export default {
this.changeOperateMode(); this.changeOperateMode();
} }
}); });
EventBus.$on('showLineBoard', () => {
this.showLineBoard();
});
}, },
methods: { methods: {
loadRunData() { loadRunData() {
@ -234,6 +237,22 @@ export default {
}); });
window.open(routeData.href, '_blank'); window.open(routeData.href, '_blank');
}, },
goRpManage() {
const routeData = this.$router.resolve({
path:'/bigTrainRunplanManage',
query:{
group: this.$route.query.group,
mapId:this.$route.query.mapId,
project: this.project,
prdType: this.$route.query.prdType,
lineCode:this.$route.query.lineCode,
// stationCode:this.$store.state.training.roleDeviceCode,
// token:getToken(),
noPreLogout: true
}
});
window.open(routeData.href, '_blank');
},
changeOperateMode() { 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,6 +195,10 @@ 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');

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);