环境监测页面添加拟动态数据
This commit is contained in:
		
							parent
							
								
									78255cea06
								
							
						
					
					
						commit
						b5d6451b39
					
				| @ -7,90 +7,65 @@ | |||||||
|         </div> |         </div> | ||||||
|         <div style="margin-top: 10px; display: flex; justify-content: space-between"> |         <div style="margin-top: 10px; display: flex; justify-content: space-between"> | ||||||
|           <div style="display: flex; justify-content: space-between; margin-top: 10px; width: 100%"> |           <div style="display: flex; justify-content: space-between; margin-top: 10px; width: 100%"> | ||||||
|             <el-card style="width: 60%"> |             <el-card style="width: 60%; margin-right: 20px; border-radius: 16px"> | ||||||
|               <div style="display: flex; justify-content: space-between"> |               <div style="display: flex; justify-content: space-between"> | ||||||
|                 <div style="font-size: 16px; font-weight: bold; text-align: left">实时环境监测</div> |                 <div style="font-size: 16px; font-weight: bold; text-align: left">实时环境监测</div> | ||||||
|                 <div style="color: #999999; line-height: 25px"> |                 <div style="color: #999999; line-height: 25px"> | ||||||
|                   当前设备 |                   当前设备 | ||||||
|                   <el-select v-model="currentDevice" placeholder="Select" size="small" style="width: 160px; margin-left: 10px"> |                   <el-select | ||||||
|  |                     v-model="currentDevice" | ||||||
|  |                     placeholder="Select" | ||||||
|  |                     size="small" | ||||||
|  |                     style="width: 160px; margin-left: 10px" | ||||||
|  |                     @change="changeDevice($event)" | ||||||
|  |                   > | ||||||
|                     <el-option v-for="item in devices" :key="item.value" :label="item.detail" :value="item.id" /> |                     <el-option v-for="item in devices" :key="item.value" :label="item.detail" :value="item.id" /> | ||||||
|                   </el-select> |                   </el-select> | ||||||
|                 </div> |                 </div> | ||||||
|               </div> |               </div> | ||||||
|               <div class="envData"> |               <div class="envData"> | ||||||
|                 <div class="dt"> |                 <div class="dt"> | ||||||
|                   <div class="values">21℃</div> |                   <div class="values">{{ monitorData.co2 }}</div> | ||||||
|                   <div class="points">空气温度</div> |                   <div class="points">空气温度</div> | ||||||
|                 </div> |                 </div> | ||||||
|                 <div class="dt"> |                 <div class="dt"> | ||||||
|                   <div class="values">61%</div> |                   <div class="values">{{ monitorData.humidity }}</div> | ||||||
|                   <div class="points">空气湿度</div> |                   <div class="points">空气湿度</div> | ||||||
|                 </div> |                 </div> | ||||||
|                 <div class="dt"> |                 <div class="dt"> | ||||||
|                   <div class="values">1600mm</div> |                   <div class="values">{{ monitorData.rainfall }}</div> | ||||||
|                   <div class="points">空气温度</div> |                   <div class="points">降水量</div> | ||||||
|                 </div> |                 </div> | ||||||
|                 <div class="dt"> |                 <div class="dt"> | ||||||
|                   <div class="values">东南风</div> |                   <div class="values">{{ monitorData.wind }}</div> | ||||||
|                   <div class="points">风向</div> |                   <div class="points">风向</div> | ||||||
|                 </div> |                 </div> | ||||||
|               </div> | 
 | ||||||
