This commit is contained in:
fan 2022-08-15 13:24:49 +08:00
commit fa53ac9a8b
8 changed files with 344 additions and 28 deletions

View File

@ -164,6 +164,10 @@ class SkinCode extends defaultStyle {
},
trainPosition:{
display: false // 列车实时位置显示
},
remainTime:{
circleBack:'',
textColor:''
}
};
@ -205,7 +209,7 @@ class SkinCode extends defaultStyle {
borderWidth: 2, // 信号灯边框线宽度
borderColor: 'rgb(85,120,182)', // 信号灯边框线颜色
darkColor:'rgb(85,120,182)', //
radiusR: 7, // 信号灯半径
radiusR: 5, // 信号灯半径
grayColor: '#7F7F7F', // 信号灯灰色
redColor: '#FF0000', // 信号灯红色
greenColor: '#00FF00', // 信号灯绿色
@ -260,6 +264,7 @@ class SkinCode extends defaultStyle {
};
this[deviceType.SignalButton] = {
width:12,
guideColor: 'rgb(80,80,255)',
trainColor:'rgb(0,128,0)',
strokeColor:'rgb(128,128,128)'

View File

@ -24,6 +24,7 @@ class Status {
assignSkip: device.assignSkip, // 是否指定跳停
runLevelTime: device.runLevelTime, // 区间运行时间 自动为 0
parkingTime: device.parkingTime, // 站台停车时间 自动为0
remainTime:device.remainTime, // 当前剩余停站时间
fault: device.fault, /** 非故障*/
num:device.num
};
@ -95,6 +96,7 @@ class Status {
offsetp:device.offsetp, /** 列车精确位置 (成都一号线使用)*/
physicalCode:device.physicalCode, /** 列车所在物理区段 */
num:device.num /** 列车上的人数*/
// parkingRemainTime
};
}
handleStation(device) {

View File

@ -1,4 +1,6 @@
import Group from 'zrender/src/container/Group';
import Text from 'zrender/src/graphic/Text';
import Arc from 'zrender/src/graphic/shape/Arc';
import ETextName from './ETextName'; // 名称文字
import ELimitLines from './ELimitLines'; // 区段限速 (私有)
import ELines from './ELines'; // 创建多线条 曲线 (私有)
@ -132,6 +134,50 @@ export default class Section extends Group {
});
this.add(this[element]);
});
if (this.style.Section.remainTime && (this.model.standTrack || this.model.reentryTrack || this.model.transferTrack)) {
const computedPoints = this.computedPoints;
const drict = model.trainPosType != '01' ? 1 : -1;
const x = Math.min(computedPoints[0].x, computedPoints[computedPoints.length - 1].x) + Math.abs(computedPoints[computedPoints.length - 1].x - computedPoints[0].x) / 2;
const y = Math.min(computedPoints[0].y, computedPoints[computedPoints.length - 1].y) + Math.abs(computedPoints[computedPoints.length - 1].y - computedPoints[0].y) / 2;
this.remainTimeText = new Text({
_subType: 'remainTimeText',
zlevel: this.zlevel,
z: this.z,
silent: model.silent || false,
style: {
x: x,
y: y - 23 * drict,
fontWeight: 'normal',
fontSize: 13,
fontFamily:style.fontFamily,
text: '0',
textFill:'#ff0000',
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle' // 文字垂直对齐方式
}
});
this.remainTimeCircle = new Arc({
_subType: 'remainTimeCircle',
zlevel: this.zlevel,
z: this.z,
shape: {
cx: x - 18,
cy: y - 23 * drict,
r: 6
},
style: {
lineWidth: 1,
fill: style.backgroundColor,
stroke: '#ffffff'
}
});
this.add(this.remainTimeText);
this.add(this.remainTimeCircle);
this.remainTimeText.hide();
this.remainTimeCircle.hide();
}
}
}
@ -167,6 +213,8 @@ export default class Section extends Group {
this.speedLimitName && this.speedLimitName.hide();
this.separator && this.separator.show();
this.badShunt && this.badShunt.hide();
// this.remainTimeText && this.remainTimeText.hide();
// this.remainTimeCircle && this.remainTimeCircle.hide();
this.axle && this.axle.setStyle({
stroke: this.style.Section.line.spareColor,
@ -655,4 +703,22 @@ export default class Section extends Group {
y:rect.y
};
}
showRemainTime(remainTime) {
this.remainTimeText.show();
this.remainTimeCircle.show();
this.remainTimeCircle && this.remainTimeCircle.animateStyle(true)
.when(0, { fill:this.style.backgroundColor })
.when(1000, { fill: '#ffffff' })
.when(2000, { fill:this.style.backgroundColor })
.start();
this.remainTimeText.setStyle('text', remainTime);
}
hideRemainTime() {
this.remainTimeText.hide();
this.remainTimeCircle && this.remainTimeCircle.stopAnimation(true);
this.remainTimeCircle && this.remainTimeCircle.hide();
}
}

View File

@ -953,12 +953,12 @@ class Signal extends Group {
showRemainTime(number) {
this.remainTimeName.show();
this.remainTimeName && this.remainTimeName.setStyle({ text: number });
this.model.signalButtonList && this.model.signalButtonList.length && this.model.signalButtonList.forEach(item => {
const button = store.getters['map/getDeviceByCode'](item);
if (button.type === 'PICK') {
button && button.instance && button.instance.startAnimate();
}
});
// this.model.signalButtonList && this.model.signalButtonList.length && this.model.signalButtonList.forEach(item => {
// const button = store.getters['map/getDeviceByCode'](item);
// if (button.type === 'PICK') {
// button && button.instance && button.instance.startAnimate();
// }
// });
if (this.model.type === 'SHUNTING') {
if (!this.style.Signal.dtTextNearSignalOffset) {
this.sigName && this.sigName.setAnimationStart(this.style.Signal.text.defaultColor);

View File

@ -97,14 +97,15 @@ export default class SignalButton extends Group {
.add(circle2)
.add(circle3);
} else {
const width = this.style.SignalButton && this.style.SignalButton.width ? this.style.SignalButton.width : 14;
this.rectButton = new Rect({
zlevel: this.zlevel,
z: this.z,
shape: {
x: computedPosition.x,
y: computedPosition.y,
width: 14,
height: 14
width:width,
height: width
},
style: {
lineDash: null,

View File

@ -189,6 +189,14 @@ class StationStand extends Group {
this.upDetainLamp && this.upDetainLamp.show();
this.downDetainLamp && this.downDetainLamp.show();
}
if (this.style.Section.remainTime) {
const section = this.mapDevice[model.standTrackCode];
if (model.remainTime) {
section.instance && section.instance.showRemainTime(model.remainTime);
} else {
section.instance && section.instance.hideRemainTime();
}
}
}
}

View File

@ -1,20 +1,20 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm"
class="datie-02__systerm"
:visible.sync="show"
width="360px"
width="250px"
:before-close="doClose"
:z-index="2000"
:modal="false"
title="密码校验"
:title="title"
:close-on-click-modal="false"
append-to-body
>
<!-- 密码校验 -->
<el-row>
<el-col :span="22" :offset="1">
<el-input v-model="encryptionPassword" placeholder="请使用软键盘输入" size="medium" :disabled="true" />
</el-col>
<el-input v-model="encryptionPassword" placeholder="" size="medium" :disabled="true" style="width: 180px;display: inline-block;float: left;" />
<el-button @click="backSpace">退格</el-button>
</el-row>
<el-row v-if="showMistake">
<el-col :span="22" :offset="1">
@ -22,6 +22,22 @@
</el-col>
</el-row>
<el-row justify="center" class="button-group">
<el-button @click="inputNum">0</el-button>
<el-button @click="inputNum">1</el-button>
<el-button @click="inputNum">2</el-button>
<el-button @click="inputNum">3</el-button>
<el-button @click="inputNum">4</el-button>
<el-button :id="domIdConfirm" :loading="loading" @click="commit">确认</el-button>
</el-row>
<el-row justify="center" class="button-group">
<el-button @click="inputNum">5</el-button>
<el-button @click="inputNum">6</el-button>
<el-button @click="inputNum">7</el-button>
<el-button @click="inputNum">8</el-button>
<el-button @click="inputNum">9</el-button>
<el-button :id="domIdCancel" @click="cancel">取消</el-button>
</el-row>
<!--
<el-col :span="4" :offset="1">
<el-button @click="inputNum">7</el-button>
</el-col>
@ -31,7 +47,7 @@
<el-col :span="4" :offset="4">
<el-button @click="inputNum">9</el-button>
</el-col>
</el-row>
<el-row justify="center" class="button-group">
<el-col :span="4" :offset="1">
<el-button @click="inputNum">4</el-button>
@ -72,7 +88,7 @@
<el-col :span="4" :offset="12">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
</el-row> -->
</el-dialog>
</template>
@ -94,7 +110,8 @@ export default {
/* 输入值替换为对应长度的星号*/
encryptionPassword: '',
loading: false,
showMistake: false
showMistake: false,
title:''
};
},
computed: {
@ -109,7 +126,8 @@ export default {
}
},
methods: {
doShow(operate) {
doShow(operate, title) {
this.title = title;
this.operate = operate || {};
this.operation = operate.operation;
if (operate.operateNext) {
@ -125,6 +143,7 @@ export default {
this.loading = false;
this.dialogShow = false;
this.showMistake = false;
this.title = '';
this.$store.dispatch('training/emitTipFresh');
},
commit() { //
@ -190,4 +209,175 @@ export default {
color: red;
}
.datie-02__systerm .el-dialog {
background: #0055E8;
box-shadow: 1px hsla(240, 0%, 100%, 0.5) inset;
border: 1px solid rgb(69, 134, 247);
border-radius: 6px;
font-size: 13px !important;
color: #000;
}
.datie-02__systerm .el-dialog span {
font-size: 13px !important;
line-height: 22px;
}
.datie-02__systerm .el-dialog span .el-icon-arrow-up{
line-height: 18px;
}
.datie-02__systerm .el-dialog .el-dialog__footer {
background: #ECE9D8;
opacity: 1;
}
.datie-02__systerm .el-dialog .el-dialog__body {
padding: 0px;
margin: 0px 3px 3px;
border: 2px solid rgba(120, 121, 123, 0.5);
box-shadow: 1px hsla(240, 0%, 100%, 0.5) inset;
background: #ECE9D8;
opacity: 1;
}
.datie-02__systerm .el-dialog .el-dialog__title {
font-size: 16px;
color: #fff;
position: absolute;
top: 4px;
left: 7px;
}
.datie-02__systerm .el-dialog .el-button {
height: 30px;
line-height: 22px;
padding: 0px 13px;
/* width: 80px; */
border: 1px solid #000000;
border-radius: 4px !important;
color: #000;
font-weight: bold;
background: linear-gradient(180deg, #fff, #efebf7);
margin-left: 0px
}
.datie-02__systerm .el-dialog .el-input.is-disabled .el-input__inner {
background: #efebde !important;
border-top: 2px #7f796f solid;
border-left: 2px #7F796E solid;
border-radius: 0px;
height:30px;
color:#000;
}
.datie-02__systerm .el-dialog .el-dialog__headerbtn {
/* background: linear-gradient(#CD98A0, #C27D6E, #B63022, #C68770); */
/* border: 1px solid #fff; */
display: none;
border-radius: 4px;
top: 6px;
right: 3px;
line-height: 16px;
}
.datie-02__systerm .el-dialog .button-group {
font-size:0;
margin-top:2px;
}
/*
.chengdou-03__systerm .el-dialog .el-dialog__headerbtn .el-icon-close:before {
font-size: 16px;
}
.chengdou-03__systerm .el-dialog .el-dialog__headerbtn .el-dialog__close {
color: #fff;
}
.chengdou-03__systerm .el-dialog .expand {
width: 120px;
}
.chengdou-03__systerm .el-dialog .el-button:focus span {
border: 1px dashed gray;
}
.chengdou-03__systerm .el-dialog .el-button:active {
border: 2px inset #E2E2E2;
}
.chengdou-03__systerm .el-dialog .el-button:disabled {
border: 2px inset #E2E2E2;
}
.chengdou-03__systerm .el-dialog .el-button:disabled span {
border: 0px;
}
.chengdou-03__systerm .el-dialog .el-input {
border: 2px inset #E9E9E9;
height: 22px !important;
line-height: 22px !important;
}
.chengdou-03__systerm .el-dialog .el-input__inner {
color: #000;
background: #fff !important;
border: 0px;
border-radius: 0px !important;
box-sizing: border-box;
height: 22px !important;
line-height: 22px !important;
}
.chengdou-03__systerm .el-dialog .el-textarea {
border: 2px inset #E9E9E9;
border-radius: 0px;
}
.chengdou-03__systerm .el-dialog .el-textarea .el-textarea__inner {
color: #000;
background: #fff !important;
border: 0px;
border-radius: 0px !important;
box-sizing: border-box;
}
.chengdou-03__systerm .el-dialog .el-textarea.is-disabled .el-textarea__inner {
background: #F0F0F0 !important;
}
.chengdou-03__systerm .el-dialog .el-table--border th.gutter {
background: #EBEADB !important;
}
.chengdou-03__systerm .el-dialog .el-table {
border: 2px inset #E9E9E9;
color: #000 !important;
}
.chengdou-03__systerm .el-dialog .el-table .cell {
height: 22px;
line-height: 22px;
}
.chengdou-03__systerm .el-dialog .el-table th.is-leaf {
background: #F0F0F0 !important;
border-right: 1px solid #BDBDBD !important;
border-bottom: 1px solid #BDBDBD !important;
color: #000 !important;
height: 20px !important;
padding: 0px;
}
.chengdou-03__systerm .el-dialog .el-table tr td {
height: 20px !important;
padding: 0px;
}
.chengdou-03__systerm .el-dialog .el-table .el-table__empty-text {
top: 15px !important;
} */
</style>

View File

@ -1,6 +1,6 @@
<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.stationMasterLock.menuButton.domId" class="button_box" :style="{width: width+'px', backgroundColor: xGuideMasterLock? guideColorDown: guideColorUp}" @click="guideLockRightButtonDown()">
<div v-if="isShowBtn" id="menuButtons_box" class="menu menuButton" style="height:40px;" :style="{left: point.x+'px', bottom: point.y+'px' }">
<button :id="Station.stationMasterLock.rightButton.domId" class="button_box" :style="{width: width+'px', backgroundColor: xGuideMasterLock? guideColorDown: guideColorUp}" @click="guideLockRightButtonDown()">
<span style="color: #800000">
<center><b>X引导总锁</b></center>
</span>
@ -160,7 +160,7 @@ export default {
guideColorUp: '#DCDCDC',
buttonDownColor: '#FEEE1A',
buttonUpColor: '#DCDCDC',
width: 78,
width: 75,
tempData: null,
offset: {},
commandTypeList: [],
@ -318,6 +318,8 @@ export default {
} else if (operate.operationPre === this.Switch.guideLock.rightButton.operation || operate.operation === this.Switch.guideLock.rightButton.operation) {
this.guideLockRightFlag = !this.guideLockRightFlag;
}
// debugger;
// this.$store.dispatch('menuOperation/setButtonOperation', operate.operation); //
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
}).catch((error) => {
@ -333,6 +335,7 @@ export default {
if (dom) {
dom.disabled = false;
dom.style.backgroundColor = this.buttonUpColor;
dom.classList.remove('downActive');
this.$refs.password.doClose();
}
}
@ -343,6 +346,7 @@ export default {
if (dom) {
dom.disabled = true;
dom.style.backgroundColor = this.buttonDownColor;
dom.classList.add('downActive');
}
}
},
@ -385,7 +389,7 @@ export default {
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);
this.$refs.password.doShow(operate, 'S引导总锁');
}
});
},
@ -401,7 +405,7 @@ export default {
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);
this.$refs.password.doShow(operate, 'X引导总锁');
}
});
},
@ -414,6 +418,12 @@ export default {
//
const operationList = [this.Signal.humanTrainRoute.button.operation, this.Section.fault.button.operation, this.Section.defectiveShunting.button.operation,
this.Signal.signalTurnOff.menuButton.operation];
const operationMap = {
[this.Signal.humanTrainRoute.button.operation]:'总人解',
[this.Section.fault.button.operation]:'区故解',
[this.Section.defectiveShunting.button.operation]:'分路不良',
[this.Signal.signalTurnOff.menuButton.operation]:'灭灯'
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.operation = operation;
@ -423,7 +433,7 @@ export default {
//
if (operationList.includes(operation)) {
operate['operateNext'] = this.Command.close.password.operation;
this.$refs.password.doShow(operate);
this.$refs.password.doShow(operate, operationMap[operation]);
}
this.timeNode = this.$store.state.socket.simulationTimeSync;
this.$store.dispatch('training/emitTipFresh');
@ -551,7 +561,7 @@ export default {
this.sendCommand(operate);
} else {
operate.nextCmdType = CMD.Signal.CMD_SIGNAL_ROUTE_GUIDE;
this.$refs.password.doShow(operate);
this.$refs.password.doShow(operate, '引导信号');
}
},
//
@ -645,7 +655,7 @@ export default {
operate.cmdType = CMD.Switch.CMD_SWITCH_MASTER_LOCK;
this.sendCommand(operate);
} else {
this.$refs.password.doShow(operate);
this.$refs.password.doShow(operate, '引导信号');
}
}
},
@ -754,6 +764,7 @@ export default {
const modelTypeMap = {
//
'ASSIST':{
name:'总辅助',
operation:this.CTCCommand.assistPressMainAssist.menu.operation,
nextCmdType:CMD.CTC.CTC_ASSIST_PRESS_MAIN_ASSIST,
param:{
@ -764,6 +775,7 @@ export default {
},
//
'CHANGE_DIRECTION':{
name:'改方',
operation:this.CTCCommand.assistPressDownTurnDirection.menu.operation,
nextCmdType:CMD.CTC.CTC_ASSIST_PRESS_DOWN_TURN_DIRECTION,
param:{
@ -774,6 +786,7 @@ export default {
},
//
'PICK_ASSIST':{
name:'接辅助',
// this.CTCCommand.assistPressDownTurnDirection.menu.operation
operation:this.CTCCommand.assistPressReceiveAssist.menu.operation,
nextCmdType:CMD.CTC.CTC_ASSIST_PRESS_RECEIVE_ASSIST,
@ -784,6 +797,7 @@ export default {
},
//
'DEPART_ASSIST':{
name:'发辅助',
operation:this.CTCCommand.assistPressDeliverAssist.menu.operation,
nextCmdType:CMD.CTC.CTC_ASSIST_PRESS_DELIVER_ASSIST,
param:{
@ -793,6 +807,7 @@ export default {
},
//
'ACCIDENT':{
name:'事故',
operation:this.CTCCommand.assistPressAccident.menu.operation,
nextCmdType:CMD.CTC.CTC_ASSIST_PRESS_ACCIDENT,
param:{
@ -851,7 +866,7 @@ export default {
if (valid) {
operate.nextCmdType = modelTypeMap[model.type].nextCmdType;
operate['operateNext'] = this.Command.close.password.operation;
this.$refs.password.doShow(operate);
this.$refs.password.doShow(operate, modelTypeMap[model.type].name);
}
}).catch((error) => {
console.error(error);
@ -887,6 +902,35 @@ export default {
float: left;
font-size: 13px;
height: 35px;
cursor: pointer;
border-bottom-width: 1px;
border-top-width: 1px;
border-right-width: 1px;
border-left-width: 1px;
border-color:#000;
// box-shadow: 2px 1px 3px #111010;
margin-left: 2px;
padding-left:3px;
padding-right:3px;
position: relative;
}
.button_box::before{
content: '';
width: 73px;
height: 100%;
position: absolute;
border-right: 1px #262626 solid;
left: 0px;
top: 0;
border-bottom: 1px #262626 solid;
border-left:0px;
border-top: 0px;
}
.button_box.downActive::before{
border-right:0px;
border-bottom: 0px;
border-left: 1px #262626 solid;
border-top: 1px #262626 solid;
}
.menu {
background-color: $bg;