菜单调整
This commit is contained in:
parent
a69ef7590e
commit
9ffd70de63
@ -296,7 +296,7 @@ export function modifySystemTime(data, group) {
|
|||||||
/** 新版地图按计划行车 */
|
/** 新版地图按计划行车 */
|
||||||
export function ranAsPlan(data, group) {
|
export function ranAsPlan(data, group) {
|
||||||
return request({
|
return request({
|
||||||
url: `/simulation/${group}/ranAsPlan`,
|
url: `/simulation/new/${group}/runAsPlan`,
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: data
|
data: data
|
||||||
});
|
});
|
||||||
|
@ -176,10 +176,7 @@ const runPlan = {
|
|||||||
},
|
},
|
||||||
/** 设置stations数据 */
|
/** 设置stations数据 */
|
||||||
setStations: ({ commit }, mapModel) => {
|
setStations: ({ commit }, mapModel) => {
|
||||||
return new Promise((resolve) => {
|
commit('setStations', mapModel);
|
||||||
commit('setStations', mapModel);
|
|
||||||
resolve(mapModel);
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
/** 重置运行图数据更新池 */
|
/** 重置运行图数据更新池 */
|
||||||
resetRunPlanData:({ commit }) => {
|
resetRunPlanData:({ commit }) => {
|
||||||
@ -218,10 +215,7 @@ const runPlan = {
|
|||||||
},
|
},
|
||||||
/** 清空数据*/
|
/** 清空数据*/
|
||||||
clear: ({ commit }) => {
|
clear: ({ commit }) => {
|
||||||
return new Promise((resolve) => {
|
commit('clear');
|
||||||
commit('clear');
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
draftClear: ({ commit }) => {
|
draftClear: ({ commit }) => {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
|
@ -57,7 +57,7 @@ export function handleMapData(mapData, type) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
export function loadRunPlanData(group, dataError) {
|
export function loadRunPlanData(group) {
|
||||||
if (!store.state.runPlan.runPlanInfo || !store.state.runPlan.runPlanInfo.templateId) {
|
if (!store.state.runPlan.runPlanInfo || !store.state.runPlan.runPlanInfo.templateId) {
|
||||||
MessageBox.confirm('未获取到运行图信息!', '提示', {
|
MessageBox.confirm('未获取到运行图信息!', '提示', {
|
||||||
confirmButtonText: '确定',
|
confirmButtonText: '确定',
|
||||||
@ -78,7 +78,7 @@ export function loadRunPlanData(group, dataError) {
|
|||||||
resp.data.version = store.state.runPlan.runPlanInfo.version;
|
resp.data.version = store.state.runPlan.runPlanInfo.version;
|
||||||
dbUpdateData('runPlan', resp.data);
|
dbUpdateData('runPlan', resp.data);
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
runPlanErrorHandle(error, dataError);
|
runPlanErrorHandle(error);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
getEveryDayRunPlanNew(group).then(async (resp) => {
|
getEveryDayRunPlanNew(group).then(async (resp) => {
|
||||||
@ -88,12 +88,12 @@ export function loadRunPlanData(group, dataError) {
|
|||||||
resp.data.version = store.state.runPlan.runPlanInfo.version;
|
resp.data.version = store.state.runPlan.runPlanInfo.version;
|
||||||
dbAddData('runPlan', resp.data);
|
dbAddData('runPlan', resp.data);
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
runPlanErrorHandle(error, dataError);
|
runPlanErrorHandle(error);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
export function runPlanErrorHandle(error, dataError) {
|
export function runPlanErrorHandle(error) {
|
||||||
store.dispatch('runPlan/setPlanData', []);
|
store.dispatch('runPlan/setPlanData', []);
|
||||||
if (error.code == 30001) {
|
if (error.code == 30001) {
|
||||||
MessageBox.confirm('今日运行图未加载', '提示', {
|
MessageBox.confirm('今日运行图未加载', '提示', {
|
||||||
@ -101,12 +101,6 @@ export function runPlanErrorHandle(error, dataError) {
|
|||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
type: 'warning'
|
type: 'warning'
|
||||||
});
|
});
|
||||||
} else if (!dataError) {
|
|
||||||
MessageBox.confirm('获取运行图数据失败', '提示', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
showCancelButton: false,
|
|
||||||
type: 'warning'
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,29 +5,50 @@
|
|||||||
</transition>
|
</transition>
|
||||||
<simulation-control ref="simulationControl" />
|
<simulation-control ref="simulationControl" />
|
||||||
<simulation-menu ref="simulationMenu" :mode="mode" />
|
<simulation-menu ref="simulationMenu" :mode="mode" />
|
||||||
|
<training-tip ref="trainingTip" />
|
||||||
|
<training-position-tip ref="trainingPositionTip" />
|
||||||
|
<training-menu v-if="hasTraining" ref="trainingMenu" :offset-bottom="offsetBottom" />
|
||||||
|
<training-design v-if="trainingDesign" ref="trainingDesign" />
|
||||||
|
<voice-chat-box v-if="hasVoice" :group="group" />
|
||||||
|
<design-training-menu v-if="trainingDesign && trainingDetail" ref="trainingMenu" :offset-bottom="offsetBottom" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { getSessionStorage } from '@/utils/auth';
|
import { getSessionStorage } from '@/utils/auth';
|
||||||
import { mapGetters } from 'vuex';
|
import { mapGetters } from 'vuex';
|
||||||
import TerminalsPicture from './terminals/index';
|
import TerminalsPicture from './terminals/index';
|
||||||
import SimulationMenu from './simulationMenu';
|
import SimulationMenu from './simulationMenu/simulationMenu';
|
||||||
import { clearSimulation, getSimulationInfoNew} from '@/api/simulation';
|
import { clearSimulation, getSimulationInfoNew} from '@/api/simulation';
|
||||||
import { destroySimulation, getSimulationInfoByGroup } from '@/api/rtSimulation';
|
import { loadMapDataById, loadRunPlanData } from '@/utils/loaddata';
|
||||||
import { loadMapDataById } from '@/utils/loaddata';
|
import { getByGroupStationList } from '@/api/jmap/map';
|
||||||
import { EventBus } from '@/scripts/event-bus';
|
import { EventBus } from '@/scripts/event-bus';
|
||||||
import SimulationControl from './simulationControl.vue';
|
import SimulationControl from './simulationControl.vue';
|
||||||
|
import TrainingTip from './trainingList/trainingTip';
|
||||||
|
import TrainingPositionTip from './trainingList/trainingPositionTip.vue';
|
||||||
|
import TrainingMenu from './trainingList/trainingMenu';
|
||||||
|
import TrainingDesign from './trainingDesign/designPane.vue';
|
||||||
|
import VoiceChatBox from './voiceChatBox';
|
||||||
|
import DesignTrainingMenu from './trainingList/designTrainingMenu';
|
||||||
export default {
|
export default {
|
||||||
name: 'DisplayDraft',
|
name: 'DisplayDraft',
|
||||||
components: {
|
components: {
|
||||||
TerminalsPicture,
|
TerminalsPicture,
|
||||||
SimulationMenu,
|
SimulationMenu,
|
||||||
SimulationControl
|
SimulationControl,
|
||||||
|
TrainingTip,
|
||||||
|
TrainingPositionTip,
|
||||||
|
TrainingMenu,
|
||||||
|
TrainingDesign,
|
||||||
|
VoiceChatBox,
|
||||||
|
DesignTrainingMenu
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
dataError: false,
|
group: '',
|
||||||
group: ''
|
offsetBottom: 35,
|
||||||
|
hasTraining: false,
|
||||||
|
hasVoice: false,
|
||||||
|
trainingDesign: false
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed:{
|
computed:{
|
||||||
@ -49,6 +70,9 @@ export default {
|
|||||||
// 当前的所属项目
|
// 当前的所属项目
|
||||||
project() {
|
project() {
|
||||||
return getSessionStorage('project');
|
return getSessionStorage('project');
|
||||||
|
},
|
||||||
|
trainingDetail() {
|
||||||
|
return this.$store.state.trainingNew.trainingDetail;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch:{
|
watch:{
|
||||||
@ -56,7 +80,10 @@ export default {
|
|||||||
this.setWindowSize();
|
this.setWindowSize();
|
||||||
},
|
},
|
||||||
'$store.state.training.domConfig': function(val) {
|
'$store.state.training.domConfig': function(val) {
|
||||||
this.$refs.simulationMenu.handleMenuShow(val);
|
this.hasVoice = val.hasVoice;
|
||||||
|
this.hasTraining = val.hasTraining;
|
||||||
|
this.trainingDesign = val.trainingDesign;
|
||||||
|
this.$refs.simulationMenu.handleMenuShow();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async mounted() {
|
async mounted() {
|
||||||
@ -67,11 +94,11 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
if (getSessionStorage('project') == 'wjls') {
|
this.$store.dispatch('socket/clearTrainingOverCount');
|
||||||
destroySimulation(this.group);
|
this.$store.dispatch('trainingNew/clearStepOverCount');
|
||||||
} else {
|
this.$store.dispatch('trainingNew/trainingEnd');
|
||||||
clearSimulation(this.group);
|
this.$store.dispatch('trainingNew/changeTeachMode', '');
|
||||||
}
|
clearSimulation(this.group);
|
||||||
},
|
},
|
||||||
methods:{
|
methods:{
|
||||||
// 缩放设置
|
// 缩放设置
|
||||||
@ -82,45 +109,32 @@ export default {
|
|||||||
},
|
},
|
||||||
// 初始化
|
// 初始化
|
||||||
initLoadData() {
|
initLoadData() {
|
||||||
// this.$store.dispatch('training/reset');
|
getSimulationInfoNew(this.group).then(resp => {
|
||||||
this.loadSimulationInfo();
|
if (resp && resp.data && !resp.data.dataError) {
|
||||||
},
|
this.$store.dispatch('runPlan/setRunPlanInfo', resp.data.runPlan);
|
||||||
// 新版地图根据仿真group获取仿真基础信息
|
this.$store.dispatch('training/setDomConfig', resp.data.paramVO && resp.data.paramVO.domConfig ? resp.data.paramVO.domConfig : {});
|
||||||
async loadSimulationInfo() {
|
loadMapDataById(this.mapId, 'simulation');
|
||||||
let resp;
|
this.loadRunPlan();
|
||||||
if (this.project == 'wjls') {
|
|
||||||
resp = await getSimulationInfoByGroup(this.group);
|
|
||||||
} else {
|
|
||||||
resp = await getSimulationInfoNew(this.group);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (resp && resp.code == 200 && resp.data) {
|
|
||||||
if (!resp.data.dataError) {
|
|
||||||
this.loadMapData();
|
|
||||||
} else {
|
} else {
|
||||||
|
this.endViewLoading();
|
||||||
this.$messageBox('此地图数据正在维护中,无法运行!');
|
this.$messageBox('此地图数据正在维护中,无法运行!');
|
||||||
}
|
}
|
||||||
this.dataError = resp.data.dataError;
|
}).catch(e => {
|
||||||
if (resp.data.paramVO && resp.data.paramVO.domConfig) {
|
console.error(e);
|
||||||
this.$store.dispatch('training/setDomConfig', resp.data.paramVO.domConfig);
|
this.$store.dispatch('app/animationsClose');
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// 加载地图数据
|
|
||||||
loadMapData() {
|
|
||||||
if (parseInt(this.mapId)) {
|
|
||||||
// this.$store.dispatch('training/changeOperateMode', { mode: OperateMode.NORMAL }); // 默认为正常模式
|
|
||||||
console.log('==========');
|
|
||||||
loadMapDataById(this.mapId, 'simulation');
|
|
||||||
} else {
|
|
||||||
this.endViewLoading();
|
this.endViewLoading();
|
||||||
}
|
this.$message.error('获取仿真信息失败!');
|
||||||
|
});
|
||||||
|
},
|
||||||
|
loadRunPlan() {
|
||||||
|
this.$store.dispatch('runPlan/clear');
|
||||||
|
getByGroupStationList(this.group).then(resp => {
|
||||||
|
this.$store.dispatch('runPlan/setStations', resp.data);
|
||||||
|
loadRunPlanData(this.group);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
// 结束加载状态
|
// 结束加载状态
|
||||||
endViewLoading(isSuccess) {
|
endViewLoading() {
|
||||||
// if (!isSuccess) {
|
|
||||||
// this.$store.dispatch('map/mapClear');
|
|
||||||
// }
|
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
EventBus.$emit('viewLoading', false);
|
EventBus.$emit('viewLoading', false);
|
||||||
});
|
});
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
default-expand-all
|
default-expand-all
|
||||||
style="margin: 10px;margin-bottom: 0;border: 1px solid #ccc;overflow-y: auto;height: calc(100% - 120px);"
|
style="margin: 10px;margin-bottom: 0;border: 1px solid #ccc;overflow-y: auto;height: calc(100% - 120px);"
|
||||||
:filter-node-method="filterNode"
|
:filter-node-method="filterNode"
|
||||||
@node-click="handleNodeClick"
|
|
||||||
>
|
>
|
||||||
<span :id="data.id" slot-scope="{ data }" class="custom-tree-node">
|
<span :id="data.id" slot-scope="{ data }" class="custom-tree-node">
|
||||||
<span>{{ data.labelName }}</span>
|
<span>{{ data.labelName }}</span>
|
||||||
@ -360,13 +359,6 @@ export default {
|
|||||||
this.checkRoleChange(list);
|
this.checkRoleChange(list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// '$store.state.socket.simulationRoleList':function(val) {
|
|
||||||
// if (val && val.length) {
|
|
||||||
// this.handlerMemberOnOff(val);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
doShow() {
|
doShow() {
|
||||||
@ -385,12 +377,6 @@ export default {
|
|||||||
messageInfo(info) {
|
messageInfo(info) {
|
||||||
this.$message({ showClose: true, ...info });
|
this.$message({ showClose: true, ...info });
|
||||||
},
|
},
|
||||||
jumpInSimulation() {
|
|
||||||
},
|
|
||||||
clearSubscribe() {
|
|
||||||
},
|
|
||||||
handleNodeClick() {
|
|
||||||
},
|
|
||||||
nodeMemberChange(val, nodeData) {
|
nodeMemberChange(val, nodeData) {
|
||||||
let user = '';
|
let user = '';
|
||||||
this.simulationUserList.forEach(item => {
|
this.simulationUserList.forEach(item => {
|
||||||
@ -428,21 +414,14 @@ export default {
|
|||||||
const item = each.body;
|
const item = each.body;
|
||||||
if (item.messageType === 'PLAY_CHANGE' && item.userId == this.userId) {
|
if (item.messageType === 'PLAY_CHANGE' && item.userId == this.userId) {
|
||||||
const userRole = item.type || 'AUDIENCE';
|
const userRole = item.type || 'AUDIENCE';
|
||||||
// this.userRole = item.type || 'AUDIENCE';
|
|
||||||
this.$store.dispatch('training/setRoleDeviceCode', item.deviceCode);
|
this.$store.dispatch('training/setRoleDeviceCode', item.deviceCode);
|
||||||
this.$store.dispatch('training/setMyMemberId', item.memberId);
|
this.$store.dispatch('training/setMyMemberId', item.memberId);
|
||||||
this.$store.dispatch('training/setUserRole', userRole);
|
this.$store.dispatch('training/setUserRole', userRole);
|
||||||
this.$store.dispatch('training/setRoles', userRole);
|
this.$store.dispatch('training/setRoles', userRole);
|
||||||
// this.deviceCode = item.deviceCode;
|
|
||||||
// this.setSimulationPrdType(this.centralizedStationMap[item.deviceCode]);
|
|
||||||
this.$store.dispatch('training/updateMemberAndUser', { simulationUserList: [item], userId: this.userId });
|
this.$store.dispatch('training/updateMemberAndUser', { simulationUserList: [item], userId: this.userId });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// handlerMemberOnOff(data) {
|
|
||||||
// this.$store.dispatch('training/updateMemberAndUser', { simulationUserList: data, userId: this.userId });
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
@ -65,10 +65,10 @@ import {getPublishTrainingDetail, loadPublishTraining} from '@/api/jmap/training
|
|||||||
import { getPostByProjectCode } from '@/api/learn';
|
import { getPostByProjectCode } from '@/api/learn';
|
||||||
import { getSessionStorage } from '@/utils/auth';
|
import { getSessionStorage } from '@/utils/auth';
|
||||||
import { ProjectCode } from '@/scripts/ProjectConfig';
|
import { ProjectCode } from '@/scripts/ProjectConfig';
|
||||||
import ContectUs from './contectUs';
|
import ContectUs from './simulationMenu/contectUs';
|
||||||
import ModifyTime from './modifyTime';
|
import ModifyTime from './modifyTime';
|
||||||
import FlowData from './flowData';
|
import FlowData from './simulationMenu/flowData';
|
||||||
import SetTime from './setTime';
|
import SetTime from './simulationMenu/setTime';
|
||||||
import Jl3dDevice from '@/views/jlmap3d/device/jl3ddevice';
|
import Jl3dDevice from '@/views/jlmap3d/device/jl3ddevice';
|
||||||
import { clearSimulation, ranAsPlan, exitRunPlan } from '@/api/simulation';
|
import { clearSimulation, ranAsPlan, exitRunPlan } from '@/api/simulation';
|
||||||
import { getToken } from '@/utils/auth';
|
import { getToken } from '@/utils/auth';
|
||||||
|
@ -10,11 +10,6 @@
|
|||||||
<div class="eachInfo"><span class="el-icon-mobile-phone" style="font-size:15px;margin-right:7px;" />电 话:4000500081</div>
|
<div class="eachInfo"><span class="el-icon-mobile-phone" style="font-size:15px;margin-right:7px;" />电 话:4000500081</div>
|
||||||
<div class="eachInfo"><span class="el-icon-message" style="font-size:15px;margin-right:7px;" />邮 箱:zhrc@richortech.com</div>
|
<div class="eachInfo"><span class="el-icon-message" style="font-size:15px;margin-right:7px;" />邮 箱:zhrc@richortech.com</div>
|
||||||
<div class="eachInfo"><span class="el-icon-connection" style="font-size:15px;margin-right:7px;" />网 址:www.richortech.com</div>
|
<div class="eachInfo"><span class="el-icon-connection" style="font-size:15px;margin-right:7px;" />网 址:www.richortech.com</div>
|
||||||
<!-- <div class="eachInfo">
|
|
||||||
<span class="el-icon-chat-round" style="font-size:15px;margin-right:3px;vertical-align:top;" />
|
|
||||||
<span style="vertical-align: top;">微 信:</span>
|
|
||||||
<img :src="wchatImg" width="80" height="80">
|
|
||||||
</div> -->
|
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<div><span class="el-icon-user" style="font-size:15px;margin-right:8px;" />联系人:许经理</div>
|
<div><span class="el-icon-user" style="font-size:15px;margin-right:8px;" />联系人:许经理</div>
|
198
src/views/newMap/display/simulationMenu/deviceManage.vue
Normal file
198
src/views/newMap/display/simulationMenu/deviceManage.vue
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-drawer
|
||||||
|
title="设备管理"
|
||||||
|
:visible.sync="show"
|
||||||
|
direction="ltr"
|
||||||
|
:before-close="doClose"
|
||||||
|
custom-class="dialog_box"
|
||||||
|
size="43%"
|
||||||
|
>
|
||||||
|
<div style="margin-bottom: 3px; overflow: hidden; padding: 0 10px;">
|
||||||
|
<div class="plc_box">名称: {{ plcInfo.name }}</div>
|
||||||
|
<div class="plc_box">状态: <span :style="{'color': plcInfo.status ? 'green' : 'red'}">{{ plcInfo.status ? '在线' : '不在线' }}</span></div>
|
||||||
|
<el-button type="text" size="small" class="freshen_box" @click="getList">刷新</el-button>
|
||||||
|
</div>
|
||||||
|
<el-table :data="tableData" border style="width: 100%; max-height: calc(100% - 24px); overflow: auto;">
|
||||||
|
<el-table-column prop="code" label="设备编号" width="180" />
|
||||||
|
<el-table-column prop="typeName" label="设备类型" width="180" />
|
||||||
|
<el-table-column prop="vrDeviceCode" label="连接设备编码">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<div v-if="scope.row.vrDeviceCode" class="flex_box">{{ scope.row.vrDeviceName }}</div>
|
||||||
|
<div v-if="!scope.row.vrDeviceCode" class="flex_box">(空)</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button :type="scope.row.buttonShowType ? 'danger' : 'primary'" size="small" @click="handleClick(scope.row, scope.$index)">连接</el-button>
|
||||||
|
<el-button size="small" @click="cancel(scope.row, scope.$index)">断开</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-drawer>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { getAllSimulationList, postSimulationConnectById, putSimulationDisconnectById } from '@/api/simulation.js';
|
||||||
|
import ConstConfig from '@/scripts/ConstConfig';
|
||||||
|
import { EventBus } from '@/scripts/event-bus';
|
||||||
|
import { getSessionStorage } from '@/utils/auth';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'DeviceManage',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
show: false,
|
||||||
|
group: '',
|
||||||
|
tableData: [],
|
||||||
|
typeList: ConstConfig.ConstSelect.projectDeviceTypeList,
|
||||||
|
plcInfo: {
|
||||||
|
name: '',
|
||||||
|
status: ''
|
||||||
|
},
|
||||||
|
index: 0,
|
||||||
|
selected: {},
|
||||||
|
typeObj: {
|
||||||
|
Section: '区段',
|
||||||
|
Signal: '信号机',
|
||||||
|
Switch: '道岔',
|
||||||
|
Psd: '屏蔽门',
|
||||||
|
StationStand: '站台'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
project() {
|
||||||
|
return getSessionStorage('project');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
EventBus.$on('selectDevice', (data) => {
|
||||||
|
this.selected = data;
|
||||||
|
this.tableData[this.index]['buttonShowType'] = false;
|
||||||
|
this.tableData.splice(this.index, 1, this.tableData[this.index]);
|
||||||
|
this.$store.dispatch('map/selectDeviceCode', {flag: false, type: ''});
|
||||||
|
this.connect(this.tableData[this.index]);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
EventBus.$off('selectDevice');
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
doShow() {
|
||||||
|
this.show = true;
|
||||||
|
this.group = this.$route.query.group;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
async getList() {
|
||||||
|
try {
|
||||||
|
const res = await getAllSimulationList(this.group);
|
||||||
|
this.tableData = [];
|
||||||
|
res.data.forEach((item, index) => {
|
||||||
|
if (item.type == 'PLC_GATEWAY') {
|
||||||
|
this.plcInfo = {
|
||||||
|
name: 'PLC网关',
|
||||||
|
status: item.online
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
item.buttonShowType = false;
|
||||||
|
item.typeName = this.typeList.find(el => el.value == item.type).label;
|
||||||
|
if (item.vrDeviceCode && this.$store.getters['map/getDeviceByCode'](item.vrDeviceCode)) {
|
||||||
|
item.vrDeviceName = this.$store.getters['map/getDeviceByCode'](item.vrDeviceCode).name;
|
||||||
|
} else {
|
||||||
|
item.vrDeviceName = item.vrDeviceCode;
|
||||||
|
}
|
||||||
|
if (this.project == 'heb' || this.project == 'designheb') {
|
||||||
|
if (item.type == 'SWITCH') {
|
||||||
|
this.tableData.push(item);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.tableData.push(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
doClose() {
|
||||||
|
this.show = false;
|
||||||
|
},
|
||||||
|
handleClick(row, index) {
|
||||||
|
row.buttonShowType = !row.buttonShowType;
|
||||||
|
this.index = index;
|
||||||
|
this.tableData.splice(index, 1, row);
|
||||||
|
this.$store.dispatch('map/selectDeviceCode', {flag: row.buttonShowType, type: row.type});
|
||||||
|
},
|
||||||
|
connect(row) {
|
||||||
|
this.$confirm(`您确定连接${this.typeObj[this.selected._type] || '设备'}: ${this.selected.name}, 是否继续?`, '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
}).then(async () => {
|
||||||
|
try {
|
||||||
|
const res = await postSimulationConnectById(this.group, row.id, this.selected.code);
|
||||||
|
if (res && res.code == 200) {
|
||||||
|
this.$message.success('连接成功!');
|
||||||
|
this.tableData[this.index]['vrDeviceCode'] = this.selected.code;
|
||||||
|
this.tableData[this.index]['vrDeviceName'] = this.selected.name;
|
||||||
|
this.tableData.splice(this.index, 1, this.tableData[this.index]);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
cancel(row, index) {
|
||||||
|
this.$confirm('您确定将次设备断开, 是否继续?', '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
}).then(async () => {
|
||||||
|
if (row.vrDeviceCode) {
|
||||||
|
row.vrDeviceCode = '';
|
||||||
|
row.vrDeviceName = '';
|
||||||
|
this.tableData.splice(index, 1, row);
|
||||||
|
try {
|
||||||
|
const res = await putSimulationDisconnectById(this.group, row.id);
|
||||||
|
if (res && res.code == 200) {
|
||||||
|
this.$message.success('断开成功!');
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||||
|
.plc_box{
|
||||||
|
float: left;
|
||||||
|
margin-right: 40px;
|
||||||
|
padding: 9px;
|
||||||
|
}
|
||||||
|
.freshen_box{
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.flex_box{
|
||||||
|
float: left;
|
||||||
|
margin-right: 5px;
|
||||||
|
line-height: 30px;
|
||||||
|
}
|
||||||
|
/deep/ {
|
||||||
|
.el-dialog__wrapper{
|
||||||
|
width: 800px;
|
||||||
|
}
|
||||||
|
.dialog_box{
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.el-dialog__body{
|
||||||
|
padding-top: 6px;
|
||||||
|
height: calc(100% - 54px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
79
src/views/newMap/display/simulationMenu/diagramLoad.vue
Normal file
79
src/views/newMap/display/simulationMenu/diagramLoad.vue
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<template>
|
||||||
|
<div v-show="show" class="run-plan-dialog" :style="{width: width + 'px',height:height + 'px'}">
|
||||||
|
<plan-schedule ref="planSchedule" :group="group" @back="doClose" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import PlanSchedule from '@/views/planSchedule/index';
|
||||||
|
import { getSimulationInfoNew } from '@/api/simulation';
|
||||||
|
import { loadRunPlanData } from '@/utils/loaddata';
|
||||||
|
// 运行图加载
|
||||||
|
export default {
|
||||||
|
name: 'DiagramLoad',
|
||||||
|
components: {
|
||||||
|
PlanSchedule
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
group: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
menus: null,
|
||||||
|
show: false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
title() {
|
||||||
|
return this.$t('display.runPlan.runDiagramPlanTool');
|
||||||
|
},
|
||||||
|
width() {
|
||||||
|
return this.$store.state.app.width > 1920 ? 1920 : this.$store.state.app.width;
|
||||||
|
},
|
||||||
|
height() {
|
||||||
|
return this.$store.state.app.height > 1080 ? 1080 : this.$store.state.app.height;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
'$store.state.socket.runPlanReloadCount': function (val) {
|
||||||
|
getSimulationInfoNew(this.group).then(res => {
|
||||||
|
this.$store.dispatch('runPlan/setRunPlanInfo', res.data.runPlan);
|
||||||
|
loadRunPlanData(this.group);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
this.$store.dispatch('runPlan/setPlanData', []);
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
// this.menus = this.$theme.loadPlanComponent(this.$route.query.lineCode);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
doShow() {
|
||||||
|
this.show = true;
|
||||||
|
this.$refs.planSchedule.setPosition();
|
||||||
|
},
|
||||||
|
doClose() {
|
||||||
|
this.show = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||||
|
@import "src/styles/mixin.scss";
|
||||||
|
|
||||||
|
.run-plan-dialog {
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 38;
|
||||||
|
top: 0px;
|
||||||
|
right: 0px;
|
||||||
|
background: white;
|
||||||
|
}
|
||||||
|
</style>
|
651
src/views/newMap/display/simulationMenu/diagramPreview.vue
Normal file
651
src/views/newMap/display/simulationMenu/diagramPreview.vue
Normal file
@ -0,0 +1,651 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
v-dialogLoading="dialogLoading"
|
||||||
|
:title="title"
|
||||||
|
:width="maxWidth + 'px'"
|
||||||
|
top="0"
|
||||||
|
:style="{left:$store.state.app.width> 1920? '50%': '0'}"
|
||||||
|
:visible.sync="dialogShow"
|
||||||
|
:before-close="doClose"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:modal="false"
|
||||||
|
>
|
||||||
|
<div id="PlanSchedule" :style="{top: top+'px', height: height+'px'}">
|
||||||
|
<div class="left">
|
||||||
|
<div :id="runPlanId" />
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<data-table
|
||||||
|
ref="serviceTable1"
|
||||||
|
:height="height/2"
|
||||||
|
:config="serviceNumberConfig"
|
||||||
|
:style="{top: top-height/2+'px'}"
|
||||||
|
@touch="scheduleTouch"
|
||||||
|
/>
|
||||||
|
<data-table
|
||||||
|
ref="tripTable1"
|
||||||
|
:height="height/2"
|
||||||
|
:config="tripNumberConfig"
|
||||||
|
:style="{top: top-height/2+'px'}"
|
||||||
|
@touch="trainNumTouch"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapGetters } from 'vuex';
|
||||||
|
import { timeFormat } from '@/utils/date';
|
||||||
|
import DataTable from '@/views/planSchedule/menusPlan/components/dataTable';
|
||||||
|
import echarts from 'echarts';
|
||||||
|
import {toTimeStamp, formatDuring} from '@/utils/date';
|
||||||
|
import { deepAssign } from '@/utils/index';
|
||||||
|
import { EventBus } from '@/scripts/event-bus';
|
||||||
|
let myChart = null;
|
||||||
|
export default {
|
||||||
|
name: 'DiagramPreview',
|
||||||
|
components: {
|
||||||
|
DataTable
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
top: 0,
|
||||||
|
height: 0,
|
||||||
|
inter:null,
|
||||||
|
runPlanId: 'run-plan-view',
|
||||||
|
// myChart: null,
|
||||||
|
PlanParser: {},
|
||||||
|
serviceNumberConfig: {
|
||||||
|
data: [],
|
||||||
|
highlightCurrentRow: true,
|
||||||
|
handleChange: this.serviceNumberChange,
|
||||||
|
showClose: false,
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
prop: 'serviceNumber',
|
||||||
|
label: '表号'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
width: 40
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
tripNumberConfig: {
|
||||||
|
data: [],
|
||||||
|
highlightCurrentRow: true,
|
||||||
|
handleChange: this.tripNumberChange,
|
||||||
|
showClose: false,
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
prop: 'tripNumber',
|
||||||
|
label: '车次号'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
width: 40
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
realData: {},
|
||||||
|
kmRangeMap: {},
|
||||||
|
absoluteTime: 2 * 3600,
|
||||||
|
indexKmRangeMap: {},
|
||||||
|
dialogLoading: false,
|
||||||
|
dialogShow: false,
|
||||||
|
seriesMap: {},
|
||||||
|
staticSeries: [],
|
||||||
|
runSeries: [],
|
||||||
|
selectSeries: [],
|
||||||
|
runPlanData: {}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters('runPlan', [
|
||||||
|
'stations'
|
||||||
|
]),
|
||||||
|
maxWidth() {
|
||||||
|
return this.$store.state.app.width > 1920 ? 1920 : this.$store.state.app.width;
|
||||||
|
},
|
||||||
|
maxHeight() {
|
||||||
|
return this.$store.state.app.height > 1080 ? 1080 : this.$store.state.app.height;
|
||||||
|
},
|
||||||
|
title() {
|
||||||
|
return this.$t('display.runPlan.previewRunDiagram');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
maxWidth() {
|
||||||
|
this.setPosition();
|
||||||
|
},
|
||||||
|
maxHeight() {
|
||||||
|
this.setPosition();
|
||||||
|
},
|
||||||
|
'$store.state.runPlan.planLoadedCount': async function () {
|
||||||
|
try {
|
||||||
|
await this.loadChartPage();
|
||||||
|
this.selectSeries = []; this.runSeries = []; this.runPlanData = {};
|
||||||
|
if (this.dialogShow) {
|
||||||
|
await this.loadInitData();
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
} finally {
|
||||||
|
this.loading = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'$store.state.socket.simulationReset': function (val) {
|
||||||
|
this.selectSeries = []; this.runSeries = []; this.runPlanData = {};
|
||||||
|
if (this.dialogShow) {
|
||||||
|
this.loadInitData();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'$store.state.runPlan.planSizeCount': function () {
|
||||||
|
this.reSize({ width: this.$store.state.runPlan.width, height: this.$store.state.runPlan.height });
|
||||||
|
},
|
||||||
|
'$store.state.socket.trainStationList': function (val) {
|
||||||
|
if (val.length) {
|
||||||
|
this.updateRunPlanData(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.staticSeries = []; this.selectSeries = []; this.runSeries = []; this.runPlanData = {};
|
||||||
|
this.PlanParser = this.$theme.loadPlanParser(this.$route.query.lineCode);
|
||||||
|
// this.loadChartPage();
|
||||||
|
EventBus.$on('clearRunSeries', () => {
|
||||||
|
this.runSeries = [];
|
||||||
|
});
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
this.$store.dispatch('runPlan/setSelected', null);
|
||||||
|
this.destroy();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
doShow() {
|
||||||
|
try {
|
||||||
|
this.dialogLoading = true;
|
||||||
|
this.dialogShow = true;
|
||||||
|
this.setPosition();
|
||||||
|
this.loadInitData();
|
||||||
|
this.inter && clearInterval(this.inter);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
} finally {
|
||||||
|
this.dialogLoading = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async doClose() {
|
||||||
|
this.dialogShow = false;
|
||||||
|
this.inter && clearInterval(this.inter);
|
||||||
|
},
|
||||||
|
serviceNumberChange(row) {
|
||||||
|
if (row) {
|
||||||
|
this.$store.dispatch('runPlan/setSelected', { serviceNumber: row.serviceNumber, tripNumber: null });
|
||||||
|
this.renderTripNumber({ serviceNumber: row.serviceNumber, tripNumber: null });
|
||||||
|
const serviceObj = this.$store.state.runPlan.editData[row.serviceNumber];
|
||||||
|
if (serviceObj) {
|
||||||
|
this.analyticalTripNumber(serviceObj.trainMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
tripNumberChange(row) {
|
||||||
|
if (row) {
|
||||||
|
this.$store.dispatch('runPlan/setSelected', { serviceNumber: this.$store.state.runPlan.selected.serviceNumber, tripNumber: row.tripNumber });
|
||||||
|
this.renderTripNumber({ serviceNumber: this.$store.state.runPlan.selected.serviceNumber, tripNumber: row.tripNumber });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async analyticalServiceNumber(data) {
|
||||||
|
this.serviceNumberConfig.data = Object.keys(data || {})
|
||||||
|
.sort((a, b) => { return parseInt(data[a].serviceNumber) - parseInt(data[b].serviceNumber); })
|
||||||
|
.map(serviceNumber => { return { serviceNumber }; });
|
||||||
|
},
|
||||||
|
async analyticalTripNumber(data) {
|
||||||
|
this.tripNumberConfig.data = Object.keys(data || {})
|
||||||
|
.sort((a, b) => { return data[a].tripNumber - data[b].tripNumber; })
|
||||||
|
.map(tripNumber => { return { tripNumber }; });
|
||||||
|
},
|
||||||
|
async setPosition() {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
const top = 54;
|
||||||
|
const width = this.maxWidth * 0.85;
|
||||||
|
let height = this.maxHeight;
|
||||||
|
|
||||||
|
height = height - top;
|
||||||
|
this.$store.dispatch('runPlan/resize', { width, height });
|
||||||
|
|
||||||
|
if (this.top != top) {
|
||||||
|
this.top = top;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.height != height) {
|
||||||
|
this.height = height - top;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updateRunPlanData(data) {
|
||||||
|
const stations = this.$store.state.runPlan.stations;
|
||||||
|
data.forEach(item => {
|
||||||
|
item.secondTime = item.second;
|
||||||
|
});
|
||||||
|
this.kmRangeMap = this.PlanParser.convertStationsToMap(stations);
|
||||||
|
this.runSeries = this.PlanParser.updateDataToModels(data, stations, this.kmRangeMap,
|
||||||
|
this.runPlanData, this.runSeries, { color: '#FF00DE', width: 2 }
|
||||||
|
);
|
||||||
|
const series = [...this.staticSeries, ...this.runSeries, ... this.selectSeries];
|
||||||
|
myChart && myChart.setOption({series: series});
|
||||||
|
},
|
||||||
|
async loadChartPage() {
|
||||||
|
try {
|
||||||
|
this.seriesMap = {};
|
||||||
|
this.staticSeries = [];
|
||||||
|
const stations = this.$store.state.runPlan.stations;
|
||||||
|
const planData = this.$store.state.runPlan.planData;
|
||||||
|
this.kmRangeMap = this.PlanParser.convertStationsToMap(stations);
|
||||||
|
if (this.$route.query.lineCode === '07') {
|
||||||
|
this.pushModels(this.staticSeries, [this.PlanParser.initializeAxisX(stations)]);
|
||||||
|
} else {
|
||||||
|
this.pushModels(this.staticSeries, [this.PlanParser.initializeAxisY(stations)]);
|
||||||
|
}
|
||||||
|
this.staticSeries = this.pushModels(this.staticSeries, this.PlanParser.convertDataToModels(planData, stations, this.kmRangeMap, { color: '#000', width: 0.5 }));
|
||||||
|
this.staticSeries.forEach(item => {
|
||||||
|
this.seriesMap[item.name] = item;
|
||||||
|
});
|
||||||
|
await this.analyticalServiceNumber(this.$store.state.runPlan.editData);
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
this.$messageBox(`加载运行图数据失败`);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
async loadInitData() {
|
||||||
|
myChart && myChart.showLoading();
|
||||||
|
const option = {
|
||||||
|
tooltip: {
|
||||||
|
axisPointer: {
|
||||||
|
trigger: 'item',
|
||||||
|
type: 'cross'
|
||||||
|
},
|
||||||
|
formatter: this.axisTooltip,
|
||||||
|
borderWidth: 1
|
||||||
|
},
|
||||||
|
grid: {
|
||||||
|
right: '40px',
|
||||||
|
left: '120px',
|
||||||
|
height: '85%'
|
||||||
|
},
|
||||||
|
xAxis: [
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
data: [],
|
||||||
|
axisLine: {
|
||||||
|
onZero: false,
|
||||||
|
lineStyle: {
|
||||||
|
width: 2,
|
||||||
|
color: '#d14a61'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
formatter: this.xAxisLableFormat,
|
||||||
|
textStyle: {
|
||||||
|
color: '#333'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
axisPointer: {
|
||||||
|
snap: true,
|
||||||
|
label: {
|
||||||
|
formatter: this.xAxisPointFormat,
|
||||||
|
backgroundColor: 'rgb(255,0,0,0.5)',
|
||||||
|
color: 'white'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
yAxis: [
|
||||||
|
{
|
||||||
|
type: 'value',
|
||||||
|
yAxisIndex: 0,
|
||||||
|
splitLine: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
axisTick: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
axisLine: {
|
||||||
|
onZero: false,
|
||||||
|
lineStyle: {
|
||||||
|
width: 2,
|
||||||
|
color: '#d14a61'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
interval: 'auto',
|
||||||
|
formatter: this.yAxisLableFormat
|
||||||
|
},
|
||||||
|
axisPointer: {
|
||||||
|
xAxisIndex: 'all',
|
||||||
|
label: {
|
||||||
|
formatter: this.yAxisPointFormat,
|
||||||
|
backgroundColor: 'rgb(0,100,0,0.5)',
|
||||||
|
color: 'white'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
dataZoom: [{
|
||||||
|
type: 'inside'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
fiterMode: 'filter',
|
||||||
|
handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
|
||||||
|
handleSize: '80%',
|
||||||
|
handleStyle: {
|
||||||
|
color: '#fff',
|
||||||
|
shadowBlur: 3,
|
||||||
|
shadowColor: 'rgba(0, 0, 0, 0.6)',
|
||||||
|
shadowOffsetX: 2,
|
||||||
|
shadowOffsetY: 2
|
||||||
|
},
|
||||||
|
bottom: '20px'
|
||||||
|
}],
|
||||||
|
series: [
|
||||||
|
|
||||||
|
]
|
||||||
|
};
|
||||||
|
const hebXAxis = {
|
||||||
|
type: 'value',
|
||||||
|
splitLine: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
axisTick: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
axisLine: {
|
||||||
|
onZero: false,
|
||||||
|
lineStyle: {
|
||||||
|
width: 2,
|
||||||
|
color: '#d14a61'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
interval: 'auto',
|
||||||
|
formatter: this.yAxisLableFormat
|
||||||
|
},
|
||||||
|
axisPointer: {
|
||||||
|
xAxisIndex: 'all',
|
||||||
|
label: {
|
||||||
|
formatter: this.yAxisPointFormat,
|
||||||
|
backgroundColor: 'rgb(0,100,0,0.5)',
|
||||||
|
color: 'white'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
min: 0,
|
||||||
|
max: 0
|
||||||
|
};
|
||||||
|
const hebYAxis = [
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
boundaryGap: false,
|
||||||
|
data: [],
|
||||||
|
axisLine: {
|
||||||
|
onZero: false,
|
||||||
|
lineStyle: {
|
||||||
|
width: 2,
|
||||||
|
color: '#d14a61'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
formatter: this.xAxisLableFormat,
|
||||||
|
textStyle: {
|
||||||
|
color: '#333'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
axisPointer: {
|
||||||
|
snap: true,
|
||||||
|
label: {
|
||||||
|
formatter: this.xAxisPointFormat,
|
||||||
|
backgroundColor: 'rgb(255,0,0,0.5)',
|
||||||
|
color: 'white'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
const hebDataZoom = [
|
||||||
|
{
|
||||||
|
type: 'inside',
|
||||||
|
yAxisIndex: 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
fiterMode: 'filter',
|
||||||
|
handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
|
||||||
|
handleSize: '80%',
|
||||||
|
yAxisIndex: 0,
|
||||||
|
handleStyle: {
|
||||||
|
color: '#fff',
|
||||||
|
shadowBlur: 3,
|
||||||
|
shadowColor: 'rgba(0, 0, 0, 0.6)',
|
||||||
|
shadowOffsetX: 2,
|
||||||
|
shadowOffsetY: 2
|
||||||
|
},
|
||||||
|
left: '20px'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
if (this.$route.query.lineCode === '07') {
|
||||||
|
option.xAxis = hebXAxis;
|
||||||
|
option.yAxis = hebYAxis;
|
||||||
|
option.dataZoom = hebDataZoom;
|
||||||
|
}
|
||||||
|
await this.xAxisInit(option);
|
||||||
|
await this.yAxisInit(option);
|
||||||
|
await this.loadInitChart(option);
|
||||||
|
myChart && myChart.hideLoading();
|
||||||
|
},
|
||||||
|
pushModels(series, models) {
|
||||||
|
if (models && models.length) {
|
||||||
|
models.forEach(elem => {
|
||||||
|
if (elem) {
|
||||||
|
series.push(elem);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return series;
|
||||||
|
},
|
||||||
|
loadInitChart(option) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
try {
|
||||||
|
this.destroy();
|
||||||
|
let startValue = 3600 + this.PlanParser.getTranslation();
|
||||||
|
const offsetTime = 3600;
|
||||||
|
const initTime = toTimeStamp(formatDuring(this.$store.state.training.initTime));
|
||||||
|
startValue = initTime - this.PlanParser.getTranslation();
|
||||||
|
option.dataZoom[0].startValue = option.dataZoom[1].startValue = startValue - offsetTime;
|
||||||
|
option.dataZoom[0].endValue = option.dataZoom[1].endValue = startValue + offsetTime;
|
||||||
|
option.series = [...this.staticSeries, ...this.runSeries, ...this.selectSeries];
|
||||||
|
myChart = echarts.init(document.getElementById(this.runPlanId));
|
||||||
|
if (myChart) {
|
||||||
|
myChart.setOption(option);
|
||||||
|
this.reSize({ width: this.$store.state.runPlan.width, height: this.$store.state.runPlan.height });
|
||||||
|
myChart.on('click', this.mouseClick);
|
||||||
|
}
|
||||||
|
resolve(true);
|
||||||
|
} catch (error) {
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
xAxisPointFormat(params) {
|
||||||
|
return timeFormat(params.value);
|
||||||
|
},
|
||||||
|
yAxisPointFormat(params) {
|
||||||
|
return this.PlanParser.computedFormatAxisY(this.stations, params);
|
||||||
|
},
|
||||||
|
xAxisLableFormat(value, index) {
|
||||||
|
return timeFormat(value);
|
||||||
|
},
|
||||||
|
yAxisLableFormat(value, index) {
|
||||||
|
return '';
|
||||||
|
},
|
||||||
|
xAxisInit(option) {
|
||||||
|
const list = [];
|
||||||
|
for (var time = 0 + this.PlanParser.getTranslation(); time < 3600 * 24 + this.PlanParser.getTranslation(); time++) {
|
||||||
|
list.push(time);
|
||||||
|
}
|
||||||
|
const startValue = 3600 * 6;
|
||||||
|
const offsetTime = 3600 * 1;
|
||||||
|
|
||||||
|
if (this.$route.query.lineCode === '07') {
|
||||||
|
option.yAxis[0].data = list;
|
||||||
|
} else {
|
||||||
|
option.xAxis[0].data = list;
|
||||||
|
}
|
||||||
|
if (!option.dataZoom[0].startValue) {
|
||||||
|
option.dataZoom[0].startValue = option.dataZoom[1].startValue = startValue - offsetTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!option.dataZoom[0].endValue) {
|
||||||
|
option.dataZoom[0].endValue = option.dataZoom[1].endValue = startValue + offsetTime;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
yAxisInit(option) {
|
||||||
|
if (Object.keys(this.PlanParser).length && this.$route.query.lineCode !== '07') {
|
||||||
|
option.yAxis.min = this.PlanParser.computedAxisYMinValue(this.stations);
|
||||||
|
option.yAxis.max = this.PlanParser.computedAxisYMaxValue(this.stations);
|
||||||
|
} else if (Object.keys(this.PlanParser).length && this.$route.query.lineCode === '07') {
|
||||||
|
option.xAxis.min = this.PlanParser.computedAxisXMinValue(this.stations);
|
||||||
|
option.xAxis.max = this.PlanParser.computedAxisXMaxValue(this.stations);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
axisTooltip(param) {
|
||||||
|
const station = (this.$store.getters['map/getDeviceByCode'](param.data[2])) || { name: '', kmRange: '' };
|
||||||
|
if (this.$route.query.lineCode !== '07') {
|
||||||
|
if (station.name) {
|
||||||
|
return [
|
||||||
|
`Point Data <hr size=1 style=" margin: 3px 0">`,
|
||||||
|
`车站名称: ${station.name}<br>`,
|
||||||
|
`车站公里标: ${station.kmRange} km <br>`,
|
||||||
|
`到站时间: ${timeFormat(param.data[0] + this.PlanParser.getTranslation())} (${param.data[0]})<br>`
|
||||||
|
].join('');
|
||||||
|
} else {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
return [
|
||||||
|
`Point Data <hr size=1 style=" margin: 3px 0">`,
|
||||||
|
`车站名称: ${station.name}<br>`,
|
||||||
|
`车站公里标: ${station.kmRange} km <br>`,
|
||||||
|
`到站时间: ${timeFormat(param.data[1] + this.PlanParser.getTranslation())} (${param.data[1]})<br>`
|
||||||
|
].join('');
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
renderTripNumber(params) {
|
||||||
|
const tripNumber = params.tripNumber; // 车次号
|
||||||
|
const serviceNumber = params.serviceNumber; // 服务号
|
||||||
|
let data, markPoint;
|
||||||
|
if (tripNumber && this.seriesMap[serviceNumber]) {
|
||||||
|
const temp = this.seriesMap[serviceNumber].data.filter(elem => elem[3] == tripNumber);
|
||||||
|
if (temp.length) {
|
||||||
|
data = temp;
|
||||||
|
this.seriesMap[serviceNumber].markPoint.data.forEach(each=> {
|
||||||
|
if (each.name == temp[0][4]) {
|
||||||
|
markPoint = deepAssign({}, {data:[each]});
|
||||||
|
markPoint.symbol = 'roundRect';
|
||||||
|
markPoint.symbolSize = 1;
|
||||||
|
markPoint.data[0].label.color = '#f00';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (this.seriesMap[serviceNumber]) {
|
||||||
|
markPoint = deepAssign({}, this.seriesMap[serviceNumber].markPoint);
|
||||||
|
markPoint.data.forEach((each, index) => {
|
||||||
|
if (each.symbol == 'circle') {
|
||||||
|
markPoint.data.splice(index, 1);
|
||||||
|
} else {
|
||||||
|
each.label.color = '#f00';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
data = this.seriesMap[serviceNumber].data;
|
||||||
|
}
|
||||||
|
this.selectSeries = [{
|
||||||
|
name: 'trainLabel',
|
||||||
|
lineStyle: {
|
||||||
|
color: '#f00',
|
||||||
|
width: 2,
|
||||||
|
type: 'solid'
|
||||||
|
},
|
||||||
|
z: 10,
|
||||||
|
type: 'line',
|
||||||
|
markPoint:markPoint,
|
||||||
|
animation: false,
|
||||||
|
data: data
|
||||||
|
}];
|
||||||
|
const series = [...this.staticSeries, ...this.runSeries, ...this.selectSeries];
|
||||||
|
myChart && myChart.setOption({series: series});
|
||||||
|
},
|
||||||
|
mouseClick(params) {
|
||||||
|
const model = {
|
||||||
|
serviceNumber: params.seriesName
|
||||||
|
};
|
||||||
|
this.$store.dispatch('runPlan/setSelected', model);
|
||||||
|
},
|
||||||
|
reSize(opt) {
|
||||||
|
if (myChart) {
|
||||||
|
myChart.resize({
|
||||||
|
width: opt.width,
|
||||||
|
height: opt.height,
|
||||||
|
silent: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
destroy() {
|
||||||
|
if (myChart && myChart.isDisposed) {
|
||||||
|
myChart.dispose();
|
||||||
|
myChart = null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
scheduleTouch() {
|
||||||
|
|
||||||
|
},
|
||||||
|
trainNumTouch() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style scoped rel="stylesheet/scss" lang="scss">
|
||||||
|
@import "src/styles/mixin.scss";
|
||||||
|
|
||||||
|
#PlanSchedule {
|
||||||
|
z-index: 5;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.left {
|
||||||
|
height: 100%;
|
||||||
|
width: 85%;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
height: 100%;
|
||||||
|
width: 15%;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ {
|
||||||
|
.el-dialog {
|
||||||
|
height: 100%;
|
||||||
|
max-height: 1080px;
|
||||||
|
}
|
||||||
|
.el-dialog__body {
|
||||||
|
padding: 0px !important;
|
||||||
|
background-color: floralwhite !important;
|
||||||
|
}
|
||||||
|
.el-dialog__headerbtn .el-dialog__close {
|
||||||
|
font-size: 18px;
|
||||||
|
border: 1px solid #909399;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -29,10 +29,8 @@
|
|||||||
</el-dialog>
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
// clearSimulation, getSimulationInfoNew, ranAsPlan, exitRunPlan, ,
|
|
||||||
import { getPassengerFlowData, changePassengerFlowData } from '@/api/simulation';
|
import { getPassengerFlowData, changePassengerFlowData } from '@/api/simulation';
|
||||||
import { getToken } from '@/utils/auth';
|
import { getToken } from '@/utils/auth';
|
||||||
// displayTopic,
|
|
||||||
import { creatSubscribe, clearSubscribe, LPFTopic} from '@/utils/stomp';
|
import { creatSubscribe, clearSubscribe, LPFTopic} from '@/utils/stomp';
|
||||||
import { defaultCallback } from '@/utils/subscribeCallback';
|
import { defaultCallback } from '@/utils/subscribeCallback';
|
||||||
export default {
|
export default {
|
@ -4,138 +4,82 @@
|
|||||||
<div class="simulationMenu" @click="showMenuList">菜单</div>
|
<div class="simulationMenu" @click="showMenuList">菜单</div>
|
||||||
<div v-show="isShowMenuList" class="simulationMenuList">
|
<div v-show="isShowMenuList" class="simulationMenuList">
|
||||||
<div v-for="(each, index) in allMenuList" :key="index">
|
<div v-for="(each, index) in allMenuList" :key="index">
|
||||||
<div v-if="each.show" class="eachSimulationMenu" @click="each.click">{{ each.label }}</div>
|
<div v-if="each.show" class="eachSimulationMenu" :class="{'menuDisabled' :each.disabled}" @click="() => { each.disabled? '' : each.click(); }">{{ each.label }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<contect-us ref="contectUs" />
|
<contect-us ref="contectUs" />
|
||||||
<jl3d-device v-if="deviceif" v-show="deviceShow" ref="Jl3dDevice" :panel-show="deviceShow" @closedevice3dview="jlmap3dmodel" />
|
<jl3d-device v-if="deviceif" v-show="deviceShow" ref="Jl3dDevice" :panel-show="deviceShow" @closedevice3dview="jlmap3dmodel" />
|
||||||
<modify-time v-if="simType === 'RAILWAY'" ref="modifySysTime" />
|
|
||||||
<set-time ref="setTime" @ConfirmSelectBeginTime="startSim" />
|
<set-time ref="setTime" @ConfirmSelectBeginTime="startSim" />
|
||||||
<flow-data ref="flowData" />
|
<flow-data ref="flowData" />
|
||||||
<member-manage ref="memberManage" />
|
<member-manage ref="memberManage" />
|
||||||
<register-book ref="registerBook" />
|
|
||||||
<train-ticket ref="trainTicket" />
|
|
||||||
<draw-select ref="drawSelect" />
|
|
||||||
<line-board ref="lineBoard" />
|
|
||||||
<theory-exam-select ref="theoryExamSelect" @startTheoryExam="startTheoryExam" />
|
|
||||||
<theory-exam ref="theoryExam" />
|
|
||||||
<scheduling ref="scheduling" :group="group" />
|
|
||||||
<scheduling-view ref="schedulingView" :group="group" />
|
|
||||||
<run-plan-view ref="runPlanView" :group="group" />
|
|
||||||
<select-exam ref="selectExam" @examStart="examStart" />
|
<select-exam ref="selectExam" @examStart="examStart" />
|
||||||
<exam-panel ref="examPanel" />
|
<exam-panel ref="examPanel" />
|
||||||
<training-tip ref="trainingTip" />
|
<device-manage ref="deviceManage" />
|
||||||
<training-position-tip ref="trainingPositionTip" />
|
<diagram-load ref="diagramLoad" :group="group" />
|
||||||
<training-menu v-if="hasTraining" ref="trainingMenu" :offset-bottom="offsetBottom" />
|
<diagram-preview ref="diagramPreview" />
|
||||||
<training-design v-if="trainingDesignShow" ref="trainingDesign" />
|
<qr-code ref="qrCode" />
|
||||||
<voice-chat-box v-if="hasVoice" :group="group" />
|
|
||||||
<design-training-menu v-if="trainingDesign && trainingDetail" ref="trainingMenu" :offset-bottom="offsetBottom" />
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { getPostByProjectCode } from '@/api/learn';
|
import { clearSimulation, ranAsPlan } from '@/api/simulation';
|
||||||
import { getSessionStorage } from '@/utils/auth';
|
import { getSimulationQrcode } from '@/api/jointSimulation';
|
||||||
import { ProjectCode } from '@/scripts/ProjectConfig';
|
import { initSimulation } from '@/api/rtSimulation';
|
||||||
import ContectUs from './contectUs';
|
import ContectUs from './contectUs';
|
||||||
import ModifyTime from './modifyTime';
|
|
||||||
import FlowData from './flowData';
|
import FlowData from './flowData';
|
||||||
import SetTime from './setTime';
|
import SetTime from './setTime';
|
||||||
import Jl3dDevice from '@/views/jlmap3d/device/jl3ddevice';
|
import Jl3dDevice from '@/views/jlmap3d/device/jl3ddevice';
|
||||||
import { clearSimulation, ranAsPlan } from '@/api/simulation';
|
import MemberManage from '../memberManage/membersManage';
|
||||||
import { Notification } from 'element-ui';
|
import SelectExam from '../exam/selectExam';
|
||||||
import MemberManage from './memberManage/membersManage';
|
import ExamPanel from '../exam/examPanel';
|
||||||
import RegisterBook from '../registerBook/index';
|
|
||||||
import TrainTicket from '../trainTicket/index';
|
|
||||||
import DrawSelect from '@/jmapNew/theme/datie_01/menus/dialog/drawSelect';
|
|
||||||
import LineBoard from '../displayCity/lineBoard';
|
|
||||||
import TheoryExamSelect from './theoryExamSelect';
|
|
||||||
import TheoryExam from './theoryExam';
|
|
||||||
import { initSimulation } from '@/api/rtSimulation';
|
|
||||||
import Scheduling from './scheduling';
|
|
||||||
import SchedulingView from './schedulingView';
|
|
||||||
import RunPlanView from './runPlanView';
|
|
||||||
import SelectExam from './exam/selectExam';
|
|
||||||
import ExamPanel from './exam/examPanel';
|
|
||||||
import TrainingTip from './trainingList/trainingTip.vue';
|
|
||||||
import TrainingPositionTip from './trainingList/trainingPositionTip.vue';
|
|
||||||
import TrainingMenu from './trainingList/trainingMenu';
|
|
||||||
import TrainingDesign from './trainingDesign/designPane.vue';
|
|
||||||
import VoiceChatBox from './voiceChatBox/index';
|
|
||||||
import DesignTrainingMenu from './trainingList/designTrainingMenu';
|
|
||||||
import getErrorTip from '@/scripts/errorTip';
|
import getErrorTip from '@/scripts/errorTip';
|
||||||
|
import DeviceManage from './deviceManage';
|
||||||
|
import QrCode from '@/components/QrCode';
|
||||||
|
import DiagramLoad from './diagramLoad';
|
||||||
|
import DiagramPreview from './diagramPreview';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'SimulationMenu',
|
name: 'SimulationMenu',
|
||||||
components: {
|
components: {
|
||||||
SetTime,
|
SetTime,
|
||||||
ModifyTime,
|
|
||||||
FlowData,
|
FlowData,
|
||||||
RegisterBook,
|
|
||||||
TrainTicket,
|
|
||||||
DrawSelect,
|
|
||||||
LineBoard,
|
|
||||||
TheoryExam,
|
|
||||||
TheoryExamSelect,
|
|
||||||
Scheduling,
|
|
||||||
SchedulingView,
|
|
||||||
RunPlanView,
|
|
||||||
SelectExam,
|
SelectExam,
|
||||||
ExamPanel,
|
ExamPanel,
|
||||||
ContectUs,
|
ContectUs,
|
||||||
Jl3dDevice,
|
Jl3dDevice,
|
||||||
MemberManage,
|
MemberManage,
|
||||||
TrainingTip,
|
DeviceManage,
|
||||||
TrainingPositionTip,
|
QrCode,
|
||||||
TrainingMenu,
|
DiagramPreview,
|
||||||
TrainingDesign,
|
DiagramLoad
|
||||||
VoiceChatBox,
|
|
||||||
DesignTrainingMenu
|
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
isShowMenuList: false,
|
isShowMenuList: false,
|
||||||
menuList: [],
|
menuList: [],
|
||||||
active: -1,
|
active: -1,
|
||||||
offsetBottom: 15,
|
|
||||||
deviceif: false,
|
deviceif: false,
|
||||||
deviceShow: true,
|
deviceShow: true,
|
||||||
hasVoice: false,
|
|
||||||
hasTraining: false,
|
|
||||||
trainingDesign: false,
|
|
||||||
allMenuList: [
|
allMenuList: [
|
||||||
{ label: '设备视图', name: 'jlmap3dmodel', click: this.jlmap3dmodel, isShow: () => { return true; } },
|
{ label: '设备视图', name: 'jlmap3dmodel', click: this.jlmap3dmodel, isDisabled: () => { return false; }, isShow: () => { return true; } },
|
||||||
{ label: '修改系统时间', name: 'drivingPlan', click: this.drivingPlan, isShow: () => { return this.$route.query.simType === 'RAILWAY'; } },
|
{ label: '设备管理', name: 'deviceManage', click: this.deviceManage, isDisabled: () => { return false; }, isShow: () => { return this.$store.state.training.domConfig.hasDeviceManage; } },
|
||||||
{ label: '按计划行车', name: 'modifySysTime', click: this.modifySysTime, isShow: () => { return this.$route.query.simType === 'METRO'; } },
|
{ label: '联系方式', name: 'contectUs', click: this.contectUs, isDisabled: () => { return false; }, isShow: () => { return true; } },
|
||||||
{ label: '初始化', name: 'initialize', click: this.initializeSim, isShow: () => { return !this.$store.state.trainingNew.trainingSwitch; } },
|
{ label: '生成二维码', name: 'generateQrCode', click: this.generateQrCode, isDisabled: () => { return false; }, isShow: () => { return this.$store.state.training.domConfig.isJoint; } },
|
||||||
{ label: '考试', name: 'exam', click: this.goExam, isShow: () => { return this.$store.state.training.domConfig.hasExam; } },
|
{ label: '切换客流数据', name: 'changeFlowData', click: this.changeFlowData, isDisabled: () => { return false; }, isShow: () => { return this.$store.state.training.domConfig.hasLpf; } },
|
||||||
{ label: '联系方式', name: 'contectUs', click: this.contectUs, isShow: () => { return true; } },
|
{ label: '运行图加载', name: 'diagramLoad', click: this.diagramLoad, isDisabled: () => { return false; }, isShow: ()=>{ return this.$route.query.simType === 'METRO'; } },
|
||||||
{ label: '成员管理', name: 'memberManage', click: this.memberManage, isShow: () => { return true; } },
|
{ label: '运行图预览', name: 'diagramPreview', click: this.diagramPreview, isDisabled: () => { return false; }, isShow: ()=>{ return this.$route.query.simType === 'METRO'; } },
|
||||||
{ label: '切换客流数据', name: 'changeFlowData', click: this.changeFlowData, isShow: () => { return this.$store.state.training.domConfig.hasLpf; } },
|
{ label: '成员管理', name: 'memberManage', click: this.memberManage, isDisabled: () => { return false; }, isShow: () => { return !this.$store.state.training.domConfig.singleMember; } },
|
||||||
{ label: '留言板', name: 'messageBoard', click: this.messageBoard, isShow: async () => { const resp = await getPostByProjectCode(ProjectCode[this.project]); return resp.data; } },
|
{ label: '考试', name: 'exam', click: this.goExam, isDisabled: () => { return false; }, isShow: () => { return this.$store.state.training.domConfig.hasExam; } },
|
||||||
{ label: '退出', name: 'quit', click: this.exitSim, isShow: () => { return this.$route.query.projectDevice; } },
|
{ label: '按计划行车', name: 'drivingPlan', click: this.drivingPlan, isDisabled: () => { return this.$store.state.trainingNew.trainingSwitch; }, isShow: () => { return true; } },
|
||||||
{ label: '返回', name: 'back', click: this.backSim, isShow: () => { return !this.$route.query.projectDevice; } }
|
{ label: '初始化', name: 'initialize', click: this.initializeSim, isDisabled: () => { return this.$store.state.trainingNew.trainingSwitch; }, isShow: () => { return true; } },
|
||||||
|
{ label: '退出', name: 'quit', click: this.exitSim, isDisabled: () => { return false; }, isShow: () => { return true; } }
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
// 当前的所属项目
|
|
||||||
project() {
|
|
||||||
return getSessionStorage('project');
|
|
||||||
},
|
|
||||||
isLocal() {
|
|
||||||
// 是否为本地项目
|
|
||||||
return process.env.VUE_APP_PRO === 'local';
|
|
||||||
},
|
|
||||||
// 线路类型
|
|
||||||
lineCode() {
|
|
||||||
return this.$route.query.lineCode;
|
|
||||||
},
|
|
||||||
// 仿真group
|
|
||||||
group() {
|
group() {
|
||||||
return this.$route.query.group;
|
return this.$route.query.group;
|
||||||
},
|
},
|
||||||
// 设备数据
|
|
||||||
projectDevice() {
|
projectDevice() {
|
||||||
return this.$route.query.projectDevice;
|
return this.$route.query.projectDevice;
|
||||||
},
|
},
|
||||||
@ -144,15 +88,46 @@ export default {
|
|||||||
},
|
},
|
||||||
mapId() {
|
mapId() {
|
||||||
return this.$route.query.mapId;
|
return this.$route.query.mapId;
|
||||||
},
|
|
||||||
trainingDetail() {
|
|
||||||
return this.$store.state.trainingNew.trainingDetail;
|
|
||||||
},
|
|
||||||
trainingDesignShow() {
|
|
||||||
return this.$store.state.training.domConfig.trainingDesign || false;
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
mounted() {
|
||||||
|
window.addEventListener('click', this.close, false);
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
window.removeEventListener('click', this.close);
|
||||||
|
this.$store.dispatch('socket/clearTrainingOverCount');
|
||||||
|
this.$store.dispatch('trainingNew/clearStepOverCount');
|
||||||
|
this.$store.dispatch('trainingNew/trainingEnd');
|
||||||
|
this.$store.dispatch('trainingNew/changeTeachMode', '');
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
diagramLoad() {
|
||||||
|
this.hideMenuList();
|
||||||
|
this.$refs.diagramLoad.doShow();
|
||||||
|
},
|
||||||
|
diagramPreview() {
|
||||||
|
this.hideMenuList();
|
||||||
|
this.$refs.diagramPreview.doShow();
|
||||||
|
},
|
||||||
|
generateQrCode() {
|
||||||
|
this.hideMenuList();
|
||||||
|
getSimulationQrcode(this.$route.query.group).then(resp => {
|
||||||
|
const param = {
|
||||||
|
url: resp.data,
|
||||||
|
title: this.$t('综合演练二维码'),
|
||||||
|
group: this.$route.query.group
|
||||||
|
};
|
||||||
|
if (this.$refs) {
|
||||||
|
this.$refs.qrCode.doShow(param);
|
||||||
|
}
|
||||||
|
}).catch(() => {
|
||||||
|
this.$messageBox('仿真生成二维码失败!');
|
||||||
|
});
|
||||||
|
},
|
||||||
|
deviceManage() {
|
||||||
|
this.hideMenuList();
|
||||||
|
this.$refs.deviceManage.doShow();
|
||||||
|
},
|
||||||
showMenuList(event) {
|
showMenuList(event) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
this.isShowMenuList = !this.isShowMenuList;
|
this.isShowMenuList = !this.isShowMenuList;
|
||||||
@ -167,10 +142,6 @@ export default {
|
|||||||
this.isShowMenuList = false;
|
this.isShowMenuList = false;
|
||||||
this.active = -1;
|
this.active = -1;
|
||||||
},
|
},
|
||||||
// 开始理论考试
|
|
||||||
startTheoryExam(mode) {
|
|
||||||
this.$refs.theoryExam.doShow(mode);
|
|
||||||
},
|
|
||||||
startSim(model) {
|
startSim(model) {
|
||||||
// 开始仿真
|
// 开始仿真
|
||||||
this.hideMenuList();
|
this.hideMenuList();
|
||||||
@ -186,16 +157,11 @@ export default {
|
|||||||
this.$refs.examPanel.init(data);
|
this.$refs.examPanel.init(data);
|
||||||
},
|
},
|
||||||
jlmap3dmodel() {
|
jlmap3dmodel() {
|
||||||
|
this.hideMenuList();
|
||||||
if (this.deviceif == false) {
|
if (this.deviceif == false) {
|
||||||
this.hideMenuList();
|
|
||||||
this.deviceif = true;
|
this.deviceif = true;
|
||||||
} else {
|
} else {
|
||||||
if (this.deviceShow == false) {
|
this.deviceShow = !this.deviceShow;
|
||||||
this.hideMenuList();
|
|
||||||
this.deviceShow = true;
|
|
||||||
} else {
|
|
||||||
this.deviceShow = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 登出
|
// 登出
|
||||||
@ -206,22 +172,6 @@ export default {
|
|||||||
},
|
},
|
||||||
// 返回或者退出
|
// 返回或者退出
|
||||||
exitSim() {
|
exitSim() {
|
||||||
this.hideMenuList();
|
|
||||||
this.$confirm('是否退出仿真?', '提 示', {
|
|
||||||
confirmButtonText: '确 定',
|
|
||||||
cancelButtonText: '取 消',
|
|
||||||
type: 'warning'
|
|
||||||
}).then(() => {
|
|
||||||
if (this.$route.query.type === 'IM') {
|
|
||||||
clearSimulation(this.group).then(() => {
|
|
||||||
this.logout();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
this.logout();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
backSim() {
|
|
||||||
this.hideMenuList();
|
this.hideMenuList();
|
||||||
this.$confirm('是否退出仿真?', '提 示', {
|
this.$confirm('是否退出仿真?', '提 示', {
|
||||||
confirmButtonText: '确 定',
|
confirmButtonText: '确 定',
|
||||||
@ -229,14 +179,13 @@ export default {
|
|||||||
type: 'warning'
|
type: 'warning'
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
if (this.projectDevice && this.$route.query.type === 'IM') {
|
if (this.projectDevice && this.$route.query.type === 'IM') {
|
||||||
clearSimulation(this.group).then(res => {
|
clearSimulation(this.group).then(() => {
|
||||||
this.logout();
|
this.logout();
|
||||||
});
|
});
|
||||||
} else if (this.projectDevice) {
|
} else if (this.projectDevice) {
|
||||||
this.logout();
|
this.logout();
|
||||||
} else {
|
} else {
|
||||||
history.go(-1);
|
this.$router.go(-1);
|
||||||
Notification.closeAll();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -279,22 +228,75 @@ export default {
|
|||||||
this.hideMenuList();
|
this.hideMenuList();
|
||||||
this.$refs.flowData.doShow();
|
this.$refs.flowData.doShow();
|
||||||
},
|
},
|
||||||
messageBoard() {
|
handleMenuShow() {
|
||||||
this.hideMenuList();
|
this.allMenuList.forEach(item => {
|
||||||
const routeData = this.$router.resolve({
|
item.show = item.isShow();
|
||||||
path: '/messageBoard',
|
item.disabled = item.isDisabled();
|
||||||
query: {
|
|
||||||
project: this.project,
|
|
||||||
noPreLogout: true
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
window.open(routeData.href, '_blank');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style lang="scss" scoped>
|
||||||
|
.allSimulationMenu {
|
||||||
|
position: absolute;
|
||||||
|
// width: 200px;
|
||||||
|
height: 200px;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 2009;
|
||||||
|
}
|
||||||
|
.simulationMenu {
|
||||||
|
position: absolute;
|
||||||
|
width: 60px;
|
||||||
|
right: 10px;
|
||||||
|
padding: 9px 0;
|
||||||
|
background: #fff;
|
||||||
|
text-align: center;
|
||||||
|
bottom: 10px;
|
||||||
|
border-radius: 2px;
|
||||||
|
font-size: 14px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.simulationMenuList {
|
||||||
|
position: absolute;
|
||||||
|
right: 71px;
|
||||||
|
width: 95px;
|
||||||
|
bottom: 10px;
|
||||||
|
background: #fff;
|
||||||
|
// min-height: 100px;
|
||||||
|
border-radius: 2px;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
.eachSimulationMenu {
|
||||||
|
padding: 9px 0;
|
||||||
|
// border-bottom:1px #dedede solid;
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
white-space: nowrap;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
.eachSimulationMenu:hover {
|
||||||
|
background: #dedede;
|
||||||
|
}
|
||||||
|
.menuDisabled {
|
||||||
|
background: #ccc !important;
|
||||||
|
color: #5B6163;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
.simulationMenuGroup {
|
||||||
|
position: absolute;
|
||||||
|
right: 96px;
|
||||||
|
top: 0px;
|
||||||
|
background: #fff;
|
||||||
|
display: inline-block;
|
||||||
|
border-radius: 4px;
|
||||||
|
width: 95px;
|
||||||
|
border-right: 1px #000 solid;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
@ -193,6 +193,7 @@ export default {
|
|||||||
let series = [];
|
let series = [];
|
||||||
const stations = this.$store.state.runPlan.stations;
|
const stations = this.$store.state.runPlan.stations;
|
||||||
const planData = this.$store.state.runPlan.planData;
|
const planData = this.$store.state.runPlan.planData;
|
||||||
|
console.log(stations, planData, '-----------');
|
||||||
this.kmRangeMap = this.PlanParser.convertStationsToMap(stations);
|
this.kmRangeMap = this.PlanParser.convertStationsToMap(stations);
|
||||||
if (this.$route.query.lineCode === '07') {
|
if (this.$route.query.lineCode === '07') {
|
||||||
series = this.pushModels(series, [this.PlanParser.initializeAxisX(stations)]);
|
series = this.pushModels(series, [this.PlanParser.initializeAxisX(stations)]);
|
||||||
|
@ -150,13 +150,16 @@ export default {
|
|||||||
lpfDataList: [],
|
lpfDataList: [],
|
||||||
frontTableData: [
|
frontTableData: [
|
||||||
{ key: 'singleMember', label: '是否单角色', value: false, type: 'checkbox' },
|
{ key: 'singleMember', label: '是否单角色', value: false, type: 'checkbox' },
|
||||||
|
{ key: 'singleRoleType', label: '是否单类型角色', value: false, type: 'checkbox' },
|
||||||
{ key: 'singleClient', label: '是否单客户端', value: false, type: 'checkbox' },
|
{ key: 'singleClient', label: '是否单客户端', value: false, type: 'checkbox' },
|
||||||
{ key: 'client', label: '初始客户端', value: '', type: 'select', optionList: clientList},
|
{ key: 'client', label: '初始客户端', value: '', type: 'select', optionList: clientList},
|
||||||
{ key: 'hasTraining', label: '是否有实训', value: false, type: 'checkbox'},
|
{ key: 'hasTraining', label: '是否有实训', value: false, type: 'checkbox'},
|
||||||
{ key: 'hasExam', label: '是否有考试', value: false, type: 'checkbox' },
|
{ key: 'hasExam', label: '是否有考试', value: false, type: 'checkbox' },
|
||||||
{ key: 'trainingDesign', label: '是否实训设计', value: false, type: 'checkbox' },
|
{ key: 'trainingDesign', label: '是否实训设计', value: false, type: 'checkbox' },
|
||||||
{ key: 'hasLpf', label: '是否有大客流', value: false, type: 'checkbox' },
|
{ key: 'hasLpf', label: '是否有大客流', value: false, type: 'checkbox' },
|
||||||
{ key: 'hasVoice', label: '是否有语音指令', value: false, type: 'checkbox' }
|
{ key: 'hasVoice', label: '是否有语音指令', value: false, type: 'checkbox' },
|
||||||
|
{ key: 'isJoint', label: '是否综合演练', value: false, type: 'checkbox' },
|
||||||
|
{ key: 'hasDeviceManage', label: '是否有设备管理', value: false, type: 'checkbox' }
|
||||||
],
|
],
|
||||||
endTableData: [
|
endTableData: [
|
||||||
{ key: 'DEFAULT_MEMBER', label: '默认仿真成员', value: '', type: 'select', optionList: [] },
|
{ key: 'DEFAULT_MEMBER', label: '默认仿真成员', value: '', type: 'select', optionList: [] },
|
||||||
|
Loading…
Reference in New Issue
Block a user