|               <div class="envData"> |  | ||||||
|                 <div class="dt"> |                 <div class="dt"> | ||||||
|                   <div class="values">12μg/m³</div> |                   <div class="values">{{ monitorData.pm25 }}</div> | ||||||
|                   <div class="points">PM2.5</div> |                   <div class="points">PM2.5</div> | ||||||
|                 </div> |                 </div> | ||||||
|                 <div class="dt"> |                 <div class="dt"> | ||||||
|                   <div class="values">679Lux</div> |                   <div class="values">{{ monitorData.light }}</div> | ||||||
|                   <div class="points">光照强度</div> |                   <div class="points">光照强度</div> | ||||||
|                 </div> |                 </div> | ||||||
|                 <div class="dt"> |                 <div class="dt"> | ||||||
|                   <div class="values">440ppm</div> |                   <div class="values">{{ monitorData.co2 }}</div> | ||||||
|                   <div class="points">二氧化碳浓度</div> |                   <div class="points">二氧化碳浓度</div> | ||||||
|                 </div> |                 </div> | ||||||
|                 <div class="dt"> |                 <div class="dt"> | ||||||
|                   <div class="values">1.5m/s</div> |                   <div class="values">{{ monitorData.windSpeed }}</div> | ||||||
|                   <div class="points">风速</div> |                   <div class="points">风速</div> | ||||||
|                 </div> |                 </div> | ||||||
|               </div> |               </div> | ||||||
|               <div class="notices"> |               <div class="notices"> | ||||||
|                 <div v-for="(item, index) in notices" :key="index"> |                 <div v-for="(item, index) in notices" :key="index"> | ||||||
|                   <img :src="getAssetsFile('images/smartFarm/bell.png')" alt="" style="height: 20px" /> |                   <img :src="getAssetsFile('images/smartFarm/bell.png')" alt="" style="height: 20px; margin-right: 5px" /> | ||||||
|                   <span style="font-size: 14px">{{ item.title }}</span> |                   <span style="font-size: 14px">{{ item.title }}</span> | ||||||
|                 </div> |                 </div> | ||||||
|               </div> |               </div> | ||||||
|             </el-card> |             </el-card> | ||||||
|             <el-card style="width: calc(40% - 20px); border-radius: 16px; padding: 10px"> |             <DataDisplay :title="'环境分析报告'" :data="rightData" style="flex: 1"></DataDisplay> | ||||||
|               <div style="font-size: 16px; font-weight: bold; text-align: left">作物生长状态</div> |  | ||||||
|               <div class="plantStatus"> |  | ||||||
|                 <div class="leftKey">酸碱度:</div> |  | ||||||
|                 <div class="rightValue">6.5 正常</div> |  | ||||||
|               </div> |  | ||||||
|               <div class="plantStatus"> |  | ||||||
|                 <div class="leftKey">养分含量:</div> |  | ||||||
|                 <div class="errorValue">N 元素含量不足</div> |  | ||||||
|               </div> |  | ||||||
|               <div class="plantStatus"> |  | ||||||
|                 <div class="leftKey">重金属含量:</div> |  | ||||||
|                 <div class="errorValue">Hg 金属含量超标</div> |  | ||||||
|               </div> |  | ||||||
|               <div class="plantStatus"> |  | ||||||
|                 <div class="leftKey">水温:</div> |  | ||||||
|                 <div class="errorValue">38℃ 偏高</div> |  | ||||||
|               </div> |  | ||||||
|               <div class="plantStatus"> |  | ||||||
|                 <div class="leftKey">水浑浊度:</div> |  | ||||||
|                 <div class="rightValue">良好</div> |  | ||||||
|               </div> |  | ||||||
|               <div class="plantStatus"> |  | ||||||
|                 <div class="leftKey">酸碱度:</div> |  | ||||||
|                 <div class="rightValue">正常</div> |  | ||||||
|               </div> |  | ||||||
|               <div class="plantStatus"> |  | ||||||
|                 <div class="leftKey">盐分含量:</div> |  | ||||||
|                 <div class="rightValue">正常</div> |  | ||||||
|               </div> |  | ||||||
|             </el-card> |  | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|       </template> |       </template> | ||||||
| @ -99,10 +74,12 @@ | |||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script setup> | <script setup> | ||||||
| import { ref } from 'vue'; | import { onMounted, ref } from 'vue'; | ||||||
| import Devices from '@/views/smartFarm/components/devices.vue'; | import Devices from '@/views/smartFarm/components/devices.vue'; | ||||||
| import Common from '@/views/smartFarm/components/common.vue'; | import Common from '@/views/smartFarm/components/common.vue'; | ||||||
| import { getAssetsFile } from '@/utils/index.js'; | import { getAssetsFile } from '@/utils/index.js'; | ||||||
|  | import DataDisplay from '@/views/smartFarm/components/dataDisplay.vue'; | ||||||
|  | import Mock from 'mockjs'; | ||||||
| 
 | 
 | ||||||
