Browse Source

Merge remote-tracking branch 'remotes/origin/master'

# Conflicts:
#	04.系统编码/Frontend/src/components/SystemManagement.vue
master
xiaowuler 3 years ago
parent
commit
b9e1cbbc3a
  1. 2
      .gitignore
  2. 6
      04.系统编码/Backend/src/main/java/com/userinformation/backend/service/UserService.java
  3. 2
      04.系统编码/Frontend/.idea/workspace.xml
  4. BIN
      04.系统编码/Frontend/public/images/decision-support/通风廊道规划建议/通风廊道1.png
  5. BIN
      04.系统编码/Frontend/public/images/decision-support/通风廊道规划建议/通风廊道2.png
  6. BIN
      04.系统编码/Frontend/public/images/decision-support/高楼污染指数/高楼污染指数1.png
  7. BIN
      04.系统编码/Frontend/public/images/decision-support/高楼污染指数/高楼污染指数2.png
  8. BIN
      04.系统编码/Frontend/public/images/ecological-environment/111.tif
  9. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/EVI/albedo.tif
  10. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/EVI/evaporation.tif
  11. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/EVI/temperature0130.tif
  12. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/EVI/temperature1030.tif
  13. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/EVI/temperature1330.tif
  14. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/EVI/temperature2230.tif
  15. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/LAI/albedo.tif
  16. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/LAI/evaporation.tif
  17. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/LAI/temperature0130.tif
  18. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/LAI/temperature1030.tif
  19. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/LAI/temperature1330.tif
  20. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/LAI/temperature2230.tif
  21. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/NDVI/albedo.tif
  22. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/NDVI/evaporation.tif
  23. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/NDVI/temperature0130.tif
  24. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/NDVI/temperature1030.tif
  25. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/NDVI/temperature1330.tif
  26. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-change/NDVI/temperature2230.tif
  27. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/EVI/albedo.tif
  28. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/EVI/evaporation.tif
  29. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/EVI/temperature0130.tif
  30. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/EVI/temperature1030.tif
  31. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/EVI/temperature1330.tif
  32. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/EVI/temperature2230.tif
  33. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/LAI/albedo.tif
  34. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/LAI/evaporation.tif
  35. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/LAI/temperature0130.tif
  36. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/LAI/temperature1030.tif
  37. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/LAI/temperature1330.tif
  38. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/LAI/temperature2230.tif
  39. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/NDVI/albedo.tif
  40. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/NDVI/evaporation.tif
  41. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/NDVI/temperature0130.tif
  42. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/NDVI/temperature1030.tif
  43. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/NDVI/temperature1330.tif
  44. BIN
      04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/NDVI/temperature2230.tif
  45. 167
      04.系统编码/Frontend/src/components/DecisionSupport.vue
  46. 10
      04.系统编码/Frontend/src/components/Login.vue
  47. 6
      04.系统编码/Frontend/src/components/RamanLidar.vue
  48. 360
      04.系统编码/Frontend/src/components/SynergyEvaluation.vue
  49. 87
      04.系统编码/Frontend/src/components/SystemManagement.vue
  50. 9
      04.系统编码/Frontend/src/hooks/Config.ts
  51. 26
      04.系统编码/Frontend/src/index.less

2
.gitignore

@ -1,2 +1,4 @@
/04.系统编码/Backend/src/main/resources/static
/04.系统编码/SendService/02.Plugins/packages
/04.系统编码/Frontend/public/images/decision-support
/04.系统编码/Frontend/public/images/ecological-environment

6
04.系统编码/Backend/src/main/java/com/userinformation/backend/service/UserService.java

@ -1,5 +1,6 @@
package com.userinformation.backend.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -7,6 +8,7 @@ import com.userinformation.backend.mapper.UserMapper;
import com.userinformation.backend.model.dao.User;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
@Service
@ -24,10 +26,11 @@ public class UserService extends ServiceImpl<UserMapper, User> {
public List<User> findAllUserPage(Integer current, Integer size){
IPage<User> page = new Page<>(current, size);
return baseMapper.selectPage(page, null).getRecords();
return baseMapper.selectPage(page, new QueryWrapper<User>().orderByDesc("user_registration_date")).getRecords();
}
public int insertUser(User user){
user.setUserRegistrationDate(LocalDateTime.now());
return baseMapper.insert(user);
}
@ -36,6 +39,7 @@ public class UserService extends ServiceImpl<UserMapper, User> {
}
public int updateUser(User user){
user.setUserRegistrationDate(LocalDateTime.now());
return baseMapper.updateById(user);
}
}

2
04.系统编码/Frontend/.idea/workspace.xml

@ -4,6 +4,7 @@
<list default="true" id="4b7d7b72-f5b8-41e4-85d5-6267bdc12fc5" name="默认变更列表" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/Login.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/components/Login.vue" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/SystemManagement.vue" beforeDir="false" afterPath="$PROJECT_DIR$/src/components/SystemManagement.vue" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -75,6 +76,7 @@
<workItem from="1638430901827" duration="2042000" />
<workItem from="1638433091413" duration="7649000" />
<workItem from="1638440893221" duration="943000" />
<workItem from="1638441956659" duration="5371000" />
</task>
<task id="LOCAL-00001" summary="2021 12 01">
<created>1638357539757</created>

