Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test
This commit is contained in:
commit
22e4935310
@ -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-column prop="number" label="命令号" width="80" />
|
||||
<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">
|
||||
<span style="margin-left: 10px">{{ JoinDeviceNameStr(scope.row.receiverInfos) || '' }}</span>
|
||||
</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-column prop="number" label="命令号" width="80" />
|
||||
<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">
|
||||
<span style="margin-left: 10px">{{ JoinDeviceNameStr(scope.row.receiverInfos) || '' }}</span>
|
||||
</template>
|
||||
@ -577,9 +577,20 @@ export default {
|
||||
this.command.receiverIds = arr;
|
||||
},
|
||||
sendCmd() {
|
||||
this.$confirm('你是要下达调度命令吗?', '确认提示', {
|
||||
confirmButtonText: '是',
|
||||
cancelButtonText: '否'
|
||||
const test = `【${this.command.number}】号调度命令下达到以下受令人:`;
|
||||
const messageData = [test];
|
||||
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(() => {
|
||||
const data = {
|
||||
command: this.command
|
||||
|
@ -503,6 +503,9 @@ export default {
|
||||
},
|
||||
setOffset(data, num, sum, obj) {
|
||||
this.$jlmap.switchScreen(data, num, sum, obj);
|
||||
},
|
||||
pictureChanged(picture) {
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
|
64
src/views/newMap/mapDraftPicture/changePicture.vue
Normal file
64
src/views/newMap/mapDraftPicture/changePicture.vue
Normal 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>
|
88
src/views/newMap/mapDraftPicture/createPicture.vue
Normal file
88
src/views/newMap/mapDraftPicture/createPicture.vue
Normal 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>
|
@ -24,30 +24,37 @@
|
||||
:selected="selected"
|
||||
:map-saveing="mapSaveing"
|
||||
@saveMapEvent="saveMapEvent"
|
||||
@updateMapModel="updateMapModel"
|
||||
@createPicture="createPicture"
|
||||
@changePicture="changePicture"
|
||||
@setCenter="setCenter"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<pop-menu ref="popMenu" :menu="menu" />
|
||||
<create-picture ref="createPicture" />
|
||||
<change-picture ref="changePicture" @pictureChanged="pictureChanged" />
|
||||
</div>
|
||||
</transition>
|
||||
</template>
|
||||
<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 JlmapVisual from '@/views/newMap/jlmapNew/index';
|
||||
import MapOperate from './mapoperate/index';
|
||||
import { EventBus } from '@/scripts/event-bus';
|
||||
import { mapGetters } from 'vuex';
|
||||
import PopMenu from '@/components/PopMenu';
|
||||
import CreatePicture from './createPicture';
|
||||
import ChangePicture from './changePicture';
|
||||
|
||||
export default {
|
||||
name: 'MapView',
|
||||
components: {
|
||||
JlmapVisual,
|
||||
MapOperate,
|
||||
PopMenu
|
||||
PopMenu,
|
||||
CreatePicture,
|
||||
ChangePicture
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
@ -312,115 +319,6 @@ export default {
|
||||
});
|
||||
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) { // 校验后者是否与前者有关联关系
|
||||
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) {
|
||||
const filterVal = ['index'];
|
||||
const arr = [];
|
||||
@ -486,8 +364,11 @@ export default {
|
||||
backRoute() {
|
||||
this.$router.push({ path: `/design/usermap/home` });
|
||||
},
|
||||
updateMapModel(models) { // 创建 跟新元素
|
||||
this.$store.dispatch('map/updateSystemMapDevices', models);
|
||||
createPicture() { // 创建 跟新元素
|
||||
this.$refs.createPicture.doShow();
|
||||
},
|
||||
changePicture() {
|
||||
this.$refs.changePicture.doShow();
|
||||
},
|
||||
// 撤销
|
||||
revocation() {
|
||||
@ -554,6 +435,10 @@ export default {
|
||||
device.instance.drawSelected(flag);
|
||||
}
|
||||
}
|
||||
},
|
||||
pictureChanged(picture) {
|
||||
this.$refs.mapOperate.pictureChanged(picture);
|
||||
this.$refs.jlmapVisual.pictureChanged(picture);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -65,7 +65,7 @@ export default {
|
||||
...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.signalButtonList, ...this.splitStationList, ...this.tbStrategyList, ...this.tempSpeedLimitList, ...this.textList, ...this.totalGuideLockButtonVOList,
|
||||
...this.trainWindowList, ...this.zcList];
|
||||
...this.zcList];
|
||||
},
|
||||
form () {
|
||||
return {
|
||||
|
@ -8,7 +8,10 @@
|
||||
<b>{{ mapInfo.name }}</b>
|
||||
</el-tooltip>
|
||||
</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>
|
||||
<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">
|
||||
@ -52,8 +55,10 @@ export default {
|
||||
{label: '设备', name: 'Device', menus: DeviceDraft},
|
||||
{label: '多选', name: 'MultiSelect', menus: MultiSelect}
|
||||
],
|
||||
pictureList: [],
|
||||
selectDevice:'',
|
||||
enabledTab: 'Device'
|
||||
enabledTab: 'Device',
|
||||
pictureName: ''
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -87,6 +92,15 @@ export default {
|
||||
},
|
||||
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;
|
||||
text-overflow:ellipsis;
|
||||
white-space:nowrap;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.el-dropdown-link {
|
||||
cursor: pointer;
|
||||
|
@ -284,12 +284,14 @@ export default {
|
||||
}
|
||||
commitOperate(menuOperate.Rail.railFillInTicket, params, 3).then(({valid, operate})=>{
|
||||
this.clearData();
|
||||
this.$message.success('提交路票成功!');
|
||||
}).catch(()=>{
|
||||
this.$message.error('提交路票失败!');
|
||||
});
|
||||
},
|
||||
giveTicket(params) {
|
||||
commitOperate(menuOperate.Rail.railGiveTicketTo, params, 3).then(({valid, operate}) => {
|
||||
this.$message.success('给予路票成功!');
|
||||
this.query();
|
||||
}).catch(()=> {
|
||||
this.$message.error('给予路票失败!');
|
||||
|
@ -72,5 +72,19 @@ export default {
|
||||
</script>
|
||||
|
||||
<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>
|
||||
|
Loading…
Reference in New Issue
Block a user