rt-sim-training-client/src/store/modules/map.js

557 lines
13 KiB
JavaScript
Raw Normal View History

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;