Merge remote-tracking branch 'origin/test_conflictRoute' into test

This commit is contained in:
fan 2021-08-05 18:22:16 +08:00
commit 88ab2d31f3
12 changed files with 308 additions and 19 deletions

View File

@ -2,7 +2,7 @@
NODE_ENV = 'test'
# base api
VUE_APP_BASE_API = 'https://test.joylink.club/jlcloud'
VUE_APP_BASE_API = 'https://test.joylink.club/jlcloud1'
VUE_APP_VOICE_API = 'https://oss.joylink.club/oss/joylink'
VUE_APP_UPLOAD_API = 'https://upload.joylink.club'
VUE_APP_BASE_SITE='https://test.joylink.club/cbtc'
VUE_APP_BASE_SITE='https://test.joylink.club/cbtc1'

View File

@ -145,6 +145,7 @@ class SkinCode extends defaultStyle {
defaultColor: '#FFFFFF', // 信号灯字体默认色
blockColor: '#FFFFFF', // 信号灯字体锁定颜色
checkColor: '#00FF00', // 信号字体
conflictColor:'#FF0000', // 冲突进路始端信号机颜色
nameBorderShow: true // 信号机名字边框显示
},
lamp: {

View File

@ -77,6 +77,7 @@ deviceState[deviceType.Signal] = {
redOpen: 1, // 红灯开放(默认状态)
delayTime: 0, // 信号机延迟解锁倒计时
atsControl: 1, // 0是人工1是自动
checkConflict:0, // 0是不检查冲突1是检测冲突检测冲突进路
fault: 0, // 是否故障
isStartSignal: 0, // 是否进路排列选中始端信号机
isTerminalSignal: 0, // 是否进路排列待选终端信号机
@ -254,5 +255,5 @@ deviceState[deviceType.Train] = {
deviceState[deviceType.Responder] = {
};
deviceState[deviceType.IndicatorLight] = {
}
};
export default deviceState;

View File

@ -568,11 +568,13 @@ class Jlmap {
routeStartSignalData[item.code].forEach((elem, index)=> {
if (index) {
status.atsControl = status.atsControl && elem.atsControl;
status.checkConflict = status.checkConflict || elem.checkConflict;
status.fleetMode = status.fleetMode || elem.fleetMode;
status.ciControl = status.ciControl || elem.ciControl;
status.lock = status.lock || elem.lock;
} else {
status.atsControl = elem.atsControl;
status.checkConflict = elem.checkConflict;
status.fleetMode = elem.fleetMode;
status.ciControl = elem.ciControl;
status.lock = elem.lock;

View File

@ -994,6 +994,7 @@ class Signal extends Group {
!model.atsControl && this.setArtificialRouteClose(); /** 进路交人工控或自动控 */
}
}
// 设置点灯类型 必须在最后设置不能放前面 logicLight 0 物理点灯 1 逻辑点灯
if (model.logicLight) {
this.logicalLight(); // 设置逻辑点灯
@ -1061,6 +1062,11 @@ class Signal extends Group {
if (model.noStatus || model.level === 0) {
this.setAshShow();
}
// 冲突检查状态
if (this.style.Signal.text.conflictColor && model.checkConflict) {
this.sigName.setColor(this.style.Signal.text.conflictColor);
}
}
}

View File

@ -39,9 +39,14 @@
<span>{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column prop="status" label="控制状态" width="100">
<el-table-column prop="status" label="控制状态" width="150">
<template slot-scope="scope">
<div v-if="systemName=='xian-01__systerm'">
{{ scope.row.atsControl == '0' ? '人工' : scope.row.checkConflict?'自动 (进行冲突检查)':'自动 (不进行冲突检查)' }}
</div>
<div v-else>
{{ scope.row.atsControl == '0' ? '人工' : '自动' }}
</div>
</template>
</el-table-column>
</el-table>

View File

@ -48,6 +48,21 @@
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column v-if="systemName == 'xian-01__systerm'" prop="atsControl" label="控制状态" style="margin-left:30px">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ scope.row.atsControl==0?'人工':'自动' }}</span>
</template>
</el-table-column>
<el-table-column v-if="systemName == 'xian-01__systerm'" prop="conflict" label="冲突检测" style="margin-left:30px">
<template v-if="title == '进路交ATS自动控'&& scope.row.atsControl==0" slot-scope="scope">
<el-checkbox
v-model="checkConflictList[scope.$index].value"
style="text-align: center; display: block;"
/>
<!-- @change="changeCheckConflit(checkConflictMap[scope.row.code],scope.row.code)" -->
<!-- :disabled="scope.row.disabled" -->
</template>
</el-table-column>
<el-table-column v-if="systemName === 'xian-01__systerm'" width="200">
<template slot-scope="scope">
<span :style="{color: scope.row.disabled ? '#CBCBCB':'unset'}">{{ getProtectedSectionName(scope.row) }}</span>
@ -113,6 +128,8 @@ export default {
signalName: '',
allSelect: false,
changeList:[],
checkConflictList:[],
selectedCheckConflict:[],
commitDisabled: true,
disabledLength: 0
};
@ -152,7 +169,12 @@ export default {
if (this.operation == OperationEvent.Signal.humanControl.menu.operation) {
return '进路交人工控';
} else if (this.operation == OperationEvent.Signal.atsAutoControl.menu.operation) {
if (this.systemName == 'xian-01__systerm') {
return '进路交ATS自动控';
} else {
return '进路交自动控';
}
} else {
return '';
}
@ -171,6 +193,8 @@ export default {
this.selected = selected;
this.allSelect = false;
this.changeList = [];
this.checkConflictList = [];
// .splice(0, this.checkConflictList.length - 1);
this.commitDisabled = true;
this.selection = [];
this.disabledLength = 0;
@ -187,18 +211,28 @@ export default {
}
if (tempData && tempData.length > 0) {
const that = this;
tempData.forEach(elem => {
this.changeList.push(false);
that.changeList.push(false);
elem.disabled = false;
//
if (operate.operation === OperationEvent.Signal.humanControl.menu.operation &&
(elem.atsControl == '0')) {
elem.disabled = true;
this.disabledLength++;
} if (operate.operation === OperationEvent.Signal.atsAutoControl.menu.operation &&
(elem.atsControl == '1')) {
that.disabledLength++;
} if (operate.operation === OperationEvent.Signal.atsAutoControl.menu.operation) {
if (elem.atsControl == '1') {
elem.disabled = true;
this.disabledLength++;
that.disabledLength++;
that.checkConflictList.push({code:elem.code, value:null});
} else {
if (that.systemName == 'xian-01__systerm') {
that.checkConflictList.push({code:elem.code, value:false});
// that.$set('checkConflictMap', elem.code, );
// that.checkConflictMap[elem.code] = false;
}
}
}
});
}
@ -224,6 +258,16 @@ export default {
this.$store.dispatch('training/emitTipFresh');
// mouseCancelState(this.selected);
},
changeCheckConflit(check, code) {
// debugger;
// this.checkConflictMap;
// this.$set('checkConflictMap', code, check);
// if (check) {
// this.checkConflictMap[code] = false;
// } else {
// this.checkConflictMap[code] = true;
// }
},
changeCheck(check, code) {
if (check) {
this.selection.push(code);
@ -346,7 +390,7 @@ export default {
operate.message = `命令:进路交人工控<br/>始端信号机:${this.stationName} ${this.signalName}` + msg;
this.$refs.ningBoConfirmTip.doShow(operate);
}
}).catch((error) => {
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
@ -357,7 +401,7 @@ export default {
if (valid) {
this.doClose();
}
}).catch((error) => {
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
@ -381,13 +425,22 @@ export default {
operate.message = `命令:进路交自动控<br/>始端信号机:${this.stationName} ${this.signalName}` + msg;
this.$refs.ningBoConfirmTip.doShow(operate);
}
}).catch((error) => {
}).catch(() => {
this.loading = false;
this.doClose();
this.$refs.noticeInfo.doShow();
});
} else {
commitOperate(menuOperate.Signal.atsAutoControl, {routeCodeList:this.selection}, 2, {val}).then(({valid})=>{
const params = {routeCodeList:this.selection};
if (this.systemName === 'xian-01__systerm') {
const checkConflictList = [];
this.selection.forEach(each=>{
const checkConflict = this.checkConflictList.find(check=>{ return check.code == each; });
if (checkConflict) { checkConflictList.push(checkConflict.value); }
});
params.checkConflictList = checkConflictList;
}
commitOperate(menuOperate.Signal.atsAutoControl, params, 2, {val}).then(({valid})=>{
this.loading = false;
if (valid) {
this.doClose();

View File

@ -149,7 +149,12 @@ export const menuOperate = {
signalTotalCancle:{ // 信号机总取消
operation: OperationEvent.Signal.cancelTrainRoute.menu.operation,
cmdType: CMD.Signal.CMD_SIGNAL_TOTAL_CANCLE
},
signalConflictRoute:{ // 冲突进路办理
operation: OperationEvent.Signal.signalConflictRoute.menu.operation,
cmdType:CMD.Signal.CMD_SIGNAL_CONFLICT_ROUTE_SET_CONFIRM
}
// Signal_Conflict_Route_Set_Confirm
},
Switch:{
lock:{

View File

@ -0,0 +1,186 @@
<template>
<div>
<el-dialog
v-dialogDrag
class="conflictRoute"
:class="systemName+' route-hand-control'"
title="冲突进路办理确认"
:visible.sync="show"
width="435px"
:before-close="closeDialog"
:z-index="2000"
:modal="false"
:close-on-click-modal="false"
>
<div>
<div>
<div class="conflictRoute">
<span class="conflictRouteTitle">冲突进路</span>
<span class="conflictRouteName">{{ routeName }}</span>
</div>
</div>
<div class="conflictDescription">冲突描述</div>
<div class="context">
{{ message }}
</div>
<!-- <div class="conflictTips">距离对话框关闭还有{{ minutes }}{{ seconds }}请确认是否办理冲突进路</div> -->
<el-row justify="center" class="button-group">
<el-col :span="7" :offset="3">
<el-button
style="width: 115px;"
:loading="loading"
@click="selectConflict"
>选排冲突进路</el-button>
</el-col>
<!-- :id="domIdConfirm" -->
<!-- :disabled="commitDisabled" -->
<!-- :id="domIdCancel" -->
<el-col :span="7" :offset="3">
<el-button style="width: 115px;" :loading="loading" @click="routeRunplan">按计划执行</el-button>
</el-col>
</el-row>
</div>
</el-dialog>
<notice-info ref="noticeInfo" pop-class="xian-01__systerm" />
</div>
</template>
<script>
import NoticeInfo from '@/jmapNew/theme/components/menus/childDialog/noticeInfo';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
export default {
name:'ConflictRoute',
components: {
NoticeInfo
},
props:{
systemName:{
type:String,
required:true
}
},
data() {
return {
dialogShow: false,
message:'',
routeCode:'',
routeName:'',
// allMinutes:10 * 60,
// minutes:10,
// seconds:0,
// inter:null,
loading:false
};
},
computed:{
show() {
return this.dialogShow && !this.$store.state.menuOperation.break;
}
},
methods:{
doShow({route, description}) {
if (route) {
this.routeCode = route.code;
const station = this.$store.getters['map/getDeviceByCode'](route.stationCode);
if (station) {
this.routeName = station.name + ' ' + route.name;
} else {
this.routeName = route.name;
}
}
this.message = description;
this.dialogShow = true;
this.$nextTick(function () {
// this.inter = setInterval(()=>{
// if (this.allMinutes <= 0) {
// clearInterval(this.inter);
// this.routeRunplan();
// }
// this.allMinutes--;
// this.minutes = (this.allMinutes - this.allMinutes % 60) / 60;
// this.seconds = this.allMinutes % 60;
// }, 1000);
this.$store.dispatch('training/emitTipFresh');
});
},
closeDialog() {
const that = this;
// clearInterval(this.inter);
commitOperate(menuOperate.Signal.signalConflictRoute, {routeCode:this.routeCode, way:1}, 3).then(({valid, operate})=>{
if (valid) {
that.doClose();
}
}).catch(error=>{
this.dialogShow = false;
console.error(error);
this.$refs.noticeInfo.doShow();
});
},
doClose() {
this.dialogShow = false;
this.$store.dispatch('training/emitTipFresh');
},
selectConflict() {
this.commit(2);
},
routeRunplan() {
this.commit(1);
},
commit(way) {
this.loading = true;
// int way, 1-2-
commitOperate(menuOperate.Signal.signalConflictRoute, {routeCode:this.routeCode, way:way}, 3).then(({valid, operate})=>{
this.loading = false;
if (valid) {
this.doClose();
// this.$refs.routeControl.doShow(operate, this.selected);
}
}).catch(error=>{
this.loading = false;
console.error(error);
this.$refs.noticeInfo.doShow();
});
}
}
};
</script>
<style>
.conflictRoute .context {
margin:5px 13px 13px 13px;
padding-bottom: 10px !important;
border: 1px solid lightgray;
line-height: 138%;
font-size: 15px;
height:115px;
}
.conflictDescription{
margin-left:13px;
font-size: 15px;
margin-top: 5px;
}
.conflictRoute{
padding-left: 13px;
font-size: 15px;
width: 100%;
padding-right: 13px;
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
align-content: center;
justify-content: flex-start;
align-items: flex-start;
}
.conflictRouteName{
font-size: 15px;
height: 23px;
border: 2px inset #E2E2E2;
padding-left: 5px;
flex-grow: 1;
}
.conflictRouteTitle{
}
.conflictTips{
margin-left: 13px;
}
</style>

View File

@ -9,6 +9,7 @@
<route-hand-control ref="routeHandControl" system-name="xian-01__systerm" />
<route-detail ref="routeDetail" system-name="xian-01__systerm" />
<set-fault ref="setFault" pop-class="xian-01__systerm" />
<conflict-route ref="conflictRoute" system-name="xian-01__systerm" />
</div>
</template>
@ -27,6 +28,7 @@ import MenuContextHandler from '@/scripts/cmdPlugin/MenuContextHandler';
import { mapGetters } from 'vuex';
import { DeviceMenu, OperateMode } from '@/scripts/ConstDic';
import {menuOperate, commitOperate} from '@/jmapNew/theme/components/utils/menuOperate';
import ConflictRoute from './dialog/conflictRoute';
export default {
name: 'SignalMenu',
@ -39,6 +41,7 @@ export default {
RouteHandControl,
RouteDetail,
NoticeInfo,
ConflictRoute,
SetFault
},
props: {
@ -239,6 +242,21 @@ export default {
} else {
this.doClose();
}
},
'$store.state.socket.simulationAlarmInfo': function(val) {
(val || []).forEach(item => {
if (!item.confirmed && !item.recovered) {
if (item.level === '0') {
if (item.type == 'Conflict_Route_Set') {
const route = this.routeList.find(each=>{ return each.code == item.deviceCode; });
this.$refs.conflictRoute.doShow({route:route, description:item.description});
// doShow();
// "":"Route205",
// "description":"(111046(322)[X2112-X2102](311045)(22_G2202)(21_G2102)"
}
}
}
});
}
},
methods: {
@ -299,6 +317,9 @@ export default {
commitOperate(menuOperate.Signal.arrangementRoute, { signalCode: this.selected.code }, 0).then(({valid, operate})=>{
if (valid) {
this.$refs.routeSelection.doShow(operate, this.selected, this.getRouteList(this.selected));
// const route = this.routeList.find(each=>{ return each.code == 'Route205'; });
// this.$refs.conflictRoute.doShow({route:route, description:'(111046(322)[X2112-X2102](311045)(22_G2202)(21_G2102)'});
// this.$refs.conflictRoute.doShow({deviceCode:'Route205', });
}
});
},

View File

@ -126,7 +126,9 @@ export default {
/** 信号机总取消 */
CMD_SIGNAL_TOTAL_CANCLE:{value:'Signal_Total_Cancel', label: '信号机总取消'},
/** 设置保护 */
CMD_SIGNAL_SET_OVERLAP : {value: 'Signal_Set_Overlap', label: '设置保护'}
CMD_SIGNAL_SET_OVERLAP : {value: 'Signal_Set_Overlap', label: '设置保护'},
/** 冲突进路办理 */
CMD_SIGNAL_CONFLICT_ROUTE_SET_CONFIRM:{value: 'Signal_Conflict_Route_Set_Confirm', label: '冲突进路办理'}
},
// 物理区段操作

View File

@ -1703,6 +1703,13 @@ export const OperationEvent = {
operation: '3211',
domId: '_Tips-Signal-setOverlap-Menu{BOTTOM}'
}
},
// 冲突进路办理
signalConflictRoute:{
menu: {
operation: '322',
domId: '_Tips-Signal-conflictRoute-Menu{TOP}'
}
}
},