李程龙 3 年之前
父節點
當前提交
0f945128ac
共有 7 個文件被更改,包括 144 次插入110 次删除
  1. 1 1
      api/weather.js
  2. 7 3
      components/ui-picker/ui-picker.vue
  3. 0 1
      pages/fault/index.vue
  4. 30 15
      pages/weather/history.vue
  5. 8 4
      pages/weather/index.vue
  6. 48 50
      utils/request/index.js
  7. 50 36
      utils/utils.js

+ 1 - 1
api/weather.js

@@ -110,7 +110,7 @@ export const getWeatherChart = async (params) => {
 		}
 	})
 	// 处理统计图数据 格式:通道号:列表 {e1:list,e2:list,e3:list}
-	data.length = 10;
+	// if(data.length = 10;)
 	for (let i = 0; i < data.length; i++) {
 		for (let key in charts) {
 			let dat = data[i].dat[key];

+ 7 - 3
components/ui-picker/ui-picker.vue

@@ -1,7 +1,7 @@
 <template>
 	<!-- 全局下拉框组件 -->
 	<view>
-		<picker class="picker" @change="bindPickerChange" :range="list">
+		<picker class="picker" @change="bindPickerChange" :range="list" range-key="text">
 			<view class="picker-wrapper">
 				<view class="">{{text}}</view>
 				<uni-icons type="bottom" :size="12" color="#DDDDDD"></uni-icons>
@@ -30,7 +30,7 @@
 			},
 			list: {
 				type: Array,
-				default () {
+				default: () => {
 					return []
 				}
 			},
@@ -41,12 +41,16 @@
 				return res?.text ?? ''
 			}
 		},
+		mounted() {
+			let res = this.list.find(item => item.value == this.value);
+			this.text = res?.text ?? ''
+		},
 		methods: {
 			// 选择项目
 			bindPickerChange(e) {
 				let index = e.detail.value;
 				this.text = this.list[index].text;
-				this.$emit('change', this.list[index])
+				this.$emit('onChagne', this.list[index])
 			}
 		}
 	}

+ 0 - 1
pages/fault/index.vue

@@ -65,7 +65,6 @@
 						sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
 						success(res) {
 							const tempFilePaths = res.tempFilePaths;
-
 						}
 					})
 				})

+ 30 - 15
pages/weather/history.vue

@@ -4,11 +4,10 @@
 		<!-- 统计图 -->
 		<view class="ui-card history-chart">
 			<view class="row-end">
-				<ui-picker :value="pickesId" :list="pickerList"></ui-picker>
+				<ui-picker :value="pickesId" :list="pickerList" @onChagne="changeChartData"></ui-picker>
 			</view>
 			<line-charts :chartData="chartShowData"></line-charts>
 		</view>
-
 		<!-- 统计图end -->
 		<!-- 历史数据列表 -->
 		<view class="ui-card history-panel">
@@ -18,7 +17,7 @@
 					@change="changeSearchTime" />
 			</view>
 			<!-- 历史数据表格 -->
-			<uni-table class="table-style" ref="table" border emptyText="暂无更多数据">
+			<uni-table class="table-style" ref="table" :loading="pageLoading" emptyText="暂无更多数据">
 				<uni-tr>
 					<block v-for="(header,index) in historyHeader" :key="index">
 						<uni-th align="center">{{header.text}}</uni-th>
@@ -31,7 +30,7 @@
 				</uni-tr>
 			</uni-table>
 			<!-- 页码 -->
-			<uni-pagination :total="50" title="标题文字" />
+			<uni-pagination :total="total" title="标题文字" @change="changePagination" />
 			<!-- 页码end -->
 		</view>
 		<!-- 历史数据列表end -->
@@ -45,11 +44,15 @@
 		getWeatherHistory,
 		getWeatherChart
 	} from '@/api/weather.js'