| /* --------------- data --------------- */ | /* --------------- data --------------- */ | ||||||
| // #region | // #region | ||||||
| @ -195,14 +172,68 @@ const devices = ref([ | |||||||
| const currentDevice = ref(0); | const currentDevice = ref(0); | ||||||
| const notices = ref([ | const notices = ref([ | ||||||
|   { |   { | ||||||
|     title: '2025年1月1日,预计将会有特大暴雨,请提前做好防护措施!', |     title: '2025年1月2日,预计将会有特大暴雨,请提前做好防护措施!', | ||||||
|     content: '', |     content: '', | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     title: '2025年1月1日,预计将会有特大暴雨,请提前做好防护措施!', |     title: '2025年1月1日,预计将会有大雨,请提前做好防护措施!', | ||||||
|     content: '', |     content: '', | ||||||
|   }, |   }, | ||||||
| ]); | ]); | ||||||
|  | let monitorData = ref({}); | ||||||
|  | let rightData = ref([]); | ||||||
|  | const changeDevice = (id) => { | ||||||
|  |   currentDevice.value = id; | ||||||
|  |   monitorData.value = getMockData()[0]; | ||||||
|  |   rightData.value = getMockData()[1]; | ||||||
|  | }; | ||||||
|  | // 生成模拟数据 | ||||||
|  | const getMockData = () => { | ||||||
|  |   // 左侧环境监测数据 | ||||||
|  |   const leftData = Mock.mock({ | ||||||
|  |     co2: () => randomRange(200, 800, 0) + 'ppm', // CO₂浓度(300~800ppm) | ||||||
|  |     temperature: () => randomRange(-10, 40, 1) + '℃', // 温度(-10~40℃) | ||||||
|  |     humidity: () => randomRange(10, 100, 0) + '%', // 湿度(10%~100%) | ||||||
|  |     wind: '@pick(["东南风", "西南风", "东北风", "西北风"])', | ||||||
|  |     rainfall: () => randomRange(0, 200, 1) + 'mm', // 降水量(0~200mm,1位小数) | ||||||
|  |     pm25: () => randomRange(0, 300, 0) + 'μg/m³', // PM2.5(0~300μg/m³,整数) | ||||||
|  |     light: () => randomRange(100, 1000, 0) + 'Lux', // 光照强度(100~1000Lux,整数) | ||||||
|  |     windSpeed: () => randomRange(0, 10, 1) + 'm/s', // 风速(0~10m/s,1位小数) | ||||||
|  |   }); | ||||||
|  |   // 右侧环境分析报告数据 | ||||||
|  |   const rightData = Mock.mock({ | ||||||
|  |     'list|6': [ | ||||||
|  |       { | ||||||
|  |         // 基础字段 | ||||||
|  |         'title|+1': ['酸碱度(pH)', '养分含量', '重金属含量', '水温', '水浑浊度', '盐分含量'], | ||||||
|  |         'status|1': ['0', '1'], | ||||||
|  |         'unit|+1': ['pH值', '%', 'mg/kg', '℃', 'NTU', 'dS/m'], | ||||||
|  | 
 | ||||||
|  |         // 动态生成异常文本 | ||||||
|  |         statusText: function () { | ||||||
|  |           const statusMap = { | ||||||
|  |             '酸碱度(pH)': | ||||||
|  |               this.status === '0' ? `酸碱度${Mock.mock('@float(4.0, 9.0, 1, 1)')}(${Mock.mock('@pick(["酸性过强","碱性过强"])')})` : '正常', | ||||||
|  |             养分含量: this.status === '0' ? `${Mock.mock('@pick(["N","P","K","Ca","Mg"])')}元素含量不足` : '正常', | ||||||
|  |             重金属含量: this.status === '0' ? `${Mock.mock('@pick(["镉","铅","砷","汞"])')}超标(${Mock.mock('@float(1, 5, 1, 1)')}mg/kg)` : '正常', | ||||||
|  |             水温: this.status === '0' ? `${Mock.mock('@integer(10, 40)')}℃(${Mock.mock('@pick(["低温胁迫","高温胁迫"])')})` : '正常', | ||||||
|  |             水浑浊度: this.status === '0' ? `浊度${Mock.mock('@integer(10, 50)')}NTU` : '正常', | ||||||
|  |             盐分含量: this.status === '0' ? `盐分${Mock.mock('@float(2, 5, 1, 1)')}dS/m` : '正常', | ||||||
|  |           }; | ||||||
|  |           return statusMap[this.title]; | ||||||
|  |         }, | ||||||
|  |       }, | ||||||
|  |     ], | ||||||
|  |   }); | ||||||
|  |   return [leftData, rightData.list]; | ||||||
|  | }; | ||||||
|  | // 自定义随机范围函数 | ||||||
|  | const randomRange = (min, max, fixed = 0) => { | ||||||
|  |   return Mock.Random.float(min, max, fixed).toFixed(fixed); | ||||||
|  | }; | ||||||
|  | onMounted(() => { | ||||||
|  |   changeDevice(0); | ||||||
|  | }); | ||||||
| // #endregion | // #endregion | ||||||
| 
 | 
 | ||||||
| /* --------------- methods --------------- */ | /* --------------- methods --------------- */ | ||||||
| @ -253,10 +284,12 @@ const chooseIcon = (type) => { | |||||||
| .envData { | .envData { | ||||||
|   display: flex; |   display: flex; | ||||||
|   justify-content: space-between; |   justify-content: space-between; | ||||||
|   margin: 20px 0; |   flex-wrap: wrap; | ||||||
|  |   margin-top: 20px; | ||||||
|   .dt { |   .dt { | ||||||
|     width: 24%; |     width: 25%; | ||||||
|     text-align: left; |     text-align: left; | ||||||
|  |     margin-bottom: 20px; | ||||||
|     .values { |     .values { | ||||||
|       color: #25bf82; |       color: #25bf82; | ||||||
|       font-size: 20px; |       font-size: 20px; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 2090205686@qq.com
						2090205686@qq.com