This commit is contained in:
joylink_cuiweidong 2022-07-07 16:23:17 +08:00
commit 22e4935310
9 changed files with 226 additions and 143 deletions

View File

@ -102,7 +102,7 @@
<el-table ref="table3" :data="sendTableData" border style="width: 100%" height="150" highlight-current-row @current-change="handleCurrentChange($event, 'table3')"> <el-table ref="table3" :data="sendTableData" border style="width: 100%" height="150" highlight-current-row @current-change="handleCurrentChange($event, 'table3')">
<el-table-column prop="number" label="命令号" width="80" /> <el-table-column prop="number" label="命令号" width="80" />
<el-table-column prop="title" label="命令标题" show-overflow-tooltip /> <el-table-column prop="title" label="命令标题" show-overflow-tooltip />
<el-table-column prop="sendTime" label="接收单位" width="160"> <el-table-column prop="sendTime" label="接收单位" show-overflow-tooltip width="160">
<template slot-scope="scope"> <template slot-scope="scope">
<span style="margin-left: 10px">{{ JoinDeviceNameStr(scope.row.receiverInfos) || '' }}</span> <span style="margin-left: 10px">{{ JoinDeviceNameStr(scope.row.receiverInfos) || '' }}</span>
</template> </template>
@ -130,7 +130,7 @@
<el-table ref="table4" :data="allSignedTableData" border style="width: 100%" height="170" highlight-current-row @current-change="handleCurrentChange($event, 'table4')"> <el-table ref="table4" :data="allSignedTableData" border style="width: 100%" height="170" highlight-current-row @current-change="handleCurrentChange($event, 'table4')">
<el-table-column prop="number" label="命令号" width="80" /> <el-table-column prop="number" label="命令号" width="80" />
<el-table-column prop="title" label="命令标题" show-overflow-tooltip /> <el-table-column prop="title" label="命令标题" show-overflow-tooltip />
<el-table-column prop="sendTime" label="接收单位" width="160"> <el-table-column prop="sendTime" label="接收单位" show-overflow-tooltip width="160">
<template slot-scope="scope"> <template slot-scope="scope">
<span style="margin-left: 10px">{{ JoinDeviceNameStr(scope.row.receiverInfos) || '' }}</span> <span style="margin-left: 10px">{{ JoinDeviceNameStr(scope.row.receiverInfos) || '' }}</span>
</template> </template>
@ -577,9 +577,20 @@ export default {
this.command.receiverIds = arr; this.command.receiverIds = arr;
}, },
sendCmd() { sendCmd() {
this.$confirm('你是要下达调度命令吗?', '确认提示', { const test = `${this.command.number}】号调度命令下达到以下受令人:`;
confirmButtonText: '是', const messageData = [test];
cancelButtonText: '否' const h = this.$createElement;
this.command.receiverIds.forEach((item, index) => {
const device = this.$store.getters['map/getDeviceByCode'](item);
const msg = `${index + 1}. ${device ? device.name : ''}`;
messageData.push(h('p', null, msg));
});
this.$confirm('提示', {
title: '操作提示',
message: h('div', null, messageData),
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => { }).then(() => {
const data = { const data = {
command: this.command command: this.command

View File

@ -503,6 +503,9 @@ export default {
}, },
setOffset(data, num, sum, obj) { setOffset(data, num, sum, obj) {
this.$jlmap.switchScreen(data, num, sum, obj); this.$jlmap.switchScreen(data, num, sum, obj);
},
pictureChanged(picture) {
} }
} }
}; };

View File

@ -0,0 +1,64 @@
<template>
<el-dialog
title="画面切换"
:visible.sync="centerDialogVisible"
width="350px"
center
>
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="100px" class="demo-ruleForm">
<el-form-item label="画面名称:" prop="picture">
<el-select v-model="ruleForm.picture" placeholder="请选择">
<el-option
v-for="item in pictureList"
:key="item"
:label="item.name"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="changeForm()">切换</el-button>
</el-form-item>
</el-form>
</el-dialog>
</template>
<script>
export default {
name: 'CreatePicture',
data() {
return {
centerDialogVisible: false,
ruleForm: { picture: '' },
rules: {
picture: [{ required: true, message: '请选择画面', trigger: 'change' }]
}
};
},
computed: {
pictureList() {
return this.$store.state.map.map.pictureList;
}
},
methods: {
changeForm() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
this.$emit('pictureChanged', this.ruleForm.picture);
}
});
},
doClose() {
this.$refs.ruleForm.resetFields();
this.centerDialogVisible = false;
},
doShow() {
this.centerDialogVisible = true;
}
}
};
</script>
<style scoped>
</style>