BIN
04.系统编码/Frontend/public/images/decision-support/通风廊道规划建议/通风廊道1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

BIN
04.系统编码/Frontend/public/images/decision-support/通风廊道规划建议/通风廊道2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 KiB

BIN
04.系统编码/Frontend/public/images/decision-support/高楼污染指数/高楼污染指数1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

BIN
04.系统编码/Frontend/public/images/decision-support/高楼污染指数/高楼污染指数2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 KiB

BIN
04.系统编码/Frontend/public/images/ecological-environment/111.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/EVI/albedo.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/EVI/evaporation.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/EVI/temperature0130.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/EVI/temperature1030.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/EVI/temperature1330.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/EVI/temperature2230.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/LAI/albedo.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/LAI/evaporation.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/LAI/temperature0130.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/LAI/temperature1030.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/LAI/temperature1330.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/LAI/temperature2230.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/NDVI/albedo.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/NDVI/evaporation.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/NDVI/temperature0130.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/NDVI/temperature1030.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/NDVI/temperature1330.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-change/NDVI/temperature2230.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/EVI/albedo.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/EVI/evaporation.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/EVI/temperature0130.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/EVI/temperature1030.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/EVI/temperature1330.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/EVI/temperature2230.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/LAI/albedo.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/LAI/evaporation.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/LAI/temperature0130.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/LAI/temperature1030.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/LAI/temperature1330.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/LAI/temperature2230.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/NDVI/albedo.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/NDVI/evaporation.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/NDVI/temperature0130.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/NDVI/temperature1030.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/NDVI/temperature1330.tif

Binary file not shown.

BIN
04.系统编码/Frontend/public/images/ecological-environment/plant-distribute/NDVI/temperature2230.tif

Binary file not shown.

167
04.系统编码/Frontend/src/components/DecisionSupport.vue

