| 
					
				 | 
			
			
				@@ -15,12 +15,16 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					</el-select> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				</el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				<el-form-item label="观测时间:" prop="base"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					<el-date-picker v-model="dateRange" type="daterange" range-separator="至" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						start-placeholder="开始时间" end-placeholder="结束时间" style="width: 300px" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD HH:mm" format="YYYY-MM-DD" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						type="daterange" range-separator="-" start-placeholder="开始时间" end-placeholder="结束时间" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						:disabled-date="disabledDate" @focus="handleFocus" @calendar-change="handleChange" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						@change="handleDateChange" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						:default-time="[new Date(2000, 1, 1, 0, 0), new Date(2000, 1, 1, new Date().getHours(), 0)]" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						style="width: 300px;"></el-date-picker> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				</el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				<el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					<div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						<el-button type="primary">查询</el-button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						<el-button type="primary" @click="getHistoryList" >查询</el-button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						<el-button plain @click="resetForm(formRef)">重置</el-button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				</el-form-item> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -34,7 +38,10 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							<span>风向风速玫瑰图</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						<div class="mt5"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							<div ref="data" class="data_box"></div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							<el-row :gutter="10"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								<el-col :span="12"><div ref="data" class="data_box"></div></el-col> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								<el-col :span="12"><div ref="wind" class="data_box"></div></el-col> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							</el-row> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				</el-col> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -52,10 +59,47 @@ import { ref, computed, onMounted, reactive, watch, onDeactivated, onActivated } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { getDataItemList, getPlatformList, getRgDataList, getTacRecordList } from "@/api/modules/allData"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { Platform } from "@/api/interface"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { parseTime } from '@/utils/index'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { isToday, isWithinThirtyMinutes, getTimeStamp, getStamp } from "@/utils/dateTime"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { isToday, isWithinThirtyMinutes, getTimeStamp, getStamp, isWithin24Hours, isDateFuture, isDateRangeWithinDays } from "@/utils/dateTime"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const dateRange = ref<[any, any]>([parseTime(new Date(getTimeStamp(5)), '{y}-{m}-{d}') + ' 00:00', parseTime(new Date(), '{y}-{m}-{d} {h}') + ':00']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const handleDateRangeChange = (newVal) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const [startDate, endDate] = newVal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (endDate && isToday(endDate)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 获取当前时间的整点   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		const currentHour = new Date().getHours(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		const roundedEndDate = new Date(endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		roundedEndDate.setMinutes(0, 0, 0); // 设置分钟、秒、毫秒为0   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		const startZeroed = new Date(startDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		startZeroed.setHours(0, 0, 0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		dateRange.value = [parseTime(new Date(startZeroed)), parseTime(new Date(roundedEndDate))]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		const noTodayStart = new Date(startDate).setHours(0, 0, 0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		const noTodayEnd = new Date(endDate).setHours(23, 0, 0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		dateRange.value = [parseTime(new Date(noTodayStart)), parseTime(new Date(noTodayEnd))]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const handleDateChange = async (e) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (isDateRangeWithinDays(e[0], e[1], 30)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		await handleDateRangeChange(e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		getHistoryList() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		ElMessage.error("时间间隔不能大于30天"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const pickDay = ref() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const handleFocus = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pickDay.value = null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const limitTime = 1000 * 60 * 60 * 24 * 30 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const dateRange = ref<[any, any]>([parseTime(new Date(), '{y}-{m}-{d}') + ' 00:00', parseTime(new Date(), '{y}-{m}-{d} {h}:{i}')]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const disabledDate = (time: Date) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return time.getTime() > Date.now() - 8.64e6 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const handleChange = (val: Date[]) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const [pointDay] = val 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pickDay.value = pointDay 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const pageable = ref({ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -68,7 +112,7 @@ const pageable = ref({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	total: 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 let historyColumns = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		data_id: 2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		data_type: "风", 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -135,25 +179,116 @@ function formatDate(timestamp, type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const timeArr = ref() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const tempLineArr = ref() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const humidityLineArr = ref() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const pressureLineArr = ref() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const windD = ref<any>([]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const windS = ref<any>([]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const windInfo = ref<any>({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	max: 6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	speedMax:6 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const getHistoryList = async () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	const { data } = await getDataItemList({ ...pageable.value, pageSize: 99, as_code_list: [pageable.value.as_code], data_items: historyColumns, data_type: false, time_space:60, end_time:  getStamp(dateRange[1]), begin_time: getStamp(dateRange[0]) }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (!isDateRangeWithinDays(dateRange.value[0], dateRange.value[1], 30)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		ElMessage.error("时间间隔不能大于30天"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const { data } = await getDataItemList({ ...pageable.value, pageSize: 999, as_code_list: [pageable.value.as_code], data_items: historyColumns, data_type: false, time_space: 60, end_time: getStamp(dateRange.value[1]), begin_time: getStamp(dateRange.value[0]) }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	timeArr.value = data.list?.map(item => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return formatDate(item.data_time_i, 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	tempLineArr.value = data.list?.map(item => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return item[101] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	humidityLineArr.value = data.list?.map(item => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return item[106] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	let arr1 = new Array(16).fill(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	let arr2 = new Array(16).fill([]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	let num = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	data.list?.forEach((item, index) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (new Date(item.data_time_i * 1000).getHours() % 3 == 2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			num++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (item[2] >= 348.75 || item[2] < 11.25) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[0]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[0] = [...arr2[0], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (item[2] >= 326.25 && item[2] < 348.75) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[1]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[1] = [...arr2[1], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (item[2] >= 303.75 && item[2] < 326.25) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[2]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[2] = [...arr2[2], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (item[2] >= 281.25 && item[2] < 303.75) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[3]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[3] = [...arr2[3], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (item[2] >= 258.75 && item[2] < 281.25) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[4]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[4] = [...arr2[4], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (item[2] >= 236.25 && item[2] < 258.75) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[5]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[5] = [...arr2[5], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (item[2] >= 213.75 && item[2] < 236.25) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[6]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[6] = [...arr2[6], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (item[2] >= 191.25 && item[2] < 213.75) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[7]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[7] = [...arr2[7], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (item[2] >= 168.75 && item[2] < 191.25) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[8]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[8] = [...arr2[8], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (item[2] >= 146.25 && item[2] < 168.75) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[9]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[9] = [...arr2[9], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (item[2] >= 123.75 && item[2] < 146.25) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[10]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[10] = [...arr2[10], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (item[2] >= 101.25 && item[2] < 123.75) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[11]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[11] = [...arr2[11], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (item[2] >= 78.75 && item[2] < 101.25) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[12]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[12] = [...arr2[12], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (item[2] >= 56.25 && item[2] < 78.75) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[13]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[13] = [...arr2[13], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (item[2] >= 33.75 && item[2] < 56.25) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[14]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[14] = [...arr2[14], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (item[2] >= 11.25 && item[2] < 33.75) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr1[15]++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				arr2[15] = [...arr2[15], item[1]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const arr3 = arr2.map(subArr => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		const sum = subArr.reduce((a, b) => Number(a) + Number(b), 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		const avg = sum / subArr.length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return isNaN(avg) ? 0 : avg.toFixed(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	pressureLineArr.value = data.list?.map(item => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return item[202] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	windD.value = arr1.map((item) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return  isNaN(item / (num/100)) ? 0 :item / (num/100) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	windInfo.value.max = calMax(windD.value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	windInfo.value.speedMax = calMax(arr3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	windS.value = arr3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	showData() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	showWind() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 获取时间戳的小时 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function getHourFromTimestamp(timestamp) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const date = new Date(timestamp * 1000); // 将秒时间戳转换为毫秒时间戳 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return date.getHours(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 获取传入日期相差时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function getHoursDifference(date1, date2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const d1 = new Date(date1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const d2 = new Date(date2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const diffInMs = Math.abs(d2.getTime() - d1.getTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return Math.floor(diffInMs / (1000 * 60 * 60)) / 100; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 获取最大值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function calMax(arr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	let max = Math.max.apply(null, arr); // 获取最大值方法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	let maxint = Math.ceil(max / 6) * 6; // 向上以6的倍数取整 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return maxint === 0 ? 6 : maxint; // 输出最大值+6 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const formRef = ref() 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -167,9 +302,8 @@ const resetForm = (formEl) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if (!formEl) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	formEl.resetFields(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 风向 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const showData = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	let mychart = echarts.init(data.value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	let option = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -185,12 +319,12 @@ const showData = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				formatter: '{value}', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				textStyle: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					fontSize: 15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					color:  isDark.value ? '#fff' : "#000", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					color: isDark.value ? '#fff' : "#000", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			nameGap: 5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// 指示器名称和指示器轴的距离。[ default: 15 ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			splitNumber: 7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			splitNumber: 6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			splitLine: { // (这里是指所有圆环)坐标轴在 grid 区域中的分隔线。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				lineStyle: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					color: '#bbbbbb', 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -202,27 +336,33 @@ const showData = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			splitArea: { // 坐标轴在 grid 区域中的分隔区域,默认不显示。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				show: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				areaStyle: { // 分隔区域的样式设置。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					color: [isDark.value ? '#000' : "#fff",isDark.value ? '#000' : "#fff"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					color: [isDark.value ? '#000' : "#fff", isDark.value ? '#000' : "#fff"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					// 分隔区域颜色。分隔区域会按数组中颜色的顺序依次循环设置颜色。默认是一个深浅的间隔色。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			indicator: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'N', max: 21, axisLabel: { show: true, color:  isDark.value ? '#fff' : "#000" }, }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'NNW', max: 21 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'NW°', max: 21 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'WNW', max: 21 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'W°', max: 21 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'WSW', max: 21 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'WS°', max: 21 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'SSW', max: 21 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'S', max: 21 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'SSE', max: 21 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'SE', max: 21 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'ESE', max: 21 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'E', max: 21 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'ENE', max: 21 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'NE', max: 21 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ name: 'NNE', max: 21 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					name: 'N', max: windInfo.value.max, axisLabel: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						show: true, color: isDark.value ? '#fff' : "#000", formatter: function (params) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							return params.toFixed(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'NNW', max: windInfo.value.max }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'NW°', max: windInfo.value.max }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'WNW', max: windInfo.value.max }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'W°', max: windInfo.value.max }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'WSW', max: windInfo.value.max }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'WS°', max: windInfo.value.max }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'SSW', max: windInfo.value.max }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'S', max: windInfo.value.max }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'SSE', max: windInfo.value.max }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'SE', max: windInfo.value.max }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'ESE', max: windInfo.value.max }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'E', max: windInfo.value.max }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'ENE', max: windInfo.value.max }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'NE', max: windInfo.value.max }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'NNE', max: windInfo.value.max }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		series: [ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -232,7 +372,7 @@ const showData = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				symbolSize: 0,//拐点大小 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				data: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						value: [0, 12, 12, 12, 0, 0, 0, 12, 15, 15, 9, 0, 0, 0, 15, 8], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						value: windD.value, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						name: '风向', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						itemStyle: { // 单个拐点标志的样式设置。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							normal: { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -240,10 +380,95 @@ const showData = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								// color:'#d1d6dd' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	mychart.setOption(option) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	window.addEventListener("resize", function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		mychart.resize(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 风速 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const wind=ref() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const showWind = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	let mychart = echarts.init(wind.value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	let option = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		legend: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// data: ['Allocated Budget', 'Actual Spending'] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			textStyle: {//图例文字的样式 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				color: isDark.value ? '#fff' : "#000", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		radar: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			shape: 'circle', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			name: { // (圆外的标签)雷达图每个指示器名称的配置项。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				formatter: '{value}', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				textStyle: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					fontSize: 15, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					color: isDark.value ? '#fff' : "#000", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			nameGap: 5, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// 指示器名称和指示器轴的距离。[ default: 15 ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			splitNumber: 6, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			splitLine: { // (这里是指所有圆环)坐标轴在 grid 区域中的分隔线。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				lineStyle: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					color: '#bbbbbb', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					// 分隔线颜色 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					width: 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					// 分隔线线宽 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			splitArea: { // 坐标轴在 grid 区域中的分隔区域,默认不显示。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				show: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				areaStyle: { // 分隔区域的样式设置。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					color: [isDark.value ? '#000' : "#fff", isDark.value ? '#000' : "#fff"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					// 分隔区域颜色。分隔区域会按数组中颜色的顺序依次循环设置颜色。默认是一个深浅的间隔色。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			indicator: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					name: 'N', max: windInfo.value.speedMax, axisLabel: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						show: true, color: isDark.value ? '#fff' : "#000", formatter: function (params) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							return params.toFixed(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'NNW', max: windInfo.value.speedMax }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'NW°', max: windInfo.value.speedMax }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'WNW', max: windInfo.value.speedMax }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'W°', max: windInfo.value.speedMax }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'WSW', max: windInfo.value.speedMax }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'WS°', max: windInfo.value.speedMax }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'SSW', max: windInfo.value.speedMax }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'S', max: windInfo.value.speedMax }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'SSE', max: windInfo.value.speedMax }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'SE', max: windInfo.value.speedMax }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'ESE', max: windInfo.value.speedMax }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'E', max: windInfo.value.speedMax }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'ENE', max: windInfo.value.speedMax }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'NE', max: windInfo.value.speedMax }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ name: 'NNE', max: windInfo.value.speedMax }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		series: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				name: 'windspeed', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				type: 'radar', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				symbolSize: 0,//拐点大小 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				data: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						value: [0, 4, 16, 9, 0, 0, 0, 15, 13, 10, 12, 0, 0, 0, 5, 11], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						name: '风速 (0.1m/s)' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						value: windS.value, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						name: '风速 (m/s)', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						itemStyle: { // 单个拐点标志的样式设置。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							normal: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								color:'#91cc75' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -256,10 +481,14 @@ const showData = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 watch(isDark, () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	showData() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	showWind() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 onMounted(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	getPlatforms() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	showData() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// showData() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </script> 
			 |