View File

@ -0,0 +1,88 @@
<template>
<el-dialog
title="提示"
:visible.sync="centerDialogVisible"
width="350px"
center
>
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="100px" class="demo-ruleForm">
<el-form-item label="画面名称:" prop="name">
<el-input v-model="ruleForm.name" />
</el-form-item>
<el-form-item label="画面类型:" prop="type">
<el-select v-model="ruleForm.type" placeholder="请选择画面类型">
<el-option label="站间透明" value="lucency" />
</el-select>
</el-form-item>
<el-form-item label="所属车站:" prop="stationCode">
<el-select v-model="ruleForm.stationCode" placeholder="请选择">
<el-option
v-for="item in stationList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">创建</el-button>
</el-form-item>
</el-form>
</el-dialog>
</template>
<script>
import {mapGetters} from 'vuex';
import { saveMap } from '@/api/jmap/mapdraft';
export default {
name: 'CreatePicture',
data() {
return {
centerDialogVisible: false,
ruleForm: { name: '', type: '', stationCode: '', deviceList: [] },
rules: {
name: [{ required: true, message: '请输入画面名称', trigger: 'blur' }],
type: [{ required: true, message: '请选择画面类型', trigger: 'change' }],
stationCode: [{ required: true, message: '请选择车站', trigger: 'change' }]
}
};
},
computed: {
...mapGetters('map', [
'stationList'
])
},
methods: {
submitForm() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
const map = this.$store.state.map.map;
if (map && map.pictureList && map.pictureList.length) {
map.pictureList.push({...this.ruleForm});
} else {
map.pictureList = [{...this.ruleForm}];
}
if (map && parseInt(this.$route.params.mapId)) {
saveMap(Object.assign(map, { mapId: this.$route.params.mapId })).then(() => {
this.$message.success('创建画面成功!');
}).catch(() => {
this.$message.error('创建画面失败!');
});
}
}
});
},
doClose() {
this.$refs.ruleForm.resetFields();
this.centerDialogVisible = false;
},
doShow() {
this.centerDialogVisible = true;
}
}
};
</script>
<style scoped>
</style>

View File

