Merge remote-tracking branch 'remotes/origin/test'

# Conflicts:
#	src/jmapNew/config/skinCode/datie_02.js
#	src/jmapNew/constant/deviceRender.js
#	src/jmapNew/constant/deviceType.js
#	src/jmapNew/parser/parser-graph.js
#	src/jmapNew/shape/graph/SaidLamp/EPickOrDepartArrow.js
#	src/jmapNew/shape/graph/SaidLamp/index.js
#	src/jmapNew/shape/graph/SignalButton/index.js
#	src/jmapNew/shape/graph/Station/index.js
#	src/jmapNew/shape/graph/index.js
#	src/jmapNew/theme/datie_02/menus/dialog/childDialog/passwordInputBox.vue
#	src/jmapNew/theme/datie_02/menus/index.vue
#	src/jmapNew/theme/datie_02/menus/menuButton.vue
#	src/jmapNew/theme/datie_02/menus/menuSection.vue
#	src/jmapNew/theme/datie_02/menus/menuSignal.vue
#	src/jmapNew/theme/datie_02/menus/menuStation.vue
#	src/jmapNew/theme/datie_02/menus/menuStationStand.vue
#	src/jmapNew/theme/datie_02/menus/menuSwitch.vue
#	src/jmapNew/theme/datie_02/menus/menuTrain.vue
#	src/jmapNew/theme/factory.js
#	src/scripts/cmdPlugin/OperationHandler.js
#	src/views/newMap/newMapdraft/mapoperate/controlLamp.vue
#	src/views/newMap/newMapdraft/mapoperate/models.js
#	src/views/newMap/newMapdraft/mapoperate/signalButton.vue
This commit is contained in:
joylink_cuiweidong 2022-05-12 11:38:28 +08:00
commit b9fa32a96a
86 changed files with 3987 additions and 381 deletions

36
src/api/assist.js Normal file
View File

@ -0,0 +1,36 @@
import request from '@/utils/request';
// 查询指示灯关联信息列表
export function queryAssistListPaged(params, mapId) {
return request({
// url: `/api/assist/indicator/section/list/${mapId}`,
url: `/api/station/direction/list/${mapId}`,
method: 'get',
params
});
}
// 根据id查询单个指示灯关联信息
export function queryAssistById(mapId){
return request({
// url: `/api/assist/indicator/section/${id}`,
url: `/api/station/direction/${mapId}`,
method: 'get'
})
}
// 保存指示灯关联信息
export function saveAssist(data, mapId) {
return request({
// url: `/api/assist/indicator/section/save/${mapId}`,
url: `/api/station/direction/save/${mapId}`,
method: 'post',
data
})
}
// 删除指示灯关联关系
export function deleteAssist(id) {
return request({
// url: `/api/assist/indicator/section/delete/${id}`,
url: `/api/station/direction/delete/${id}`,
method: 'delete'
})
}

View File

@ -743,3 +743,10 @@ export function generateDepotCiData(mapId, stationCode) {
method: 'post'
});
}
// 大铁线路批量生成进路
export function generateRoute(mapId) {
return request({
url: `/api/draftMap/${mapId}/route/railway/generate`,
method: 'post'
});
}

BIN
src/assets/datie/arrow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 B

BIN
src/assets/datie/camera.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 735 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 B

BIN
src/assets/datie/link.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 B

BIN
src/assets/datie/picT3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 B

BIN
src/assets/datie/train.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 916 B

View File

