|  |  |  | <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> |