2019-07-26 13:32:43 +08:00
|
|
|
<template>
|
2019-08-02 10:36:17 +08:00
|
|
|
<div id="PlanMenuBar">
|
2019-10-08 14:12:53 +08:00
|
|
|
<div class="nav" style="height:45px;">
|
2019-08-02 10:36:17 +08:00
|
|
|
<template v-for="(item,i) in menus">
|
|
|
|
<template v-if="noShowingChildren(item.children)">
|
2019-10-08 14:12:53 +08:00
|
|
|
<li :key="i" class="nav-li" @click="hookClick(item)" v-if="isNotUser">
|
2019-08-02 10:36:17 +08:00
|
|
|
<span class="nav-li-text">{{ item.title }}</span>
|
|
|
|
</li>
|
|
|
|
</template>
|
2019-10-08 14:12:53 +08:00
|
|
|
<template v-else >
|
|
|
|
<li :key="i" class="nav-li" :class="{'menu_active' :i==classA}" @click.stop="popupMenuA(item, i)" v-if="isNotUser">
|
2019-08-02 10:36:17 +08:00
|
|
|
<span class="nav-li-text">{{ item.title }}</span>
|
|
|
|
<ul class="nav-ul" :class="{'active' :i==classA}">
|
|
|
|
<template v-for="(child,j) in item.children">
|
|
|
|
<template
|
|
|
|
v-if="child.children&&child.children.length>0&&hasShowingChildren(child.children)"
|
|
|
|
>
|
2019-08-08 13:36:53 +08:00
|
|
|
<li v-if="child.type === 'separator'" :key="j" class="menu-separator">
|
2019-08-02 10:36:17 +08:00
|
|
|
<span class="separator"> </span>
|
|
|
|
</li>
|
2019-08-08 13:36:53 +08:00
|
|
|
<li v-else-if="child.type === 'file'" :key="j" class="menu-li">
|
2019-08-02 10:36:17 +08:00
|
|
|
<div class="menu-li-block" :disabled="child.disabled">
|
|
|
|
<span class="menu-li-text">
|
|
|
|
<el-button type="text" class="button" :disabled="child.disabled">
|
|
|
|
<input
|
|
|
|
:ref="child.label"
|
|
|
|
type="file"
|
|
|
|
accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
|
|
|
|
@change="openLoadFile(child)"
|
|
|
|
>
|
|
|
|
<span> {{ child.title }}</span>
|
|
|
|
</el-button>
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
</li>
|
2019-08-08 13:36:53 +08:00
|
|
|
<li v-else :key="j" class="menu-li" @click.stop="popupMenuB(child, j)">
|
2019-08-02 10:36:17 +08:00
|
|
|
<div class="menu-li-block" :disabled="child.disabled">
|
|
|
|
<span class="menu-li-text">
|
|
|
|
<span class="label">{{ child.title }}</span>
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
<ul class="menu-ul" :class="{'active' :j==classB}">
|
|
|
|
<template v-for="(grandchild,k) in child.children">
|
2019-08-08 13:36:53 +08:00
|
|
|
<li v-if="grandchild.type === 'separator'" :key="k" class="menu-separator">
|
2019-08-02 10:36:17 +08:00
|
|
|
<span class="separator"> </span>
|
|
|
|
</li>
|
2019-08-08 13:36:53 +08:00
|
|
|
<li v-else-if="grandchild.type === 'file'" :key="k" class="menu-li">
|
2019-08-02 10:36:17 +08:00
|
|
|
<div class="menu-li-block" :disabled="grandchild.disabled">
|
|
|
|
<span class="menu-li-text">
|
|
|
|
<el-button
|
|
|
|
type="text"
|
|
|
|
class="button"
|
|
|
|
:disabled="grandchild.disabled"
|
|
|
|
>
|
|
|
|
<input
|
|
|
|
:ref="grandchild.label"
|
|
|
|
type="file"
|
|
|
|
accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
|
|
|
|
@change="openLoadFile(grandchild)"
|
|
|
|
>
|
|
|
|
<span> {{ grandchild.title }}</span>
|
|
|
|
</el-button>
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
</li>
|
2019-08-08 13:36:53 +08:00
|
|
|
<li v-else :key="k" class="menu-li" @click.stop="hookClick(grandchild)">
|
2019-08-02 10:36:17 +08:00
|
|
|
<div class="menu-li-block" :disabled="grandchild.disabled">
|
|
|
|
<span class="menu-li-text">
|
|
|
|
<span class="label">{{ grandchild.title }}</span>
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
</li>
|
|
|
|
</template>
|
|
|
|
</ul>
|
|
|
|
</li>
|
2019-07-26 13:32:43 +08:00
|
|
|
</template>
|
|
|
|
<template v-else>
|
2019-08-08 13:36:53 +08:00
|
|
|
<li v-if="child.type === 'separator'" :key="j" class="menu-separator">
|
2019-08-02 10:36:17 +08:00
|
|
|
<span class="separator"> </span>
|
|
|
|
</li>
|
2019-08-08 13:36:53 +08:00
|
|
|
<li v-else-if="child.type === 'file'" :key="j" class="menu-li">
|
2019-08-02 10:36:17 +08:00
|
|
|
<div class="menu-li-block" :disabled="child.disabled">
|
|
|
|
<span class="menu-li-text">
|
|
|
|
<el-button type="text" class="button" :disabled="child.disabled">
|
|
|
|
<input
|
|
|
|
:ref="child.title"
|
|
|
|
type="file"
|
|
|
|
accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
|
|
|
|
@change="openLoadFile(child)"
|
|
|
|
>
|
|
|
|
<span> {{ child.title }}</span>
|
|
|
|
</el-button>
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
</li>
|
2019-08-08 13:36:53 +08:00
|
|
|
<li v-else :key="j" class="menu-li" @click.stop="hookClick(child)">
|
2019-08-02 10:36:17 +08:00
|
|
|
<div class="menu-li-block" :disabled="child.disabled">
|
|
|
|
<span class="menu-li-text">
|
|
|
|
<span class="label">{{ child.title }}</span>
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
</li>
|
2019-07-26 13:32:43 +08:00
|
|
|
</template>
|
2019-08-02 10:36:17 +08:00
|
|
|
</template>
|
|
|
|
</ul>
|
|
|
|
</li>
|
|
|
|
</template>
|
|
|
|
</template>
|
2019-08-13 15:54:26 +08:00
|
|
|
<div class="nav-li" style="position: absolute; right: 10px;" @click="back">
|
2019-09-19 17:28:31 +08:00
|
|
|
<span class="nav-li-text">{{ $t('global.back') }}</span>
|
2019-08-13 15:54:26 +08:00
|
|
|
</div>
|
2019-07-26 13:32:43 +08:00
|
|
|
</div>
|
2019-08-02 10:36:17 +08:00
|
|
|
</div>
|
2019-07-26 13:32:43 +08:00
|
|
|
</template>
|
|
|
|
<script>
|
2019-08-02 10:36:17 +08:00
|
|
|
import XLSX from 'xlsx';
|
|
|
|
import { mapGetters } from 'vuex';
|
|
|
|
import { importRunPlan, planEffectiveCheck, runPlanNotify } from '@/api/runplan';
|
|
|
|
import { launchFullscreen } from '@/utils/screen';
|
|
|
|
import { UrlConfig } from '@/router/index';
|
2019-08-02 10:58:28 +08:00
|
|
|
import { EventBus } from '@/scripts/event-bus';
|
2019-07-26 13:32:43 +08:00
|
|
|
|
2019-08-02 10:36:17 +08:00
|
|
|
export default {
|
|
|
|
name: 'PlanMenuBar',
|
|
|
|
props: {
|
2019-09-04 11:28:24 +08:00
|
|
|
// skinCode: {
|
|
|
|
// type: String,
|
|
|
|
// default: ''
|
|
|
|
// },
|
2019-08-02 10:36:17 +08:00
|
|
|
planConvert: {
|
|
|
|
type: Object,
|
2019-08-29 17:16:33 +08:00
|
|
|
default: function() {
|
|
|
|
return { };
|
|
|
|
}
|
2019-08-02 10:36:17 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
data() {
|
|
|
|
return {
|
2019-10-25 18:30:23 +08:00
|
|
|
isNotUser: true,
|
2019-08-02 10:36:17 +08:00
|
|
|
classA: -1,
|
|
|
|
classB: -1,
|
|
|
|
tempClassA: -1,
|
|
|
|
tempClassB: -1,
|
|
|
|
menus: [],
|
2019-09-04 11:28:24 +08:00
|
|
|
loading: null,
|
2019-08-02 10:36:17 +08:00
|
|
|
menuBase: [
|
|
|
|
{
|
2019-09-19 14:14:49 +08:00
|
|
|
title: this.$t('planMonitor.file'),
|
2019-08-02 10:36:17 +08:00
|
|
|
children: [
|
2019-09-30 18:11:31 +08:00
|
|
|
// {
|
|
|
|
// title: this.$t('planMonitor.openRunningDiagram'),
|
|
|
|
// click: this.handleOpenRunPlan
|
|
|
|
// },
|
2019-09-04 14:47:52 +08:00
|
|
|
// {
|
|
|
|
// type: 'file',
|
|
|
|
// title: '导入运行图',
|
|
|
|
// click: this.handleImportRunPlan
|
|
|
|
// },
|
2019-09-30 18:11:31 +08:00
|
|
|
// {
|
|
|
|
// title: this.$t('planMonitor.createRunningDiagram'),
|
|
|
|
// click: this.handleCreateEmptyPlan
|
|
|
|
// },
|
2019-09-19 17:22:48 +08:00
|
|
|
// {
|
|
|
|
// title: '修改运行图名称',
|
|
|
|
// click: this.handleEditPlan
|
|
|
|
// },
|
2019-08-02 10:36:17 +08:00
|
|
|
{
|
2019-09-19 14:14:49 +08:00
|
|
|
title: this.$t('planMonitor.modifyStationIntervalTime'),
|
2019-08-02 10:36:17 +08:00
|
|
|
click: this.handleModifyingStationIntervalTime
|
|
|
|
// disabledCallback: () => { return !this.$route.query.planId },
|
|
|
|
}
|
2019-09-19 17:22:48 +08:00
|
|
|
// {
|
|
|
|
// title: '删除运行图',
|
|
|
|
// click: this.handledeleteRunPlan
|
|
|
|
// }
|
2019-08-02 10:36:17 +08:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
2019-09-19 14:14:49 +08:00
|
|
|
title: this.$t('planMonitor.view'),
|
2019-08-02 10:36:17 +08:00
|
|
|
children: [
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
2019-09-19 14:14:49 +08:00
|
|
|
title: this.$t('planMonitor.tool'),
|
2019-08-02 10:36:17 +08:00
|
|
|
children: [
|
|
|
|
// {
|
|
|
|
// title: '自动生成',
|
|
|
|
// click: this.handleAutoGenerate,
|
|
|
|
// },
|
|
|
|
{
|
2019-09-19 14:14:49 +08:00
|
|
|
title: this.$t('planMonitor.validityCheck'),
|
2019-08-02 10:36:17 +08:00
|
|
|
click: this.handlePlanEffectiveCheck
|
|
|
|
},
|
|
|
|
{
|
2019-09-19 14:14:49 +08:00
|
|
|
title: this.$t('planMonitor.testRunningDiagram'),
|
2019-08-02 10:36:17 +08:00
|
|
|
click: this.handleTestRunPlan
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
2019-09-19 14:14:49 +08:00
|
|
|
title: this.$t('planMonitor.modify'),
|
2019-08-02 10:36:17 +08:00
|
|
|
children: [
|
|
|
|
// {
|
|
|
|
// title: '计划参数',
|
|
|
|
// click: this.handleParameter,
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// title: '打印参数',
|
|
|
|
// click: this.undeveloped,
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// type: 'separator'
|
|
|
|
// },
|
|
|
|
{
|
2019-09-19 14:14:49 +08:00
|
|
|
title: this.$t('planMonitor.addPlan'),
|
2019-08-02 10:36:17 +08:00
|
|
|
click: this.handleAddPlanningTrain
|
|
|
|
},
|
|
|
|
{
|
2019-09-19 14:14:49 +08:00
|
|
|
title: this.$t('planMonitor.deletePlan'),
|
2019-08-02 10:36:17 +08:00
|
|
|
click: this.handleDeletePlanningTrain
|
|
|
|
},
|
|
|
|
// {
|
|
|
|
// title: '修改计划',
|
|
|
|
// click: this.handleEditPlanningTrain,
|
|
|
|
// },
|
|
|
|
{
|
2019-09-19 14:14:49 +08:00
|
|
|
title: this.$t('planMonitor.duplicatePlan'),
|
2019-08-02 10:36:17 +08:00
|
|
|
click: this.handleDuplicateTrain
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: 'separator'
|
|
|
|
},
|
|
|
|
{
|
2019-09-19 14:14:49 +08:00
|
|
|
title: this.$t('planMonitor.addTask'),
|
2019-08-02 10:36:17 +08:00
|
|
|
click: this.handleAddTask
|
|
|
|
},
|
|
|
|
{
|
2019-09-19 14:14:49 +08:00
|
|
|
title: this.$t('planMonitor.deleteTask'),
|
2019-08-02 10:36:17 +08:00
|
|
|
click: this.handleDeleteTask
|
|
|
|
},
|
|
|
|
{
|
2019-09-19 14:14:49 +08:00
|
|
|
title: this.$t('planMonitor.modifyTask'),
|
2019-08-02 10:36:17 +08:00
|
|
|
click: this.handleModifyingTask
|
|
|
|
}
|
|
|
|
// {
|
|
|
|
// type: 'separator'
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// title: '修改交路',
|
|
|
|
// click: this.handleModifyingRouting,
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// title: '修改开始时间',
|
|
|
|
// click: this.handleModifyingStartTime,
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// title: '快速增加任务',
|
|
|
|
// click: this.undeveloped,
|
|
|
|
// }
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
2019-09-19 14:14:49 +08:00
|
|
|
title: this.$t('planMonitor.option'),
|
2019-08-02 10:36:17 +08:00
|
|
|
children: [
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
2019-09-19 14:14:49 +08:00
|
|
|
title: this.$t('planMonitor.help'),
|
2019-08-02 10:36:17 +08:00
|
|
|
children: [
|
|
|
|
]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
};
|
|
|
|
},
|
2019-10-08 14:12:53 +08:00
|
|
|
created(){
|
|
|
|
if(/^\/plan\/usertool/.test(this.$route.fullPath)){
|
|
|
|
this.isNotUser=false;
|
|
|
|
}else{
|
|
|
|
this.isNotUser=true;
|
|
|
|
}
|
2019-10-17 10:13:08 +08:00
|
|
|
|
2019-10-08 14:12:53 +08:00
|
|
|
},
|
2019-08-02 10:36:17 +08:00
|
|
|
computed: {
|
|
|
|
...mapGetters('training', [
|
|
|
|
'mode'
|
|
|
|
]),
|
|
|
|
...mapGetters('map', [
|
|
|
|
'stationList'
|
|
|
|
])
|
|
|
|
},
|
|
|
|
watch: {
|
|
|
|
tempClassA() {
|
|
|
|
this.classA = this.$store.state.menuOperation.break ? -1 : this.tempClassA;
|
|
|
|
},
|
|
|
|
tempClassB() {
|
|
|
|
this.classB = this.$store.state.menuOperation.break ? -1 : this.tempClassB;
|
|
|
|
},
|
|
|
|
'$store.state.menuOperation.break': function (val) {
|
|
|
|
if (val) {
|
|
|
|
this.classA = this.classB = -1;
|
|
|
|
} else {
|
|
|
|
this.classA = this.tempClassA;
|
|
|
|
this.classB = this.tempClassB;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'$route.query.planId': function () {
|
|
|
|
this.menus = this.menuConvert(this.menuBase);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
mounted() {
|
|
|
|
this.initMenu();
|
|
|
|
},
|
|
|
|
methods: {
|
2019-08-13 15:54:26 +08:00
|
|
|
back() {
|
2019-09-30 18:11:31 +08:00
|
|
|
// this.$router.push({ path: `${UrlConfig.plan.detail}/${this.$route.query.mapId}` });
|
|
|
|
this.$router.go(-1);
|
2019-08-13 15:54:26 +08:00
|
|
|
},
|
2019-08-02 10:36:17 +08:00
|
|
|
menuConvert(menuBase) {
|
|
|
|
const menus = [];
|
|
|
|
menuBase.forEach(elem => {
|
|
|
|
const item = {};
|
|
|
|
Object.keys(elem).forEach(key => {
|
|
|
|
if (key == 'disabledCallback') {
|
|
|
|
item['disabled'] = elem.disabledCallback();
|
|
|
|
} else if (key != 'children') {
|
|
|
|
item[key] = elem[key];
|
|
|
|
} else {
|
|
|
|
item.children = this.menuConvert(elem.children || []);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
menus.push(item);
|
|
|
|
});
|
2019-07-26 13:32:43 +08:00
|
|
|
|
2019-08-02 10:36:17 +08:00
|
|
|
return menus;
|
|
|
|
},
|
|
|
|
initMenu() {
|
|
|
|
this.menus = this.menuConvert(this.menuBase);
|
|
|
|
this.clickEvent();
|
|
|
|
this.closeMenu();
|
|
|
|
},
|
|
|
|
clickEvent() {
|
|
|
|
const self = this;
|
|
|
|
window.onclick = function (e) {
|
|
|
|
self.closeMenu(false);
|
|
|
|
};
|
|
|
|
},
|
|
|
|
noShowingChildren(children) {
|
|
|
|
if (!children || children.length <= 0) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
},
|
|
|
|
hasShowingChildren(children) {
|
|
|
|
if (children && children.length > 0) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
},
|
|
|
|
closeMenu() {
|
|
|
|
this.classA = this.tempClassA = -1;
|
|
|
|
this.classB = this.tempClassB = -1;
|
|
|
|
},
|
|
|
|
hookClick(item, event) {
|
|
|
|
this.closeMenu();
|
|
|
|
// launchFullscreen();
|
|
|
|
if (!item.disabled) {
|
|
|
|
setTimeout(() => {
|
|
|
|
if (item && typeof item.click == 'function') {
|
|
|
|
item.click();
|
|
|
|
}
|
|
|
|
}, 500);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
popupMenuA(item, index) {
|
|
|
|
this.clickEvent();
|
|
|
|
this.tempClassA = index;
|
|
|
|
this.tempClassB = -1;
|
|
|
|
},
|
|
|
|
popupMenuB(item, index) {
|
|
|
|
this.tempClassB = index;
|
|
|
|
},
|
|
|
|
openLoadFile(item) {
|
|
|
|
const obj = this.$refs[item.title][0];
|
|
|
|
if (obj.files) {
|
|
|
|
const file = obj.files[0];
|
|
|
|
item.click(file);
|
|
|
|
obj.value = '';
|
|
|
|
}
|
|
|
|
},
|
|
|
|
doClose() {
|
|
|
|
this.$nextTick(() => {
|
|
|
|
EventBus.$emit('closeMenu');
|
|
|
|
});
|
|
|
|
},
|
|
|
|
// 刷新
|
|
|
|
refresh() {
|
|
|
|
this.closeMenu(true);
|
|
|
|
EventBus.$emit('refresh');
|
|
|
|
},
|
|
|
|
undeveloped() {
|
|
|
|
this.doClose();
|
2019-09-19 14:14:49 +08:00
|
|
|
this.$alert( this.$t('planMonitor.implemented'), this.$t('tip.hint'), {
|
|
|
|
confirmButtonText: this.$t('global.confirm'),
|
2019-08-02 10:36:17 +08:00
|
|
|
callback: action => {
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
// 打开运行图列表
|
2019-09-30 18:11:31 +08:00
|
|
|
// handleOpenRunPlan() {
|
|
|
|
// this.$emit('dispatchDialog', { name: 'openRunPlan', params: {type: 'add'} });
|
|
|
|
// },
|
2019-09-19 17:22:48 +08:00
|
|
|
// handledeleteRunPlan() {
|
|
|
|
// this.$emit('dispatchDialog', { name: 'openRunPlan', params: {type: 'delete'} });
|
|
|
|
// },
|
2019-09-04 16:32:41 +08:00
|
|
|
// 修改运行图名称
|
2019-09-19 17:22:48 +08:00
|
|
|
// handleEditPlan() {
|
|
|
|
// this.$emit('dispatchDialog', { name: 'openRunPlan', params: {type: 'edit'} });
|
|
|
|
// },
|
2019-09-04 11:28:24 +08:00
|
|
|
loadingScreen() {
|
|
|
|
this.loading = this.$loading({
|
|
|
|
lock: true,
|
2019-09-19 14:14:49 +08:00
|
|
|
text: this.$t('tip.underImport'),
|
2019-09-04 11:28:24 +08:00
|
|
|
spinner: 'el-icon-loading',
|
|
|
|
background: 'rgba(0, 0, 0, 0.7)'
|
|
|
|
});
|
|
|
|
},
|
2019-08-02 10:36:17 +08:00
|
|
|
// 导入运行图
|
|
|
|
handleImportRunPlan(file) {
|
|
|
|
if (file) {
|
2019-09-04 11:28:24 +08:00
|
|
|
this.loadingScreen();
|
|
|
|
setTimeout(() => {
|
|
|
|
const that = this;
|
|
|
|
const reader = new FileReader();
|
|
|
|
if (reader) {
|
|
|
|
reader.onload = function (e) {
|
|
|
|
let wb;
|
|
|
|
const data = e.target.result;
|
|
|
|
if (that.rABS) {
|
|
|
|
wb = XLSX.read(btoa(that.fixdata(data)), { // 手动转化
|
|
|
|
type: 'base64'
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
wb = XLSX.read(data, {
|
|
|
|
type: 'binary'
|
|
|
|
});
|
|
|
|
}
|
|
|
|
if (wb) {
|
|
|
|
try {
|
|
|
|
let jsonData = [];
|
|
|
|
for (const index in wb.Sheets) {
|
|
|
|
jsonData = that.planConvert.importData(wb.Sheets[index], jsonData);
|
|
|
|
}
|
2019-07-26 13:32:43 +08:00
|
|
|
|
2019-09-04 11:28:24 +08:00
|
|
|
importRunPlan({ skinCode: that.$route.query.skinCode || '02', runPlanList: jsonData }).then(response => {
|
|
|
|
that.loading.close();
|
|
|
|
that.refresh();
|
|
|
|
that.handleOpenRunPlan();
|
|
|
|
}).catch(error => {
|
|
|
|
that.loading.close();
|
|
|
|
that.refresh();
|
2019-09-23 13:37:11 +08:00
|
|
|
that.$message.warning(that.$t('tip.importRunGraphFailed') + error.message);
|
2019-09-04 11:28:24 +08:00
|
|
|
});
|
2019-07-26 13:32:43 +08:00
|
|
|
|
2019-09-04 11:28:24 +08:00
|
|
|
} catch (error) {
|
|
|
|
that.loading.close();
|
2019-08-02 10:36:17 +08:00
|
|
|
that.refresh();
|
2019-09-23 13:37:11 +08:00
|
|
|
that.$message.warning(that.$t('tip.parseRunGraphFailed') + error.message);
|
2019-09-04 11:28:24 +08:00
|
|
|
}
|
2019-08-02 10:36:17 +08:00
|
|
|
}
|
2019-09-04 11:28:24 +08:00
|
|
|
};
|
|
|
|
if (that.rABS) {
|
|
|
|
reader.readAsArrayBuffer(file);
|
|
|
|
} else {
|
|
|
|
reader.readAsBinaryString(file);
|
2019-08-02 10:36:17 +08:00
|
|
|
}
|
|
|
|
}
|
2019-09-04 11:28:24 +08:00
|
|
|
}, 50);
|
2019-08-02 10:36:17 +08:00
|
|
|
}
|
|
|
|
this.closeMenu();
|
|
|
|
},
|
|
|
|
// 新建运行图
|
2019-09-30 18:11:31 +08:00
|
|
|
// handleCreateEmptyPlan() {
|
|
|
|
// this.$emit('dispatchDialog', { name: 'createEmptyPlan', params: {} });
|
|
|
|
// },
|
2019-08-02 10:36:17 +08:00
|
|
|
// 修改站间运行时间
|
|
|
|
handleModifyingStationIntervalTime() {
|
|
|
|
this.$emit('dispatchDialog', { name: 'modifyingStationIntervalTime', params: {} });
|
|
|
|
},
|
|
|
|
// 自动生成
|
|
|
|
handleAutoGenerate() {
|
|
|
|
this.$emit('dispatchDialog', { name: 'editSmoothRunTime', params: {} });
|
|
|
|
},
|
|
|
|
// 校验运行图
|
|
|
|
handlePlanEffectiveCheck() {
|
|
|
|
const planId = this.$route.query.planId;
|
|
|
|
if (planId) {
|
|
|
|
planEffectiveCheck(planId).then(resp => {
|
|
|
|
this.$emit('dispatchDialog', {
|
|
|
|
name: 'systermOut',
|
|
|
|
params: {
|
|
|
|
width: 600,
|
|
|
|
contextList: resp.data
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}).catch(() => {
|
2019-09-19 14:14:49 +08:00
|
|
|
this.$messageBox(this.$t('tip.runGraphVerificationFailed'));
|
2019-08-02 10:36:17 +08:00
|
|
|
});
|
|
|
|
} else {
|
2019-09-19 14:14:49 +08:00
|
|
|
this.$messageBox(this.$t('tip.selectARunGraphFirst'));
|
2019-08-02 10:36:17 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
// 测试运行图
|
|
|
|
async handleTestRunPlan() {
|
|
|
|
const data = { planId: this.$route.query.planId };
|
|
|
|
runPlanNotify(data).then(resp => {
|
|
|
|
const query = {
|
2019-08-29 17:16:33 +08:00
|
|
|
skinCode: this.$route.query.skinCode, prdType: '01', group: resp.data, mapId: this.$route.query.mapId, planId: this.$route.query.planId
|
2019-08-02 10:36:17 +08:00
|
|
|
};
|
|
|
|
this.$router.push({ path: `${UrlConfig.display}/plan`, query: query });
|
|
|
|
launchFullscreen();
|
|
|
|
}).catch(error => {
|
2019-09-19 14:14:49 +08:00
|
|
|
this.$messageBox(this.$t('tip.createSimulationFaild')+this.$t('global.colon')+error.message);
|
2019-08-02 10:36:17 +08:00
|
|
|
});
|
|
|
|
},
|
|
|
|
// 计划参数
|
|
|
|
handleParameter() {
|
|
|
|
this.$emit('dispatchDialog', { name: 'parameter', params: {} });
|
|
|
|
},
|
|
|
|
// 添加计划
|
|
|
|
handleAddPlanningTrain() {
|
|
|
|
const planId = this.$route.query.planId;
|
|
|
|
if (planId) {
|
|
|
|
this.$emit('dispatchDialog', { name: 'addPlanningTrain', params: {} });
|
|
|
|
} else {
|
2019-09-19 14:14:49 +08:00
|
|
|
this.$messageBox(this.$t('tip.selectARunGraphFirst'));
|
2019-08-02 10:36:17 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
// 删除计划
|
|
|
|
handleDeletePlanningTrain() {
|
|
|
|
const serviceNumber = this.$store.state.runPlan.selected.serviceNumber;
|
|
|
|
if (serviceNumber) {
|
|
|
|
this.$emit('dispatchDialog', {
|
|
|
|
name: 'offLine', params: {
|
|
|
|
type: 'warning',
|
|
|
|
width: 260,
|
2019-09-19 14:14:49 +08:00
|
|
|
message: this.$t('tip.deleteTrainHint')+serviceNumber+'?',
|
2019-08-02 10:36:17 +08:00
|
|
|
operate: 'DeletePlanningTrain',
|
2019-08-09 18:29:08 +08:00
|
|
|
serviceNumber: serviceNumber,
|
|
|
|
refresh: true
|
2019-08-02 10:36:17 +08:00
|
|
|
}
|
|
|
|
});
|
|
|
|
} else {
|
2019-09-19 14:14:49 +08:00
|
|
|
this.$messageBox(this.$t('tip.selectAPlan'));
|
2019-08-02 10:36:17 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
// 修改计划
|
|
|
|
handleEditPlanningTrain() {
|
|
|
|
const serviceNumber = this.$store.state.runPlan.selected.serviceNumber;
|
|
|
|
if (serviceNumber) {
|
|
|
|
this.$emit('dispatchDialog', { name: 'editPlanningTrain', params: { serviceNumber } });
|
|
|
|
} else {
|
2019-09-19 14:14:49 +08:00
|
|
|
this.$messageBox(this.$t('tip.selectAPlan'));
|
2019-08-02 10:36:17 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
// 复制计划
|
|
|
|
handleDuplicateTrain() {
|
|
|
|
const serviceNumber = this.$store.state.runPlan.selected.serviceNumber;
|
|
|
|
if (serviceNumber) {
|
|
|
|
this.$emit('dispatchDialog', { name: 'duplicateTrain', params: { serviceNumber } });
|
|
|
|
} else {
|
2019-09-19 14:14:49 +08:00
|
|
|
this.$messageBox(this.$t('tip.selectAPlan'));
|
2019-08-02 10:36:17 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
// 添加任务
|
|
|
|
handleAddTask() {
|
|
|
|
const params = this.$store.state.runPlan.selected;
|
|
|
|
if (params.serviceNumber && params.tripNumber) {
|
|
|
|
this.$emit('dispatchDialog', { name: 'addTask', params });
|
|
|
|
} else {
|
2019-09-19 14:14:49 +08:00
|
|
|
this.$messageBox(this.$t('tip.selectATrain'));
|
2019-08-02 10:36:17 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
// 删除任务
|
|
|
|
handleDeleteTask() {
|
|
|
|
const params = this.$store.state.runPlan.selected;
|
|
|
|
if (params.serviceNumber && params.tripNumber) {
|
|
|
|
this.$emit('dispatchDialog', { name: 'deleteTask', params });
|
|
|
|
} else {
|
2019-09-19 14:14:49 +08:00
|
|
|
this.$messageBox(this.$t('tip.selectATrain'));
|
2019-08-02 10:36:17 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
// 修改任务
|
|
|
|
handleModifyingTask() {
|
|
|
|
const params = this.$store.state.runPlan.selected;
|
|
|
|
if (params.serviceNumber && params.tripNumber) {
|
|
|
|
this.$emit('dispatchDialog', { name: 'modifyingTask', params });
|
|
|
|
} else {
|
2019-09-19 14:14:49 +08:00
|
|
|
this.$messageBox(this.$t('tip.selectATrain'));
|
2019-08-02 10:36:17 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
// 修改交路
|
|
|
|
handleModifyingRouting() {
|
|
|
|
const params = this.$store.state.runPlan.selected;
|
|
|
|
this.$emit('dispatchDialog', { name: 'modifyingRouting', params });
|
|
|
|
},
|
|
|
|
// 修改开始时间
|
|
|
|
handleModifyingStartTime() {
|
|
|
|
const params = this.$store.state.runPlan.selected;
|
|
|
|
this.$emit('dispatchDialog', { name: 'modifyingBeginTime', params });
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
2019-07-26 13:32:43 +08:00
|
|
|
</script>
|
|
|
|
|
2019-08-02 10:36:17 +08:00
|
|
|
<style scoped rel="stylesheet/scss" lang="scss">
|
2019-07-26 13:32:43 +08:00
|
|
|
@import "src/styles/mixin.scss";
|
2019-08-13 15:54:26 +08:00
|
|
|
$top: 0px;
|
2019-07-26 13:32:43 +08:00
|
|
|
$width: 30px;
|
2019-08-13 15:54:26 +08:00
|
|
|
$height: 40px;
|
|
|
|
$menuPadding: 15px;
|
2019-07-26 13:32:43 +08:00
|
|
|
$menuItemHeight: 30px;
|
|
|
|
$menuItemWidth: 160px;
|
|
|
|
$menuItemPadding: 5px;
|
|
|
|
|
|
|
|
#PlanMenuBar {
|
|
|
|
z-index: 10;
|
|
|
|
position: absolute;
|
|
|
|
top: $top;
|
|
|
|
width: 100%;
|
|
|
|
height: $height;
|
|
|
|
line-height: $height;
|
|
|
|
}
|
|
|
|
|
|
|
|
.nav {
|
|
|
|
display: block;
|
|
|
|
cursor: pointer;
|
|
|
|
list-style: none;
|
2019-08-13 15:54:26 +08:00
|
|
|
// border: 1px solid #B6BCCC !important;
|
|
|
|
background-color: #293c55;
|
|
|
|
box-sizing: border-box;
|
|
|
|
padding-left: 20px;
|
2019-07-26 13:32:43 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
.nav-li {
|
|
|
|
position: relative;
|
|
|
|
display: inline-block;
|
2019-08-13 15:54:26 +08:00
|
|
|
padding: 0 $menuPadding;
|
|
|
|
color: rgba(255,255,255,0.45);
|
|
|
|
border-top: 4px solid #293c55;
|
|
|
|
}
|
|
|
|
|
|
|
|
.nav-li.menu_active {
|
|
|
|
border-top: 4px solid #a9334c;
|
|
|
|
background-color: #0e151f;
|
|
|
|
transition: 0.5s all;
|
|
|
|
}
|
|
|
|
|
|
|
|
.nav-li:hover {
|
|
|
|
border-top: 4px solid #a9334c;
|
|
|
|
background-color: #0e151f;
|
|
|
|
transition: 0.5s all;
|
2019-07-26 13:32:43 +08:00
|
|
|
}
|
|
|
|
|
2019-08-13 15:54:26 +08:00
|
|
|
.nav-li:hover .nav-li-text{
|
|
|
|
color: #fff;
|
|
|
|
}
|
|
|
|
|
|
|
|
.nav-li.menu_active .nav-li-text {
|
|
|
|
color: #fff;
|
2019-07-26 13:32:43 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
.nav-li-text {
|
|
|
|
font-size: 13px;
|
|
|
|
text-align: center;
|
|
|
|
text-decoration: none;
|
|
|
|
}
|
|
|
|
|
|
|
|
.nav-ul {
|
|
|
|
display: none;
|
|
|
|
position: absolute;
|
|
|
|
list-style: none;
|
|
|
|
border: 1px solid gray;
|
|
|
|
width: $menuItemWidth;
|
|
|
|
padding: 0px;
|
|
|
|
margin: 0px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.menu-ul {
|
|
|
|
display: none;
|
|
|
|
list-style: none;
|
|
|
|
background: #F0F0F0;
|
|
|
|
line-height: $menuItemHeight;
|
|
|
|
width: $menuItemWidth;
|
|
|
|
bottom: $menuItemHeight;
|
|
|
|
}
|
|
|
|
|
|
|
|
.active {
|
|
|
|
position: absolute;
|
2019-08-13 15:54:26 +08:00
|
|
|
left: 0;
|
2019-07-26 13:32:43 +08:00
|
|
|
display: block !important;
|
|
|
|
}
|
|
|
|
|
|
|
|
.menu-ul-text {
|
|
|
|
font-size: 14px;
|
|
|
|
letter-spacing: 0;
|
|
|
|
height: $menuItemHeight;
|
|
|
|
line-height: $menuItemHeight;
|
|
|
|
border-left: 1px solid #000;
|
|
|
|
border-right: 1px solid #000;
|
|
|
|
}
|
|
|
|
|
|
|
|
.menu-separator {
|
|
|
|
text-align: left;
|
|
|
|
background: #F0F0F0;
|
|
|
|
height: 2px;
|
|
|
|
line-height: 2px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.menu-separator .status {
|
|
|
|
display: inline-block;
|
|
|
|
border-right: 1px inset #CACACA;
|
|
|
|
width: $width;
|
|
|
|
height: 100%;
|
|
|
|
background: #EFECDE;
|
|
|
|
}
|
|
|
|
|
|
|
|
.menu-separator .separator {
|
|
|
|
display: inline-block;
|
2019-08-13 15:54:26 +08:00
|
|
|
background: #293c55;
|
|
|
|
// margin-left: 5px;
|
2019-07-26 13:32:43 +08:00
|
|
|
height: 2px;
|
2019-08-13 15:54:26 +08:00
|
|
|
width: 100%;
|
2019-07-26 13:32:43 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
.menu-li {
|
|
|
|
text-align: left;
|
2019-08-13 15:54:26 +08:00
|
|
|
background: #162436;
|
2019-07-26 13:32:43 +08:00
|
|
|
height: $menuItemHeight;
|
|
|
|
line-height: $menuItemHeight;
|
|
|
|
}
|
|
|
|
|
|
|
|
.menu-li-block {
|
|
|
|
letter-spacing: 0;
|
|
|
|
height: $menuItemHeight;
|
|
|
|
line-height: $menuItemHeight;
|
|
|
|
}
|
|
|
|
|
|
|
|
.menu-li-text {
|
|
|
|
font-size: 14px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.menu-li-text .label {
|
|
|
|
display: inline-block;
|
|
|
|
margin-left: 5px;
|
2019-08-13 15:54:26 +08:00
|
|
|
padding-left: 12px;
|
2019-07-26 13:32:43 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
.menu-li-text .button {
|
|
|
|
position: relative;
|
|
|
|
overflow: hidden;
|
|
|
|
line-height: 0px;
|
2019-08-13 15:54:26 +08:00
|
|
|
width: 100%;
|
|
|
|
top: 0;
|
|
|
|
color:rgba(255,255,255,0.45);
|
2019-07-26 13:32:43 +08:00
|
|
|
cursor: pointer;
|
2019-08-13 15:54:26 +08:00
|
|
|
padding-left: 16px;
|
|
|
|
text-align: left;
|
2019-07-26 13:32:43 +08:00
|
|
|
|
|
|
|
input {
|
|
|
|
opacity: 0;
|
|
|
|
cursor: pointer;
|
|
|
|
position: absolute;
|
|
|
|
top: 0px;
|
|
|
|
width: $menuItemWidth - $width - 10px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.menu-li-block:hover {
|
|
|
|
background: #C9DEF7;
|
2019-08-13 15:54:26 +08:00
|
|
|
color: #000;
|
2019-07-26 13:32:43 +08:00
|
|
|
box-sizing: border-box;
|
|
|
|
-moz-box-sizing: border-box;
|
|
|
|
-webkit-box-sizing: border-box;
|
|
|
|
}
|
2019-08-13 15:54:26 +08:00
|
|
|
|
|
|
|
.menu-li-text .button:hover{
|
|
|
|
color: #000;
|
|
|
|
}
|
2019-08-02 10:36:17 +08:00
|
|
|
</style>
|