@ -430,6 +430,8 @@ class SkinCode extends defaultStyle {
veryControl: {
show: true,
offset: { x: 0, y: 0 },
lightColor: '#f00',
defaultColor: '#7F7F7F',
text: '非常站控'
},
selfDiscipline: {
@ -440,11 +442,15 @@ class SkinCode extends defaultStyle {
selfDisciplineControl: {
show: true,
offset: { x: 0, y: 0 },
lightColor: '#0f0',
defaultColor: '#7F7F7F',
text: '自律控制'
},
veryControlButton: {
offset: { x: 0, y: 0 },
text: '非常站控'
text: '非常站控',
lightColor: '#ff0',
defaultColor: '#ccc',
}
}
};
@ -794,7 +800,9 @@ class SkinCode extends defaultStyle {
], // 特殊列车类型需设置显示格式
lrPadding: 4, // 两边间隔
upPadding: 4, // 上边距离
trainBodyFillColor: '#000099', // 列车车身填充颜色
trainBodyFillColor: '#88DF8E', // 列车车身填充颜色
trainSidelineColor: '#F00',
trainSidelineStopColor: '#000',
trainNameFormat: 'serviceNumber:targetCode'// 列车显示格式
},
directionArrow: {
@ -804,7 +812,7 @@ class SkinCode extends defaultStyle {
trainBody: true,
earlyColor: '#00FF00',
lateColor: '#800000',
normalColor: '#FFF'
normalColor: '#F00'
},
hsda: {
lrPaddingHSDA: 3, // HSDA两边间隔
@ -818,13 +826,15 @@ class SkinCode extends defaultStyle {
trainNumber: {
targetCodePrefix: '000', // 目的地码前缀
defaultTargetCode: 'DDD', // 默认目的地码
trainTargetTextAlign: 'left', // 目的地码文字显示位置
fontColor: '#F00',
trainTargetTextAlign: 'left', // 目的地码文字显示位置
trainNumberOffset: { x: 24, y: 4}// 目的地码偏移量
},
trainServer: {
serviceNumberPrefix: '000', // 服务号(表号)前缀
defaultServiceNumber: 'TTT', // 默认服务号(表号)
defaultServerNoColor: '#FFFFFF', // 默认服务号状态显示颜色
defaultServerNoColor: '#F00', // 默认服务号状态显示颜色
fontColor: '#F00',
trainServerOffset: { x: 4, y: 4} // 列车服务号偏移
},
trainTarget: {
@ -839,21 +849,23 @@ class SkinCode extends defaultStyle {
trainTargetNumberOffset: {x: -4, y: 4}// 车组号偏移量
},
trainHead: {
trainConntWidth: 3, // 列车竖杠的宽度
trainHeadFillColor: '#000000', // 列车车头矩形填充颜色
trainConntWidth: 10, // 列车竖杠的宽度
trainHeadFillColor: '#189B4D', // 列车车头矩形填充颜色
trainHeadRectNoChange: true, // 列车车头矩形填充颜色不变
trainHeadRectHeight: 20, // 列车车头矩形高度
directionStopType:'normal', // special 西安二号线 停车 列车方向图标不消失 normal 正常
directionStopType:'specialAll', // special 西安二号线 停车 列车方向图标不消失 normal 正常
trainHeadHeight: 'trainBox', // 列车车头高度取决于trainBox高度
trainHeadArrowWidth: 6, // 列车车头三角宽度
trainHeadArrowOffsetX: 5 // 列车车头三角偏移
trainHeadArrowWidth: 15, // 列车车头三角宽度
trainHeadArrowOffsetX: 0, // 列车车头三角偏移
trainHeadRectOffsetX: 10
},
common: {
trainHeight: 20, // 列车高度
trainHeadDistance: 4, // 列车和车头之间的间距
trainHeadDistance: 2, // 列车和车头之间的间距
trainWidth: 48, // 列车长度
trainTextFontSize: 12, // 列车字号
fontFamily: 'consolas', // 默认字体 族类
haveTextHSDA: true, // 是否需创建textHSDA对象
haveTextHSDA: false, // 是否需创建textHSDA对象
haveArrowText: true, // 是否需创建arrowText对象
textOffset: 4, // 字体偏移(用以控制字体据车头的距离)
trainWidthMoreText: 8, // 计算列车长度时--列车长比text多出尺寸
@ -878,7 +890,7 @@ class SkinCode extends defaultStyle {
directionType: [
{
type: 1,
lineLShow: false,
lineLShow: true,
lineRShow: true,
arrowLShow: false,
arrowRShow: true
@ -886,7 +898,7 @@ class SkinCode extends defaultStyle {
{
type: 0,
lineLShow: true,
lineRShow: false,
lineRShow: true,
arrowLShow: true,
arrowRShow: false
}
@ -894,13 +906,17 @@ class SkinCode extends defaultStyle {
directionStopType: [
{
type: 1,
lineLShow: false,
lineRShow: true
lineLShow: true,
arrowLShow: false,
lineRShow: false,
arrowRShow: true
},
{
type: 0,
lineLShow: true,
lineRShow: false
lineLShow: false,
arrowLShow: true,
lineRShow: true,
arrowRShow: false
}
], // 列车停止方向类型对应车头显示状态 1从左往右 0从右往左
driveModeStatus: [
@ -916,8 +932,8 @@ class SkinCode extends defaultStyle {
},
{
status: 'RM',
trainLColor: '#C2C2C2',
trainRColor: '#C2C2C2'
trainLColor: '#fff',
trainRColor: '#fff'
},
{
status: 'NRM',
@ -947,16 +963,35 @@ class SkinCode extends defaultStyle {
fontFamily:'宋体'
}
};
this[deviceType.PickOrDepartArrow] = {
triangleLength: 10,
lineWidth: 4,
length: 20,
this[deviceType.DepartArrow] = {
triangleLength: 15,
lineWidth: 8,
length: 35,
distance: 15,
fill: '#000',
stroke: '#fff',
fontSize: 11,
defaultText: '接发车',
defaultColor: '#ccc'
defaultText: '发车',
defaultColor: '#ccc',
occupiedColor:'#f00',
noOccupiedColor:'#00ff00',
blockStatusColor:'#00ff00',
noBlockStatusColor:'#ffff00',
};
this[deviceType.PickArrow] = {
triangleLength: 15,
lineWidth: 8,
length: 35,
distance: 15,
fill: '#000',
stroke: '#fff',
fontSize: 11,
defaultText: '接车',
defaultColor: '#ccc',
occupiedColor:'#f00',
noOccupiedColor:'#ffff00',
blockStatusColor:'#00ff00',
noBlockStatusColor:'#ffff00',
};
this[deviceType.Occlusion] = {
text: {
@ -1032,7 +1067,8 @@ class SkinCode extends defaultStyle {
},
lamp: {
radiusR: 6,
controlColor: '#ccc'
controlColor: '#ccc',
occupiedColor:'#ffffff',
}
};
this[deviceType.SectionOccupied] = {
@ -1043,7 +1079,8 @@ class SkinCode extends defaultStyle {
},
lamp: {
radiusR: 6,
controlColor: '#ccc'
controlColor: '#ccc',
occupiedColor:'#ff0000',
}
};
}

View File

@ -810,12 +810,16 @@ class SkinCode extends defaultStyle {
{
type: 1,
lineLShow: false,
lineRShow: true
arrowLShow: false,
lineRShow: false,
arrowRShow: true,
},
{
type: 0,
lineLShow: true,
lineRShow: false
lineLShow: false,
arrowLShow: true,
lineRShow: false,
arrowRShow: false,
}
], // 列车停止方向类型对应车头显示状态 1从左往右 0从右往左
driveModeStatus: [

View File

@ -285,9 +285,14 @@ deviceRender[deviceType.IndicatorLight] = {
_type: deviceType.IndicatorLight,
zlevel: 1
};
/** 接发车指示灯 */
deviceRender[deviceType.PickOrDepartArrow] = {
_type: deviceType.PickOrDepartArrow,
/** 接车指示灯 */
deviceRender[deviceType.PickArrow] = {
_type: deviceType.PickArrow,
zlevel: 1
};
/** 发车指示灯 */
deviceRender[deviceType.DepartArrow] = {
_type: deviceType.DepartArrow,
zlevel: 1
};
/** 区间占用 区间监控 */

View File

@ -51,7 +51,8 @@ const deviceType = {
DirectionRod: 'DirectionRod',
Responder: 'Responder',
SignalButton: 'SignalButton',
PickOrDepartArrow: 'PickOrDepartArrow',
PickArrow: 'PickArrow',
DepartArrow: 'DepartArrow',
Occlusion: 'Occlusion',
Accident: 'Accident',
Recovery: 'Recovery',

View File

@ -471,6 +471,101 @@ class Jlmap {
}
}
store.commit('map/mapStationStateUpdate');
} else if (elem.deviceType === 'STATION_DIRECTION') {
const mapStationDirectionData = store.state.map.mapStationDirectionData;
// 大铁项目 车站方向
const directionData = mapStationDirectionData[code];
// store.state.map.map.indicatorLightList;
// 改方按钮状态
const signalButtonList = store.state.map.map.signalButtonList;
const selectButtonList = signalButtonList.filter(elem=>{
return elem.labelEnum === directionData.labelEnum && elem.stationCode == directionData.stationCode;
});
const selectMap = {'ASSIST':'mainAssistStatus',
'PICK_ASSIST':'receiveAssistStatus',
'DEPART_ASSIST':'deliverAssistStatus',
'CHANGE_DIRECTION':'changeDirectionStatus',
// 闭塞按钮
'OCCLUSION':'blockStatus',
// 事故按钮
'ACCIDENT':'accidentStatus',
// 复原按钮
'RECOVERY':'restoreStatus'
};
// { value: 'ASSIST', label: '总辅助按钮' },
// { value: 'PICK_ASSIST', label: '接辅助按钮' },
// { value: 'DEPART_ASSIST', label: '发辅助按钮' },
selectButtonList.forEach(each=>{
const buttonModel = this.mapDevice[each.code];
const selectedStatus = selectMap[buttonModel.type];
if (selectedStatus != undefined && elem[selectedStatus] != undefined) {
buttonModel.pressDown = elem[selectedStatus];
this.$painter.update(buttonModel);
}
});
// 接车 发车 区间占用 辅助状态
const indicatorLightList = store.state.map.map.indicatorLightList;
const indicatorList = indicatorLightList.filter(elem=>{
return elem.labelEnum === directionData.labelEnum && elem.stationCode == directionData.stationCode;
});
indicatorList.forEach(each=>{
const model = this.mapDevice[each.code];
switch (each._type) {
case 'PickArrow': {
// 接车灯状态
if (elem.runStatus != undefined || model.runStatus != undefined) {
if (elem.runStatus) { model.runStatus = elem.runStatus; }
if (elem.runModel) { model.runModel = elem.runModel; }
if (elem.receiveAspect != undefined) {
model.aspect = elem.receiveAspect;
}
if (elem.readyStatus != undefined ) {
model.readyStatus = elem.readyStatus;
}
this.$painter.update(model);
}
break;
}
case 'DepartArrow': {
// 发车灯状态
if (elem.runStatus != undefined || model.runStatus != undefined) {
if (elem.runStatus) { model.runStatus = elem.runStatus; }
if (elem.runModel) { model.runModel = elem.runModel; }
if (elem.deliverAspect != undefined) {
model.aspect = elem.deliverAspect;
}
if (elem.readyStatus != undefined ) {
model.readyStatus = elem.readyStatus;
}
this.$painter.update(model);
}
break;
}
case 'SectionOccupied': {
// 区间占用
if (elem.sectionAspect != undefined) {
model.aspect = elem.sectionAspect;
this.$painter.update(model);
}
break;
}
case 'AssistStatus': {
// 辅助状态
if (elem.assistAspect != undefined) {
model.aspect = elem.assistAspect;
this.$painter.update(model);
}
break;
}
default:
break;
}
});
// { name: '总辅助', value: 'TotalAssist' },
// { name: '发车辅助', value: 'DepartAssist' },
// { name: '接车辅助', value: 'PickAssist' },
} else {
if (elem.deviceType === 'TRAIN') {
this.isUpdateShowTrainList = true;

View File

@ -350,7 +350,8 @@ export function updateMapData(state, model) {
case deviceType.Axle: updateForList(model, state, 'indicatorLightList'); break;
case deviceType.SwitchFault: updateForList(model, state, 'indicatorLightList'); break;
case deviceType.IndicatorLight: updateForList(model, state, 'indicatorLightList'); break;
case deviceType.PickOrDepartArrow: updateForList(model, state, 'indicatorLightList'); break;
case deviceType.PickArrow: updateForList(model, state, 'indicatorLightList');break;
case deviceType.DepartArrow: updateForList(model, state, 'indicatorLightList'); break;
case deviceType.Occlusion: updateForList(model, state, 'indicatorLightList'); break;
case deviceType.Accident: updateForList(model, state, 'indicatorLightList'); break;
case deviceType.Recovery: updateForList(model, state, 'indicatorLightList'); break;

View File

@ -73,4 +73,7 @@ export default class EAxle extends Group {
this.add(this.arc1);
this.add(this.arc2);
}
recover() {
}
}

View File

@ -14,4 +14,7 @@ export default class EControlSwitch extends Group {
this.path = createPathSvg(this.model);
this.add(this.path);
}
recover() {
}
}

View File

@ -136,4 +136,7 @@ export default class EDeviceStatus extends Group {
// this.add(this.pfa);
// this.add(this.pfb);
}
recover() {
}
}

View File

@ -124,4 +124,7 @@ export default class EFoldbackMode extends Group {
this.add(this.lateralLineRect);
this.add(this.lateralLine);
}
recover() {
}
}

View File

@ -80,4 +80,7 @@ export default class IndicatorLight extends Group {
setControlColor(color) {
this.indicator.setStyle({fill: color});
}
recover() {
}
}

View File

@ -17,4 +17,7 @@ export default class ELampFilament extends Group {
setControlColor(color) {
this.path.setStyle({fill: color});
}
recover() {
}
}

View File

@ -77,4 +77,7 @@ export default class EDeviceStatus extends Group {
this.add(this.stationCommunication);
this.add(this.verifyBypass);
}
recover() {
}
}

View File

@ -3,54 +3,78 @@ import Text from 'zrender/src/graphic/Text';
import Polygon from 'zrender/src/graphic/shape/Polygon';
export default class EPickOrDepartArrow extends Group {
constructor(model) {
super();
this.model = model;
this.zlevel = model.zlevel;
this._subType = model._subType;
this.z = model.z;
this.create(model);
}
create(model) {
const style = this.model.style;
this.arrow = new Polygon({
zlevel: this.zlevel,
z: this.z,
origin: [model.x + style.PickOrDepartArrow.length/2, model.y],
rotation: model.right ? Math.PI : 0,
shape: {
points: [
[model.x, model.y],
[model.x + style.PickOrDepartArrow.triangleLength, model.y - style.PickOrDepartArrow.triangleLength / 2],
[model.x + style.PickOrDepartArrow.triangleLength, model.y - style.PickOrDepartArrow.lineWidth / 2],
[model.x + style.PickOrDepartArrow.length, model.y - style.PickOrDepartArrow.lineWidth / 2],
[model.x + style.PickOrDepartArrow.length, model.y + style.PickOrDepartArrow.lineWidth / 2],
[model.x + style.PickOrDepartArrow.triangleLength, model.y + style.PickOrDepartArrow.lineWidth / 2],
[model.x + style.PickOrDepartArrow.triangleLength, model.y + style.PickOrDepartArrow.triangleLength / 2]
]
},
style: {
fill: style.PickOrDepartArrow.fill,
stroke: style.PickOrDepartArrow.stroke,
lineWidth: 1
}
});
this.arrowText = new Text({
zlevel: this.zlevel,
z: this.z,
style: {
x: model.x + style.PickOrDepartArrow.length / 2,
y: model.y + style.PickOrDepartArrow.distance,
fontWeight: style.textStyle.fontWeight,
fontSize: style.PickOrDepartArrow.fontSize,
fontFamily: style.fontFamily,
text: model.text,
textFill: style.PickOrDepartArrow.defaultColor,
textAlign: style.textStyle.textAlign,
textVerticalAlign: style.textStyle.textVerticalAlign
}
});
this.add(this.arrow);
this.add(this.arrowText);
}
constructor(model) {
super();
this.model = model;
this.zlevel = model.zlevel;
this._subType = model._subType;
this.z = model.z;
this.create(model);
}
create(model) {
const style = this.model.style;
this.arrow = new Polygon({
zlevel: this.zlevel,
z: this.z,
origin: [model.x + style[this._subType].length / 2, model.y],
rotation: model.right ? Math.PI : 0,
shape: {
points: [
[model.x, model.y],
[model.x + style[this._subType].triangleLength, model.y - style[this._subType].triangleLength / 2],
[model.x + style[this._subType].triangleLength, model.y - style[this._subType].lineWidth / 2],
[model.x + style[this._subType].length, model.y - style[this._subType].lineWidth / 2],
[model.x + style[this._subType].length, model.y + style[this._subType].lineWidth / 2],
[model.x + style[this._subType].triangleLength, model.y + style[this._subType].lineWidth / 2],
[model.x + style[this._subType].triangleLength, model.y + style[this._subType].triangleLength / 2]
]
},
style: {
fill: style[this._subType].fill,
stroke: style[this._subType].stroke,
lineWidth: 1
}
});
this.arrowText = new Text({
zlevel: this.zlevel,
z: this.z,
style: {
x: model.x + style[this._subType].length / 2,
y: model.y + style[this._subType].distance,
fontWeight: style.textStyle.fontWeight,
fontSize: style[this._subType].fontSize,
fontFamily: style.fontFamily,
text: model.text,
textFill: style[this._subType].defaultColor,
textAlign: style.textStyle.textAlign,
textVerticalAlign: style.textStyle.textVerticalAlign
}
});
this.add(this.arrow);
this.add(this.arrowText);
}
setControlFlashing(color) {
if (color) {
const style = this.model.style;
this.arrow.animateStyle(true)
.when(0, { fill: style[this._subType].fill })
.when(1000, { stroke: color })
.when(2000, { fill: style[this._subType].fill })
.start();
}
}
recover() {
const style = this.model.style;
this.arrow.stopAnimation(false);
this.arrow.setStyle('fill', style[this._subType].fill);
}
setControlColor(color) {
if (color) {
this.arrow.setStyle('fill', color);
}
}
}

View File

@ -14,4 +14,7 @@ export default class EUnmanned extends Group {
this.path = createPathSvg(this.model);
this.add(this.path);
}
recover() {
}
}

View File

@ -33,8 +33,8 @@ export default class SaidLamp extends Group {
create() {
const model = this.model;
const lampDevice = ['LeuControl', 'IntersiteControl', 'CenterCommunication', 'AtsControl', 'LocalControl', 'ChainControl', 'Maintain',
'PowerSupply', 'MaintenanceLamps', 'ZcCommunication', 'SwitchFault', 'SectionOccupied', 'AssistStatus', 'TotalAssist', 'DepartAssist',
'PickAssist', 'Recovery', 'Accident', 'Occlusion'];
'PowerSupply', 'MaintenanceLamps', 'ZcCommunication', 'SwitchFault', 'SectionOccupied', 'AssistStatus', 'TotalAssist', 'TotalAssist', 'PickAssist', 'Recovery', 'Accident', 'Occlusion'];
if (lampDevice.includes(this._type)) {
this.control = new EControl({
zlevel: this.zlevel,
@ -179,19 +179,19 @@ export default class SaidLamp extends Group {
_subType: 'IndicatorLight'
});
this.add(this.control);
} else if (this._type === 'PickOrDepartArrow') {
} else if (this._type === 'PickArrow' || this._type === 'DepartArrow') {
this.control = new EPickOrDepartArrow({
zlevel: this.zlevel,
z: this.z,
x: model.position.x,
y: model.position.y,
text: model.name,
right: model.right,
style: this.style,
_subType: 'PickOrDepartArrow'
});
this.add(this.control);
}
zlevel: this.zlevel,
z: this.z,
x: model.position.x,
y: model.position.y,
text: model.name,
right: model.right,
style: this.style,
_subType: this._type
});
this.add(this.control);
}
}
// 设置状态
@ -200,16 +200,89 @@ export default class SaidLamp extends Group {
if (!store.getters['map/checkDeviceShow'](this._code)) {
this.control && this.control.hide();
} else {
// 区段占用,辅助状态,接发车箭头
const datieType = [deviceType.SectionOccupied, deviceType.AssistStatus, deviceType.PickArrow, deviceType.DepartArrow];
if (model._type === deviceType.PowerSupply && model.name.includes('2')) {
this.control && this.control.setControlColor(this.deviceStyle.lamp.offColor);
this.control && this.control.setControlStroke(this.deviceStyle.lamp.strokeColor, 1);
} else if ((model._type === deviceType.AtsControl || model._type === deviceType.LocalControl || model._type === deviceType.ChainControl) && model.name.includes('B')) {
this.control && this.control.setControlColor(this.deviceStyle.lamp.offColor);
} else if (datieType.includes(model._type)) {
if (model.aspect) {
const signalButtons = [deviceType.PickArrow, deviceType.DepartArrow];
if (signalButtons.includes(model._type)) {
// if (model.runModel == 'S') { // 闭塞
// console.log(model.runModel, model.runStatus, model.aspect, model.blockStatus, model._type, '88888888');
// if (model.runStatus == 'NO') {
// this.control && this.control.setControlColor(this.deviceStyle.fill);
// } else {
// // blockStatusfalse * 指示灯F的时候为黄色true为绿色
// // 指示灯O为红色
// if (model.blockStatus != undefined) {
// if (model.aspect == 'O') {
// this.control && this.control.setControlColor(this.deviceStyle.occupiedColor);
// } else if (model.aspect == 'F') {
// if (model.blockStatus) {
// this.control && this.control.setControlColor(this.deviceStyle.blockStatusColor);
// } else {
// this.control && this.control.setControlColor(this.deviceStyle.noBlockStatusColor);
// }
// }
// }
// }
// } else {
if (model.runStatus == 'A' || (model.runStatus == 'R' && model._type == deviceType.PickArrow ) || (model.runStatus == 'D' && model._type == deviceType.DepartArrow)) {
if (model.runModel == 'S') {
// blockStatusfalse * 指示灯F的时候为黄色true为绿色
// 指示灯O为红色
if (model.readyStatus != undefined) {
if (model.aspect == 'O') {
this.control && this.control.setControlColor(this.deviceStyle.occupiedColor);
} else if (model.aspect == 'F') {
if (model.readyStatus) {
this.control && this.control.setControlColor(this.deviceStyle.blockStatusColor);
} else {
this.control && this.control.setControlColor(this.deviceStyle.noBlockStatusColor);
}
}
}
} else {
// 发车状态:接车灯灭,发车灯默认是绿色,占用时红色
// 接车状态:发车灯灭,接车灯默认是黄色,占用时红色
if (model.aspect == 'O') {
this.control && this.control.setControlColor(this.deviceStyle.occupiedColor);
} else if (model.aspect == 'F') {
this.control && this.control.setControlColor(this.deviceStyle.noOccupiedColor);
}
}
}
// 发车状态----接车灯灭 接车状态-----发车灯灭
if (model.runStatus == 'NO' || (model.runStatus == 'R' && model._type == deviceType.DepartArrow) || (model.runStatus == 'D' && model._type == deviceType.PickArrow)) {
this.control && this.control.setControlColor(this.deviceStyle.fill);
}
// }
} else {
switch (model.aspect) {
case 'O':
this.control && this.control.setControlColor(this.deviceStyle.lamp.occupiedColor);
break;
case 'F':
this.control && this.control.setControlColor(this.deviceStyle.lamp.controlColor);
break;
default:
break;
}
}
}
}
}
}
recover() {
this.control && this.control.show();
this.control && this.control.recover();
}
createMouseEvent() {
if (this.deviceStyle.mouseOverStyle) {

View File

@ -482,6 +482,7 @@ export default class Section extends Group {
this.setAshShow();
model.preGreen && this.line.setStyle({stroke: '#00FF00'});
model.preBlue && this.line.setStyle({stroke: '#4A76B7'});
model.preWhite && this.line.setStyle({stroke: '#fff'})
} else {
this.handleSwitchSection(model, flag);
// 顺序代表优先级

View File

@ -697,6 +697,11 @@ class Signal extends Group {
}
}
}
// 双黄灯
doubleYellow() {
this.lamps[0] && this.lamps[0].setColor(this.style.Signal.lamp.yellowColor);
this.lamps[1] && this.lamps[1].setColor(this.style.Signal.lamp.yellowColor);
}
lampWhite() {
if (this.lamps.length === 1) {
this.lamps[0] && this.lamps[0].setColor(this.style.Signal.lamp.whiteColor);
@ -935,7 +940,7 @@ class Signal extends Group {
recover() {
this.sigName && this.sigName.show();
this.sigName && this.sigName.setAnimationEnd();
this.lamps && this.lamps.forEach(item=> { item.show(); item.setGuideSectorShowHide(false); });
this.lamps && this.lamps.forEach(item=> { item.show(); item.setGuideSectorShowHide(false); item.setBorderColor(this.style.Signal.lamp.borderColor) });
this.sigName.setStyle({ textBorderWidth: 0 });
this.sigName.setColor(this.style.Signal.text.defaultColor);
this.remainTimeName && this.remainTimeName.hide();
@ -984,7 +989,7 @@ class Signal extends Group {
if (this.model.signalButtonList && this.model.signalButtonList.length) {
this.model.signalButtonList.forEach(item => {
const button = store.getters['map/getDeviceByCode'](item);
button && button.instance && button.instance.recover();
button && button.instance && button.instance.setState({});
});
}
}
@ -1042,6 +1047,10 @@ class Signal extends Group {
this.lampBlue();
break;
}
case 'YY': {
this.doubleYellow();
break;
}
default: {
this.close(model.logicLight); // 信号关闭
break;

View File

@ -2,6 +2,7 @@ import Group from 'zrender/src/container/Group';
import Rect from 'zrender/src/graphic/shape/Rect';
import Line from 'zrender/src/graphic/shape/Line';
import Text from 'zrender/src/graphic/Text';
import Arc from 'zrender/src/graphic/shape/Arc';
import store from '@/store/index';
export default class SignalButton extends Group {
@ -12,7 +13,8 @@ export default class SignalButton extends Group {
this.zlevel = model.zlevel;
this.z = 0;
this.model = model;
this.style = style.Line;
this.style = style;
// Line
this.create();
this.setState(model);
}
@ -69,7 +71,72 @@ export default class SignalButton extends Group {
});
this.add(this.rightLine);
this.rightLine.hide();
if (model.type === 'PASS') {
this.leftBoard = new Line({
zlevel: this.zlevel,
z: this.z + 1,
shape: {
x1: model.position.x - 1,
y1: model.position.y - 1,
x2: model.position.x - 1,
y2: model.position.y + 15
},
style: {
lineWidth: 2,
stroke: '#FFFFFF'
}
});
this.add(this.leftBoard);
this.leftBoard.hide();
this.topBoard = new Line({
zlevel: this.zlevel,
z: this.z + 1,
shape: {
x1: model.position.x - 1,
y1: model.position.y - 1,
x2: model.position.x + 15,
y2: model.position.y - 1
},
style: {
lineWidth: 2,
stroke: '#FFFFFF'
}
});
this.add(this.topBoard);
this.topBoard.hide();
this.rightBoard = new Line({
zlevel: this.zlevel,
z: this.z + 1,
shape: {
x1: model.position.x + 15,
y1: model.position.y - 1,
x2: model.position.x + 15,
y2: model.position.y + 15
},
style: {
lineWidth: 2,
stroke: '#A0A0A0'
}
});
this.add(this.rightBoard);
this.rightBoard.hide();
this.bottomBoard = new Line({
zlevel: this.zlevel,
z: this.z + 1,
shape: {
x1: model.position.x - 1,
y1: model.position.y + 15,
x2: model.position.x + 15,
y2: model.position.y + 15
},
style: {
lineWidth: 2,
stroke: '#A0A0A0'
}
});
this.add(this.bottomBoard);
this.bottomBoard.hide();
const hasTextList = ['PASS', 'ASSIST', 'PICK_ASSIST', 'DEPART_ASSIST', 'ACCIDENT', 'CHANGE_DIRECTION', 'RECOVERY', 'OCCLUSION'];
if (hasTextList.includes(model.type)) {
this.buttonText = new Text({
zlevel: this.zlevel,
z: this.z,
@ -87,6 +154,23 @@ export default class SignalButton extends Group {
});
this.add(this.buttonText);
}
// if (model.type === 'CHANGE_DIRECTION') {
// this.arcFlash = new Arc({
// _subType: 'change_direction_flash',
// zlevel: this.zlevel,
// z: this.z,
// shape: {
// cx: model.position.x + 18 + 7,
// cy: model.position.y + 7,
// r: 6
// },
// style: {
// lineWidth: 0,
// fill: '#ffff00'
// }
// });
// this.add(this.arcFlash);
// }
}
startAnimate() {
this.rectButton && this.rectButton.animateStyle(true)
@ -97,21 +181,22 @@ export default class SignalButton extends Group {
}
stopAnimation() {
this.rectButton && this.rectButton.stopAnimation(true);
// this.arcFlash && this.arcFlash.stopAnimation(false);
}
getTypeColor() {
let color = '';
const list = ['ASSIST', 'ACCIDENT', 'PICK_ASSIST', 'DEPART_ASSIST', 'CHANGE_DIRECTION'];
const list = ['ASSIST', 'ACCIDENT', 'PICK_ASSIST', 'DEPART_ASSIST', 'CHANGE_DIRECTION', 'RECOVERY', 'OCCLUSION'];
if (this.model.type === 'FLEXIBLE' || this.model.type === 'SHUNT_TERMINAL') {
color = '#808080';
} else if (this.model.type === 'GUIDE') {
color = '#5050E1';
} else if (list.includes(this.model.type)) {
color = '#ccc'
} else {
color = '#ccc';
} else {
color = '#008000';
}
return color;
}//12
}//
recover() {
this.stopAnimation();
this.rectButton && this.rectButton.setStyle({ fill:this.getTypeColor() });
@ -119,6 +204,10 @@ export default class SignalButton extends Group {
this.leftLine && this.leftLine.hide();
this.rectButton && this.rectButton.show();
this.buttonText && this.buttonText.show();
this.leftBoard && this.leftBoard.hide();
this.rightBoard && this.rightBoard.hide();
this.topBoard && this.topBoard.hide();
this.bottomBoard && this.bottomBoard.hide();
}
blockShow() {
this.rightLine && this.rightLine.show();
@ -126,6 +215,28 @@ export default class SignalButton extends Group {
}
setState(model) {
this.recover();
// { value: 'ASSIST', label: '总辅助按钮' },
// { value: 'PICK_ASSIST', label: '接辅助按钮' },
// { value: 'DEPART_ASSIST', label: '发辅助按钮' },
const list = ['ASSIST', 'PICK_ASSIST', 'DEPART_ASSIST', 'CHANGE_DIRECTION', 'ACCIDENT', 'RECOVERY', 'OCCLUSION'];
if (list.includes(model.type)) {
if (this.rectButton) {
if (model.pressDown) {
this.rectButton.setStyle({ fill:'#FFFF00' });
// this.arcFlash.show();
// const style = this.style;
// this.arcFlash.animateStyle(true)
// .when(0, { fill: style.backgroundColor })
// .when(500, { fill: '#FFFF00' })
// .when(1000, { fill: style.backgroundColor })
// .start();
} else {
this.rectButton.setStyle({ fill:this.getTypeColor() });
// this.arcFlash.stopAnimation(false);
// this.arcFlash.hide();
}
}
}
if (!store.getters['map/checkDeviceShow'](this._code)) {
this.buttonText && this.buttonText.hide();
this.rectButton && this.rectButton.hide();
@ -136,7 +247,6 @@ export default class SignalButton extends Group {
this.startAnimate();
}
}
}
getAnchorPoint() {
}

View File

@ -315,7 +315,7 @@ export default class Station extends Group {
zlevel: this.zlevel,
z: this.z,
point: {
x: model.controlModePoint.x - this.style.Station.StationControl.lamp.distance * 2 + this.style.Station.StationControl.selfDiscipline.offset.x,
x: model.controlModePoint.x - this.style.Station.StationControl.lamp.distance * 3 / 2 + this.style.Station.StationControl.selfDiscipline.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.selfDiscipline.offset.y
},
context: this.style.Station.StationControl.selfDiscipline.text,
@ -330,7 +330,7 @@ export default class Station extends Group {
zlevel: this.zlevel,
z: this.z,
point: {
x: model.controlModePoint.x - this.style.Station.StationControl.lamp.distance + this.style.Station.StationControl.selfDisciplineControl.offset.x,
x: model.controlModePoint.x - this.style.Station.StationControl.lamp.distance / 2 + this.style.Station.StationControl.selfDisciplineControl.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.selfDisciplineControl.offset.y
},
context: this.style.Station.StationControl.selfDisciplineControl.text,
@ -349,13 +349,12 @@ export default class Station extends Group {
zlevel: this.zlevel,
z: this.z,
point: {
x: model.controlModePoint.x + this.style.Station.StationControl.lamp.distance * 3 / 2 + this.style.Station.StationControl.veryControl.offset.x,
x: model.controlModePoint.x + this.style.Station.StationControl.lamp.distance / 2 + this.style.Station.StationControl.veryControl.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.centerControl.offset.y
},
context: this.style.Station.StationControl.veryControl.text,
pop: false
});
console.log(this.veryControl, 'veryContro');
this.add(this.veryControl);
}
if (this.style.Station.StationControl.veryControlButton) {
@ -364,7 +363,7 @@ export default class Station extends Group {
z: this.z,
_subType: 'veryControlButton',
shape: {
x: model.controlModePoint.x + this.style.Station.StationControl.lamp.distance * 5 / 2 + this.style.Station.StationControl.veryControlButton.offset.x - this.style.Station.StationControl.lamp.radiusR,
x: model.controlModePoint.x + this.style.Station.StationControl.lamp.distance * 3 / 2 + this.style.Station.StationControl.veryControlButton.offset.x - this.style.Station.StationControl.lamp.radiusR,
y: model.controlModePoint.y + this.style.Station.StationControl.veryControlButton.offset.y - this.style.Station.StationControl.lamp.radiusR,
width: this.style.Station.StationControl.lamp.radiusR * 2,
height: this.style.Station.StationControl.lamp.radiusR * 2
@ -372,7 +371,7 @@ export default class Station extends Group {
style: {
lineWidth: 1,
stroke: '#fff',
fill: '#ccc'
fill: this.style.Station.StationControl.veryControlButton.defaultColor
}
});
this.add(this.veryControlButton);
@ -382,7 +381,7 @@ export default class Station extends Group {
_subType: 'veryControlButtonText',
position: [0, 0],
style: {
x: model.controlModePoint.x + this.style.Station.StationControl.lamp.distance * 5 / 2 + this.style.Station.StationControl.veryControlButton.offset.y,
x: model.controlModePoint.x + this.style.Station.StationControl.lamp.distance * 3 / 2 + this.style.Station.StationControl.veryControlButton.offset.y,
y: model.controlModePoint.y + this.style.Station.StationControl.veryControlButton.offset.y + this.style.Station.StationControl.lamp.radiusR + this.style.Station.StationControl.text.distance,
fontWeight: this.style.Station.StationControl.text.fontWeight,
fontSize: this.style.Station.StationControl.text.fontSize,
@ -575,7 +574,7 @@ export default class Station extends Group {
});
this.add(this.interconnectedControl);
}
}
}
handleCenter() { // 中控
this.noneBeforeMode = 'Center';
@ -606,6 +605,7 @@ export default class Station extends Group {
this.centerControl && this.centerControl.setColor(this.style.Station.StationControl.lamp.grayColor);
this.substationArrowsControl && this.substationArrowsControl.setColor(this.style.Station.StationControl.lamp.greenColor);
this.stationControlCC && this.stationControlCC.setStyle({text:'LC', textFill:this.style.Station.StationControl.text.stationControlColor});
this.selfDisciplineControl && this.selfDisciplineControl.setColor(this.style.Station.StationControl.selfDisciplineControl.lightColor);
// if (this.style.Station.StationControl.disPlayNone) {
// this.stationText && this.stationText.setStyle('textFill', '#fff');
// if (this.model.subheadDisplay) { // 副标题
@ -644,7 +644,9 @@ export default class Station extends Group {
this.centerControl && this.centerControl.setTextColor(this.style.Station.StationControl.lamp.grayColor);
this.interconnectedControl && this.interconnectedControl.setColor(this.style.Station.StationControl.lamp.purpleColor);
this.interconnectedControl && this.interconnectedControl.setTextColor(this.style.Station.StationControl.lamp.purpleColor);
}
this.veryControl && this.veryControl.setColor(this.style.Station.StationControl.veryControl.lightColor);
this.veryControlButton && this.veryControlButton.setStyle({ fill: this.style.Station.StationControl.veryControlButton.lightColor });
}
handleNone() { // 空
if (this.style.Station.stationText.noneModeColor) {
@ -671,6 +673,10 @@ export default class Station extends Group {
this.troButton && this.troButton.hide();
this.substationArrowsControl && this.substationArrowsControl.setColor(this.style.Station.StationControl.lamp.grayColor);
this.emergencyArrowsControl && this.emergencyArrowsControl.setColor(this.style.Station.StationControl.lamp.grayColor);
this.stationControlCC && this.stationControlCC.setStyle({text:'EL', textFill:this.style.Station.StationControl.text.emergencyControlColor});
this.veryControl && this.veryControl.setColor(this.style.Station.StationControl.veryControl.defaultColor);
this.selfDisciplineControl && this.selfDisciplineControl.setColor(this.style.Station.StationControl.selfDisciplineControl.defaultColor);
this.veryControlButton && this.veryControlButton.setStyle({ fill: this.style.Station.StationControl.veryControlButton.defaultColor });
if (this.style.Station.stationText.isSpecialType) {
this.stationText.setColor(this.style.Station.stationText.noneModeColor);
this.stationText.setBackground(this.style.Station.stationText.defaultBackColor);
@ -693,6 +699,7 @@ export default class Station extends Group {
} else if (!store.getters['map/checkDeviceShow'](this._code)) {
this.eachChild(item => { item.hide(); });
} else {
store.getters['map/checkStationGuideMaster'](this._code, model.sguideMasterLock, model.xguideMasterLock);
model.controlMode && this['handle' + model.controlMode]();
model.preResetValidDuration && this.handlePreResetLamp();
model.controller && this.handleComplexControl(model.controller);

View File

@ -725,6 +725,7 @@ export default class Switch extends Group {
model.isCiConfirm && this.setCiConfirm(); // 道岔使能显示
model.singleLock && this.setMonolock(model.pos); // 道岔单锁
model.guideMasterLock && this.setMonolock(model.pos); // 引导总锁
model.blockade && this.block(model.pos); // 道岔封锁
model.singleLock && model.blockade && this.blockMonolock(); // 单锁&锁闭状态
const path = window.location.href;

View File

@ -299,6 +299,9 @@ export default class TrainBody extends Group {
this.trainBodyBox && this.trainBodyBox.setColor('fill', color);
// Style('fill', color);
}
setTrainBorderColor(color) {
this.trainBodyBox && this.trainBodyBox.setColor('stroke', color);
}
setHShow(isShow) {
if (this.textH) {
isShow ? this.textH.show() : this.textH.hide();

View File

@ -54,7 +54,9 @@ export default class TrainHead extends Group {
this.add(this.arrow);
}
setColor(color) {
this.line && this.line.setStyle('fill', color);
if (!this.model.style.Train.trainHead.trainHeadRectNoChange){
this.line && this.line.setStyle('fill', color);
}
this.arrow && this.arrow.setStyle('fill', color);
}
setLineShow(isShow) {

View File

@ -50,10 +50,10 @@ export default class Train extends Group {
};
if (model.right) {
this.point.x = this.point.x - style.Train.trainHead.trainConntWidth * this.newScale - style.Train.common.trainWidth / 2;
this.point.y = this.point.y - style.Train.common.trainHeight / 2 + model.overLapIndex * (style.Train.common.trainHeight + 5);
this.point.y = this.point.y + model.overLapIndex * (style.Train.common.trainHeight + 5);
} else {
this.point.x = this.point.x + style.Train.trainHead.trainConntWidth * this.newScale - style.Train.common.trainWidth / 2;
this.point.y = this.point.y + model.trainWindowModel.height - style.Train.common.trainHeight / 2 - model.overLapIndex * (style.Train.common.trainHeight + 5);
this.point.y = this.point.y - model.overLapIndex * (style.Train.common.trainHeight + 5);
}
} else {
this.point = model.position;
@ -226,6 +226,7 @@ export default class Train extends Group {
this.trainR && this.trainR.setLineShow(false);
this.trainL && this.trainL.setArrowShow(false);
this.trainR && this.trainR.setArrowShow(false);
this.trainB && this.trainB.setTrainBorderColor(this.style.Train.trainBody.trainSidelineColor || this.style.trainSidelineColor);
}
// 设置运行方向状态类型
@ -260,13 +261,26 @@ export default class Train extends Group {
if (right == item.type) {
if (this.style.Train.trainHead.directionStopType == 'special') {
if (flag) {
this.trainL && this.trainL.setArrowShow(!item.lineLShow);
this.trainR && this.trainR.setArrowShow(!item.lineRShow);
this.trainL && this.trainL.setArrowShow(!item.arrowLShow);
this.trainR && this.trainR.setArrowShow(!item.arrowRShow);
} else {
this.trainL && this.trainL.setArrowShow(item.lineLShow);
this.trainR && this.trainR.setArrowShow(item.lineRShow);
this.trainL && this.trainL.setArrowShow(item.arrowLShow);
this.trainR && this.trainR.setArrowShow(item.arrowRShow);
}
} else {
} else if(this.style.Train.trainHead.directionStopType == 'specialAll'){
if (flag) {
this.trainL && this.trainL.setArrowShow(!item.arrowLShow);
this.trainR && this.trainR.setArrowShow(!item.arrowRShow);
this.trainL && this.trainL.setLineShow(!item.lineLShow);
this.trainR && this.trainR.setLineShow(!item.lineRShow);
} else {
this.trainL && this.trainL.setArrowShow(item.arrowLShow);
this.trainR && this.trainR.setArrowShow(item.arrowRShow);
this.trainL && this.trainL.setLineShow(item.lineLShow);
this.trainR && this.trainR.setLineShow(item.lineRShow);
}
this.trainB && this.trainB.setTrainBorderColor(this.style.Train.trainBody.trainSidelineStopColor);
} else {
if (flag) {
this.trainL && this.trainL.setLineShow(!item.lineLShow);
this.trainR && this.trainR.setLineShow(!item.lineRShow);

View File

@ -103,6 +103,19 @@ export default class EControl extends Group {
this.control.setStyle('fill', color);
}
}
setControlFlashing(color) {
if (color) {
this.control.animateStyle(true)
.when(0, { fill: this.arcStyle.fill })
.when(1000, { stroke: color })
.when(2000, { fill: this.arcStyle.fill })
.start();
}
}
recover() {
this.control.stopAnimation(false);
this.control.setStyle('fill', this.arcStyle.fill);
}
setControlStroke(color, lineWidth) {
this.control.setStyle('lineWidth', lineWidth);
this.control.setStyle('stroke', color);

View File

@ -77,7 +77,8 @@ mapShape[deviceType.ReturnModeGroup] = SaidLamp;
mapShape[deviceType.Axle] = SaidLamp;
mapShape[deviceType.SwitchFault] = SaidLamp;
mapShape[deviceType.IndicatorLight] = SaidLamp;
mapShape[deviceType.PickOrDepartArrow] = SaidLamp;
mapShape[deviceType.PickArrow] = SaidLamp;
mapShape[deviceType.DepartArrow] = SaidLamp;
mapShape[deviceType.Occlusion] = SaidLamp;
mapShape[deviceType.Accident] = SaidLamp;
mapShape[deviceType.Recovery] = SaidLamp;

View File

@ -492,7 +492,24 @@ export const menuOperate = {
operation: OperationEvent.Train.deleteDestinationTrainId.menu.operation,
cmdType: CMD.TrainWindow.CMD_TRAIN_SET_MANUAL
}
}
},
CTC: {
//接预
receivingNotice: {
operation: OperationEvent.CTCCommand.receivingNotice.menu.operation,
cmdType: CMD.CTC.CTC_RECEIVING_NOTICE
},
// 发预
departureNotice: {
operation: OperationEvent.CTCCommand.departureNotice.menu.operation,
cmdType: CMD.CTC.CTC_DEPARTURE_NOTICE
},
// 自动触发
autoTrigger: {
operation: OperationEvent.CTCCommand.autoTrigger.menu.operation,
cmdType: CMD.CTC.CTC_AUTO_TRIGGER
}
}
};

View File

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

View File

@ -0,0 +1,245 @@
<template>
<div
ref="jlmapCanvas"
class="jlmap-canvas"
:style="{ width: width + 'px', height: height + 'px' }"
>
<div :id="canvasId" class="display_canvas" />
</div>
</template>
<script>
import Jlmap from '@/jmapNew/map';
import { parserFactory, ParserType } from '@/jmapNew/parser';
import { deepAssign } from '@/utils/index';
import deviceType from '@/jmapNew/constant/deviceType';
export default {
name: 'JLocalmapVisual',
props: {
width: {
type: Number,
default: 0
},
height: {
type: Number,
default: 0
},
mapData: {
type: Object,
defautl() {
return {};
}
}
},
data() {
return {
loading: true,
offset: {
x: 0,
y: 0
},
map: null,
mapDevice: {},
routeData: [],
autoReentryData: []
};
},
computed: {
canvasId() {
return ['map', Math.random().toFixed(5) * 100000].join('_');
}
},
watch: {
'$store.state.config.canvasSizeCount': function (val) {
this.resetSize();
}
// '$store.state.training.prdType': function (val) {
// if (val) {
// this.changePrdType(val);
// }
// }
},
mounted() {
this.init();
},
beforeDestroy() {
if (this.map) {
this.map.dispose();
this.map = null;
}
},
methods: {
init() {
document.getElementById(this.canvasId).oncontextmenu = function (e) {
return false;
};
const prdType = this.$store.state.training.prdType;
let showMode = '';
if (prdType == '01') {
showMode = '03';
} else if (prdType == '02') {
showMode = '02';
}
if (!this.map) {
this.map = new Jlmap({
dom: document.getElementById(this.canvasId),
config: {
renderer: 'canvas',
width: this.width,
height: this.height
},
options: {
scaleRate: 1,
offsetX: 0,
offsetY: 0,
zoomOnMouseWheel: false
},
showConfig: {
prdType: prdType,
previewOrMapDraw: true,
showMode: showMode
},
methods: {}
});
}
window.document.oncontextmenu = function () {
return false;
};
if (this.mapData.skinVO) {
const parser = parserFactory(ParserType.Graph.value);
this.mapDevice = parser.parser(this.mapData, this.mapData.skinVO.code, this.map.getShowConfig());
}
},
loadData() {
try {
this.setMap(this.mapData, this.mapDevice);
} catch (error) {
console.log('[ERROR] ', error);
}
},
//
setMap(data, mapDevice) {
if (data.skinVO) {
this.routeData = this.$store.state.map.routeData;
this.autoReentryData = this.$store.state.map.autoReentryData;
this.map.setMap(data, mapDevice, {
routeData: this.routeData,
autoReentryData: this.autoReentryData
});
this.setMapFree();
} else {
this.mapDevice = {};
this.map.clear();
}
},
// jlmap
resetSize() {
this.$nextTick(() => {
this.map && this.map.resize({ width: this.width, height: this.height });
});
},
//
setLevelVisible(levels) {
this.map && this.map.setLevelVisible(levels);
},
setMapFree() {
const list = [];
Object.values(this.mapDevice).forEach((elem) => {
const code = elem.code;
const type = elem._type;
//
type != deviceType.Train &&
list.push({ code, _type: type, _free: true });
});
this.map.update(list, false);
},
//
setCenterWithOffset(code, dx, y) {
this.map.setCenterWithOffset(code, dx, y - this.height / 2);
},
//
updateMapDevice(elems) {
const list = [];
elems.forEach((elem) => {
if (elem.code) {
list.push(deepAssign(this.mapDevice[elem.code], elem));
}
});
this.map.update(list, false);
},
getDeviceByCode(code) {
return this.mapDevice[code];
},
setShowStation(stationCode, setCenter) {
const list = [];
const mapDevice = this.$store.state.map.mapDevice;
for (const key in mapDevice) {
list.push(mapDevice[key]);
}
this.map.updateShowStation(list, stationCode);
!setCenter && this.setCenter(stationCode);
}
}
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
.mask {
opacity: 0;
background: #000;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 9;
}
.jlmap-canvas {
position: relative;
-moz-user-select: none;
-o-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
background: #000;
float: left;
}
.title {
text-align: right;
font-size: 14px;
color: #606266;
line-height: 32px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
font-weight: 700;
}
.zoom-view {
position: absolute;
bottom: 0;
background: #fff;
padding-top: 5px;
height: 42px;
border-bottom: 1px #f3f3f3 solid;
border-right: 1px #f3f3f3 solid;
}
/deep/ {
.el-form.el-form--inline {
height: 28px !important;
line-height: 28px !important;
}
.el-loading-mask {
background-color: rgba(0, 0, 0, 0.3);
}
}
</style>

View File

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

View File

@ -0,0 +1,308 @@
<template>
<el-dialog v-dialogDrag top="12vh" class="ningbo-01__systerm route-setting" :title="title" :visible.sync="show" width="1100px" :before-close="doClose" :z-index="2000" :modal="false" :close-on-click-modal="false">
<el-row>
<el-col :span="2">列车车次</el-col>
<el-col :span="21"><span style="font-size: 18px;color: #f00;">{{ selected.tripNumber }}</span></el-col>
</el-row>
<el-row style="margin-top: 10px;">
<el-col :span="2">进路描述</el-col>
<el-col :span="21">
<div style="width: 100%;height: 50px;background: #DFE3E6;padding: 10px;">
<span>{{ `${type === 'dep' ? '发车/通过': '接车/通过'} 股道:${selected.trackName};进路按钮:${getRouteNames()}` }}</span>
</div>
</el-col>
</el-row>
<el-row style="margin-top: 10px;">
<el-col :span="2">进路显示</el-col>
<el-col :span="21">
<map-visual ref="map" :map-data="mapData" :width="960" :height="600" />
</el-col>
</el-row>
<!--<el-row :gutter="24">-->
<!--<el-col :span="6">-->
<!--<el-row class="header">-->
<!--<el-col :span="11"><span>集中站</span></el-col>-->
<!--<el-col :span="11" :offset="2"><span>始端信号机</span></el-col>-->
<!--</el-row>-->
<!--<el-row>-->
<!--<el-col :span="11">-->
<!--<el-input v-model="stationName" size="small" disabled />-->
<!--</el-col>-->
<!--<el-col :span="11" :offset="2">-->
<!--<el-input v-model="signalName" size="small" disabled />-->
<!--</el-col>-->
<!--</el-row>-->
<!--<el-row style="margin-top: 10px; line-height: 30px;">-->
<!--<el-col :span="11"><span>进路列表</span></el-col>-->
<!--</el-row>-->
<!--<el-table ref="table" :data="tempData" border :cell-style="tableStyle" style="width: 100%; height: 460px; margin-top:10px" size="mini" highlight-current-row :show-header="false" @row-click="clickEvent">-->
<!--<el-table-column :id="domIdChoose" prop="name" style="margin-left:30px" />-->
<!--</el-table>-->
<!--<el-row justify="center" class="button-group">-->
<!--<el-col :span="8" :offset="4">-->
<!--<el-button :id="domIdConfirm" type="primary" :loading="loading" :disabled="commitDisabled" @click="commit">确定</el-button>-->
<!--</el-col>-->
<!--<el-col :span="8" :offset="4">-->
<!--<el-button :id="domIdCancel" @click="cancel"> </el-button>-->
<!--</el-col>-->
<!--</el-row>-->
<!--</el-col>-->
<!--<el-col :span="18">-->
<!--<map-visual ref="map" :map-data="mapData" :width="780" :height="600" />-->
<!--</el-col>-->
<!--</el-row>-->
<el-row style="margin-top: 10px;margin-bottom: 10px;">
<el-col :span="21" :offset="2">
<el-radio disabled v-model="radio" label="禁用">分段办理</el-radio>
</el-col>
</el-row>
<div style="display: flex;justify-content: space-between;margin-bottom: 10px;">
<el-button size="mini" v-if="type === 'rec'" :type="selected.receivingRouteAutoTrigger?'warning':''" :disabled="!!route.lock || !selected.receivingNotice" @click="commit">办理接车</el-button>
<el-button size="mini" v-if="type === 'dep'" :type="selected.departureRouteAutoTrigger?'warning':''" :disabled="!!route.lock || !selected.departureNotice" @click="commit">办理发车</el-button>
<el-button size="mini" disabled>办理通过</el-button>
<el-button size="mini" disabled>进路单锁</el-button>
<el-button size="mini" :disabled="cancelRouteDisabled" @click="commit">取消进路</el-button>
<el-button size="mini" @click="doClose">关闭</el-button>
</div>
<notice-info ref="noticeInfo" pop-class="ningbo-01__systerm" />
<confirm-tip ref="confirmTip" @close="doClose" />
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import { menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import { deepAssign } from '@/utils/index';
import { mouseCancelState} from '@/jmapNew/theme/components/utils/menuItemStatus';
import { mapGetters } from 'vuex';
// import { dbReadData } from '@/utils/indexedDb';
import ConfirmTip from './childDialog/confirmTip';
import MapVisual from './mapVisual';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
export default {
name: 'RouteSelection',
components: {
NoticeInfo,
ConfirmTip,
MapVisual
},
data() {
return {
radio:'',
beforeSectionList: [],
beforeSwitchList: [],
dialogShow: false,
loading: false,
selected: {},
operation: '',
display: true,
mapData: null,
route: '',
tableStyle: {
'border-bottom': 'none'
},
type: ''
};
},
computed: {
...mapGetters('map', [
'overlapData'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdChoose() {
return this.dialogShow ? OperationEvent.Signal.arrangementRoute.choose.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Signal.arrangementRoute.menu.domId : '';
},
title() {
return '进路办理';
},
cancelRouteDisabled() {
return !!!this.route.lock || (this.type === 'rec' && !this.selected.receivingNotice) || (this.type === 'dep' && !this.selected.departureNotice)
}
},
watch: {},
created() {
this.mapData = JSON.parse(JSON.stringify(this.$store.state.map.map));
},
methods: {
getRouteNames() {
const receivingRoute = this.$store.state.map.routeData[this.selected.receivingRouteCode];
const departureRoute = this.$store.state.map.routeData[this.selected.departureRouteCode];
return (receivingRoute?receivingRoute.name: '') + ',' + (departureRoute?departureRoute.name: '');
},
doShow(selected, type) {
// this.$root.$emit('dialogOpen', selected);
this.selected = selected;
this.type = type;
this.dialogShow = true;
this.$nextTick(function () {
this.loadData();
this.$store.dispatch('training/emitTipFresh');
});
},
loadData() {
this.beforeSwitchList = [];
this.beforeSectionList = [];
if (this.mapData) {
this.$refs.map.loadData(this.mapData);
setTimeout(() => {
if (this.type === 'rec'){
this.clickEvent(this.selected.receivingRouteCode);
} else if (this.type === 'dep'){
this.clickEvent(this.selected.departureRouteCode);
}
}, 100);
}
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.route = {};
this.restoreBeforeDevices();
this.$store.dispatch('training/emitTipFresh');
mouseCancelState(this.selected);
},
restoreBeforeDevices() {
//
if (this.beforeSectionList && this.beforeSectionList.length) {
this.beforeSectionList.forEach(el => {
el.routeLock = false;
el.preWhite = false;
});
}
if (this.beforeSwitchList && this.beforeSwitchList.length) {
this.beforeSwitchList.forEach(el => {
// N- R- NO-() EX-
el.pos = 'NO';
el.routeLock = false;
});
}
this.$refs.map.updateMapDevice([...this.beforeSectionList, ...this.beforeSwitchList]);
this.beforeSectionList = [];
this.beforeSwitchList = [];
},
clickEvent(routeCode) {
const route = this.$store.state.map.routeData[routeCode];
this.route = route;
if (route) {
//
this.restoreBeforeDevices();
const containSectionList = [];
const containSwitchList = [];
if (!route.setting) {
const signalBegin = this.$refs.map.getDeviceByCode(route.startSignalCode);
const code = route.startSignalCode;
const signal = signalBegin;
const switchCodeList = [];
this.$refs.map.setCenterWithOffset(code, 50, signal.position.y);
if (route.routeSectionList && route.routeSectionList.length) {
route.routeSectionList.forEach(code => {
const section = deepAssign({}, this.$refs.map.getDeviceByCode(code));
if (section.logicSectionCodeList && section.logicSectionCodeList.length) {
section.logicSectionCodeList.forEach(sectionCode => {
containSectionList.push({code: sectionCode, preWhite: true});
});
} else {
containSectionList.push({code, preWhite: true});
}
if (section.switchSection && section.switch) {
switchCodeList.push(section.switch.code);
}
});
}
if (route.routeSwitchList && route.routeSwitchList.length) {
route.routeSwitchList.filter(el => switchCodeList.includes(el.switchCode)).forEach(el => {
const swch = deepAssign({}, this.$refs.map.getDeviceByCode(el.switchCode));
const sectionA = this.$refs.map.getDeviceByCode(swch.sectionACode);
const sectionB = this.$refs.map.getDeviceByCode(swch.sectionBCode);
const sectionC = this.$refs.map.getDeviceByCode(swch.sectionCCode);
// normalPosition: el.normal, reversePosition: !el.normal
containSwitchList.push({code: el.switchCode, routeLock: true, pos:el.pos });
if (el.normal) {
containSectionList.push({code: sectionA.code, routeLock:true });
// containSectionList.push({code: sectionC.code, preBlue: true });
} else {
containSectionList.push({code: sectionC.code, routeLock:true });
// containSectionList.push({code: sectionB.code, preBlue: true });
}
});
}
this.$refs.map.updateMapDevice([...containSectionList, ...containSwitchList]);
this.beforeSectionList = containSectionList;
this.beforeSwitchList = containSwitchList;
//
const operate = {
operation: OperationEvent.Signal.arrangementRoute.choose.operation,
val: route.code
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
});
} else {
this.$refs.noticeInfo.doShow('当前进路不允许排列, 与其他进路可能发生冲突');
}
}
},
commit() {
if (this.route) {
this.loading = true;
const type = this.route.lock ? menuOperate.Signal.cancelTrainRoute :menuOperate.Signal.arrangementRoute;
const param = this.route.lock ? { signalCode: this.route.startSignalCode } : { routeCode:this.route.code };
commitOperate(type, param, 3).then(({valid, operate})=>{
this.loading = false;
if (valid) {
this.doClose();
}
}).catch((e) => {
console.error(e);
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
});
}
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
} //D3D8DC
};
</script>
<style scoped>
/deep/ .el-dialog__header{
background: #B4B6B9;
}
/deep/ .el-dialog__body{
background: #D3D8DC !important;
padding: 10px;
}
</style>

View File

@ -0,0 +1,181 @@
<template>
<el-dialog
v-dialogDrag
class="ningbo-01__systerm train-set-plan"
:title="title"
:visible.sync="show"
width="360px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-row>
<el-col :span="11">车组号</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-input v-model="addModel.groupNumber" size="mini" :disabled="true" />
</el-col>
</el-row>
<el-row>
<el-col :span="11">服务号</el-col>
<el-col :span="11" :offset="2">序列号</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-input :id="domIdServerNoChange" v-model="addModel.serviceNumber" size="mini" />
<div style="color:red;font-size:13px;margin-top:5px;">{{ messageTip1 }}</div>
</el-col>
<el-col :span="11" :offset="2">
<el-input :id="domIdTrainNoChange" v-model="addModel.tripNumber" size="mini" />
<div style="color:red;font-size:13px;margin-top:5px;">{{ messageTip2 }}</div>
</el-col>
</el-row>
<el-row justify="center" class="button-group">
<el-col :span="10">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="5">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="ningbo-01__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';
import {mouseCancelState} from '@/jmapNew/theme/components/utils/menuItemStatus';
export default {
name: 'TrainSetPlan',
components: {
NoticeInfo
},
data() {
return {
trainNoList: [],
selected: null,
messageTip1:'',
messageTip2:'',
addModel: {
groupNumber: '',
tripNumber: '',
serviceNumber: ''
},
dialogShow: false,
loading: false
};
},
computed: {
...mapGetters('map', [
'stationStandList'
]),
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdServerNoChange() {
return this.dialogShow ? OperationEvent.Train.setPlanTrainId.serverNoChange.domId : '';
},
domIdTrainNoChange() {
return this.dialogShow ? OperationEvent.Train.setPlanTrainId.trainNoChange.domId : '';
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Train.editTrainId.menu.domId : '';
},
title() {
return '设置计划车';
}
},
watch:{
'$store.state.map.keyboardEnterCount': function (val) {
if (this.dialogShow) {
this.commit();
}
}
},
methods: {
doShow(operate, selected) {
this.$root.$emit('dialogOpen', selected);
this.selected = selected;
//
// if (!this.dialogShow) {
// }
this.addModel.groupNumber = selected.groupNumber;
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$root.$emit('dialogClose', this.selected);
this.$store.dispatch('training/emitTipFresh');
this.$store.dispatch('map/setTrainWindowShow', false);
mouseCancelState(this.selected);
},
commit() {
if (!this.addModel.serviceNumber) {
this.messageTip1 = '请输入服务号';
return;
}
if (!this.addModel.tripNumber) {
this.messageTip1 = '';
this.messageTip2 = '请输入序列号';
return;
}
const params = {
groupNumber: this.addModel.groupNumber,
tripNumber: this.addModel.tripNumber,
serviceNumber: this.addModel.serviceNumber
};
this.messageTip1 = '';
this.messageTip2 = '';
this.loading = true;
commitOperate(menuOperate.TrainWindow.setPlanTrainId, params, 2).then(({valid})=>{
this.loading = false;
if (valid) {
this.doClose();
}
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => { this.doClose(); });
}
}
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
/deep/ .el-row {
margin: 10px
}
.ningbo-01__systerm .el-dialog .base-label {
// background: rgba(0, 0, 0, x);
position: relative;
left: -5px;
top: -18px;
padding: 0 5px;
background-color: #F0F0F0;
}
</style>

View File

@ -1,24 +1,25 @@
<template>
<div class="menus" :style="{width: width + 'px'}">
<!--<menu-bar v-show="isShowBar" ref="menuBar" :selected="selected" />-->
<div class="alarm-window">
<div v-for="elem in alarmMessages" :key="elem.id" style="font-size: 14px;">
{{ elem.message }}
</div>
</div>
<div class="device-status-window">
<div class="device-status-button" style="background: #0f0;">联锁I</div>
<div class="device-status-button" style="background: #f00;">联锁II</div>
<div class="device-status-button" style="background: #0f0;">操作A</div>
<div class="device-status-button" style="background: #ff0;">操作B</div>
<div class="device-status-button" style="background: #f00;">维修机</div>
</div>
<div class="warning-window">
<div v-for="elem in warningMessages" :key="elem.id" style="font-size: 14px;color: #ff0">
{{ elem.message }}
</div>
</div>
<div style="width: calc(100% - 200px);position: fixed;height: 30px;background: #808080;z-index: 9;bottom: 0;left: 0;display: flex;">
<!--<div v-if="$store.state.training.prdType == '01'" class="alarm-window">-->
<!--<div v-for="elem in alarmMessages" :key="elem.id" style="font-size: 14px;">-->
<!--{{ elem.message }}-->
<!--</div>-->
<!--</div>-->
<!--<div class="device-status-window">-->
<!--<div class="device-status-button" :style="{background: mode === 'liansuo' ? '#0f0': '#f00'}" @click="selectedMode('liansuo')">联锁I</div>-->
<!--<div class="device-status-button" :style="{background: mode === 'ctc' ? '#0f0': '#f00'}" @click="selectedMode('ctc')">CTC</div>-->
<!--<div class="device-status-button" style="background: #f00;">联锁II</div>-->
<!--<div class="device-status-button" style="background: #0f0;">操作A</div>-->
<!--<div class="device-status-button" style="background: #ff0;">操作B</div>-->
<!--<div class="device-status-button" style="background: #f00;">维修机</div>-->
<!--</div>-->
<!--<div v-if="$store.state.training.prdType == '01'" class="warning-window">-->
<!--<div v-for="elem in warningMessages" :key="elem.id" style="font-size: 14px;color: #ff0">-->
<!--{{ elem.message }}-->
<!--</div>-->
<!--</div>-->
<div v-if="$store.state.training.prdType == '01'" style="width: 1405px;position: fixed;height: 30px;background: #808080;z-index: 9;bottom: 0;left: 0;display: flex;">
<div style="width: 60%;height: 30px;line-height: 30px;text-align: center;">提示信息窗</div>
<div style="width: 40%;height: 30px;line-height: 30px;text-align: center;border-left: 2px #ccc solid;">{{ '操控A:主机' + ' ' + dateString + ' ' + time }}</div>
</div>
@ -94,7 +95,7 @@ export default {
{ id: 7, message: '这是预警信息七' },
],
time: '00:00:00',
dateString: ''
dateString: '',
}
},
computed: {
@ -439,7 +440,7 @@ export default {
padding: 5px;
}
.device-status-window {
width: 400px;
width: 160px;
height: 35px;
position: fixed;
top: 50px;
@ -459,13 +460,14 @@ export default {
height: 30px;
text-align: center;
line-height: 30px;
cursor: pointer;
}
.warning-window {
width: 400px;
height: 100px;
position: fixed;
right: 10px;
top: 90px;
top: 60px;
background: #808080;
z-index: 10;
overflow-y: scroll;

View File

@ -1,16 +1,16 @@
<template>
<div v-if="isShowBtn" id="menuButtons_box" class="menu menuButton" style="height: 35px;" :style="{left: point.x+'px', bottom: point.y+'px' }">
<button :id="Station.guideLock.button.domId" class="button_box" :style="{width: width+'px', backgroundColor: guideLockRightFlag? guideColorDown: guideColorUp}" @click="guideLockRightButtonDown()">
<button :id="Station.stationMasterLock.menuButton.domId" class="button_box" :style="{width: width+'px', backgroundColor: xGuideMasterLock? guideColorDown: guideColorUp}" @click="guideLockRightButtonDown()">
<span style="color: #800000">
<center><b>X引导总锁</b></center>
</span>
</button>
<button :id="Station.guideLock.button.domId" style="cursor: not-allowed;" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Station.guideLock.button.operation, ['GuideLock'])">
<!--<span style="color: #800000">-->
<span style="color: #808080">
<center><b>坡道解锁</b></center>
</span>
</button>
<!--<button :id="Station.guideLock.button.domId" style="cursor: not-allowed;" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Station.guideLock.button.operation, ['GuideLock'])">-->
<!--&lt;!&ndash;<span style="color: #800000">&ndash;&gt;-->
<!--<span style="color: #808080">-->
<!--<center><b>坡道解锁</b></center>-->
<!--</span>-->
<!--</button>-->
<button :id="MixinCommand.totalCancel.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(MixinCommand.totalCancel.button.operation, ['Signal','SignalButton'])">
<span style="color: black">
<center><b>总取消</b></center>
@ -71,17 +71,17 @@
<center><b>道岔解封</b></center>
</span>
</button>
<button :id="Signal.signalLight.menuButton.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Signal.signalLight.menuButton.operation, ['Signal'])">
<span style="color: black">
<center><b>点灯</b></center>
</span>
</button>
<button :id="Signal.signalDestroy.menuButton.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Signal.signalDestroy.menuButton.operation, ['Signal'])">
<span style="color:#800000">
<center><b>灭灯</b></center>
</span>
</button>
<button :id="Station.guideLock.button.domId" class="button_box" :style="{width: width+'px', backgroundColor: guideLockLeftFlag? guideColorDown: guideColorUp}" @click="guideLockLeftButtonDown()">
<!--<button :id="Signal.signalLight.menuButton.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Signal.signalLight.menuButton.operation, ['Signal'])">-->
<!--<span style="color: black">-->
<!--<center><b>点灯</b></center>-->
<!--</span>-->
<!--</button>-->
<!--<button :id="Signal.signalDestroy.menuButton.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Signal.signalDestroy.menuButton.operation, ['Signal'])">-->
<!--<span style="color:#800000">-->
<!--<center><b>灭灯</b></center>-->
<!--</span>-->
<!--</button>-->
<button :id="Station.stationMasterLock.menuButton.domId" class="button_box" :style="{width: width+'px', backgroundColor: sGuideMasterLock? guideColorDown: guideColorUp}" @click="guideLockLeftButtonDown()">
<span style="color: #800000">
<center><b>S引导总锁</b></center>
</span>
@ -110,11 +110,11 @@
<center><b>标记窗</b></center>
</span>
</button>
<button class="button_box" :style="{width: width + 'px', backgroundColor:buttonUpColor}" @click="buttonDown()">
<span style="color: #800000">
<center><b>故障通知</b></center>
</span>
</button>
<!--<button class="button_box" :style="{width: width + 'px', backgroundColor:buttonUpColor}" @click="buttonDown()">-->
<!--<span style="color: #800000">-->
<!--<center><b>故障通知</b></center>-->
<!--</span>-->
<!--</button>-->
<password-box ref="password" @checkOver="passWordCommit" @checkCancel="clearOperate" />
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
</div>
@ -147,10 +147,10 @@ export default {
},
data() {
return {
point: {
x: 0,
y: 30
},
// point: {
// x: 0,
// y: 30
// },
operation: '0',
buttonName: '',
guideColorDown: '#FEEE1A',
@ -182,6 +182,9 @@ export default {
'autoReentryList',
'autoReentryData'
]),
point() {
return this.$store.state.training.prdType == '01' ? {x:0, y:30} : {x:0, y:0};
},
Switch() {
return OperationEvent.Switch;
},
@ -194,14 +197,23 @@ export default {
Signal() {
return OperationEvent.Signal;
},
CTCCommand() {
return OperationEvent.CTCCommand;
},
MixinCommand() {
return OperationEvent.MixinCommand;
},
Command() {
return OperationEvent.Command;
},
sGuideMasterLock() {
return this.$store.state.map.stationSGuideMasterLock;
},
xGuideMasterLock() {
return this.$store.state.map.stationXGuideMasterLock;
},
isShowBtn() {
return this.$store.state.training.prdType == '01';
return this.$store.state.training.prdType == '01' || this.$store.state.training.prdType == '10';
},
CMD() {
return CMD;
@ -258,7 +270,13 @@ export default {
}
this.deviceList = [];
}
}
},
'$store.state.map.showCentralizedStationCode': function(val) {
if (val){
const station = this.$store.getters['map/getDeviceByCode'](val);
this.$store.getters['map/checkStationGuideMaster'](station.code, station.sGuideMasterLock, station.xGuideMasterLock);
}
},
},
beforeDestroy() {
this.routeDataMap = null;
@ -323,15 +341,13 @@ export default {
// S
guideLockLeftButtonDown() {
const operate = {
operation: this.Switch.guideLock.leftButton.operation
operation: this.Station.stationMasterLock.leftButton.operation
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
//
if (this.guideLockRightFlag) {
operate.nextCmdType = CMD.Switch.CMD_SWITCH_MASTER_UNBLOCK;
operate.param = {right: false};
}
operate.nextCmdType = this.sGuideMasterLock? CMD.Station.CMD_STATION_MASTER_UNLOCK:CMD.Station.CMD_STATION_MASTER_LOCK;
operate.param = {throat: 'S', stationCode: this.$store.state.map.showCentralizedStationCode};
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
operate['operateNext'] = this.Command.close.password.operation;
this.$refs.password.doShow(operate);
@ -341,15 +357,13 @@ export default {
// X
guideLockRightButtonDown() {
const operate = {
operation: this.Switch.guideLock.rightButton.operation
operation: this.Station.stationMasterLock.rightButton.operation
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
//
if (this.guideLockRightFlag) {
operate.nextCmdType = CMD.Switch.CMD_SWITCH_MASTER_UNBLOCK;
operate.param = {right: true};
}
operate.nextCmdType = this.xGuideMasterLock? CMD.Station.CMD_STATION_MASTER_UNLOCK:CMD.Station.CMD_STATION_MASTER_LOCK;
operate.param = {throat: 'X', stationCode: this.$store.state.map.showCentralizedStationCode};
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
operate['operateNext'] = this.Command.close.password.operation;
this.$refs.password.doShow(operate);
@ -389,6 +403,7 @@ export default {
if (valid) {
this.commandTypeList = [];
this.$store.dispatch('menuOperation/setButtonOperation', null);
this.guideLockRightFlag = false;
}
});
}
@ -425,7 +440,7 @@ export default {
}
this.deviceTimeNode = this.$store.state.socket.simulationTimeSync;
const signal = this.$store.getters['map/getDeviceByCode'](deviceList[0].signalCode || deviceList[0].code);// deviceList[0] SignalButton || Signal
if (deviceList.length === 1 && !signal.routeLock) { //
if (deviceList.length === 1 && !signal.lockedRouteCode) { //
operate.code = deviceList[0].code;
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
if (valid) {
@ -437,12 +452,12 @@ export default {
}).catch(() => {
this.$refs.noticeInfo.doShow();
});
} else if (deviceList.length === 1 && signal.routeLock) { //
} else if (deviceList.length === 1 && signal.lockedRouteCode) { //
operate.operation = this.Signal.reopenSignal.button.operation;
operate.over = true;
operate.cmdType = CMD.Signal.CMD_SIGNAL_REOPEN_SIGNAL;
operate.code = signal.code;
operate.param = {signalId: signal.code};
operate.param = {signalCode: signal.code};
this.$store.dispatch('training/nextNew', operate).then(({valid, response}) => {
this.clearOperate();
}).catch(() => this.$refs.noticeInfo.doShow() );
@ -456,7 +471,7 @@ export default {
operate.over = true;
operate.cmdType = CMD.Signal.CMD_SIGNAL_SET_ROUTE;
operate.code = deviceList[deviceList.length - 1].code;
operate.param = {routeId: route.code};
operate.param = {routeCode: route.code};
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
this.deviceTimeNode = 0;
}).catch(() => {
@ -474,7 +489,7 @@ export default {
operation: this.$store.state.menuOperation.buttonOperation,
cmdType: CMD.Signal.CMD_SIGNAL_CANCEL_ROUTE,
param: {
signalId: model._type === 'Signal' ? model.code : model.signalCode
signalCode: model._type === 'Signal' ? model.code : model.signalCode
}
};
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
@ -492,7 +507,7 @@ export default {
code: model.code,
operation: this.Signal.guide.button.operation,
cmdType: CMD.Signal.CMD_SIGNAL_ROUTE_GUIDE,
param: {signalId: model.signalCode}
param: {signalCode: model.signalCode}
};
const signal = this.$store.getters['map/getDeviceByCode'](model.signalCode);
// 15s
@ -513,11 +528,11 @@ export default {
cmdType: CMD.Signal.CMD_SIGNAL_HUMAN_RELEASE_ROUTE
};
const signal = this.$store.getters['map/getDeviceByCode'](model.signalCode || model.code);
if (model._type === 'SignalButton' && model.type === 'PICK' && signal.routeLock) {
operate.param = {signalId: model.signalCode};
if (model._type === 'SignalButton' && model.type === 'PICK') {
operate.param = {signalCode: model.signalCode};
this.sendCommand(operate);
} else if (model._type === 'Signal' && model.type === 'SHUNTING' && signal.routeLock) {
operate.param = {signalId: model.code};
} else if (model._type === 'Signal' && model.type === 'SHUNTING') {
operate.param = {signalCode: model.code};
this.sendCommand(operate);
}
},
@ -527,7 +542,7 @@ export default {
code: model.code,
operation: this.$store.state.menuOperation.buttonOperation,
cmdType: this.cmdType,
param: { id: model.code}
param: { switchCode: model.code}
};
this.sendCommand(operate);
},
@ -563,18 +578,18 @@ export default {
if (model._type === 'Signal' && !this.checkHasTrainButton(model)) {
if (buttonOperation === this.Signal.lock.button.operation) {
operate.cmdType = CMD.Signal.CMD_SIGNAL_BLOCK;
operate.param = {signalId: model.code};
operate.param = {signalCode: model.code};
} else if (buttonOperation === this.Signal.unlock.button.operation) {
operate.cmdType = CMD.Signal.CMD_SIGNAL_UNBLOCK;
operate.param = {signalId: model.code};
operate.param = {signalCode: model.code};
}
} else if (model._type === 'SignalButton' && model.type === 'PICK') {
if (buttonOperation === this.Signal.lock.button.operation) {
operate.cmdType = CMD.Signal.CMD_SIGNAL_BLOCK;
operate.param = {signalId: model.signalCode};
operate.param = {signalCode: model.signalCode};
} else if (buttonOperation === this.Signal.unlock.button.operation) {
operate.cmdType = CMD.Signal.CMD_SIGNAL_UNBLOCK;
operate.param = {signalId: model.signalCode};
operate.param = {signalCode: model.signalCode};
}
}
this.sendCommand(operate);
@ -587,9 +602,15 @@ export default {
code: model.code,
operation: this.guideLockRightFlag ? this.Switch.guideLock.rightButton : this.Switch.guideLock.leftButton,
nextCmdType: CMD.Switch.CMD_SWITCH_MASTER_LOCK,
param: {signalId: model.signalCode}
param: {signalCode: model.signalCode}
};
this.$refs.password.doShow(operate);
// 15s
if (signal.guideTime) {
operate.cmdType = CMD.Switch.CMD_SWITCH_MASTER_LOCK;
this.sendCommand(operate);
} else {
this.$refs.password.doShow(operate);
}
}
},
handelFaultSection(model) {
@ -599,15 +620,16 @@ export default {
code: model.code,
operation: this.$store.state.menuOperation.buttonOperation,
cmdType: CMD.Section.CMD_SECTION_FAULT_UNLOCK,
param: {id: model.code}
param: {sectionCode: model.code}
};
this.sendCommand(operate);
}
},
// CHANGE_DIRECTION
selectedChange() {
//
const model = this.selected; //
if (this.$store.state.training.prdType != '01' || this.selected._event !== MouseEvent.Left || (!model._type && !model._code)) {
if ((this.$store.state.training.prdType != '01' && this.$store.state.training.prdType != '10') || this.selected._event !== MouseEvent.Left || (!model._type && !model._code)) {
return;
}
const buttonOperation = this.$store.state.menuOperation.buttonOperation;
@ -636,8 +658,12 @@ export default {
this.clearOperate();
}
} else if (!buttonOperation) {
const signalButtonList = ['ASSIST', 'CHANGE_DIRECTION', 'PICK_ASSIST', 'DEPART_ASSIST', 'OCCLUSION', 'RECOVERY', 'ACCIDENT'];
if (model._type === 'SignalButton' && !this.checkSignalBlock(model.signalCode) && model.type === 'GUIDE' ) {
this.handleGuideSignal(model);
} else if (model._type === 'SignalButton' && signalButtonList.includes(model.type)) {
//
this.assistOperateOrChange(model);
} else if (model._type === 'SignalButton' && !this.checkSignalBlock(model.signalCode) || (model._type === 'Signal' && !model.blockade)) {
this.deviceList.push(model);
this.arrangementRouteOperation(this.deviceList);
@ -658,6 +684,133 @@ export default {
this.deviceList = [];
Handler.clear(); //
this.$store.dispatch('menuOperation/setButtonOperation', null);
},
assistOperateOrChange(model) {
// mode.type==
const modelTypeMap = {
//
'ASSIST':{
operation:this.CTCCommand.assistPressMainAssist.menu.operation,
nextCmdType:CMD.CTC.CTC_ASSIST_PRESS_MAIN_ASSIST,
param:{
labelEnum:model.labelEnum,
stationCode:model.stationCode,
pressDown:model.pressDown ? 0 : 1 // 10
}
},
//
'CHANGE_DIRECTION':{
operation:this.CTCCommand.assistPressDownTurnDirection.menu.operation,
nextCmdType:CMD.CTC.CTC_ASSIST_PRESS_DOWN_TURN_DIRECTION,
param:{
labelEnum:model.labelEnum,
stationCode:model.stationCode,
pressDown:model.pressDown ? 0 : 1 // 10
}
},
//
'PICK_ASSIST':{
// this.CTCCommand.assistPressDownTurnDirection.menu.operation
operation:this.CTCCommand.assistPressReceiveAssist.menu.operation,
nextCmdType:CMD.CTC.CTC_ASSIST_PRESS_RECEIVE_ASSIST,
param:{
labelEnum:model.labelEnum,
stationCode:model.stationCode
}
},
//
'DEPART_ASSIST':{
operation:this.CTCCommand.assistPressDeliverAssist.menu.operation,
nextCmdType:CMD.CTC.CTC_ASSIST_PRESS_DELIVER_ASSIST,
param:{
labelEnum:model.labelEnum,
stationCode:model.stationCode
}
},
//
'ACCIDENT':{
operation:this.CTCCommand.assistPressAccident.menu.operation,
nextCmdType:CMD.CTC.CTC_ASSIST_PRESS_ACCIDENT,
param:{
labelEnum:model.labelEnum,
stationCode:model.stationCode
}
}
};
const noPasswordModelTypeMap = {
//
'OCCLUSION':{
operation:this.CTCCommand.assistPressBlock.menu.operation,
nextCmdType:CMD.CTC.CTC_ASSIST_PRESS_BLOCK,
param:{
labelEnum:model.labelEnum,
stationCode:model.stationCode
}
},
//
'RECOVERY':{
operation:this.CTCCommand.assistPressRestore.menu.operation,
nextCmdType:CMD.CTC.CTC_ASSIST_PRESS_RESTORE,
param:{
labelEnum:model.labelEnum,
stationCode:model.stationCode
}
}
};
if (noPasswordModelTypeMap[model.type]) {
const operate = {
over:true,
operation: noPasswordModelTypeMap[model.type].operation,
code: model.code,
param: noPasswordModelTypeMap[model.type].param,
cmdType : noPasswordModelTypeMap[model.type].nextCmdType
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.clearOperate();
} else {
this.$refs.noticeInfo.doShow();
}
}).catch((error) => {
console.error(error);
this.$refs.noticeInfo.doShow();
});
} else {
const operate = {
operation: modelTypeMap[model.type].operation,
code: model.code,
param: modelTypeMap[model.type].param
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
operate.nextCmdType = modelTypeMap[model.type].nextCmdType;
operate['operateNext'] = this.Command.close.password.operation;
this.$refs.password.doShow(operate);
}
}).catch((error) => {
console.error(error);
this.$refs.noticeInfo.doShow();
});
}
// 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
// }
// };
// this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
// // this.clearOperate();
// }).catch((error) => {
// // this.clearOperate();
// console.error(error);
// this.$refs.noticeInfo.doShow();
// });
}
}
};

View File

@ -0,0 +1,708 @@
<template>
<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'])">
<span style="color: black">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="MixinCommand.totalCancel.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(MixinCommand.totalCancel.button.operation, ['Signal','SignalButton'])">
<span style="color: black;">
<center><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="Signal.reopenSignal.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Signal.reopenSignal.button.operation, ['Signal'])">
<span style="color: black;">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="Station.guideLock.button.domId" class="button_box" :style="{width: width+'px', backgroundColor: guideLockLeftFlag? guideColorDown: guideColorUp}" @click="guideLockLeftButtonDown()">
<span style="color: #800000">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="Signal.humanTrainRoute.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Signal.humanTrainRoute.button.operation, ['Signal','SignalButton'])">
<span style="color: #800000">
<center><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="Switch.locate.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Switch.locate.button.operation, ['Switch'])">
<span style="color: black">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="Switch.reverse.button.domId" class="button_box" :style="{width: width+'px',backgroundColor:buttonUpColor}" @click="buttonDown(Switch.reverse.button.operation, ['Switch'])">
<span style="color: black">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="Switch.lock.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Switch.lock.button.operation, ['Switch'])">
<span style="color: black">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="Switch.unlock.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(Switch.unlock.button.operation, ['Switch'])">
<span style="color: black">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="MixinCommand.block.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(MixinCommand.lock.button.operation, ['Switch', 'Signal'])">
<span style="color: black">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="MixinCommand.functionButton.button.domId" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown(MixinCommand.functionButton.button.operation, ['StationStand', 'Station'])">
<span style="color: black;">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown()">
<span style="color: black;">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :disabled="true" :id="" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown()">
<span style="color: black;">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="Command.cancel.clearMbm.domId" class="button_box" :style="{width:width+'px',backgroundColor:buttonUpColor}" @click="buttonDown(Command.cancel.clearMbm.operation)">
<span style="color: black;">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="" class="button_box" :style="{width: width+'px', backgroundColor:buttonUpColor}" @click="buttonDown()">
<span style="color: black;">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="" class="button_box" :style="{width: width+'px', backgroundColor: buttonUpColor}" @click="buttonDown()">
<span style="color: black;">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<button :id="" class="button_box" :style="{width: width+'px', backgroundColor: buttonUpColor}" @click="buttonDown()">
<span style="color: black;">
<center><b></b><b></b></center>
<center><b></b><b></b></center>
</span>
</button>
<password-box ref="password" @checkOver="passWordCommit" @checkCancel="clearOperate" />
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
</div>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import OperationHandler from '@/scripts/cmdPlugin/OperationHandler';
import Handler from '@/scripts/cmdPlugin/Handler';
import PasswordBox from './dialog/childDialog/passwordInputBox.vue';
import CMD from '@/scripts/cmdPlugin/CommandEnum';
import { mapGetters } from 'vuex';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import { MouseEvent } from '@/scripts/ConstDic';
import CenterConfig from '../../../../views/newMap/newMapdraft/mapoperate/displayConfig/centerConfig';
// import { OperateMode } from '@/scripts/ConstDic';48
export default {
name: 'MapButtonMenu',
components: {
CenterConfig,
PasswordBox,
NoticeInfo
},
props: {
selected: {
type: Object,
default: () => {
return null;
}
}
},
data() {
return {
point: {
x: 0,
y: 0
},
operation: '0',
buttonName: '',
guideColorDown: '#FEEE1A',
guideColorUp: '#DCDCDC',
buttonDownColor: '#FEEE1A',
buttonUpColor: '#DCDCDC',
width: 78,
tempData: null,
offset: {},
commandTypeList: [],
cmdTypeList: [],
deviceList: [],
timeNode: 0, // 15
deviceTimeNode: 0, // 15
routeDataMap: null, // btnCodeList key
routeButtonCodeList: [], // btnCodeList code list
guideLockRightFlag: false,
guideLockLeftFlag: false
};
},
computed: {
...mapGetters('training', [
'operatemode'
]),
...mapGetters('map', [
'routeList',
'routeData',
'signalList',
'autoReentryList',
'autoReentryData'
]),
Switch() {
return OperationEvent.Switch;
},
Section() {
return OperationEvent.Section;
},
Station() {
return OperationEvent.Station;
},
Signal() {
return OperationEvent.Signal;
},
CTCCommand() {
return OperationEvent.CTCCommand;
},
MixinCommand() {
return OperationEvent.MixinCommand;
},
Command() {
return OperationEvent.Command;
},
isShowBtn() {
return this.$store.state.training.prdType == '01' || this.$store.state.training.prdType == '10';
},
CMD() {
return CMD;
},
cmdType() {
switch (this.operation) {
case this.Switch.lock.button.operation: //
return CMD.Switch.CMD_SWITCH_SINGLE_LOCK;
case this.Switch.unlock.button.operation: //
return CMD.Switch.CMD_SWITCH_SINGLE_UNLOCK;
case this.Switch.locate.button.operation: //
return CMD.Switch.CMD_SWITCH_NORMAL_POSITION;
case this.Switch.reverse.button.operation: //
return CMD.Switch.CMD_SWITCH_REVERSE_POSITION;
case this.Switch.block.button.operation: //
return CMD.Switch.CMD_SWITCH_BLOCK;
case this.Switch.unblock.button.operation:
return CMD.Switch.CMD_SWITCH_UNBLOCK;
case this.Section.fault.button.operation: //
return CMD.Section.CMD_SECTION_FAULT_UNLOCK;
case this.Signal.humanTrainRoute.button.operation: // ()
return CMD.Signal.CMD_SIGNAL_HUMAN_RELEASE_ROUTE;
case this.Signal.arrangementRoute.button.operation: //
return CMD.Signal.CMD_SIGNAL_SET_ROUTE;
case this.Signal.guide.button.operation: //
return CMD.Signal.CMD_SIGNAL_ROUTE_GUIDE;
}
return '';
}
},
watch: {
'$store.state.menuOperation.buttonOperation': function (val, old) {
this.updateButtonShow(val, old);
},
'$store.state.menuOperation.selectedCount': function (val) {
this.selectedChange();
},
'$store.state.map.clearButtonCount': function(val) {
this.commandTypeList = [];
this.$store.dispatch('menuOperation/setButtonOperation', null);
this.clearOperate();
this.guideLockRightFlag = false;
this.guideLockLeftFlag = false;
},
'$store.state.socket.simulationTimeSync': function (val) {
if (this.timeNode && val - this.timeNode >= 15) {
this.clearOperate();
}
if (this.deviceTimeNode && val - this.deviceTimeNode >= 15) {
if (this.deviceList && this.deviceList.length && this.deviceList[0]._type === 'SignalButton') {
this.$store.dispatch('training/updateMapState', [{code: this.deviceList[0].code, _type: 'SignalButton', hasSelected: 0}]);
} else if (this.deviceList && this.deviceList.length && this.deviceList[0]._type === 'Signal' && this.deviceList[0].type === 'SHUNTING') {
this.$store.dispatch('training/updateMapState', [{code: this.deviceList[0].code, _type: 'Signal', hasSelected: 0}]);
}
this.deviceList = [];
}
}
},
beforeDestroy() {
this.routeDataMap = null;
this.routeButtonCodeList = [];
},
methods: {
//
passWordCommit(data) {
let operate = {};
if (data.nextCmdType) {
operate = {
over: true,
operation: data.operation,
cmdType: data.nextCmdType,
param: data.param
};
} else {
operate = {
operationPre: data.operation,
operation: data.operateNext
};
}
this.trainingOperation(operate);
},
//
trainingOperation(operate) {
this.$store.dispatch('training/nextNew', operate).then(({ 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 });
}
}).catch((error) => {
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
updateButtonShow(val, old) {
if (old) {
//
const domId = OperationHandler.getDomIdByOperation(old);
const dom = document.getElementById(domId);
if (dom) {
dom.disabled = false;
dom.style.backgroundColor = this.buttonUpColor;
}
}
if (val) {
//
const domId = OperationHandler.getDomIdByOperation(val);
const dom = document.getElementById(domId);
if (dom) {
dom.disabled = true;
dom.style.backgroundColor = this.buttonDownColor;
}
}
},
// S
guideLockLeftButtonDown() {
const operate = {
operation: this.Switch.guideLock.leftButton.operation
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
//
if (this.guideLockRightFlag) {
operate.nextCmdType = CMD.Switch.CMD_SWITCH_MASTER_UNBLOCK;
operate.param = {right: false};
}
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
operate['operateNext'] = this.Command.close.password.operation;
this.$refs.password.doShow(operate);
}
});
},
// X
guideLockRightButtonDown() {
const operate = {
operation: this.Switch.guideLock.rightButton.operation
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
//
if (this.guideLockRightFlag) {
operate.nextCmdType = CMD.Switch.CMD_SWITCH_MASTER_UNBLOCK;
operate.param = {right: true};
}
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
operate['operateNext'] = this.Command.close.password.operation;
this.$refs.password.doShow(operate);
}
});
},
buttonDown(operation, commandTypeList) {
this.clearOperate();
if (operation != this.Command.cancel.clearMbm.operation) {
const operate = {
operation: operation
};
//
const operationList = [this.Signal.humanTrainRoute.button.operation, this.Section.fault.button.operation];
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.operation = operation;
this.commandTypeList = commandTypeList;
this.$store.dispatch('menuOperation/setButtonOperation', operation); //
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
//
if (operationList.includes(operation)) {
operate['operateNext'] = this.Command.close.password.operation;
this.$refs.password.doShow(operate);
}
this.timeNode = this.$store.state.socket.simulationTimeSync;
this.$store.dispatch('training/emitTipFresh');
}
});
} else {
//
const operate = {
start: true,
operation: operation
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.commandTypeList = [];
this.$store.dispatch('menuOperation/setButtonOperation', null);
}
});
}
},
//
handleRouteDataMap() {
this.routeDataMap = {};
this.routeButtonCodeList = [];
this.routeList.forEach(item => {
const name = item.btnCodeList.join('-');
this.routeDataMap[name] = item;
this.routeButtonCodeList.push(name);
});
},
// code
checkHaveRoute(deviceList) {
let name = '';
deviceList.forEach((device, index) =>{
name = name + (index ? '-' : '') + device.code;
});
return this.routeButtonCodeList.some(item => item.includes(name));
},
// OR
arrangementRouteOperation(deviceList) {
const operate = {
operation: this.Signal.arrangementRoute.button.operation
};
if (!this.routeDataMap) { this.handleRouteDataMap(); }
if (!this.checkHaveRoute(deviceList)) { // deviceList
this.$message.error('无效的进路按钮');
this.clearOperate();
return;
}
this.deviceTimeNode = this.$store.state.socket.simulationTimeSync;
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) { //
operate.code = deviceList[0].code;
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
if (valid) {
//
if (deviceList[0]._type === 'SignalButton' || (deviceList[0]._type === 'Signal' && deviceList[0].type === 'SHUNTING')) {
this.$store.dispatch('training/updateMapState', [{code: deviceList[0].code, _type: deviceList[0]._type, hasSelected: 1}]);
}
}
}).catch(() => {
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) {
let key = '';
deviceList.forEach((item, index) => {
key = key + (index ? '-' : '') + item.code;
});
const route = this.routeDataMap[key];
if (route) {
operate.over = true;
operate.cmdType = CMD.Signal.CMD_SIGNAL_SET_ROUTE;
operate.code = deviceList[deviceList.length - 1].code;
operate.param = {routeCode: route.code};
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
this.deviceTimeNode = 0;
}).catch(() => {
this.deviceTimeNode = 0;
this.$refs.noticeInfo.doShow();
}).finally(() => { this.clearOperate(); });
}
}
},
//
handelTotalCancel(model) {
const operate = {
over: true,
code: model.code,
operation: this.$store.state.menuOperation.buttonOperation,
cmdType: CMD.Signal.CMD_SIGNAL_CANCEL_ROUTE,
param: {
signalCode: model._type === 'Signal' ? model.code : model.signalCode
}
};
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
this.clearOperate();
}).catch((error) => {
this.clearOperate();
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
//
handleGuideSignal(model) {
const operate = {
over: true,
code: model.code,
operation: this.Signal.guide.button.operation,
cmdType: CMD.Signal.CMD_SIGNAL_ROUTE_GUIDE,
param: {signalCode: model.signalCode}
};
const signal = this.$store.getters['map/getDeviceByCode'](model.signalCode);
// 15s
if (signal.guideTime) {
this.sendCommand(operate);
} else {
operate.nextCmdType = CMD.Signal.CMD_SIGNAL_ROUTE_GUIDE;
this.$refs.password.doShow(operate);
}
},
//
handleTotalHumanSolution(model) {
const operate = {
over: true,
code: model.code,
operation: this.$store.state.menuOperation.buttonOperation,
val: model.code,
cmdType: CMD.Signal.CMD_SIGNAL_HUMAN_RELEASE_ROUTE
};
const signal = this.$store.getters['map/getDeviceByCode'](model.signalCode || model.code);
if (model._type === 'SignalButton' && model.type === 'PICK' && signal.routeLock) {
operate.param = {signalCode: model.signalCode};
this.sendCommand(operate);
} else if (model._type === 'Signal' && model.type === 'SHUNTING' && signal.routeLock) {
operate.param = {signalCode: model.code};
this.sendCommand(operate);
}
},
handelSwitchOperate(model) {
const operate = {
over: true,
code: model.code,
operation: this.$store.state.menuOperation.buttonOperation,
cmdType: this.cmdType,
param: { switchCode: model.code}
};
this.sendCommand(operate);
},
//
sendCommand(operate) {
this.$store.dispatch('training/nextNew', operate).then(({valid, response}) => {}).catch((error) => {
console.error(error);
this.$refs.noticeInfo.doShow();
}).finally(() =>{ this.clearOperate(); });
},
// ()
checkHasTrainButton(model) {
if (model.signalButtonList && model.signalButtonList.length > 0) {
let flag = false;
model.signalButtonList.forEach(item => {
const signalButton = this.$store.getters['map/getDeviceByCode'](item);
flag = flag || signalButton.type === 'PICK';
});
return flag;
} else {
return false;
}
},
handelSignalBlockOrUnblock(model) {
const buttonOperation = this.$store.state.menuOperation.buttonOperation;
const operate = {
over: true,
code: model.code,
operation: buttonOperation,
cmdType: '',
param: {}
};
if (model._type === 'Signal' && !this.checkHasTrainButton(model)) {
if (buttonOperation === this.Signal.lock.button.operation) {
operate.cmdType = CMD.Signal.CMD_SIGNAL_BLOCK;
operate.param = {signalCode: model.code};
} else if (buttonOperation === this.Signal.unlock.button.operation) {
operate.cmdType = CMD.Signal.CMD_SIGNAL_UNBLOCK;
operate.param = {signalCode: model.code};
}
} else if (model._type === 'SignalButton' && model.type === 'PICK') {
if (buttonOperation === this.Signal.lock.button.operation) {
operate.cmdType = CMD.Signal.CMD_SIGNAL_BLOCK;
operate.param = {signalCode: model.signalCode};
} else if (buttonOperation === this.Signal.unlock.button.operation) {
operate.cmdType = CMD.Signal.CMD_SIGNAL_UNBLOCK;
operate.param = {signalCode: model.signalCode};
}
}
this.sendCommand(operate);
},
handleGuideLock(model) {
const signal = this.$store.getters['map/getDeviceByCode'](model.signalCode);
if (signal && (this.guideLockRightFlag && signal.right) || (this.guideLockLeftFlag && !signal.right)) {
const operate = {
over: true,
code: model.code,
operation: this.guideLockRightFlag ? this.Switch.guideLock.rightButton : this.Switch.guideLock.leftButton,
nextCmdType: CMD.Switch.CMD_SWITCH_MASTER_LOCK,
param: {signalCode: model.signalCode}
};
this.$refs.password.doShow(operate);
}
},
handelFaultSection(model) {
if (model._type === 'Section') {
const operate = {
over: true,
code: model.code,
operation: this.$store.state.menuOperation.buttonOperation,
cmdType: CMD.Section.CMD_SECTION_FAULT_UNLOCK,
param: {sectionCode: model.code}
};
this.sendCommand(operate);
}
},
// CHANGE_DIRECTION
selectedChange() {
//
const model = this.selected; //
if ((this.$store.state.training.prdType != '01' && this.$store.state.training.prdType != '10') || this.selected._event !== MouseEvent.Left || (!model._type && !model._code)) {
return;
}
const buttonOperation = this.$store.state.menuOperation.buttonOperation;
const 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
];
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) {
this.handelTotalCancel(model);
} else if (buttonOperation === this.Signal.humanTrainRoute.button.operation) {
this.handleTotalHumanSolution(model);
} else if (switchOperation.includes(buttonOperation)) {
this.handelSwitchOperate(model);
} else if (buttonOperation === this.Signal.lock.button.operation || buttonOperation === this.Signal.unlock.button.operation) {
this.handelSignalBlockOrUnblock(model);
} else if (buttonOperation === this.Section.fault.button.operation) {
this.handelFaultSection(model);
} else {
this.clearOperate();
}
} else if (!buttonOperation) {
if (model._type === 'SignalButton' && !this.checkSignalBlock(model.signalCode) && model.type === 'GUIDE' ) {
this.handleGuideSignal(model);
} else if (model._type === 'SignalButton' && model.type === 'CHANGE_DIRECTION') {
//
this.changeDirection(model);
} else if (model._type === 'SignalButton' && !this.checkSignalBlock(model.signalCode) || (model._type === 'Signal' && !model.blockade)) {
this.deviceList.push(model);
this.arrangementRouteOperation(this.deviceList);
} else {
this.clearOperate();
}
} else { this.clearOperate(); }
if (this.timeNode) { this.timeNode = 0; }
},
checkSignalBlock(code) { //
if (code) {
const signal = this.$store.getters['map/getDeviceByCode'](code);
return signal && signal.blockade;
} else { return false; }
},
clearOperate() { //
this.deviceList && this.deviceList.length && this.$store.dispatch('training/updateMapState', [{code: this.deviceList[0].code, _type: this.deviceList[0]._type, hasSelected: 0}]);
this.deviceList = [];
Handler.clear(); //
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
}
};
this.$store.dispatch('training/nextNew', operate).then(({ valid, response }) => {
// this.clearOperate();
}).catch((error) => {
// this.clearOperate();
console.error(error);
this.$refs.noticeInfo.doShow();
});
}
}
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
$bg: #fff;
$hoverBg: #FEEE1A;
.button_box{
display: block;
float: left;
font-size: 13px;
height: 35px;
}
.menu {
background-color: $bg;
position: fixed;
border: 1px solid gray;
z-index: 10;
display: block;
.dsp-block {
display: block;
text-align: center;
border-radius: unset;
width: 100%;
}
.dsp-block:hover {
background-color: $hoverBg;
}
}
</style>

View File

@ -15,7 +15,7 @@
import PopMenu from '@/components/PopMenu';
import SectionControl from '@/jmapNew/theme/components/menus/dialog/sectionControl';
import TrainAddPlan from '@/jmapNew/theme/components/menus/dialog/trainAddPlan';
import SetFault from '@/jmapNew/theme/components/menus/dialog/setFaultNew';
import SetFault from '@/jmapNew/theme/components/menus/dialog/setFault';
import SectionDetail from './dialog/sectionDetail';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import { mapGetters } from 'vuex';
@ -51,14 +51,14 @@ export default {
menu: [],
menuNormal: {
Local: [
{
label: '图纸调用',
handler: this.drawingCall
},
{
label: '基础设备培训',
handler: this.baDeTrCall
}
// {
// label: '',
// handler: this.drawingCall
// },
// {
// label: '',
// handler: this.baDeTrCall
// }
],
Center: [
// {

View File

@ -16,7 +16,7 @@
<script>
import PopMenu from '@/components/PopMenu';
import RouteControl from '@/jmapNew/theme/components/menus/dialog/routeControl';
import SetFault from '@/jmapNew/theme/components/menus/dialog/setFaultNew';
import SetFault from '@/jmapNew/theme/components/menus/dialog/setFault';
import RouteSelection from './dialog/routeSelection';
import RouteDetail from './dialog/routeDetail';
import RouteHandControl from './dialog/routeHandControl';
@ -57,14 +57,14 @@ export default {
menu: [],
menuNormal: {
Local: [
{
label: '图纸调用',
handler: this.drawingCall
},
{
label: '基础设备培训',
handler: this.baDeTrCall
}
// {
// label: '',
// handler: this.drawingCall
// },
// {
// label: '',
// handler: this.baDeTrCall
// }
// {
// label: '',
// handler: this.arrangementRoute,

View File

@ -14,7 +14,7 @@ import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo'
import CancelMouseState from '@/mixin/CancelMouseState';
import { mapGetters } from 'vuex';
import { DeviceMenu, OperateMode } from '@/scripts/ConstDic';
import SetFault from '@/jmapNew/theme/components/menus/dialog/setFaultNew';
import SetFault from '@/jmapNew/theme/components/menus/dialog/setFault';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import CMD from '@/scripts/cmdPlugin/CommandEnum';
@ -42,14 +42,14 @@ export default {
menu: [],
menuNormal: {
Local: [
{
label: '图纸调用',
handler: this.drawingCall
},
{
label: '基础设备培训',
handler: this.baDeTrCall
}
// {
// label: '',
// handler: this.drawingCall
// },
// {
// label: '',
// handler: this.baDeTrCall
// }
],
Center: [
]

View File

@ -13,7 +13,7 @@ import PopMenu from '@/components/PopMenu';
import StandControl from './dialog/standControl';
import StandDetail from './dialog/standDetail';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import SetFault from '@/jmapNew/theme/components/menus/dialog/setFaultNew';
import SetFault from '@/jmapNew/theme/components/menus/dialog/setFault';
import { mapGetters } from 'vuex';
import { DeviceMenu, OperateMode } from '@/scripts/ConstDic';
import CMD from '@/scripts/cmdPlugin/CommandEnum';

View File

@ -15,7 +15,7 @@ import PopMenu from '@/components/PopMenu';
import DrawSelect from './dialog/drawSelect';
import SectionControl from '@/jmapNew/theme/components/menus/dialog/sectionControl';
import SwitchControl from '@/jmapNew/theme/components/menus/dialog/switchControl';
import SetFault from '@/jmapNew/theme/components/menus/dialog/setFaultNew';
import SetFault from '@/jmapNew/theme/components/menus/dialog/setFault';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import CMD from '@/scripts/cmdPlugin/CommandEnum';
import SwitchHookLock from '@/jmapNew/theme/components/menus/dialog/switchHookLock';
@ -51,14 +51,14 @@ export default {
menu: [],
menuNormal: {
Local: [
{
label: '图纸调用',
handler: this.drawingCall
},
{
label: '基础设备培训',
handler: this.baDeTrCall
}
// {
// label: '',
// handler: this.drawingCall
// },
// {
// label: '',
// handler: this.baDeTrCall
// }
],
Center: [
// {

View File

@ -9,13 +9,14 @@
<train-delete-number ref="trainDeleteNumber" />
<train-detail-info ref="trainDetailInfo" />
<set-fault ref="setFault" pop-class="chengdou-03__systerm" />
<train-set-plan ref="trainSetPlan" />
</div>
</template>
<script>
import PopMenu from '@/components/PopMenu';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import SetFault from '@/jmapNew/theme/components/menus/dialog/setFaultNew';
import SetFault from '@/jmapNew/theme/components/menus/dialog/setFault';
import { mapGetters } from 'vuex';
import { DeviceMenu, OperateMode } from '@/scripts/ConstDic';
import TrainControl from './dialog/trainControl';
@ -24,6 +25,7 @@ import TrainMoveNumber from './dialog/trainMoveNumber';
import TrainCreateNumber from './dialog/trainCreateNumber';
import TrainDeleteNumber from './dialog/trainDeleteNumber';
import TrainDetailInfo from './dialog/trainDetailInfo';
import TrainSetPlan from './dialog/trainSetPlan';
import CancelMouseState from '@/mixin/CancelMouseState';
import CMD from '@/scripts/cmdPlugin/CommandEnum';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
@ -41,7 +43,8 @@ export default {
TrainCreateNumber,
TrainDeleteNumber,
TrainDetailInfo,
SetFault
SetFault,
TrainSetPlan
},
mixins: [
CancelMouseState
@ -59,53 +62,58 @@ export default {
menu: [],
menuNormal: {
Local: [
{
label: '新建计划列车',
handler: this.createPlanTrain,
cmdType: CMD.TrainWindow.CMD_Train_Init_Plan
}
{
label: '设置计划车',
handler: this.setPlanTrain,
cmdType: CMD.TrainWindow.CMD_TRAIN_SET_PLAN
},
],
Center: [
{
label: '新建车组号',
handler: this.createTrainNo
},
{
label: '移动车组号',
handler: this.moveTrainNo
},
{
label: '删除车组号',
handler: this.deleteTrainNo
},
{
label: '修改车组号',
handler: this.editTrainNo
},
{
label: '设计划车',
handler: this.setPlanTrainId
},
{
label: '设目的地',
handler: this.destinationTrainId
},
{
label: '设人工车',
handler: this.artificialTrainId
},
{
label: '设特殊人工车',
handler: this.undeveloped
},
{
label: '详细列车信息',
handler: this.detailTrainInfo
},
{
label: '属性',
handler: this.undeveloped
}
{
label: '设置计划车',
handler: this.setPlanTrain,
cmdType: CMD.TrainWindow.CMD_TRAIN_SET_PLAN
}
// {
// label: '',
// handler: this.createTrainNo
// },
// {
// label: '',
// handler: this.moveTrainNo
// },
// {
// label: '',
// handler: this.deleteTrainNo
// },
// {
// label: '',
// handler: this.editTrainNo
// },
// {
// label: '',
// handler: this.setPlanTrainId
// },
// {
// label: '',
// handler: this.destinationTrainId
// },
// {
// label: '',
// handler: this.artificialTrainId
// },
// {
// label: '',
// handler: this.undeveloped
// },
// {
// label: '',
// handler: this.detailTrainInfo
// },
// {
// label: '',
// handler: this.undeveloped
// }
]
},
menuForce: [
@ -123,6 +131,31 @@ export default {
}
],
menuDirective: [
{
label: '切换驾驶模式',
children: [
{
label: '转AM-C模式',
handler: this.handlerApplyAmcMode
},
{
label: '转SM-C模式',
handler: this.handlerApplySmcMode
},
{
label: '转AM-I模式',
handler: this.handlerApplyAmiMode
},
{
label: '转SM-I模式',
handler: this.handlerApplySmiMode
},
{
label: '转RM模式',
handler: this.handlerApplyRmMode
}
]
},
{
label: '确认运行至前方站',
handler: this.nextStation
@ -138,7 +171,15 @@ export default {
{
label: '越红灯行驶',
handler: this.handleOverEedLight
}
},
{
label: '驾驶至',
handler: this.handleDriveTo
},
{
label: '换端',
handler: this.handleTurnDirection
}
],
menuSpeed: [
{
@ -171,6 +212,7 @@ export default {
initMenu() {
//
this.menu = MenuContextHandler.covert(this.menuNormal);
console.log(this.menu, '================');
//
if (this.operatemode === OperateMode.FAULT) {
if (!this.$store.state.scriptRecord.bgSet) {
@ -287,6 +329,21 @@ export default {
this.$refs.noticeInfo.doShow();
});
},
//
setPlanTrain() {
const operate = {
start: true,
code: this.selected.code,
operation: OperationEvent.Train.editTrainId.menu.operation,
param: {}
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.$refs.trainSetPlan.doShow(operate, this.selected);
}
});
},
//
setPlanTrainId() {
const operate = {
@ -415,6 +472,93 @@ export default {
}
});
},
handlerApplyAmcMode() {
const group = this.$route.query.group;
const param = {
commandType: 'Change_Preselection_Mode',
targetMemberId: this.memberList.find(ele => ele.deviceCode == this.selected.code).id,
params: { preselectionMode: 'AM_C' }
};
commitTrainSend(group, param).then(({ valid, operate }) => {
}).catch((error) => {
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
handlerApplySmcMode() {
const group = this.$route.query.group;
const param = {
commandType: 'Change_Preselection_Mode',
targetMemberId: this.memberList.find(ele => ele.deviceCode == this.selected.code).id,
params: { preselectionMode: 'SM_C' }
};
commitTrainSend(group, param).then(({ valid, operate }) => {
}).catch((error) => {
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
handlerApplyAmiMode() {
const group = this.$route.query.group;
const param = {
commandType: 'Change_Preselection_Mode',
targetMemberId: this.memberList.find(ele => ele.deviceCode == this.selected.code).id,
params: { preselectionMode: 'AM_I' }
};
commitTrainSend(group, param).then(({ valid, operate }) => {
}).catch((error) => {
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
handlerApplySmiMode() {
const group = this.$route.query.group;
const param = {
commandType: 'Change_Preselection_Mode',
targetMemberId: this.memberList.find(ele => ele.deviceCode == this.selected.code).id,
params: { preselectionMode: 'SM_I' }
};
commitTrainSend(group, param).then(({ valid, operate }) => {
}).catch((error) => {
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
handlerApplyRmMode() {
const group = this.$route.query.group;
const param = {
commandType: 'Change_Preselection_Mode',
targetMemberId: this.memberList.find(ele => ele.deviceCode == this.selected.code).id,
params: { preselectionMode: 'RM' }
};
commitTrainSend(group, param).then(({ valid, operate }) => {
}).catch((error) => {
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
//
handleDriveTo() {
commitOperate(menuOperate.Common.collocation, { code: this.selected.code }, 0).then(({valid, operate})=>{
if (valid) {
this.$refs.setFault.doShow(menuOperate.Common.collocation, this.selected, true);
}
});
},
//
handleTurnDirection() {
const group = this.$route.query.group;
const param = {
commandType: 'Turn_Direction',
targetMemberId: this.memberList.find(ele => ele.deviceCode == this.selected.code).id,
params: {}
};
commitTrainSend(group, param).then(({valid, operate}) => {
}).catch((error)=> {
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
undeveloped() {
this.doClose();
this.$alert('实现中......', '提示', {

View File

@ -90,7 +90,7 @@ class Theme {
'13':'all',
'14':'ecStation',
'15':'all',
'16':'all'
'16':'ecStation'
};
}

View File

@ -116,7 +116,8 @@ export default {
{ label: '全线限速', value: 'LimitControl' },
{ label: '司机', value: 'Driver' },
{ label: '列车', value: 'Train' },
{ label: '方向杆', value: 'DirectionRod'}
{ label: '方向杆', value: 'DirectionRod'},
{ label: 'CTC', value: 'CTC' }
],
simulationDeviceList:[
@ -240,6 +241,14 @@ export default {
{ label: '默认', value: 'DEFAULT' },
{ label: '自动换端', value: 'AUTO' },
{ label: '无人折返', value: 'UNMANNED' }
]
],
directionLabelList: [
{ label: 'X', value: 'X' },
{ label: 'XF', value: 'XF' },
{ label: 'XD', value: 'XD' },
{ label: 'S', value: 'S' },
{ label: 'SF', value: 'SF' },
{ label: 'SD', value: 'SD' }
]
}
};

View File

@ -285,10 +285,12 @@ export default {
/** 重启联锁机 */
CMD_STATION_RESTART_INTERLOCK_MACHINE: {value: 'Station_Restart_Interlock_Machine', label: '重启联锁机'},
/** 释放指令 */
CMD_STATION_RELEASE : {value:'Station_Release', label: '释放指令' }
CMD_STATION_RELEASE : {value:'Station_Release', label: '释放指令' },
/** 引导总锁 */
CMD_STATION_MASTER_LOCK: {value: 'Station_Master_Lock', label: '设置引导总锁'},
/** 取消引导总锁 */
CMD_STATION_MASTER_UNLOCK: {value: 'Station_Master_Unlock', label: '取消引导总锁'}
},
// 列车
Train: {
/** 人工限速行驶 */
CMD_TRAIN_MANUAL_LIMIT_DRIVE: {value:'Train_Manual_Limit_Drive', label: '人工限速行驶'},
@ -366,5 +368,17 @@ export default {
},
DirectionRod: {
CMD_DIRECTION_CHANGE: {value: 'Direction_Change', label: '切换方向'}
},
CTC: {
CTC_RECEIVING_NOTICE: {value: 'CTC_RECEIVING_NOTICE', label: '接预'},
CTC_DEPARTURE_NOTICE: {value: 'CTC_DEPARTURE_NOTICE', label: '发预'},
CTC_ASSIST_PRESS_DOWN_TURN_DIRECTION:{value:'ASSIST_PRESS_DOWN_TURN_DIRECTION', label:'改方'},
CTC_AUTO_TRIGGER: {value: 'CTC_AUTO_TRIGGER', label: '自动触发'},
CTC_ASSIST_PRESS_MAIN_ASSIST:{value: 'ASSIST_PRESS_MAIN_ASSIST', label: '总辅助'},
CTC_ASSIST_PRESS_RECEIVE_ASSIST:{value: 'ASSIST_PRESS_RECEIVE_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_RESTORE:{value: 'ASSIST_PRESS_RESTORE', label: '复原'},
CTC_ASSIST_PRESS_ACCIDENT:{value: 'ASSIST_PRESS_ACCIDENT', label: '事故'}
}
};

View File

@ -2,7 +2,8 @@
export const State2SimulationMap = {
'01': 'Local', // 现地工作站
'02': 'Center', // 中心调度工作站
'09':'Depot_IL' // 车辆段工作站
'09':'Depot_IL', // 车辆段工作站
'10': 'Local'
};
export const State2ControlMap = {

View File

@ -1748,20 +1748,20 @@ export const OperationEvent = {
domId: '_Tips-Signal-conflictRoute-Menu{TOP}'
}
},
// 点灯 (大铁)
signalLight: {
// 点灯 (大铁)
signalLight: {
menuButton: {
operation: '3231',
domId: '_Tips-Signal-signalLight-MenuButton{BOTTOM}'
}
},
// 灭灯 (大铁)
signalDestroy: {
domId: '_Tips-Signal-signalLight-MenuButton{BOTTOM}'
}
},
// 灭灯 (大铁)
signalDestroy: {
menuButton: {
operation: '3232',
domId: '_Tips-Signal-signalDestroy-MenuButton{BOTTOM}'
}
}
domId: '_Tips-Signal-signalDestroy-MenuButton{BOTTOM}'
}
}
},
// 物理区段操作
@ -2955,7 +2955,22 @@ export const OperationEvent = {
operation: '620',
domId: '_Tips-Station-stationRelease'
}
}
},
// 引导总锁Station_Master_Lock
stationMasterLock: {
menuButton: {
operation: '621',
domId: '_Tips-Station-stationMasterLock'
},
leftButton: {
operation: '6211',
domId: '_Tips-Station-stationMasterLock-leftButton'
},
rightButton: {
operation: '6212',
domId: '_Tips-Station-stationMasterLock-rightButton'
}
}
},
// 列车
@ -3536,6 +3551,69 @@ export const OperationEvent = {
domId: '_Tips-Control-StationControl-Confirm{TOP}'
}
}
},
CTCCommand: {
receivingNotice: {
menu: {
operation: '1100',
domId: '_Tips-CTC-ReceivingNotice-Menu{TOP}'
}
},
departureNotice: {
menu: {
operation: '1101',
domId: '_Tips-CTC-DepartureNotice-Menu{TOP}'
}
},
assistPressDownTurnDirection:{
menu:{
operation:'1102',
domId: '_Tips-CTC-AssistPressDownTurnDirection-Menu{TOP}'
}
},
autoTrigger: {
menu: {
operation: '1103',
domId: '_Tips-CTC-AutoTrigger-Menu{TOP}'
}
},
assistPressMainAssist:{
menu: {
operation: '1104',
domId: '_Tips-CTC-AssistPressMainAssist-Menu{TOP}'
}
},
assistPressReceiveAssist:{
menu: {
operation: '1105',
domId: '_Tips-CTC-AssistPressReceiveAssist-Menu{TOP}'
}
},
assistPressDeliverAssist:{
menu: {
operation: '1106',
domId: '_Tips-CTC-AssistPressDeliverAssist-Menu{TOP}'
}
},
assistPressBlock:{
menu: {
operation: '1107',
domId: '_Tips-CTC-AssistPressBlock-Menu{TOP}'
}
},
assistPressRestore:{
menu: {
operation: '1108',
domId: '_Tips-CTC-AssistPressRestore-Menu{TOP}'
}
},
assistPressAccident:{
menu: {
operation: '1109',
domId: '_Tips-CTC-AssistPressAccident-Menu{TOP}'
}
}
}
};

View File

@ -206,6 +206,7 @@ const map = {
state: {
routeData: {}, // 进路数据
routeList: [], // 进路list
mapStationDirectionData:{}, // 大铁项目 车站方向数据
routeStartSignalData: {}, // 进路始端信号机数据
autoReentryData: {}, // 自动折返数据
autoReentryList: [], // 自动折返list
@ -237,6 +238,8 @@ const map = {
activeTrainListChange: 0, // 当前按计划行车的列车列表变化标识只对列车的groupNumber进行了检测
activeTrainList: [], // 当前按计划行车的列车列表
showCentralizedStationCode: '', // 现地分集中站显示(集中站code)
stationSGuideMasterLock: false,
stationXGuideMasterLock: false,
showCentralizedStationNum: 0, // 现地分集中站显示判断
overlapList: [], // 延续保护list
overlapData: {}, // 延续保护数据
@ -693,12 +696,21 @@ const map = {
return flag;
}
},
checkStationGuideMaster: state => (stationCode,sGuideMasterLock,xGuideMasterLock) => {
if (state.showCentralizedStationCode === stationCode) {
state.stationSGuideMasterLock = sGuideMasterLock;
state.stationXGuideMasterLock = xGuideMasterLock;
}
},
checkDeviceShow: state => deviceCode => {
if (state.map && state.map.displayList && state.map.displayList.length && store.state.training.prdType) {
let flag = false;
const stationCode = state.showCentralizedStationCode;
if (deviceCode === 'BTN36775'){
console.log(store.state.training.prdType, state.map.displayList, '---', stationCode, deviceCode);
}
state.map.displayList.forEach(item => {
if (
if (
store.state.training.prdType === '01' &&
item.type === 'LOCAL' &&
((item.stationCodeList.includes(stationCode) && item.elementList.includes(deviceCode)) || !stationCode)
@ -950,6 +962,13 @@ const map = {
});
state.routeList = routeDataList;
},
setMapStationDirectionData: (state, mapStationDirectionList) => {
mapStationDirectionList.forEach(data => {
state.mapStationDirectionData[data.code] = data;
});
},
setOverlapData: (state, overlapList) => {
state.overlapData = {};
overlapList.forEach(data => {
@ -1087,6 +1106,8 @@ const map = {
commit('setMapName', mapData.name);
commit('setMapData', mapData.graphDataNew);
commit('setRouteData', mapData.logicDataNew.routeList);
// 设置大铁项目 车站方向数据
commit('setMapStationDirectionData', mapData.logicDataNew.draftMapStationDirectionList || []);
commit('setOverlapData', overlapData);
commit('setAutoReentryData', mapData.logicDataNew.autoReentryList);
commit('setSignalApproachSectionData', mapData.logicDataNew.signalApproachSectionList);

View File

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

View File

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

View File

@ -219,7 +219,7 @@ export default {
});
},
async start() {
const jumpFunc = ['jump', 'jump', 'enterIntegratedSimulation', 'jump', 'jumpScheduling', 'enterISCS', 'enterScreen', '', 'jump'];
const jumpFunc = ['jump', 'jump', 'enterIntegratedSimulation', 'jump', 'jumpScheduling', 'enterISCS', 'enterScreen', '', 'jump', 'jump'];
this[jumpFunc[parseInt(this.courseModel.prdType) - 1]]();
},
jumpSimulation() {

View File

@ -8,6 +8,7 @@
<!-- <el-button v-if="$route.query.lineCode === '15'" size="small" type="jumpjlmap3d" @click="jumpjlmap3dDriver">司机视角</el-button> -->
<el-button v-if="$route.query.lineCode === '15'" size="small" @click="clCaAnCall">经典案例分析</el-button>
<el-button v-if="$route.query.lineCode === '15'" size="small" @click="normStudy">规范学习</el-button>
<el-button v-if="$route.query.lineCode === '15'|| $route.query.lineCode === '16'" size="small" @click="showLineBoard">占线板</el-button>
</el-button-group>
</div>
<Jl3dRailway-Device
@ -19,6 +20,7 @@
/>
<Jl3dRailway-Drive v-show="drivingShow" ref="Jl3dRailwayDrive" :panel-show="drivingShow" @showdriving="showdriving" />
<draw-select ref="drawSelect" />
<line-board ref="lineBoard" />
</div>
</template>
<script>
@ -30,12 +32,14 @@ import { EventBus } from '@/scripts/event-bus';
import { getPostByProjectCode } from '@/api/learn';
import { ProjectCode } from '@/scripts/ProjectConfig';
import DrawSelect from '@/jmapNew/theme/datie_01/menus/dialog/drawSelect';
import LineBoard from './lineBoard';
export default {
name:'DemonMenu',
components:{
Jl3dRailwayDevice,
Jl3dRailwayDrive,
DrawSelect
DrawSelect,
LineBoard
},
props:{
isAllShow:{
@ -160,6 +164,9 @@ export default {
normStudy() {
this.$refs.drawSelect.doShow(null, 'normStudy');
},
showLineBoard() {
this.$refs.lineBoard.doShow();
},
jumpjlmap3dmodel() {
if (this.deviceif == false) {
this.deviceif = true;

View File

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

View File

@ -7,9 +7,9 @@
<!-- 设备视图 -->
<el-button v-if="jl3dmodelShow && !isContest && project !== 'bjd'" size="small" @click="jumpjlmap3dmodel">{{ jl3dmodel }}</el-button>
<!-- 三维视图/数字沙盘 -->
<el-button v-if="jl3dnameShow && !isContest && project !== 'bjd'" size="small" @click="jumpjlmap3d">{{ jl3dname }}</el-button>
<el-button v-if="jl3dnameShow && !isContest && project !== 'bjd' && $route.query.lineCode !== '16'" size="small" @click="jumpjlmap3d">{{ jl3dname }}</el-button>
<!-- cctv视图 -->
<el-button v-if="jl3dnameShow && !isContest && project !== 'bjd'" size="small" @click="jumpjl3dpassflow">{{ jl3dpassflow }}</el-button>
<el-button v-if="jl3dnameShow && !isContest && project !== 'bjd' && $route.query.lineCode !== '16'" size="small" @click="jumpjl3dpassflow">{{ jl3dpassflow }}</el-button>
<!-- 客流规划视图 -->
<!-- <el-button v-if="trafficplanShow && project == 'bjd' && !isContest" size="small" @click="jumpjl3dtrafficplan">{{ jl3dtrafficplan }}</el-button>
<el-button v-if="trafficplanShow && project == 'bjd' && !isContest" size="small" @click="jumpjl3dtraffictrain">{{ $t('display.demon.traffictraintext') }}</el-button> -->

View File

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

View File

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

View File

@ -312,6 +312,7 @@ export default {
const lineCode = this.$store.state.map.map.skinVO.code;
if (Vue.prototype.$theme) {
this.localStationShow = Vue.prototype.$theme._localShowMode[lineCode] === 'ecStation';
console.log(this.localStationShow, '============');
}
this.$store.dispatch('map/setTrainWindowShow', this.previewOrMapDraw);
},
@ -498,7 +499,7 @@ export default {
for (const key in mapDevice) {
list.push(mapDevice[key]);
}
console.log(list, stationCode, '=============');
this.$jlmap.updateShowStation(list, stationCode);
!setCenter && stationCode && this.setCenter(stationCode);
},

View File

@ -490,6 +490,16 @@ export default {
this.mapViewLoadedOver && this.setShowStation('');
this.drivingShow = false;
break;
case 'RAIL_CTC':
this.$store.dispatch('training/setPrdType', '10');
this.$store.dispatch('training/setRoles', 'RAIL_CTC');
this.$refs.menuSchema.chiShowStation = deviceCode;
this.showStation = deviceCode;
this.$jlmap.amendDevice([...this.sectionList, ...this.signalList, ...this.trainWindowList]);
this.mapViewLoadedOver && this.switchStationMode(deviceCode);
this.jl3dmaintainershow = false;
this.drivingShow = false;
break;
default:
this.$store.dispatch('training/setPrdType', '');
this.$store.dispatch('training/setRoles', 'AUDIENCE');

View File

@ -113,7 +113,10 @@ export default {
}, {
labelName: '车辆段',
children: []
}]
},{
labelName: 'CTC操作员',
children: []
}]
};
},
computed: {
@ -146,6 +149,7 @@ export default {
const stationSupervisorList = [];
const driverList = [];
const maintainerList = [];
const ctcOperatorList = [];
val.forEach(item => {
const device = this.$store.getters['map/getDeviceByCode'](item.deviceCode);
switch (item.type) {
@ -173,6 +177,10 @@ export default {
this.memberData[item.id].labelName = '通号' + (item.name || '');
maintainerList.push(this.memberData[item.id]);
break;
case 'RAIL_CTC':
this.memberData[item.id].labelName = 'CTC操作员' + device.name;
ctcOperatorList.push(this.memberData[item.id]);
break
}
});
this.treeData = [{
@ -199,7 +207,11 @@ export default {
labelName: '电力调度',
id: 'electricDispatcher',
children: electricDispatcherList
}
}, {
labelName: 'CTC操作员',
id: 'ctcOperator',
children: ctcOperatorList
}
];
this.$nextTick(() => {
if (this.$refs.tree) {

View File

@ -33,8 +33,8 @@
<template v-if="!dataError"> <!-- 地图错误判断 -->
<template v-if="isAdmin && project != 'refereeJsxt' && $route.query.type !== 'ILW'">
<!-- 按计划行车 -->
<el-button v-if="project !== 'srsandbox'" type="success" :disabled="isDisable" size="small" @click="selectBeginTime">{{ $t('joinTraining.drivingByPlan') }}</el-button>
<el-button v-if="isAdministrator" v-loading="pauseLoading" :type="simulationPaused?'warning':'primary'" size="small" @click="startOrPause">{{ simulationPaused?'开始':'暂停' }}</el-button>
<el-button v-if="project !== 'srsandbox' && !datie" type="success" :disabled="isDisable" size="small" @click="selectBeginTime">{{ $t('joinTraining.drivingByPlan') }}</el-button>
<el-button v-if="isAdministrator && !datie" v-loading="pauseLoading" :type="simulationPaused?'warning':'primary'" size="small" @click="startOrPause">{{ simulationPaused?'开始':'暂停' }}</el-button>
<el-button type="danger" size="small" @click="end">{{ $t('joinTraining.initialize') }}</el-button>
</template>
</template>
@ -129,12 +129,15 @@ export default {
lineCode() {
return this.$route.query.lineCode;
},
datie(){
return this.$route.query.lineCode == '16'
},
mapId() {
return this.$route.query.mapId;
},
isShowScheduling() {
//
return (this.$store.state.training.prdType == '02' || this.isAdmin) && (!this.$route.query.projectDevice);
return (this.$store.state.training.prdType == '02' || this.isAdmin) && (!this.$route.query.projectDevice) && this.$route.query.lineCode !== '16';
},
isDISPATCHER() {
return (this.$store.state.training.prdType == '01' || this.$store.state.training.prdType == '02' || this.isAdmin) && (!this.$route.query.projectDevice || this.project == 'sdy');

View File

@ -13,12 +13,13 @@
/>
</el-select>
<el-button-group>
<el-button v-if="datie" size="small" @click="showLineBoard">占线板</el-button>
<el-button v-if="userRole=== 'STATION_SUPERVISOR' && !$route.query.projectDevice && $route.query.lineCode!='08'" size="small" @click="goIbp">IBP盘</el-button>
<el-button v-if="userRole=== 'DISPATCHER' && !$route.query.projectDevice && hasBigScreen" size="small" @click="goBigScreen">大屏</el-button>
<el-button v-if="(userRole==='DISPATCHER' || userRole=== 'STATION_SUPERVISOR') && !$route.query.projectDevice && iscsShow" size="small" @click="goIscs">ISCS</el-button>
<el-button v-if="running && !dataError && $route.query.type !== 'ILW'" size="small" :disabled="viewDisabled" @click="viewRunPlan">{{ $t('joinTraining.runGraphPreview') }}</el-button>
<el-button v-if="running && !dataError && $route.query.type !== 'ILW' && !datie" size="small" :disabled="viewDisabled" @click="viewRunPlan">{{ $t('joinTraining.runGraphPreview') }}</el-button>
<template v-if="isAdmin">
<el-button v-if="!running && !dataError && $route.query.type !== 'ILW'" size="small" type="warning" @click="loadRunPlan">
<el-button v-if="!running && !dataError && $route.query.type !== 'ILW' && !datie" size="small" type="warning" @click="loadRunPlan">
{{ $t('joinTraining.runGraphLoading') }}</el-button><!-- -->
</template>
</el-button-group>
@ -29,6 +30,7 @@
<!-- running && -->
<join-run-plan-view v-if="!dataError" ref="runPlanView" :group="group" />
<select-ibp ref="selectIbp" />
<line-board ref="lineBoard" />
</div>
</template>
@ -44,11 +46,13 @@ import { loadRunPlanData } from '@/utils/loaddata';
import { EventBus } from '@/scripts/event-bus';
import { timesSpeedPlayback } from '@/api/rtSimulation';
import { queryHasIscs } from '@/api/iscs';
import LineBoard from '../displayCity/lineBoard';
export default {
name: 'MenuDemonSchema',
components:{
JoinRunPlanView,
SelectIbp
SelectIbp,
LineBoard
},
props: {
group: {
@ -134,6 +138,9 @@ export default {
running() {
return this.$store.state.training.started;
},
datie(){
return this.$route.query.lineCode == '16'
},
isScreen() {
return this.$store.state.training.prdType === '07';
},
@ -303,6 +310,9 @@ export default {
this.$message.error('设置倍速失败!');
});
},
showLineBoard() {
this.$refs.lineBoard.doShow();
},
// ibp
goIbp() {
// this.$refs.selectIbp.doShow();

View File

@ -93,7 +93,7 @@ export default {
'routeNameUseEndOppositeSignalName', 'generateTbRoute', 'tbRouteNameUseEndOppositeSignalName', 'routeSignalAlwaysGreen',
'routeApartByOverlap', 'overlapOnlySwitch', 'overlapSwitchNpOnly', 'overlapSignalOppositeSwitchNpOnly',
'generateCycle', 'routeButton', 'likeHa1', 'getNearlySignal', 'overlapSettingByTrigger', 'generateFls', 'signalApproachNotPassPreSignal',
'generateDestination', 'ctcOverlapOnlyTurnBackStationLock', 'routeInterlockDoNotIncludeStandHoldTrain', 'handleDepot'
'generateDestination', 'ctcOverlapOnlyTurnBackStationLock', 'routeInterlockDoNotIncludeStandHoldTrain', 'handleDepot', 'railway'
],
multipleList: ['sharingECStations'],
selectList: [],
@ -129,7 +129,8 @@ export default {
sharingECStations: '共享紧急关闭效果的车站',
ctcOverlapOnlyTurnBackStationLock: 'CTC列车进路延续保护仅折返站处锁闭',
routeInterlockDoNotIncludeStandHoldTrain: '进路联锁不包含站台扣车',
handleDepot: '是否处理停车场/车辆段逻辑'
handleDepot: '是否处理停车场/车辆段逻辑',
railway: '是否大铁线路'
}
};
},

View File

@ -1,7 +1,11 @@
<template>
<el-dialog v-dialogDrag :title="$t('map.routePreview')" :visible.sync="show" width="95%" :before-do-close="doClose" append-to-body>
<div>
<div v-if="$route.query.lineCode == '16'" style="display: flex;justify-content: right;">
<el-button size="small" type="primary" @click="generationRoute">一键生成</el-button>
</div>
<QueryListPage
style="margin-top: 10px;"
ref="queryListPage"
:pager-config="pagerConfig"
:query-form="queryForm"
@ -13,7 +17,7 @@
</el-dialog>
</template>
<script>
import { getBigRouteList, deleteBigRoute } from '@/api/jmap/mapdraft';
import { getBigRouteList, deleteBigRoute, generateRoute } from '@/api/jmap/mapdraft';
export default {
name:'BigRouteDetail',
props: {
@ -227,7 +231,7 @@ export default {
},
getBtnCodeList(btnCodeList) {
const nameList = [];
btnCodeList.forEach(item => {
btnCodeList && btnCodeList.forEach(item => {
nameList.push(this.formatName(item));
});
return nameList;
@ -236,7 +240,7 @@ export default {
let name = '';
const device = this.$store.getters['map/getDeviceByCode'](code);
if (device) {
name = device.name || '';
name = device.name || device.code;
}
return name;
},
@ -262,8 +266,25 @@ export default {
}).catch(error=>{
this.$messageBox('删除进路失败:' + error.meessage);
});
}
},
generationRoute() {
this.$confirm('是否确认一键生成进路?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.loading = true;
generateRoute(this.$route.params.mapId).then(response => {
this.$message.success('一键生成进路成功');
}).catch(() => {
this.$messageBox('一键生成进路失败');
}).finally(() => {
this.loading = false;
});
}).catch(() => {
this.$message.info('已取消一键生成进路');
});
}
}
};
</script>

View File

@ -32,6 +32,7 @@
import RouteOperate from './routeoperate/index';
import RoutingOperate from './routingoperate/index';
import BigRoutingOperate from './bigroutingoperate/index';
import IndicatorAssociatedInfo from './indicatorAssociatedInfo/index';
import AutomaticOperate from './automaticoperate/index';
// import PathOperate from './pathoperate/index';
import RunLevelOperate from './runLeveloperate/index';
@ -56,7 +57,8 @@ export default {
SignalOperate,
TurnedOperate,
DwellTimeOperate,
ContinueProtectOperate
ContinueProtectOperate,
IndicatorAssociatedInfo
// DestinationOperate
},
props: {
@ -94,10 +96,11 @@ export default {
},
mounted() {
this.initLoad();
if (this.$route.query.lineCode == '15') {
if (this.$route.query.lineCode == '15' || this.$route.query.lineCode == '16') {
this.tabList = [
{label: '大铁进路', name:'bigRoutingOperate', menus:BigRoutingOperate},
{label: this.$t('map.routing'), name:'routing', menus:RoutingOperate}
{label: '指示灯关联', name: 'indicatorAssociatedInfo', menus: IndicatorAssociatedInfo}
// {label: this.$t('map.routing'), name:'routing', menus:RoutingOperate}
];
this.enabledTab = 'bigRoutingOperate';
} else {

View File

@ -0,0 +1,134 @@
<template>
<el-dialog v-dialogDrag title="指示灯关联关系预览" :visible.sync="show" width="95%" :before-do-close="doClose" append-to-body>
<div>
<QueryListPage
ref="queryListPage"
:pager-config="pagerConfig"
:query-form="queryForm"
:query-list="queryList"
/>
</div>
</el-dialog>
</template>
<script>
import { getBigRouteList } from '@/api/jmap/mapdraft';
import { queryAssistListPaged, deleteAssist } from '@/api/assist';
export default {
name:'BigRouteDetail',
props: {
mapInfo: {
type: Object,
default() {
return null;
}
}
},
data() {
return {
show:false,
pagerConfig: {
pageSize: 'pageSize',
pageIndex: 'pageNum'
},
filterRouteMap:{},
queryForm: {
show:false
},
queryList: {
query: this.queryFunction,
height:'500px',
selectCheckShow: false,
indexShow: true,
columns: [
{
title: '关联车站',
prop: 'stationCode',
type: 'tag',
columnValue: (row) => { return this.getDeviceName(row.stationCode); },
tagType: (row) => { return ''; }
},
{
title: '运行方向',
prop: 'labelEnum'
},
{
title: '关联区段列表',
prop: 'sectionList',
type: 'tagMore',
columnValue: (row) => { return this.getSectionName(row.sectionList); },
tagType: (row) => { return ''; }
},
{
title: '关联信号机',
prop: 'signalCode',
type: 'tag',
columnValue: (row) => { return this.getDeviceName(row.signalCode); },
tagType: (row) => { return ''; }
},
{
type: 'button',
title: this.$t('global.operate'),
width: '200',
buttons: [
{
name: '删除',
handleClick: this.deleteRoute,
type: 'danger'
}
]
}
]
}
};
},
methods:{
doShow() {
this.show = true;
if (this.mapInfo && this.mapInfo.id) {
getBigRouteList(this.mapInfo.id).then(response => {
response.data.forEach(route=>{
this.filterRouteMap[route.code] = route.name;
});
this.reloadTable();
}).catch(()=>{});
}
},
doClose() {
this.show = false;
},
reloadTable() {
if (this.queryList && this.queryList.reload) {
this.queryList.reload();
}
},
queryFunction(params) {
if (this.mapInfo && this.mapInfo.id) {
return queryAssistListPaged(params, this.mapInfo.id);
}
},
getDeviceName(code) {
const device = this.$store.getters['map/getDeviceByCode'](code);
return device ? device.name : '';
},
getSectionName(sectionList) {
const sectionName = [];
sectionList.forEach(item => {
const device = this.$store.getters['map/getDeviceByCode'](item);
device && sectionName.push(device.name);
});
return sectionName;
},
deleteRoute(index, row) {
// this.mapInfo.id,
deleteAssist( row.id).then(res=>{
this.$message.success('删除指示灯关联信息成功');
this.reloadTable();
this.$emit('refresh');
}).catch(error=>{
this.$messageBox('删除指示灯关联信息失败:' + error.meessage);
});
}
}
};
</script>

View File

@ -0,0 +1,96 @@
<template>
<div style="height: 100%;">
<indicator-associated-info-draft
ref="routeEdit"
:selected="selected"
:map-info="mapInfo"
@setCenter="setCenter"
/>
<indicator-associated-info-detail ref="routeDetail" :map-info="mapInfo" @routeSelected="routeSelected" @refresh="refresh" />
</div>
</template>
<script>
import IndicatorAssociatedInfoDraft from './route';
import IndicatorAssociatedInfoDetail from './detail';
export default {
name: 'IndicatorAssociatedInfoOperate',
components: {
IndicatorAssociatedInfoDraft,
IndicatorAssociatedInfoDetail
},
props: {
mapInfo: {
type: Object,
default() {
return null;
}
},
selected: {
type: Object,
default() {
return null;
}
}
},
data() {
return {
enabledTab: 'Route',
routeData: null,
routeList:[]
};
},
created() {
},
methods: {
clickEvent(e, model) {
this.onSelect(model);
},
onSelect(model) {
if (model) {
this.selected = model;
} else {
this.selected = null;
}
},
setDelayUnlockStatus(data, status) {
if (data && data.delayShowList) {
data.delayShowList.forEach(elem => {
elem.status = status;
});
}
},
routeSelected: function (data) {
this.routeData = data;
if (this.$refs && this.$refs.routeEdit) {
this.$refs.routeEdit.isModify = data.id;
}
},
previewRouteEvent: function () {
if (this.$refs && this.$refs.routeDetail) {
this.$refs.routeDetail.doShow();
}
},
initLoad() {
this.$refs.routeEdit && this.$refs.routeEdit.initLoad();
},
createRouteEvent: function () {
if (this.$refs && this.$refs.routeEdit) {
this.$refs.routeEdit.clear();
}
},
setSelected(selected) {
this.$refs.routeEdit.setSelected(selected);
},
setCenter(code) {
this.$emit('setCenter', code);
},
batchSectionListFocus(flag) {
this.$refs.routeEdit.batchSectionListFocus(flag);
},
refresh() {
this.$refs.routeEdit.initPage();
}
}
};
</script>

View File

@ -0,0 +1,208 @@
<template>
<div class="BigRouteInfo">
<el-form ref="form" :model="addModel" :rules="rules" label-width="140px" size="mini" class="bigDefinition">
<el-form-item v-if="isModify" label="编号:" prop="code">
<el-input v-model="addModel.code" style="width: 220px;" disabled />
</el-form-item>
<el-form-item label="关联车站:" prop="stationCode">
<el-select v-model="addModel.stationCode" clearable filterable>
<el-option
v-for="item in stationList"
:key="item.code"
:label="`${item.name}(${item.code})`"
:value="item.code"
/>
</el-select>
<el-button
:type=" field === 'stationCode' ? 'danger' : 'primary'"
@click="hover('stationCode')"
>{{ $t('map.activate') }}</el-button>
</el-form-item>
<el-form-item label="运行方向" prop="labelEnum">
<el-select v-model="addModel.labelEnum">
<el-option
v-for="item in directionLabelList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="关联区段:" prop="sectionList">
<el-select v-model="addModel.sectionList" multiple :placeholder="$t('map.pleaseSelect')">
<el-option
v-for="item in sectionList"
:key="item.code"
:label="`${item.name}(${item.code})`"
:value="item.code"
/>
</el-select>
<el-button
:type=" field === 'sectionList' ? 'danger' : 'primary'"
@click="hover('sectionList')"
>{{ $t('map.activate') }}</el-button>
</el-form-item>
<el-form-item label="关联信号机:" prop="signalCode">
<el-select v-model="addModel.signalCode" :placeholder="$t('map.pleaseSelect')">
<el-option
v-for="item in signalList"
:key="item.code"
:label="`${item.name}(${item.code})`"
:value="item.code"
/>
</el-select>
<el-button :type="field === 'signalCode'? 'danger':'primary'" @click="hover('signalCode')">{{$t('map.activate')}}</el-button>
</el-form-item>
</el-form>
<div class="bigDraft">
<el-button-group class="bigDraftBtn">
<el-button v-if="isModify" type="warning" size="small" :loading="loading" @click="update ">更新</el-button>
<el-button v-else type="primary" size="small" :loading="loading" @click="save">保存</el-button>
</el-button-group>
</div>
</div>
</template>
<script>
import { setUID } from '@/jmapNew/utils/Uid';
import { deepAssign } from '@/utils/index';
import { saveAssist } from '@/api/assist';
import { mapGetters } from 'vuex';
import ConstConfig from '@/scripts/ConstConfig';
export default {
name:'BigRouteInfo',
props: {
selected: {
type: Object,
default() {
return null;
}
},
mapInfo: {
type: Object,
default() {
return null;
}
}
},
data() {
var checkSectionList = (rule, value, callback) => {
if (!value || value.length === 0){
callback(new Error('请选择关联区段!'));
} else {
callback();
}
};
return {
field: '',
loading: false,
isModify:false,
mainDeviceList: [],
directionLabelList: ConstConfig.ConstSelect.directionLabelList,
addModel:{
id: '',
stationCode: '',
labelEnum:'',
sectionList: [],
signalCode: ''
},
rules: {
'stationCode':[
{ required: true, message: '请选择关联车站', trigger: 'blur' },
{ required: true, message: '请选择关联车站', trigger: 'change' },
],
'labelEnum': [
{ required: true, message: '请选择运行方向', trigger: 'change' }
],
'signalCode': [
{ required: true, message: '请选择关联信号机', trigger: 'change' }
],
'sectionList': [
{ validator: checkSectionList, trigger: 'change' },
{ required: true, message: '请选择关联区段', trigger: 'blur' }
]
}
};
},
computed: {
...mapGetters('map', [
'sectionList',
'stationList',
'signalButtonList',
'signalList'
])
},
mounted() {
},
methods:{
initPage() {},
hover(field) {
this.field = field === this.field ? '' : field;
},
changeRadio() {
this.$refs.form.clearValidate();
},
setSelected(selected) {
if (selected) {
if (selected._type.toUpperCase() === 'Section'.toUpperCase() && this.field.toUpperCase() === 'sectionList'.toUpperCase()) {
this.addModel.sectionList.push(selected.code);
} else if (selected._type.toUpperCase() === 'Station'.toUpperCase() && this.field.toUpperCase() === 'stationCode'.toUpperCase()) {
this.addModel.stationCode = selected.code;
this.field = '';
} else if (selected._type.toUpperCase() === 'Signal'.toUpperCase() && this.field.toUpperCase() === 'signalCode'.toUpperCase()){
this.addModel.signalCode = selected.code;
this.field = '';
} ;
}
},
save() {
const that = this;
that.$refs.form.validate((valid) => {
if (valid) {
const newModel = deepAssign({}, that.addModel);
// newModel.code = setUID('Route');
that.loading = true;
saveAssist(newModel, that.mapInfo.id).then(res=>{
that.$message.success(that.$t('tip.creatingSuccessful'));
that.loading = false;
that.clear();
}).catch(() => {
that.$messageBox(that.$t('tip.operationAbnormal'));
that.loading = false;
});
}
});
},
clear() {
if (this.$refs && this.$refs.form && this.mapInfo) {
this.$refs.form.resetFields();
this.addModel = {
id: '',
stationCode: '',
labelEnum:'',
sectionList: [],
signalCode: ''
};
}
}
}
};
</script>
<style lang="scss" scoped>
.BigRouteInfo{
height: 100%;
overflow:auto;
padding-bottom: 60px;
}
.bigDefinition{
}
.bigDraft{
position: absolute;
bottom: 0;
background: #fff;
box-shadow: 4px 5px 10px #565656;
width: 100%;
padding: 8px 10px;
}
.bigDraftBtn{float: right;}
</style>

View File

@ -57,7 +57,7 @@
@mouseenter="mouseenter(nor)"
@mouseleave="mouseleave(nor)"
>
<div class="name">{{ nor.name }}</div>
<div class="name">{{ nor.name || nor.code }}</div>
<div class="close" @click="delList(nor, item.list)"><i class="el-icon-close" /></div>
</div>
</div>
@ -119,7 +119,12 @@ export default {
type: 'Signal',
name: '信号机列表',
list: []
}
},
{
type: 'SignalButton',
name: '信号按钮列表',
list: []
}
]
};
},
@ -156,7 +161,9 @@ export default {
this.modelList[1].list.push(item);
} else if (item._type == 'Signal') {
this.modelList[2].list.push(item);
}
} else if (item._type == 'SignalButton') {
this.modelList[3].list.push(item);
}
if (item.stationCode == this.seclectDeviceList[0].stationCode) {
count++;
}
@ -317,7 +324,12 @@ export default {
type: 'Signal',
name: '信号机列表',
list: []
}
},
{
type: 'SignalButton',
name: '信号按钮列表',
list: []
}
];
},
mouseenter(model) {

View File

@ -99,7 +99,8 @@ export default {
'Recovery',
'Accident',
'Occlusion',
'PickOrDepartArrow'
'PickArrow',
'DepartArrow'
],
noNameTypeList: ['FaultStatusGroup', 'ModeStatusGroup', 'LampFilament', 'ReturnModeGroup', 'ControlSwitch', 'Axle'],
typeList: [
@ -130,9 +131,10 @@ export default {
{ name: '复原', value: 'Recovery' },
{ name: '事故', value: 'Accident' },
{ name: '闭塞', value: 'Occlusion' },
{ name: '接发车箭头', value: 'PickOrDepartArrow' }
{ name: '接车箭头', value: 'PickArrow' },
{ name: '发车箭头', value: 'DepartArrow' }
],
hasDirectionList: ['SectionOccupied', 'AssistStatus', 'TotalAssist', 'DepartAssist', 'PickAssist', 'Recovery', 'Accident', 'Occlusion', 'PickOrDepartArrow'],
hasDirectionList: ['SectionOccupied', 'AssistStatus', 'TotalAssist', 'DepartAssist', 'PickAssist', 'Recovery', 'Accident', 'Occlusion', 'PickArrow', 'DepartArrow'],
directionList: [{label: 'X',value: 'X'},{label: 'XF',value: 'XF'},{label: 'XD',value: 'XD'}, {label:'S',value:'S'},{label:'SF',value:'SF'},{label:'SD',value: 'SD'}],
editModel:getModel('ControlLamp'),
addModel:getModel('ControlLamp'),
@ -165,8 +167,8 @@ export default {
] },
{ prop: 'mfNum', label: '报警指示故障数量:', type: 'number', min: 0, isHidden: this.editModel.type !== 'FaultStatusGroup' },
{ prop: 'pfNum', label: '电源故障数量:', type: 'number', min: 0, isHidden: this.editModel.type !== 'FaultStatusGroup'},
{ prop: 'right', label: '朝右:', type: 'checkbox', isHidden: this.editModel.type !== 'PickOrDepartArrow' },
{ prop: 'direction', label: '方向:', type: 'select', optionLabel: 'label', optionValue: 'value', options: this.directionList, isHidden: !this.hasDirectionList.includes(this.editModel.type) },
{ prop: 'right', label: '朝右:', type: 'checkbox', isHidden: this.editModel.type !== 'DepartArrow' && this.editModel.type !== 'PickArrow' },
{ prop: 'labelEnum', label: '方向:', type: 'select', optionLabel: 'label', optionValue: 'value', options: this.directionList, isHidden: !this.hasDirectionList.includes(this.editModel.type) },
{ prop: 'switchCode', label: '所属道岔:', type: 'selectHover', optionLabel: 'name&&code', optionValue: 'code', options: this.switchList, isHidden: this.editModel.type !== 'SwitchFault', hover: this.hover, buttonType: 'switchSelectCode', buttonShowType: this.isButtonType },
{ prop:'stationCode', label: '所属车站:', type: 'select', optionLabel: 'name&&code', optionValue: 'code', options: this.stationList}
]
@ -191,7 +193,7 @@ export default {
] },
{ prop: 'mfNum', label: '报警指示故障数量:', type: 'number', min: 0, isHidden: this.addModel.type !== 'FaultStatusGroup' },
{ prop: 'pfNum', label: '电源故障数量:', type: 'number', min: 0, isHidden: this.addModel.type !== 'FaultStatusGroup'},
{ prop: 'direction', label: '方向:', type: 'select', optionLabel: 'label', optionValue: 'value', options: this.directionList, isHidden: !this.hasDirectionList.includes(this.addModel.type) },
{ prop: 'labelEnum', label: '方向:', type: 'select', optionLabel: 'label', optionValue: 'value', options: this.directionList, isHidden: !this.hasDirectionList.includes(this.addModel.type) },
{ prop: 'switchCode', label: '所属道岔:', type: 'selectHover', optionLabel: 'name&&code', optionValue: 'code', options: this.switchList, isHidden: this.addModel.type !== 'SwitchFault', hover: this.hover, buttonType: 'switchSelectCode', buttonShowType: this.isButtonType }
]
}
@ -222,7 +224,7 @@ export default {
switchCode: [
{ required: true, message: '请选择所属道岔!', trigger: 'change'}
],
direction: [
labelEnum: [
{ required: true, message: '请选择方向!', trigger: 'change'}
]
};
@ -292,7 +294,8 @@ export default {
this.RecoveryList = [];
this.AccidentList = [];
this.OcclusionList = [];
this.PickOrDepartArrowList = [];
this.DepartArrowList = [];
this.PickArrowList = [];
indicatorLightList.forEach(item => {
switch (item._type) {
case 'AtsControl':
@ -376,8 +379,11 @@ export default {
case 'Occlusion':
this.OcclusionList.push(item);
break;
case 'PickOrDepartArrow':
this.PickOrDepartArrowList.push(item);
case 'PickArrow':
this.PickArrowList.push(item);
break;
case 'DepartArrow':
this.DepartArrowList.push(item);
break;
}
});
@ -465,8 +471,11 @@ export default {
case 'Occlusion':
this.selectLists = this.OcclusionList;
break;
case 'PickOrDepartArrow':
this.selectLists = this.PickOrDepartArrowList;
case 'PickArrow':
this.selectLists = this.PickArrowList;
break;
case 'DepartArrow':
this.selectLists = this.DepartArrowList;
break;
default :
this.selectLists = this.intersiteControlList;
@ -478,6 +487,7 @@ export default {
this.deviceSelect(this.$store.getters['map/getDeviceByCode'](code));
},
deviceSelect(selected) {
console.log(selected, '======');
if (this.field.toUpperCase() === 'switchSelectCode'.toUpperCase() && selected._type.toUpperCase() === 'Switch'.toUpperCase()) {
if (this.activeName === 'first') {
this.editModel.switchCode = selected.code;
@ -576,8 +586,11 @@ export default {
case 'Occlusion':
idPrefix = 'occlusion';
break;
case 'PickOrDepartArrow':
idPrefix = 'podArrow'
case 'PickArrow':
idPrefix = 'pickArrow';
break;
case 'DepartArrow':
idPrefix = 'departArrow';
break;
}
return idPrefix;

View File

@ -208,7 +208,10 @@ export default {
this.$emit('showMap');
},
handleSelectControlPage(device) {
const controlLampTypeList = ['AtsControl', 'CenterCommunication', 'ChainControl', 'IntersiteControl', 'LeuControl', 'LocalControl', 'Maintain', 'SwitchFault', 'PowerSupply', 'NoOneReturn', 'MaintenanceLamps', 'ZcCommunication', 'FaultStatusGroup', 'ModeStatusGroup', 'LampFilament', 'ReturnModeGroup', 'ControlSwitch', 'Axle', 'IndicatorLight'];
const controlLampTypeList = ['AtsControl', 'CenterCommunication', 'ChainControl', 'IntersiteControl', 'LeuControl', 'LocalControl', 'Maintain',
'SwitchFault', 'PowerSupply', 'NoOneReturn', 'MaintenanceLamps', 'ZcCommunication', 'FaultStatusGroup', 'ModeStatusGroup', 'LampFilament',
'ReturnModeGroup', 'ControlSwitch', 'Axle', 'IndicatorLight', 'SectionOccupied', 'AssistStatus', 'TotalAssist', 'DepartAssist', 'PickAssist',
'Recovery', 'Accident', 'Occlusion', 'PickArrow' ,'DepartArrow'];
const type = device._type;
if (this.selectDevice) {
this.enabledTab = this.selectDevice;

View File

@ -112,6 +112,7 @@ class Model {
this.tp = { x: 0, y: 0 };
this.belongStationCode = '';
this.srCode = '';
this.throat = '';
}
StationModel() {
this._type = 'Station';
@ -201,6 +202,7 @@ class Model {
this.mfNum = 0;
this.pfNum = 0;
this.switchCode = '';
this.labelEnum = '';
this.right = false;
}
}

View File

@ -69,13 +69,17 @@ export default {
{ code: 'EXIT', name: '出站信号机' },
{ code: 'SHUNTING2', name: '列车兼调车信号机' },
{ code: 'INBOUND', name: '进段信号机' },
{ code: 'OUTBOUND', name: '出段信号机' }
{ code: 'OUTBOUND', name: '出段信号机' },
{ code: 'RECEIVING', name: '接车信号机(大铁)' },
{ code: 'DEPARTURE', name: '发车信号机(大铁)'}
],
signalModelList:[
{ code: 'RGY', name: '红绿黄三灯信号机'},
{ code: 'R', name: '单红灯信号机'},
{ code: 'BW', name: '蓝白调车信号机'},
{ code: 'YRW', name: '黄红白列车兼调车信号机' }
{ code: 'YRW', name: '黄红白列车兼调车信号机' },
{ code: 'YGRYW', name: '黄绿红黄白信号机' },
{ code: 'YGRGW', name: '黄绿红绿白信号机' }
],
field:'',
editModel: getModel('Signal'),

View File

@ -56,7 +56,7 @@ export default {
signalCode: '',
sectionCode: '',
switchCode: '',
direction: '',
labelEnum: '',
position: {
x: 0,
y: 0
@ -84,14 +84,16 @@ export default {
{ value: 'PASS', label: '通过按钮' },
{ value: 'GUIDE', label: '引导按钮' },
{ value: 'FLEXIBLE', label: '变通按钮' },
{ value: 'RAMP_TERMINAL', label: '坡道终端按钮' },
{ value: 'RAMP_TERMINAL', label: '坡道终端按钮'},
{ value: 'TRAIN_TERMINAL', label: '列车终端按钮'},
{ value: 'SHUNT_TERMINAL', label: '调车终端按钮'},
{ value: 'ASSIST', label: '总辅助按钮' },
{ value: 'PICK_ASSIST', label: '接辅助按钮' },
{ value: 'DEPART_ASSIST', label: '发辅助按钮' },
{ value: 'ACCIDENT', label: '事故按钮' },
{ value: 'CHANGE_DIRECTION', label: '改方按钮' }
{ value: 'CHANGE_DIRECTION', label: '改方按钮' },
{ value: 'RECOVERY', label: '复原按钮' },
{ value: 'OCCLUSION', label: '闭塞按钮' }
],
centralizedStationList: [], //
directionList: [{label:'X',value:'X'},{label:'XF',value:'XF'},{label:'XD',value:'XD'},{label:'S',value:'S'},{label:'SF',value:'SF'},{label:'SD',value:'SD'}],
@ -120,7 +122,7 @@ export default {
'position.y': [
{ required: true, message: this.$t('rules.pleaseEnterYCoordinate'), trigger: 'blur' }
],
direction: [
labelEnum: [
{ required: true, message: '请选择方向', trigger: 'change' }
]
}
@ -156,7 +158,7 @@ export default {
{ prop: 'signalCode', label: '关联信号机:', type: 'selectHover', optionLabel: 'name&&code', optionValue: 'code', clearable: true, options: this.signalList, hover: this.hover, buttonType: 'linkSignal', buttonShowType: this.isLinkSignalShow, isHidden: !this.isLinkSignal },
{ prop: 'sectionCode', label: '关联区段:', type: 'selectHover', optionLabel: 'name&&code', optionValue: 'code', clearable: true, options: this.sectionList, hover: this.hover, buttonType: 'linkSection', buttonShowType: this.isLinkSectionShow, isHidden: !this.isLinkSection },
{ prop: 'switchCode', label: '关联道岔:', type: 'selectHover', optionLabel: 'name&&code', optionValue: 'code', clearable: true, options: this.switchList, hover: this.hover, buttonType: 'linkSwitch', buttonShowType: this.isLinkSwitchShow, isHidden: !this.isLinkSwitch },
{ prop: 'direction', label: '方向:', type: 'select', optionLabel: 'label', optionValue: 'value', options: this.directionList, isHidden: !this.isLinkDirection },
{ prop: 'labelEnum', label: '方向:', type: 'select', optionLabel: 'label', optionValue: 'value', options: this.directionList, isHidden: !this.isLinkDirection },
{ prop: 'position', label: this.$t('map.textPoints'), type: 'coordinate', width: '120px', children: [
{ prop: 'position.x', firstLevel: 'position', secondLevel: 'x', label: 'x:', type: 'number', labelWidth: '25px', disabled: false },
{ prop: 'position.y', firstLevel: 'position', secondLevel: 'y', label: 'y:', type: 'number', labelWidth: '25px', disabled: false }
@ -213,7 +215,7 @@ export default {
return this.editModel.type === 'FLEXIBLE';
},
isLinkDirection() {
return ['ASSIST', 'PICK_ASSIST', 'DEPART_ASSIST', 'ACCIDENT', 'CHANGE_DIRECTION'].includes(this.editModel.type);
return ['ASSIST', 'PICK_ASSIST', 'DEPART_ASSIST', 'ACCIDENT', 'CHANGE_DIRECTION', 'RECOVERY', 'OCCLUSION'].includes(this.editModel.type);
}
},
methods: {
@ -242,7 +244,7 @@ export default {
this.editModel.signalCode = '';
this.editModel.switchCode = '';
this.editModel.sectionCode = '';
this.editModel.direction = '';
this.editModel.labelEnum = '';
this.activeName = 'first';
this.editModel = deepAssign(this.editModel, selected);
} else if (this.field === 'linkSignal' && selected && selected._type.toUpperCase() === 'Signal'.toUpperCase()) {
@ -288,11 +290,11 @@ export default {
},
updateMapModel(data) {
if (this.isLinkSignal) {
data.sectionCode = ''; data.switchCode = ''; data.direction = '';
data.sectionCode = ''; data.switchCode = ''; data.labelEnum = '';
} else if (this.isLinkSection) {
data.signalCode = ''; data.switchCode = ''; data.direction = '';
data.signalCode = ''; data.switchCode = ''; data.labelEnum = '';
} else if (this.isLinkSwitch) {
data.signalCode = ''; data.sectionCode = ''; data.direction = '';
data.signalCode = ''; data.sectionCode = ''; data.labelEnum = '';
} else if (this.isLinkDirection) {
data.sectionCode = ''; data.signalCode = ''; data.switchCode = '';
}

View File

@ -0,0 +1,102 @@
<template>
<div style="height: 100%;overflow-y:auto;">
<el-form ref="oprt1" :model="fromData" label-width="130px" size="mini" :rules="mergeRules">
<el-form-item label="道岔列表:" prop="switchList">
<el-select v-model="fromData.switchList" filterable multiple :placeholder="$t('rules.pleaseSelect')">
<el-option
v-for="item in switchList"
:key="item.code"
:label="item.name + '(' + item.code + ')'"
:value="item.code"
/>
</el-select>
<el-button :type="field === 'switchList' ? 'danger' : 'primary'" size="small" @click="hover('switchList')">{{ $t('map.activate') }}</el-button>
</el-form-item>
<el-form-item label="所属咽喉区:" prop="">
<el-select v-model="fromData.throat" :placeholder="$t('rules.pleaseSelect')">
<el-option
v-for="item in throatList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button-group>
<el-button type="primary" size="big" @click="batchSetThroat">设置咽喉区域</el-button>
</el-button-group>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { deepAssign } from '@/utils/index';
import { mapGetters } from 'vuex';
import { getUID } from '@/jmapNew/utils/Uid';
import { EventBus } from '@/scripts/event-bus';
import getModel from '../models.js';
export default {
name: 'CreateAxle',
props:{
field:{
type:String,
default:''
}
},
data() {
return {
fromData: {
switchList: [],
throat: ''
},
throatList: [{code: 'S', name: 'S'},{code: 'X', name: 'X'}],
mergeRules: {
switchList: [{ required: true, message: '请选择关联道岔', trigger: 'change' }],
throat: [{ required: true, message: '请选择所属咽喉区', trigger: 'change' }],
}
};
},
computed: {
...mapGetters('map', [
'sectionList',
'switchList'
])
},
watch: {
field(val) {
if (val) {
EventBus.$emit('SELECTON');
}
}
},
methods:{
hover(field) {
this.$emit('hover', field);
},
batchSetThroat() {
this.$refs.oprt1.validate((valid) => {
if (valid) {
const models = [];
this.hover(''); // field
this.fromData.switchList.forEach(item => {
const switchModel = deepAssign({}, this.$store.getters['map/getDeviceByCode'](item));
switchModel.throat = this.fromData.throat;
models.push(switchModel);
});
this.$emit('updateMapModel', models);
this.fromData.switchList = [];
this.fromData.throat = '';
}
})
},
pushData(data) {
if (!this.fromData.switchList.includes(data)) {
this.fromData.switchList.push(data);
}
}
}
};
</script>

View File

@ -77,8 +77,9 @@ export default {
x: skew.x,
y: skew.y
},
pos: 'N' //
pos: 'N', //
// N- R- NO-() EX-
throat: ''
};
const model = Object.assign(switchModel, data);
const swch = this.findSwitchData(model.sectionACode, model.sectionBCode, model.sectionCCode);
@ -136,8 +137,9 @@ export default {
x: skew.x,
y: skew.y
},
pos: 'N' //
pos: 'N', //
// N- R- NO-() EX-
throat: ''
};
const model = Object.assign(switchModel, data);
const swch = this.findSwitchData(model.sectionACode, model.sectionBCode, model.sectionCCode);

View File

@ -9,6 +9,9 @@
<el-tab-pane class="view-control" label="生成道岔计轴区段" name="three" :lazy="lazy">
<create-axle ref="createAxle" :field="field" v-on="$listeners" @hover="hover" />
</el-tab-pane>
<el-tab-pane class="view-control" label="批量设置" name="four" :lazy="lazy">
<batch-set ref="batchSet" :field="field" v-on="$listeners" @hover="hover"/>
</el-tab-pane>
</el-tabs>
</template>
@ -16,6 +19,7 @@
import SwitchModel from './switchModle';
import CreateSwitch from './create';
import CreateAxle from './createAxle';
import BatchSet from './batchSet';
import { mapGetters } from 'vuex';
export default {
@ -23,7 +27,8 @@ export default {
components: {
SwitchModel,
CreateSwitch,
CreateAxle
CreateAxle,
BatchSet
},
props: {
selected: {
@ -64,7 +69,9 @@ export default {
deviceSelect(selected) {
if (selected && selected._type.toUpperCase() === 'Switch'.toUpperCase() && this.field.toUpperCase() === 'relevanceSwitchList'.toUpperCase()) {
this.$refs.createAxle.pushData(selected.code);
} else if (selected && selected._type.toUpperCase() === 'Switch'.toUpperCase()) {
} else if(selected && selected._type.toUpperCase() === 'Switch'.toUpperCase() && this.field.toUpperCase() === 'switchList'.toUpperCase()) {
this.$refs.batchSet.pushData(selected.code);
} else if (selected && selected._type.toUpperCase() === 'Switch'.toUpperCase()) {
this.activeName = 'first';
this.$refs.switchModel.setModel(selected);
}

View File

@ -43,6 +43,7 @@ export default {
{ prop: 'namePosition.x', firstLevel: 'namePosition', secondLevel: 'x', label: 'x:', type: 'number', labelWidth: '25px' },
{ prop: 'namePosition.y', firstLevel: 'namePosition', secondLevel: 'y', label: 'y:', type: 'number', labelWidth: '25px' }
] },
{ prop: 'throat', label: '所属咽喉区:', type: 'select', optionLabel: 'name', optionValue: 'code', options: [{name: 'S', code: 'S'}, {name: 'X', code: 'X'}] },
{ prop: 'srCode', label: '沙盘设备编号', type: 'input' },
{ prop: 'tp', label: this.$t('map.switchTp'), type: 'coordinate', width: '160px', children: [
{ prop: 'tp.x', firstLevel: 'tp', secondLevel: 'x', label: 'x:', type: 'number', labelWidth: '25px' },

View File

@ -115,7 +115,8 @@ export default {
'routeDefaultCheckConflict',
'tripNumberIsUnique',
'standTbStrategyIsInvalid',
'updateTripPlanByServiceNumber'
'updateTripPlanByServiceNumber',
'hasCTC'
],
selectList: ['runMode', 'singleApproachLockCancelRoute'],
generalConfig: [
@ -164,7 +165,8 @@ export default {
'routeDefaultCheckConflict',
'tripNumberIsUnique',
'standTbStrategyIsInvalid',
'updateTripPlanByServiceNumber'
'updateTripPlanByServiceNumber',
'hasCTC'
],
rangeList: ['noParkingSM', 'parkingSM'],
speedList: ['rmAtpSpeed', 'urmAtpSpeed'],
@ -219,7 +221,8 @@ export default {
routeDefaultCheckConflict: '进路默认开启冲突检测',
tripNumberIsUnique: '运行图中车次号是否唯一',
standTbStrategyIsInvalid: '站台折返策略不生效',
updateTripPlanByServiceNumber: '根据服务号更新车次计划'
updateTripPlanByServiceNumber: '根据服务号更新车次计划',
hasCTC: '有CTC系统大铁'
}
};
},