+	import {
+		timeFrame,
+		dateToUnix
+	} from '@/utils/utils.js'
 	export default {
 		data() {
 			return {
 				loading: false, // 页面加载状态
-				
+				pageLoading: false, //分页加载状态
 				deviceId: '', // 设备id
 				// 统计图展示
 				chartShowData: {
@@ -63,8 +66,8 @@
 
 				// 历史记录搜索参数
 				params: {
-					start_time: '', // 开始时间
-					end_time: '', // 结束时间
+					start_time: timeFrame('start'), // 开始时间
+					end_time: timeFrame('end'), // 结束时间
 					device_id: '', //设备号
 					page: 1,
 					page_size: 10,
@@ -72,6 +75,7 @@
 				searchTime: ['', ''],
 				historyHeader: [], // 头部列表
 				historyList: [], // 历史数据
+				total: 0, // 数据总数
 			};
 		},
 		components: {
@@ -85,26 +89,40 @@
 				this.getHistoryList(),
 				this.getWeatherChart()
 			])
+			this.loading = true;
 			this.$api.hide();
 		},
 		methods: {
 			// 选择时间
 			changeSearchTime(time) {
-				this.params.start_time = this.$util.dateToUnix(time[0]);
-				this.params.end_time = this.$util.dateToUnix(time[1]);
+				this.params.start_time = time[0] ? dateToUnix(time[0]) : timeFrame('start');
+				this.params.end_time = time[0] ? dateToUnix(time[1]) : timeFrame('end');
 				this.searchTime = time;
 				this.params.page = 1;
 				this.getHistoryList();
 				this.getWeatherChart();
 			},
+			// 切换统计图数据
+			changeChartData(e) {
+				this.pickesId = e.value;
+				this.chartShowData.series = [{
+					name: e.text,
+					data: this.chartData[e.value] ?? []
+				}]
+			},
+			// 切换页码
+			changePagination(e) {
+				this.params.page = e.current;
+				this.getHistoryList();
+			},
 			// 获取历史数据
 			async getHistoryList() {
-				this.loading = false;
+				this.pageLoading = true;
 				const res = await getWeatherHistory(this.params);
-				console.log(res);
 				this.historyHeader = res.headers; // 头部列表
 				this.historyList = res.list; // 历史数据
-				this.loading = true;
+				this.total = res.nums;
+				this.pageLoading = false;
 			},
 			// 获取气象统计数据
 			async getWeatherChart() {
@@ -119,8 +137,6 @@
 				});
 				this.chartData = charts; // 统计数据集合
 				this.pickerList = pickes; // 下拉列表集合
-				console.log(this.pickerList);
-				console.log(this.pickesId);
 				this.pickesId = pickes[0]?.value ?? ''; // 当前通道号
 				// 统计图显示数据
 				this.chartShowData = {
@@ -130,7 +146,6 @@
 						data: charts[this.pickesId] ?? []
 					}]
 				}
-				console.log(this.chartShowData);
 			}
 		}
 	}

+ 8 - 4
pages/weather/index.vue

@@ -52,11 +52,16 @@
 		},
 		//下拉刷新
 		onPullDownRefresh() {
-			this.params.page = 1;
-			this.getDeviceList();
+			this.refreshDeviceList();
 			uni.stopPullDownRefresh()
 		},
 		methods: {
+			// 刷新设备列表
+			refreshDeviceList(){
+				this.params.page = 1;
+				this.deviceList=[];
+				this.getDeviceList();
+			},
 			/**
 			 * 打开设备详情
 			 * @param {Object} device 设备信息
@@ -88,8 +93,7 @@
 			 */
 			searchDevice(val) {
 				this.params.device_id = val;
-				this.params.page = 1;
-				this.getDeviceList();
+				this.refreshDeviceList();
 			}
 		}
 	}

+ 48 - 50
utils/request/index.js

