泰国项目调整

This commit is contained in:
fan 2023-07-04 18:05:58 +08:00
parent b1345badec
commit b898aee79a
12 changed files with 1408 additions and 30 deletions

View File

@ -177,7 +177,10 @@ class ETextName extends Group {
this.text && this.text.stopAnimation(false);
}
setState() {
setState(bool) {
if (this.text) {
bool ? this.text.show() : this.text.hide();
}
// 区段名称类暂时不做状态处理
}
}

View File

@ -599,6 +599,7 @@ export default class Section extends Group {
// 分路不良
// model.shuntingTypeList.length > 0 &&
model.badShunt && this.badShuntStatus();
this.name.setState(model.nameShow);
// 停车倒计时
if (this.remainTimeText) {
if (model.stopCountDown) {

View File

@ -2,7 +2,7 @@
<el-dialog
v-dialogDrag
:class="popClass+' passive-control'"
title="控制模式请求"
title="Request Control Mode"
:visible.sync="show"
width="700px"
:before-close="doClose"
@ -11,7 +11,7 @@
:modal="false"
:close-on-click-modal="false"
>
<span class="control-label">{{ `${requestInfo}请求如下区域的控制模式` }}</span>
<span class="control-label">{{ `${requestInfo} request control mode for the following areas` }}</span>
<el-table
ref="multipleTable"
:data="tableData"
@ -23,35 +23,35 @@
size="mini"
highlight-current-row
>
<el-table-column prop="operate" label="操作区域">
<el-table-column prop="operate" label="Operating area">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.operate }}</span>
</template>
</el-table-column>
<el-table-column prop="control" label="当前控制模式" width="120">
<el-table-column prop="control" label="Current control mode" width="120">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.control.name }}</span>
</template>
</el-table-column>
<el-table-column prop="target" label="请求控制模式" width="120">
<el-table-column prop="target" label="Request control mode" width="120">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.target.name }}</span>
</template>
</el-table-column>
<el-table-column prop="agree" label="是否同意" width="140">
<el-table-column prop="agree" label="Agree" width="140">
<template slot-scope="scope">
<el-checkbox ref="agree" v-model="scope.row.agree" :disabled="scope.row.disabled" />
</template>
</el-table-column>
</el-table>
<span class="control-label">距离对话还有{{ count }}请应答</span>
<span class="control-label">Two {{ count }} to speak. Respond.</span>
<el-row class="button-group">
<el-col :span="10" :offset="3">
<el-button :id="domAgree" :disabled="disabledAgree" @click="agree">同意
<el-button :id="domAgree" :disabled="disabledAgree" @click="agree">Agree
</el-button>
</el-col>
<el-col :span="6" :offset="4">
<el-button :id="domIdRefuse" :disabled="disabledRefuse" @click="refuse">拒绝</el-button>
<el-button :id="domIdRefuse" :disabled="disabledRefuse" @click="refuse">Refuse</el-button>
</el-col>
</el-row>
<!-- ningbo-01__systerm -->
@ -83,11 +83,11 @@ export default {
dialogShow: false,
disabledAgree: false,
disabledRefuse: false,
requestInfo: '调度员1工作站',
requestInfo: 'Dispatcher 1 workstation',
controlProps: {
'Center': this.$t('menu.passiveDialog.inTheControl'),
'Local': this.$t('menu.passiveDialog.stationControl'),
'Emergency':this.$t('menu.passiveDialog.emergencyControl')
'Center': 'Center',
'Local': 'Local',
'Emergency':'Emergency'
},
selection: [],
tableData: [],
@ -269,7 +269,7 @@ export default {
}
});
} else if (!selection) {
this.$messageBox('请选择一条数据');
this.$messageBox('Please select a piece of data');
}
},
agree() {

View File

@ -27,7 +27,6 @@ import MenuStation from './menuStation';
import MenuBar from './dispatchWorkMenuBar';
import PassiveContorl from '@/jmapNew/theme/components/menus/passiveDialog/control';
import { timestampFormat } from '@/utils/date';
// import BottomTable from './bottomTable';
import { deviceFaultType, deviceType} from '@/scripts/cmdPlugin/Config';
import MenuButtonCtc from './menuButtonCtc';

View File

@ -1,6 +1,6 @@
<template>
<div class="menus" :style="{width: width + 'px'}">
<menu-bar ref="menuBar" :selected="selected" />
<menu-bar ref="menuBar" :selected="selected" style="top: 0" />
<div id="tipInfoBox" style="width: 1560px;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;">Message window</div>
<div style="width: 40%;height: 30px;line-height: 30px;text-align: center;border-left: 2px #ccc solid;">{{ 'Control A: Mainframe' + ' ' + dateString + ' ' + time }}</div>
@ -753,7 +753,7 @@ export default {
background: #cb204d;
height: 100px;
z-index: 2;
top: 0px;
top: 35px;
left: 0px;
padding: 5px;
overflow:auto;
@ -774,8 +774,8 @@ export default {
}
.simulationTellInfo{
position: absolute;
width: 328px;
top: 0px;
width: 492px;
top: 35px;
right: 0px;
padding: 0px 0px 0px 0px;
overflow: auto;
@ -786,9 +786,9 @@ export default {
}
.simulationDeviceInfo{
position: absolute;
width: 328px;
width: 492px;
height: 100px;
top: 33px;
top: 68px;
right:0px;
padding: 5px;
overflow:auto;

View File

@ -1,7 +1,10 @@
<template>
<div id="menuBarDatie">
<menu-bar ref="menuBar" :menu-normal="menuNormal" style="width:100%;top: 30px;" />
<menu-bar ref="menuBar" :menu-normal="menuNormal" style="width:100%;" />
<train-fixed-path-pane ref="trainFixedPathPane" />
<station-control-convert ref="stationControlConvert" :work="'localWork'" />
<view-name ref="viewName" />
<train-operation ref="trainOperation" />
</div>
</template>
<script>
@ -11,12 +14,19 @@ import {menuOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import TrainFixedPathPane from './menuDialog/trainFixedPathPane';
import { EventBus } from '@/scripts/event-bus';
import { destroySimulationByAdmin, exitSimulation} from '@/api/simulation';
import ViewName from './menuDialog/viewName';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import StationControlConvert from './menuDialog/stationControlConvert';
import TrainOperation from './menuDialog/trainOperation';
export default {
name: 'CtcWorkMenuBar',
components: {
MenuBar,
TrainFixedPathPane
TrainFixedPathPane,
ViewName,
StationControlConvert,
TrainOperation
},
data() {
return {
@ -34,7 +44,7 @@ export default {
{
title: 'UI Control',
operate: '',
children: []
click: this.uiControl
},
{
title: 'Station',
@ -44,17 +54,65 @@ export default {
{
title: 'Station Ctrl Mode',
operate: '',
children: []
children: [
{
title: 'To Station Control',
click: this.turnToStationControl,
operate: OperationEvent.StationControl.requestStationControl.mbar
},
{
title: 'Forced Station Control',
click: this.mandatoryStationControl,
operate: OperationEvent.StationControl.forcedStationControl.password
},
{
title: 'To Center Control',
click: this.conterStationControl,
operate: OperationEvent.StationControl.requestCentralControl.mbar,
force: true
}
]
},
{
title: 'Train Control',
operate: '',
children: []
click: this.trainControlShow
},
{
title: 'Signal Device Control',
operate: '',
children: []
children: [
{
title: 'Signal Close',
click: this.handleSignalOperate,
operate: OperationEvent.Signal.signalClose.mbar
},
{
title: 'Signal Reopen',
click: this.handleSignalOperate,
operate: OperationEvent.Signal.reopenSignal.mbar
},
{
title: 'Turnout Normal',
click: this.handleSwitchOperate,
operate: OperationEvent.Switch.locate.mbar
},
{
title: 'Turnout Reverse',
click: this.handleSwitchOperate,
operate: OperationEvent.Switch.reverse.mbar
},
{
title: 'Turnout Lock',
click: this.handleSwitchOperate,
operate: OperationEvent.Switch.lock.mBar
},
{
title: 'Turnout Unlock',
click: this.handleSwitchOperate,
operate: OperationEvent.Switch.unlock.mbar
}
]
},
{
title: 'Operation Plan',
@ -62,7 +120,7 @@ export default {
children: []
},
{
title: 'Plan Details:',
title: 'Plan Details',
operate: '',
children: []
}
@ -74,10 +132,69 @@ export default {
'stationList'
])
},
mounted() {
this.stationList.forEach(station => {
this.menuNormal[2].children.push({ title: station.name, click: () => {
this.$jlmap.setCenter(station.code);
} });
});
},
beforeDestroy() {
EventBus.$emit('bottomTableShowOrHidden', false);
},
methods: {
handleSignalOperate(operate) {
},
handleSwitchOperate(operate) {
},
turnToStationControl(order) {
const operate = {
operation: order.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.$refs.stationControlConvert.doShow(operate);
}
});
},
//
mandatoryStationControl(order) {
const operate = {
operation: order.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.$refs.stationControlConvert.doShow(operate);
}
});
},
//
conterStationControl(order) {
const operate = {
operation: order.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.$refs.stationControlConvert.doShow(operate);
}
});
},
uiControl(order) {
const operate = {
operation: order.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.$refs.viewName.doShow(operate);
}
});
},
handleExit() {
this.$confirm('Whether to exit emulation?', 'Hint', {
confirmButtonText: 'Confirm',
@ -87,6 +204,9 @@ export default {
this.back();
});
},
trainControlShow() {
this.$refs.trainOperation.doShow();
},
back() {
if (this.$store.state.training.simulationCreator) {
destroySimulationByAdmin(this.group);

View File

@ -0,0 +1,142 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm two-confirmation"
title="Secondary confirmation"
:visible.sync="show"
width="360px"
:before-close="doClose"
:show-close="false"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
append-to-body
>
<div class="context">
<template v-for="(message, index) in messages">
<div :key="index">{{ message }}</div>
</template>
</div>
<el-row class="button-group">
<el-col :span="10" :offset="3">
<el-button :id="show? domIdConfirm: ''" :loading="loading" :disabled="loading" @click="commit">Confirm</el-button>
</el-col>
<el-col :span="6" :offset="4">
<el-button :id="domIdCancel" @click="cancel">Close</el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="xian-01__systerm" />
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import CMD from '@/scripts/cmdPlugin/CommandEnum';
export default {
name: 'TwoConfirmation',
components: {
NoticeInfo
},
data() {
return {
dialogShow: false,
loading: false,
operation: '',
operate: '',
timer: null
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdConfirm() {
if (this.operation == OperationEvent.StationControl.emergencyStationControl.menu.operation) {
return OperationEvent.StationControl.emergencyStationControl.confirm.domId;
} else if (this.operation == OperationEvent.StationControl.requestStationControl.menu.operation) {
return OperationEvent.StationControl.requestStationControl.confirm.domId;
} else if (this.operation == OperationEvent.StationControl.requestCentralControl.menu.operation) {
return OperationEvent.StationControl.requestCentralControl.confirm.domId;
} else if (this.operate == OperationEvent.StationControl.forcedStationControl.menu.operation) {
return OperationEvent.StationControl.forcedStationControl.confirm.domId;
} else {
return '';
}
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.close.confirm.domId : '';
},
messages() {
if (this.operate) {
return this.operate.messages;
}
return [];
}
},
methods: {
doShow(operate) {
this.operate = operate || {};
this.operation = this.operate.operation;
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
cancel() {
const operate = {
type: this.operate.type,
operation: OperationEvent.Command.close.confirm.operation
};
this.$emit('setOperate', { selection: this.operate.selection, cancel: true });
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.doClose();
}
});
},
commit() {
this.loading = true;
const operate = {
over: true,
operation: ''
};
if (this.operation == OperationEvent.StationControl.requestCentralControl.menu.operation) {
operate.cmdType = CMD.ControlConvertMenu.CMD_CM_APPLY_FOR_CENTER_CONTROL;
operate.operation = OperationEvent.StationControl.requestCentralControl.confirm.operation;
} else if (this.operation == OperationEvent.StationControl.requestStationControl.menu.operation) {
operate.cmdType = CMD.ControlConvertMenu.CMD_CM_APPLY_FOR_STATION_CONTROL;
operate.operation = OperationEvent.StationControl.requestStationControl.confirm.operation;
} else if (this.operation == OperationEvent.StationControl.emergencyStationControl.menu.operation) {
operate.cmdType = CMD.ControlConvertMenu.CMD_CM_EMERGENCY_STATION_CONTROL;
operate.operation = OperationEvent.StationControl.emergencyStationControl.confirm.operation;
} else if (this.operation == OperationEvent.StationControl.forcedStationControl.menu.operation) {
operate.cmdType = CMD.ControlConvertMenu.CMD_CM_FORCE_STATION_CONTROL;
operate.operation = OperationEvent.StationControl.forcedStationControl.confirm.operation;
}
this.$emit('setOperate', { selection: this.operate.selection, commit: true });
this.$store.dispatch('trainingNew/next', operate).then(({ valid, response }) => {
if (valid) {
this.doClose();
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
setTimeout(() => {
this.loading = false;
}, 200);
}).catch((error) => {
console.error(error);
this.$refs.noticeInfo.doShow();
setTimeout(() => {
this.loading = false;
}, 200);
});
}
}
};
</script>

View File

@ -0,0 +1,455 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm station-control-convert"
title="Control Mode Conversion"
:visible.sync="show"
width="700px"
:before-close="doClose"
:show-close="true"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-table
ref="multipleTable"
:data="tableData"
border
row-key="code"
style="width: 100%"
height="250"
center
size="mini"
highlight-current-row
>
<el-table-column :id="domIdChoose" prop="check" label="Select" width="60" style="margin-left:30px">
<template slot-scope="scope">
<el-checkbox ref="check" v-model="scope.row.check" :disabled="scope.row.disabled" />
</template>
</el-table-column>
<el-table-column prop="operate" label="Operating Area" width="140">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.operate }}</span>
</template>
</el-table-column>
<el-table-column prop="control" label="Control Mode" width="80">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.control }}</span>
</template>
</el-table-column>
<el-table-column prop="status" label="Center Station Communication Status" width="140">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.status }}</span>
</template>
</el-table-column>
<el-table-column prop="result" label="Transfer Execution Status">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.result }}</span>
</template>
</el-table-column>
</el-table>
<el-row class="button-group">
<el-col :span="10" :offset="3" class="control_button">
<el-button style="width: 150px" v-if="isFork" :id="domIdFork" :disabled="disabledCommit" @click="forkCommit">Forced Station Control</el-button>
<el-button style="width: 150px" v-if="isRequest" :id="domIdRequest" :disabled="disabledCommit" @click="requestCommit">To Station Control</el-button>
<el-button style="width: 150px" v-if="isConter" :id="domIdConter" :disabled="disabledCommit" @click="conterCommit">To Center Control</el-button>
</el-col>
<el-col :span="6" :offset="4">
<el-button :id="domIdCancel" :disabled="disabledClose" @click="cancel">Close
</el-button>
</el-col>
</el-row>
<two-confirmation ref="twoConfirmation" @setOperate="getOperate" />
</el-dialog>
</template>
<script>
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import OperationHandler from '@/scripts/cmdPlugin/OperationHandler';
import TwoConfirmation from './childDialog/twoConfirmation';
export default {
name: 'StationControlConvert',
components: {
TwoConfirmation
},
props: {
work: {
type: String,
default() {
return '';
}
}
},
data() {
return {
operate: null,
dialogShow: false,
disabledSend: false,
disabledSure: false,
disabledClose: false,
operation: '',
controlProps: {
'Center': 'Center',
'Local': 'Local'
},
selection: [],
tableData: [],
timer: null,
count: 0
};
},
computed: {
...mapGetters('map', [
'stationList'
]),
...mapGetters('training', [
'mode',
'started'
]),
disabledCommit() {
return this.disabledSend || this.disabledSure;
},
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
isFork() {
if (this.dialogShow) {
return OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.forcedStationControl);
}
return false;
},
isRequest() {
if (this.dialogShow) {
return OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.requestStationControl);
}
return false;
},
isConter() {
if (this.dialogShow) {
return OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.requestCentralControl);
}
return false;
},
domIdChoose() {
if (this.dialogShow) {
if (OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.forcedStationControl)) {
return OperationEvent.StationControl.forcedStationControl.choose.domId;
} else if (OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.requestStationControl)) {
return OperationEvent.StationControl.requestStationControl.choose.domId;
} else if (OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.requestCentralControl)) {
return OperationEvent.StationControl.requestCentralControl.choose.domId;
}
}
return false;
},
domIdConter() {
return this.dialogShow ? OperationEvent.StationControl.requestCentralControl.menu.domId : '';
},
domIdFork() {
return this.dialogShow ? OperationEvent.StationControl.forcedStationControl.menu.domId : '';
},
domIdRequest() {
return this.dialogShow ? OperationEvent.StationControl.requestStationControl.menu.domId : '';
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
}
},
watch: {
'$store.state.map.controlTransfer':function (controlTransferList) {
controlTransferList.forEach(controlTransfer=>{
this.updateTableValue(controlTransfer);
});
},
//
tableData: {
handler(val, oldVal) {
this.checkTableDataSelction(val);
},
deep: true
}
},
mounted() {
// this.loadTableData();
},
methods: {
updateTableValue(controlTransfer) {
this.tableData.forEach((row, index) => {
if (row.code == controlTransfer.code) {
if (controlTransfer.applicantId) {
row.result = 'A transfer request has been sent and timed out after,' + controlTransfer.validDuration + 'seconds.';
row.disabled = true;
row.check = false;
} else {
if (row.control != this.controlProps[controlTransfer.controlMode]) {
row.result = 'Control mode transfer success';
row.control = this.controlProps[controlTransfer.controlMode];
this.removeSelection(controlTransfer.code);
row.disabled = true;
row.check = false;
} else {
row.result = 'Control mode transfer failed';
this.removeSelection(controlTransfer.code);
row.disabled = false;
row.check = false;
}
this.disabledClose = false;
this.disabledSure = false;
}
}
});
},
checkTableDataSelction(data) {
const selection = [];
if (data && data.length > 0) {
data.forEach(row => {
if (row.check && !row.disabled) {
selection.push(row);
}
});
}
this.disabledSend = !selection.length;
if (JSON.stringify(selection) !== JSON.stringify(this.selection)) {
this.handleChooseChange(selection);
this.selection = selection;
}
},
checkBoxDisabled(row) {
const control = (this.$store.getters['map/getDeviceByCode'](row.code) || {});
if (OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.forcedStationControl) || OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.requestStationControl)) {
if (control && control.controlMode == 'Local') { // Center: Local:
return true;
}
} else if (OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.requestCentralControl)) {
if (control && control.controlMode == 'Center') { // Center: Local:
return true;
}
}
},
loadTableData() {
this.tableData = [];
if (this.stationList) {
this.stationList.forEach(station => {
if (station.createControlMode) {
this.tableData.push({
code: station.code,
operate: station.name || '',
control: '',
check: false,
disabled: false,
status: 'normal',
result: ''
});
}
});
}
},
initTableDataStatus() {
this.tableData = [];
if (this.work === 'dispatchWork') {
this.stationList && this.stationList.forEach(station => {
if (station.createControlMode) {
const control = this.$store.getters['map/getDeviceByCode'](station.code);
this.tableData.push({
code: station.code,
operate: station.name || '',
control: control ? this.controlProps[control.controlMode] : '',
check: false,
disabled: this.checkBoxDisabled(station),
status: 'normal',
result: ''
});
}
});
} else if (this.work === 'localWork') {
const stationCodeList = this.$store.state.map.stationControlMap[this.$store.state.training.roleDeviceCode] || [];
const list = [...new Set(stationCodeList)]; //
list && list.forEach(stationCode => {
const station = this.$store.getters['map/getDeviceByCode'](stationCode);
this.tableData.push({
code: station.code,
operate: station.name || '',
control: station ? this.controlProps[station.controlMode] : '',
check: false,
disabled: this.checkBoxDisabled(station),
status: 'normal',
result: ''
});
});
}
},
doShow(operate) {
if (!this.dialogShow) {
this.operate = operate || {};
this.operation = operate.operation;
this.disabledSure = false;
this.initTableDataStatus();
}
this.dialogShow = true;
this.$store.dispatch('training/emitTipFresh');
},
doClose() {
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
});
},
removeSelection(code) {
let selectionIndex = -1;
this.selection.forEach((item, index) => {
if (item.code === code) {
selectionIndex = index;
}
});
if (selectionIndex > -1) {
this.selection.splice(selectionIndex, 1);
}
},
handleChooseChange(selection) {
this.selection = selection;
const stationCodeList = selection.map(elem => { return elem.code; });
if (selection && selection.length) {
const operate = {
operation: '',
val: stationCodeList.join('::'),
selection: selection
};
if (OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.forcedStationControl)) {
operate.operation = OperationEvent.StationControl.forcedStationControl.choose.operation;
} else if (OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.requestStationControl)) {
operate.operation = OperationEvent.StationControl.requestStationControl.choose.operation;
} else if (OperationHandler.checkOperationIsCurrentOperate(this.operation, OperationEvent.StationControl.requestCentralControl)) {
operate.operation = OperationEvent.StationControl.requestCentralControl.choose.operation;
}
this.disabledSure = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
}
this.disabledSure = false;
});
} else if (!selection) {
this.$messageBox('Please select a piece of data');
}
},
requestCommit() {
const stationCodeList = this.selection.map(elem => { return elem.code; });
const operate = {
messages: ['Confirm that the control mode of the following operation area is changed from central control to station control:'],
operation: OperationEvent.StationControl.requestStationControl.menu.operation,
val: stationCodeList.join('::'),
selection: this.selection,
param: {
stationCodes: stationCodeList
}
};
this.selection.forEach((elem, index) => {
operate.messages.push(`Operating Area ${index + 1}:${elem.operate}`);
});
this.disabledSure = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.$refs.twoConfirmation.doShow(operate);
} else {
this.disabledSure = false;
}
}).catch(() => {
this.disabledSure = false;
});
},
forkCommit() {
const stationCodeList = this.selection.map(elem => { return elem.code; });
const operate = {
messages: ['Confirm that the control mode of the following operation area is changed from station control to central control:'],
operation: OperationEvent.StationControl.forcedStationControl.menu.operation,
val: stationCodeList.join('::'),
selection: this.selection,
param: {
stationCodes: stationCodeList
}
};
this.selection.forEach((elem, index) => {
operate.messages.push(`Operating Area ${index + 1}:${elem.operate}`);
});
this.disabledSure = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.$refs.twoConfirmation.doShow(operate);
} else {
this.disabledSure = false;
}
}).catch(() => {
this.disabledSure = false;
});
},
conterCommit() {
const stationCodeList = this.selection.map(elem => { return elem.code; });
const operate = {
messages: ['Confirm that the control mode of the following operation area is changed from station control to central control:'],
operation: OperationEvent.StationControl.requestCentralControl.menu.operation,
val: stationCodeList.join('::'),
selection: this.selection,
param: {
stationCodes: stationCodeList
}
};
this.selection.forEach((elem, index) => {
operate.messages.push(`Operating Area ${index + 1}:${elem.operate}`);
});
this.disabledSure = true;
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.$refs.twoConfirmation.doShow(operate);
} else {
this.disabledSure = false;
}
}).catch(() => {
this.disabledSure = false;
});
},
getOperate(operate) {
if (operate.cancel) {
this.disabledSure = this.disabledSend = false;
this.disabledClose = false;
}
if (operate.commit || operate.timeout) {
this.disabledSend = this.disabledSure = true;
this.disabledClose = true;
}
}
}
};
</script>
<style lang="scss" scoped>
.xian-01__systerm .el-dialog .control_button button{
max-width:180px;
width:auto ;
padding-left: 5px ;
padding-right: 5px ;
min-width: 80px;
}
</style>

