|
|
@ -1,5 +1,9 @@ |
|
|
|
<template> |
|
|
|
<div class="tabs"> |
|
|
|
<div class="tab-item" @click="onTabClick('MWR')" :class="{'active': currentTab === 'MWR'}"> |
|
|
|
质控对比 |
|
|
|
<img src="/images/line.png" v-if="currentTab === 'MWR'" /> |
|
|
|
</div> |
|
|
|
<div class="tab-item" @click="onTabClick('kuoxian')" :class="{'active': currentTab === 'kuoxian'}"> |
|
|
|
垂直廓线 |
|
|
|
<img src="/images/line.png" v-if="currentTab === 'kuoxian'" /> |
|
|
@ -12,9 +16,9 @@ |
|
|
|
T-logP图 |
|
|
|
<img src="/images/line.png" v-if="currentTab === 'T-logP'" /> |
|
|
|
</div> |
|
|
|
<div class="tab-item" @click="onTabClick('BPFY')" :class="{'active': currentTab === 'BPFY'}"> |
|
|
|
<div class="tab-item" @click="onTabClick('shixu_BPFY')" :class="{'active': currentTab === 'shixu_BPFY'}"> |
|
|
|
BP反演产品 |
|
|
|
<img src="/images/line.png" v-if="currentTab === 'BPFY'" /> |
|
|
|
<img src="/images/line.png" v-if="currentTab === 'shixu_BPFY'" /> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="main"> |
|
|
@ -23,28 +27,30 @@ |
|
|
|
<h2 class="tip">区域选择</h2> |
|
|
|
<el-row :gutter="12"> |
|
|
|
<el-col :span="8"><span @click="onRegionClick('jiangning')" :class="{'active': currentRegion === 'jiangning'}">江宁</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('pukou')" :class="{'active': currentRegion === 'pukou'}">浦口</span></el-col> |
|
|
|
<el-col :span="8"><span @click="onRegionClick('gaochun')" :class="{'active': currentRegion === 'gaochun'}">高淳</span></el-col> |
|
|
|
<el-col :span="8"><span @click="onRegionClick('lishui')" :class="{'active': currentRegion === 'lishui'}">溧水</span></el-col> |
|
|
|
</el-row> |
|
|
|
</div> |
|
|
|
<div class="menu-item" v-if="currentTab === 'kuoxian' || currentTab === 'shixu'"> |
|
|
|
<div class="menu-item" v-if="currentTab === 'MWR' || currentTab === 'kuoxian' || currentTab === 'shixu' || currentTab === 'shixu_BPFY'"> |
|
|
|
<h2 class="tip">要素选择</h2> |
|
|
|
<el-row :gutter="12"> |
|
|
|
<el-col :span="8" v-if="currentTab === 'kuoxian'"><span @click="onElementClick('TEMPERATURE', 'TEMP')" :class="{'active': currentElement === 'TEMPERATURE'}">温度</span></el-col> |
|
|
|
<el-col :span="8" v-if="currentTab === 'kuoxian'"><span @click="onElementClick('HUMIDITY', 'RH')" :class="{'active': currentElement === 'HUMIDITY'}">湿度</span></el-col> |
|
|
|
<el-col :span="8" v-if="currentTab === 'shixu'"><span @click="onElementClick('CAPE时序图', 'CAPE')" :class="{'active': currentElement === 'CAPE时序图'}">CAPE</span></el-col> |
|
|
|
<el-col :span="8" v-if="currentTab === 'shixu'"><span @click="onElementClick('CIN时序图', 'CIN')" :class="{'active': currentElement === 'CIN时序图'}">CIN</span></el-col> |
|
|
|
<el-col :span="8" v-if="currentTab === 'MWR' || currentTab === 'kuoxian' || currentTab === 'shixu_BPFY'"><span @click="onElementClick('TEMP')" :class="{'active': currentElement === 'TEMP'}">温度</span></el-col> |
|
|
|
<el-col :span="8" v-if="currentTab === 'kuoxian' || currentTab === 'shixu_BPFY'"><span @click="onElementClick('RH')" :class="{'active': currentElement === 'RH'}">湿度</span></el-col> |
|
|
|
<el-col :span="8" v-if="currentTab === 'kuoxian' || currentTab === 'shixu_BPFY'"><span @click="onElementClick('VD')" :class="{'active': currentElement === 'VD'}">水汽密度</span></el-col> |
|
|
|
<el-col :span="8" v-if="currentTab === 'shixu'"><span @click="onElementClick('CAPE')" :class="{'active': currentElement === 'CAPE'}">CAPE</span></el-col> |
|
|
|
<el-col :span="8" v-if="currentTab === 'shixu'"><span @click="onElementClick('CIN')" :class="{'active': currentElement === 'CIN'}">CIN</span></el-col> |
|
|
|
</el-row> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="container panel"> |
|
|
|
<div class="toolbar"> |
|
|
|
<div class="times"> |
|
|
|
<div class="toolbar" :class="{'day-toolbar': currentTab === 'MWR'}"> |
|
|
|
<div class="times" v-if="currentTab === 'MWR'"> |
|
|
|
<div class="time-item" v-for="(time, index) in days" :key="index" :class="{'active': currentTime === time.date}"> |
|
|
|
<span class="time" @click="onDayClick(time, index)">{{time.day}}</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="times" v-else> |
|
|
|
<div class="time-item" v-for="(time, index) in times" :key="index" :class="{'active': currentTime === time.date, 'first-hour': time.minute === '00'}"> |
|
|
|
<span class="hour">{{time.hour}}</span> |
|
|
|
<span class="minute" @click="onTimeClick(time, index)">{{time.minute}}</span> |
|
|
|
<span class="time" @click="onTimeClick(time, index)">{{time.minute}}</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<el-date-picker v-model="date" type="date" placeholder="请选择" :clearable="false" :editable="false" class="date-picker" @change="onChange"> |
|
|
@ -53,7 +59,7 @@ |
|
|
|
<span @click="onPrevDayClick"><img src="/images/prev.png" /></span> |
|
|
|
<span @click="onNextDayClick"><img src="/images/next.png" /></span> |
|
|
|
</div> |
|
|
|
<el-select v-model="currentHour" placeholder="" @change="onChange"> |
|
|
|
<el-select v-model="currentHour" placeholder="" @change="onChange" v-show="currentTab !== 'MWR'"> |
|
|
|
<el-option |
|
|
|
v-for="item in hours" |
|
|
|
:key="item.value" |
|
|
@ -62,22 +68,88 @@ |
|
|
|
> |
|
|
|
</el-option> |
|
|
|
</el-select> |
|
|
|
<p class="unit">时</p> |
|
|
|
<p class="unit" v-if="currentTab !== 'MWR'">时</p> |
|
|
|
<div class="refresh-btn" @click="onRefreshClick"> |
|
|
|
<img src="/images/refresh.png" /> |
|
|
|
</div> |
|
|
|
<div class="btns-group"> |
|
|
|
<span @click="onPlayClick">{{isPlay ? '暂停动画' : '播放动画'}}</span> |
|
|
|
<a @click="onDownloadClick">下载动画</a> |
|
|
|
<a id="weboDownload" download :href="downloadSrc" style="display: none;">下载隐藏层</a> |
|
|
|
<a id="weboDownload" download :href="downloadSrc" class="hide">下载隐藏层</a> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="picture-view"> |
|
|
|
<span class="arrow arrow-prev" @click="onPrevImgClick"><img src="/images/prev-btn.png" /></span> |
|
|
|
<span class="arrow arrow-next" @click="onNextImgClick"><img src="/images/next-btn.png" /></span> |
|
|
|
<a :href="downloadImgUrl" download class="save-btn"><img src="/images/save.png" /></a> |
|
|
|
<div class="picture-container"> |
|
|
|
<h2 class="title">{{title}}</h2> |
|
|
|
<span class="save-btn" @click="onSaveClick" v-if="currentTab === 'MWR'"><img src="/images/save.png" /></span> |
|
|
|
<a :href="downloadImgUrl" download class="save-btn" v-else><img src="/images/save.png" /></a> |
|
|
|
<div class="download-pictures hide" id="pictures"> |
|
|
|
<a v-for="(url, index) in urls" :key="index" download></a> |
|
|
|
</div> |
|
|
|
<div class="picture-container contrast-picture-container" v-if="currentTab === 'MWR'"> |
|
|
|
<div class="picture"> |
|
|
|
<h2 class="title">原始数据</h2> |
|
|
|
<el-image |
|
|
|
:src="contrast.noQCImgUrl" |
|
|
|
:preview-src-list="contrast.noQCImgPreview" |
|
|
|
:initial-index="0" |
|
|
|
fit="contain" |
|
|
|
@load="onImageLoad" |
|
|
|
> |
|
|
|
<template #error> |
|
|
|
<div class="image-slot"> |
|
|
|
<img src="/images/null-picture.png" /> |
|
|
|
</div> |
|
|
|
<p class="image-tip">暂无图片</p> |
|
|
|
</template> |
|
|
|
<template #placeholder> |
|
|
|
<div class="image-placeholder">正在加载...</div> |
|
|
|
</template> |
|
|
|
</el-image> |
|
|
|
</div> |
|
|
|
<div class="picture"> |
|
|
|
<h2 class="title">异常值标记</h2> |
|
|
|
<el-image |
|
|
|
:src="contrast.checkImgUrl" |
|
|
|
:preview-src-list="contrast.checkImgPreview" |
|
|
|
:initial-index="0" |
|
|
|
fit="contain" |
|
|
|
@load="onImageLoad" |
|
|
|
> |
|
|
|
<template #error> |
|
|
|
<div class="image-slot"> |
|
|
|
<img src="/images/null-picture.png" /> |
|
|
|
</div> |
|
|
|
<p class="image-tip">暂无图片</p> |
|
|
|
</template> |
|
|
|
<template #placeholder> |
|
|
|
<div class="image-placeholder">正在加载...</div> |
|
|
|
</template> |
|
|
|
</el-image> |
|
|
|
</div> |
|
|
|
<div class="picture"> |
|
|
|
<h2 class="title">野点插补结果</h2> |
|
|
|
<el-image |
|
|
|
:src="contrast.fillingImgUrl" |
|
|
|
:preview-src-list="contrast.fillingImgPreview" |
|
|
|
:initial-index="0" |
|
|
|
fit="contain" |
|
|
|
@load="onImageLoad" |
|
|
|
> |
|
|
|
<template #error> |
|
|
|
<div class="image-slot"> |
|
|
|
<img src="/images/null-picture.png" /> |
|
|
|
</div> |
|
|
|
<p class="image-tip">暂无图片</p> |
|
|
|
</template> |
|
|
|
<template #placeholder> |
|
|
|
<div class="image-placeholder">正在加载...</div> |
|
|
|
</template> |
|
|
|
</el-image> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="picture-container" v-if="currentTab !== 'MWR'"> |
|
|
|
<!-- <h2 class="title">{{title}}</h2> --> |
|
|
|
<div class="picture"> |
|
|
|
<el-image |
|
|
|
:src="imgUrl" |
|
|
@ -107,22 +179,26 @@ |
|
|
|
import { onMounted, reactive, toRefs } from 'vue'; |
|
|
|
import moment from "moment"; |
|
|
|
import { MicrowaveRadiationConfig } from '../uilts/Config'; |
|
|
|
import { post } from '../uilts/axios'; |
|
|
|
import { post } from '../uilts/axios'; |
|
|
|
|
|
|
|
export default { |
|
|
|
name: 'MicrowaveRadiation', |
|
|
|
setup() { |
|
|
|
let timer = null; |
|
|
|
let dateFormat = '2021-12-05'; |
|
|
|
let contrastDateFormat = '2021-11-10'; |
|
|
|
|
|
|
|
let options = reactive({ |
|
|
|
currentTab: 'kuoxian', |
|
|
|
currentTab: 'MWR', |
|
|
|
currentRegion: 'jiangning', |
|
|
|
currentType: 'TEMP', |
|
|
|
currentElement: 'TEMPERATURE', |
|
|
|
currentElement: 'TEMP', |
|
|
|
currentCategory: 'CAPE', |
|
|
|
date: moment('2021-11-01').format('YYYY-MM-DD'), |
|
|
|
currentHour: '10', |
|
|
|
date: moment(contrastDateFormat).format('YYYY-MM-DD'), |
|
|
|
currentHour: '23', |
|
|
|
hours: [], |
|
|
|
times: [], |
|
|
|
days: [], |
|
|
|
currentTime: null, |
|
|
|
imgUrl: '/images/default-picture.png', |
|
|
|
downloadImgUrl: '/images/default-picture.png', |
|
|
@ -130,67 +206,84 @@ import { post } from '../uilts/axios'; |
|
|
|
isPlay: false, |
|
|
|
title: null, |
|
|
|
index: 0, |
|
|
|
downloadSrc: null |
|
|
|
downloadSrc: null, |
|
|
|
contrast: { |
|
|
|
noQCImgUrl: '/images/picture.png', |
|
|
|
noQCImgPreview: ['/images/picture.png'], |
|
|
|
checkImgUrl: '/images/picture.png', |
|
|
|
checkImgPreview: ['/images/picture.png'], |
|
|
|
fillingImgUrl: '/images/picture.png', |
|
|
|
fillingImgPreview: ['/images/picture.png'] |
|
|
|
}, |
|
|
|
urls: [] |
|
|
|
}) |
|
|
|
|
|
|
|
onMounted(() => { |
|
|
|
initHours(); |
|
|
|
initTimeLine(); |
|
|
|
setTitle(moment(options.date, 'YYYY-MM-DD').hour(parseInt(options.currentHour))); |
|
|
|
setTimeout(() => { |
|
|
|
activeImage(moment(options.times[options.times.length - 1].date).hour(), moment(options.times[options.times.length - 1].date).minute()); |
|
|
|
}, 50); |
|
|
|
initDays(); |
|
|
|
setTimeout(() => activeContrastImage(), 50); |
|
|
|
}) |
|
|
|
|
|
|
|
const onTabClick = (name) => { |
|
|
|
options.currentTab = name; |
|
|
|
if (options.currentTab === 'kuoxian') { |
|
|
|
options.currentType = 'TEMP'; |
|
|
|
options.currentElement = 'TEMPERATURE'; |
|
|
|
} else if (options.currentTab === 'shixu') { |
|
|
|
options.currentType = 'CAPE'; |
|
|
|
options.currentElement = 'CAPE时序图'; |
|
|
|
} else if (options.currentTab === 'T-logP') { |
|
|
|
options.currentType = 'T-logP'; |
|
|
|
options.currentElement = 'T-logP'; |
|
|
|
|
|
|
|
if (options.currentTab === 'MWR') { |
|
|
|
options.date = moment(contrastDateFormat).format('YYYY-MM-DD'); |
|
|
|
options.currentElement = 'TEMP'; |
|
|
|
options.index = options.days.length - 1; |
|
|
|
|
|
|
|
initDays(); |
|
|
|
setTimeout(() => activeContrastImage(), 50) |
|
|
|
} else { |
|
|
|
options.currentType = 'BPFY'; |
|
|
|
options.currentElement = 'BPFY'; |
|
|
|
if (options.currentTab === 'kuoxian' || options.currentTab === 'shixu_BPFY') |
|
|
|
options.currentElement = 'TEMP'; |
|
|
|
else if (options.currentTab === 'shixu') |
|
|
|
options.currentElement = 'CAPE'; |
|
|
|
|
|
|
|
options.date = moment(dateFormat).format('YYYY-MM-DD'); |
|
|
|
options.index = options.times.length - 1; |
|
|
|
|
|
|
|
initTimeLine(); |
|
|
|
setTimeout(() => activeImage(moment(options.times[options.times.length - 1].date).hour(), moment(options.times[options.times.length - 1].date).minute()), 50) |
|
|
|
} |
|
|
|
|
|
|
|
cancelActive(); |
|
|
|
setTitle(moment(options.date).hour(parseInt(options.currentHour))); |
|
|
|
activeImage(moment(options.times[options.index].date).hour(), moment(options.times[options.index].date).minute()); |
|
|
|
} |
|
|
|
|
|
|
|
const onRegionClick = (region) => { |
|
|
|
options.currentRegion = region; |
|
|
|
|
|
|
|
cancelActive(); |
|
|
|
setTitle(moment(options.date).hour(parseInt(options.currentHour))); |
|
|
|
activeImage(moment(options.times[options.index].date).hour(), moment(options.times[options.index].date).minute()); |
|
|
|
|
|
|
|
if (options.currentTab === 'MWR') |
|
|
|
activeContrastImage(); |
|
|
|
else |
|
|
|
activeImage(moment(options.times[options.index].date).hour(), moment(options.times[options.index].date).minute()); |
|
|
|
} |
|
|
|
|
|
|
|
const onElementClick = (element, type) => { |
|
|
|
const onElementClick = (element) => { |
|
|
|
options.currentElement = element; |
|
|
|
options.currentType = type; |
|
|
|
|
|
|
|
cancelActive(); |
|
|
|
setTitle(moment(options.date).hour(parseInt(options.currentHour))); |
|
|
|
activeImage(moment(options.times[options.index].date).hour(), moment(options.times[options.index].date).minute()); |
|
|
|
} |
|
|
|
|
|
|
|
const onCategoryClick = (category) => { |
|
|
|
options.currentCategory = category; |
|
|
|
if (options.currentTab === 'MWR') |
|
|
|
activeContrastImage(); |
|
|
|
else |
|
|
|
activeImage(moment(options.times[options.index].date).hour(), moment(options.times[options.index].date).minute()); |
|
|
|
} |
|
|
|
|
|
|
|
const setTitle = (date) => { |
|
|
|
options.title = date.format('YYYY.MM.DD HH:mm') + ' ' + options.currentElement; |
|
|
|
const activeContrastImage = () => { |
|
|
|
options.contrast.noQCImgUrl = MicrowaveRadiationConfig.getUrl(options.currentRegion, options.currentTab + '_noQC', moment(options.currentTime, 'YYYY-MM-DD')); |
|
|
|
options.contrast.noQCImgPreview = [options.contrast.noQCImgUrl]; |
|
|
|
options.contrast.checkImgUrl = MicrowaveRadiationConfig.getUrl(options.currentRegion, options.currentTab + '_check', moment(options.currentTime, 'YYYY-MM-DD')); |
|
|
|
options.contrast.checkImgPreview = [options.contrast.checkImgUrl]; |
|
|
|
options.contrast.fillingImgUrl = MicrowaveRadiationConfig.getUrl(options.currentRegion, options.currentTab + '_filling', moment(options.currentTime, 'YYYY-MM-DD')); |
|
|
|
options.contrast.fillingImgPreview = [options.contrast.fillingImgUrl]; |
|
|
|
} |
|
|
|
|
|
|
|
const activeImage = (hour, minute) => { |
|
|
|
let time = moment(options.date).hour(hour).minute(minute); |
|
|
|
let type = (options.currentTab === 'T-logP' || options.currentTab === 'BPFY') ? options.currentTab : (options.currentTab + '_' + options.currentType); |
|
|
|
let type = options.currentTab === 'T-logP' ? options.currentTab : (options.currentTab + '_' + options.currentElement); |
|
|
|
options.imgUrl = MicrowaveRadiationConfig.getUrl(options.currentRegion, type, time); |
|
|
|
options.srcList = [options.imgUrl]; |
|
|
|
} |
|
|
@ -227,13 +320,14 @@ import { post } from '../uilts/axios'; |
|
|
|
} |
|
|
|
|
|
|
|
const prepareParams = () => { |
|
|
|
let time = options.currentTab === 'MWR' ? moment(options.days[0].date).format("YYYYMMDDHHmmss") + '-' + moment(options.days[options.days.length - 1].date).format("YYYYMMDDHHmmss") : moment(options.times[0].date).format("YYYYMMDDHHmmss") + '-' + moment(options.times[options.times.length - 1].date).format("YYYYMMDDHHmmss"); |
|
|
|
return { |
|
|
|
model: 'weibo', |
|
|
|
station: options.currentRegion, |
|
|
|
elementCode: options.currentType, |
|
|
|
type: options.currentTab, |
|
|
|
time: moment(options.times[0].date).format("YYYYMMDDHHmmss") + '-' + moment(options.times[options.times.length - 1].date).format("YYYYMMDDHHmmss"), |
|
|
|
urls: prepareUrls() |
|
|
|
time: time, |
|
|
|
urls: options.currentTab === 'MWR' ? prepareContrastUrls() : prepareUrls() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -241,13 +335,27 @@ import { post } from '../uilts/axios'; |
|
|
|
let urls = []; |
|
|
|
for(let index = 0, len = options.times.length; index < len; index++){ |
|
|
|
let time = moment(options.times[index].date); |
|
|
|
let type = (options.currentTab === 'T-logP' || options.currentTab === 'BPFY') ? options.currentTab : (options.currentTab + '_' + options.currentType); |
|
|
|
let type = options.currentTab === 'T-logP' ? options.currentTab : (options.currentTab + '_' + options.currentElement); |
|
|
|
urls.push(MicrowaveRadiationConfig.getUrl(options.currentRegion, type, time)); |
|
|
|
} |
|
|
|
|
|
|
|
return urls; |
|
|
|
} |
|
|
|
|
|
|
|
const prepareContrastUrls = () => { |
|
|
|
let urls = []; |
|
|
|
for(let i = 0, len = options.days.length; i < len; i++){ |
|
|
|
let time = moment(options.days[i].date); |
|
|
|
urls.push( |
|
|
|
MicrowaveRadiationConfig.getUrl(options.currentRegion, options.currentTab + '_noQC', time), |
|
|
|
MicrowaveRadiationConfig.getUrl(options.currentRegion, options.currentTab + '_check', time), |
|
|
|
MicrowaveRadiationConfig.getUrl(options.currentRegion, options.currentTab + '_filling', time) |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
return urls; |
|
|
|
} |
|
|
|
|
|
|
|
const converToBase64 = (path) => { |
|
|
|
let img = new Image(); |
|
|
|
img.src = path; |
|
|
@ -268,9 +376,9 @@ import { post } from '../uilts/axios'; |
|
|
|
|
|
|
|
const initTimeLine = () => { |
|
|
|
options.times = []; |
|
|
|
options.currentTime = moment(options.date).hour(parseInt(options.currentHour)).format('YYYY-MM-DD HH:mm'); |
|
|
|
|
|
|
|
let now = moment(options.date).hour(parseInt(options.currentHour) - 2); |
|
|
|
options.currentTime = moment(options.date).hour(parseInt(options.currentHour)).minute(30).format('YYYY-MM-DD HH:mm'); |
|
|
|
|
|
|
|
let now = moment(options.date).hour(parseInt(options.currentHour) - 2).minute(30); |
|
|
|
|
|
|
|
let minute = now.minute(); |
|
|
|
const remainder = minute % 6; |
|
|
@ -284,15 +392,31 @@ import { post } from '../uilts/axios'; |
|
|
|
options.times.push({ |
|
|
|
hour: now.add(6, 'minute').format('HH时'), |
|
|
|
minute: now.format('mm'), |
|
|
|
date: now.format('YYYY-MM-DD HH:mm'), |
|
|
|
name: 'hour' + now.format('HH') |
|
|
|
date: now.format('YYYY-MM-DD HH:mm') |
|
|
|
}); |
|
|
|
} |
|
|
|
options.index = options.times.length - 1; |
|
|
|
} |
|
|
|
|
|
|
|
const initDays = () => { |
|
|
|
options.days = []; |
|
|
|
options.currentTime = moment(options.date).format('YYYY-MM-DD'); |
|
|
|
|
|
|
|
let now = moment(options.date).add(1, 'day'); |
|
|
|
|
|
|
|
for (let i = 0; i < 10 ; i++) { |
|
|
|
options.days.push({ |
|
|
|
day: now.add(-1, 'day').format('DD'), |
|
|
|
date: now.format('YYYY-MM-DD'), |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
options.days.reverse(); |
|
|
|
options.index = options.days.length - 1; |
|
|
|
} |
|
|
|
|
|
|
|
const initHours = () => { |
|
|
|
for (let i = 0; i < 23; i++) { |
|
|
|
for (let i = 0; i < 24; i++) { |
|
|
|
options.hours.push({ |
|
|
|
value: i, |
|
|
|
label: i < 10 ? '0' + i : i, |
|
|
@ -304,24 +428,38 @@ import { post } from '../uilts/axios'; |
|
|
|
options.currentTime = time.date; |
|
|
|
options.index = index; |
|
|
|
cancelActive(); |
|
|
|
setTitle(moment(time.date, 'YYYY-MM-DD HH:mm')); |
|
|
|
activeImage(moment(time.date).hour(), moment(time.date).minute()); |
|
|
|
} |
|
|
|
|
|
|
|
const onDayClick = (time, index) => { |
|
|
|
options.currentTime = time.date; |
|
|
|
options.index = index; |
|
|
|
cancelActive(); |
|
|
|
activeContrastImage(); |
|
|
|
} |
|
|
|
|
|
|
|
const cancelActive = () => { |
|
|
|
clearTimer(); |
|
|
|
options.isPlay = false; |
|
|
|
} |
|
|
|
|
|
|
|
const onPrevDayClick = () => { |
|
|
|
options.date = moment(options.date).add(-1, 'day').format('YYYY-MM-DD') |
|
|
|
options.date = moment(options.date).add(-1, 'day').format('YYYY-MM-DD'); |
|
|
|
} |
|
|
|
|
|
|
|
const onNextDayClick = () => { |
|
|
|
options.date = moment(options.date).add(1, 'day').format('YYYY-MM-DD') |
|
|
|
options.date = moment(options.date).add(1, 'day').format('YYYY-MM-DD'); |
|
|
|
} |
|
|
|
|
|
|
|
const onPrevImgClick = () => { |
|
|
|
prevElement(); |
|
|
|
} |
|
|
|
|
|
|
|
const onNextImgClick = () => { |
|
|
|
nextElement(); |
|
|
|
} |
|
|
|
|
|
|
|
const prevElement = () => { |
|
|
|
let element = getCurrentElement(); |
|
|
|
|
|
|
|
options.index--; |
|
|
@ -330,8 +468,8 @@ import { post } from '../uilts/axios'; |
|
|
|
|
|
|
|
setCurrentPlayElement(element); |
|
|
|
} |
|
|
|
|
|
|
|
const onNextImgClick = () => { |
|
|
|
|
|
|
|
const nextElement = () => { |
|
|
|
let element = getCurrentElement(); |
|
|
|
|
|
|
|
options.index++; |
|
|
@ -343,15 +481,22 @@ import { post } from '../uilts/axios'; |
|
|
|
|
|
|
|
const onRefreshClick = () => { |
|
|
|
cancelActive(); |
|
|
|
let element = getCurrentElement();; |
|
|
|
let element = getCurrentElement(); |
|
|
|
|
|
|
|
if (options.currentTab === 'MWR') { |
|
|
|
options.date = moment(contrastDateFormat).format('YYYY-MM-DD'); |
|
|
|
options.currentTime = options.date; |
|
|
|
element.children[options.days.length - 1].classList.add('active'); |
|
|
|
|
|
|
|
options.currentHour = '10'; |
|
|
|
options.date = moment('2021-11-01').format('YYYY-MM-DD'); |
|
|
|
options.currentTime = moment(options.date).hour(parseInt(options.currentHour)).format('YYYY-MM-DD HH:mm'); |
|
|
|
activeContrastImage(); |
|
|
|
} else { |
|
|
|
options.currentHour = '23'; |
|
|
|
options.date = moment(dateFormat).format('YYYY-MM-DD'); |
|
|
|
options.currentTime = moment(options.date).hour(parseInt(options.currentHour)).format('YYYY-MM-DD HH:mm'); |
|
|
|
element.children[options.times.length - 1].classList.add('active'); |
|
|
|
|
|
|
|
setTitle(moment(options.currentTime, 'YYYY-MM-DD HH:mm')); |
|
|
|
activeImage(moment(options.currentTime).hour(), moment(options.currentTime).minute()); |
|
|
|
element.children[options.times.length - 1].classList.add('active'); |
|
|
|
activeImage(moment(options.currentTime).hour(), moment(options.currentTime).minute(30)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const onPlayClick = () => { |
|
|
@ -391,24 +536,58 @@ import { post } from '../uilts/axios'; |
|
|
|
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 HH:mm')); |
|
|
|
activeImage(moment(options.times[options.index].date).hour(), moment(options.times[options.index].date).minute()); |
|
|
|
|
|
|
|
if(options.currentTab === 'MWR') { |
|
|
|
options.currentTime = options.days[options.index].date; |
|
|
|
activeContrastImage(); |
|
|
|
} |
|
|
|
else { |
|
|
|
options.currentTime = options.times[options.index].date; |
|
|
|
activeImage(moment(options.times[options.index].date).hour(), moment(options.times[options.index].date).minute()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const onChange = () => { |
|
|
|
initTimeLine(); |
|
|
|
setTitle(moment(options.date).hour(parseInt(options.currentHour))); |
|
|
|
activeImage(moment(options.times[options.index].date).hour(), moment(options.times[options.index].date).minute()); |
|
|
|
} |
|
|
|
|
|
|
|
const onSaveClick = () => { |
|
|
|
let pictures = document.getElementById('pictures'); |
|
|
|
options.urls = [options.contrast.noQCImgUrl, options.contrast.checkImgUrl, options.contrast.fillingImgUrl]; |
|
|
|
|
|
|
|
console.log(options.urls) |
|
|
|
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 = function() { |
|
|
|
ctx.drawImage(img, 0, 0); |
|
|
|
base64 = canvas.toDataURL("image/png"); |
|
|
|
pictures.children[i].setAttribute('href', base64); |
|
|
|
|
|
|
|
let button: HTMLElement = pictures.children[i] as HTMLElement; |
|
|
|
setTimeout(() => { |
|
|
|
button.click(); |
|
|
|
}, 500); |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return { |
|
|
|
...toRefs(options), |
|
|
|
onTabClick, |
|
|
|
onRegionClick, |
|
|
|
onElementClick, |
|
|
|
onCategoryClick, |
|
|
|
onTimeClick, |
|
|
|
onDayClick, |
|
|
|
onPrevDayClick, |
|
|
|
onNextDayClick, |
|
|
|
onPrevImgClick, |
|
|
@ -417,11 +596,28 @@ import { post } from '../uilts/axios'; |
|
|
|
onPlayClick, |
|
|
|
onChange, |
|
|
|
onImageLoad, |
|
|
|
onDownloadClick |
|
|
|
onDownloadClick, |
|
|
|
onSaveClick |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
</script> |
|
|
|
<style lang="less" scoped> |
|
|
|
|
|
|
|
.main { |
|
|
|
.container { |
|
|
|
.contrast-picture-container { |
|
|
|
width: calc(~"100% - 2.5rem"); |
|
|
|
margin: 0 auto; |
|
|
|
flex-direction: row; |
|
|
|
align-items: center; |
|
|
|
.picture { |
|
|
|
flex-direction: column; |
|
|
|
.title { |
|
|
|
padding-bottom: 0; |
|
|
|
font-size: 0.22rem; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
</style> |
|
|
|