@ -5,53 +5,49 @@
<div class="menu-item">
<h2 class="tip">指标选择</h2>
<el-row :gutter="12">
<el-col :span="24"><span @click="onIndicatorClick('通风廊道规划建议')" :class="{'active': currentIndicator === '通风廊道规划建议'}">通风廊道规划建议</span></el-col>
<el-col :span="24"><span @click="onIndicatorClick('高楼污染指数')" :class="{'active': currentIndicator === '高楼污染指数'}">高楼污染指数</span></el-col>
<el-col :span="24"><span @click="onIndicatorClick('plan-advice')" :class="{'active': currentIndicator === 'plan-advice'}">通风廊道规划建议</span></el-col>
<el-col :span="24"><span @click="onIndicatorClick('pollution-indicator')" :class="{'active': currentIndicator === 'pollution-indicator'}">高楼污染指数</span></el-col>
</el-row>
</div>
<div class="menu-item" v-if="currentIndicator === 'plan-advice'">
<h2 class="tip">产品选择</h2>
<el-row :gutter="12">
<el-col :span="24"><span @click="onProductClick('control-experiment')" :class="{'active': currentProduct === 'control-experiment'}">控制实验</span></el-col>
<el-col :span="24"><span @click="onProductClick('product-influence')" :class="{'active': currentProduct === 'product-influence'}">通风廊道的影响</span></el-col>
<el-col :span="24"><span @click="onProductClick('product-experiment')" :class="{'active': currentProduct === 'product-experiment'}">通风廊道试验</span></el-col>
</el-row>
</div>
</div>
<div class="container panel">
<div class="container panel decision-container">
<span class="save-btn"><img src="/images/save.png" /></span>
<div class="picture-view advice-picture-view" v-if="currentIndicator === '通风廊道规划建议'">
<div class="picture">
<h2 class="title">南京市潜在通风廊道</h2>
<div class="picture-view advice-picture-view" v-if="currentIndicator === 'plan-advice'">
<el-row :gutter="0">
<el-col :span="8" v-for="(item, index) in items" :key="index">
<h2 class="title">{{item.title}}</h2>
<el-image
src="/images/decision-support/通风廊道规划建议/通风廊道1.png"
:preview-src-list="srcList"
:initial-index="1"
:src="item.imgUrl"
:preview-src-list="item.preview"
:initial-index="0"
fit="contain"
>
</el-image>
<template #error>
<div class="image-slot">
<img src="/images/null-picture.png" />
</div>
<div class="picture">
<h2 class="title">南京市通风廊道规划示意图</h2>
<el-image
src="/images/decision-support/通风廊道规划建议/通风廊道2.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
class="border"
>
<p class="image-tip">暂无图片</p>
</template>
</el-image>
</el-col>
</el-row>
</div>
</div>
<div class="picture-view indicator-picture-view" v-if="currentIndicator === '高楼污染指数'">
<h2 class="title">南京市高楼污染指数-PM2.5</h2>
<div class="picture-view indicator-picture-view" v-if="currentIndicator === 'pollution-indicator'">
<h2 class="title">高楼污染指数</h2>
<div class="picture-block">
<div class="picture">
<el-image
src="/images/decision-support/高楼污染指数/高楼污染指数1.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</div>
<div class="picture">
<el-image
src="/images/decision-support/高楼污染指数/高楼污染指数2.png"
:preview-src-list="srcList"
:src="indicatorImg"
:preview-src-list="indicatorPreview"
:initial-index="1"
fit="contain"
>
@ -65,57 +61,122 @@
<script lang="ts">
import { onMounted, reactive, toRefs } from 'vue';
import moment from "moment";
import * as Tiff from 'browser-tiff.js';
import { DecisionSupportConfig } from '../hooks/Config';
export default {
name: 'DecisionSupport',
setup() {
let options = reactive({
currentIndicator: '通风廊道规划建议',
srcList: ['/images/picture.png']
currentIndicator: 'plan-advice',
currentProduct: 'control-experiment',
items: [{
title: '比湿',
imgName: 'TFLD_Q2',
imgUrl: '',
preview: []
}, {
title: '风速和风向',
imgName: 'TFLD_V10',
imgUrl: '',
preview: []
}, {
title: '降水',
imgName: 'TFLD_RAIN',
imgUrl: '',
preview: []
}, {
title: '平均气温',
imgName: 'TFLD_T2',
imgUrl: '',
preview: []
}, {
title: '最低温度',
imgName: 'TFLD_TN',
imgUrl: '',
preview: []
}, {
title: '最高温度',
imgName: 'TFLD_TX',
imgUrl: '',
preview: []
}],
indicatorImg: '/images/decision-support/pollution-indicator/pollution-indicator.png',
indicatorPreview: ['/images/decision-support/pollution-indicator/pollution-indicator.png']
})
onMounted(() => {
setImage(options.currentIndicator + '/' + options.currentProduct);
})
const onIndicatorClick = (indicator) => {
options.currentIndicator = indicator;
if(options.currentIndicator === 'plan-advice')
setImage(options.currentIndicator + '/' + options.currentProduct);
}
const onProductClick = (product) => {
options.currentProduct = product;
setImage('plan-advice' + '/' + options.currentProduct);
}
const setImage = (type) => {
for(let index = 0; index < 6; index ++){
initImage(type, options.items[index].imgName, index);
}
}
const initImage = (type, imgName, index) => {
var xhr = new XMLHttpRequest();
xhr.responseType = 'arraybuffer';
xhr.open('GET', DecisionSupportConfig.getUrl(type, imgName));
xhr.onload = function (e) {
let tiff = new Tiff({buffer: xhr.response});
let canvas = tiff.toCanvas();
let image = new Image();
image.src = canvas.toDataURL("image/png");
options.items[index].imgUrl = image.src;
options.items[index].preview = [image.src];
};
xhr.send();
}
return {
...toRefs(options),
onIndicatorClick
onIndicatorClick,
onProductClick
}
}
}
</script>
<style lang="less" scoped>
.main {
.container {
.decision-container {
height: calc(~"100% - 0.6rem");
padding: 0.2rem 0 0.2rem 0.2rem;
.save-btn {
top: 0.6rem;
right: 0.6rem;
}
.advice-picture-view {
width: 100%;
height: 100%;
display: flex;
align-items: center;
.picture {
width: 7.98rem;
height: auto;
display: block;
:deep(.el-row) {
width: 100%;
.title {
padding: 0;
margin-bottom: 0.7rem;
font-size: 0.22rem;
}
.el-col {
height: 46%;
margin-top: 1%;
text-align: center;
.el-image {
width: 99%;
height: auto;
margin: 0 auto;
&.border {
border: 1px solid #666666;
}
height: calc(~"100% - 0.4rem");
margin-top: 0.1rem;
}
&:last-of-type {
width: 5.34rem;
}
}
}

10
04.系统编码/Frontend/src/components/Login.vue

@ -40,10 +40,8 @@ export default {
const errors = [];
if (option.inputName == null || option.inputName.trim().length == 0)
errors.push('登录名');
if (option.inputPassword == null || option.inputPassword.trim().length == 0)
errors.push('登录密码');
return errors;
}
@ -70,8 +68,6 @@ export default {
}
})
}
}
return {
@ -109,8 +105,6 @@ export default {
}
.importInput {
//width: 6.51rem;
//height: 6.89rem;
background: #FFFFFF;
border: 1px solid #707070;
opacity: 1;
@ -153,6 +147,7 @@ export default {
padding-left: 0.54rem;
}
}
img {
width: 0.18rem;
height: 0.1792rem;
@ -162,11 +157,13 @@ export default {
}
}
}
img {
width: 1.5733rem;
height: 1.5715rem;
margin-top: .35rem;
}
.btn{
width: 4.96rem;
height: 0.69rem;
@ -177,4 +174,5 @@ export default {
font-size: 0.22rem;
margin-bottom: 1.27rem;
}
</style>

6
04.系统编码/Frontend/src/components/RamanLidar.vue

@ -65,6 +65,12 @@
:initial-index="1"
fit="contain"
>
<template #error>
<div class="image-slot">
<img src="/images/null-picture.png" />
</div>
<p class="image-tip">暂无图片</p>
</template>
</el-image>
</div>
</div>

360
04.系统编码/Frontend/src/components/SynergyEvaluation.vue

@ -8,13 +8,13 @@
植被分布对气候的影响
<img src="/images/line.png" v-if="currentTab === 'plant-distribute'" />
</div>
<div class="tab-item" @click="onTabClick('植被和气候要素变化趋势')" :class="{'active': currentTab === '植被和气候要素变化趋势'}">
<div class="tab-item" @click="onTabClick('element-change-trend')" :class="{'active': currentTab === 'element-change-trend'}">
植被和气候要素变化趋势
<img src="/images/line.png" v-if="currentTab === '植被和气候要素变化趋势'" />
<img src="/images/line.png" v-if="currentTab === 'element-change-trend'" />
</div>
<div class="tab-item" @click="onTabClick('植被和气候要素的监测')" :class="{'active': currentTab === '植被和气候要素的监测'}">
<div class="tab-item" @click="onTabClick('element-monitor')" :class="{'active': currentTab === 'element-monitor'}">
植被和气候要素的监测
<img src="/images/line.png" v-if="currentTab === '植被和气候要素的监测'" />
<img src="/images/line.png" v-if="currentTab === 'element-monitor'" />
</div>
</div>
<div class="main">
@ -22,43 +22,43 @@
<div class="menu-item" v-if="currentTab === 'plant-change' || currentTab === 'plant-distribute'">
<h2 class="tip">要素选择</h2>
<el-row :gutter="12">
<el-col :span="24"><span @click="onElementClick('NDVI')" :class="{'active': currentElement === 'NDVI'}">NDVI</span></el-col>
<el-col :span="24"><span @click="onElementClick('LAI')" :class="{'active': currentElement === 'LAI'}">LAI</span></el-col>
<el-col :span="24"><span @click="onElementClick('EVI')" :class="{'active': currentElement === 'EVI'}">EVI</span></el-col>
<el-col :span="24"><span @click="onElementClick('NDVI')" :class="{'active': currentElement === 'NDVI'}">归一化植被指数NDVI</span></el-col>
<el-col :span="24"><span @click="onElementClick('LAI')" :class="{'active': currentElement === 'LAI'}">叶面积指数LAI</span></el-col>
<el-col :span="24"><span @click="onElementClick('EVI')" :class="{'active': currentElement === 'EVI'}">增强植被指数EVI</span></el-col>
</el-row>
</div>
<div class="menu-item" v-if="currentTab === '植被和气候要素变化趋势' || currentTab === '植被和气候要素的监测'">
<div class="menu-item" v-if="currentTab === 'element-change-trend' || currentTab === 'element-monitor'">
<h2 class="tip">要素选择</h2>
<el-row :gutter="12">
<el-col :span="24"><span @click="onCategoryClick('地表温度LST')" :class="{'active': currentCategory === '地表温度LST'}">地表温度LST</span></el-col>
<el-col :span="24"><span @click="onCategoryClick('叶面积指数LAI')" :class="{'active': currentCategory === '叶面积指数LAI'}">叶面积指数LAI</span></el-col>
<el-col :span="24"><span @click="onCategoryClick('增强植被指数EVI')" :class="{'active': currentCategory === '增强植被指数EVI'}">增强植被指数EVI</span></el-col>
<el-col :span="24"><span @click="onCategoryClick('归一化植被指数NDVI')" :class="{'active': currentCategory === '归一化植被指数NDVI'}">归一化植被指数NDVI</span></el-col>
<el-col :span="24"><span @click="onCategoryClick('反照率Albedo')" :class="{'active': currentCategory === '反照率Albedo'}">反照率Albedo</span></el-col>
<el-col :span="24"><span @click="onCategoryClick('蒸散发Evapotranspiration')" :class="{'active': currentCategory === '蒸散发Evapotranspiration'}">蒸散发Evapotranspiration</span></el-col>
<el-col :span="24" v-if="currentTab === '植被和气候要素的监测'"><span @click="onCategoryClick('土地覆盖类型')" :class="{'active': currentCategory === '土地覆盖类型'}">土地覆盖类型</span></el-col>
<el-col :span="24"><span @click="onCategoryClick('LST')" :class="{'active': currentCategory === 'LST'}">地表温度LST</span></el-col>
<el-col :span="24"><span @click="onCategoryClick('LAI')" :class="{'active': currentCategory === 'LAI'}">叶面积指数LAI</span></el-col>
<el-col :span="24"><span @click="onCategoryClick('EVI')" :class="{'active': currentCategory === 'EVI'}">增强植被指数EVI</span></el-col>
<el-col :span="24"><span @click="onCategoryClick('NDVI')" :class="{'active': currentCategory === 'NDVI'}">归一化植被指数NDVI</span></el-col>
<el-col :span="24"><span @click="onCategoryClick('Albedo')" :class="{'active': currentCategory === 'Albedo'}">反照率Albedo</span></el-col>
<el-col :span="24"><span @click="onCategoryClick('Evapotranspiration')" :class="{'active': currentCategory === 'Evapotranspiration'}">蒸散发Evapotranspiration</span></el-col>
<el-col :span="24" v-if="currentTab === 'element-monitor'"><span @click="onCategoryClick('土地覆盖类型')" :class="{'active': currentCategory === '土地覆盖类型'}">土地覆盖类型</span></el-col>
</el-row>
</div>
<div class="menu-item" v-if="currentTab === '植被和气候要素的监测'">
<div class="menu-item" v-if="currentTab === 'element-monitor'">
<h2 class="tip">时间点选择</h2>
<el-row :gutter="12">
<el-col :span="24"><span @click="onTimeClick('地表温度(01:30)')" :class="{'active': currentTime === '地表温度(01:30)'}">地表温度01:30</span></el-col>
<el-col :span="24"><span @click="onTimeClick('地表温度(10:30)')" :class="{'active': currentTime === '地表温度(10:30)'}">地表温度10:30</span></el-col>
<el-col :span="24"><span @click="onTimeClick('地表温度(13:30)')" :class="{'active': currentTime === '地表温度(13:30)'}">地表温度13:30</span></el-col>
<el-col :span="24"><span @click="onTimeClick('地表温度(13:30)')" :class="{'active': currentTime === '地表温度(22:30)'}">地表温度22:30</span></el-col>
<el-col :span="24"><span @click="onTimeClick('time0130')" :class="{'active': currentTime === 'time0130'}">地表温度01:30</span></el-col>
<el-col :span="24"><span @click="onTimeClick('time1030')" :class="{'active': currentTime === 'time1030'}">地表温度10:30</span></el-col>
<el-col :span="24"><span @click="onTimeClick('time1330')" :class="{'active': currentTime === 'time1330'}">地表温度13:30</span></el-col>
<el-col :span="24"><span @click="onTimeClick('time2230')" :class="{'active': currentTime === 'time2230'}">地表温度22:30</span></el-col>
</el-row>
</div>
</div>
<div class="container panel synergy-container">
<span class="save-btn"><img src="/images/save.png" /></span>
<div class="element-select" v-if="currentTab === '植被和气候要素变化趋势' || currentTab === '植被和气候要素的监测'">
<div class="surface-temperature" v-if="currentTab === '植被和气候要素变化趋势'">
<span @click="onSurfaceTemperatureClick('地表温度(01:30)')" :class="{'active': currentSurfaceTemperatureTime === '地表温度(01:30)'}">地表温度01:30</span>
<span @click="onSurfaceTemperatureClick('地表温度(10:30)')" :class="{'active': currentSurfaceTemperatureTime === '地表温度(10:30)'}">地表温度10:30</span>
<span @click="onSurfaceTemperatureClick('地表温度(13:30)')" :class="{'active': currentSurfaceTemperatureTime === '地表温度(13:30)'}">地表温度13:30</span>
<span @click="onSurfaceTemperatureClick('地表温度(22:30)')" :class="{'active': currentSurfaceTemperatureTime === '地表温度(22:30)'}">地表温度22:30</span>
<div class="element-select" v-if="currentTab === 'element-change-trend' || currentTab === 'element-monitor'">
<div class="surface-temperature" v-if="currentTab === 'element-change-trend'">
<span @click="onSurfaceTemperatureClick('time0130')" :class="{'active': currentSurfaceTemperatureTime === 'time0130'}">地表温度01:30</span>
<span @click="onSurfaceTemperatureClick('time1030')" :class="{'active': currentSurfaceTemperatureTime === 'time1030'}">地表温度10:30</span>
<span @click="onSurfaceTemperatureClick('time1330')" :class="{'active': currentSurfaceTemperatureTime === 'time1330'}">地表温度13:30</span>
<span @click="onSurfaceTemperatureClick('time2230')" :class="{'active': currentSurfaceTemperatureTime === 'time2230'}">地表温度22:30</span>
</div>
<div class="surface-temperature" v-if="currentTab === '植被和气候要素的监测'">
<div class="surface-temperature" v-if="currentTab === 'element-monitor'">
<span @click="onYearClick('2000')" :class="{'active': currentYear === '2000'}">2000</span>
<span @click="onYearClick('2001')" :class="{'active': currentYear === '2001'}">2001</span>
<span @click="onYearClick('2002')" :class="{'active': currentYear === '2002'}">2002</span>
@ -80,181 +80,44 @@
<span @click="onYearClick('2018')" :class="{'active': currentYear === '2018'}">2018</span>
<span @click="onYearClick('2019')" :class="{'active': currentYear === '2019'}">2019</span>
<span @click="onYearClick('2020')" :class="{'active': currentYear === '2020'}">2020</span>
<span @click="onYearClick('多年平均值2000-2020')" :class="{'active': currentYear === '多年平均值2000-2020'}">多年平均值2000-2020</span>
<span @click="onYearClick('multi-years')" :class="{'active': currentYear === 'multi-years'}">多年平均值2000-2020</span>
</div>
</div>
<div class="picture-view synergy-picture-view" v-if="currentTab === 'plant-change' || currentTab === 'plant-distribute'">
<el-row :gutter="0">
<el-col :span="8">
<h2 class="title">地表温度01:30</h2>
<el-col :span="8" v-for="(item, index) in items" :key="index">
<h2 class="title">{{item.title}}</h2>
<el-image
:src="imgUrl"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="8">
<h2 class="title">地表温度10:30</h2>
<el-image
src="/images/picture2.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="8">
<h2 class="title">地表温度13:30</h2>
<el-image
src="/images/picture1.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="8">
<h2 class="title">地表温度22:30</h2>
<el-image
src="/images/picture1.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="8">
<h2 class="title">反照率</h2>
<el-image
src="/images/picture1.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="8">
<h2 class="title">蒸散发</h2>
<el-image
src="/images/picture1.png"
:preview-src-list="srcList"
:initial-index="1"
:src="item.imgUrl"
:preview-src-list="item.preview"
:initial-index="0"
fit="contain"
>
<template #error>
<div class="image-slot">
<img src="/images/null-picture.png" />
</div>
<p class="image-tip">暂无图片</p>
</template>
</el-image>
</el-col>
</el-row>
</div>
<div class="picture-view multi-picture-view" v-if="currentTab === '植被和气候要素变化趋势' || currentTab === '植被和气候要素的监测'">
<div class="picture-view multi-picture-view" v-if="currentTab === 'element-change-trend' || currentTab === 'element-monitor'">
<el-row :gutter="0">
<el-col :span="4">
<el-image
src="/images/picture3.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="4">
<el-image
src="/images/picture3.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="4">
<el-image
src="/images/picture3.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="4">
<el-image
src="/images/picture3.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="4">
<el-image
src="/images/picture3.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="4">
<el-image
src="/images/picture3.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="4">
<el-image
src="/images/picture3.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="4">
<el-image
src="/images/picture3.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="4">
<el-col :span="4" v-for="(item, index) in trendItems" :key="index">
<el-image
src="/images/picture3.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="4">
<el-image
src="/images/picture3.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="4">
<el-image
src="/images/picture3.png"
:preview-src-list="srcList"
:initial-index="1"
fit="contain"
>
</el-image>
</el-col>
<el-col :span="4">
<el-image
src="/images/picture3.png"
:preview-src-list="srcList"
:initial-index="1"
:src="item.imgUrl"
:preview-src-list="item.preview"
:initial-index="0"
fit="contain"
>
<template #error>
<div class="image-slot">
<img src="/images/null-picture.png" />
</div>
<p class="image-tip">暂无图片</p>
</template>
</el-image>
</el-col>
</el-row>
@ -275,38 +138,106 @@
let options = reactive({
currentTab: 'plant-change',
currentElement: 'NDVI',
currentCategory: '地表温度LST',
currentTime: '地表温度(01:30)',
currentCategory: 'LST',
currentTime: 'time0130',
currentYear: '2000',
currentSurfaceTemperatureTime: '地表温度(01:30)',
currentSurfaceTemperatureTime: 'time0130',
srcList: [],
imgUrl: null,
imgUrls: [],
items: [{
//'10:30', '13:30', '22:30', '', '',
title: '地表温度(01:30)',
type: 'temperature0130'
type: 'temperature0130',
imgUrl: '',
preview: []
}, {
title: '地表温度(10:30)',
type: 'temperature1030',
imgUrl: '',
preview: []
}, {
title: '地表温度(13:30)',
type: 'temperature1330',
imgUrl: '',
preview: []
}, {
title: '地表温度(22:30)',
type: 'temperature2230',
imgUrl: '',
preview: []
}, {
title: '反照率',
type: 'albedo',
imgUrl: '',
preview: []
}, {
title: '蒸散发',
type: 'evaporation',
imgUrl: '',
preview: []
}],
trendItems: [{
type: 'month_01',
imgUrl: '',
preview: []
}, {
type: 'month_02',
imgUrl: '',
preview: []
}, {
type: 'month_03',
imgUrl: '',
preview: []
}, {
type: 'month_04',
imgUrl: '',
preview: []
}, {
type: 'month_05',
imgUrl: '',
preview: []
}, {
type: 'month_06',
imgUrl: '',
preview: []
}, {
type: 'month_07',
imgUrl: '',
preview: []
}, {
type: 'month_08',
imgUrl: '',
preview: []
}, {
type: 'month_09',
imgUrl: '',
preview: []
}, {
type: 'month_10',
imgUrl: '',
preview: []
}, {
type: 'month_11',
imgUrl: '',
preview: []
}, {
type: 'month_12',
imgUrl: '',
preview: []
}]
})
onMounted(() => {
setImage();
setImage(6, options.items, options.currentElement);
})
const setImage = () => {
initImage(options.currentTab, options.currentElement, 'temperature0130');
initImage(options.currentTab, options.currentElement, 'temperature1030');
initImage(options.currentTab, options.currentElement, 'temperature1330');
initImage(options.currentTab, options.currentElement, 'temperature2230');
initImage(options.currentTab, options.currentElement, 'albedo');
initImage(options.currentTab, options.currentElement, 'evaporation');
for (let i = 0; i < options.items.length; i++) {
initImage(options.currentTab, options.currentElement, 'temperature0130');
const setImage = (number, values, element) => {
for(let index = 0; index < number; index ++){
initImage(options.currentTab, element, values[index].type, index, values);
}
}
const initImage = (tabName, elementName, type) => {
const initImage = (tabName, elementName, type, index, values) => {
var xhr = new XMLHttpRequest();
xhr.responseType = 'arraybuffer';
xhr.open('GET', SynergyEvaluationConfig.getUrl(tabName, elementName, type));
@ -315,22 +246,34 @@
let canvas = tiff.toCanvas();
let image = new Image();
image.src = canvas.toDataURL("image/png");
options.imgUrl = image.src;
options.srcList = [image.src];
values[index].imgUrl = image.src;
values[index].preview = [image.src];
};
xhr.send();
}
const onTabClick = (name) => {
options.currentTab = name;
if(options.currentTab === 'plant-change' || options.currentTab === 'plant-distribute')
setImage(6, options.items, options.currentElement);
else if(options.currentTab === 'element-change-trend')
setImage(12, options.trendItems, options.currentCategory + '/' + options.currentSurfaceTemperatureTime);
else
setImage(12, options.trendItems, options.currentCategory + '/' + options.currentTime + '/' + options.currentYear);
}
const onElementClick = (element) => {
options.currentElement = element;
setImage(6, options.items, options.currentElement);
}
const onCategoryClick = (category) => {
options.currentCategory = category;
if(options.currentTab === 'element-change-trend')
setImage(12, options.trendItems, options.currentCategory + '/' + options.currentSurfaceTemperatureTime);
else
setImage(12, options.trendItems, options.currentCategory + '/' + options.currentTime + '/' + options.currentYear);
}
const onTimeClick = (time) => {
@ -339,10 +282,12 @@
const onSurfaceTemperatureClick = (value) => {
options.currentSurfaceTemperatureTime = value;
setImage(12, options.trendItems, options.currentCategory + '/' + options.currentSurfaceTemperatureTime);
}
const onYearClick = (year) => {
options.currentYear = year;
setImage(12, options.trendItems, options.currentCategory + '/' + options.currentTime + '/' + options.currentYear);
}
return {
@ -363,9 +308,11 @@
height: calc(~"100% - 0.6rem");
padding: 0.2rem 0 0.2rem 0.2rem;
.synergy-picture-view {
width: 100%;
height: 100%;
display: flex;
:deep(.el-row) {
width: 100%;
.title {
padding: 0;
font-size: 0.22rem;
@ -394,6 +341,7 @@
height: 100%;
display: flex;
align-items: center;
flex-direction: column;
}
&:nth-of-type(6n) {

87
04.系统编码/Frontend/src/components/SystemManagement.vue

@ -6,10 +6,8 @@
<div class="box">
<div class="left">
<h1>用户姓名</h1>
<input type="text" v-model="state1" class="textInput"/>
<img src="/images/search.png" @click="onSearch">
<div><img src="/images/search.png" @click="onSearch"></div>
</div>
<div class="right">
<span @click="onAddClick">添加新用户</span>
@ -17,7 +15,7 @@
</div>
<div class="tableMessage">
<el-table :data="tableData" border style="width:100%;color: black;">
<el-table :data="tableData" border style="color: black;">
<el-table-column type="index" label="序号" align="center" width="100px"/>
<el-table-column prop="userName" label="用户姓名" align="center"/>
<el-table-column prop="userAccountNumber" label="用户账号" align="center"/>
@ -49,7 +47,7 @@
page-size="2"
@prev-click="prev"
@next-click="next"
@current-change="changenum">
@current-change="changEnum">
</el-pagination>
</div>
</div>
@ -58,10 +56,10 @@
<el-dialog v-model="dialogFormVisible" :title="title" show-close=false center=true width="961px" top="17%">
<el-form :model="form">
<el-form-item label="用户账号:" :label-width="formLabelWidth" >
<el-input v-model="form.userAccountNumber" autocomplete="off" style="width: 260px" :disabled="isdisabled"></el-input>
<el-input v-model="form.userAccountNumber" autocomplete="off" style="width: 260px" :disabled="isDisabled"></el-input>
</el-form-item>
<el-form-item label="用户姓名:" :label-width="formLabelWidth">
<el-input v-model="form.userName" autocomplete="off" style="width: 260px"></el-input>
<el-form-item label="用户密码:" :label-width="formLabelWidth">
<el-input v-model="form.userPassword" autocomplete="off" style="width: 260px" type="password"></el-input>
</el-form-item>
<el-form-item label="电话:" :label-width="formLabelWidth">
<el-input v-model="form.userPhone" autocomplete="off" style="width: 260px"></el-input>
@ -69,6 +67,9 @@
<el-form-item label="邮箱:" :label-width="formLabelWidth">
<el-input v-model="form.userEmail" autocomplete="off" style="width: 260px"></el-input>
</el-form-item>
<el-form-item label="用户姓名:" :label-width="formLabelWidth">
<el-input v-model="form.userName" autocomplete="off" style="width: 260px"></el-input>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
@ -87,13 +88,14 @@
import {reactive, toRefs ,ref , onMounted} from 'vue';
import { post } from "../uilts/axios";
import { ElMessage } from 'element-plus'
import { format } from '../hooks/String';
export default {
name: 'SystemManagement',
setup() {
let option = reactive({
state1:'',
dialogFormVisible:false,
isdisabled:false,
isDisabled:false,
title:'',
formLabelWidth:"100px",
total:"",
@ -103,10 +105,10 @@ export default {
userName:'',
userAccountNumber:'',
userPhone:'',
userEmail:''
userEmail:'',
userPassword:''
},
tableData:[]
})
const findAllUser= ()=>{
return post("user/findAllUser",{
@ -123,23 +125,23 @@ export default {
findAllUser()
})
//
const onAddClick = ()=> {
option.isdisabled=false
option.isDisabled=false
option.title = '添加用户'
option.dialogFormVisible = true
option.form = {
userName:'',
userAccountNumber:'',
userPhone:'',
userEmail:''
userEmail:'',
userPassword:''
}
}
//
const onAmendClick = (index, rows)=>{
option.isdisabled = true
option.isDisabled = true
option.title = '修改信息'
option.dialogFormVisible = true
option.form = JSON.parse(JSON.stringify(rows[index]))
@ -188,14 +190,37 @@ export default {
findAllUser()
}
const changenum =(e)=>{
const changEnum =(e)=>{
option.current= e
findAllUser()
}
const verify = () => {
let errors = [];
if (option.form.userAccountNumber == null || option.form.userAccountNumber.trim() == ""){
errors.push("用户账号");
}
if (option.form.userPassword == null || option.form.userPassword.trim() == ""){
errors.push("用户密码");
}
if (option.form.userName == null || option.form.userName.trim() == ""){
errors.push("用户姓名");
}
// if (option.form.userPhone == null || option.form.userPhone.trim() == ""){
// errors.push("");
// }
if (errors.length > 0){
ElMessage.error({
message: format("{0}不能为空", errors.join(", ")),
type: 'error'
});
}
return errors.length > 0;
}
const submit = ()=> {
if (verify()) return;
if(option.title === '修改信息'){
post("user/updateUser", option.form, "application/json").then((res: any) => {
option.dialogFormVisible=false
@ -216,6 +241,7 @@ export default {
}
if(option.title === '添加用户'){
if (verify()) return;
post("user/insertUser",option.form,"application/json").then((res:any)=>{
option.dialogFormVisible = false
if (res.error != 0){
@ -245,8 +271,7 @@ export default {
confirmEvent,
prev,
next,
changenum
changEnum
}
}
}
@ -272,23 +297,13 @@ export default {
.left{
display: flex;
justify-content: space-between;
position: relative;
align-items: center;
.textInput{
width: 305px;
}
&::after {
content: '';
width: 0;
height: 0;
display: block;
position: absolute;
top: 50%;
right: 70px;
transform: translateY(-50%);
border-left: 0.08rem solid transparent;
border-right: 0.08rem solid transparent;
border-top: 0.08rem solid #222222;
height: 35px;
line-height: 35px;
font-size: 20px;
}
h1{
@ -305,6 +320,7 @@ export default {
width: 44px;
height: 44px;
margin-left: 10px;
padding-top: 4px;
cursor: pointer;
}
}
@ -329,7 +345,6 @@ export default {
}
.tableMessage{
padding: 36px 20px 20px;
font-size: 18px;
@ -342,7 +357,6 @@ export default {
opacity: 1;
cursor: pointer;
font-weight: 400;
}
}
@ -360,7 +374,10 @@ export default {
:deep(.el-form){
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
justify-content: space-between;
margin: 0 auto;
width: 90%;
//align-content: flex-start;
}
:deep(.el-button){

9
04.系统编码/Frontend/src/hooks/Config.ts

@ -21,10 +21,13 @@ export class RamanLidarConfig {
}
export class SynergyEvaluationConfig {
public static url: string = "/images/ecological-environment/111.tif";
public static getUrl(tabName: string, elementName: string, type: string): string {
return format('/images/ecological-environment/{0}/{1}/{2}.tif', tabName, elementName, type)
//return this.url+ '/' + station + '/' + type + '/' + time.format("YYYY/YYYYMM/YYYYMMDD/YYYYMMDDHHmmss.png");
}
}
export class DecisionSupportConfig {
public static getUrl(productName: string, imgName: string): string {
return format('/images/decision-support/{0}/{1}.tif', productName, imgName)
}
}

26
04.系统编码/Frontend/src/index.less

@ -407,6 +407,19 @@ img {
max-width: 100%;
margin: 0 auto;
}
}
.el-image-viewer__mask {
opacity: 0.8;
}
.el-image-viewer__canvas {
img {
width: 75%;
}
}
}
}
.image-slot {
width: 1.5rem;
@ -428,19 +441,6 @@ img {
text-align: center;
margin-top: 10px;
}
}
.el-image-viewer__mask {
opacity: 0.8;
}
.el-image-viewer__canvas {
img {
width: 75%;
}
}
}
}
.save-btn {
width: 0.26rem;

Loading…
Cancel
Save