| 
					
				 | 
			
			
				@@ -0,0 +1,429 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<!-- eslint-disable vue/multi-word-component-names --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  <!-- 主体内容部分 --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  <div class="content"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <!-- 背景 --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <img v-if="background.show && background.type === 'image'" class="content__background" :src="background.link" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <video 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      v-if="background.show && background.type === 'video'" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      class="content__background content__background_video" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width="100%" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      autoplay 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      loop 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      muted 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      disablepictureinpicture 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      playsinline 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    > 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <source :src="background.link" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      Not Supportted Link Or Browser 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </video> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <div class="flex w-full h-full" :style="{ flexDirection: layout.direction }"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <div v-for="config in layoutConfig" :key="config.name" :style="{ flexBasis: config.basis, overflow: config.overflow ? 'auto' : 'none' }"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <!-- 告示板部分 --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <template v-if="config.name === 'board'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <div class="content__module flex flex-justify-around flex-items-center flex-wrap"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <MiniBoard 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              v-for="item in config.items" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :key="item.prop" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :label="item.label" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :value="item.value" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :type="config.type" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :layout="config.layout" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <!-- 图表部分,这部分通常需要填充,有告示板、Header等内容需要填充父级 --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <template v-if="config.name === 'chart'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <CustomChart class="content__module" :chart-config="config.config" :chart-data="config.data" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <!-- 通常列表部分 --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <template v-if="config.name === 'list'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <template v-if="config.type === 'timeline'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <TimelineList class="content__module" :list-config="config.items" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <template v-else-if="config.type === 'timelineNew'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <TimelineListNew class="content__module" :list-config="config.items" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <template v-else> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <CustomList class="content__module" :type="config.type" :list-config="config.items" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <!-- 画廊部分 --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <template v-if="config.name === 'gallery'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <CustomGallery class="content__module" :type="config.type" :gallery-config="config.items" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <!-- 复杂列表部分 --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <template v-if="config.name === 'gallery_list'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <GalleryList class="content__module" :type="config.type" :list-config="config.items" :gallery-config="config.galleryItems" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <!-- 复杂列表部分 --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <template v-if="config.name === 'complex_list'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <ComplexList class="content__module" :type="config.type" :list-config="config.items" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <!-- 表格部分,这部分通常是占一整个模块的 --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <template v-if="config.name === 'table'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <CustomTable class="content__module text-center overflow-auto" :type="config.type" :columns="config.columns" :data="config.data" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <template v-if="config.name === 'tabs'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <CustomTabs class="content__module" :type="config.type" :tab-config="config.items" :overflow="config.overflow" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <template v-if="config.name === 'blast_delta'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <BlastDelta class="content__module" :pos-monitor="config.data" :canvasSize="{ width: 250, height: 200 }" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <template v-if="config.name === 'qh_curve'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <QHCurve class="content__module" :mainfan="config.data" :fan1-prop="config.config.fan1Prop" :fan2-prop="config.config.fan2Prop" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <template v-if="config.name === 'ai_chat'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <AIChat class="content__module" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <template v-if="config.name === 'device_alarm'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <DeviceAlarm class="content__module" :devicedata="config.data" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <template v-if="config.name === 'measure_detail'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <MeasureDetail 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            class="content__module" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            :show-title="false" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            :composite-data="config.data" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            :topconfig="config.config.topconfig" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            :btnconfig="config.config.btnconfig" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <!-- <template v-if="config.key === 'fire_control'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <FIreControl class="content__module" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <template v-if="config.key === 'fire_warn'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <FIreWarn class="content__module" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </template> --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<script lang="ts" setup> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import { computed } from 'vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    CommonItem, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Config, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // ModuleDataBoard, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // ModuleDataChart, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // ModuleDataList, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // ModuleDataPreset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // ModuleDataTable, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } from '../../../deviceManager/configurationTable/types'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import MiniBoard from './detail/MiniBoard-green.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import TimelineList from './detail/TimelineList.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import TimelineListNew from './detail/TimelineListNew.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import CustomList from './detail/CustomList.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import CustomGallery from './detail/CustomGallery.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import ComplexList from './detail/ComplexList.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import GalleryList from './detail/GalleryList.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import CustomTable from './detail/CustomTable.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import CustomChart from './detail/CustomChart.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import { clone } from 'lodash-es'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import { getData, getFormattedText } from '../hooks/helper'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import BlastDelta from '../../../monitorManager/deviceMonitor/components/device/modal/blastDelta.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import QHCurve from './preset/QHCurve.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import MeasureDetail from './preset/MeasureDetail.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import CustomTabs from './preset/CustomTabs.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import AIChat from '/@/components/AIChat/MiniChat.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  import DeviceAlarm from './preset/DeviceAlarm.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // import FIreWarn from './preset/FIreWarn.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // import FIreControl from './preset/FIreControl.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const props = defineProps<{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    data: any; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    moduleData: Config['moduleData']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const { background, layout } = props.moduleData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // 获取当原始配置带 items 项时的最终 items 配置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  function getItems(raw, items: CommonItem[]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return items.map((i) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ...i, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        label: getFormattedText(raw, i.label, i.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        value: getFormattedText(raw, i.value, i.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // 获取当 List 组件配置带 items 项时的最终 items 配置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  function getListItems(raw: any, items: CommonItem[], mapFromData?: boolean) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (mapFromData && Array.isArray(raw)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return raw.map((data) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const item = items[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ...item, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          label: getFormattedText(data, item.label, item.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          value: getFormattedText(data, item.value, item.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return getItems(raw, items); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 根据配置里的layout将配置格式化为带 key 的具体配置,例如:[{ key: 'list', value: any, ...ModuleDataList }] */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const layoutConfig = computed(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const refData = props.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const board = clone(props.moduleData.board) || []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const list = clone(props.moduleData.list) || []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const gallery = clone(props.moduleData.gallery) || []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const complex_list = clone(props.moduleData.complex_list) || []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const gallery_list = clone(props.moduleData.gallery_list) || []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const tabs = clone(props.moduleData.tabs) || []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const chart = clone(props.moduleData.chart) || []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const table = clone(props.moduleData.table) || []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const preset = clone(props.moduleData.preset) || []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return layout.items.reduce((arr: any[], item) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      switch (item.name) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        case 'board': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const cfg = board.shift(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (!cfg) break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const data = getData(refData, cfg.readFrom, cfg.parser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          arr.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            overflow: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ...item, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ...cfg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            items: getItems(data, cfg.items), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        case 'list': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const cfg = list.shift(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (!cfg) break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const data = getData(refData, cfg.readFrom, cfg.parser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          arr.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            overflow: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ...item, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ...cfg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            items: getListItems(data, cfg.items, cfg.mapFromData), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        case 'gallery': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const cfg = gallery.shift(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (!cfg) break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const data = getData(refData, cfg.readFrom, cfg.parser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          arr.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            overflow: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ...item, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ...cfg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            items: getItems(data, cfg.items), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        case 'complex_list': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const cfg = complex_list.shift(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (!cfg) break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const data = getData(refData, cfg.readFrom, cfg.parser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (cfg.mapFromData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const firstListItem = cfg.items[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            arr.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              overflow: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ...item, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ...cfg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              items: (data || []).map((d) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  title: getFormattedText(d, firstListItem.title, firstListItem.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  contents: firstListItem.contents.map((e) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      ...e, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      label: getFormattedText(d, e.label, e.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      value: getFormattedText(d, e.value, e.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            arr.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              overflow: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ...item, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ...cfg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              items: cfg.items.map((i) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  title: getFormattedText(data, i.title, i.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  contents: i.contents.map((e) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      ...e, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      label: getFormattedText(data, e.label, e.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      value: getFormattedText(data, e.value, e.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        case 'gallery_list': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const cfg = gallery_list.shift(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (!cfg) break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const data = getData(refData, cfg.readFrom, cfg.parser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          arr.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            overflow: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ...item, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ...cfg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            items: getItems(data, cfg.items), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            galleryItems: getItems(data, cfg.galleryItems), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        case 'tabs': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const cfg = tabs.shift(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (!cfg) break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const data = getData(refData, cfg.readFrom, cfg.parser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (cfg.mapFromData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const firstListItem = cfg.items[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            arr.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              overflow: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ...item, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ...cfg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              items: (data || []).map((d) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  title: getFormattedText(d, firstListItem.title, firstListItem.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  contents: firstListItem.contents.map((e) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      ...e, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      label: getFormattedText(d, e.label, e.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      value: getFormattedText(d, e.value, e.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            arr.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              overflow: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ...item, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ...cfg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              items: cfg.items.map((i) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  title: getFormattedText(data, i.title, i.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  contents: i.contents.map((e) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      ...e, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      label: getFormattedText(data, e.label, e.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      value: getFormattedText(data, e.value, e.trans), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        case 'chart': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const cfg = chart.shift(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (!cfg) break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const data = getData(refData, cfg.readFrom, cfg.parser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          arr.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ...item, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            config: cfg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        case 'table': { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const cfg = table.shift(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (!cfg) break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const data = getData(refData, cfg.readFrom, cfg.parser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          arr.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ...cfg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ...item, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            columns: cfg.columns, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        default: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const cfg = preset.shift(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (!cfg) break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const data = getData(refData, cfg.readFrom, cfg.parser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          arr.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ...item, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            data, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            config: cfg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return arr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, []); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<style lang="less" scoped> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  @import '@/design/theme.less'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  .content { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    height: calc(100% - 30px); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    position: relative; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // z-index: -2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    display: flex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    flex-direction: column; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  .content__background { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    width: 100%; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    height: 100%; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    position: absolute; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    top: 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    left: 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    z-index: 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    object-fit: fill; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  .content__module { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // margin-top: 5px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // margin-bottom: 5px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    width: 100%; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    height: 100%; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // .content__module:first-of-type { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //   margin-top: 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // .content__module:last-of-type { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  //   margin-bottom: 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ::-webkit-scrollbar { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    width: 5px !important; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ::-webkit-scrollbar-thumb { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    width: 5px !important; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  :deep(.zxm-select:not(.zxm-select-customize-input) .zxm-select-selector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* background-color: transparent; */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    color: #fff; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  :deep(.zxm-select-arrow) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    color: #fff; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  :deep(.zxm-select-selection-item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    color: #fff !important; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  :deep(.zxm-select-selection-placeholder) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    color: #fff !important; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  :deep(.dialog-overlay) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    width: 100%; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    height: 100%; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    position: unset; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    box-shadow: unset; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ::-webkit-scrollbar { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    width: 5px !important; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ::-webkit-scrollbar-thumb { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    width: 5px !important; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</style> 
			 |