@ -24,30 +24,37 @@
:selected="selected" :selected="selected"
:map-saveing="mapSaveing" :map-saveing="mapSaveing"
@saveMapEvent="saveMapEvent" @saveMapEvent="saveMapEvent"
@updateMapModel="updateMapModel" @createPicture="createPicture"
@changePicture="changePicture"
@setCenter="setCenter" @setCenter="setCenter"
/> />
</div> </div>
</div> </div>
<pop-menu ref="popMenu" :menu="menu" /> <pop-menu ref="popMenu" :menu="menu" />
<create-picture ref="createPicture" />
<change-picture ref="changePicture" @pictureChanged="pictureChanged" />
</div> </div>
</transition> </transition>
</template> </template>
<script> <script>
import { saveMap, verifyMap, getMapDetail, postBuildMapImport, getRouteNewList, getAutoReentryList } from '@/api/jmap/mapdraft'; import { saveMap, getMapDetail, postBuildMapImport } from '@/api/jmap/mapdraft';
import { ViewMode, TrainingMode, getDeviceMenuByDeviceType, DeviceMenu } from '@/scripts/ConstDic'; import { ViewMode, TrainingMode, getDeviceMenuByDeviceType, DeviceMenu } from '@/scripts/ConstDic';
import JlmapVisual from '@/views/newMap/jlmapNew/index'; import JlmapVisual from '@/views/newMap/jlmapNew/index';
import MapOperate from './mapoperate/index'; import MapOperate from './mapoperate/index';
import { EventBus } from '@/scripts/event-bus'; import { EventBus } from '@/scripts/event-bus';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import PopMenu from '@/components/PopMenu'; import PopMenu from '@/components/PopMenu';
import CreatePicture from './createPicture';
import ChangePicture from './changePicture';
export default { export default {
name: 'MapView', name: 'MapView',
components: { components: {
JlmapVisual, JlmapVisual,
MapOperate, MapOperate,
PopMenu PopMenu,
CreatePicture,
ChangePicture
}, },
data() { data() {
return { return {
@ -312,115 +319,6 @@ export default {
}); });
return flag; return flag;
}, },
verifySectionRelation(map) {
let flag = true;
const tipInfoList = [];
map.sectionList.forEach(section => {
section.type === '01' && map.sectionList.forEach(item => {
if (section.code !== item.code && item.type === '01' && this.checkSectionPointsHasCoincide(section.points, item.points) && !this.checkCorrelation(section, item)) {
tipInfoList.push('区段' + section.name + '(' + section.code + '): 或者区段' + item.name + '(' + item.code + ')' + '关联关系设置错误!' );
}
});
});
if (!tipInfoList.length) {
flag = true;
} else {
flag = false;
this.$messageBox(this.$t('tip.dataValidationFailed'));
this.tableToExcel(tipInfoList);
}
return flag;
},
async verifyInterlockDevice(map) {
let flag = true;
const tipInfoList = [];
const routeCodeList = [];
const cycleCodeList = [];
const resp1 = await getRouteNewList(this.$route.params.mapId, {pageSize:9999, pageNum:1});
if (resp1.data && resp1.data.list) {
resp1.data.list.forEach(item => {
routeCodeList.push(item.code);
});
}
const resp2 = await getAutoReentryList(this.$route.params.mapId, {pageSize:9999, pageNum:1});
if (resp2.data && resp2.data.list) {
resp2.data.list.forEach(item => {
cycleCodeList.push(item.code);
});
}
map.cycleButtonList.forEach(cycleButton => {
if (!cycleCodeList.includes(cycleButton.cycleCode)) {
flag = false;
tipInfoList.push('自动折返功能按钮' + cycleButton.name + '(' + cycleButton.code + ')' + '的关联自动折返数据不存在!');
}
});
map.automaticRouteButtonList.forEach(routeButton => {
if (!routeCodeList.includes(routeButton.automaticRouteCode)) {
flag = false;
tipInfoList.push('自动进路功能按钮' + routeButton.name + '(' + routeButton.code + ')' + '的关联进路数据不存在!');
}
});
if (!flag) {
this.$messageBox(this.$t('tip.dataValidationFailed'));
this.tableToExcel(tipInfoList);
}
return flag;
},
verifyStationPosition(map) {
let flag = true;
const tipInfoList = [];
map.stationStandList.forEach(stationStand => {
const section = this.$store.getters['map/getDeviceByCode'](stationStand.standTrackCode);
const list = [];
section && section.points.forEach(point => {
list.push(point.x);
});
if (stationStand.position.x > Math.max(...list) || stationStand.position.x < Math.min(...list)) {
flag = false;
tipInfoList.push('站台' + stationStand.name + '(' + stationStand.code + ')' + '位置偏移出关联站台轨,请检查关联站台轨是否正确!');
}
});
if (!flag) {
this.$messageBox(this.$t('tip.dataValidationFailed'));
this.tableToExcel(tipInfoList);
}
return flag;
},
verifySignalPosition(map) {
let flag = true;
const tipInfoList = [];
map.signalList.forEach(signal => {
const section = this.$store.getters['map/getDeviceByCode'](signal.sectionCode);
if (section) {
const offsetX = signal.positionPoint ? signal.positionPoint.x : 0;
const signalPositionX = signal.position.x - offsetX;
const max = Math.max(section.points[section.points.length - 1].x, section.points[0].x);
const min = Math.min(section.points[section.points.length - 1].x, section.points[0].x);
if (signalPositionX < min && signalPositionX > max) {
tipInfoList.push('信号机' + signal.name + '(' + signal.code + ')未在其关联的区段' + section.name + '(' + section.code + ')里');
}
} else {
tipInfoList.push('信号机' + signal.name + '(' + signal.code + ')所关联的区段不存在');
}
});
if (!tipInfoList.length) {
flag = true;
} else {
flag = false;
this.$messageBox(this.$t('tip.dataValidationFailed'));
this.tableToExcel(tipInfoList);
}
return flag;
},
checkPointsCoincide(point1, point2) { //
if (point1 && point2) {
return point1.x === point2.x && point1.y === point2.y;
}
return false;
},
checkSectionPointsHasCoincide(points1, points2) { //
return points1.length && points2.length && (this.checkPointsCoincide(points1[0], points2[0]) || this.checkPointsCoincide(points1[0], points2[points2.length - 1]) || this.checkPointsCoincide(points1[points1.length - 1], points2[points2.length - 1]) || this.checkPointsCoincide(points1[points1.length - 1], points2[0]));
},
checkCorrelation(section1, section2) { // checkCorrelation(section1, section2) { //
return section1.leftSectionCode === section2.code || section1.rightSectionCode === section2.code; return section1.leftSectionCode === section2.code || section1.rightSectionCode === section2.code;
}, },
@ -450,26 +348,6 @@ export default {
}); });
} }
}, },
async checkOver() {
if (this.$refs.jlmapVisual) {
const map = this.$store.state.map.map;
if (map && this.$route.params.mapId) {
const checkInterlockDevice = await this.verifyInterlockDevice(map);
if (this.verifySectionRelation(map) && this.verifySignalPosition(map) && checkInterlockDevice && this.verifyStationPosition(map)) {
verifyMap(this.$route.params.mapId).then(res => {
if (res.data.length) {
this.tableToExcel(res.data);
this.$messageBox(this.$t('tip.dataValidationFailed'));
} else {
this.$message.success(this.$t('tip.dataValidationSuccess'));
}
}).catch(() => {
this.$message.error(this.$t('tip.requestFailed'));
});
}
}
}
},
tableToExcel(data) { tableToExcel(data) {
const filterVal = ['index']; const filterVal = ['index'];
const arr = []; const arr = [];
@ -486,8 +364,11 @@ export default {
backRoute() { backRoute() {
this.$router.push({ path: `/design/usermap/home` }); this.$router.push({ path: `/design/usermap/home` });
}, },
updateMapModel(models) { // createPicture() { //
this.$store.dispatch('map/updateSystemMapDevices', models); this.$refs.createPicture.doShow();
},
changePicture() {
this.$refs.changePicture.doShow();
}, },
// //
revocation() { revocation() {
@ -554,6 +435,10 @@ export default {
device.instance.drawSelected(flag); device.instance.drawSelected(flag);
} }
} }
},
pictureChanged(picture) {
this.$refs.mapOperate.pictureChanged(picture);
this.$refs.jlmapVisual.pictureChanged(picture);
} }
} }
}; };

