|
@@ -1,13 +1,7 @@
|
|
|
<!-- belt-new.vue -->
|
|
<!-- belt-new.vue -->
|
|
|
<template>
|
|
<template>
|
|
|
<div class="company-home">
|
|
<div class="company-home">
|
|
|
- <customHeader
|
|
|
|
|
- :fieldNames="{ label: 'systemname', value: 'sys_id' }"
|
|
|
|
|
- :options="options"
|
|
|
|
|
- :optionValue="optionValue"
|
|
|
|
|
- @change="changeSelectRow"
|
|
|
|
|
- @open-history="goToHistory"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ <customHeader :fieldNames="{ label: 'systemname', value: 'sys_id' }" :options="options" :optionValue="optionValue" @change="changeSelectRow">
|
|
|
矿井全域皮带巷三级防灭火系统
|
|
矿井全域皮带巷三级防灭火系统
|
|
|
</customHeader>
|
|
</customHeader>
|
|
|
<div class="modal-box" id="modalBox" v-if="pageType !== 'history' && isInitModal">
|
|
<div class="modal-box" id="modalBox" v-if="pageType !== 'history' && isInitModal">
|
|
@@ -19,360 +13,391 @@
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="border">
|
|
<div class="border">
|
|
|
- <template v-if="pageType === 'history'">
|
|
|
|
|
- <History />
|
|
|
|
|
- </template>
|
|
|
|
|
- <template v-else>
|
|
|
|
|
- <ModuleCommon
|
|
|
|
|
- v-for="cfg in cfgs"
|
|
|
|
|
- :key="cfg.deviceType + cfg.moduleName"
|
|
|
|
|
- :show-style="cfg.showStyle"
|
|
|
|
|
- :module-data="cfg.moduleData"
|
|
|
|
|
- :module-name="cfg.moduleName"
|
|
|
|
|
- :device-type="cfg.deviceType"
|
|
|
|
|
- :page-type="cfg.pageType"
|
|
|
|
|
- :data="data"
|
|
|
|
|
- :visible="true"
|
|
|
|
|
- style="z-index: 20"
|
|
|
|
|
- />
|
|
|
|
|
- <ModuleCommonDual
|
|
|
|
|
- v-if="cfgA && cfgB"
|
|
|
|
|
- :show-style="cfgA.showStyle"
|
|
|
|
|
- :module-data-a="cfgA.moduleData"
|
|
|
|
|
- :module-name-a="cfgA.moduleName"
|
|
|
|
|
- :device-type-a="cfgA.deviceType"
|
|
|
|
|
- :module-data-b="cfgB.moduleData"
|
|
|
|
|
- :module-name-b="cfgB.moduleName"
|
|
|
|
|
- :device-type-b="cfgB.deviceType"
|
|
|
|
|
- :data="data"
|
|
|
|
|
- :visible="true"
|
|
|
|
|
- />
|
|
|
|
|
- </template>
|
|
|
|
|
|
|
+ <ModuleCommon
|
|
|
|
|
+ v-for="cfg in cfgs"
|
|
|
|
|
+ :key="cfg.deviceType + cfg.moduleName"
|
|
|
|
|
+ :show-style="cfg.showStyle"
|
|
|
|
|
+ :module-data="cfg.moduleData"
|
|
|
|
|
+ :module-name="cfg.moduleName"
|
|
|
|
|
+ :device-type="cfg.deviceType"
|
|
|
|
|
+ :page-type="cfg.pageType"
|
|
|
|
|
+ :data="data"
|
|
|
|
|
+ :visible="true"
|
|
|
|
|
+ style="z-index: 20"
|
|
|
|
|
+ />
|
|
|
|
|
+ <ModuleCommonDual
|
|
|
|
|
+ v-if="cfgA && cfgB"
|
|
|
|
|
+ :show-style="cfgA.showStyle"
|
|
|
|
|
+ :module-data-a="cfgA.moduleData"
|
|
|
|
|
+ :module-name-a="cfgA.moduleName"
|
|
|
|
|
+ :device-type-a="cfgA.deviceType"
|
|
|
|
|
+ :module-data-b="cfgB.moduleData"
|
|
|
|
|
+ :module-name-b="cfgB.moduleName"
|
|
|
|
|
+ :device-type-b="cfgB.deviceType"
|
|
|
|
|
+ :data="data"
|
|
|
|
|
+ :visible="true"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
- import { onMounted, ref, watch, nextTick, computed, onUnmounted } from 'vue';
|
|
|
|
|
- import customHeader from './components/customHeader-belt.vue';
|
|
|
|
|
- import { useInitConfigs, useInitPage } from '../hooks/useInit';
|
|
|
|
|
- import { testBeltNew, testYjkf, testSpary } from './configurable.data';
|
|
|
|
|
- import ModuleCommon from './components/ModuleCommon.vue';
|
|
|
|
|
- import ModuleCommonDual from './components/ModuleCommonDual.vue';
|
|
|
|
|
- import Three3D from '/@/views/vent/home/configurable/components/three3D.vue';
|
|
|
|
|
- import BeltNav from './components/BeltNav.vue';
|
|
|
|
|
- import { useRouter, useRoute } from 'vue-router';
|
|
|
|
|
- import { getSystem, getMonitorAndAlertBelt, getWarnInfo, getDevice, getDataHome, getWarnResult, getStaffInfo } from './configurable.api';
|
|
|
|
|
- import { modalAnimate, destroy } from './threejs/belt.threejs';
|
|
|
|
|
- import History from './components/detail/history.vue';
|
|
|
|
|
- import sys from '/@/locales/lang/en/sys';
|
|
|
|
|
- // 初始化配置
|
|
|
|
|
- const { configs, fetchConfigs } = useInitConfigs();
|
|
|
|
|
- const cfgs = computed(() => configs.value.filter((_, index) => index !== 2 && index !== 3));
|
|
|
|
|
- const cfgA = computed<any>(() => configs.value[2]);
|
|
|
|
|
- const cfgB = computed<any>(() => configs.value[3]);
|
|
|
|
|
- const { updateEnhancedConfigs, updateData, data } = useInitPage('矿井全域皮带巷三级防灭火系统');
|
|
|
|
|
- const isInitModal = ref(false);
|
|
|
|
|
- const pageCache = ref({
|
|
|
|
|
- fire_risk_warn: { configs: testBeltNew },
|
|
|
|
|
- emergencyControl: { configs: testYjkf },
|
|
|
|
|
- sprayControl: { configs: testSpary },
|
|
|
|
|
- });
|
|
|
|
|
- let timer = null,
|
|
|
|
|
- modal = null;
|
|
|
|
|
- const pageType = ref('fire_risk_warn');
|
|
|
|
|
- const route = useRoute();
|
|
|
|
|
- const modalMonitorData = ref({});
|
|
|
|
|
- // 下拉框选项
|
|
|
|
|
- /** 场景选项 */
|
|
|
|
|
- const options = ref([]);
|
|
|
|
|
- const optionValue = ref('');
|
|
|
|
|
- async function getSysDataSource() {
|
|
|
|
|
- const res = await getDataHome({ dataList: 'risk_evaluator' }).catch(() => {});
|
|
|
|
|
- options.value = res.risk_evaluator || [];
|
|
|
|
|
- await nextTick();
|
|
|
|
|
- if (options.value.length > 0 && !optionValue.value) {
|
|
|
|
|
- const firstId = options.value[0].sys_id;
|
|
|
|
|
- changeSelectRow(firstId);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- // 切换检测数据
|
|
|
|
|
- function changeSelectRow(deviceID) {
|
|
|
|
|
- optionValue.value = deviceID;
|
|
|
|
|
- refresh();
|
|
|
|
|
|
|
+import { onMounted, ref, watch, nextTick, computed, onUnmounted } from 'vue';
|
|
|
|
|
+import customHeader from './components/customHeader-belt.vue';
|
|
|
|
|
+import { useInitConfigs, useInitPage } from '../hooks/useInit';
|
|
|
|
|
+import { testBeltNew, testYjkf, testSpary } from './configurable.data';
|
|
|
|
|
+import ModuleCommon from './components/ModuleCommon.vue';
|
|
|
|
|
+import ModuleCommonDual from './components/ModuleCommonDual.vue';
|
|
|
|
|
+import Three3D from '/@/views/vent/home/configurable/components/three3D.vue';
|
|
|
|
|
+import BeltNav from './components/BeltNav.vue';
|
|
|
|
|
+import { useRouter, useRoute } from 'vue-router';
|
|
|
|
|
+import { getSystem, getMonitorAndAlertBelt, getWarnInfo, getDevice, getDataHome, getWarnResult, getStaffInfo } from './configurable.api';
|
|
|
|
|
+import { modalAnimate, destroy } from './threejs/belt.threejs';
|
|
|
|
|
+import History from './history.vue';
|
|
|
|
|
+import sys from '/@/locales/lang/en/sys';
|
|
|
|
|
+// 初始化配置
|
|
|
|
|
+const { configs, fetchConfigs } = useInitConfigs();
|
|
|
|
|
+const cfgs = computed(() => configs.value.filter((_, index) => index !== 2 && index !== 3));
|
|
|
|
|
+const cfgA = computed<any>(() => configs.value[2]);
|
|
|
|
|
+const cfgB = computed<any>(() => configs.value[3]);
|
|
|
|
|
+const { updateEnhancedConfigs, updateData, data } = useInitPage('矿井全域皮带巷三级防灭火系统');
|
|
|
|
|
+const isInitModal = ref(false);
|
|
|
|
|
+const pageCache = ref({
|
|
|
|
|
+ fire_risk_warn: { configs: testBeltNew },
|
|
|
|
|
+ emergencyControl: { configs: testYjkf },
|
|
|
|
|
+ sprayControl: { configs: testSpary },
|
|
|
|
|
+});
|
|
|
|
|
+let timer = null,
|
|
|
|
|
+ modal = null;
|
|
|
|
|
+const pageType = ref('fire_risk_warn');
|
|
|
|
|
+const route = useRoute();
|
|
|
|
|
+const modalMonitorData = ref({});
|
|
|
|
|
+// 下拉框选项
|
|
|
|
|
+/** 场景选项 */
|
|
|
|
|
+const options = ref([]);
|
|
|
|
|
+const optionValue = ref('');
|
|
|
|
|
+async function getSysDataSource() {
|
|
|
|
|
+ const res = await getDataHome({ dataList: 'risk_evaluator' }).catch(() => {});
|
|
|
|
|
+ options.value = res.risk_evaluator || [];
|
|
|
|
|
+ await nextTick();
|
|
|
|
|
+ if (options.value.length > 0 && !optionValue.value) {
|
|
|
|
|
+ const firstId = options.value[0].sys_id;
|
|
|
|
|
+ changeSelectRow(firstId);
|
|
|
}
|
|
}
|
|
|
- function goToHistory() {
|
|
|
|
|
- if (pageType.value === 'history') {
|
|
|
|
|
- // 当前是历史页 → 切回默认页
|
|
|
|
|
- pageType.value = 'fire_risk_warn';
|
|
|
|
|
- } else {
|
|
|
|
|
- // 当前不是 → 打开历史页
|
|
|
|
|
- pageType.value = 'history';
|
|
|
|
|
- destroy(modal);
|
|
|
|
|
|
|
+}
|
|
|
|
|
+// 切换检测数据
|
|
|
|
|
+function changeSelectRow(deviceID) {
|
|
|
|
|
+ optionValue.value = deviceID;
|
|
|
|
|
+ refresh();
|
|
|
|
|
+}
|
|
|
|
|
+// 预警等级映射
|
|
|
|
|
+const warnTypeMap = {
|
|
|
|
|
+ '102': '黄色预警(较大风险)',
|
|
|
|
|
+ '103': '橙色预警(重大风险)',
|
|
|
|
|
+ '104': '红色预警(特别重大风险)',
|
|
|
|
|
+};
|
|
|
|
|
+// 处理接口返回数据
|
|
|
|
|
+interface WarnResult {
|
|
|
|
|
+ warnName: string;
|
|
|
|
|
+ coRange?: string;
|
|
|
|
|
+ coTrend?: string;
|
|
|
|
|
+ tempRange?: string;
|
|
|
|
|
+ tempTrend?: string;
|
|
|
|
|
+ hclRange?: string;
|
|
|
|
|
+ warnCtrl?: string;
|
|
|
|
|
+}
|
|
|
|
|
+// 处理预警指标展示数据格式
|
|
|
|
|
+function groupWarnByType(data: any) {
|
|
|
|
|
+ const result: WarnResult[] = [];
|
|
|
|
|
+ // 遍历 102、103、104...
|
|
|
|
|
+ Object.keys(data).forEach((warnKey) => {
|
|
|
|
|
+ const list = data[warnKey] || [];
|
|
|
|
|
+ const warnName = warnTypeMap[warnKey as keyof typeof warnTypeMap];
|
|
|
|
|
+ function getWarnCtrlByWarnName(warnName) {
|
|
|
|
|
+ if (warnName === '黄色预警(较大风险)') return '预警';
|
|
|
|
|
+ if (warnName === '橙色预警(重大风险)') return '报警启动喷淋';
|
|
|
|
|
+ if (warnName === '红色预警(特别重大风险)') return '启动喷淋与排烟';
|
|
|
|
|
+ return '';
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- // 预警等级映射
|
|
|
|
|
- const warnTypeMap = {
|
|
|
|
|
- '102': '黄色预警(较大风险)',
|
|
|
|
|
- '103': '橙色预警(重大风险)',
|
|
|
|
|
- '104': '红色预警(特别重大风险)',
|
|
|
|
|
- };
|
|
|
|
|
- // 处理接口返回数据
|
|
|
|
|
- interface WarnResult {
|
|
|
|
|
- warnName: string;
|
|
|
|
|
- coRange?: string;
|
|
|
|
|
- coTrend?: string;
|
|
|
|
|
- tempRange?: string;
|
|
|
|
|
- tempTrend?: string;
|
|
|
|
|
- hclRange?: string;
|
|
|
|
|
- warnCtrl?: string;
|
|
|
|
|
- }
|
|
|
|
|
- // 处理预警指标展示数据格式
|
|
|
|
|
- function groupWarnByType(data: any) {
|
|
|
|
|
- const result: WarnResult[] = [];
|
|
|
|
|
- // 遍历 102、103、104...
|
|
|
|
|
- Object.keys(data).forEach((warnKey) => {
|
|
|
|
|
- const list = data[warnKey] || [];
|
|
|
|
|
- const warnName = warnTypeMap[warnKey as keyof typeof warnTypeMap];
|
|
|
|
|
- function getWarnCtrlByWarnName(warnName) {
|
|
|
|
|
- if (warnName === '黄色预警(较大风险)') return '预警';
|
|
|
|
|
- if (warnName === '橙色预警(重大风险)') return '报警启动喷淋';
|
|
|
|
|
- if (warnName === '红色预警(特别重大风险)') return '启动喷淋与排烟';
|
|
|
|
|
- return '';
|
|
|
|
|
- }
|
|
|
|
|
- // 构建当前预警对象
|
|
|
|
|
- const warnObj: WarnResult = { warnName };
|
|
|
|
|
- warnObj.warnCtrl = getWarnCtrlByWarnName(warnName);
|
|
|
|
|
- list.forEach((item: any) => {
|
|
|
|
|
- const { deviceType, fmin, fmax, trendMin, trendMax, trendCxTimeUnit } = item;
|
|
|
|
|
- // CO
|
|
|
|
|
- if (deviceType === 'modelsensor_co') {
|
|
|
|
|
- if (fmin != null && fmax != null) {
|
|
|
|
|
- warnObj.coRange = `${fmin} - ${fmax}`;
|
|
|
|
|
- } else if (fmin != null && fmax == null) {
|
|
|
|
|
- warnObj.coRange = `> ${fmin}`;
|
|
|
|
|
- }
|
|
|
|
|
- // 处理变化率
|
|
|
|
|
- else if (trendMin != null && trendMax != null) {
|
|
|
|
|
- if (warnName === '黄色预警(较大风险)') {
|
|
|
|
|
- warnObj.coTrend = `加速上升(${trendMin} - ${trendMax})`;
|
|
|
|
|
- } else if (warnName === '橙色预警(重大风险)') {
|
|
|
|
|
- warnObj.coTrend = `急剧上升(${trendMin} - ${trendMax})`;
|
|
|
|
|
- } else if (warnName === '红色预警(特别重大风险)') {
|
|
|
|
|
- warnObj.coTrend = `极端上升(${trendMin} - ${trendMax})`;
|
|
|
|
|
- }
|
|
|
|
|
- } else if (trendMin != null && trendMax == null) {
|
|
|
|
|
- warnObj.coTrend = `极端上升>${trendMin}`;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 构建当前预警对象
|
|
|
|
|
+ const warnObj: WarnResult = { warnName };
|
|
|
|
|
+ warnObj.warnCtrl = getWarnCtrlByWarnName(warnName);
|
|
|
|
|
+ list.forEach((item: any) => {
|
|
|
|
|
+ const { deviceType, fmin, fmax, trendMin, trendMax, trendCxTimeUnit } = item;
|
|
|
|
|
+ // CO
|
|
|
|
|
+ if (deviceType === 'modelsensor_co') {
|
|
|
|
|
+ if (fmin != null && fmax != null) {
|
|
|
|
|
+ warnObj.coRange = `${fmin} - ${fmax}`;
|
|
|
|
|
+ } else if (fmin != null && fmax == null) {
|
|
|
|
|
+ warnObj.coRange = `> ${fmin}`;
|
|
|
}
|
|
}
|
|
|
- // 温度(带单位)
|
|
|
|
|
- else if (deviceType === 'modelsensor_temperature') {
|
|
|
|
|
- if (fmin != null && fmax != null) {
|
|
|
|
|
- warnObj.tempRange = `${fmin} - ${fmax}℃`;
|
|
|
|
|
- } else if (fmin != null && fmax == null) {
|
|
|
|
|
- warnObj.tempRange = `≥ ${fmin}℃(持续高温)`;
|
|
|
|
|
- } else if (trendMin != null) {
|
|
|
|
|
- let unit = '';
|
|
|
|
|
- if (trendCxTimeUnit === 0) unit = '分钟';
|
|
|
|
|
- if (trendCxTimeUnit === 1) unit = '小时';
|
|
|
|
|
- warnObj.tempTrend = `>+${trendMin}℃ /${unit}`;
|
|
|
|
|
|
|
+ // 处理变化率
|
|
|
|
|
+ else if (trendMin != null && trendMax != null) {
|
|
|
|
|
+ if (warnName === '黄色预警(较大风险)') {
|
|
|
|
|
+ warnObj.coTrend = `加速上升(${trendMin} - ${trendMax})`;
|
|
|
|
|
+ } else if (warnName === '橙色预警(重大风险)') {
|
|
|
|
|
+ warnObj.coTrend = `急剧上升(${trendMin} - ${trendMax})`;
|
|
|
|
|
+ } else if (warnName === '红色预警(特别重大风险)') {
|
|
|
|
|
+ warnObj.coTrend = `极端上升(${trendMin} - ${trendMax})`;
|
|
|
}
|
|
}
|
|
|
|
|
+ } else if (trendMin != null && trendMax == null) {
|
|
|
|
|
+ warnObj.coTrend = `极端上升>${trendMin}`;
|
|
|
}
|
|
}
|
|
|
- // HCL
|
|
|
|
|
- else if (deviceType === 'modelsensor_hcl') {
|
|
|
|
|
- if (fmin != null && fmax != null) {
|
|
|
|
|
- warnObj.hclRange = `${fmin} - ${fmax}`;
|
|
|
|
|
- } else if (fmin != null && fmax == null) {
|
|
|
|
|
- warnObj.hclRange = `≥ ${fmin}`;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ // 温度(带单位)
|
|
|
|
|
+ else if (deviceType === 'modelsensor_temperature') {
|
|
|
|
|
+ if (fmin != null && fmax != null) {
|
|
|
|
|
+ warnObj.tempRange = `${fmin} - ${fmax}℃`;
|
|
|
|
|
+ } else if (fmin != null && fmax == null) {
|
|
|
|
|
+ warnObj.tempRange = `≥ ${fmin}℃(持续高温)`;
|
|
|
|
|
+ } else if (trendMin != null) {
|
|
|
|
|
+ let unit = '';
|
|
|
|
|
+ if (trendCxTimeUnit === 0) unit = '分钟';
|
|
|
|
|
+ if (trendCxTimeUnit === 1) unit = '小时';
|
|
|
|
|
+ warnObj.tempTrend = `>+${trendMin}℃ /${unit}`;
|
|
|
}
|
|
}
|
|
|
- });
|
|
|
|
|
- result.push(warnObj);
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ // HCL
|
|
|
|
|
+ else if (deviceType === 'modelsensor_hcl') {
|
|
|
|
|
+ if (fmin != null && fmax != null) {
|
|
|
|
|
+ warnObj.hclRange = `${fmin} - ${fmax}`;
|
|
|
|
|
+ } else if (fmin != null && fmax == null) {
|
|
|
|
|
+ warnObj.hclRange = `≥ ${fmin}`;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
});
|
|
});
|
|
|
|
|
+ result.push(warnObj);
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
- return result;
|
|
|
|
|
- }
|
|
|
|
|
- // 刷新数据
|
|
|
|
|
- async function refresh() {
|
|
|
|
|
- // 由于模型中需要用到风门的监测数据,这里进行公共调用(后期精确调用风门)
|
|
|
|
|
- const modalRes = {};
|
|
|
|
|
- const systemParams = {
|
|
|
|
|
- devicetype: 'sys',
|
|
|
|
|
- systemID: optionValue.value,
|
|
|
|
|
- };
|
|
|
|
|
- const resSys = await getSystem(systemParams);
|
|
|
|
|
|
|
+ return result;
|
|
|
|
|
+}
|
|
|
|
|
+// 刷新数据
|
|
|
|
|
+async function refresh() {
|
|
|
|
|
+ // 由于模型中需要用到风门的监测数据,这里进行公共调用(后期精确调用风门)
|
|
|
|
|
+ const modalRes = {};
|
|
|
|
|
+ const systemParams = {
|
|
|
|
|
+ devicetype: 'sys',
|
|
|
|
|
+ systemID: optionValue.value,
|
|
|
|
|
+ };
|
|
|
|
|
+ const resSys = await getSystem(systemParams);
|
|
|
|
|
+ const params = {
|
|
|
|
|
+ sysId: optionValue.value,
|
|
|
|
|
+ monitorType: 2,
|
|
|
|
|
+ };
|
|
|
|
|
+ const warnInfo = await getWarnInfo(params);
|
|
|
|
|
+ const staffInfo = await getStaffInfo({ sysId: optionValue.value });
|
|
|
|
|
+ Object.assign(modalRes, resSys);
|
|
|
|
|
+ if (pageType.value == 'fire_risk_warn') {
|
|
|
|
|
+ configs.value = [...testBeltNew];
|
|
|
const params = {
|
|
const params = {
|
|
|
sysId: optionValue.value,
|
|
sysId: optionValue.value,
|
|
|
- monitorType: 2,
|
|
|
|
|
|
|
+ dataList: 'fire_risk_warn,warn_result,vehicle_co_correlate',
|
|
|
|
|
+ alarmLevel: '102,103,104',
|
|
|
};
|
|
};
|
|
|
- const warnInfo = await getWarnInfo(params);
|
|
|
|
|
- const staffInfo = await getStaffInfo({ sysId: optionValue.value });
|
|
|
|
|
- Object.assign(modalRes, resSys);
|
|
|
|
|
- if (pageType.value == 'fire_risk_warn') {
|
|
|
|
|
- configs.value = [...testBeltNew];
|
|
|
|
|
- const params = {
|
|
|
|
|
- sysId: optionValue.value,
|
|
|
|
|
- dataList: 'fire_risk_warn,warn_result,vehicle_co_correlate',
|
|
|
|
|
- alarmLevel: '102,103,104',
|
|
|
|
|
- };
|
|
|
|
|
- const resWarn = await getMonitorAndAlertBelt(params);
|
|
|
|
|
- resWarn.warnInfo = groupWarnByType(warnInfo);
|
|
|
|
|
- console.log(resWarn.warnInfo, '111111111');
|
|
|
|
|
- resWarn.staffInfo = staffInfo;
|
|
|
|
|
- updateData(resWarn);
|
|
|
|
|
- Object.assign(modalRes, resWarn);
|
|
|
|
|
- } else if (pageType.value == 'emergencyControl') {
|
|
|
|
|
- updateData(resSys);
|
|
|
|
|
- configs.value = [...testYjkf];
|
|
|
|
|
- const alarmParams = {
|
|
|
|
|
- sysId: optionValue.value,
|
|
|
|
|
- alarmLevel: '104',
|
|
|
|
|
- };
|
|
|
|
|
- const alarmRes = await getWarnResult(alarmParams);
|
|
|
|
|
- if (alarmRes.warn_result) {
|
|
|
|
|
- data.value.warn_result = alarmRes.warn_result;
|
|
|
|
|
- }
|
|
|
|
|
- data.value.warnInfo = groupWarnByType(warnInfo);
|
|
|
|
|
- data.value.staffInfo = staffInfo;
|
|
|
|
|
- updateData(data.value);
|
|
|
|
|
- } else if (pageType.value == 'sprayControl') {
|
|
|
|
|
- updateData(resSys);
|
|
|
|
|
- const params1 = {
|
|
|
|
|
- sysId: optionValue.value,
|
|
|
|
|
- alarmLevel: '103,104',
|
|
|
|
|
- };
|
|
|
|
|
- const sprayData = [];
|
|
|
|
|
- const dustData = [];
|
|
|
|
|
- if (data.value?.deviceInfo) {
|
|
|
|
|
- // 遍历对象的所有 value
|
|
|
|
|
- Object.values(data.value.deviceInfo).forEach((item) => {
|
|
|
|
|
- const hasSprayAuto = item.type && item.type.toLowerCase().includes('spray');
|
|
|
|
|
- if (hasSprayAuto) {
|
|
|
|
|
- sprayData.push({ ...item, ...item.readData });
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- Object.values(data.value.deviceInfo).forEach((item) => {
|
|
|
|
|
- const hasDustAuto = item.type && item.type.toLowerCase().includes('dustdev');
|
|
|
|
|
- if (hasDustAuto) {
|
|
|
|
|
- dustData.push({ ...item, ...item.readData });
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
- data.value.sprayData = sprayData;
|
|
|
|
|
- data.value.dustData = dustData;
|
|
|
|
|
- data.value.warnInfo = groupWarnByType(warnInfo);
|
|
|
|
|
- data.value.staffInfo = staffInfo;
|
|
|
|
|
- const alarmRes = await getWarnResult(params1);
|
|
|
|
|
- if (alarmRes.warn_result) {
|
|
|
|
|
- data.value.warn_result = alarmRes.warn_result;
|
|
|
|
|
- }
|
|
|
|
|
- configs.value = [...testSpary];
|
|
|
|
|
- } else {
|
|
|
|
|
- configs.value = testBeltNew;
|
|
|
|
|
|
|
+ const resWarn = await getMonitorAndAlertBelt(params);
|
|
|
|
|
+ resWarn.warnInfo = groupWarnByType(warnInfo);
|
|
|
|
|
+ console.log(resWarn.warnInfo, '111111111');
|
|
|
|
|
+ resWarn.staffInfo = staffInfo;
|
|
|
|
|
+ updateData(resWarn);
|
|
|
|
|
+ Object.assign(modalRes, resWarn);
|
|
|
|
|
+ } else if (pageType.value == 'emergencyControl') {
|
|
|
|
|
+ updateData(resSys);
|
|
|
|
|
+ configs.value = [...testYjkf];
|
|
|
|
|
+ const alarmParams = {
|
|
|
|
|
+ sysId: optionValue.value,
|
|
|
|
|
+ alarmLevel: '104',
|
|
|
|
|
+ };
|
|
|
|
|
+ const alarmRes = await getWarnResult(alarmParams);
|
|
|
|
|
+ if (alarmRes.warn_result) {
|
|
|
|
|
+ data.value.warn_result = alarmRes.warn_result;
|
|
|
|
|
+ }
|
|
|
|
|
+ data.value.warnInfo = groupWarnByType(warnInfo);
|
|
|
|
|
+ data.value.staffInfo = staffInfo;
|
|
|
|
|
+ updateData(data.value);
|
|
|
|
|
+ } else if (pageType.value == 'sprayControl') {
|
|
|
|
|
+ updateData(resSys);
|
|
|
|
|
+ const params1 = {
|
|
|
|
|
+ sysId: optionValue.value,
|
|
|
|
|
+ alarmLevel: '103,104',
|
|
|
|
|
+ };
|
|
|
|
|
+ const sprayData = [];
|
|
|
|
|
+ const dustData = [];
|
|
|
|
|
+ if (data.value?.deviceInfo) {
|
|
|
|
|
+ // 遍历对象的所有 value
|
|
|
|
|
+ Object.values(data.value.deviceInfo).forEach((item) => {
|
|
|
|
|
+ const hasSprayAuto = item.type && item.type.toLowerCase().includes('spray');
|
|
|
|
|
+ if (hasSprayAuto) {
|
|
|
|
|
+ sprayData.push({ ...item, ...item.readData });
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ Object.values(data.value.deviceInfo).forEach((item) => {
|
|
|
|
|
+ const hasDustAuto = item.type && item.type.toLowerCase().includes('dustdev');
|
|
|
|
|
+ if (hasDustAuto) {
|
|
|
|
|
+ dustData.push({ ...item, ...item.readData });
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ data.value.sprayData = sprayData;
|
|
|
|
|
+ data.value.dustData = dustData;
|
|
|
|
|
+ data.value.warnInfo = groupWarnByType(warnInfo);
|
|
|
|
|
+ data.value.staffInfo = staffInfo;
|
|
|
|
|
+ const alarmRes = await getWarnResult(params1);
|
|
|
|
|
+ if (alarmRes.warn_result) {
|
|
|
|
|
+ data.value.warn_result = alarmRes.warn_result;
|
|
|
}
|
|
}
|
|
|
- modalMonitorData.value = modalRes;
|
|
|
|
|
|
|
+ configs.value = [...testSpary];
|
|
|
|
|
+ } else {
|
|
|
|
|
+ configs.value = testBeltNew;
|
|
|
}
|
|
}
|
|
|
|
|
+ modalMonitorData.value = modalRes;
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
- // // 定时刷新
|
|
|
|
|
- function initInterval() {
|
|
|
|
|
- if (timer) clearInterval(timer);
|
|
|
|
|
- timer = setInterval(() => {
|
|
|
|
|
- refresh();
|
|
|
|
|
- }, 60000);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+// // 定时刷新
|
|
|
|
|
+function initInterval() {
|
|
|
|
|
+ if (timer) clearInterval(timer);
|
|
|
|
|
+ timer = setInterval(() => {
|
|
|
|
|
+ refresh();
|
|
|
|
|
+ }, 60000);
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
- async function changePage(pageTypeStr) {
|
|
|
|
|
- const target = pageTypeStr || route.query.pageType || 'fire_risk_warn';
|
|
|
|
|
- if (pageType.value === target) return;
|
|
|
|
|
- pageType.value = target;
|
|
|
|
|
- configs.value = pageCache.value[target]?.configs || testBeltNew;
|
|
|
|
|
- await nextTick();
|
|
|
|
|
- await refresh();
|
|
|
|
|
- }
|
|
|
|
|
- // watch(
|
|
|
|
|
- // // 监听动态路由参数 :type
|
|
|
|
|
- // () => route.params.type,
|
|
|
|
|
- // (newVal) => {
|
|
|
|
|
- // if (newVal) {
|
|
|
|
|
- // console.log('切换页面类型:', newVal);
|
|
|
|
|
- // refresh(); // 切换路由自动刷新
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // );
|
|
|
|
|
|
|
+async function changePage(pageTypeStr) {
|
|
|
|
|
+ const target = pageTypeStr || route.query.pageType || 'fire_risk_warn';
|
|
|
|
|
+ if (pageType.value === target) return;
|
|
|
|
|
+ pageType.value = target;
|
|
|
|
|
+ configs.value = pageCache.value[target]?.configs || testBeltNew;
|
|
|
|
|
+ await nextTick();
|
|
|
|
|
+ await refresh();
|
|
|
|
|
+}
|
|
|
|
|
+// watch(
|
|
|
|
|
+// // 监听动态路由参数 :type
|
|
|
|
|
+// () => route.params.type,
|
|
|
|
|
+// (newVal) => {
|
|
|
|
|
+// if (newVal) {
|
|
|
|
|
+// console.log('切换页面类型:', newVal);
|
|
|
|
|
+// refresh(); // 切换路由自动刷新
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+// );
|
|
|
|
|
|
|
|
- function initModalAnimate(modal3D) {
|
|
|
|
|
- modal = modal3D;
|
|
|
|
|
- modal.isRender = true;
|
|
|
|
|
- modalAnimate(modal, modalMonitorData);
|
|
|
|
|
|
|
+function initModalAnimate(modal3D) {
|
|
|
|
|
+ modal = modal3D;
|
|
|
|
|
+ modal.isRender = true;
|
|
|
|
|
+ modalAnimate(modal, modalMonitorData);
|
|
|
|
|
+}
|
|
|
|
|
+function clearTimer() {
|
|
|
|
|
+ if (timer) {
|
|
|
|
|
+ clearInterval(timer);
|
|
|
|
|
+ timer = null;
|
|
|
}
|
|
}
|
|
|
- function clearTimer() {
|
|
|
|
|
- if (timer) {
|
|
|
|
|
- clearInterval(timer);
|
|
|
|
|
- timer = null;
|
|
|
|
|
|
|
+}
|
|
|
|
|
+watch(
|
|
|
|
|
+ () => route.query.pageType,
|
|
|
|
|
+ (newQueryType) => {
|
|
|
|
|
+ if (newQueryType) {
|
|
|
|
|
+ changePage(newQueryType as string);
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- watch(
|
|
|
|
|
- () => route.query.pageType,
|
|
|
|
|
- (newQueryType) => {
|
|
|
|
|
- if (newQueryType) {
|
|
|
|
|
- changePage(newQueryType as string);
|
|
|
|
|
- }
|
|
|
|
|
- },
|
|
|
|
|
- { immediate: true } // 初始化立刻执行
|
|
|
|
|
- );
|
|
|
|
|
|
|
+ },
|
|
|
|
|
+ { immediate: true } // 初始化立刻执行
|
|
|
|
|
+);
|
|
|
|
|
|
|
|
- watch(
|
|
|
|
|
- () => modalMonitorData.value,
|
|
|
|
|
- (newData, oldData) => {
|
|
|
|
|
- if (newData && !Object.keys(oldData).length) {
|
|
|
|
|
- isInitModal.value = true;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+watch(
|
|
|
|
|
+ () => modalMonitorData.value,
|
|
|
|
|
+ (newData, oldData) => {
|
|
|
|
|
+ if (newData && !Object.keys(oldData).length) {
|
|
|
|
|
+ isInitModal.value = true;
|
|
|
}
|
|
}
|
|
|
- );
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+);
|
|
|
|
|
|
|
|
- onMounted(async () => {
|
|
|
|
|
- await getSysDataSource();
|
|
|
|
|
- await refresh();
|
|
|
|
|
- initInterval();
|
|
|
|
|
- });
|
|
|
|
|
- onUnmounted(() => {
|
|
|
|
|
- clearTimer();
|
|
|
|
|
- destroy(modal);
|
|
|
|
|
- modal?.destroy();
|
|
|
|
|
- });
|
|
|
|
|
|
|
+onMounted(async () => {
|
|
|
|
|
+ await getSysDataSource();
|
|
|
|
|
+ await refresh();
|
|
|
|
|
+ initInterval();
|
|
|
|
|
+});
|
|
|
|
|
+onUnmounted(() => {
|
|
|
|
|
+ clearTimer();
|
|
|
|
|
+ destroy(modal);
|
|
|
|
|
+ modal?.destroy();
|
|
|
|
|
+});
|
|
|
</script>
|
|
</script>
|
|
|
<style lang="less" scoped>
|
|
<style lang="less" scoped>
|
|
|
- .company-home {
|
|
|
|
|
- background: url('/@/assets/images/beltFire/baseMap.png') no-repeat center;
|
|
|
|
|
|
|
+.company-home {
|
|
|
|
|
+ background: url('/@/assets/images/beltFire/baseMap.png') no-repeat center;
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ height: 100%;
|
|
|
|
|
+ color: @white;
|
|
|
|
|
+ position: relative;
|
|
|
|
|
+ font-family: 'Microsoft YaHei', sans-serif;
|
|
|
|
|
+ .top-bg {
|
|
|
width: 100%;
|
|
width: 100%;
|
|
|
- height: 100%;
|
|
|
|
|
- color: @white;
|
|
|
|
|
|
|
+ height: 56px;
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ margin-top: 10px;
|
|
|
|
|
+ z-index: 1;
|
|
|
|
|
+ }
|
|
|
|
|
+ .header-container {
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ top: 20px;
|
|
|
|
|
+ left: 20px;
|
|
|
|
|
+ z-index: 10;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .border {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ height: 94%;
|
|
|
|
|
+ background: url('/@/assets/images/beltFire/mainbj.png') no-repeat;
|
|
|
|
|
+ background-size: 100% 100%;
|
|
|
position: relative;
|
|
position: relative;
|
|
|
- font-family: 'Microsoft YaHei', sans-serif;
|
|
|
|
|
- .top-bg {
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- height: 56px;
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- margin-top: 10px;
|
|
|
|
|
- z-index: 1;
|
|
|
|
|
- }
|
|
|
|
|
- .header-container {
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- top: 20px;
|
|
|
|
|
- left: 20px;
|
|
|
|
|
- z-index: 10;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
- .border {
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- height: 94%;
|
|
|
|
|
- background: url('/@/assets/images/beltFire/mainbj.png') no-repeat;
|
|
|
|
|
- background-size: 100% 100%;
|
|
|
|
|
- position: relative;
|
|
|
|
|
- width: 100%;
|
|
|
|
|
|
|
+.center-warning-container {
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ left: 50%;
|
|
|
|
|
+ transform: translateX(-50%);
|
|
|
|
|
+ top: 50%;
|
|
|
|
|
+ width: 600px;
|
|
|
|
|
+ height: 200px;
|
|
|
|
|
+ background-color: rgba(0, 0, 0, 0.7);
|
|
|
|
|
+ border-radius: 10px;
|
|
|
|
|
+ padding: 15px;
|
|
|
|
|
+ box-shadow: 0 0 20px rgba(0, 255, 255, 0.3);
|
|
|
|
|
+ z-index: 5;
|
|
|
|
|
+ color: #fff;
|
|
|
|
|
+
|
|
|
|
|
+ .warning-header {
|
|
|
|
|
+ font-size: 18px;
|
|
|
|
|
+ font-weight: bold;
|
|
|
|
|
+ margin-bottom: 10px;
|
|
|
|
|
+ color: #ff6b6b;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .warning-list {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ height: 100%;
|
|
|
|
|
+ overflow-y: auto;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ gap: 8px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .warning-item {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ padding: 8px;
|
|
|
|
|
+ background-color: rgba(0, 0, 0, 0.5);
|
|
|
|
|
+ border-radius: 5px;
|
|
|
|
|
+ border-left: 4px solid #ff6b6b;
|
|
|
|
|
+
|
|
|
|
|
+ .warning-time {
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ color: #ccc;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 中间预警结果区
|
|
|
.center-warning-container {
|
|
.center-warning-container {
|
|
|
position: absolute;
|
|
position: absolute;
|
|
|
left: 50%;
|
|
left: 50%;
|
|
@@ -416,113 +441,67 @@
|
|
|
font-size: 14px;
|
|
font-size: 14px;
|
|
|
color: #ccc;
|
|
color: #ccc;
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 中间预警结果区
|
|
|
|
|
- .center-warning-container {
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- left: 50%;
|
|
|
|
|
- transform: translateX(-50%);
|
|
|
|
|
- top: 50%;
|
|
|
|
|
- width: 600px;
|
|
|
|
|
- height: 200px;
|
|
|
|
|
- background-color: rgba(0, 0, 0, 0.7);
|
|
|
|
|
- border-radius: 10px;
|
|
|
|
|
- padding: 15px;
|
|
|
|
|
- box-shadow: 0 0 20px rgba(0, 255, 255, 0.3);
|
|
|
|
|
- z-index: 5;
|
|
|
|
|
- color: #fff;
|
|
|
|
|
|
|
|
|
|
- .warning-header {
|
|
|
|
|
- font-size: 18px;
|
|
|
|
|
|
|
+ .warning-level {
|
|
|
|
|
+ font-size: 14px;
|
|
|
font-weight: bold;
|
|
font-weight: bold;
|
|
|
- margin-bottom: 10px;
|
|
|
|
|
- color: #ff6b6b;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .warning-list {
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- height: 100%;
|
|
|
|
|
- overflow-y: auto;
|
|
|
|
|
- display: flex;
|
|
|
|
|
- flex-direction: column;
|
|
|
|
|
- gap: 8px;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .warning-item {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- justify-content: space-between;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- padding: 8px;
|
|
|
|
|
- background-color: rgba(0, 0, 0, 0.5);
|
|
|
|
|
- border-radius: 5px;
|
|
|
|
|
- border-left: 4px solid #ff6b6b;
|
|
|
|
|
-
|
|
|
|
|
- .warning-time {
|
|
|
|
|
- font-size: 14px;
|
|
|
|
|
- color: #ccc;
|
|
|
|
|
|
|
+ padding: 4px 8px;
|
|
|
|
|
+ border-radius: 4px;
|
|
|
|
|
+ &.level-critical {
|
|
|
|
|
+ background-color: #ff6b6b;
|
|
|
|
|
+ color: white;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- .warning-level {
|
|
|
|
|
- font-size: 14px;
|
|
|
|
|
- font-weight: bold;
|
|
|
|
|
- padding: 4px 8px;
|
|
|
|
|
- border-radius: 4px;
|
|
|
|
|
- &.level-critical {
|
|
|
|
|
- background-color: #ff6b6b;
|
|
|
|
|
- color: white;
|
|
|
|
|
- }
|
|
|
|
|
- &.level-high {
|
|
|
|
|
- background-color: #ffcc00;
|
|
|
|
|
- color: black;
|
|
|
|
|
- }
|
|
|
|
|
- &.level-normal {
|
|
|
|
|
- background-color: #66cc66;
|
|
|
|
|
- color: white;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ &.level-high {
|
|
|
|
|
+ background-color: #ffcc00;
|
|
|
|
|
+ color: black;
|
|
|
|
|
+ }
|
|
|
|
|
+ &.level-normal {
|
|
|
|
|
+ background-color: #66cc66;
|
|
|
|
|
+ color: white;
|
|
|
}
|
|
}
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- .warning-action {
|
|
|
|
|
- .btn-start-spray {
|
|
|
|
|
- background-color: #00e1ff;
|
|
|
|
|
- color: #000;
|
|
|
|
|
- border: none;
|
|
|
|
|
- padding: 4px 10px;
|
|
|
|
|
- border-radius: 4px;
|
|
|
|
|
- cursor: pointer;
|
|
|
|
|
- font-size: 12px;
|
|
|
|
|
- transition: all 0.3s;
|
|
|
|
|
- &:hover {
|
|
|
|
|
- background-color: #00c3e6;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ .warning-action {
|
|
|
|
|
+ .btn-start-spray {
|
|
|
|
|
+ background-color: #00e1ff;
|
|
|
|
|
+ color: #000;
|
|
|
|
|
+ border: none;
|
|
|
|
|
+ padding: 4px 10px;
|
|
|
|
|
+ border-radius: 4px;
|
|
|
|
|
+ cursor: pointer;
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ transition: all 0.3s;
|
|
|
|
|
+ &:hover {
|
|
|
|
|
+ background-color: #00c3e6;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- // 巷道示意图
|
|
|
|
|
- .belt-diagram {
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- left: 50%;
|
|
|
|
|
- transform: translateX(-50%);
|
|
|
|
|
- bottom: 50px;
|
|
|
|
|
- width: 800px;
|
|
|
|
|
- height: 100px;
|
|
|
|
|
- display: flex;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
|
|
+ // 巷道示意图
|
|
|
|
|
+ .belt-diagram {
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ left: 50%;
|
|
|
|
|
+ transform: translateX(-50%);
|
|
|
|
|
+ bottom: 50px;
|
|
|
|
|
+ width: 800px;
|
|
|
|
|
+ height: 100px;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
|
|
|
- img {
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- height: 100%;
|
|
|
|
|
- object-fit: contain;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ img {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ height: 100%;
|
|
|
|
|
+ object-fit: contain;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- .modal-box {
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- height: 100%;
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- z-index: 1;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+}
|
|
|
|
|
+.modal-box {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ height: 100%;
|
|
|
|
|
+ position: absolute;
|
|
|
|
|
+ z-index: 1;
|
|
|
|
|
+}
|
|
|
</style>
|
|
</style>
|