2019-07-25 10:32:29 +08:00
|
|
|
import deviceType from '@/jmap/constant/deviceType';
|
|
|
|
import Vue from 'vue';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 查询向上受影响的Devices
|
|
|
|
* @param {Object} map
|
|
|
|
* @param {Object} device
|
|
|
|
* @param {Array} effectedDeviceList
|
|
|
|
*/
|
|
|
|
function queryEffectedDevices(map, device, effectedDeviceList) {
|
|
|
|
if (device && map) {
|
|
|
|
effectedDeviceList.push(device);
|
|
|
|
switch (device._type) {
|
|
|
|
// 查询ink关联项
|
|
|
|
case deviceType.Link:
|
|
|
|
// 查询Link关联的区段
|
|
|
|
if (map.sectionList && map.sectionList.length) {
|
|
|
|
map.sectionList.forEach(elem => {
|
|
|
|
if (elem.linkCode === device.code) {
|
|
|
|
queryEffectedDevices(map, elem, effectedDeviceList);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
// 查询Link关联的信号机
|
|
|
|
if (map.signalList && map.signalList.length) {
|
|
|
|
map.signalList.forEach(elem => {
|
|
|
|
if (elem.linkCode === device.code) {
|
|
|
|
effectedDeviceList.push(elem);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
// 移除区段关联项
|
|
|
|
case deviceType.Section:
|
|
|
|
// 查询物理区段关联的逻辑区段
|
|
|
|
if (map.sectionList && map.sectionList.length && device.type === '01') {
|
|
|
|
map.sectionList.forEach(elem => {
|
|
|
|
if (elem.type !== '01' && elem.parentCode === device.code) {
|
|
|
|
effectedDeviceList.push(elem);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
// 查询区段关联车次窗
|
|
|
|
if (map.trainWindowList && map.trainWindowList.length) {
|
|
|
|
map.trainModelList.forEach(elem => {
|
|
|
|
if (elem.sectionCode == device.code) {
|
|
|
|
effectedDeviceList.push(elem);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
// 查询区段关联的道岔
|
|
|
|
if (map.switchList && map.switchList.length) {
|
|
|
|
map.switchList.forEach(elem => {
|
|
|
|
if (elem.sectionACode === device.code ||
|
|
|
|
elem.sectionBCode === device.code ||
|
|
|
|
elem.sectionCCode === device.code) {
|
|
|
|
effectedDeviceList.push(elem);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
// 查询区段关联的车站
|
|
|
|
if (map.stationList && map.stationList.length) {
|
|
|
|
map.stationList.forEach(elem => {
|
|
|
|
if (elem.sectionCode === device.code) {
|
|
|
|
effectedDeviceList.push(elem);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function saveMapDeviceDefaultConvert(state) {
|
|
|
|
if (state && state.map) {
|
|
|
|
const map = state.map;
|
|
|
|
const deviceMap = state.map.deviceMap;
|
|
|
|
// 是否集中站
|
|
|
|
if (map.stationControlList && map.stationControlList.length) {
|
|
|
|
map.stationControlList.forEach(elem => {
|
|
|
|
const station = deviceMap[elem.stationCode];
|
|
|
|
if (station) {
|
|
|
|
station.centralized = true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
// 设置区段关联
|
|
|
|
if (map.sectionList && map.sectionList.length) {
|
|
|
|
map.sectionList.forEach(elem => {
|
|
|
|
if (elem.type !== '03') {
|
|
|
|
const station = deviceMap[elem.parentCode];
|
|
|
|
if (station) {
|
|
|
|
elem.stationCode = station.stationCode;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
elem.parentCode = '';
|
|
|
|
}
|
|
|
|
|
|
|
|
if (elem.type === '01') {
|
|
|
|
elem.nameShow == true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
// 站台轨设置
|
|
|
|
if (map.stationStandList && map.stationStandList.length && map.sectionList && map.sectionList.length) {
|
|
|
|
map.stationStandList.forEach((stand) => {
|
|
|
|
const stopPoint = deviceMap[stand.stopPointCode];
|
|
|
|
if (stopPoint) {
|
|
|
|
map.sectionList.forEach(section => {
|
|
|
|
if (section.type === '01' &&
|
|
|
|
stopPoint.linkCode === section.linkCode &&
|
|
|
|
stopPoint.offset >= section.offsetLeft &&
|
|
|
|
stopPoint.offset <= section.offsetRight) {
|
|
|
|
section.isStandTrack = true;
|
|
|
|
if (!section.standTrackName) {
|
|
|
|
section.standTrackName = section.name.replace(section.name.slice(0, 2), 'ZT');
|
|
|
|
}
|
|
|
|
if (!section.standTrackNamePosition) {
|
|
|
|
section.standTrackNamePosition = { x: 0, y: 0 };
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
// 折返轨设置
|
|
|
|
if (map.stopPointList && map.stopPointList.length && map.sectionList && map.sectionList.length) {
|
|
|
|
map.stopPointList.forEach(stopPoint => {
|
|
|
|
if (stopPoint.isTurningPoint) {
|
|
|
|
map.sectionList.forEach(section => {
|
|
|
|
if (section.type === '01' &&
|
|
|
|
stopPoint.linkCode === section.linkCode &&
|
|
|
|
stopPoint.offset >= section.offsetLeft &&
|
|
|
|
stopPoint.offset <= section.offsetRight) {
|
|
|
|
section.isReentryTrack = true;
|
|
|
|
if (!section.reentryTrackName) {
|
|
|
|
section.reentryTrackName = section.name.replace(section.name.slice(0, 2), 'ZF');
|
|
|
|
}
|
|
|
|
if (!section.reentryTrackNamePosition) {
|
|
|
|
section.reentryTrackNamePosition = { x: 0, y: 0 };
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
// 设置道岔区段
|
|
|
|
if (map.switchList && map.switchList.length && map.sectionList && map.sectionList.length) {
|
|
|
|
map.switchList.forEach(elem => {
|
|
|
|
const sectiona = deviceMap[elem.sectionACode];
|
|
|
|
if (sectiona && sectiona.type !== '03') {
|
|
|
|
sectiona.nameShow = false;
|
|
|
|
sectiona.isSwitchSection = true;
|
|
|
|
sectiona.relSwitchCode = elem.code;
|
|
|
|
}
|
|
|
|
const sectionb = deviceMap[elem.sectionBCode];
|
|
|
|
if (sectionb && sectiona.type !== '03') {
|
|
|
|
sectionb.nameShow = false;
|
|
|
|
sectionb.isSwitchSection = true;
|
|
|
|
sectionb.relSwitchCode = elem.code;
|
|
|
|
}
|
|
|
|
const sectionc = deviceMap[elem.sectionCCode];
|
|
|
|
if (sectionc && sectiona.type !== '03') {
|
|
|
|
sectionc.nameShow = false;
|
|
|
|
sectionc.isSwitchSection = true;
|
|
|
|
sectionc.relSwitchCode = elem.code;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 实训状态数据
|
|
|
|
*/
|
|
|
|
const map = {
|
|
|
|
namespaced: true,
|
|
|
|
|
|
|
|
state: {
|
|
|
|
map: {}, // 地图数据
|
|
|
|
mapList: {}, // 地图数据列表
|
|
|
|
mapViewLoadedCount: 0, // 地图视图加载完成标识
|
|
|
|
mapDataLoadedCount: 0, // 地图数据加载完成标识
|
|
|
|
trainDetails: null // 列车详情显示
|
|
|
|
},
|
|
|
|
|
|
|
|
getters: {
|
|
|
|
mapList: (state) => {
|
|
|
|
return state.mapList;
|
|
|
|
},
|
|
|
|
map: (state) => {
|
|
|
|
return state.map;
|
|
|
|
},
|
|
|
|
skinStyle: (state) => {
|
2019-07-26 10:38:57 +08:00
|
|
|
if (state.map && state.map.skinVO) {
|
|
|
|
return state.map.skinVO.code;
|
2019-07-25 10:32:29 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
name: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.name;
|
|
|
|
} else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
version: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.version;
|
|
|
|
} else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
linkList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.linkList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
switchList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.switchList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
signalList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.signalList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
sectionList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.sectionList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
zcList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.zcList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
tempSpeedLimitList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.tempSpeedLimitList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
lcList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.lcList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
resourceList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.resourceList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
stationList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.stationList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
stationStandList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.stationStandList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
stationControlList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.stationControlList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
counterList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.counterList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
delayShowList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.delayShowList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
lineList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.lineList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
textList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.textList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
trainWindowList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.trainWindowList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
trainList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.trainList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
trainModelList: (state) => {
|
|
|
|
if (state.map) {
|
|
|
|
return state.map.trainModelList;
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
},
|
|
|
|
viewTrainList: (state) => {
|
2019-07-25 10:58:17 +08:00
|
|
|
// const trainList = [];
|
2019-07-25 15:44:23 +08:00
|
|
|
// const trainLevel = Vue.prototype.$jlmap.getTrainView();
|
2019-07-25 10:58:17 +08:00
|
|
|
// if (trainLevel) {
|
|
|
|
// trainLevel.eachChild((viewGroup) => {
|
|
|
|
// viewGroup.eachChild((train) => {
|
|
|
|
// if (train && train._type === deviceType.Train) {
|
|
|
|
// trainList.push(train.model);
|
|
|
|
// }
|
|
|
|
// }, this);
|
|
|
|
// }, this);
|
|
|
|
// }
|
|
|
|
// return trainList;
|
2019-07-25 10:32:29 +08:00
|
|
|
},
|
2019-07-26 10:38:57 +08:00
|
|
|
trainDetails: (state) => {
|
|
|
|
return state.trainDetails;
|
|
|
|
},
|
|
|
|
getDeviceByCode: () => (code) => {
|
|
|
|
if (Vue.prototype.$jlmap) {
|
|
|
|
return Vue.prototype.$jlmap.getDeviceByCode(code);
|
|
|
|
}
|
2019-07-25 10:32:29 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
// 查询区段关联的计数器
|
|
|
|
getCounterBySectionCode: (state) => (code, type) => {
|
|
|
|
let obj = null;
|
|
|
|
if (code && type && state.map &&
|
|
|
|
state.map.sectionList && state.map.sectionList.length &&
|
|
|
|
state.map.counterList && state.map.counterList.length) {
|
|
|
|
state.map.sectionList.forEach(section => {
|
|
|
|
if (section.code === code) {
|
|
|
|
state.map.counterList.forEach(counter => {
|
|
|
|
if (counter.stationCode === section.stationCode && type == counter.type) {
|
|
|
|
obj = counter;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
return obj;
|
|
|
|
},
|
|
|
|
|
|
|
|
// 查询信号机关联的计数器
|
|
|
|
getCounterBySingalCode: (state) => (code, type) => {
|
|
|
|
let obj = null;
|
|
|
|
if (code && type && state.map &&
|
|
|
|
state.map.signalList && state.map.signalList.length &&
|
|
|
|
state.map.counterList && state.map.counterList.length) {
|
|
|
|
state.map.signalList.forEach(signal => {
|
|
|
|
if (signal.code === code) {
|
|
|
|
state.map.counterList.forEach(counter => {
|
|
|
|
if (counter.stationCode === signal.stationCode && type == counter.type) {
|
|
|
|
obj = counter;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
return obj;
|
|
|
|
},
|
|
|
|
|
|
|
|
// 查询所属车站关联的控制模式
|
|
|
|
getStationControlByStationCode: (state) => (code) => {
|
|
|
|
let device = null;
|
|
|
|
if (code && state.map &&
|
|
|
|
state.map.stationControlList && state.map.stationControlList.length) {
|
|
|
|
state.map.stationControlList.forEach(elem => {
|
|
|
|
if (elem.stationCode == code) {
|
|
|
|
device = elem;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
return device;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
mutations: {
|
2019-07-25 14:03:26 +08:00
|
|
|
setMapData: (state, map) => {
|
|
|
|
state.map = map;
|
2019-07-25 10:32:29 +08:00
|
|
|
},
|
|
|
|
mapRender: (state, devices) => {
|
2019-07-25 15:44:23 +08:00
|
|
|
Vue.prototype.$jlmap && Vue.prototype.$jlmap.render(devices);
|
2019-07-25 10:32:29 +08:00
|
|
|
},
|
|
|
|
mapUpdate: (devices) => {
|
2019-07-25 15:44:23 +08:00
|
|
|
Vue.prototype.$jlmap && Vue.prototype.$jlmap.update(devices);
|
2019-07-25 10:32:29 +08:00
|
|
|
},
|
|
|
|
setTrainDetails: (state, details) => {
|
|
|
|
state.trainDetails = details;
|
|
|
|
},
|
|
|
|
mapViewLoadedCountIncrement: (state) => {
|
|
|
|
state.mapViewLoadedCount += 1;
|
|
|
|
},
|
|
|
|
mapDataLoadedCountIncrement: (state) => {
|
|
|
|
state.mapDataLoadedCount += 1;
|
|
|
|
},
|
|
|
|
operateTrainModel: (state, { model, type }) => {
|
|
|
|
if (state.map && model) {
|
|
|
|
const list = state.map.trainModelList || [];
|
|
|
|
if (type === 'ADD') {
|
|
|
|
const index = list.indexOf(list.find(elem => { return elem.code === model.code; }));
|
|
|
|
if (index < 0) {
|
|
|
|
list.push(Object.assign({}, model));
|
|
|
|
}
|
|
|
|
} else if (type === 'UPT') {
|
|
|
|
const index = list.indexOf(list.find(elem => { return elem.code === model.code; }));
|
|
|
|
if (index >= 0) {
|
|
|
|
for (var prop in model) {
|
|
|
|
list[index][prop] = model[prop];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (type === 'DEL') {
|
|
|
|
const index = list.indexOf(list.find(elem => { return elem.code === model.code; }));
|
|
|
|
if (index >= 0) {
|
|
|
|
list.splice(index, 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
mapClear: (state) => {
|
2019-07-26 18:54:42 +08:00
|
|
|
this.map = null;
|
2019-07-25 15:44:23 +08:00
|
|
|
Vue.prototype.$jlmap && Vue.prototype.$jlmap.clear();
|
2019-07-25 10:32:29 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
actions: {
|
|
|
|
mapClear: ({ commit }) => {
|
|
|
|
commit('mapClear');
|
|
|
|
},
|
|
|
|
|
2019-07-25 14:03:26 +08:00
|
|
|
setMapData: ({ commit }, map) => {
|
|
|
|
commit('setMapData', map);
|
2019-07-25 10:32:29 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
setTrainDetails: ({ commit }, message) => {
|
|
|
|
commit('setTrainDetails', message);
|
|
|
|
},
|
|
|
|
|
|
|
|
setMapDataList: ({ state }, map) => {
|
|
|
|
const skinVO = map.skinVO;
|
|
|
|
if (skinVO && skinVO.code) {
|
|
|
|
state.mapList[`mapDate_${skinVO.code}`] = map;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
updateMapDevices: ({ commit }, devices) => {
|
|
|
|
return new Promise((resolve) => {
|
|
|
|
if (!(devices instanceof Array)) {
|
|
|
|
devices = [devices];
|
|
|
|
}
|
|
|
|
|
|
|
|
commit('mapRender', devices);
|
|
|
|
resolve(devices);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
deleteMapDevices: ({ commit, state }, devices) => {
|
|
|
|
return new Promise((resolve) => {
|
|
|
|
if (!(devices instanceof Array)) {
|
|
|
|
devices = [devices];
|
|
|
|
}
|
|
|
|
|
|
|
|
// 查找向上关联需要一起删除的设备
|
|
|
|
const effectedDeviceList = [];
|
|
|
|
devices.forEach((device) => {
|
|
|
|
queryEffectedDevices(state.map, device, effectedDeviceList);
|
|
|
|
});
|
|
|
|
|
|
|
|
commit('mapRender', effectedDeviceList);
|
|
|
|
resolve(effectedDeviceList);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
updateMapView: ({ commit }, devices) => {
|
|
|
|
commit('mapUpdate', devices);
|
|
|
|
},
|
|
|
|
|
|
|
|
saveMapDeviceDefaultConvert({ state }) {
|
|
|
|
saveMapDeviceDefaultConvert(state);
|
|
|
|
},
|
|
|
|
|
|
|
|
mapViewLoaded: ({ commit }) => {
|
|
|
|
commit('mapViewLoadedCountIncrement');
|
|
|
|
},
|
|
|
|
|
|
|
|
mapDataLoaded: ({ commit }) => {
|
|
|
|
commit('mapDataLoadedCountIncrement');
|
|
|
|
},
|
|
|
|
|
|
|
|
clearJlmapTrainView: ({ state }) => {
|
2019-07-26 17:13:03 +08:00
|
|
|
if (Vue.prototype.$jlmap) {
|
|
|
|
Vue.prototype.$jlmap.clearTrainView();
|
|
|
|
}
|
2019-07-25 10:32:29 +08:00
|
|
|
},
|
|
|
|
|
2019-07-26 17:39:05 +08:00
|
|
|
setTrainWindowShow: ({state}) => {
|
|
|
|
console.log('设置车次窗隐藏');
|
|
|
|
},
|
|
|
|
|
2019-07-25 10:32:29 +08:00
|
|
|
operateTrainModel: ({ commit }, { model, type }) => {
|
|
|
|
commit('operateTrainModel', { model, type });
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
export default map;
|