@@ -32,11 +32,9 @@ service.interceptors.request.use(async (config, ...args) => {
 
 // response interceptor
 service.interceptors.response.use((response, ...args) => { // 响应拦截器(可以设置多个, 同时可以也可以使用异步方法)
-	console.log(":sdsdsd");
-
-	if (response.message) {
+	if (response.data.message) {
 		uni.showToast({
-			title: response.message,
+			title: response.data.message,
 			duration: 1500,
 			mask: true,
 			icon: 'none'
@@ -47,50 +45,50 @@ service.interceptors.response.use((response, ...args) => { // 响应拦截器(
 export default service
 
 
-export const myRequest = (options) => {
-	let BASE_URL = 请求地址
-	console.log(BASE_URL)
-	var session_key = ""
-	session_key = uni.getStorageSync('session_key')
-	let url = ""
-	let data = options.data || {}
-	if (options.url.split('=')[1]) {
-		url = options.url.split('=')[1]
-	} else {
-		url = options.url.split('api/')[1]
-	}
-	console.log(url)
-	if (url != 'user.login.login_user') {
-		data.token = session_key
-	}
+// export const myRequest = (options) => {
+// 	let BASE_URL = 请求地址
+// 	console.log(BASE_URL)
+// 	var session_key = ""
+// 	session_key = uni.getStorageSync('session_key')
+// 	let url = ""
+// 	let data = options.data || {}
+// 	if (options.url.split('=')[1]) {
+// 		url = options.url.split('=')[1]
+// 	} else {
+// 		url = options.url.split('api/')[1]
+// 	}
+// 	console.log(url)
+// 	if (url != 'user.login.login_user') {
+// 		data.token = session_key
+// 	}
 
-	return new Promise((resolve, reject) => {
-		uni.request({
-			url: BASE_URL + options.url,
-			method: options.method || 'POST',
-			header: {
-				"Content-Type": "application/x-www-form-urlencoded",
-			},
-			data: data,
-			success: (res) => {
-				if (res.data.message != "") {
-					if (res.data.message == "识别无结果") {
-						resolve(res.data.data)
-					} else {
-						return uni.showToast({
-							title: res.data.message,
-							icon: "none"
-						})
-					}
-				}
-				resolve(res.data.data)
-			},
-			fail: (err) => {
-				uni.showToast({
-					title: '请求接口失败'
-				})
-				reject(err)
-			}
-		})
-	})
-}
+// 	return new Promise((resolve, reject) => {
+// 		uni.request({
+// 			url: BASE_URL + options.url,
+// 			method: options.method || 'POST',
+// 			header: {
+// 				"Content-Type": "application/x-www-form-urlencoded",
+// 			},
+// 			data: data,
+// 			success: (res) => {
+// 				if (res.data.message != "") {
+// 					if (res.data.message == "识别无结果") {
+// 						resolve(res.data.data)
+// 					} else {
+// 						return uni.showToast({
+// 							title: res.data.message,
+// 							icon: "none"
+// 						})
+// 					}
+// 				}
+// 				resolve(res.data.data)
+// 			},
+// 			fail: (err) => {
+// 				uni.showToast({
+// 					title: '请求接口失败'
+// 				})
+// 				reject(err)
+// 			}
+// 		})
+// 	})
+// }

+ 50 - 36
utils/utils.js

@@ -1,4 +1,3 @@
-
 /**
  * 全局工具类
  */
@@ -112,29 +111,29 @@ export const createMap = (obj, keys) => {
  * @param {String} fmt 格式化规则 yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等 ss 秒,可自定义组合 默认yyyy-mm-dd
  * @returns {string} 返回格式化后的字符串
  */
-export  function timeFormat(dateTime = null, formatStr = 'yyyy-mm-dd') {
-  let date
+export function timeFormat(dateTime = null, formatStr = 'yyyy-mm-dd') {
+	let date
 	// 若传入时间为假值,则取当前时间
-  if (!dateTime) {
-    date = new Date()
-  }
-  // 若为unix秒时间戳,则转为毫秒时间戳(逻辑有点奇怪,但不敢改,以保证历史兼容)
-  else if (/^\d{10}$/.test(dateTime?.toString().trim())) {
-    date = new Date(dateTime * 1000)
-  }
-  // 若用户传入字符串格式时间戳,new Date无法解析,需做兼容
-  else if (typeof dateTime === 'string' && /^\d+$/.test(dateTime.trim())) {
-    date = new Date(Number(dateTime))
-  }
-  // 其他都认为符合 RFC 2822 规范
-  else {
-    // 处理平台性差异,在Safari/Webkit中,new Date仅支持/作为分割符的字符串时间
-    date = new Date(
-      typeof dateTime === 'string'
-        ? dateTime.replace(/-/g, '/')
-        : dateTime
-    )
-  }
+	if (!dateTime) {
+		date = new Date()
+	}
+	// 若为unix秒时间戳,则转为毫秒时间戳(逻辑有点奇怪,但不敢改,以保证历史兼容)
+	else if (/^\d{10}$/.test(dateTime?.toString().trim())) {
+		date = new Date(dateTime * 1000)
+	}
+	// 若用户传入字符串格式时间戳,new Date无法解析,需做兼容
+	else if (typeof dateTime === 'string' && /^\d+$/.test(dateTime.trim())) {
+		date = new Date(Number(dateTime))
+	}
+	// 其他都认为符合 RFC 2822 规范
+	else {
+		// 处理平台性差异,在Safari/Webkit中,new Date仅支持/作为分割符的字符串时间
+		date = new Date(
+			typeof dateTime === 'string' ?
+			dateTime.replace(/-/g, '/') :
+			dateTime
+		)
+	}
 
 	const timeSource = {
 		'y': date.getFullYear().toString(), // 年
@@ -146,20 +145,35 @@ export  function timeFormat(dateTime = null, formatStr = 'yyyy-mm-dd') {
 		// 有其他格式化字符需求可以继续添加,必须转化成字符串
 	}
 
-  for (const key in timeSource) {
-    const [ret] = new RegExp(`${key}+`).exec(formatStr) || []
-    if (ret) {
-      // 年可能只需展示两位
-      const beginIndex = key === 'y' && ret.length === 2 ? 2 : 0
-      formatStr = formatStr.replace(ret, timeSource[key].slice(beginIndex))
-    }
-  }
+	for (const key in timeSource) {
+		const [ret] = new RegExp(`${key}+`).exec(formatStr) || []
+		if (ret) {
+			// 年可能只需展示两位
+			const beginIndex = key === 'y' && ret.length === 2 ? 2 : 0
+			formatStr = formatStr.replace(ret, timeSource[key].slice(beginIndex))
+		}
+	}
 
-  return formatStr
+	return formatStr
 }
 
 // 日期字符串转秒级时间戳
-export function dateToUnix (dateText){
-	let times=new Date(dateText);
-	return times.getTime()/1000;
-}
+export function dateToUnix(dateText) {
+	let times = new Date(dateText);
+	return times.getTime() / 1000;
+}
+/**
+ * 获取一天的时间戳
+ * @param {String} type 
+ */
+export function timeFrame(type = 'start') {
+	let timestamp = Date.parse(new Date());
+	let date = new Date(timestamp);
+	let Y = date.getUTCFullYear();
+	let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1)
+	let D = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
+
+	let startTime = Date.parse(Y + '/' + M + '/' + D + ' ' + '00:00:00')
+	let endTime = Date.parse(Y + '/' + M + '/' + D + ' ' + '23:59:59')
+	return type == 'start' ? startTime / 1000 : endTime / 1000
+}