120 lines
3.5 KiB
Vue
120 lines
3.5 KiB
Vue
<template>
|
|
<div>
|
|
<pop-menu ref="popMenu" :menu="menu" />
|
|
<cancel-all-limit ref="cancelAllLimit" />
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import PopMenu from '@/components/PopMenu';
|
|
import CancelAllLimit from './dialog/cancelAllLimit';
|
|
import { mapGetters } from 'vuex';
|
|
import { OperateMode } from '@/scripts/ConstDic';
|
|
import { MapDeviceType, OperationEvent, DeviceMenu } from '@/scripts/ConstDic';
|
|
|
|
export default {
|
|
name: 'MenuLimit',
|
|
components: {
|
|
PopMenu,
|
|
CancelAllLimit
|
|
},
|
|
props: {
|
|
selected: {
|
|
type: Object,
|
|
default() {
|
|
return null;
|
|
}
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
menu: [{
|
|
label: '取消全线临时限速',
|
|
handler: this.cancelSpeed,
|
|
disabledCallback: '',
|
|
auth: { station: true, center: false }
|
|
}],
|
|
menuNormal: {
|
|
local: [
|
|
{
|
|
label: '取消全线临时限速',
|
|
handler: this.cancelSpeed,
|
|
disabledCallback: '',
|
|
auth: { station: true, center: false }
|
|
}
|
|
],
|
|
central: [
|
|
{
|
|
label: '取消全线临时限速',
|
|
handler: this.cancelSpeed,
|
|
disabledCallback: '',
|
|
auth: { station: false, center: true }
|
|
}
|
|
]
|
|
}
|
|
};
|
|
},
|
|
computed: {
|
|
...mapGetters('training', [
|
|
'mode',
|
|
'operatemode'
|
|
]),
|
|
...mapGetters('menuOperation', [
|
|
'buttonOperation'
|
|
])
|
|
},
|
|
watch: {
|
|
'$store.state.menuOperation.menuCount': function (val) {
|
|
if (this.$store.getters['menuOperation/checkDialogIsOpen'](DeviceMenu.LimitControl) && !this.buttonOperation) {
|
|
this.doShow(this.$store.state.menuOperation.menuPosition);
|
|
} else {
|
|
this.doClose();
|
|
}
|
|
}
|
|
},
|
|
methods: {
|
|
clickEvent() {
|
|
const self = this;
|
|
window.onclick = function (e) {
|
|
self.doClose();
|
|
};
|
|
},
|
|
initMenu() {
|
|
// 编辑模式菜单列表
|
|
if (this.operatemode === OperateMode.ADMIN) {
|
|
this.menu = [...this.menu];
|
|
}
|
|
},
|
|
doShow(point) {
|
|
this.clickEvent();
|
|
this.initMenu();
|
|
if (this.$refs && this.$refs.popMenu && this.menu && this.menu.length) {
|
|
this.$refs.popMenu.resetShowPosition(point);
|
|
}
|
|
},
|
|
doClose() {
|
|
if (this.$refs && this.$refs.popMenu) {
|
|
this.$refs.popMenu.close();
|
|
}
|
|
},
|
|
// 取消速度
|
|
cancelSpeed() {
|
|
const operate = {
|
|
start: true,
|
|
send: true,
|
|
code: this.selected.code,
|
|
type: MapDeviceType.LimitControl.type,
|
|
label: MapDeviceType.LimitControl.label,
|
|
operation: OperationEvent.LimitControl.CancelAllLimit.menu.operation
|
|
};
|
|
this.$store.dispatch('training/next', operate).then(({ valid }) => {
|
|
if (valid) {
|
|
this.$store.dispatch('menuOperation/handleBreakFlag', { break: true });
|
|
this.$refs.cancelAllLimit.doShow(operate, this.selected);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
};
|
|
</script>
|