You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1638 lines
57 KiB

<template>
<div class="tabs">
<div :class="{'active': currentTab === 'MWR'}" class="tab-item"
@click="onTabClick('MWR')">
质控对比
<img v-if="currentTab === 'MWR'" src="/images/line.png"/>
</div>
<div :class="{'active': currentTab === 'boundary-layer-height'}" class="tab-item"
@click="onTabClick('boundary-layer-height')">
水汽
<img v-if="currentTab === 'boundary-layer-height'" src="/images/line.png"/>
</div>
<div :class="{'active': currentTab === 'optical-property'}" class="tab-item"
@click="onTabClick('optical-property')">
光学特性
<img v-if="currentTab === 'optical-property'" src="/images/line.png"/>
</div>
<div :class="{'active': currentTab === 'aerosol-product'}" class="tab-item"
@click="onTabClick('aerosol-product')">
气溶胶产品
<img v-if="currentTab === 'aerosol-product'" src="/images/line.png"/>
</div>
<div :class="{'active': currentTab === 'BingoCloud'}" class="tab-item" @click="onTabClick('BingoCloud')">
云产品
<img v-if="currentTab === 'BingoCloud'" src="/images/line.png"/>
</div>
</div>
<div class="main">
<div class="menu panel">
<div class="menu-item">
<h2 class="tip">区域选择</h2>
<el-row :gutter="12">
<el-col :span="8"><span @click="onRegionClick('jn')"
:class="{'active': currentRegion === 'jn'}">江宁</span></el-col>
<el-col :span="8"><span @click="onRegionClick('liuhe')"
:class="{'active': currentRegion === 'liuhe'}">六合</span></el-col>
<el-col :span="8"><span @click="onRegionClick('pk')"
:class="{'active': currentRegion === 'pk'}">浦口</span></el-col>
</el-row>
</div>
<div class="menu-item">
<h2 class="tip">要素选择</h2>
<el-row :gutter="12">
<el-col :span="24" v-for="(item, index) in elementData" :key = 'index'>
<span @click="onElementClick(item.value)"
:class="{'active': currentElement === item.value}">{{ item.label }}</span></el-col>
</el-row>
</div>
</div>
<div class="container panel">
<div class="toolbar day-toolbar" v-if="currentElement === 'singleWatervapor' || currentElement === 'aod-icot-wcot'
|| currentElement === 'extinctionOptics' || currentElement === 'backscatter'
|| currentElement === 'pm2_5' || currentElement === 'pblh'
|| currentElement === 'cloudSol' || currentElement === 'cloudbaseheight'
|| currentElement === 'cloudtopheight'">
<div class="times">
<div class="time-item" v-for="(time, index) in times" :key="index"
:class="{'active': currentTime === time.date, 'first-hour': time.hour === '00'}">
<span class="hour">{{ time.day }}</span>
<span class="time" @click="onTimeClick(time, index)">{{ time.hour }}</span>
</div>
</div>
<el-date-picker v-model="date" type="date" placeholder="请选择" :clearable="false" :editable="false"
class="date-picker" @change="onChange">
</el-date-picker>
<div class="control-btn">
<span @click="onPrevDayClick"><img src="/images/prev.png"/></span>
<span @click="onNextDayClick"><img src="/images/next.png"/></span>
</div>
</div>
<div class="toolbar day-toolbar" v-if="currentElement === 'extinction' || currentElement=== 'lidarratio' || currentElement === 'watervapor'">
<div class="times">
<div class="time-item" v-for="(time, index) in times" :key="index"
:class="{'active': currentTime === time.date, 'first-hour': time.day === '01'}">
<span class="hour" style="padding-left: 10px">{{ time.month }}</span>
<span class="time" @click="onDayClick(time, index)">{{ time.day }}</span>
</div>
</div>
<el-date-picker v-model="date" type="date" placeholder="请选择" :clearable="false" :editable="false"
class="date-picker" @change="onChange">
</el-date-picker>
<div class="control-btn">
<span @click="onPrevDayTimeClick"><img src="/images/prev.png"/></span>
<span @click="onNextDayTimeClick"><img src="/images/next.png"/></span>
</div>
</div>
<div class="picture-view">
<div class="picture-container raman-picture-container" v-show="currentElement === 'singleWatervapor'">
<div class="picture special-picture">
<div v-loading="loadingWaterVaporSingleStatus"
style="width: 100%;height: 100%"
custom-class="loading"
element-loading-text="加载中">
<canvas id='watervapor_single_chart'></canvas>
</div>
</div>
</div>
<div class="picture-container raman-picture-container" v-show=" currentElement=== 'aod-icot-wcot'">
<div class="picture">
<div id="opticalThickness"
style="width: 1000px;height: 450px;margin-top: 66px"
v-loading="loadingOpticalThicknessStatus"
custom-class="loading"
element-loading-text="加载中">
</div>
</div>
</div>
<div class="picture-container raman-picture-container" v-show = "currentElement=== 'extinctionOptics'">
<div class="picture special-picture">
<div v-loading="loadingExtinctionOpticsStatus"
style="width: 100%;height: 100%"
custom-class="loading"
element-loading-text="加载中">
<canvas id='extinction_optics_chart'></canvas>
</div>
</div>
</div>
<div class="picture-container raman-picture-container" v-show="currentElement=== 'backscatter'">
<div class="picture special-picture">
<div v-loading="loadingBackscatterStatus"
style="width: 100%;"
custom-class="loading"
element-loading-text="加载中">
<canvas id='backscatter_chart'></canvas>
</div>
</div>
</div>
<div class="picture-container raman-picture-container" v-show="currentElement=== 'pm2_5'">
<div class="picture special-picture">
<div v-loading="loadingPmStatus"
style="width: 100%;"
custom-class="loading"
element-loading-text="加载中">
<canvas id='pm2_5_chart'></canvas>
</div>
</div>
<div class="picture special-picture">
<div v-loading="loadingPmStatus"
style="width: 100%;"
custom-class="loading"
element-loading-text="加载中">
<canvas id='pm10_chart'></canvas>
</div>
</div>
</div>
<div class="picture-container raman-picture-container" v-show="currentElement=== 'pblh'">
<div class="picture">
<div id="BoundaryLayerHeight"
style="width: 1000px;height: 450px;margin-top: 66px"
v-loading="loadingBoundaryLayerHeightStatus"
custom-class="loading"
element-loading-text="加载中"></div>
</div>
</div>
<div class="picture-container raman-picture-container" v-show="currentElement=== 'lidarratio'">
<div class="picture">
<div id="LidarRatio"
style="width: 1000px;height: 450px;margin-top: 66px"
v-loading="loadingLidarRatioStatus"
custom-class="loading"
element-loading-text="加载中">
</div>
</div>
</div>
<div class="picture-container raman-picture-container" v-show="currentElement=== 'cloudSol'">
<div class="picture special-picture">
<div v-loading="loadingCloudSolStatus"
style="width: 100%;"
custom-class="loading"
element-loading-text="加载中">
<canvas id='cloud_sol_chart'></canvas>
</div>
</div>
</div>
<div class="picture-container raman-picture-container" v-show="currentElement=== 'cloudbaseheight'">
<div class="picture special-picture">
<div id="cloudsHeight"
style="width: 1000px;height: 450px;margin-top: 66px"
v-loading="loadingCloudsHeightStatus"
custom-class="loading"
element-loading-text="加载中"></div>
</div>
</div>
<div class="picture-container raman-picture-container" v-show="currentElement=== 'cloudtopheight'">
<div class="picture special-picture">
<div id="cloudTopHeight"
style="width: 1000px;height: 450px;margin-top: 66px"
v-loading="loadingCloudTopHeightStatus"
custom-class="loading"
element-loading-text="加载中"></div>
</div>
</div>
<!-- <div class="picture-container raman-picture-container" v-show="currentElement === 'layertype'">-->
<!-- <div class="picture special-picture">-->
<!--&lt;!&ndash; <h2 class="title">云的识别</h2>&ndash;&gt;-->
<!-- <div v-loading="loadingCloudRecognitionStatus"-->
<!-- style="width: 100%;"-->
<!-- custom-class="loading"-->
<!-- element-loading-text="加载中">-->
<!-- <canvas id='cloud_recognition_chart'></canvas>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<div class="picture-container raman-picture-container" v-show="currentElement === 'extinction'">
<div class="picture special-picture">
<div v-loading="loadingExtinctionStatus"
style="width: 100%;"
custom-class="loading"
element-loading-text="加载中">
<canvas id='extinction_chart-before'></canvas>
</div>
</div>
<div class="picture special-picture">
<div v-loading="loadingExtinctionStatus"
style="width: 100%;"
custom-class="loading"
element-loading-text="加载中">
<canvas id='extinction_chart-after'></canvas>
</div>
</div>
</div>
<div class="picture-container raman-picture-container" v-show="currentElement === 'watervapor'">
<div class="picture special-picture">
<div v-loading="loadingWaterVaporStatus"
style="width: 100%"
element-loading-text="加载中">
<canvas id='watervapor_chart-before'></canvas>
</div>
</div>
<div class="picture special-picture">
<div v-loading="loadingWaterVaporStatus"
style="width: 100%"
element-loading-text="加载中">
<canvas id='watervapor_chart-after'></canvas>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts">
import {onMounted, reactive, toRefs, watch} from 'vue';
import moment from "moment";
import {RamanLidarConfig} from '../uilts/Config';
import {post} from '../uilts/axios';
import {ElMessage} from "element-plus";
import {ConstantRamanLidar} from "../model/constant";
import {get} from '../uilts/axios';
import {HighChartCreate} from "../model/high-chart-create";
import {CustomeArray} from "../model/custome-array"
import {CoordinateScale, HeatMapDrawer} from "../model/heat-map-drawer";
import {Box, ColorChart, createEmptyCanvas} from '../uilts/box-drawer';
import axiosStore from '../uilts/AxiosStore';
export default {
name: 'RamanLidar',
setup() {
let timer = null;
let creates: {
boundaryLayerHeight: HighChartCreate
cloudsHeight: HighChartCreate
cloudTopHeight: HighChartCreate
LidarRatio: HighChartCreate,
opticalThickness: HighChartCreate,
cloudRecognitionDrawer: HeatMapDrawer,
extinctionDrawer: HeatMapDrawer,
watervaporDrawer: HeatMapDrawer,
opticsExtinctionDrawer: HeatMapDrawer,
singleWatervaporDrawer: HeatMapDrawer,
cloudSolDrawer: HeatMapDrawer,
pm2Point5Drawer: HeatMapDrawer,
pm10Drawer: HeatMapDrawer,
backscatterDrawer: HeatMapDrawer,
} = {
boundaryLayerHeight: null,
cloudsHeight: null,
cloudTopHeight: null,
LidarRatio: null,
opticalThickness: null,
cloudRecognitionDrawer: null,
extinctionDrawer: null,
watervaporDrawer: null,
singleWatervaporDrawer: null,
opticsExtinctionDrawer: null,
cloudSolDrawer: null,
pm2Point5Drawer: null,
pm10Drawer: null,
backscatterDrawer: null
}
let options = reactive({
currentTab: 'MWR',
currentRegion: 'jn',
// currentElement: 'PBLH',
currentType: '边界层高度',
// date: moment('2022-04-01 12:00:00').format('YYYY-MM-DD HH:mm:ss'),
date: moment().format('YYYY-MM-DD HH:mm:ss'),
times: [],
currentTime: null,
downloadImgUrl: '/images/default-picture.png',
imgUrl: '/images/default-picture.png',
signalPBLHImgUrl: '/images/default-picture.png',
previewUrl: [],
signalPBLHPreviewUrl: [],
isPlay: false,
title: null,
index: 0,
downloadSrc: null,
urls: [],
boundaryLayerHeightList: [],
LidarRatioList: [],
cloudsHeightList: [],
cloudTopHeightList: [],
loadingWaterVaporSingleStatus: false,
loadingExtinctionOpticsStatus: false,
loadingPmStatus: false,
loadingCloudSolStatus: false,
loadingCloudRecognitionStatus: false,
loadingExtinctionStatus: false,
loadingWaterVaporStatus: false,
loadingBackscatterStatus: false,
loadingLidarRatioStatus: false,
loadingBoundaryLayerHeightStatus: false,
loadingCloudsHeightStatus: false,
loadingCloudTopHeightStatus: false,
loadingOpticalThicknessStatus: false,
currentHour: 0,
timeArray: [],
chartsData: [],
chartTimeData: [],
elementData: [
{
value: 'layertype',
label: '云的识别'
},
{
value: 'extinction',
label: '消光系数'
},
{
value: 'watervapor',
label: '水汽'
}],
currentElement: 'layertype',
timeLineFormat: 'hour'
})
onMounted(() => {
// initTimeLine();
initTimeLineDay();
// setTitle(moment(options.date, 'YYYY-MM-DD'));
setTimeout(() => {
initEcharts(options.currentTab)
reloadChangeData();
}, 50);
})
//边界层高度
const boundaryLayerHeightInit = () => {
creates.boundaryLayerHeight = new HighChartCreate('BoundaryLayerHeight');
creates.boundaryLayerHeight.setChart(false,'line', 1000);
creates.boundaryLayerHeight.setXAxisTypeDate();
creates.boundaryLayerHeight.setYAxis('边界层高度(m)');
creates.boundaryLayerHeight.setLegend();
creates.boundaryLayerHeight.setTooltip('高度: {point.y}');
creates.boundaryLayerHeight.setSeries('边界层高度',0, null, null, '#3636FF')
creates.boundaryLayerHeight.init();
}
//云层高度
const cloudsHeightInit = () => {
creates.cloudsHeight = new HighChartCreate('cloudsHeight');
creates.cloudsHeight.setChart(false, 'scatter', 1000);
// creates.cloudsHeight.setSpecialXAxis('时间(小时)', 24, 0, 2);
creates.cloudsHeight.setXAxisTypeDate();
creates.cloudsHeight.setYAxis('高度(m)');
creates.cloudsHeight.setLegend();
creates.cloudsHeight.setTooltip('高度: {point.y}');
creates.cloudsHeight.setSeries('云层高度')
creates.cloudsHeight.init();
}
//云顶高度
const cloudTopHeightInit = () => {
creates.cloudTopHeight = new HighChartCreate('cloudTopHeight');
creates.cloudTopHeight.setChart(false, 'scatter', 1000);
// creates.cloudTopHeight.setSpecialXAxis('时间(小时)', 24, 0, 2);
creates.cloudTopHeight.setXAxisTypeDate();
creates.cloudTopHeight.setYAxis('高度(m)');
creates.cloudTopHeight.setLegend();
creates.cloudTopHeight.setTooltip('高度: {point.y}');
creates.cloudTopHeight.setSeries('云顶高度')
creates.cloudTopHeight.init();
}
//激光雷达比
const LidarRatioInit = () => {
creates.LidarRatio = new HighChartCreate('LidarRatio');
creates.LidarRatio.setChart(false,'line', 1000);
creates.LidarRatio.setSpecialXAxis('sr', 120, 0, 20);
creates.LidarRatio.setYAxis('高度(m)');
creates.LidarRatio.setLegend();
creates.LidarRatio.setTooltip('高度: {point.y}');
creates.LidarRatio.setSeries('激光雷达比', 0, null, null, '#3636FF')
creates.LidarRatio.init();
}
//光学厚度
const opticalThicknessInit = () => {
creates.opticalThickness = new HighChartCreate('opticalThickness');
creates.opticalThickness.setChart(false,'line', 1000);
// creates.opticalThickness.setSpecialXAxis('时间(小时)', 24, 0, 2);
// creates.opticalThickness.setXAxis('时间(天/时)', false);
creates.opticalThickness.setXAxisTypeDate();
creates.opticalThickness.setYAxis('光学厚度');
creates.opticalThickness.setLegend(true);
creates.opticalThickness.setTooltip('{point.y}');
creates.opticalThickness.setSeries('气溶胶', 0, null, null, '#FF5352')
creates.opticalThickness.setSeries('冰云', 0, null, null, '#5050FD')
creates.opticalThickness.setSeries('水云', 0, null, null, '#58FE5F')
creates.opticalThickness.init();
}
const onTabClick = (name) => {
changeTimeLineFormat(name);
options.currentTab = name;
initEcharts(name)
reloadChangeData()
}
const changeTimeLineFormat = (name) => {
if (name === 'MWR'){
initTimeLineDay();
return;
}
initTimeLine();
}
const reloadChangeData = () => {
cancelRequest();
onMenuChange()
elementChange(options.currentElement)
}
const onMenuChange = () => {
options.elementData = []
if (options.currentTab === 'boundary-layer-height') {
options.currentElement = 'singleWatervapor'
options.elementData = [
{
value: 'singleWatervapor',
label: '水汽'
}]
} else if (options.currentTab === 'optical-property') {
options.currentElement = 'aod-icot-wcot'
options.elementData = [
{
value: 'aod-icot-wcot',
label: '光学厚度'
},
{
value: 'extinctionOptics',
label: '消光系数'
},
{
value: 'backscatter',
label: '后向散射系数'
}]
} else if (options.currentTab === 'aerosol-product') {
options.currentElement = 'pm2_5'
options.elementData = [
{
value: 'pm2_5',
label: '气溶胶PM'
},
{
value: 'pblh',
label: '边界层高度'
},
{
value: 'lidarratio',
label: '激光雷达比'
}]
} else if (options.currentTab === 'BingoCloud') {
options.currentElement = 'cloudSol'
options.elementData = [
{
value: 'cloudSol',
label: '云气溶胶分类'
},
{
value: 'cloudbaseheight',
label: '云底高度'
},
{
value: 'cloudtopheight',
label: '云顶高度'
}]
} else if (options.currentTab === 'MWR') {
options.currentElement = 'extinction'
options.elementData = [
{
value: 'extinction',
label: '消光系数'
},
{
value: 'watervapor',
label: '水汽'
}]
}
}
const elementChange = (code: string) => {
switch (code) {
case 'singleWatervapor' :
// initTimeLine()
reloadCloudRecognition('singleWatervapor', 101, 'watervapor', drawSingleWatervapor);
break;
case 'aod-icot-wcot' :
// initTimeLine()
reloadChartsRecognition('aod', drawAerosolCharts);
reloadChartsRecognition('icot', drawIceCloudsCharts);
reloadChartsRecognition('wcot', drawWaterCloud);
break;
case 'extinctionOptics' :
// initTimeLine()
reloadCloudRecognition('extinctionOptics', 801, 'extinction', drawOpticsExtinction);
break;
case 'backscatter' :
// initTimeLine()
reloadCloudRecognition('backscatter', 801, 'backscatter', drawBackscatter);
break;
case 'pm2_5' :
// initTimeLine()
reloadCloudRecognition('pm2_5', 201, 'pm2_5', drawPm2Point5);
reloadCloudRecognition('pm2_5', 201, 'pm10', drawPm10);
break;
case 'pblh' :
initTimeLine()
reloadChartsRecognition('pblh', drawBoundaryLayerCharts);
break;
case 'lidarratio' :
initTimeLineDay()
reloadChartLidarratio('lidarratio', drawLidarRatioCharts);
break;
case 'cloudSol' :
initTimeLine()
reloadCloudRecognition('cloudSol', 801, 'layertype', drawCloudSol);
break;
case 'cloudbaseheight' :
// initTimeLine()
reloadChartsRecognition('cloudbaseheight', drawCloudsHeightCharts);
break;
case 'cloudtopheight' :
// initTimeLine()
reloadChartsRecognition('cloudtopheight', drawCloudTopHeightCharts);
break;
// case 'layertype' :
// reloadCloudRecognition('layertype', 801, 'layertype', drawCloudRecognition);
// break;
case 'extinction' :
// initTimeLineDay()
reloadCloudRecognition('extinction', 801, 'extinction', drawExtinctionBefore);
reloadCloudRecognition('extinction', 801, 'extinction', drawExtinctionAfter);
break;
case 'watervapor' :
// initTimeLineDay()
reloadCloudRecognition('watervapor', 101, 'watervapor', drawWatervaporBefore);
reloadCloudRecognition('watervapor', 101, 'watervapor', drawWatervaporAfter);
break;
default:
throw new Error("无效的type类型");
}
}
const preprocessing = (type: string) => {
switch (type) {
case 'layertype':
options.loadingCloudRecognitionStatus = true;
clearHeatMapDrawer(creates.cloudRecognitionDrawer);
break;
case 'extinction':
options.loadingExtinctionStatus = true;
clearHeatMapDrawer(creates.extinctionDrawer);
break;
case 'watervapor':
options.loadingWaterVaporStatus = true;
clearHeatMapDrawer(creates.watervaporDrawer);
break;
case 'cloudSol':
options.loadingCloudSolStatus = true;
clearHeatMapDrawer(creates.cloudSolDrawer);
break;
case 'pm2_5':
options.loadingPmStatus = true;
clearHeatMapDrawer(creates.pm2Point5Drawer);
break;
case 'pm10':
options.loadingPmStatus = true;
clearHeatMapDrawer(creates.pm10Drawer);
break;
case 'extinctionOptics':
options.loadingExtinctionOpticsStatus = true;
clearHeatMapDrawer(creates.opticsExtinctionDrawer);
break;
case 'singleWatervapor':
options.loadingWaterVaporSingleStatus = true;
clearHeatMapDrawer(creates.singleWatervaporDrawer);
break;
case 'backscatter':
options.loadingBackscatterStatus = true;
clearHeatMapDrawer(creates.backscatterDrawer);
break;
default:
throw new Error("无效的type类型");
}
}
const preprocessingCharts = (type: string) => {
switch (type) {
case 'lidarratio':
options.loadingLidarRatioStatus = true;
break;
case 'pblh':
options.loadingBoundaryLayerHeightStatus = true;
break;
case 'cloudbaseheight':
options.loadingCloudsHeightStatus = true;
break;
case 'cloudtopheight':
options.loadingCloudTopHeightStatus = true;
break;
case 'aod':
options.loadingOpticalThicknessStatus = true;
break;
case 'icot':
options.loadingOpticalThicknessStatus = true;
break;
case 'wcot':
options.loadingOpticalThicknessStatus = true;
break;
default:
throw new Error("无效的type类型");
}
}
const clearHeatMapDrawer = (drawer: HeatMapDrawer) => {
if (drawer == null) return;
drawer.close();
drawer = null;
}
const cancelRequest = () => {
axiosStore._axiosPromiseCancel.forEach(e => {
e && e()
});
axiosStore._axiosPromiseCancel = [];
}
const drawBackscatter = (result: CustomeArray<any>) => {
if (result.length != 24) return;
options.loadingBackscatterStatus = false;
if (creates.backscatterDrawer != null) {
creates.backscatterDrawer.close();
}
let matrix = converCloudRecognition(801, result, 'backscatter');
creates.backscatterDrawer = new HeatMapDrawer(1200, 650, matrix, "backscatter_chart",'/km/sr');
creates.backscatterDrawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 2000, 4000, 6000, 8000, 10000, 12000], true, true));
creates.backscatterDrawer.setColorChart(prepareBackscatterColors());
creates.backscatterDrawer.draw();
}
const prepareBackscatterColors = () => {
let colorChart = new ColorChart(['#8F0000', '#E00000', '#FF1F00', '#FF6600', '#FF9900', '#FFE000', '#EBFF14', '#99FF66', '#66FF99', '#1FFFE0',
'#00E0FF', '#0099FF', '#005CFF', '#0029FF', '#0000E0', '#000099'],
[-1, -1.25, -1.5, -1.75, -2, -2.25, -2.5, -2.75, -3, -3.25, -3.5, -3.75, -4, -4.25, -4.5, -4.75, -5]
// [-4, -4.25, -4.5, -4.75, -5, -5.25, -5.5, -5.75, -6, -6.25, -6.5, -6.75, -7, -7.25, -7.5, -7.75, -8]
);
colorChart.setDefaultColors('#000099', '#8F0000');
return colorChart;
}
const drawPm2Point5 = (result: CustomeArray<any>) => {
if (result.length != 24) return;
options.loadingPmStatus = false;
if (creates.pm2Point5Drawer != null) {
creates.pm2Point5Drawer.close();
}
let matrix = converCloudRecognition(201, result, 'pm2_5');
creates.pm2Point5Drawer = new HeatMapDrawer(800, 650, matrix, "pm2_5_chart",'μg/m³', 'PM2.5');
creates.pm2Point5Drawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 1000, 2000, 3000], true, true));
creates.pm2Point5Drawer.setColorChart(preparePmColors());
creates.pm2Point5Drawer.draw();
}
const drawPm10 = (result: CustomeArray<any>) => {
if (result.length != 24) return;
options.loadingPmStatus = false;
if (creates.pm10Drawer != null) {
creates.pm10Drawer.close();
}
let matrix = converCloudRecognition(201, result, 'pm10');
creates.pm10Drawer = new HeatMapDrawer(800, 650, matrix, "pm10_chart", 'μg/m³', 'PM10');
creates.pm10Drawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 1000, 2000, 3000], true, true));
creates.pm10Drawer.setColorChart(preparePmColors());
creates.pm10Drawer.draw();
}
const drawBoundaryLayerCharts = (result: CustomeArray<any>) => {
if (result.length != 24) return;
const data = prepareChartData(result);
creates.boundaryLayerHeight.updateSeries(0, data)
options.loadingBoundaryLayerHeightStatus = false
}
const drawLidarRatioCharts = (result: CustomeArray<any>) => {
if (result.length <= 0) return;
const data = LidarRatioPrepareChartData(result);
creates.LidarRatio.updateSeries(0, data);
options.loadingLidarRatioStatus = false
}
const drawAerosolCharts = (result: CustomeArray<any>) => {
if (result.length != 24) return;
const data = prepareChartData(result);
creates.opticalThickness.updateSeries(0, data);
// options.loadingOpticalThicknessStatus = false
}
const drawIceCloudsCharts = (result: CustomeArray<any>) => {
if (result.length != 24) return;
const data = prepareChartData(result);
creates.opticalThickness.updateSeries(1, data)
// options.loadingOpticalThicknessStatus = false
}
const drawWaterCloud = (result: CustomeArray<any>) => {
if (result.length != 24) return;
const data = prepareChartData(result);
creates.opticalThickness.updateSeries(2, data)
options.loadingOpticalThicknessStatus = false
}
const drawCloudTopHeightCharts = (result: CustomeArray<any>) => {
if (result.length != 24) return;
const data = prepareChartData(result);
creates.cloudTopHeight.updateSeries(0, data)
options.loadingCloudTopHeightStatus = false
}
const drawCloudsHeightCharts = (result: CustomeArray<any>) => {
if (result.length != 24) return;
const data = prepareChartData(result);
creates.cloudsHeight.updateSeries(0, data)
options.loadingCloudsHeightStatus = false
}
const prepareChartData = (result) => {
let prepareData = []
options.chartTimeData = [];
result.sort((x, y) => moment(x.time, 'M_D_H').isBefore(moment(y.time, 'M_D_H')) ? -1 : 1);
result.forEach(item => {
if (item.data == null) {
let temp = [];
for (let i = 0; i < 11; i++) {
temp.push(NaN);
}
item.data = [temp];
}
for (let i in item.data[0]) {
prepareData.push(item.data[0][i])
}
})
let interval = (24 / prepareData.length);
let data = [];
let startTimeMoment = moment(result[0].time, 'M_D_H').add(8, 'h').add(-30, 'm');
for (let i = 0, len = prepareData.length; i < len; i++) {
data.push([startTimeMoment.clone().add(interval * i, 'h').valueOf(), prepareData[i]]);
}
return data;
}
const LidarRatioPrepareChartData = (result) => {
let prepareData = []
if (result[0].data == null) return;
result[0].data.forEach((item) => {
item.forEach((item, index) => {
if (item == null) item = NaN
prepareData.push([item, index * 15])
})
})
return prepareData;
}
const preparePmColors = () => {
return new ColorChart(['#F6EF20', '#FEC338', '#C5C22A', '#72CD64', '#31C69F', '#01B8CA', '#259BE8', '#327CFC', '#4853F4', '#422EC1'],
[100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 0], true, true
);
}
const drawCloudSol = (result: CustomeArray<any>) => {
if (result.length != 24) return;
options.loadingCloudSolStatus = false;
if (creates.cloudSolDrawer != null) {
creates.cloudSolDrawer.close();
}
let matrix = converCloudRecognition(801, result, 'cloudSol');
creates.cloudSolDrawer = new HeatMapDrawer(1200, 650, matrix, "cloud_sol_chart");
creates.cloudSolDrawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 2000, 4000, 6000, 8000, 10000, 12000], true, true));
creates.cloudSolDrawer.setColorChart(prepareCloudRecognitionColors());
creates.cloudSolDrawer.draw();
}
const drawOpticsExtinction = (result: CustomeArray<any>) => {
if (result.length != 24) return;
options.loadingExtinctionOpticsStatus = false;
if (creates.opticsExtinctionDrawer != null) {
creates.opticsExtinctionDrawer.close();
}
let matrix = converCloudRecognition(801, result, 'extinctionOptics');
creates.opticsExtinctionDrawer = new HeatMapDrawer(1200, 650, matrix, "extinction_optics_chart",'/km/sr');
creates.opticsExtinctionDrawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 2000, 4000, 6000, 8000, 10000, 12000], true, true));
creates.opticsExtinctionDrawer.setColorChart(prepareExtinctionnColors());
creates.opticsExtinctionDrawer.draw();
}
const drawSingleWatervapor = (result: CustomeArray<any>) => {
if (result.length != 24) return;
options.loadingWaterVaporSingleStatus = false;
if (creates.singleWatervaporDrawer != null) {
creates.singleWatervaporDrawer.close();
}
let matrix = converCloudRecognition(101, result, 'singleWatervapor');
creates.singleWatervaporDrawer = new HeatMapDrawer(1200, 650, matrix, "watervapor_single_chart",' g/kg');
creates.singleWatervaporDrawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 500, 1000, 1500], true, true));
creates.singleWatervaporDrawer.setColorChart(prepareWatervaporColors());
creates.singleWatervaporDrawer.draw();
}
const drawWatervaporBefore = (result: CustomeArray<any>) => {
if (result.length != 24) return;
options.loadingWaterVaporStatus = false;
if (creates.watervaporDrawer != null) {
creates.watervaporDrawer.close();
}
let matrix = converCloudRecognition(101, result, 'watervapor');
creates.watervaporDrawer = new HeatMapDrawer(800, 650, matrix, "watervapor_chart-before",'g/kg', '质控前');
creates.watervaporDrawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 500, 1000, 1500], true, true));
creates.watervaporDrawer.setColorChart(prepareWatervaporColors());
creates.watervaporDrawer.draw();
}
const drawWatervaporAfter = (result: CustomeArray<any>) => {
if (result.length != 24) return;
options.loadingWaterVaporStatus = false;
if (creates.watervaporDrawer != null) {
creates.watervaporDrawer.close();
}
let matrix = converCloudRecognition(101, result, 'watervapor');
creates.watervaporDrawer = new HeatMapDrawer(800, 650, matrix, "watervapor_chart-after",'g/kg', '质控后');
creates.watervaporDrawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 500, 1000, 1500], true, true));
creates.watervaporDrawer.setColorChart(prepareWatervaporColors());
creates.watervaporDrawer.draw();
}
const prepareWatervaporColors = () => {
return new ColorChart(['#990000', '#CC0000', '#FF0000', '#FF3300', '#FF6600', '#FF9900', '#FFCC00', '#FFFF00', '#CCFF33', '#99FF66',
'#66FF99', '#33FFCC', '#00FFFF', '#00CCFF', '#0099FF', '#0066FF', '#0033FF', '#0000FF', '#0000CC', '#000099'],
[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0], true, true
);
}
const drawExtinctionBefore = (result: CustomeArray<any>) => {
if (result.length != 24) return;
options.loadingExtinctionStatus = false;
if (creates.extinctionDrawer != null) {
creates.extinctionDrawer.close();
}
let matrix = converCloudRecognition(801, result, 'extinction');
creates.extinctionDrawer = new HeatMapDrawer(800, 650, matrix, "extinction_chart-before", 'km/sr','质控前');
creates.extinctionDrawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 2000, 4000, 6000, 8000, 10000, 12000], true, true));
creates.extinctionDrawer.setColorChart(prepareExtinctionnColors());
creates.extinctionDrawer.draw();
}
const drawExtinctionAfter = (result: CustomeArray<any>) => {
if (result.length != 24) return;
options.loadingExtinctionStatus = false;
if (creates.extinctionDrawer != null) {
creates.extinctionDrawer.close();
}
let matrix = converCloudRecognition(801, result, 'extinction');
creates.extinctionDrawer = new HeatMapDrawer(800, 650, matrix, "extinction_chart-after", 'km/sr','质控后');
creates.extinctionDrawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 2000, 4000, 6000, 8000, 10000, 12000], true, true));
creates.extinctionDrawer.setColorChart(prepareExtinctionnColors());
creates.extinctionDrawer.draw();
}
const prepareExtinctionnColors = () => {
let colorChart = new ColorChart(['#990000', '#CC0000', '#FF0000', '#FF3300', '#FF6600', '#FF9900', '#FFCC00', '#FFFF00', '#CCFF33', '#99FF66',
'#66FF99', '#33FFCC', '#00FFFF', '#00CCFF', '#0099FF', '#0066FF', '#0033FF', '#0000FF', '#0000CC', '#000099'],
[10, 8, 6, 4, 2, 1, 0.8, 0.6, 0.4, 0.2, 0.1, 0.08, 0.06, 0.04, 0.02, 0.01, 0.008, 0.006, 0.004, 0.002, 0.001], true, true
);
colorChart.setDefaultColors('#000099', '#8F0000');
return colorChart;
}
const reloadCloudRecognition = (type: string, capacity: number, element: string, callback: any) => {
preprocessing(type);
let result = new CustomeArray(callback);
let time = moment(options.date);
options.timeArray = []
for (let index = 0; index < 24; index++) {
reloadSingleCloudRecognition(capacity, time.clone().add(-index, 'h').format('M_D_H'), element, result);
options.timeArray.push(time.clone().add(-index, 'h').format('HH'))
}
options.timeArray.reverse()
}
//
const reloadChartsRecognition = (element: string, callback: any) => {
preprocessingCharts(element)
let result = new CustomeArray(callback);
let time = moment(options.date);
for (let index = 0; index < 24; index++) {
reloadSingleChartsRecognition(time.clone().add(-index, 'h').format('M_D_H'), element, result);
}
}
const reloadChartLidarratio = (element: string, callback: any) => {
preprocessingCharts(element)
let result = new CustomeArray(callback);
let time = moment(options.date);
reloadSingleChartsRecognition(time.format('M_D_H'), element, result);
}
const drawCloudRecognition = (result: CustomeArray<any>) => {
if (result.length != 12) return;
options.loadingCloudRecognitionStatus = false;
if (creates.cloudRecognitionDrawer != null) {
creates.cloudRecognitionDrawer.close();
}
let matrix = converCloudRecognition(801, result, 'layertype');
creates.cloudRecognitionDrawer = new HeatMapDrawer(1200, 600, matrix, "cloud_recognition_chart");
creates.cloudRecognitionDrawer.setAxis(new CoordinateScale(options.timeArray), new CoordinateScale([0, 2000, 4000, 6000, 8000, 10000, 12000], true, true));
creates.cloudRecognitionDrawer.setColorChart(prepareCloudRecognitionColors());
creates.cloudRecognitionDrawer.draw();
}
const prepareCloudRecognitionColors = () => {
return new ColorChart(['#0000FF', '#00FF00', '#FF0000', '#FFFFFF'],
[3, 2, 1, 0, -99]
);
}
const converCloudRecognition = (capacity: number, result: CustomeArray<any>, name: string) => {
result.sort((x, y) => moment(x.time, 'M_D_H').isBefore(moment(y.time, 'M_D_H')) ? -1 : 1);
let matrix = new Array<Array<Box>>();
let index = -1;
result.forEach(r => {
const time = moment(r.time, 'M_D_H').format("MM月DD日HH时")
if (r.data == null) {
for (let x = 0; x < 11; x++) {
index++;
if (matrix[index] == null) {
matrix[index] = new Array<Box>(capacity);
}
for (let y = 0; y < capacity; y++) {
matrix[index][y] = new Box(index, y, 0, 0, NaN, y * 15, time, "米");
}
}
return;
}
const interval = Math.round(11 / r.data[0].length);
for (let h = 0, len = capacity; h < len; h++) {
let tempIndex = parseInt(index + "");
if (r.data[h] == null){
for(let i = 0; i < 11; i++){
tempIndex++;
if (matrix[tempIndex] == null) {
matrix[tempIndex] = new Array<Box>(capacity);
}
matrix[tempIndex][h] = new Box(tempIndex, h, 0, 0, NaN, h * 15, time, "米");
}
continue;
}
r.data[h] = r.data[h].slice(0, 11);
for (let i = 0, len = r.data[h].length; i < len; i++) {
for (let _i = 0; _i < interval; _i++) {
tempIndex++;
if (matrix[tempIndex] == null) {
matrix[tempIndex] = new Array<Box>(capacity);
}
let value = r.data[h][i]
if (name == 'backscatter') {
value = value == null ? NaN : Math.log10(value);
}
if (name == 'singleWatervapor' || name == 'watervapor') {
value = value == null ? NaN : value * 1000;
}
value = value == null ? NaN : value;
matrix[tempIndex][h] = new Box(tempIndex, h, 0, 0, value, h * 15, time, "米");
}
}
}
index = index + r.data[0].length * interval;
});
return matrix;
}
const reloadSingleCloudRecognition = (capacity: number, time: string, elementCode, result: CustomeArray<any>) => {
const params = prepareApiParams(time, elementCode)
get('/njqxj/lmlidar', params, ConstantRamanLidar.baseUrl).then((response: any) => {
if (response.state != 0) {
setCloudRecognitionResult(capacity, time, response.message, null, result);
return;
}
setCloudRecognitionResult(capacity, time, response.message, response.data, result);
}).catch(error => {
setCloudRecognitionResult(capacity, time, error.message, null, result);
})
// .catch(error => {
// setCloudRecognitionResult(capacity, time, error.message, null, result);
// })
}
//
const reloadSingleChartsRecognition = (time: string, elementCode, result: CustomeArray<any>) => {
const params = prepareApiParams(time, elementCode)
get('/njqxj/lmlidar', params, ConstantRamanLidar.baseUrl).then((response: any) => {
if (response.state != 0) {
setChartsRecognitionResult(time, response.message, null, result);
return;
}
setChartsRecognitionResult(time, response.message, response.data, result);
}).catch(error => {
setChartsRecognitionResult(time, error.message, null, result);
})
}
const setCloudRecognitionResult = (capacity: number, time: string, message: string, data: any, result: CustomeArray<any>) => {
result.push({
time: time,
message: message,
data: data == null ? null : JSON.parse(data).slice(0, capacity)
})
}
//
const setChartsRecognitionResult = (time: string, message: string, data: any, result: CustomeArray<any>) => {
result.push({
time: time,
message: message,
data: data == null ? null : JSON.parse(data)
})
}
const initEcharts = (name) => {
if (name === 'boundary-layer-height') {
} else if (name === 'optical-property') {
opticalThicknessInit()
} else if (name === 'aerosol-product') {
LidarRatioInit()
boundaryLayerHeightInit()
} else if (name === 'BingoCloud') {
cloudsHeightInit()
cloudTopHeightInit()
}
}
//区域切换
const onRegionClick = (region) => {
options.currentRegion = region;
setTimeout(() => {
initEcharts(options.currentRegion)
// reloadChangeData()
elementChange(options.currentElement)
}, 500)
}
//要素选择
// const onElementClick = (element, type) => {
// options.currentElement = element;
// options.currentType = type;
// options.date = options.currentTime;
// setTimeout(() => {
// }, 500)
// cancelActive();
// setTitle(moment(options.date));
// activeImage();
// }
// const setTitle = (date) => {
// options.title = date.format('YYYY.MM.DD') + ' ' + options.currentType;
// }
// const activeImage = () => {
// options.imgUrl = RamanLidarConfig.getUrl(options.currentRegion, options.currentElement, moment(options.currentTime, 'YYYY-MM-DD'));
// options.previewUrl = [options.imgUrl];
//
// options.signalPBLHImgUrl = RamanLidarConfig.getUrl(options.currentRegion, 'signal_' + options.currentElement, moment(options.currentTime, 'YYYY-MM-DD'));
// options.signalPBLHPreviewUrl = [options.signalPBLHImgUrl];
// }
// const onImageLoad = (event) => {
// if (event.currentTarget.getAttribute('src') !== '/images/default-picture.png')
// converToBase64(options.imgUrl);
// else
// return
// }
// const onDownloadClick = () => {
// post("/image/createGif", prepareParams(), 'application/json').then((response: any) => {
// if (response.error != 0) {
// console.log(response.message);
// return;
// }
//
// fetch(response.data).then(res => {
// return res.blob();
// }).then(blob => {
// let reader = new FileReader();
// reader.onloadend = function () {
// options.downloadSrc = reader.result;
//
// setTimeout(() => {
// document.getElementById("radarDownload").click();
// options.downloadSrc = null;
// }, 500);
// };
// reader.readAsDataURL(blob);
// }).catch(console.error);
// })
// }
//参数准备
// const prepareParams = () => {
// return {
// model: 'radar',
// station: options.currentRegion,
// elementCode: options.currentElement,
// type: null,
// time: moment(options.times[0].date).format("YYYYMMDDHHmmss") + '-' + moment(options.times[options.times.length - 1].date).format("YYYYMMDDHHmmss"),
// urls: prepareUrls()
// }
// }
// const prepareUrls = () => {
// let urls = [];
// for (let index = 0, len = options.times.length; index < len; index++) {
// let time = moment(options.times[index].date);
//
// if (options.currentElement === 'PBLH') {
// urls.push(
// RamanLidarConfig.getUrl(options.currentRegion, options.currentElement, time),
// RamanLidarConfig.getUrl(options.currentRegion, 'signal_' + options.currentElement, time)
// );
// } else
// urls.push(RamanLidarConfig.getUrl(options.currentRegion, options.currentElement, time));
// }
//
// console.log(urls)
// return urls;
// }
// const converToBase64 = (path) => {
// let img = new Image();
// img.src = path;
// let canvas = document.createElement("canvas") as HTMLCanvasElement;
// canvas.width = img.width;
// canvas.height = img.height;
//
// let ctx = canvas.getContext("2d");
// let base64 = '';
//
// img.setAttribute("crossOrigin", 'Anonymous')
// img.onload = function () {
// ctx.drawImage(img, 0, 0);
// base64 = canvas.toDataURL("image/png");
// options.downloadImgUrl = base64;
// };
// }
//初始化时间轴
const initTimeLine = () => {
if (options.timeLineFormat == "hour") return;
options.timeLineFormat = "hour";
options.times = [];
options.currentTime = moment(options.date).format('YYYY-MM-DD HH');
let now = moment(options.date).add(1, 'h')
for (let i = 0; i < 24; i++) {
options.times.push({
hour: now.add(-1, 'hour').format('HH'),
day: now.format('MM/DD'),
date: now.format('YYYY-MM-DD HH'),
})
}
options.times.reverse();
options.index = options.times.length - 1;
}
const initTimeLineDay = () => {
if (options.timeLineFormat == "day") return;
options.timeLineFormat = "day";
options.times = [];
options.currentTime = moment(options.date).format('YYYY-MM-DD');
let now = moment(options.date).add(1, 'd');
let day = new Date(now.year(), now.month() + 1, 0);
for (let i = 0; i < 24; i++) {
options.times.push({
day: now.add(-1, 'd').format('DD'),
month: now.format('MM'),
date: now.format('YYYY-MM-DD'),
})
}
options.times.reverse();
options.index = options.times.length - 1;
}
//时间选择
const onTimeClick = (time, index) => {
options.currentTime = time.date;
options.date = moment(time.date).format('YYYY-MM-DD HH');
elementChange(options.currentElement)
options.index = index;
// reloadChangeData()
// cancelActive();
// setTitle(moment(time.date, 'YYYY-MM-DD'));
// activeImage();
}
const cancelActive = () => {
clearTimer();
options.isPlay = false;
}
//上一天
const onPrevDayClick = () => {
let element = getCurrentElement();
if (moment(options.date).add(-1, 'day').format('YYYY-MM-DD') == moment().format('YYYY-MM-DD') ) {
options.date = moment().format('YYYY-MM-DD HH')
}
else options.date = moment(options.date).add(-1, 'day').format('YYYY-MM-DD');
options.currentTime = options.date;
options.index--;
if (options.index < 0) {
options.index = element.childElementCount - 1;
options.date = options.times[options.times.length - 1].date
}
options.timeLineFormat = "day";
initTimeLine()
// cancelActive();
// setCurrentPlayElement(element)
elementChange(options.currentElement)
}
const onNextDayClick = () => {
if (moment(options.date).add(1, 'day').format('YYYY-MM-DD') == moment().format('YYYY-MM-DD') ) {
options.date = moment().format('YYYY-MM-DD HH')
}
else options.date = moment(options.date).add(1, 'day').format('YYYY-MM-DD')
options.timeLineFormat = "day";
initTimeLine()
elementChange(options.currentElement)
}
//上一张图片
// const onPrevImgClick = () => {
// let element = getCurrentElement();
//
// options.index--;
// if (options.index < 0)
// options.index = element.childElementCount - 1;
//
// setCurrentPlayElement(element);
// }
// const onNextImgClick = () => {
// let element = getCurrentElement();
//
// options.index++;
// if (options.index > element.childElementCount - 1)
// options.index = 0;
//
// setCurrentPlayElement(element);
// }
//重置
// const onRefreshClick = () => {
// options.date = moment('2021-11-15').format('YYYY-MM-DD');
// options.currentTime = options.times[options.times.length - 1].date;
//
// cancelActive();
// activeImage();
// }
//
// const onPlayClick = () => {
// options.isPlay = !options.isPlay;
// if (options.isPlay) {
// timeExcute();
// } else {
// clearTimer();
// }
// }
// const timeExcute = () => {
// clearTimer();
//
// let element = getCurrentElement();
//
// timer = setInterval(() => {
// options.index++;
// if (options.index > element.childElementCount - 1)
// options.index = 0;
// setCurrentPlayElement(element);
// }, 3000)
// }
const clearTimer = () => {
if (timer)
clearInterval(timer);
}
const getCurrentElement = () => {
return document.querySelector('.times');
}
// const setCurrentPlayElement = (element) => {
// for (let i = 0; i < element.childElementCount; i++)
// element.children[i].classList.remove('active');
//
// element.children[options.index].classList.add('active');
// options.currentTime = options.times[options.index].date;
// setTitle(moment(options.times[options.index].date, 'YYYY-MM-DD'));
// activeImage();
// }
const onChange = (e) => {
if (options.currentElement === 'extinction' || options.currentElement=== 'lidarratio' || options.currentElement === 'watervapor') {
options.timeLineFormat = "hour";
initTimeLineDay()
}
else {
if (moment(e).format('YYYY-MM-DD') == moment().format('YYYY-MM-DD') ) {
options.date = moment().format('YYYY-MM-DD HH')
}
options.timeLineFormat = "day";
initTimeLine();
}
elementChange(options.currentElement)
// setTitle(moment(options.date));
// activeImage();
}
// const onSaveClick = () => {
// let pictures = document.getElementById('pictures');
// options.urls = [options.imgUrl, options.signalPBLHImgUrl];
//
// for (let i = 0; i < options.urls.length; i++) {
// let img = new Image();
// img.src = options.urls[i];
// let canvas = document.createElement("canvas") as HTMLCanvasElement;
// canvas.width = img.width;
// canvas.height = img.height;
//
// let ctx = canvas.getContext("2d");
// let base64 = "";
//
// img.setAttribute("crossOrigin", 'Anonymous');
// img.onload = () => {
// ctx.drawImage(img, 0, 0);
// base64 = canvas.toDataURL("image/png");
// pictures.children[i].setAttribute('href', base64);
// setTimeout(() => {
// let button: HTMLElement = pictures.children[i] as HTMLElement;
// button.click();
// pictures.children[i].setAttribute('href', null);
// }, 500);
// };
// }
// }
const prepareApiParams = (time, variableName) => {
if (variableName == 'lidarratio') {
return {
date: moment(time,'MM_DD_hh').format('M_D'),
var: variableName,
locate: options.currentRegion
}
}
return {
date: time,
var: variableName,
locate: options.currentRegion
}
}
// watch(()=>options.date,() =>{
// reloadChangeData()
// },{
// deep: true,
// immediate: true
// })
const verify = () => {
ElMessage({
showClose: true,
message: '请求接口无数据',
icon: '',
type: null,
grouping: true,
duration: 1500
})
}
const error = () => {
ElMessage({
showClose: true,
message: '请求接口错误',
icon: '',
type: null,
grouping: true,
duration: 1500
})
}
const onElementClick = (element) => {
options.currentElement = element
elementChange(element)
}
const onDayClick = (time, index) => {
options.timeLineFormat = "hour"
options.currentTime = time.date;
options.date = moment(time.date).format('YYYY-MM-DD');
options.index = index;
elementChange(options.currentElement)
}
const onPrevDayTimeClick = () => {
options.timeLineFormat = "hour"
options.date = moment(options.date).add(-1, 'day').format('YYYY-MM-DD');
initTimeLineDay()
elementChange(options.currentElement)
}
const onNextDayTimeClick = () => {
options.timeLineFormat = "hour"
options.date = moment(options.date).add(1, 'day').format('YYYY-MM-DD');
initTimeLineDay()
elementChange(options.currentElement)
}
return {
...toRefs(options),
onRegionClick,
// onElementClick,
onTimeClick,
onPrevDayClick,
onNextDayClick,
// onPrevImgClick,
// onNextImgClick,
// onRefreshClick,
// onPlayClick,
onChange,
// onImageLoad,
// onDownloadClick,
// onSaveClick,
onTabClick,
onElementClick,
onDayClick,
onPrevDayTimeClick,
onNextDayTimeClick
}
}
}
</script>
<style lang="less" scoped>
.main {
.container {
:deep(.el-date-editor), .control-btn, :deep(.el-select), .unit {
padding-top: 0.08rem;
}
:deep(.el-input__prefix) {
top: 4px;
}
.toolbar {
//padding: 0.15rem 0;
padding-bottom: 7px;
.times {
padding-bottom: 0;
}
}
.raman-picture-container {
width: calc(~"100% - 1rem");
margin: 0 auto;
.special-picture {
//:deep(.el-loading-mask) {
// top: 64px !important;
//}
}
.picture {
width: 100%;
position: relative;
margin-top: 30px;
#watervapor_single_chart {
transform: translateX(9%) translateY(15px);
//transform: scale(1.0, 0.8) translateX(539px);
}
#extinction_optics_chart {
//transform: scale(0.56, 0.85) translateX(-32%);
transform: translateX(9%) translateY(15px);
}
#pm2_5_chart {
transform: translateX(-50px) translateY(50px);
}
#pm10_chart {
transform: translateX(-50px) translateY(50px);
}
#backscatter_chart {
transform: translateX(9%) translateY(50px);
//transform: scale(0.6, 0.85) translateX(-76px);
}
#cloud_sol_chart {
transform: translateX(9%) translateY(50px);
//transform: scale(0.6, 0.85) translate(-12%, -12px);
}
//#cloud_recognition_chart,
#extinction_chart-before,
#extinction_chart-after,
#watervapor_chart-before,
#watervapor_chart-after
{
transform: translateX(-50px) translateY(50px);
//transform: scale(0.6, 0.8) translateX(-260px);
//transform: scale(0.6, 0.8) translateX(-131px);
}
.title {
width: 100%;
font-size: 0.22rem;
position: absolute;
left: 2.10rem;
top: 0.30rem;
z-index: 100;
}
.special-title {
left: 48%;
}
.pblh-image {
width: 50%;
}
}
}
}
}
</style>