|
|
|
<template>
|
|
|
|
<div class='CommandDispatch' :style="{ '--row': row }">
|
|
|
|
<component :is="key" v-for="(_, key) in gridAreaMap" :key="key" :ref="key" :style="{ gridArea: gridAreaMap[key] }"
|
|
|
|
@fullHeight="opacityKey => handleFullHeight(key, opacityKey)" />
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
import request from "@/utils/request";
|
|
|
|
|
|
|
|
const files = require.context('./Cards', true, /[^/]+\/index\.vue$/);
|
|
|
|
|
|
|
|
const components = files.keys().reduce((components, key) => {
|
|
|
|
components[key.match(/[^/]+/g)[1]] = files(key).default;
|
|
|
|
|
|
|
|
return components;
|
|
|
|
}, {});
|
|
|
|
|
|
|
|
const originGridArea = {
|
|
|
|
EventInformation: "1 / 1 / span 9 / 1",
|
|
|
|
DispatchLiaison: "10 / 1 / span 7 / 2",
|
|
|
|
DisposalPlan: "17 / 1 / span 9 / 2",
|
|
|
|
CrowdnessIndicatorRankings: "1 / 2 / span 11 / 2",
|
|
|
|
DisposalProcess: "12 / 2 / span 14 / 2",
|
|
|
|
RealTimeVideo: "1 / 3 / span 6 / 3",
|
|
|
|
ReleaseInformation: "7 / 3 / span 14 / 3",
|
|
|
|
TrafficControl: "21 / 3 / span 5 / 3",
|
|
|
|
}
|
|
|
|
|
|
|
|
export default {
|
|
|
|
name: 'CommandDispatch',
|
|
|
|
components: {
|
|
|
|
...components,
|
|
|
|
},
|
|
|
|
props: {
|
|
|
|
detailId: {
|
|
|
|
type: [String, Number],
|
|
|
|
default: 2
|
|
|
|
}
|
|
|
|
},
|
|
|
|
provide() {
|
|
|
|
return {
|
|
|
|
provideData: this.provideData,
|
|
|
|
}
|
|
|
|
},
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
gridAreaMap: {
|
|
|
|
...originGridArea
|
|
|
|
},
|
|
|
|
row: 24,
|
|
|
|
provideData: {
|
|
|
|
detail: null
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
created() {
|
|
|
|
this.getDetail();
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
getDetail() {
|
|
|
|
request({
|
|
|
|
url: `/dc/system/event/${this.detailId}`,
|
|
|
|
method: "GET",
|
|
|
|
})
|
|
|
|
.then((result) => {
|
|
|
|
if (result.code != 200) return;
|
|
|
|
|
|
|
|
this.provideData.detail = result.data
|
|
|
|
})
|
|
|
|
.catch((err) => { });
|
|
|
|
},
|
|
|
|
handleFullHeight(key, opacityKey) {
|
|
|
|
if (this.gridAreaMap[key] !== originGridArea[key]) {
|
|
|
|
this.gridAreaMap[key] = originGridArea[key];
|
|
|
|
if (this.$refs[opacityKey]?.[0]) {
|
|
|
|
this.$refs[opacityKey][0].$el.style.opacity = 1;
|
|
|
|
this.$refs[opacityKey][0].$el.style.pointerEvents = "auto";
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
let index = 0;
|
|
|
|
if (this.$refs[opacityKey]?.[0]) {
|
|
|
|
this.$refs[opacityKey][0].$el.style.opacity = 0;
|
|
|
|
this.$refs[opacityKey][0].$el.style.pointerEvents = "none";
|
|
|
|
};
|
|
|
|
|
|
|
|
this.gridAreaMap[key] = originGridArea[key].replace(/[0-9]+/g, (num) => {
|
|
|
|
try {
|
|
|
|
return { 0: '1', 2: this.row + 1 }[index] || num;
|
|
|
|
} catch (error) {
|
|
|
|
|
|
|
|
} finally {
|
|
|
|
index++;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<style lang='scss' scoped>
|
|
|
|
.CommandDispatch {
|
|
|
|
padding: 24px 12px 21px 12px;
|
|
|
|
display: grid;
|
|
|
|
grid-template-columns: 1fr 2fr 1fr;
|
|
|
|
grid-template-rows: repeat(var(--row), 1fr);
|
|
|
|
gap: 18px;
|
|
|
|
|
|
|
|
>div {
|
|
|
|
transition: all .18s linear;
|
|
|
|
}
|
|
|
|
|
|
|
|
::v-deep {
|
|
|
|
.title-button {
|
|
|
|
border-radius: 65px;
|
|
|
|
font-size: 12px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.special-button {
|
|
|
|
border-radius: 3px !important;
|
|
|
|
padding: 3px;
|
|
|
|
height: 26px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</style>
|