View File

@ -65,7 +65,7 @@ export default {
...this.arrowList, ...this.automaticRouteButtonList, ...this.axleCounterResetButtonList, ...this.cycleButtonList, ...this.directionRodList, ...this.espList, ...this.arrowList, ...this.automaticRouteButtonList, ...this.axleCounterResetButtonList, ...this.cycleButtonList, ...this.directionRodList, ...this.espList,
...this.indicatorLightList, ...this.lcList, ...this.lineList, ...this.outerFrameList, ...this.psdList, ...this.resourceList, ...this.responderList, ...this.indicatorLightList, ...this.lcList, ...this.lineList, ...this.outerFrameList, ...this.psdList, ...this.resourceList, ...this.responderList,
...this.signalButtonList, ...this.splitStationList, ...this.tbStrategyList, ...this.tempSpeedLimitList, ...this.textList, ...this.totalGuideLockButtonVOList, ...this.signalButtonList, ...this.splitStationList, ...this.tbStrategyList, ...this.tempSpeedLimitList, ...this.textList, ...this.totalGuideLockButtonVOList,
...this.trainWindowList, ...this.zcList]; ...this.zcList];
}, },
form () { form () {
return { return {

View File

@ -8,7 +8,10 @@
<b>{{ mapInfo.name }}</b> <b>{{ mapInfo.name }}</b>
</el-tooltip> </el-tooltip>
</div> </div>
<el-button v-if="isSave" type="text" style="padding: 3px 0;float: right;" :disabled="$attrs.mapSaveing" @click="saveMapEvent">{{ $t('map.save') }}</el-button> <span>{{ pictureName }}</span>
<el-button type="text" style="padding: 3px 0;float: right;" @click="createPicture">新建</el-button>
<el-button type="text" style="padding: 3px 0;float: right;" @click="changePicture">切换</el-button>
<el-button v-if="isSave" type="text" style="padding: 3px 0;float: right;" :disabled="!pictureName" @click="saveMapEvent">{{ $t('map.save') }}</el-button>
</div> </div>
<el-tabs v-model="enabledTab" class="mapEdit" type="card"> <el-tabs v-model="enabledTab" class="mapEdit" type="card">
<el-tab-pane v-for="(each,index) in tabList" :key="index" :label="each.label" class="tab_pane_box" :name="each.name" :lazy="lazy"> <el-tab-pane v-for="(each,index) in tabList" :key="index" :label="each.label" class="tab_pane_box" :name="each.name" :lazy="lazy">
@ -52,8 +55,10 @@ export default {
{label: '设备', name: 'Device', menus: DeviceDraft}, {label: '设备', name: 'Device', menus: DeviceDraft},
{label: '多选', name: 'MultiSelect', menus: MultiSelect} {label: '多选', name: 'MultiSelect', menus: MultiSelect}
], ],
pictureList: [],
selectDevice:'', selectDevice:'',
enabledTab: 'Device' enabledTab: 'Device',
pictureName: ''
}; };
}, },
computed: { computed: {
@ -87,6 +92,15 @@ export default {
}, },
saveMapEvent() { saveMapEvent() {
this.$emit('saveMapEvent'); this.$emit('saveMapEvent');
},
createPicture() {
this.$emit('createPicture');
},
changePicture() {
this.$emit('changePicture');
},
pictureChanged(picture) {
this.pictureName = picture.name;
} }
} }
}; };
@ -98,6 +112,8 @@ export default {
height:17px; height:17px;
text-overflow:ellipsis; text-overflow:ellipsis;
white-space:nowrap; white-space:nowrap;
display: flex;
align-items: center;
} }
.el-dropdown-link { .el-dropdown-link {
cursor: pointer; cursor: pointer;

View File

@ -284,12 +284,14 @@ export default {
} }
commitOperate(menuOperate.Rail.railFillInTicket, params, 3).then(({valid, operate})=>{ commitOperate(menuOperate.Rail.railFillInTicket, params, 3).then(({valid, operate})=>{
this.clearData(); this.clearData();
this.$message.success('提交路票成功!');
}).catch(()=>{ }).catch(()=>{
this.$message.error('提交路票失败!'); this.$message.error('提交路票失败!');
}); });
}, },
giveTicket(params) { giveTicket(params) {
commitOperate(menuOperate.Rail.railGiveTicketTo, params, 3).then(({valid, operate}) => { commitOperate(menuOperate.Rail.railGiveTicketTo, params, 3).then(({valid, operate}) => {
this.$message.success('给予路票成功!');
this.query(); this.query();
}).catch(()=> { }).catch(()=> {
this.$message.error('给予路票失败!'); this.$message.error('给予路票失败!');

View File

@ -72,5 +72,19 @@ export default {
</script> </script>
<style scoped> <style scoped>
/deep/.inline-input .el-input__inner{
width: 80px;
}
/deep/.station-input .el-input__inner{
width: 200px;
height: 50px;
line-height: 50px;
font-size: 40px;
}
/deep/.el-radio__label{
font-size: 16px;
}
/deep/.el-radio{
margin-right: 0;
}
</style> </style>