增加列车托管、连挂流程

This commit is contained in:
zyy 2020-11-09 18:24:57 +08:00
parent 8f89c9b678
commit c6b03fa4ee
10 changed files with 527 additions and 53 deletions

View File

@ -1,39 +1,79 @@
<template>
<el-dialog v-dialogDrag :class="popClass" :title="title" :visible.sync="show" width="350px" :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"><span>故障类型:</span></el-col>
</el-row>
<el-row>
<el-form ref="form" :model="form" :rules="rules">
<el-col :span="11">
<el-form-item>
<el-input v-model="deviceName" size="small" style="height: 32px;line-height: 32px;" disabled />
</el-form-item>
</el-col>
<el-col :span="11" :offset="2">
<el-form-item prop="faultType">
<el-select v-model="form.faultType" size="small" style="height: 32px;line-height: 32px;" placeholder="请选择">
<el-option
v-for="item in faultList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-form>
</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>
</el-dialog>
<div v-dialogDrag>
<!-- <el-dialog v-dialogDrag :class="popClass" :title="title" :visible.sync="show" width="350px" :before-close="doClose" :z-index="2000" :modal="false" :close-on-click-modal="false"> -->
<div
v-show="show"
class="iscs_fuzhou-01__systerm route-detail el-dialog"
>
<div class="el-dialog__header">
<span class="el-dialog__title">{{ title }}</span>
<button type="button" aria-label="Close" class="el-dialog__headerbtn" @click="doClose">
<i class="el-dialog__close el-icon el-icon-close" />
</button>
</div>
<div class="el-dialog__body">
<template v-if="judge">
<el-row>
<el-form ref="form" :model="formModel" :rules="rules">
<el-col :span="24">
<el-form-item prop="targetDeviceCode" label="托管元素:">
<el-select v-model="formModel.targetDeviceCode" size="small" style="width: 165px;height: 32px;line-height: 32px;" placeholder="请选择">
<el-option
v-for="item in selectedList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
<el-button
:type="field == 'selectedCode' ? 'danger' : 'primary'"
size="small"
@click="hover('selectedCode')"
>激活</el-button>
</el-form-item>
</el-col>
</el-form>
</el-row>
</template>
<template v-else>
<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-form ref="form" :model="form" :rules="rules">
<el-col :span="11">
<el-form-item>
<el-input v-model="deviceName" size="small" style="height: 32px;line-height: 32px;" disabled />
</el-form-item>
</el-col>
<el-col :span="11" :offset="2">
<el-form-item prop="faultType">
<el-select v-model="form.faultType" size="small" style="height: 32px;line-height: 32px;" placeholder="请选择">
<el-option
v-for="item in faultList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-form>
</el-row>
</template>
<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>
</div>
</div>
<!-- </el-dialog> -->
</div>
</template>
<script>
@ -41,6 +81,7 @@ import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import OperationHandler from '@/scripts/cmdPlugin/OperationHandler';
import { deviceFaultType, deviceType} from '@/scripts/cmdPlugin/Config';
import { menuOperate } from '@/jmapNew/theme/components/utils/menuOperate';
import { mapGetters } from 'vuex';
export default {
name: 'SwitchControl',
@ -60,9 +101,15 @@ export default {
stationName: '',
switchName: '',
activeShow: false,
judge: false,
deviceName: '',
faultList: [],
form: { faultType: ''},
formModel: {
targetDeviceCode: ''
},
groupNumber: '',
field: '',
rules: {
faultType: [
{ required: true, message: '请选择故障类型', trigger: 'change'}
@ -71,6 +118,19 @@ export default {
};
},
computed: {
...mapGetters('map', [
'sectionList',
'trainList'
]),
selectedList() {
let list = [];
let sectionList = [];
if (this.sectionList && this.sectionList.length) {
sectionList = this.sectionList.filter(elem => { return (elem.standTrack || elem.reentryTrack || elem.transferTrack); });
}
list = [...sectionList, ...this.trainList];
return list;
},
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
},
@ -85,6 +145,8 @@ export default {
return '设置故障';
} else if (this.operation == OperationEvent.MixinCommand.cancelStoppage.menu.operation) {
return '取消故障';
} else if (this.operation == OperationEvent.MixinCommand.collocation.menu.operation) {
return '设置托管';
}
return '';
}
@ -94,6 +156,14 @@ export default {
if (this.dialogShow && this.popClass === 'ningbo-01__systerm') {
this.commit();
}
},
'$store.state.menuOperation.selectedCount':function(em) {
const device = this.$store.state.menuOperation.selected;
if (device.code && this.judge && this.field) {
if (device._type == 'Section' || device._type == 'Train') {
this.deviceSelect(device);
}
}
}
},
mounted() {
@ -102,7 +172,10 @@ export default {
});
},
methods: {
doShow(operate, selected) {
hover(field) {
this.field = field == this.field ? '' : field;
},
doShow(operate, selected, judge) {
if (!this.dialogShow) {
this.switchName = '';
this.stationName = '';
@ -128,6 +201,11 @@ export default {
if (this.faultList && this.faultList.length) {
this.form.faultType = this.faultList[0].value;
}
this.judge = false;
if (judge) {
this.judge = judge;
this.groupNumber = selected.groupNumber;
}
}
if (selected._type) {
this.dialogShow = true;
@ -150,6 +228,8 @@ export default {
this.sendInstructions();
} else if (this.operation == OperationEvent.MixinCommand.cancelStoppage.menu.operation) {
this.cancelCommand();
} else if (this.operation == OperationEvent.MixinCommand.collocation.menu.operation) {
this.handleCollocation();
}
}
});
@ -176,6 +256,18 @@ export default {
};
this.sendCommand(setp);
},
handleCollocation() { //
const setp = {
over: true,
operation: menuOperate.Common.collocation.operation,
cmdType: menuOperate.Common.collocation.cmdType,
param: {
groupNumber: this.groupNumber,
targetDeviceCode: this.formModel.targetDeviceCode
}
};
this.sendCommand(setp);
},
sendCommand(setp) {
this.loading = true;
this.$store.dispatch('training/nextNew', setp).then(({ valid }) => {
@ -206,6 +298,15 @@ export default {
}).catch(() => {
this.doClose();
});
},
deviceSelect(em) {
if (this.field == 'selectedCode' && em._type == 'Section') {
this.formModel.targetDeviceCode = em.code;
this.field = '';
} else if (this.field == 'selectedCode' && em._type == 'Train') {
this.formModel.targetDeviceCode = em.code;
this.field = '';
}
}
}
};
@ -216,3 +317,44 @@ export default {
margin-top: 5px;
}
</style>
<style rel="stylesheet/scss" lang="scss" scoped>
.route-detail{
position: absolute;
left: calc(50% - 175px);
margin-top: 15vh;
width: 350px;
z-index: 2000;
box-sizing: border-box;
background: rgba(100, 100, 100, 0.3);
border: 2px solid rgba(144, 144, 144, 0.8);
border-radius: 6px;
color: #000;
font-size: 14px;
.el-dialog__header{
padding: 0px 8px;
height: 26px;
.el-dialog__title{
color: #fff;
}
.el-dialog__headerbtn{
background: linear-gradient(#CD98A0, #C27D6E, #B63022, #C68770);
border: 1px solid #fff;
border-radius: 4px;
top: 4px;
right: 12px;
line-height: 16px;
color: #fff;
.el-icon{
color: #fff;
}
}
}
.el-dialog__body{
background: #fff;
margin: 5px;
margin-top: 0;
padding: 10px;
}
}
</style>

View File

@ -0,0 +1,279 @@
<template>
<div v-dialogDrag>
<!-- <el-dialog v-dialogDrag :class="popClass" :title="title" :visible.sync="show" width="350px" :before-close="doClose" :z-index="2000" :modal="false" :close-on-click-modal="false"> -->
<div
v-show="show"
class="iscs_fuzhou-01__systerm route-detail el-dialog"
>
<div class="el-dialog__header">
<span class="el-dialog__title">{{ title }}</span>
<button type="button" aria-label="Close" class="el-dialog__headerbtn" @click="doClose">
<i class="el-dialog__close el-icon el-icon-close" />
</button>
</div>
<div class="el-dialog__body">
<el-row>
<el-form ref="form" :model="formModel" :rules="rules">
<el-col :span="24">
<el-form-item prop="groupNumber1" label="车组号1:">
<el-select v-model="formModel.groupNumber1" size="small" style="width: 165px;height: 32px;line-height: 32px;" placeholder="请选择">
<el-option
v-for="item in selectedList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
<el-button
:type="field == 'selectedCode1' ? 'danger' : 'primary'"
size="small"
@click="hover('selectedCode1')"
>激活</el-button>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="groupNumber2" label="车组号2:">
<el-select v-model="formModel.groupNumber2" size="small" style="width: 165px;height: 32px;line-height: 32px;" placeholder="请选择">
<el-option
v-for="item in selectedList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
<el-button
:type="field == 'selectedCode2' ? 'danger' : 'primary'"
size="small"
@click="hover('selectedCode2')"
>激活</el-button>
</el-form-item>
</el-col>
</el-form>
</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>
</div>
</div>
<!-- </el-dialog> -->
</div>
</template>
<script>
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
import OperationHandler from '@/scripts/cmdPlugin/OperationHandler';
// import { deviceFaultType, deviceType} from '@/scripts/cmdPlugin/Config';
import { menuOperate } from '@/jmapNew/theme/components/utils/menuOperate';
import { mapGetters } from 'vuex';
export default {
name: 'SwitchControl',
props: {
popClass: {
type: String,
default() {
return '';
}
}
},
data() {
return {
dialogShow: false,
loading: false,
operation: '',
formModel: {
groupNumber1: '',
groupNumber2: ''
},
groupNumber: '',
field: '',
rules: {
faultType: [
{ required: true, message: '请选择故障类型', trigger: 'change'}
]
}
};
},
computed: {
...mapGetters('map', [
'trainList'
]),
selectedList() {
let list = [];
list = [...this.trainList];
return list;
},
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.MixinCommand.setLink.menu.operation) {
return '设置连挂';
}
return '';
}
},
watch:{
'$store.state.map.keyboardEnterCount': function (val) {
if (this.dialogShow && this.popClass === 'ningbo-01__systerm') {
this.commit();
}
},
'$store.state.menuOperation.selectedCount':function(em) {
const device = this.$store.state.menuOperation.selected;
if (device.code && this.field) {
if (device._type == 'Train') {
this.deviceSelect(device);
}
}
}
},
mounted() {
this.$nextTick(() => {
this.$store.dispatch('training/tipReload');
});
},
methods: {
hover(field) {
this.field = field == this.field ? '' : field;
},
doShow(operate, selected) {
if (!this.dialogShow) {
this.operation = operate.operation;
this.cmdType = operate.cmdType;
}
if (selected._type) {
this.dialogShow = true;
this.$nextTick(function () {
this.$store.dispatch('training/emitTipFresh');
});
}
},
doClose() {
this.loading = false;
this.dialogShow = false;
this.$refs.form.resetFields();
this.$store.dispatch('training/emitTipFresh');
},
commit() {
this.$refs.form.validate((valid) => {
if (valid) {
if (this.operation == OperationEvent.MixinCommand.setLink.menu.operation) {
this.handleLink();
}
}
});
},
handleLink() { //
const setp = {
over: true,
operation: menuOperate.Common.setLink.operation,
cmdType: menuOperate.Common.setLink.cmdType,
param: {
groupNumber1: this.formModel.groupNumber1,
groupNumber2: this.formModel.groupNumber2
}
};
this.sendCommand(setp);
},
sendCommand(setp) {
this.loading = true;
this.$store.dispatch('training/nextNew', setp).then(({ valid }) => {
this.loading = false;
if (valid) {
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
this.doClose();
} else {
this.doClose();
this.$messageBox('设置或取消故障操作失败!');
}
}).catch((error) => {
this.loading = false;
this.doClose();
this.$messageBox(error.message || '设置或取消故障操作失败!');
});
},
cancel() {
const operate = {
operation: OperationEvent.Command.cancel.menu.operation
};
this.$store.dispatch('training/nextNew', operate).then(({ valid }) => {
if (valid) {
this.doClose();
}
}).catch(() => {
this.doClose();
});
},
deviceSelect(em) {
if (this.field == 'selectedCode1' && em._type == 'Train') {
this.formModel.groupNumber1 = em.code;
this.field = '';
} else if (this.field == 'selectedCode2' && em._type == 'Train') {
this.formModel.groupNumber2 = em.code;
this.field = '';
}
}
}
};
</script>
<style>
.el-select-dropdown.el-popper{
margin-top: 5px;
}
</style>
<style rel="stylesheet/scss" lang="scss" scoped>
.route-detail{
position: absolute;
left: calc(50% - 175px);
margin-top: 15vh;
width: 350px;
z-index: 2000;
box-sizing: border-box;
background: rgba(100, 100, 100, 0.3);
border: 2px solid rgba(144, 144, 144, 0.8);
border-radius: 6px;
color: #000;
font-size: 14px;
.el-dialog__header{
padding: 0px 8px;
height: 26px;
.el-dialog__title{
color: #fff;
}
.el-dialog__headerbtn{
background: linear-gradient(#CD98A0, #C27D6E, #B63022, #C68770);
border: 1px solid #fff;
border-radius: 4px;
top: 4px;
right: 12px;
line-height: 16px;
color: #fff;
.el-icon{
color: #fff;
}
}
}
.el-dialog__body{
background: #fff;
margin: 5px;
margin-top: 0;
padding: 10px;
}
}
</style>

View File

@ -66,7 +66,7 @@ export const menuOperate = {
cmdType: CMD.Section.CMD_SECTION_DETAILS
},
loadSpareTrain: {
// 添加备用车
// 添加备用车
operation: OperationEvent.Section.loadSpareTrain.menu.operation,
cmdType: CMD.Section.CMD_TRAIN_LOAD_SPARE_TRAIN
}
@ -370,6 +370,16 @@ export const menuOperate = {
cancelFault: {
operation: OperationEvent.MixinCommand.cancelStoppage.menu.operation,
cmdType: CMD.Fault.CMD_CANCEL_FAULT
},
// 设置托管
collocation: {
operation: OperationEvent.MixinCommand.collocation.menu.operation,
cmdType: CMD.Train.CMD_TRAIN_TRUST
},
// 设置连挂
setLink: {
operation: OperationEvent.MixinCommand.setLink.menu.operation,
cmdType: CMD.Train.CMD_TRAIN_LINK
}
},
Station:{

View File

@ -11,6 +11,7 @@
<trainSetWorkATP ref="trainSetWorkATP" />
<SpeedLimit ref="speedLimit" pop-class="ningbo-01__systerm" />
<set-fault ref="setFault" pop-class="ningbo-01__systerm" />
<set-train-operation ref="setTrainOperation" pop-class="ningbo-01__systerm" />
</div>
</template>
@ -26,6 +27,7 @@ import TrainSetHead from './dialog/trainSetHead';
import TrainSetWork from './dialog/trainSetWork';
import trainSetWorkATP from './dialog/trainSetWorkATP';
import SpeedLimit from '@/jmapNew/theme/components/menus/dialog/trainSpeedLimit';
import SetTrainOperation from '@/jmapNew/theme/components/menus/dialog/setTrainOperation';
import { mapGetters } from 'vuex';
import { OperationEvent } from '@/scripts/cmdPlugin/OperationHandler';
@ -47,7 +49,8 @@ export default {
TrainSetWork,
trainSetWorkATP,
SetFault,
SpeedLimit
SpeedLimit,
SetTrainOperation
},
props: {
selected: {
@ -207,6 +210,14 @@ export default {
{
label: '取消故障',
handler: this.cancelStoppage
},
{
label: '托管',
handler: this.setCollocation
},
{
label: '连挂',
handler: this.setLink
}
],
menuDirective: [
@ -321,6 +332,22 @@ export default {
}
});
},
//
setCollocation() {
commitOperate(menuOperate.Common.collocation, { code: this.selected.code }, 0).then(({valid, operate})=>{
if (valid) {
this.$refs.setFault.doShow(menuOperate.Common.collocation, this.selected, true);
}
});
},
//
setLink() {
commitOperate(menuOperate.Common.setLink, { code: this.selected.code }, 0).then(({valid, operate})=>{
if (valid) {
this.$refs.setTrainOperation.doShow(menuOperate.Common.setLink, this.selected, true);
}
});
},
nextStation() {
// commitOperate(menuOperate.Train.nextStation, { groupNumber: this.selected.code }, 3).then(({valid, operate})=>{
// }).catch((error) => {

View File

@ -229,7 +229,9 @@ export default {
CMD_TRAIN_CANCEL_HOLD: {value:'Train_Cancel_Hold', label: '列车发车'},
CMD_TRAIN_CHANGE_TRIP_NUMBER: {value:'Train_Change_Trip_Number', label: '更改列车车次'},
CMD_TRAIN_DELETE_SERVICE_NUMBER: {value:'Train_Delete_Service_Number', label: '删除车次号'},
CMD_TRAIN_CHANGE_DESTINATION_CODE: {value:'Train_Change_Destination_Code', label: '更改目的地码'}
CMD_TRAIN_CHANGE_DESTINATION_CODE: {value:'Train_Change_Destination_Code', label: '更改目的地码'},
CMD_TRAIN_TRUST: {value: 'Train_Trust', label: '设置托管'},
CMD_TRAIN_LINK: {value: 'Train_Link', label: '设置连挂'}
},
TrainWindow: {
/** 修改列车识别号 */

View File

@ -32,6 +32,20 @@ class CommandHandle {
simulationRole: 'Center',
controlMode: ['OperateCenterControl'],
conditionList: []
},
Train_Trust: {
operate: 'Train_Trust',
paramList:[{name: 'groupNumber'}, {name: 'targetDeviceCode'}],
simulationRole: 'Center',
controlMode: ['OperateCenterControl'],
conditionList: []
},
Train_Link: {
operate: 'Train_Link',
paramList:[{name: 'groupNumber1'}, {name: 'groupNumber2'}],
simulationRole: 'Center',
controlMode: ['OperateCenterControl'],
conditionList: []
}
}
};

View File

@ -57,6 +57,7 @@ class Handler {
if (operation.cmdType) {
const cmdType = operation.cmdType;
const wholeParam = this.getWholeParam();
debugger;
command = CommandHandler.getCommand(cmdType, wholeParam);
if (command && command.isError) {
this.operations.pop();

View File

@ -2442,6 +2442,18 @@ export const OperationEvent = {
menu: {
operation: '2996'
}
},
// 设置托管
collocation: {
menu: {
operation: '2997'
}
},
// 设置连挂
setLink: {
menu: {
operation: '2999'
}
}
}

View File

@ -4,17 +4,6 @@
v-show="show"
class="iscs_fuzhou-01__systerm route-detail el-dialog"
>
<!-- <el-dialog
v-dialogDrag
class="iscs_fuzhou-01__systerm route-detail"
title="报警浏览"
:visible.sync="show"
width="500px"
:before-close="doClose"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
> -->
<div class="el-dialog__header">
<span class="el-dialog__title">报警浏览</span>
<button type="button" aria-label="Close" class="el-dialog__headerbtn" @click="doClose">
@ -34,7 +23,6 @@
</el-col>
</el-row>
</div>
<!-- </el-dialog> -->
</div>
</div>
</template>
@ -80,7 +68,6 @@ export default {
<style rel="stylesheet/scss" lang="scss" scoped>
.route-detail{
position: absolute;
// top: 300px;
left: calc(50% - 250px);
margin-top: 15vh;
width: 500px;

View File

@ -1,5 +1,5 @@
<template>
<el-dialog v-dialogDrag :title="title" :visible.sync="show" width="550px" :before-close="doClose" modal-append-to-body>
<el-dialog v-dialogDrag :title="title" :visible.sync="show" width="550px" :before-close="doClose">
<el-form ref="form" label-width="120px" :model="formModel" :rules="rules">
<el-form-item :label="$t('display.setTime.systemTime')" prop="initTime">
<el-time-picker