View File

@ -0,0 +1,223 @@
<template>
<el-dialog
v-dialogDrag
class="switch-control"
:class="popClass"
:title="title"
:visible.sync="show"
width="300px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-row class="header">
<el-col :span="11"><span>道岔</span></el-col>
<el-col :span="11" :offset="2">
<el-input v-model="switchName" size="small" disabled />
</el-col>
</el-row>
<el-row v-if="isLock" style="margin-top: 10px;">
<el-col :span="11">
<el-radio v-model="lockRadio" label="1" style="display: block; text-align: center;">
道岔单锁</el-radio>
</el-col>
<el-col :span="11" :offset="2">
<el-radio v-model="lockRadio" label="2" disabled style="display: block; text-align: center;">
道岔解单锁</el-radio>
</el-col>
</el-row>
<el-row v-if="isTurnBlock" style="margin-top: 10px;">
<el-col :span="11">
<el-radio v-model="turnRadio" label="1" :disabled="turnRadio == 2" style="display: block; text-align: center;">
道岔定位</el-radio>
</el-col>
<el-col :span="11" :offset="2">
<el-radio v-model="turnRadio" label="2" :disabled="turnRadio == 1" style="display: block; text-align: center;">
道岔反位</el-radio>
</el-col>
</el-row>
<el-row justify="center" class="button-group">
<el-col :span="10" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="8" :offset="4">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" :pop-class="popClass" />
</el-dialog>
</template>
<script>
import NoticeInfo from '@/jmapNew/theme/components/menus/dialog/childDialog/noticeInfo';
import {mouseCancelState} from '@/jmapNew/theme/components/utils/menuItemStatus';
import OperationHandler from '@/scripts/cmdPlugin/OperationHandler';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name: 'SwitchControl',
components: {
NoticeInfo
},
props: {
popClass: {
type: String,
default: ''
}
},
data() {
return {
dialogShow: false,
loading: false,
selected: null,
operation: '',
stationName: '',
switchName: '',
isLock: false,
isTurnBlock: false,
isActive: false,
turnRadio: '1',
lockRadio: '1',
activeRadio: '1'
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationHandler.getDomIdByOperation(this.operation) : '';
},
title() {
if (this.operation == OperationEvent.Switch.lock.menu.operation) {
return 'Turnout lock';
} else if (this.operation == OperationEvent.Switch.unlock.menu.operation) {
return 'Turnout unlock';
} else if (this.operation == OperationEvent.Switch.locate.menu.operation) {
return 'Turnout locate';
} else if (this.operation == OperationEvent.Switch.reverse.menu.operation) {
return 'Turnout reverse';
}
return '';
}
},
methods: {
doShow(operate, selected) {
this.$root.$emit('dialogOpen', selected);
this.selected = selected;
if (!this.dialogShow) {
this.switchName = '';
this.stationName = '';
if (selected && selected._type.toUpperCase() === 'Switch'.toUpperCase()) {
this.switchName = selected.name;
const station = this.$store.getters['map/getDeviceByCode'](selected.stationCode);
if (station) {
this.stationName = station.name;
}
}
this.operation = operate.operation;
this.isLock = false;
this.isTurnBlock = false;
this.isActive = false;
if (this.operation == OperationEvent.Switch.locate.menu.operation) {
this.isTurnBlock = true;
this.turnRadio = '1';
} else if (this.operation == OperationEvent.Switch.reverse.menu.operation) {
this.isTurnBlock = true;
this.turnRadio = '2';
} else if (this.operation == OperationEvent.Switch.lock.menu.operation) {
this.isLock = true;
}
}
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');
mouseCancelState(this.selected);
},
commit() {
if (this.operation == OperationEvent.Switch.lock.menu.operation) {
this.lock(); //
} else if (this.operation == OperationEvent.Switch.block.menu.operation) {
this.block(); //
} else if (this.operation == OperationEvent.Switch.locate.menu.operation) {
this.locate(); //
} else if (this.operation == OperationEvent.Switch.reverse.menu.operation) {
this.reverse(); //
}
},
//
lock() {
this.sendCommand(menuOperate.Switch.lock);
},
//
block() {
this.sendCommand(menuOperate.Switch.block);
},
//
locate() {
this.sendCommand(menuOperate.Switch.locate);
},
//
reverse() {
this.sendCommand(menuOperate.Switch.reverse);
},
sendCommand(operate) {
this.loading = true;
commitOperate(operate, {}, 2).then(({valid})=>{
this.loading = false;
if (valid) {
this.doClose();
}
}).catch((error) => {
this.loading = false;
this.doClose();
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
sendCommandNext(operate) {
const that = this;
return new Promise(function(resolve, reject) {
that.loading = true;
commitOperate(operate, {}, 1).then(({valid})=>{
that.loading = false;
if (valid) {
that.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
resolve({...operate});
}
}).catch((error) => {
that.loading = false;
that.doClose();
console.error(error);
that.$refs.noticeInfo.doShow();
});
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
}
}
};
</script>

View File

@ -0,0 +1,188 @@
<template>
<el-dialog
v-dialogDrag
title="Train operation"
:visible.sync="dialogVisible"
width="30%"
:modal="false"
:before-close="handleClose"
>
<el-row>
<el-col :span="4" :offset="1">Train</el-col>
<el-col :span="19">
<el-select v-model="groupNumber" size="small" style="width:230px" @change="trainChange">
<el-option
v-for="option in activeTrainList"
:key="option"
:label="option"
:value="option"
/>
</el-select>
</el-col>
</el-row>
<el-row style="margin-top: 15px;">
<el-col :span="18" :offset="1">
<el-slider
v-model="speed"
:step="10"
:max="55"
:disabled="!groupNumber"
:marks="marks"
show-stops
@input="inputSpeed"
@change="changeSpeed"
/>
</el-col>
<el-col :span="3" :offset="2">
<el-button size="mini" type="danger" :disabled="!groupNumber" style="margin-top: 15px;" @click="brakeTrain">brake</el-button>
</el-col>
</el-row>
<el-row style="margin-top: 40px">
<el-col :span="3" :offset="7" style="text-align: right;">
<el-button :disabled="!showRight || !groupNumber" type="primary" size="mini" icon="el-icon-arrow-left" @click="adjustDirection" />
</el-col>
<el-col :span="3" style="text-align: center;">
<img style="width: 50px" :src="trainPic">
</el-col>
<el-col :span="3">
<el-button :disabled="showRight || !groupNumber" type="primary" size="mini" icon="el-icon-arrow-right" @click="adjustDirection" />
</el-col>
</el-row>
<el-row style="text-align: center;margin-top: 15px;">
<el-button type="primary" :disabled="!groupNumber" size="mini" @click="handleRun">Run</el-button>
</el-row>
</el-dialog>
</template>
<script>
import LeftTrain from '@/assets/left_train.png';
import RightTrain from '@/assets/right_train.png';
import { sandTableTrainControl } from '@/api/simulation';
import { menuOperate } from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name: 'TrainOperation',
data() {
return {
speed: 0,
dialogVisible: false,
leftTrainPic: LeftTrain,
rightTrainPic: RightTrain,
groupNumber: '',
changeSpeedFlag: false,
right: true,
reversal: false,
train: null,
marks: {
0: '0',
10: '10km/h',
20: '20km/h',
30: '30km/h',
40: '40km/h',
50: {
style: {
whiteSpace:'nowrap'
},
label: '50km/h'
}
}
};
},
computed: {
showRight() {
return (this.right && !this.reversal) || (!this.right && this.reversal);
},
trainPic() {
if ((this.right && this.reversal) || (!this.right && !this.reversal)) {
return this.leftTrainPic;
} else {
return this.rightTrainPic;
}
},
activeTrainList() {
return this.$store.state.map.activeTrainList;
}
},
methods: {
handleClose() {
this.$store.dispatch('menuOperation/setSelected', {device: {}});
this.dialogVisible = false;
},
trainChange(val) {
const train = this.$store.getters['map/getDeviceByCode'](val);
if (train && train.trainWindowCode) {
const trainWindow = this.$store.getters['map/getDeviceByCode'](train.trainWindowCode);
this.reversal = trainWindow.reversal;
}
this.groupNumber = train.groupNumber;
this.train = train;
if (this.right != train.right) {
this.right = !!train.right;
}
if (this.speed != train.speed && !this.changeSpeedFlag) {
this.speed = train.speed;
this.$nextTick(() => { this.changeSpeedFlag = false; });
}
},
doShow() {
this.dialogVisible = true;
},
inputSpeed(val) {
this.changeSpeedFlag = true;
},
changeSpeed(val) {
if (!this.groupNumber) {
return;
}
sandTableTrainControl(this.$route.query.group, { groupNumber: this.groupNumber, right: this.right, speed: this.speed }).then(resp => {
}).catch(err => { this.$message.error(err.message); this.speed = this.train.speed; }).finally(() => { this.changeSpeedFlag = false; });
},
adjustDirection() {
if (!this.groupNumber) {
return;
}
sandTableTrainControl(this.$route.query.group, { groupNumber: this.groupNumber, right: !this.right, speed: this.speed }).then(resp => {
this.right = !this.right;
}).catch(err => { this.$message.error(err.message); });
},
brakeTrain() {
if (!this.groupNumber) {
return;
}
sandTableTrainControl(this.$route.query.group, { groupNumber: this.groupNumber, right: this.right, speed: 0 }).then(resp => {
this.speed = 0;
}).catch(err => { this.$message.error(err.message); });
},
handleRun() {
if (!this.groupNumber) {
return;
}
const step = {
over: true,
operation: menuOperate.Common.trainDrive.operation,
cmdType: menuOperate.Common.trainDrive.cmdType,
param: {
groupNumber: this.groupNumber,
param: {
speedLimit: '',
through: 0,
targetDeviceCode: ''
}
}
};
this.$store.dispatch('trainingNew/next', step).then(({ valid }) => {
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
} else {
this.$messageBox('Failed to set or cancel the fault!');
}
}).catch((error) => {
this.$messageBox(error.message || 'Failed to set or cancel the fault!');
});
}
}
};
</script>
<style scoped>
</style>

View File

@ -0,0 +1,223 @@
<template>
<el-dialog
v-dialogDrag
class="chengdou-03__systerm view-name"
title="UI Control"
:visible.sync="show"
width="320px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<el-checkbox-group v-model="nameLevels">
<el-row>
<el-checkbox :label="1">信号机名称</el-checkbox>
</el-row>
<el-row>
<el-checkbox :label="11">轨道名称</el-checkbox>
</el-row>
<el-row>
<el-checkbox :label="7">道岔名称</el-checkbox>
</el-row>
<el-row>
<el-checkbox :label="9">道岔区段名称</el-checkbox>
</el-row>
</el-checkbox-group>
<el-row class="button-group">
<el-col :span="6" :offset="2">
<el-button :id="domIdConfirm" type="primary" :loading="loading" @click="commit">确定</el-button>
</el-col>
<el-col :span="4" :offset="8">
<el-button :id="domIdCancel" @click="cancel"> </el-button>
</el-col>
</el-row>
<notice-info ref="noticeInfo" pop-class="chengdou-03__systerm" />
</el-dialog>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
export default {
name: 'ViewName',
components: {
NoticeInfo
},
data() {
return {
dialogShow: false,
loading: false,
operate: null,
nameLevels: [1, 2, 4, 5, 6, 7, 8, 9, 10, 11]
};
},
computed: {
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
domIdCancel() {
return this.dialogShow ? OperationEvent.Command.cancel.menu.domId : '';
},
domIdConfirm() {
return this.dialogShow ? OperationEvent.Command.close.confirm.domId : '';
}
},
mounted() {
this.$nextTick(() => {
this.setNameDisplay();
});
},
methods: {
doShow(operate) {
//
if (!this.dialogShow) {
this.operate = operate || {};
this.operation = operate.operation;
}
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
cancel() {
const operate = {
type: this.operate.type,
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
});
},
commit() {
this.setNameDisplay();
this.doClose();
// const operate = {
// over: true,
// type: this.operate.type,
// operation: OperationEvent.Command.close.confirm.operation,
// val: this.nameLevels.sort().join('::')
// };
//
// this.loading = true;
// this.$store.dispatch('trainingNew/next', operate).then(({ valid }) => {
// this.loading = false;
// if (valid) {
// this.doClose();
// this.setNameDisplay();
// }
// }).catch((e) => {
// console.log(e, '------------');
// this.loading = false;
// });
},
setNameDisplay() {
const deviceList = [];
//
let nameShow = this.nameLevels.includes(1);
const signalList = this.$store.getters['map/signalList'];
if (signalList && signalList.length > 0) {
signalList.forEach(elem => {
deviceList.push(Object.assign(this.$jlmap.getDeviceByCode(elem.code), { nameShow }));
});
}
//
nameShow = this.nameLevels.includes(3);
//
nameShow = this.nameLevels.includes(7); //
const switchSectionNameShow = this.nameLevels.includes(9); //
const switchList = this.$store.getters['map/switchList'];
if (switchList && switchList.length > 0) {
switchList.forEach(elem => {
deviceList.push(Object.assign(this.$jlmap.getDeviceByCode(elem.code), { nameShow, switchSectionNameShow }));
});
}
//
const indicatorShow = this.nameLevels.includes(8);
const control = this.$store.getters['map/stationControlList'];
if (control && control.length > 0) {
control.forEach(elem => {
deviceList.push(Object.assign(this.$jlmap.getDeviceByCode(elem.code), { indicatorShow })); //
});
}
//
nameShow = false;
let standTrackNameShow = false;
let reentryTrackNameShow = false;
let transferTrackNameShow = false;
const sectionList = this.$store.getters['map/sectionList'];
if (sectionList && sectionList.length > 0) {
sectionList.forEach(elem => {
// if (elem.switchSection && elem.parentCode) {
// //
// nameShow = false;
if (elem.type == '03') {
nameShow = false;
} else if (elem.type === '01') {
//
nameShow = this.nameLevels.includes(11);
} else if (elem.type === '02') {
//
nameShow = this.nameLevels.includes(5);
} else if (elem.type === '04') {
//
nameShow = this.nameLevels.includes(9);
}
//
if (elem.standTrack) {
standTrackNameShow = this.nameLevels.includes(2);
}
//
if (elem.reentryTrack) {
reentryTrackNameShow = this.nameLevels.includes(4);
}
//
if (elem.transferTrack) {
transferTrackNameShow = this.nameLevels.includes(6);
}
deviceList.push(Object.assign(this.$jlmap.getDeviceByCode(elem.code), { nameShow, standTrackNameShow, reentryTrackNameShow, transferTrackNameShow }));
});
}
//
const destCodeShow = this.nameLevels.includes(10);
const stopPointList = this.$store.getters['map/stopPointList'];
if (stopPointList && stopPointList.length > 0) {
stopPointList.forEach(elem => {
deviceList.push(Object.assign(this.$jlmap.getDeviceByCode(elem.code), { destCodeShow }));
});
}
//
const kmPostShow = this.nameLevels.includes(12);
const stationList = this.$store.getters['map/stationList'];
if (stationList && stationList.length > 0) {
stationList.forEach(elem => {
deviceList.push(Object.assign(this.$jlmap.getDeviceByCode(elem.code), { kmPostShow })); //
});
}
this.$store.dispatch('map/updateMapDevices', deviceList);
}
}
};
</script>

View File

@ -837,6 +837,10 @@ export const OperationEvent = {
secondaryConfirm: {
operation: '1012',
domId: '_Tips-Switch-Locate-SecondaryConfirm'
},
mbar: {
operation: '1013',
domId: '_Tips-Switch-Locate-Mbar{BOTTOM}'
}
},
// 道岔总反/反位操作
@ -855,7 +859,11 @@ export const OperationEvent = {
},
secondaryConfirm: {
operation: '1022',
domId: '_Tips-Switch-Locate-SecondaryConfirm'
domId: '_Tips-Switch-Reverse-SecondaryConfirm'
},
mbar: {
operation: '1023',
domId: '_Tips-Switch-Reverse-Mbar{BOTTOM}'
}
},
// 道岔单锁
@ -883,6 +891,10 @@ export const OperationEvent = {
secondaryConfirm: {
operation: '1034',
domId: '_Tips-Switch-Lock-secondaryConfirm'
},
mBar: {
operation: '1035',
domId: '_Tips-Switch-Lock-MBar{BOTTOM}'
}
},
// 道岔解锁
@ -922,6 +934,10 @@ export const OperationEvent = {
menuButton: {
operation: '1047',
domId: '_Tips-Switch-Unlock-Menu{BOTTOM}'
},
mbar: {
operation: '1048',
domId: '_Tips-Switch-Unlock-Mbar{BOTTOM}'
}
},
// 道岔封闭
@ -1583,6 +1599,10 @@ export const OperationEvent = {
secondaryConfirm: {
operation: '3043',
domId: '_Tips-Signal-Reopen-SecondaryConfirm'
},
mbar: {
operation: '3044',
domId: '_Tips-Signal-Reopen-Mbar{BOTTOM}'
}
},
// 人解列车进路 (总人解)
@ -1810,6 +1830,10 @@ export const OperationEvent = {
menuButton:{
operation: '3132',
domId: '_Tips-Signal-SignalClose-Menu{BOTTOM}'
},
mbar: {
operation: '3133',
domId: '_Tips-Signal-SignalClose-mBar{BOTTOM}'
}
},
// 进路交人工控