xhj преди 3 години
родител
ревизия
df907ba6c7
променени са 73 файла, в които са добавени 6046 реда и са изтрити 359 реда
  1. 516 0
      components/biaofun-datetime-picker/biaofun-datetime-picker.vue
  2. 313 0
      components/biaofun-datetime-picker/utils.js
  3. 30 0
      components/biaofun-datetime-picker/使用说明.md
  4. 18 0
      components/bottom-pop/index.css
  5. 74 0
      components/bottom-pop/index.vue
  6. 7 0
      components/cell/index.css
  7. 64 0
      components/cell/index.vue
  8. 35 21
      components/nav-bar/index.vue
  9. 81 0
      machineAndCell/machineDetail/machineDetail.css
  10. 130 0
      machineAndCell/machineDetail/machineDetail.vue
  11. 78 0
      machineAndCell/machineInfo/machineInfo.css
  12. 94 0
      machineAndCell/machineInfo/machineInfo.vue
  13. 66 0
      machineAndCell/machineItemManage/machineItemManage.css
  14. 74 0
      machineAndCell/machineItemManage/machineItemManage.vue
  15. 98 11
      pages.json
  16. 7 0
      pages/index/index.css
  17. 308 37
      pages/index/index.vue
  18. 118 0
      pages/machine/machine.css
  19. 107 0
      pages/machine/machine.vue
  20. 153 0
      pages/myMerchant/myMerchant.css
  21. 131 0
      pages/myMerchant/myMerchant.vue
  22. 198 0
      pages/operationData/operationData.css
  23. 478 0
      pages/operationData/operationData.vue
  24. 197 0
      pages/operationDataPersonal/operationDataPersonal.css
  25. 255 0
      pages/operationDataPersonal/operationDataPersonal.vue
  26. 110 0
      pages/order/order.css
  27. 136 0
      pages/order/order.vue
  28. 66 0
      pages/orderDetail/orderDetail.css
  29. 160 0
      pages/orderDetail/orderDetail.vue
  30. 59 5
      pages/user/user.css
  31. 33 280
      pages/user/user.vue
  32. BIN
      static/images/wdbg.png
  33. BIN
      static/images/yccl.png
  34. BIN
      static/images/ycjg.png
  35. BIN
      static/pages/images/address-icon.png
  36. BIN
      static/pages/images/call.png
  37. BIN
      static/pages/images/cell.png
  38. BIN
      static/pages/images/daohang.png
  39. BIN
      static/pages/images/dow-ssicon.png
  40. BIN
      static/pages/images/dwico1.png
  41. BIN
      static/pages/images/refresh.png
  42. BIN
      static/pages/images/saoma.png
  43. BIN
      static/pages/images/search.png
  44. BIN
      static/pages/images/ssico.png
  45. BIN
      static/pages/images/ssicon.png
  46. BIN
      static/pages/images/tab-aicon.png
  47. BIN
      static/pages/images/user_service1.png
  48. BIN
      static/pages/images/user_service2.png
  49. BIN
      static/pages/images/user_service3.png
  50. BIN
      static/pages/images/user_service4.png
  51. BIN
      static/pages/images/user_service5.png
  52. BIN
      static/pages/images/user_service6.png
  53. BIN
      static/pages/images/user_service7.png
  54. BIN
      static/pages/images/user_service8.png
  55. 5 5
      utils/request.js
  56. 54 0
      warning/abnormalAlarm/abnormalAlarm.css
  57. 89 0
      warning/abnormalAlarm/abnormalAlarm.vue
  58. 138 0
      warning/machineAlarm/machineAlarm.css
  59. 115 0
      warning/machineAlarm/machineAlarm.vue
  60. 120 0
      warning/orderAlarm/orderAlarm.css
  61. 120 0
      warning/orderAlarm/orderAlarm.vue
  62. 138 0
      warning/reconditionAlarm/reconditionAlarm.css
  63. 115 0
      warning/reconditionAlarm/reconditionAlarm.vue
  64. 113 0
      warning/reconditionAlarmUpload/reconditionAlarmUpload.css
  65. 237 0
      warning/reconditionAlarmUpload/reconditionAlarmUpload.vue
  66. BIN
      warning/static/images/imagecuo.png
  67. BIN
      warning/static/images/yc1.png
  68. BIN
      warning/static/images/yc2.png
  69. BIN
      warning/static/images/yc3.png
  70. 138 0
      warning/userAlarm/userAlarm.css
  71. 120 0
      warning/userAlarm/userAlarm.vue
  72. 113 0
      warning/userAlarmUpload/userAlarmUpload.css
  73. 237 0
      warning/userAlarmUpload/userAlarmUpload.vue

+ 516 - 0
components/biaofun-datetime-picker/biaofun-datetime-picker.vue

@@ -0,0 +1,516 @@
+<!-- 
+ * @插件:日期时间选择器
+ * @作者:陈万照
+ * @公司:山东标梵互动信息技术有限公司
+ * @官网:http://biaofun.com/
+ * @微信:C207668802
+ * @QQ:207668802
+ * @邮箱:cwz@biaofun.com || 207668802@qq.com
+ * @版本:v1.0.8
+ -->
+<template>
+	<view class="datatime">
+		<picker mode="multiSelector" :range="range" range-key="text" @change="change" @columnchange="columnchange" :value="value" :disabled="disabled">
+			<view class="date-content" :class="{ placeholder: !dateStr }">
+				<text>{{ dateStr ? dateStr : placeholder }}</text>
+			</view>
+		</picker>
+	</view>
+</template>
+
+<script>
+import utils from './utils.js'; // 封装的工具集
+export default {
+	/**
+	 * 数据
+	 */
+	props: {
+		// 是否禁用
+		disabled: {
+			type: Boolean,
+			default: false
+		},
+
+		// 占位符
+		placeholder: {
+			type: String,
+			default: '请选择日期时间'
+		},
+
+		// 表示有效日期时间范围的开始,
+		// 字符串格式为 "YYYY-MM-DD hh:mm"
+		start: {
+			type: String,
+			default: '1970-1-1 00:00'
+		},
+
+		// 表示有效日期时间范围的结束
+		// 字符串格式为 "YYYY-MM-DD hh:mm"
+		end: {
+			type: String,
+			default: '2300-1-1 00:00'
+		},
+
+		// 表示选择器的粒度,有效值:year | month | day | hour | minute
+		fields: {
+			type: String,
+			default: 'minute'
+		},
+		
+		dateStr:{
+			type: String,
+			default: ''
+		},
+
+		// 默认值
+		// 字符串格式为 "YYYY-MM-DD hh:mm"
+		defaultValue: {
+			type: String,
+			default: ''
+		}
+	},
+
+	/**
+	 * 数据
+	 */
+	data() {
+		return {
+			range: [],
+			value: [],
+			// dateStr: '', // 最终显示的字符串
+			dtStart: null, // 有效范围开始
+			dtEnd: null, // 有效范围结束
+		};
+	},
+	
+	/**
+	 * 监听数据
+	 */ 
+	watch: {
+		// 默认值
+		defaultValue() {
+			// 设置默认值
+			this.setDefaultValue();
+		}
+	},
+
+	/**
+	 * 组件初次加载完成
+	 */
+	mounted() {
+		// 有效日期开始和结束
+		let start = this.start;
+		let end = this.end;
+		
+		// 验证是否是有效的开始和结束日期
+		if(!utils.isString(this.start)) {
+			console.log('开始日期需为String类型,格式为 "YYYY-MM-DD hh:mm"');
+			start = '1970-1-1 00:00';
+		}
+		if(!utils.isString(this.start)) {
+			console.log('结束日期需为String类型,格式为 "YYYY-MM-DD hh:mm"');
+			start = '2300-1-1 00:00';
+		}
+		
+		// 将开始日期和结束日期转为 Date 
+		let dtStart = utils.formatDate(start).dt;
+		let dtEnd = utils.formatDate(end).dt;
+		
+		// 判断有效日期结束是否大于有效日期开始,如果不是,则将有效日期结束修改为有效日期开始往后300年
+		if (dtEnd <= dtStart) {
+			dtEnd = utils.formatDate(start).dt;
+			dtEnd.setFullYear(dtStart.getFullYear() + 300);
+			dtEnd.setDate(dtEnd.getDate() - 1);
+		}
+		
+		// 更新开始日期和结束日期
+		this.dtStart = dtStart;
+		this.dtEnd = dtEnd;
+
+		// 设置默认值
+		this.setDefaultValue();
+	},
+
+	/**
+	 * 方法
+	 */
+	methods: {
+		/**
+		 * 确认选择
+		 */
+		change(event) {
+			let year, month, day, hour, minute;
+			if(this.fields == 'year') {
+				year = this.range[0][this.value[0]].number; // 年
+				let dtStr = `${year}`;
+				this.setDateStr(dtStr);
+				this.$emit('change', utils.formatDate(dtStr));
+				return;
+			}
+			else if(this.fields == 'month') {
+				year = this.range[0][this.value[0]].number; // 年
+				month = this.range[1][this.value[1]].number; // 月
+				let dtStr = `${year}-${month}`;
+				this.setDateStr(dtStr);
+				this.$emit('change', utils.formatDate(dtStr));
+				return;
+			}
+			else if(this.fields == 'day') {
+				year = this.range[0][this.value[0]].number; // 年
+				month = this.range[1][this.value[1]].number; // 月
+				day = this.range[2][this.value[2]].number; // 日
+				let dtStr = `${year}-${month}-${day}`;
+				this.setDateStr(dtStr);
+				this.$emit('change', utils.formatDate(dtStr));
+				return;
+			}
+			else if(this.fields == 'hour') {
+				year = this.range[0][this.value[0]].number; // 年
+				month = this.range[1][this.value[1]].number; // 月
+				day = this.range[2][this.value[2]].number; // 日
+				hour = this.range[3][this.value[3]].number; // 时
+				day = this.range[2][this.value[2]].number; // 日
+				let dtStr = `${year}-${month}-${day} ${hour}`;
+				this.setDateStr(dtStr);
+				this.$emit('change', utils.formatDate(dtStr));
+				return;
+			}
+			else if(this.fields == 'minute') {
+				year = this.range[0][this.value[0]].number; // 年
+				month = this.range[1][this.value[1]].number; // 月
+				day = this.range[2][this.value[2]].number; // 日
+				hour = this.range[3][this.value[3]].number; // 时
+				minute = this.range[4][this.value[4]].number; // 分
+				let dtStr = `${year}-${month}-${day} ${hour}:${minute}`;
+				this.setDateStr(dtStr);
+				this.$emit('change', utils.formatDate(dtStr));
+				return;
+			}
+		},
+
+		/**
+		 * 设置显示的值
+		 * @param {Date|String} date 日期字符串或日期对象
+		 */
+		setDateStr(date) {
+			let dt = utils.formatDate(date);
+			if(this.fields == 'year') {
+				this.dateStr = `${dt.YYYY}年`;
+				return;
+			}
+			if(this.fields == 'month') {
+				this.dateStr = `${dt.YYYY}年${dt.M}月`;
+				return;
+			}
+			if(this.fields == 'day') {
+				this.dateStr = `${dt.YYYY}/${dt.M}/${dt.D}`;
+				return;
+			}
+			if(this.fields == 'hour') {
+				this.dateStr = `${dt.YYYY}年${dt.M}月${dt.D}日 ${dt.h}时`;
+				return;
+			}
+			this.dateStr = `${dt.YYYY}年${dt.M}月${dt.D}日 ${dt.h}时${dt.m}分`;
+		},
+		
+		/**
+		 * 设置年数据
+		 */ 
+		setYearData() {
+			// 有效日期
+			let yearStart = this.dtStart.getFullYear();
+			let yearEnd = this.dtEnd.getFullYear();
+			// 年
+			let years = [];
+			for (let year = yearStart; year <= yearEnd; year++) {
+				let item = {
+					number: year,
+					text: `${year}年`,
+				};
+				years.push(item);
+			}
+			this.range.splice(0, 1, years);
+		},
+		
+		/**
+		 * 设置月数据
+		 * @param {Number} year 年 
+		 */ 
+		setMonthData(year) {
+			// 有效日期
+			let yearStart = this.dtStart.getFullYear();
+			let monthStart = this.dtStart.getMonth() + 1;
+			let yearEnd = this.dtEnd.getFullYear();
+			let monthEnd = this.dtEnd.getMonth() + 1;
+			
+			// 月
+			let months = [];
+			let monthStartIndex = year == yearStart ? monthStart : 1;
+			let monthEndIndex = year == yearEnd ? monthEnd : 12;
+			for (let month = monthStartIndex; month <= monthEndIndex; month++) {
+				let item = {
+					number: month,
+					text: `${month}月`,
+				};
+				months.push(item);
+			}
+			this.range.splice(1, 1, months);
+		},
+		
+		/**
+		 * 设置日数据
+		 * @param {Number} year 年 
+		 * @param {Number} month 月 
+		 */ 
+		setDayData(year, month) {
+			// 有效日期
+			let yearStart = this.dtStart.getFullYear();
+			let monthStart = this.dtStart.getMonth() + 1;
+			let dayStart = this.dtStart.getDate();
+			let yearEnd = this.dtEnd.getFullYear();
+			let monthEnd = this.dtEnd.getMonth() + 1;
+			let dayEnd = this.dtEnd.getDate();
+			
+			// 日
+			let days = [];
+			let dayStartIndex = year == yearStart && month == monthStart ? dayStart : 1;
+			let dayEndIndex; 
+			if(year == yearEnd && month == monthEnd) {
+				dayEndIndex = dayEnd;
+			} else {
+				dayEndIndex = (new Date(year, month, 0)).getDate();
+			}
+			for (let day = dayStartIndex; day <= dayEndIndex; day++) {
+				let item = {
+					number: day,
+					text: `${day}日`,
+				};
+				days.push(item);
+			}
+			this.range.splice(2, 1, days);
+		},
+		
+		/**
+		 * 设置时数据
+		 * @param {Number} year 年 
+		 * @param {Number} month 月 
+		 * @param {Number} day 日 
+		 */ 
+		setHourData(year, month, day) {
+			// 有效日期
+			let yearStart = this.dtStart.getFullYear();
+			let monthStart = this.dtStart.getMonth() + 1;
+			let dayStart = this.dtStart.getDate();
+			let hourStart = this.dtStart.getHours();
+			let yearEnd = this.dtEnd.getFullYear();
+			let monthEnd = this.dtEnd.getMonth() + 1;
+			let dayEnd = this.dtEnd.getDate();
+			let hourEnd = this.dtEnd.getHours();
+			
+			// 时
+			let hours = [];
+			let hourStartIndex = year == yearStart && month == monthStart && day == dayStart ? hourStart : 0;
+			let hourEndIndex = year == yearEnd && month == monthEnd && day == dayEnd ? hourEnd : 23;
+			for (let hour = hourStartIndex; hour <= hourEndIndex; hour++) {
+				let item = {
+					number: hour,
+					text: `${hour}时`,
+				};
+				hours.push(item);
+			}
+			this.range.splice(3, 1, hours);
+		},
+		
+		/**
+		 * 设置分数据
+		 * @param {Number} year 年 
+		 * @param {Number} month 月 
+		 * @param {Number} day 日
+		 * @param {Number} hour 时
+		 */ 
+		setMinuteData(year, month, day, hour) {
+			// 有效日期
+			let yearStart = this.dtStart.getFullYear();
+			let monthStart = this.dtStart.getMonth() + 1;
+			let dayStart = this.dtStart.getDate();
+			let hourStart = this.dtStart.getHours();
+			let minuteStart = this.dtStart.getMinutes();
+			let yearEnd = this.dtEnd.getFullYear();
+			let monthEnd = this.dtEnd.getMonth() + 1;
+			let dayEnd = this.dtEnd.getDate();
+			let hourEnd = this.dtEnd.getHours();
+			let minuteEnd = this.dtEnd.getMinutes();
+			
+			// 分
+			let minutes = [];
+			let minuteStartIndex = year == yearStart && month == monthStart && day == dayStart && hour == hourStart ? minuteStart : 0;
+			let minuteEndIndex = year == yearEnd && month == monthEnd && day == dayEnd && hour == hourEnd ? minuteEnd : 59;
+			for(let minute = minuteStartIndex; minute <= minuteEndIndex; minute++) {
+				let item = {
+					number: minute,
+					text: `${minute}分`,
+				}
+				minutes.push(item);
+			}
+			this.range.splice(4, 1, minutes);
+		},
+		
+		/**
+		 * 设置默认值
+		 */
+		setDefaultValue() {
+			// 默认日期
+			let dtDefault;
+			
+			// 开始日期和结束日期
+			let dtStart = this.dtStart;
+			let dtEnd = this.dtEnd;
+			
+			// 判断是否传了默认日期
+			// 传了默认日期,格式化默认日期为日期对象
+			if(this.defaultValue) {
+				dtDefault = utils.formatDate(this.defaultValue).dt;
+			} 
+			// 如果没有传默认日期,将默认日期设置为当前日期
+			else {
+				dtDefault = new Date();
+			}
+			
+			// 如果默认日期不在有效日期范围内,设置默认日期为有效日期开始值
+			// if (dtDefault < dtStart || dtDefault > dtEnd) {
+			// 	dtDefault = dtStart;
+			// }
+			
+			// 更新 dateStr
+			if(this.defaultValue) this.setDateStr(dtDefault);
+			
+			// 默认值相关数据
+			let dfYear = dtDefault.getFullYear();
+			let dfMonth = dtDefault.getMonth() + 1;
+			let dfDay = dtDefault.getDate();
+			let dfHour = dtDefault.getHours();
+			let dfMinute = dtDefault.getMinutes();
+			
+			// 设置年数据
+			this.setYearData();
+			// 设置 Year 这一列的 value 值
+			let yearIndex = this.range[0].findIndex(year => {
+				return dfYear == year.number;
+			});
+			this.value.splice(0, 1, yearIndex >= 0 ? yearIndex : 0);
+			
+			// 设置月数据
+			if(this.fields == 'year') return;
+			this.setMonthData(dfYear);
+			// 设置 Month 这一列的 value 值
+			let monthIndex = this.range[1].findIndex(month => {
+				return dfMonth == month.number;
+			});
+			this.value.splice(1, 1, monthIndex >=0 ? monthIndex : 0);
+			
+			// 设置日数据
+			if(this.fields == 'month') return;
+			this.setDayData(dfYear, dfMonth);
+			// 设置 Day 这一列的 value 值
+			let dayIndex = this.range[2].findIndex(day => {
+				return dfDay == day.number;
+			});
+			this.value.splice(2, 1, dayIndex >=0 ? dayIndex : 0);
+			
+			// 设置时数据
+			if(this.fields == 'day') return;
+			this.setHourData(dfYear, dfMonth, dfDay);
+			// 设置 Hour 这一列的 value 值
+			let hourIndex = this.range[3].findIndex(hour => {
+				return dfHour == hour.number;
+			});
+			this.value.splice(3, 1, hourIndex >=0 ? hourIndex : 0);
+			
+			// 设置分数据
+			if(this.fields == 'hour') return;
+			this.setMinuteData(dfYear, dfMonth, dfDay, dfHour);
+			// 设置 Minute 这一列的 value 值
+			let minuteIndex = this.range[4].findIndex(minute => {
+				return dfMinute == minute.number;
+			});
+			this.value.splice(4, 1, minuteIndex >=0 ? minuteIndex : 0);
+		},
+
+		/**
+		 * 某一列的值改变时触发
+		 * @param {Number} event.detail.column 表示改变了第几列(下标从0开始)
+		 * @param {Number} event.detail.value 表示变更值的下标
+		 */
+		columnchange(event) {
+			let columnIndex = event.detail.column; // 改变的列的下标
+			let valueIndex = event.detail.value; // 变更值的下标
+			
+			// 更新改变列的 value
+			this.value.splice(columnIndex, 1, valueIndex);
+			
+			// 改变年要更新月数据
+			if(this.fields == 'year') return;
+			if (columnIndex == 0) {
+				// 当前选择的月
+				let monthBeforeUpdate = this.range[1][this.value[1]];
+				// 更新月数据
+				this.setMonthData(this.range[0][this.value[0]].number);
+				// 更新 Month Value
+				let monthIndex = this.range[1].findIndex(month => {
+					return month.number == monthBeforeUpdate.number;
+				});
+				this.value.splice(1, 1, monthIndex >= 0 ? monthIndex : 0);
+			}
+			
+			// 改变年、月都要更新日数据
+			if(this.fields == 'month') return;
+			if (columnIndex == 0 || columnIndex == 1) {
+				// 当前选择的日
+				let dayBeforeUpdate = this.range[2][this.value[2]];
+				// 更新日数据
+				this.setDayData(this.range[0][this.value[0]].number, this.range[1][this.value[1]].number);
+				// 更新 Day Value
+				let dayIndex = this.range[2].findIndex(day => {
+					return day.number == dayBeforeUpdate.number;
+				});
+				this.value.splice(2, 1, dayIndex >= 0 ? dayIndex : 0);
+			}
+			
+			// 改变年、月、日都要更新时数据
+			if(this.fields == 'day') return;
+			if (columnIndex == 0 || columnIndex == 1 || columnIndex == 2) {
+				// 当前选择的时
+				let hourBeforeUpdate = this.range[3][this.value[3]];
+				// 更新时数据
+				this.setHourData(this.range[0][this.value[0]].number, this.range[1][this.value[1]].number, this.range[2][this.value[2]].number);
+				// 更新 Hour Value
+				let hourIndex = this.range[3].findIndex(hour => {
+					return hour.number == hourBeforeUpdate.number;
+				});
+				this.value.splice(3, 1, hourIndex >= 0 ? hourIndex : 0);
+			}
+			
+			// 当前选择的分
+			if(this.fields == 'hour') return;
+			let minuteBeforeUpdate = this.range[4][this.value[4]];
+			// 更新分数据
+			this.setMinuteData(this.range[0][this.value[0]].number, this.range[1][this.value[1]].number, this.range[2][this.value[2]].number, this.range[3][this.value[3]].number);
+			// 更新 Minute Value
+			let minuteIndex = this.range[4].findIndex(minute => {
+				return minute.number == minuteBeforeUpdate.number;
+			});
+			this.value.splice(4, 1, minuteIndex >= 0 ? minuteIndex : 0);
+		},
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.date-content {
+	text-align: center;
+}
+
+.placeholder {
+	color: #999;
+}
+</style>

+ 313 - 0
components/biaofun-datetime-picker/utils.js

@@ -0,0 +1,313 @@
+/**
+ * @说明:工具集
+ * @作者:陈万照
+ * @公司:山东标梵互动技术有限公司
+ * @官网:http://biaofun.com/
+ * @版本:v1.0.0
+ * @时间:2020年4月28日11:28:13
+ */
+export default {
+	/**
+	 * 同步 try catch 的进一步封装处理
+	 * 使用方法:
+	 * let [err, res] = await this.$utils.asyncTasks(Promise函数);
+	 * if(res) 成功
+	 * if(err) 失败
+	 */
+	asyncTasks(promise) {
+		return promise.then(data => {
+			return [null, data];
+		}).catch(err => [err]);
+	},
+
+	/**
+	 * 精确判断数据是否是 Object 类型
+	 * @param {Any} val 要判断的数据
+	 * @returns {Boolean} true:是;false:不是;
+	 */
+	isObject(val) {
+		return Object.prototype.toString.call(val) === '[object Object]' && val !== null && val !== undefined;
+	},
+
+	/**
+	 * 判断数据是否是 Array 类型
+	 * @param {Any} val 要判断的数据
+	 * @returns {Boolean} true:是;false:不是;
+	 */
+	isArray(val) {
+		return Object.prototype.toString.call(val) === '[object Array]';
+	},
+
+	/**
+	 * 判断数据是否是 String 类型
+	 * @param {Any} val 要判断的数据
+	 * @returns {Boolean} true:是;false:不是;
+	 */
+	isString(val) {
+		return Object.prototype.toString.call(val) === '[object String]';
+	},
+
+	/**
+	 * 精确判断数据是否是 Date 类型
+	 * @param {Any} val 要判断的数据
+	 * @returns {Boolean} true:是;false:不是;
+	 */
+	isDate(val) {
+		return Object.prototype.toString.call(val) === '[object Date]';
+	},
+
+	/**
+	 * 精确判断数据是否是 Function 类型
+	 * @param {Any} val 要判断的数据
+	 * @returns {Boolean} true:是;false:不是;
+	 */
+	isFunction(val) {
+		return Object.prototype.toString.call(val) === '[object Function]';
+	},
+
+	/**
+	 * 精确判断数据是否是 Number 类型
+	 * @param {Any} val 要判断的数据
+	 * @returns {Boolean} true:是;false:不是;
+	 */
+	isNumber(val) {
+		return Object.prototype.toString.call(val) === '[object Number]';
+	},
+
+	/**
+	 * 精确判断数据是否是 Boolean 类型
+	 * @param {Any} val 要判断的数据
+	 * @returns {Boolean} true:是;false:不是;
+	 */
+	isBoolean(val) {
+		return Object.prototype.toString.call(val) === '[object Boolean]';
+	},
+
+	/**
+	 * 判断 URL 是否是绝对 URL。
+	 * @param {String} url 要判断的 URL
+	 * @return {Boolean} true:是绝对URL;false:不是绝对URL;
+	 */
+	isAbsoluteURL(url) {
+		// 如果 URL 以 “<scheme>://” 或 “//”(协议相对URL)开头,则认为它是绝对的
+		// RFC 3986 将方案名称定义为以字母开头的字符序列,然后是字母,数字,加号,句点或连字符的任意组合
+		return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
+	},
+
+	/**
+	 * 合并 baseURL 和相对 URL 成一个完整的 URL
+	 * @param {String} baseURL baseURL
+	 * @param {String} relativeURL 相对 URL
+	 * @returns {String} 返回组合后的完整 URL
+	 */
+	combineURLs(baseURL, relativeURL) {
+		return relativeURL && this.isString(relativeURL) && this.isString(baseURL) ? baseURL.replace(/\/+$/, '') + '/' +
+			relativeURL.replace(/^\/+/, '') : baseURL;
+	},
+
+	/**
+	 * 深度合并对象,只支持合并两个对象,该方法不会改变原有的对象
+	 * @param {Object} FirstOBJ 第一个对象
+	 * @param {Object} SecondOBJ 第二个对象
+	 * @return {Object} 返回深度合并后的对象
+	 */
+	deepMargeObject(FirstOBJ, SecondOBJ) {
+		let ResultOBJ = {};
+		for (let key in FirstOBJ) {
+			ResultOBJ[key] = ResultOBJ[key] && ResultOBJ[key].toString() === "[object Object]" ? this.deepMargeObject(ResultOBJ[
+				key], FirstOBJ[key]) : ResultOBJ[key] = FirstOBJ[key];
+		}
+		for (let key in SecondOBJ) {
+			ResultOBJ[key] = ResultOBJ[key] && ResultOBJ[key].toString() === "[object Object]" ? this.deepMargeObject(ResultOBJ[
+				key], SecondOBJ[key]) : ResultOBJ[key] = SecondOBJ[key];
+		}
+		return ResultOBJ;
+	},
+	
+	/**
+	 * 生成指定长度的随机字符串
+	 * @param {Number} min 最小程度
+	 * @param {Number} max 最大长度 
+	 * @return {String} 返回生成的字符串
+	 */
+	randomString(min, max) {
+		let returnStr = "",
+			range = (max ? Math.round(Math.random() * (max - min)) + min : min),
+			arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
+				'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
+				'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
+			];
+		for (let i = 0; i < range; i++) {
+			let index = Math.round(Math.random() * (arr.length - 1));
+			returnStr += arr[index];
+		}
+		return returnStr;
+	},
+
+	/**
+	 * 格式化日期
+	 * @param {Date|String} date 日期或日期字符串
+	 */
+	formatDate(date) {
+		let YYYY = null;
+		let M = null;
+		let MM = null;
+		let D = null;
+		let DD = null;
+		let h = null;
+		let hh = null;
+		let m = null;
+		let mm = null;
+		let s = null;
+		let ss = null;
+		let ms = null;
+		let ms2 = null;
+		let ms3 = null;
+		let ms4 = null;
+		let dt = null;
+
+		// 如果 date 是 String 类型
+		if (date && this.isString(date)) {
+			// 真机运行时,如果直接用 new Date('YYYY-MM-DD hh:mm:ss') 会报 Invalid Date 错误,所以采用下面的方式创建日期
+			let dtArr = date.replace(/\//g, '.').replace(/-/g, '.').replace(/:/g, '.').replace(/T/g, ' ').replace(' ', '.').replace(
+				'Z', '').split('.');
+
+			let year = 2020;
+			let month = 12;
+			let day = 18;
+			let hour = 0;
+			let minute = 0;
+			let second = 0;
+			let millisecond = 0;
+			
+			// 年
+			if (dtArr.length > 0 && !isNaN(dtArr[0])) {
+				year = parseInt(dtArr[0]);
+			}
+			// 月
+			if (dtArr.length > 1 && !isNaN(dtArr[1])) {
+				month = parseInt(dtArr[1]);
+			}
+			// 日
+			if (dtArr.length > 2 && !isNaN(dtArr[2])) {
+				day = parseInt(dtArr[2]);
+			}
+			// 时
+			if (dtArr.length > 3 && !isNaN(dtArr[3])) {
+				hour = parseInt(dtArr[3]);
+			}
+			// 分
+			if (dtArr.length > 4 && !isNaN(dtArr[4])) {
+				minute = parseInt(dtArr[4]);
+			}
+			// 秒
+			if (dtArr.length > 5 && !isNaN(dtArr[5])) {
+				second = parseInt(dtArr[5]);
+			}
+			// 毫秒
+			if (dtArr.length > 6 && !isNaN(dtArr[6])) {
+				millisecond = parseInt(dtArr[6]);
+			}
+
+			date = new Date(year, month - 1, day, hour, minute, second, millisecond);
+		}
+
+		// 如果 date 是 Date 类型
+		if (date && this.isDate(date)) {
+			YYYY = date.getFullYear();
+			M = date.getMonth() + 1;
+			MM = M >= 10 ? M : '0' + M;
+			D = date.getDate();
+			DD = D >= 10 ? D : '0' + D;
+			h = date.getHours();
+			hh = h >= 10 ? h : '0' + h;
+			m = date.getMinutes();
+			mm = m >= 10 ? m : '0' + m;
+			s = date.getSeconds();
+			ss = s >= 10 ? s : '0' + s;
+			ms = date.getMilliseconds();
+			ms2 = ms;
+			ms3 = ms;
+			ms4 = ms;
+			if (ms < 10) {
+				ms2 = '0' + ms;
+				ms3 = '00' + ms;
+				ms4 = '000' + ms;
+			} else if (ms < 100) {
+				ms3 = '0' + ms;
+				ms4 = '00' + ms;
+			} else {
+				ms4 = '0' + ms;
+			}
+		}
+
+		// 返回的数据对象
+		let result = {
+			YYYY: YYYY,
+			MM: MM,
+			M: M,
+			DD: DD,
+			D: D,
+			hh: hh,
+			h: h,
+			mm: mm,
+			m: m,
+			ss: ss,
+			s: s,
+			ms: ms,
+			ms2: ms2,
+			ms3: ms3,
+			ms4: ms4,
+			dt: date,
+			f1: `${YYYY}-${MM}-${DD}`,
+			f2: `${YYYY}年${M}月${D}日`,
+			f3: `${YYYY}-${M}-${D} ${hh}:${mm}`,
+			f4: `${h}:${m}:${s}`,
+			f5: `${MM}-${DD}`,
+			f6: `${YYYY}-${MM}`,
+			f7: `${YYYY}年${M}月`,
+			f8: `${h}:${m}`,
+			f9: `${M}月${D}日`,
+			notes: 'YYYY(年),MM(月,补0),M(月,不补0),DD(日,补0),D(日,不补0),hh(时,补0),h(时,不补0),mm(分,补0),m(分,不补0),ss(秒,补0),s(秒,不补0),ms(毫秒,不补0),ms2(毫秒,补0到2位),ms3(毫秒,补0到3位),ms4(毫秒,补0到4位),其余的f1,f2,... 看格式就知道了!'
+		};
+		return result;
+	},
+
+	/**
+	 * 数字转中文
+	 * @param {Number} num 数字
+	 */
+	numberToChinese(num) {
+		if (!/^\d*(\.\d*)?$/.test(num)) return "Number is wrong!";
+		let AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九");
+		let BB = new Array("", "十", "百", "千", "万", "亿", "点", "");
+		let a = ("" + num).replace(/(^0*)/g, "").split("."),
+			k = 0,
+			re = "";
+		for (let i = a[0].length - 1; i >= 0; i--) {
+			switch (k) {
+				case 0:
+					re = BB[7] + re;
+					break;
+				case 4:
+					if (!new RegExp("0{4}\\d{" + (a[0].length - i - 1) + "}$").test(a[0]))
+						re = BB[4] + re;
+					break;
+				case 8:
+					re = BB[5] + re;
+					BB[7] = BB[5];
+					k = 0;
+					break;
+			}
+			if (k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0) re = AA[0] + re;
+			if (a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k % 4] + re;
+			k++;
+		}
+		if (a.length > 1) //加上小数部分(如果有小数部分) 
+		{
+			re += BB[6];
+			for (let i = 0; i < a[1].length; i++) re += AA[a[1].charAt(i)];
+		}
+		return re;
+	},
+}

+ 30 - 0
components/biaofun-datetime-picker/使用说明.md

@@ -0,0 +1,30 @@
+### 组件说明
+* 日期时间选择器
+* 组件的默认日期有效期范围为:"1970-01-01 00:00" - "2300-01-01 00:00"。
+* 注意:如果您传递的日期有效范围的结束日期小于开始日期,则日期有效范围的结束日期会自动修正为开始日期+300年,比如,您传递的日期有效范围的开始日期为 "2020-11-11 18:30",
+* 结束日期为 "2018-11-11 18:30",则此时将会自动修正结束日期为 "2320-11-11 18:30"。
+* 注意:如果您传递的默认值不在日期有效范围内,则会自动修正默认值为当前日期时间,如果当前日期时间也不在日期有效范围内,则会再次修正为日期有效范围的开始日期。
+* 注意:该组件用到了我自己封装的 utils.js,位置在 '@/common/js/utils.js'。
+
+
+### 插件 props 属性
+* disabled: 是否禁用该组件?Boolean类型;
+* placeholder: 组件没有选中值时显示的内容,String类型;
+* start: 表示有效日期时间范围的开始,String类型,格式为 "YYYY-MM-DD hh:mm";
+* end: 表示有效日期时间范围的结束,String类型,格式必为 "YYYY-MM-DD hh:mm";
+* fields: 选择器的粒度,String类型,有效值为 year、month、day、hour、minute;
+* defaultValue: 默认值,String类型,格式为 "YYYY-MM-DD hh:mm";
+
+### 插件事件
+- change(date):选择日期时间后的回调事件。
+ * date.YYYY: 年;
+ * date.M: 月;
+ * date.MM: 月(补0);
+ * date.D: 日;
+ * date.DD: 日(补0);
+ * date.h: 时;
+ * date.hh: 时(补0);
+ * date.m: 分;
+ * date.mm: 分(补0);
+ * date.dt: Date对象;
+ * ... 还有一些其他的字段,具体看返回值吧!

+ 18 - 0
components/bottom-pop/index.css

@@ -0,0 +1,18 @@
+.ddinfo{background: #fff;padding: 0 20rpx;margin: 30rpx;border-radius: 10rpx;}
+.ddinfo .li{padding: 30rpx 0;border-bottom: 2rpx solid #E5E5E5;}
+.ddinfo .li:last-child{border-bottom: none;}
+.ddinfo .li text{display: block;font-size: 28rpx;color: ##000000;}
+.ddinfo .li view{flex: 1;-webkit-flex: 1;font-size: 28rpx;color: #333;text-align: right;}
+.ddinfo .li view.quan{color: #FE0419;margin-right: 12rpx;}
+.ddinfo .li input{flex: 1;-webkit-flex: 1;font-size: 28rpx;color: #333;text-align: right;}
+.textarea{background: #f5f5f5;border-radius: 10rpx;margin-top: 20rpx;width: 100%;padding: 15rpx;box-sizing: border-box;height: 120rpx;font-size: 28rpx;color: #333;}
+.placeholder{color: #ccc;}
+.confirmation-bar{position: fixed;z-index: 100;left: 0;right: 0;bottom: 0;background: #fff;border-radius: 20rpx 20rpx 0 0;padding: 35rpx 0rpx 50rpx;}
+.pop-title{font-size:30rpx;padding:10rpx 50rpx 20rpx 50rpx;color:#263343;border-bottom:1rpx solid #eeeeee;}
+.pop-close{position: absolute;right: 40rpx;top: 25rpx;font-size: 40rpx;}
+.pop-content{padding:20rpx 50rpx 20rpx 50rpx;}
+.confirmation-bar .pop-btn{display:flex; justify-content:space-around; position: relative;bottom:0;}
+.pop-btn-cancal{flex:0 0 40%;border-radius: 40rpx;background-color: #fff;height: 80rpx;line-height: 80rpx;color: #666;text-align: center;border:1rpx solid #666;}
+.pop-btn-submit{flex:0 0 40%;border-radius: 40rpx;background-color: #009AFF;height: 80rpx;line-height: 80rpx;color: #fff;text-align: center;border:1rpx solid #009AFF;}
+
+.mask{background-color:#000;opacity: 0.68;width: 100vw;height: 100vh;z-index: 80;}

+ 74 - 0
components/bottom-pop/index.vue

@@ -0,0 +1,74 @@
+<template>
+	<view>
+		<view v-show="showPop" class="confirmation-bar">
+			<view class="pop-title">{{title}}</view>
+			<view class="pop-close" @tap="closePop()">
+				<image style="width: 42rpx;height: 42rpx;" class="image" src="/static/pages/images/close.png"></image>
+			</view>
+			<view class="pop-content">
+				<slot></slot>
+			</view>
+			<view class="pop-btn" v-if="showBtn">
+				<view class="pop-btn-cancal" @tap="closePop"><slot name="leftbtnname">取消</slot></view>
+				<view class="pop-btn-submit" :style="'background-color:'+btnColor+';border:1rpx solid '+btnColor+';'" @tap="popSubmit"><slot name="rightbtnname">确认</slot></view>
+			</view>
+		</view>
+		<!-- 遮罩层 -->
+		<view v-show="showPop" @tap="closePop" class="mask"></view>
+	</view>
+
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+
+	export default {
+		data() {
+			return {
+				bottomBlankHeignt: app.globalData.isIPhoneX ? 68 : 0
+			};
+		},
+
+		components: {
+			
+		},
+		props: {
+			showPop: {
+				type: Boolean,
+				default: true
+			},
+			showBtn: {
+				type: Boolean,
+				default: true
+			},
+			title:{
+				type: String,
+				default:''
+			},
+			btnColor:{
+				type: String,
+				default:'#009AFF'
+			}
+		},
+		watch: {
+			
+		},
+
+		mounted() {
+			
+		},
+
+		methods: {
+			closePop(){
+				this.$emit('closePop',false)
+			},
+			popSubmit(){
+				this.$emit('popSubmit')
+			}
+		}
+	};
+</script>
+<style>
+	@import "./index.css";
+</style>

+ 7 - 0
components/cell/index.css

@@ -0,0 +1,7 @@
+.cell-infos{}
+.cell{position: relative;margin-right: 13rpx;}
+.cell-bg{width: 68rpx;height: 132rpx;position: relative;z-index: 1;}
+.cell-gou{width: 30rpx;height: 27rpx;position: absolute;right: 27rpx;bottom: 23rpx;}
+.cell-q{position: absolute;top: 17rpx;left: 7rpx;right: 7rpx;bottom: 7rpx;z-index: 2;}
+.cell-qs{position: absolute;bottom: 0;left: 0;width: 100%;background-color: #EB5C20;border-radius: 5rpx;}
+.full{background-color: #0FCB27;}

+ 64 - 0
components/cell/index.vue

@@ -0,0 +1,64 @@
+<template>
+	<view>
+		<view class="cell-infos ddflex">
+			<view class="cell">
+				<image src="../../static/pages/images/cell.png" class="cell-bg"></image>
+				<view class="cell-q">
+					<view :class="'cell-qs'+(soc>50?' full':'')" :style="'height:'+ soc+'%'"></view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+
+	export default {
+		components: {},
+		props: {
+			soc:{
+				type:Number,
+				default:0
+			}
+		},
+		data() {
+			return {
+				systems: {},
+				isTop: 0,
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+
+		},
+		methods: {
+
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./index.css";
+</style>

+ 35 - 21
components/nav-bar/index.vue

@@ -104,30 +104,44 @@
 			/**
 			 * 跳转
 			 */
+			// goUrl: function(e) {
+			// 	// console.log(e)
+			// 	if (e == "goShop") {
+			// 		this.goShop()
+			// 	}
+			// 	if (e == "goHome") {
+			// 		this.goHome()
+			// 	}
+			// 	if (e == "goSort") {
+			// 		this.goSort()
+			// 	}
+			// 	if (e == "goInteractive") {
+			// 		this.goInteractive()
+			// 	}
+			// 	if (e == "goLive") {
+			// 		this.goLive()
+			// 	}
+			// 	if (e == "goCart") {
+			// 		this.goCart()
+			// 	}
+			// 	if (e == "goUser") {
+			// 		this.goUser()
+			// 	}
+			// },
 			goUrl: function(e) {
-				// console.log(e)
-				if (e == "goShop") {
-					this.goShop()
-				}
-				if (e == "goHome") {
-					this.goHome()
-				}
-				if (e == "goSort") {
-					this.goSort()
-				}
-				if (e == "goInteractive") {
-					this.goInteractive()
-				}
-				if (e == "goLive") {
-					this.goLive()
-				}
-				if (e == "goCart") {
-					this.goCart()
-				}
-				if (e == "goUser") {
-					this.goUser()
+				console.log(e)
+				for(var i=0; i<this.list.length; i++){
+					let item = this.list[i]
+					if (e == item.click) {
+						if (this.channel === item.channel) return;
+						uni.switchTab({
+							url:'/'+item.pagePath
+						})
+						return false
+					}
 				}
 			},
+			
 			goHome: function() {
 				if (this.channel === "home") return;
 				app.globalData.switchTab('pages/index/index');

+ 81 - 0
machineAndCell/machineDetail/machineDetail.css

@@ -0,0 +1,81 @@
+page {
+	background-color: #fff;
+}
+
+.input-box {
+	padding: 30rpx 30rpx 0;
+}
+
+.input-box .input {
+	width: 615rpx;
+	height: 76rpx;
+	line-height: 76rpx;
+	background: #F8F8F8;
+	border-radius: 20rpx 20rpx 20rpx 20rpx;
+	opacity: 1;
+	padding: 0 32rpx;
+}
+
+.input-box .input input {
+	width: 100%;
+	height: 100%;
+}
+
+.saoma {
+	width: 39rpx;
+	height: 36rpx;
+	margin-left: 35rpx;
+}
+
+
+.item {
+	padding: 35rpx 0rpx;
+	justify-content: space-between;
+	border-bottom: 1rpx solid #E6E6E6;
+	;
+	margin: 0 30rpx;
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+}
+.item:last-child{
+	border-bottom: none;
+}
+
+.label {
+	color: #666464;
+	margin-right: 30rpx;
+}
+
+.item-input {
+	color: #A8A5A5;
+	text-align: right;
+}
+
+
+/* 保存按钮 */
+.submit-box{
+	height: 140rpx;
+	background: #FFFFFF;
+	box-shadow: 0rpx -5rpx 15rpx 1rpx rgba(0,0,0,0.05);
+	border-radius: 0rpx 0rpx 0rpx 0rpx;
+	opacity: 1;
+	position: fixed;
+	left: 0;
+	right: 0;
+	bottom: 0;
+}
+.submit-btn{
+	width: 556rpx;
+	line-height: 76rpx;
+	background: #EB5C20;
+	border-radius: 38rpx 38rpx 38rpx 38rpx;
+	opacity: 1;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #FFFFFF;
+	text-align: center;
+	margin:30rpx auto;
+}

+ 130 - 0
machineAndCell/machineDetail/machineDetail.vue

@@ -0,0 +1,130 @@
+<template>
+	<view>
+		<view>
+			<view class="item ddflex">
+				<view class="label">机柜名称</view>
+				<view class="item-input fflex">
+					<view>西正路100号门店12仓</view>
+					<view>在线</view>
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">机柜编号</view>
+				<view class="item-input fflex">
+					CHZD04TTCC200329109
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">机柜温度</view>
+				<view class="item-input fflex">
+					29C
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">机柜电压</view>
+				<view class="item-input fflex">
+					229.20V
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">当前电流</view>
+				<view class="item-input fflex">
+					14.2A
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">信号强度</view>
+				<view class="item-input fflex">
+					28
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">电表度数</view>
+				<view class="item-input fflex">
+					13461.11 KWH
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">iccid</view>
+				<view class="item-input fflex">
+					89860469092190149474
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">硬件版本</view>
+				<view class="item-input fflex">
+					V1.2
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">软件版本</view>
+				<view class="item-input fflex">
+					ZXSCMB-3.25-20220714
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">协议版本</view>
+				<view class="item-input fflex">
+					V1.2
+				</view>
+			</view>
+			
+		</view>
+		
+		<!-- 保存按钮 -->
+		<view class="savepadding" style="height: 150rpx;"></view>
+		<view class="savepadding submit-box">
+			<view class="submit-btn">
+				更改机柜地址
+			</view>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+	export default {
+		components: {
+		},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop:0,
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+			
+		},
+		methods: {
+			
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./machineDetail.css";
+</style>

+ 78 - 0
machineAndCell/machineInfo/machineInfo.css

@@ -0,0 +1,78 @@
+.cell-item{
+	width: calc((100% - 20rpx) / 2);
+	margin:30rpx 20rpx 0rpx 0;
+	background: #FFFFFF;
+	box-shadow: 0rpx 8rpx 40rpx 1rpx rgba(51,51,51,0.06);
+	border-radius: 20rpx 20rpx 20rpx 20rpx;
+	padding: 26rpx 27rpx 30rpx 30rpx;
+	box-sizing: border-box;
+}
+.cell-item:nth-child(2n){
+	margin-right: 0;
+}
+.cell-item-num{
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Bold, Source Han Sans CN;
+	font-weight: bold;
+	color: #666464;
+	line-height: 41rpx;
+}
+.cell-item-info{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: SourceHanSansCN-Regular-Regular, SourceHanSansCN-Regular;
+	font-weight: 400;
+	color: #A8A5A5;
+}
+.cell-item-info-item{
+	justify-content: space-between;
+}
+
+.cell-item-option{
+	line-height: 56rpx;
+	background: #FFFFFF;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	border: 2rpx solid #EB5C20;
+	margin: 37rpx 0rpx 0;
+	font-size: 24rpx;
+	font-family: SourceHanSansCN-Regular-, SourceHanSansCN-Regular;
+	font-weight: normal;
+	color: #EB5C20;
+	text-align: center;
+}
+
+/* 按钮 */
+.bottom-btns{
+	position: fixed;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	background: #FFFFFF;
+	box-shadow: 0rpx -5rpx 15rpx 1rpx rgba(0,0,0,0.05);
+	border-radius: 0rpx 0rpx 0rpx 0rpx;
+	opacity: 1;
+	z-index: 10;
+}
+.btn1{
+	width: 250rpx;
+	line-height: 76rpx;
+	background: #EB5C20;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	color: #fff;
+	text-align: center;
+	font-weight: 500;
+	font-size: 28rpx;
+}
+.btn2{
+	width: 160rpx;
+	line-height: 76rpx;
+	background: #0FCB27;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	color: #fff;
+	text-align: center;
+	font-weight: 500;
+	font-size: 28rpx;
+}

+ 94 - 0
machineAndCell/machineInfo/machineInfo.vue

@@ -0,0 +1,94 @@
+<template>
+	<view>
+		<view style="padding:0 30rpx;" class="ddflex">
+			<view class="cell-item" v-for="item,index in 9">
+				<view class="cell-item-num">{{index}}</view>
+				<view class="ddflex">
+					<view style="margin-right: 13rpx;">
+						<cell :soc="index*10"></cell>
+					</view>
+					<view class="cell-item-info fflex">
+						<view class="cell-item-info-item ddflex">
+							<view>型号</view>
+							<view>60V 30Ah</view>
+						</view>
+						<view class="cell-item-info-item ddflex">
+							<view>电量</view>
+							<view>80%</view>
+						</view>
+						<view class="cell-item-info-item ddflex">
+							<view>电压</view>
+							<view>66.85V</view>
+						</view>
+					</view>
+				</view>
+				<view class="cell-item-option" @click="jumpUrl('/machineAndCell/machineItemManage/machineItemManage')">仓位管理</view>
+			</view>
+		</view>
+		
+		<view style="height: 165rpx;" class="savepadding"></view>
+		<view class="bottom-btns savepadding">
+			<view class="ddflex" style="margin: 30rpx;justify-content: space-between;">
+				<view class="btn1" @click="jumpUrl('/warning/machineAlarm/machineAlarm')">故障告警</view>
+				<view class="btn1" @click="jumpUrl('/machineAndCell/machineDetail/machineDetail')">柜体信息</view>
+				<view class="btn2">刷新</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+	import cell from "../../components/cell/index";
+
+	export default {
+		components: {
+			cell
+		},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop:0,
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+			
+		},
+		methods: {
+			jumpUrl(url) {
+				if (req.isLogins(true)) {
+					uni.navigateTo({
+						url: url
+					})
+				}
+			},
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./machineInfo.css";
+</style>

+ 66 - 0
machineAndCell/machineItemManage/machineItemManage.css

@@ -0,0 +1,66 @@
+page{
+	background-color: #fff;
+}
+.option-box{
+	background: #FFFFFF;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	margin: 30rpx;
+	padding: 36rpx 20rpx;
+}
+.option-time{
+	font-size: 24rpx;
+	font-weight: 500;
+	color: #A8A5A5;
+	line-height: 36rpx;
+	justify-content: space-between;
+	padding-bottom:16rpx ;
+	border-bottom: 1rpx solid #E6E6E6;
+}
+.refresh{
+	font-size: 28rpx;
+}
+.refresh image{
+	width: 32rpx;
+	height: 32rpx;
+	margin-right: 8rpx;
+}
+.state{
+	justify-content: space-between;
+	font-size: 28rpx;
+	margin-top: 10rpx;
+	font-weight: 500;
+	color: #666464;
+}
+.note{
+	line-height: 36rpx;
+	font-size: 24rpx;
+	font-family: Source Han Sans CN-Regular, Source Han Sans CN;
+	font-weight: 400;
+	color: #A8A5A5;
+	margin: 13rpx 61rpx;
+}
+
+/* 按钮 */
+.bottom-btns{
+	position: fixed;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	background: #FFFFFF;
+	box-shadow: 0rpx -5rpx 15rpx 1rpx rgba(0,0,0,0.05);
+	border-radius: 0rpx 0rpx 0rpx 0rpx;
+	opacity: 1;
+	z-index: 10;
+}
+.btn{
+	margin: 30rpx;
+	line-height: 76rpx;
+	background: #EB5C20;
+	border-radius: 38rpx;
+	opacity: 1;
+	color: #fff;
+	text-align: center;
+	font-weight: 500;
+	font-size: 28rpx;
+}

+ 74 - 0
machineAndCell/machineItemManage/machineItemManage.vue

@@ -0,0 +1,74 @@
+<template>
+	<view>
+		<view class="option-box">
+			<view class="option-time ddflex">
+				<view>更新时间: 2023-04-03 11:09:08</view>
+				<view class="refresh ddflex">
+					<image src="../../static/pages/images/refresh.png"></image>
+					<text>刷新</text>
+				</view>
+			</view>
+			<view class="ddflex state">
+				<view class="ddflex">
+					<view>仓位状态:</view>
+					<view style="color: #A8A5A5;">启用</view>
+				</view>
+				<switch style="transform: scale(0.6);" color="#FF753A"></switch>
+			</view>
+		</view>
+		<view class="note">关闭后,仓门将禁用,用户无法打开</view>
+		
+		
+		<view style="height: 165rpx;" class="savepadding"></view>
+		<view class="bottom-btns savepadding">
+			<view class="btn" @click="jumpUrl('/warning/machineAlarm/machineAlarm')">一键开门</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+
+	export default {
+		components: {},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop:0,
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+			
+		},
+		methods: {
+			
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./machineItemManage.css";
+</style>

+ 98 - 11
pages.json

@@ -6,6 +6,41 @@
 				"navigationBarTitleText": "皮小电平台"
 			}
 		},
+		{
+			"path": "pages/operationData/operationData",
+			"style": {
+				"navigationBarTitleText": "运营数据"
+			}
+		},
+		{
+			"path": "pages/operationDataPersonal/operationDataPersonal",
+			"style": {
+				"navigationBarTitleText": "运营情况"
+			}
+		},
+		{
+			"path": "pages/myMerchant/myMerchant",
+			"style": {
+				"navigationBarTitleText": "我的商家"
+			}
+		},
+		{
+			"path": "pages/order/order",
+			"style": {
+				"navigationBarTitleText": "订单"
+			}
+		},
+		{
+			"path": "pages/orderDetail/orderDetail",
+			"style": {
+				"navigationBarTitleText": "订单详情"
+			}
+		},{
+			"path": "pages/machine/machine",
+			"style": {
+				"navigationStyle": "custom"
+			}
+		},
 		// {
 		// 	"path": "pages/main/main",
 		// 	"style": {
@@ -137,19 +172,11 @@
 		"custom": true,
 		"list": [{
 				"pagePath": "pages/index/index",
-				"text": "云药房"
+				"text": "首页"
 			},
-			// {
-			// 		"pagePath": "pages/main/main",
-			// 		"text": "首页"
-			// 	},
-			// {
-			// 	"pagePath": "pages/timelyDelivery/index",
-			// 	"text": "首页"
-			// },
 			{
-				"pagePath": "pages/sort/sort",
-				"text": "分类"
+				"pagePath": "pages/machine/machine",
+				"text": "机柜"
 			},
 			{
 				"pagePath": "pages/interactive/index",
@@ -360,6 +387,66 @@
 					}
 				}
 			]
+		},
+		{
+			"root": "warning",
+			"pages": [{
+					"path": "abnormalAlarm/abnormalAlarm",
+					"style": {
+						"navigationBarTitleText": "异常告警"
+					}
+			},{
+				"path": "userAlarm/userAlarm",
+				"style": {
+					"navigationBarTitleText": "用户报障"
+				}
+			},{
+				"path": "userAlarmUpload/userAlarmUpload",
+				"style": {
+					"navigationBarTitleText": "上传记录"
+				}
+			},{
+				"path": "reconditionAlarm/reconditionAlarm",
+				"style": {
+					"navigationBarTitleText": "检修提醒"
+				}
+			},{
+				"path": "reconditionAlarmUpload/reconditionAlarmUpload",
+				"style": {
+					"navigationBarTitleText": "上传记录"
+				}
+			},{
+				"path": "orderAlarm/orderAlarm",
+				"style": {
+					"navigationBarTitleText": "异常订单"
+				}
+			},{
+				"path": "machineAlarm/machineAlarm",
+				"style": {
+					"navigationBarTitleText": "故障告警"
+				}
+			}
+			]
+		},
+		{
+			"root": "machineAndCell",
+			"pages": [{
+					"path": "machineInfo/machineInfo",
+					"style": {
+						"navigationBarTitleText": "仓体信息"
+					}
+			},{
+				"path": "machineItemManage/machineItemManage",
+				"style": {
+					"navigationBarTitleText": "仓位管理"
+				}
+			},{
+				"path": "machineDetail/machineDetail",
+				"style": {
+					"navigationBarTitleText": "柜体信息"
+				}
+			}
+			]
 		}
 	]
 }

+ 7 - 0
pages/index/index.css

@@ -145,4 +145,11 @@ page {
 }
 .echart-box-timeType-item-acitve{
 	background: #FFFFFF;
+}
+.echart-line{
+	width: 610rpx;
+	height: 1rpx;
+	opacity: 1;
+	background-color: #E6E6E6;
+	margin: 30rpx auto;
 }

+ 308 - 37
pages/index/index.vue

@@ -47,20 +47,28 @@
 			</view>
 		</view>
 
-		<!--  -->
-		<view class="nav-box ddflex">
+		<!-- nav -->
+		<view v-if="true" class="nav-box ddflex">
 			<view class="nav-item">
-				<image class="nav-item-icon" src="../../static/pages/images/wdsj.png"></image>
+				<image class="nav-item-icon" src="../../static/pages/images/wdsj.png" @click="jumpUrl('/pages/myMerchant/myMerchant')"></image>
 				<view class="nav-item-title">我的商家</view>
 			</view>
 			<view class="nav-item">
 				<image class="nav-item-icon" src="../../static/pages/images/wdmd.png"></image>
 				<view class="nav-item-title">我的门店</view>
 			</view>
-			<view class="nav-item">
+			<view class="nav-item" @click="jumpUrl('/pages/operationData/operationData')">
+				<image class="nav-item-icon" src="../../static/pages/images/yysj.png"></image>
+				<view class="nav-item-title">运营数据</view>
+			</view>
+		</view>
+		
+		<view v-if="true" class="nav-box ddflex" style="padding: 10rpx 30rpx;justify-content: space-between;" @click="jumpUrl('/pages/operationData/operationData')">
+			<view class="nav-item ddflex">
 				<image class="nav-item-icon" src="../../static/pages/images/yysj.png"></image>
 				<view class="nav-item-title">运营数据</view>
 			</view>
+			<image style="width: 36rpx;height:36rpx;" src="../../static/pages/images/ssicon.png"></image>
 		</view>
 
 		<!-- 图表统计 -->
@@ -85,20 +93,37 @@
 		<view class="echart-box">
 			<view class="echart-box-header ddflex">
 				<view class="echart-box-title">商家营业额排名</view>
-				<view class="echart-box-timeType ddflex">
-					<view :class="'echart-box-timeType-item '+(timeType==1?'echart-box-timeType-item-acitve':'')"
-						@click="timeTypeChange(1)">按日</view>
-					<view :class="'echart-box-timeType-item '+(timeType==2?'echart-box-timeType-item-acitve':'')"
-						@click="timeTypeChange(2)">按月</view>
-					<view :class="'echart-box-timeType-item '+(timeType==3?'echart-box-timeType-item-acitve':'')"
-						@click="timeTypeChange(3)">季度</view>
-				</view>
 			</view>
 			<view>
 				<l-echart ref="chart2" @finished="init"></l-echart>
 			</view>
 		</view>
 
+		<!-- 图表统计 -->
+		<view class="echart-box">
+			<view class="echart-box-header ddflex">
+				<view class="echart-box-title">设备状态</view>
+			</view>
+
+			<view class="ddflex">
+				<view class="fflex" style="height: 250rpx;">
+					<l-echart ref="chart4" @finished="init"></l-echart>
+				</view>
+				<view class="fflex" style="height: 250rpx;">
+					<l-echart ref="chart5" @finished="init"></l-echart>
+				</view>
+				<view class="fflex" style="height: 250rpx;">
+					<l-echart ref="chart6" @finished="init"></l-echart>
+				</view>
+			</view>
+			<view class="echart-line"></view>
+			<view class="ddflex">
+				<view style="width: 100%;height: 300rpx;">
+					<l-echart ref="chart3" @finished="init"></l-echart>
+				</view>
+			</view>
+		</view>
+
 		<view class="guide" @tap="hideGuide" v-if="first">
 			<image src="/static/pages/images/guide.png" mode="widthFix"></image>
 		</view>
@@ -126,9 +151,11 @@
 			return {
 				systems: {},
 				bottomBlankHeight: app.globalData.isIPhoneX ? 68 : 0,
+				pxToRpxScale: 0,
+				rpxTopxScale: 0,
 
 				timeType: 1, //统计时间 1.按日 2.按月 3.按季度
-				
+
 				// 交易趋势图表数据
 				option: {
 					tooltip: {
@@ -205,7 +232,7 @@
 						},
 					]
 				},
-				
+
 				// 商家营业额排名
 				option2: {
 					tooltip: {
@@ -215,15 +242,9 @@
 						},
 						confine: true
 					},
-					legend: {
-						data: ['订单', '订单金额'],
-						x: 'right', //可设定图例在左、右、居中
-						y: 'bottom', //可设定图例在上、下、居中
-						padding: [60, 0, 0, 0]
-					},
 					grid: {
 						left: 0,
-						right: 8,
+						right: 20,
 						bottom: 40,
 						top: 40,
 						containLabel: true
@@ -239,7 +260,7 @@
 						axisLabel: {
 							color: '#666666',
 							// interval: 0,
-				
+
 						}
 					}],
 					yAxis: [{
@@ -254,22 +275,225 @@
 							}
 						},
 						axisLabel: {
-							color: '#666666'
+							color: '#666666',
+							// inside:true,
+							padding: [0, 0, 0, 0]
 						}
 					}],
 					series: [{
-							name: '订单',
-							type: 'bar',
-							data: [300, 270, 340, 344, 300, 320, 310],
-							barWidth: 5,
-							itemStyle: {
-								// 颜色
-								color: '#FF770F',
-								// 给bar设置倒角
-								barBorderRadius: [0, 15, 15, 0]
-							}
+						name: '订单',
+						type: 'bar',
+						label: {
+							normal: {
+								show: true,
+								position: 'right',
+								color: '#4c4a4a',
+								formatter:'¥{c}',
+							},
+						},
+						data: [300, 270, 340, 344, 300, 320, 310],
+						barWidth: 5,
+						itemStyle: {
+							// 颜色
+							color: '#FF770F',
+							// 给bar设置倒角
+							barBorderRadius: [0, 15, 15, 0]
 						}
-					]
+					}]
+				},
+
+				// 设备状态
+				option3: {
+					title: {
+						text: '设备出租比例',
+						textStyle: {
+							fontSize: 14
+						},
+						left: '70%',
+						top: '30%'
+					},
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							type: 'shadow'
+						},
+						confine: true
+					},
+					legend: {
+						data: ['已租', '未租'],
+						x: 'right', //可设定图例在左、右、居中
+						y: '50%', //可设定图例在上、下、居中
+						itemHeight:5,
+						itemWidth:20
+					},
+					grid: {
+						left: 0,
+						containLabel: true
+					},
+					series: [{
+						name: '订单',
+						type: 'pie',
+						center: ['30%', '50%'],
+						radius: ['60%', '80%'],
+						label: {
+							show: false
+						},
+						data: [{
+								value: 1055,
+								name: '未租',
+								itemStyle: {
+									color: "#FF770F"
+								}
+							},
+							{
+								value: 735,
+								name: '已租',
+								itemStyle: {
+									color: "#EAECF5"
+								}
+							}
+						]
+					}]
+				},
+
+				// 在线设备
+				option4: {
+					title: {
+						text: '在线设备',
+						textStyle: {
+							fontSize: 14,
+							fontWeight: 500
+						},
+						left: 'center',
+						bottom: '0'
+					},
+					series: [{
+						type: 'pie',
+						radius: ['60%', '70%'],
+						label: {
+							normal: {
+								show: true,
+								position: 'center',
+								color: '#4c4a4a',
+								formatter:'{c}',
+							},
+							emphasis: { //中间文字显示 
+								show: true,
+								textStyle:{
+									
+								}
+							}
+						},
+						data: [{
+								value: 1055,
+								name: '在线',
+								itemStyle: {
+									color: "#0FCB27"
+								}
+							},
+							{
+								value: 735,
+								name: '未在线',
+								itemStyle: {
+									color: "#EAECF5"
+								}
+							}
+						]
+					}]
+				},
+
+				// 离线设备
+				option5: {
+					title: {
+						text: '离线设备',
+						textStyle: {
+							fontSize: 14,
+							fontWeight: 500
+						},
+						left: 'center',
+						bottom: '0'
+					},
+					series: [{
+						type: 'pie',
+						center: ['50%', '50%'],
+						radius: ['60%', '70%'],
+						label: {
+							normal: {
+								show: true,
+								position: 'center',
+								color: '#4c4a4a',
+								formatter:'{c}',
+							},
+							emphasis: { //中间文字显示 
+								show: true,
+								textStyle:{
+									
+								}
+							}
+						},
+						data: [{
+								value: 1055,
+								name: '离线',
+								itemStyle: {
+									color: "#666464"
+								}
+							},
+							{
+								value: 735,
+								name: '未离线',
+								itemStyle: {
+									color: "#EAECF5"
+								}
+							}
+						]
+					}]
+				},
+
+				// 到期设备
+				option6: {
+					title: {
+						text: '到期设备',
+						textStyle: {
+							fontSize: 14,
+							fontWeight: 500
+						},
+						left: 'center',
+						bottom: '0'
+					},
+					series: [{
+						type: 'pie',
+						center: ['50%', '50%'],
+						radius: ['60%', '70%'],
+						label: {
+							normal: {
+								show: true,
+								position: 'center',
+								color: '#4c4a4a',
+								formatter:'{c}',
+							},
+							emphasis: { //中间文字显示 
+								show: true,
+								textStyle:{
+									
+								}
+							}
+						},
+						data: [{
+								value: 1055,
+								name: '到期',
+								itemStyle: {
+									color: "#FF770F"
+								}
+							},
+							{
+								value: 735,
+								name: '未到期',
+								itemStyle: {
+									color: "#EAECF5"
+								}
+							}
+						]
+					}]
 				},
 
 			};
@@ -306,6 +530,13 @@
 		onReachBottom() {},
 
 		methods: {
+			jumpUrl(url){
+				if(req.isLogins(true)){
+					uni.navigateTo({
+						url:url
+					})
+				}
+			},
 			// 统计时间切换
 			timeTypeChange(val) {
 				if (this.timeType == val) return false
@@ -322,11 +553,49 @@
 				if (this.$refs.chart2) {
 					this.$refs.chart2.init(echarts, async chart => {
 						// let echartData = await this.getEchartData()
-						this.option2.yAxis[0].data = ['罗技', '刘涛', '陈楚生', '罗巧红','李冰冰']
-						this.option2.series[0].data = [8125, 6802, 5622, 4588,2458]
+						this.option2.yAxis[0].data = ['罗技', '刘涛', '陈楚生', '罗巧红', '李冰冰']
+						this.option2.series[0].data = [8125, 6802, 5622, 4588, 2458]
 						chart.setOption(this.option2);
 					});
 				}
+				if (this.$refs.chart3) {
+					this.$refs.chart3.init(echarts, async chart => {
+						// // let echartData = await this.getEchartData()
+						// this.option2.yAxis[0].data = ['罗技', '刘涛', '陈楚生', '罗巧红', '李冰冰']
+						// this.option2.series[0].data = [8125, 6802, 5622, 4588, 2458]
+						this.option3.title.textStyle.fontSize = 28 * this.rpxTopxScale
+						this.option3.legend.itemHeight = 10 * this.rpxTopxScale
+						this.option3.legend.itemWidth = 40 * this.rpxTopxScale
+						chart.setOption(this.option3);
+					});
+				}
+				if (this.$refs.chart4) {
+					this.$refs.chart4.init(echarts, async chart => {
+						// // let echartData = await this.getEchartData()
+						// this.option2.yAxis[0].data = ['罗技', '刘涛', '陈楚生', '罗巧红', '李冰冰']
+						// this.option2.series[0].data = [8125, 6802, 5622, 4588, 2458]
+						this.option4.title.textStyle.fontSize = 24 * this.rpxTopxScale
+						chart.setOption(this.option4);
+					});
+				}
+				if (this.$refs.chart5) {
+					this.$refs.chart5.init(echarts, async chart => {
+						// // let echartData = await this.getEchartData()
+						// this.option2.yAxis[0].data = ['罗技', '刘涛', '陈楚生', '罗巧红', '李冰冰']
+						// this.option2.series[0].data = [8125, 6802, 5622, 4588, 2458]
+						this.option5.title.textStyle.fontSize = 24 * this.rpxTopxScale
+						chart.setOption(this.option5);
+					});
+				}
+				if (this.$refs.chart6) {
+					this.$refs.chart6.init(echarts, async chart => {
+						// // let echartData = await this.getEchartData()
+						// this.option2.yAxis[0].data = ['罗技', '刘涛', '陈楚生', '罗巧红', '李冰冰']
+						// this.option2.series[0].data = [8125, 6802, 5622, 4588, 2458]
+						this.option6.title.textStyle.fontSize = 24 * this.rpxTopxScale
+						chart.setOption(this.option6);
+					});
+				}
 			},
 			// 获取图表数据
 			getEchartData() {
@@ -394,7 +663,7 @@
 												success(res) {
 													console.log(res
 														.authSetting
-														); // res.authSetting = {
+													); // res.authSetting = {
 												}
 											});
 										}
@@ -430,6 +699,8 @@
 			const systemInfo = uni.getSystemInfoSync();
 			// px转换到rpx的比例
 			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			this.pxToRpxScale = pxToRpxScale
+			this.rpxTopxScale = systemInfo.windowWidth / 750
 			let systems = {
 				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
 				navigationHeight: 44 * pxToRpxScale // 导航栏的高度

+ 118 - 0
pages/machine/machine.css

@@ -0,0 +1,118 @@
+.top-box{
+	background-color: #fff;
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+}
+.top-box{
+	background-color: #fff;
+}
+.top-title{
+	font-size: 36rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #333333;
+	padding: 0 30rpx;
+}
+.dow-ssicon{
+	width: 36rpx;
+	height: 36rpx;
+	margin-left: 15rpx;
+}
+/* 搜索 */
+.search-box{
+	padding: 30rpx;
+}
+.search-saoma{
+	width: 40rpx;
+	height: 40rpx;
+	margin-right: 45rpx;
+}
+.search-input{
+	height: 76rpx;
+	line-height: 76rpx;
+	background: #F8F8F8;
+	border-radius: 20rpx 20rpx 20rpx 20rpx;
+	opacity: 1;
+	padding: 0 16rpx 0 30rpx;
+}
+.search-input-icon{
+	width: 26rpx;
+	height: 26rpx;
+	margin-right: 10rpx;
+}
+.search-btn{
+	width: 96rpx;
+	height: 47rpx;
+	line-height: 47rpx;
+	background: #EB5C20;
+	border-radius: 24rpx 24rpx 24rpx 24rpx;
+	opacity: 1;
+	font-size: 22rpx;
+	font-family: SourceHanSansCN-Regular-, SourceHanSansCN-Regular;
+	font-weight: normal;
+	color: #FFFFFF;
+	text-align: center;
+	margin-left: 10rpx;
+}
+
+/* 机柜 */
+.machine-item{
+	margin: 30rpx;
+	padding:23rpx 30rpx 38rpx;
+	background: #FFFFFF;
+	border-radius: 20rpx 20rpx 20rpx 20rpx;
+	opacity: 1;
+}
+.machine-title{
+	line-height: 47rpx;
+	font-size: 32rpx;
+	font-family: Source Han Sans CN-Bold, Source Han Sans CN;
+	font-weight: bold;
+	color: #333333;
+}
+.state{
+	line-height: 36rpx;
+	border-radius: 5rpx 5rpx 5rpx 5rpx;
+	opacity: 1;
+	border: 2rpx solid #0FCB27;
+	color: #0FCB27;
+	text-align: center;
+	margin-left: 20rpx;
+	padding: 0 15rpx;
+}
+.machine-number{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #666464;
+	margin-top: 7rpx;
+}
+.machine-info{
+	line-height: 36rpx;
+	background: #f8f8f8;
+	border-radius: 8rpx 8rpx 8rpx 8rpx;
+	padding: 20rpx;
+	font-size: 24rpx;
+	color: #666464;
+	font-weight: 500;
+	margin-top: 11rpx;
+}
+.margin-r40{
+	margin-right: 40rpx;
+}
+.address-box{
+	margin: 32rpx 0rpx 0;
+}
+.address-icon{
+	width: 26rpx;
+	height: 26rpx;
+	margin-right: 10rpx;
+}
+.daohang{
+	width: 50rpx;
+	height: 50rpx;
+	margin-left: 10rpx;
+}

+ 107 - 0
pages/machine/machine.vue

@@ -0,0 +1,107 @@
+<template>
+	<view>
+		<view class="top-box">
+			<view class="top-title">
+				<view class="ddflex" :style="'height: '+ systems.navigationHeight + 'rpx;padding-top:' + systems.ktxStatusHeight + 'rpx;'+'line-height: '+ systems.navigationHeight + 'rpx;'">
+					<view>白云科技门店</view>
+					<image class="dow-ssicon" src="../../static/pages/images/dow-ssicon.png"></image>
+				</view>
+			</view>
+			<view class="search-box ddflex">
+				<image class="search-saoma" src="../../static/pages/images/saoma.png"></image>
+				<view class="search-input ddflex fflex">
+					<image class="search-input-icon" src="../../static/pages/images/search.png"></image>
+					<input class="fflex"  placeholder="请输入编号查询"/>
+					<view class="search-btn">搜索</view>
+				</view>
+			</view>
+		</view>
+		
+		<view :style="'height: '+ (systems.navigationHeight+systems.ktxStatusHeight+134) + 'rpx;'"></view>
+		
+		<!-- 机柜 -->
+		<view class="machine-item" v-for="item in 10" @click="jumpUrl('/machineAndCell/machineInfo/machineInfo')">
+			<view class="ddflex" style="justify-content: space-between;">
+				<view class="machine-title fflex tover">创业2街站</view>
+				<view class="state">在线</view>
+			</view>
+			<view class="machine-number">机柜编号:CHZD04TTCC200329109</view>
+			<view class="machine-info ddflex">
+				<view class="ddflex">
+					<view class="margin-r40">温度:29℃</view>
+					<view class="margin-r40">仓门数:6</view>
+					<view class="margin-r40">电池数:4</view>
+				</view>
+				<view class="fflex tover" style="color: #2A82E4;text-align: right;">
+					白云科技
+				</view>
+			</view>
+			<view class="address-box ddflex">
+				<image class="address-icon" src="../../static/pages/images/address-icon.png"></image>
+				<view class="fflex tover">朝阳区金台路道家园1号</view>
+				<image class="daohang" src="../../static/pages/images/daohang.png"></image>
+			</view>
+		</view>
+		
+		<foot channel="machine" :isUpdate="isUpdate"></foot>
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+	import foot from "../../components/nav-bar/index";
+
+	export default {
+		components: {
+			foot
+		},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop:0,
+				isUpdate: false,
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+			this.setData({
+				isUpdate: !this.isUpdate
+			}); 
+		},
+		methods: {
+			jumpUrl(url){
+				if(req.isLogins(true)){
+					uni.navigateTo({
+						url:url
+					})
+				}
+			},
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./machine.css";
+</style>

+ 153 - 0
pages/myMerchant/myMerchant.css

@@ -0,0 +1,153 @@
+.search-box{
+	width: 690rpx;
+	height: 76rpx;
+	line-height: 76rpx;
+	background: #FFFFFF;
+	border-radius: 20rpx 20rpx 20rpx 20rpx;
+	margin: 30rpx;
+	opacity: 1;
+	padding:0 30rpx;
+	box-sizing: border-box;
+}
+.search-icon{
+	width: 26rpx;
+	height: 28rpx;
+	margin-right: 10rpx;
+}
+.search-btn{
+	width: 96rpx;
+	height: 47rpx;
+	line-height: 47rpx;
+	background: #EB5C20;
+	border-radius: 24rpx 24rpx 24rpx 24rpx;
+	opacity: 1;
+	text-align: center;
+	color: #fff;
+}
+
+/* 图表 */
+.echart-box{
+	padding: 30rpx;
+	background: #FFFFFF;
+	border-radius: 16rpx 16rpx 16rpx 16rpx;
+	opacity: 1;
+	margin: 30rpx;
+}
+.echart-box-header{
+	justify-content: space-between;
+}
+.echart-box-title{
+	line-height: 45rpx;
+	font-size: 30rpx;
+	font-weight: 500;
+	color: #333333;
+	margin-left: 12rpx;
+	position: relative;
+}
+.echart-box-title::before{
+	content: '';
+	position: absolute;
+	top: 50%;
+	transform: translateY(-50%);
+	left: -12rpx;
+	width: 6rpx;
+	height: 32rpx;
+	background: #EB5C20;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+}
+
+.sssb-box{
+	justify-content: space-between;
+	padding: 30rpx 60rpx;
+}
+.sssb-item{
+	text-align: center;
+}
+.sssb-label{
+	line-height: 36rpx;
+	font-size: 24rpx;
+	font-weight: 400;
+	color: #666464;
+}
+.sssb-data{
+	line-height: 50rpx;
+	font-size: 36rpx;
+	font-weight: bold;
+	color: #333333;
+	margin-top: 8rpx;
+}
+.sssb-line{
+	width: 1rpx;
+	height: 88rpx;
+	opacity: 1;
+	background-color:  #E6E6E6;
+}
+.sssb-color{
+	color: #EB5C20;
+}
+
+.sjyy-item{
+	width: 690rpx;
+	background: #FFFFFF;
+	border-radius: 20rpx 20rpx 20rpx 20rpx;
+	opacity: 1;
+	padding: 30rpx;
+	box-sizing: border-box;
+	margin: 30rpx;
+}
+.sjyy-header{
+	width: 88rpx;
+	height: 88rpx;
+	background: #F5F5F5;
+	opacity: 1;
+	border-radius: 100%;
+	overflow: hidden;
+	margin-right: 10rpx;
+}
+.sjyy-header image{
+	width: 100%;
+	height: 100%;
+}
+.sjyy-name{
+	line-height: 45rpx;
+	font-size: 32rpx;
+	font-weight: 800;
+	color: #333333;
+}
+.sjyy-name-label{
+	width: 105rpx;
+	line-height: 33rpx;
+	font-size: 22rpx;
+	color: #FFFFFF;
+	text-align: center;
+	background: #2A82E4;
+	border-radius: 5rpx 5rpx 5rpx 5rpx;
+	opacity: 1;
+	margin-left: 13rpx;
+	font-weight: normal;
+}
+.sjyy-phone{
+	line-height: 36rpx;
+	font-size: 24rpx;
+	font-weight: 500;
+	color: #666464;
+}
+.sjyy-btn{
+	width: 180rpx;
+	line-height: 56rpx;
+	border-radius: 73rpx 73rpx 73rpx 73rpx;
+	opacity: 1;
+	border: 2rpx solid #A8A5A5;
+	text-align: center;
+	margin-left: 20rpx;
+}
+.sjyy-data{
+	background: rgba(242, 242, 242, 0.5);
+	border-radius: 8rpx 8rpx 8rpx 8rpx;
+	margin:20rpx auto 0;
+	padding: 20rpx;
+}
+.sjyy-data-item{
+	text-align: center;
+}

+ 131 - 0
pages/myMerchant/myMerchant.vue

@@ -0,0 +1,131 @@
+<template>
+	<view>
+		<!-- 搜索 -->
+		<view>
+			<view class="search-box ddflex">
+				<image class="search-icon" src="../../static/images/ssico.png"></image>
+				<input class="fflex" placeholder="请输入商家名称或电话"/>
+				<view class="search-btn">搜索</view>
+			</view>
+		</view>
+		
+		<!-- 图表统计 -->
+		<view class="echart-box">
+			<view class="sssb-box ddflex">
+				<view class="sssb-item">
+					<view class="sssb-label">商家总数</view>
+					<view class="sssb-data sssb-color">867.00</view>
+				</view>
+				<view class="sssb-line"></view>
+				<view class="sssb-item">
+					<view class="sssb-label">门店总数</view>
+					<view class="sssb-data sssb-color">1915.00</view>
+				</view>
+			</view>
+		</view>
+		
+		<view>
+			<view class="sjyy-item" v-for="item,index in 10">
+				<view class="ddflex">
+					<view class="sjyy-header">
+						<image src="../../static/pages/images/wdsj.png"></image>
+					</view>
+					<view class="fflex">
+						<view class="sjyy-name ddflex">
+							<view>宋秀兰</view>
+							<view class="sjyy-name-label">我的商家</view>
+						</view>
+						<view class="sjyy-phone">13815141671</view>
+					</view>
+					<view>
+						<image style="width: 48rpx;height: 48rpx;margin-left: 20rpx;" src="../../static/pages/images/call.png"></image>
+					</view>
+				</view>
+				<view class="sjyy-data ddflex">
+					<image style="width: 19rpx;height: 25rpx;margin-right: 10rpx;" src="../../static/pages/images/dwico1.png"></image>
+					<view class="tover fflex" style="font-size: 24rpx;line-height: 36rpx;">朝阳区金台路道家园1号</view>
+				</view>
+				<view class="sjyy-data ddflex">
+					<view class="sjyy-data-item fflex">
+						<view class="sssb-data sssb-color">10242.00</view>
+						<view class="sssb-label">累计收益</view>
+					</view>
+					<view class="sjyy-data-item fflex">
+						<view class="sssb-data sssb-color">1915.00</view>
+						<view class="sssb-label">今日收益</view>
+					</view>
+					<view class="sjyy-data-item fflex">
+						<view class="sssb-data sssb-color">9154.00</view>
+						<view class="sssb-label">本月收益</view>
+					</view>
+				</view>
+				<view class="sjyy-data ddflex">
+					<view class="sjyy-data-item fflex">
+						<view class="sssb-data sssb-color">56</view>
+						<view class="sssb-label">机柜数</view>
+					</view>
+					<view class="sjyy-data-item fflex">
+						<view class="sssb-data sssb-color">50%</view>
+						<view class="sssb-label">分润</view>
+					</view>
+					<view class="sjyy-data-item fflex">
+						<view class="sssb-data sssb-color">5</view>
+						<view class="sssb-label">门店数</view>
+					</view>
+				</view>
+				<view class="ddflex" style="justify-content: space-between;margin-top: 30rpx;">
+					<view class="sjyy-btn" style="border: 2rpx solid #EB5C20;color: #EB5C20;" @click="jumpUrl()">查看订单</view>
+					<view class="sjyy-btn" @click="jumpUrl()">查看设备</view>
+					<view class="sjyy-btn" @click="jumpUrl('/pages/operationDataPersonal/operationDataPersonal')">运营情况</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+
+	export default {
+		components: {},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop:0,
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+			
+		},
+		methods: {
+			
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./myMerchant.css";
+</style>

+ 198 - 0
pages/operationData/operationData.css

@@ -0,0 +1,198 @@
+.tab-box{
+	background-color: #fff;
+	padding: 30rpx;
+	position: fixed;
+	left: 0;
+	right: 0;
+	top: 0;
+	z-index: 100;
+	justify-content: space-between;
+}
+.tab-item{
+	text-align: center;
+	font-size: 28rpx;
+	line-height: 41rpx;
+}
+.tab-item image{
+	visibility: hidden;
+}
+.tab-item-active{
+	color: #EB5C20;
+}
+.tab-item-active image{
+	visibility: visible;
+}
+.tab-active-icon{
+	width: 32rpx;
+	height: 10rpx;
+	margin-top: 10rpx;
+	margin: auto;
+}
+
+/* 图表 */
+.echart-box{
+	padding: 30rpx;
+	background: #FFFFFF;
+	border-radius: 16rpx 16rpx 16rpx 16rpx;
+	opacity: 1;
+	margin: 30rpx;
+}
+.echart-box-header{
+	justify-content: space-between;
+}
+.echart-box-title{
+	line-height: 45rpx;
+	font-size: 30rpx;
+	font-weight: 500;
+	color: #333333;
+	margin-left: 12rpx;
+	position: relative;
+}
+.echart-box-title::before{
+	content: '';
+	position: absolute;
+	top: 50%;
+	transform: translateY(-50%);
+	left: -12rpx;
+	width: 6rpx;
+	height: 32rpx;
+	background: #EB5C20;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+}
+.echart-box-timeType{
+	background: #E6E6E6;
+	border-radius: 26rpx 26rpx 26rpx 26rpx;
+	opacity: 1;
+	padding: 4rpx;
+}
+.echart-box-timeType-item{
+	width: 92rpx;
+	height: 44rpx;
+	line-height: 44rpx;
+	border-radius: 26rpx 26rpx 26rpx 26rpx;
+	opacity: 1;
+	text-align: center;
+}
+.echart-box-timeType-item-acitve{
+	background: #FFFFFF;
+}
+.echart-title{
+	line-height: 36rpx;
+	font-size: 24rpx;
+	font-weight: 400;
+	color: #333333;
+}
+
+/* 实时设备数据 */
+.sssb-box{
+	justify-content: space-between;
+	padding: 30rpx 60rpx;
+}
+.sssb-item{
+	text-align: center;
+}
+.sssb-label{
+	line-height: 36rpx;
+	font-size: 24rpx;
+	font-weight: 400;
+	color: #666464;
+}
+.sssb-data{
+	line-height: 50rpx;
+	font-size: 36rpx;
+	font-weight: bold;
+	color: #333333;
+	margin-top: 8rpx;
+}
+.sssb-line{
+	width: 1rpx;
+	height: 88rpx;
+	opacity: 1;
+	background-color:  #E6E6E6;
+}
+.sssb-color{
+	color: #EB5C20;
+}
+
+/* 商家营业额 */
+.search-box{
+	width: 690rpx;
+	height: 76rpx;
+	line-height: 76rpx;
+	background: #FFFFFF;
+	border-radius: 20rpx 20rpx 20rpx 20rpx;
+	margin: 30rpx;
+	opacity: 1;
+	padding:0 30rpx;
+	box-sizing: border-box;
+}
+.search-icon{
+	width: 26rpx;
+	height: 28rpx;
+	margin-right: 10rpx;
+}
+.search-btn{
+	width: 96rpx;
+	height: 47rpx;
+	line-height: 47rpx;
+	background: #EB5C20;
+	border-radius: 24rpx 24rpx 24rpx 24rpx;
+	opacity: 1;
+	text-align: center;
+	color: #fff;
+}
+
+/* 商家营业额 */
+.sjyy-item{
+	width: 690rpx;
+	background: #FFFFFF;
+	border-radius: 20rpx 20rpx 20rpx 20rpx;
+	opacity: 1;
+	padding: 30rpx;
+	box-sizing: border-box;
+	margin: 30rpx;
+}
+.sjyy-header{
+	width: 88rpx;
+	height: 88rpx;
+	background: #F5F5F5;
+	opacity: 1;
+	border-radius: 100%;
+	overflow: hidden;
+	margin-right: 10rpx;
+}
+.sjyy-header image{
+	width: 100%;
+	height: 100%;
+}
+.sjyy-name{
+	line-height: 45rpx;
+	font-size: 32rpx;
+	font-weight: 800;
+	color: #333333;
+}
+.sjyy-phone{
+	line-height: 36rpx;
+	font-size: 24rpx;
+	font-weight: 500;
+	color: #666464;
+}
+.sjyy-btn{
+	width: 180rpx;
+	line-height: 56rpx;
+	border-radius: 73rpx 73rpx 73rpx 73rpx;
+	opacity: 1;
+	border: 2rpx solid #A8A5A5;
+	text-align: center;
+	margin-left: 20rpx;
+}
+.sjyy-data{
+	background: rgba(242, 242, 242, 0.5);
+	border-radius: 8rpx 8rpx 8rpx 8rpx;
+	margin:20rpx auto 0;
+	padding: 20rpx;
+}
+.sjyy-data-item{
+	text-align: center;
+}

+ 478 - 0
pages/operationData/operationData.vue

@@ -0,0 +1,478 @@
+<template>
+	<view style="padding-bottom: 30rpx;">
+		<!-- tab -->
+		<view class="tab-box ddflex">
+			<view :class="'tab-item fflex '+(queryType==1?'tab-item-active':'')" @click="queryTypeChange(1)">
+				<view>我的收益</view>
+				<image class="tab-active-icon" src="../../static/images/tab_cur.png"></image>
+			</view>
+			<view :class="'tab-item fflex '+(queryType==2?'tab-item-active':'')" @click="queryTypeChange(2)">
+				<view>商家营业额</view>
+				<image class="tab-active-icon" src="../../static/images/tab_cur.png"></image>
+			</view>
+			<view :class="'tab-item fflex '+(queryType==3?'tab-item-active':'')" @click="queryTypeChange(3)">
+				<view>门店营业额</view>
+				<image class="tab-active-icon" src="../../static/images/tab_cur.png"></image>
+			</view>
+		</view>
+		<view style="height: 110rpx;"></view>
+
+		<!-- 我的收益 -->
+		<block v-if="queryType==1">
+			<!-- 图表统计 -->
+			<view class="echart-box">
+				<view class="echart-box-header ddflex">
+					<view class="echart-box-title">收益走势图</view>
+					<view class="echart-box-timeType ddflex">
+						<view :class="'echart-box-timeType-item '+(timeType==1?'echart-box-timeType-item-acitve':'')"
+							@click="timeTypeChange(1)">按日</view>
+						<view :class="'echart-box-timeType-item '+(timeType==2?'echart-box-timeType-item-acitve':'')"
+							@click="timeTypeChange(2)">按月</view>
+						<view :class="'echart-box-timeType-item '+(timeType==3?'echart-box-timeType-item-acitve':'')"
+							@click="timeTypeChange(3)">季度</view>
+					</view>
+				</view>
+				<view style="margin-top: 30rpx;height:500rpx">
+					<l-echart ref="chart" @finished="init"></l-echart>
+				</view>
+			</view>
+
+			<!-- 图表统计 -->
+			<view class="echart-box">
+				<view class="echart-box-header ddflex">
+					<view class="echart-box-title">实时设备数据</view>
+				</view>
+				<view class="sssb-box ddflex">
+					<view class="sssb-item">
+						<view class="sssb-label">总数</view>
+						<view class="sssb-data">421台</view>
+					</view>
+					<view class="sssb-line"></view>
+					<view class="sssb-item">
+						<view class="sssb-label">使用总次数</view>
+						<view class="sssb-data">63889次</view>
+					</view>
+				</view>
+				<view class="sssb-box ddflex">
+					<view class="sssb-item">
+						<view class="sssb-label">已下发</view>
+						<view class="sssb-data">509台</view>
+					</view>
+					<view class="sssb-line"></view>
+					<view class="sssb-item">
+						<view class="sssb-label">总收益</view>
+						<view class="sssb-data sssb-color">92516元</view>
+					</view>
+				</view>
+			</view>
+
+			<!-- 图表统计 -->
+			<view class="echart-box">
+				<view class="echart-box-header ddflex">
+					<view class="echart-box-title">我的运营情况</view>
+				</view>
+				<view class="sssb-box ddflex">
+					<view class="sssb-item">
+						<view class="sssb-label">营业总额</view>
+						<view class="sssb-data sssb-color">867.00</view>
+					</view>
+					<view class="sssb-line"></view>
+					<view class="sssb-item">
+						<view class="sssb-label">收益总额</view>
+						<view class="sssb-data sssb-color">1915.00</view>
+					</view>
+				</view>
+				<view style="margin-top: 30rpx;height:500rpx">
+					<view class="echart-title">近一周营业额度(元)图表数据</view>
+					<l-echart ref="chart2" @finished="init"></l-echart>
+				</view>
+				<view style="margin-top: 30rpx;height:500rpx">
+					<view class="echart-title">近一周收益额度(元)</view>
+					<l-echart ref="chart3" @finished="init"></l-echart>
+				</view>
+			</view>
+		</block>
+		
+		<!-- 商家营业额 -->
+		<block v-if="queryType==2">
+			<!-- 搜索 -->
+			<view>
+				<view class="search-box ddflex">
+					<image class="search-icon" src="../../static/images/ssico.png"></image>
+					<input class="fflex" placeholder="请输入商家名称或电话"/>
+					<view class="search-btn">搜索</view>
+				</view>
+			</view>
+			<!-- 数据 -->
+			<view>
+				<view class="sjyy-item" v-for="item,index in 10">
+					<view class="ddflex">
+						<view class="sjyy-header">
+							<image src="../../static/pages/images/wdsj.png"></image>
+						</view>
+						<view class="fflex">
+							<view class="sjyy-name">宋秀兰</view>
+							<view class="sjyy-phone">13815141671</view>
+						</view>
+						<view class="sjyy-btn" @click="jumpUrl('/pages/operationDataPersonal/operationDataPersonal')">运营情况</view>
+					</view>
+					<view class="sjyy-data ddflex">
+						<view class="sjyy-data-item fflex">
+							<view class="sssb-data sssb-color">10242.00</view>
+							<view class="sssb-label">营业总额</view>
+						</view>
+						<view class="sjyy-data-item fflex">
+							<view class="sssb-data sssb-color">1915.00</view>
+							<view class="sssb-label">收益总额</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</block>
+		
+		<!-- 门店营业额 -->
+		<block v-if="queryType==3">
+			<!-- 搜索 -->
+			<view>
+				<view class="search-box ddflex">
+					<image class="search-icon" src="../../static/images/ssico.png"></image>
+					<input class="fflex" placeholder="请输入门店名称或电话"/>
+					<view class="search-btn">搜索</view>
+				</view>
+			</view>
+			<!-- 数据 -->
+			<view>
+				<view class="sjyy-item" v-for="item,index in 10">
+					<view class="ddflex">
+						<view class="sjyy-header">
+							<image src="../../static/pages/images/wdmd.png"></image>
+						</view>
+						<view class="fflex">
+							<view class="sjyy-name">白云科技门店</view>
+							<view class="sjyy-phone">顾勇(13815141671)</view>
+						</view>
+						<view class="sjyy-btn" @click="jumpUrl('/pages/operationDataPersonal/operationDataPersonal')">运营情况</view>
+					</view>
+					<view class="sjyy-data ddflex">
+						<image style="width: 19rpx;height: 25rpx;margin-right: 10rpx;" src="../../static/pages/images/dwico1.png"></image>
+						<view class="tover fflex" style="font-size: 24rpx;line-height: 36rpx;">朝阳区金台路道家园1号</view>
+					</view>
+					<view class="sjyy-data ddflex">
+						<view class="sjyy-data-item fflex">
+							<view class="sssb-data sssb-color">10242.00</view>
+							<view class="sssb-label">营业总额</view>
+						</view>
+						<view class="sjyy-data-item fflex">
+							<view class="sssb-data sssb-color">1915.00</view>
+							<view class="sssb-label">收益总额</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</block>
+
+
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+	import LEchart from '../../components/l-echart/l-echart.vue';
+	import * as echarts from '../../utils/echarts.min.js'
+	export default {
+		components: {
+			LEchart
+		},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop: 0,
+				pxToRpxScale: 0,
+				rpxTopxScale: 0,
+
+
+				queryType: 1,
+				timeType: 1, //统计时间 1.按日 2.按月 3.按季度
+
+				// 交易趋势图表数据
+				option: {
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							type: 'shadow'
+						},
+						confine: true
+					},
+					grid: {
+						left: 0,
+						right: 8,
+						bottom: 10,
+						top: 10,
+						containLabel: true
+					},
+					xAxis: [{
+						type: 'category',
+						data: [],
+						axisLine: {
+							lineStyle: {
+								color: '#999999'
+							}
+						},
+						axisLabel: {
+							color: '#666666',
+							// interval: 0,
+
+						}
+					}],
+					yAxis: [{
+						type: 'value',
+						axisTick: {
+							show: false
+						},
+						axisLine: {
+							lineStyle: {
+								color: '#999999'
+							}
+						},
+						axisLabel: {
+							color: '#666666'
+						}
+					}],
+					series: [{
+						name: '订单',
+						type: 'line',
+						data: [],
+						barWidth: 10,
+						itemStyle: {
+							// 颜色
+							color: '#FF7D00',
+							// 给bar设置倒角
+							barBorderRadius: [15, 15, 0, 0]
+						}
+					}]
+				},
+
+				// 近一周营业额度(元)图表数据
+				option2: {
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							type: 'shadow'
+						},
+						confine: true
+					},
+					grid: {
+						left: 0,
+						right: 8,
+						bottom: 20,
+						top: 30,
+						containLabel: true
+					},
+					xAxis: [{
+						type: 'category',
+						data: [],
+						axisLine: {
+							lineStyle: {
+								color: '#999999'
+							}
+						},
+						axisLabel: {
+							color: '#666666',
+							// interval: 0,
+
+						}
+					}],
+					yAxis: [{
+						type: 'value',
+
+						axisTick: {
+							show: false
+						},
+						axisLine: {
+							lineStyle: {
+								color: '#999999'
+							}
+						},
+						axisLabel: {
+							color: '#666666'
+						}
+					}],
+					series: [{
+						name: '订单',
+						type: 'bar',
+						label: {
+							normal: {
+								show: true,
+								position: 'top',
+								color: '#FF770F',
+								formatter: '¥{c}',
+							},
+						},
+						data: [285, 200, 285, 300, 285, 285, 320],
+						barWidth: 15,
+						itemStyle: {
+							// 颜色
+							color: '#FF770F',
+							// 给bar设置倒角
+							barBorderRadius: [0, 0, 0, 0]
+						}
+					}]
+				},
+
+				// 近一周收益额度(元)
+				option3: {
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							type: 'shadow'
+						},
+						confine: true
+					},
+					grid: {
+						left: 0,
+						right: 8,
+						bottom: 20,
+						top: 30,
+						containLabel: true
+					},
+					xAxis: [{
+						type: 'category',
+						data: [],
+						axisLine: {
+							lineStyle: {
+								color: '#999999'
+							}
+						},
+						axisLabel: {
+							color: '#666666',
+							// interval: 0,
+
+						}
+					}],
+					yAxis: [{
+						type: 'value',
+
+						axisTick: {
+							show: false
+						},
+						axisLine: {
+							lineStyle: {
+								color: '#999999'
+							}
+						},
+						axisLabel: {
+							color: '#666666'
+						}
+					}],
+					series: [{
+						name: '订单',
+						type: 'bar',
+						label: {
+							normal: {
+								show: true,
+								position: 'top',
+								color: '#FF770F',
+								formatter: '¥{c}',
+							},
+						},
+						data: [285, 200, 285, 300, 285, 285, 320],
+						barWidth: 15,
+						itemStyle: {
+							// 颜色
+							color: '#FF770F',
+							// 给bar设置倒角
+							barBorderRadius: [0, 0, 0, 0]
+						}
+					}]
+				}
+
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+
+		},
+		methods: {
+			jumpUrl(url) {
+				if (req.isLogins(true)) {
+					uni.navigateTo({
+						url: url
+					})
+				}
+			},
+			queryTypeChange(val) {
+				if (this.queryType == val) return false
+				this.queryType = val
+			},
+			// 统计时间切换
+			timeTypeChange(val) {
+				if (this.timeType == val) return false
+				this.timeType = val
+			},
+			init() {
+				this.$refs.chart.init(echarts, async chart => {
+					// let echartData = await this.getEchartData()
+					this.option.xAxis[0].data = ['04-04', '04-05', '04-06', '04-07', '04-08', '04-09', '04-10']
+					this.option.yAxis[0].axisLabel.fontSize = 13 * this.rpxTopxScale
+					this.option.xAxis[0].axisLabel.fontSize = 13 * this.rpxTopxScale
+					this.option.series[0].data = [100, 270, 340, 344, 300, 320, 310]
+					chart.setOption(this.option);
+				});
+				if (this.$refs.chart2) {
+					this.$refs.chart2.init(echarts, async chart => {
+						// let echartData = await this.getEchartData()
+						this.option2.xAxis[0].data = ['04-04', '04-05', '04-06', '04-07', '04-08', '04-09',
+							'04-10'
+						]
+						this.option2.yAxis[0].axisLabel.fontSize = 13 * this.rpxTopxScale
+						this.option2.xAxis[0].axisLabel.fontSize = 13 * this.rpxTopxScale
+						this.option2.series[0].data = [300, 270, 340, 344, 300, 320, 310]
+						this.option2.series[0].label.normal.fontSize = 13 * this.rpxTopxScale
+						chart.setOption(this.option2);
+					});
+				}
+				if (this.$refs.chart3) {
+					this.$refs.chart3.init(echarts, async chart => {
+						// let echartData = await this.getEchartData()
+						this.option3.xAxis[0].data = ['04-04', '04-05', '04-06', '04-07', '04-08', '04-09',
+							'04-10'
+						]
+						this.option3.yAxis[0].axisLabel.fontSize = 13 * this.rpxTopxScale
+						this.option3.xAxis[0].axisLabel.fontSize = 13 * this.rpxTopxScale
+						this.option3.series[0].data = [300, 270, 340, 344, 300, 320, 310]
+						this.option3.series[0].label.normal.fontSize = 13 * this.rpxTopxScale
+						chart.setOption(this.option3);
+					});
+				}
+			}
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			this.pxToRpxScale = pxToRpxScale
+			this.rpxTopxScale = systemInfo.windowWidth / 750
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./operationData.css";
+</style>

+ 197 - 0
pages/operationDataPersonal/operationDataPersonal.css

@@ -0,0 +1,197 @@
+.tab-box{
+	background-color: #fff;
+	padding: 30rpx;
+	position: fixed;
+	left: 0;
+	right: 0;
+	top: 0;
+	z-index: 100;
+}
+.tab-item{
+	text-align: center;
+	font-size: 28rpx;
+	line-height: 41rpx;
+}
+.tab-item image{
+	visibility: hidden;
+}
+.tab-item-active{
+	color: #EB5C20;
+}
+.tab-item-active image{
+	visibility: visible;
+}
+.tab-active-icon{
+	width: 32rpx;
+	height: 10rpx;
+	margin-top: 10rpx;
+	margin: auto;
+}
+
+/* 图表 */
+.echart-box{
+	padding: 30rpx;
+	background: #FFFFFF;
+	border-radius: 16rpx 16rpx 16rpx 16rpx;
+	opacity: 1;
+	margin: 30rpx;
+}
+.echart-box-header{
+	justify-content: space-between;
+}
+.echart-box-title{
+	line-height: 45rpx;
+	font-size: 30rpx;
+	font-weight: 500;
+	color: #333333;
+	margin-left: 12rpx;
+	position: relative;
+}
+.echart-box-title::before{
+	content: '';
+	position: absolute;
+	top: 50%;
+	transform: translateY(-50%);
+	left: -12rpx;
+	width: 6rpx;
+	height: 32rpx;
+	background: #EB5C20;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+}
+.echart-box-timeType{
+	background: #E6E6E6;
+	border-radius: 26rpx 26rpx 26rpx 26rpx;
+	opacity: 1;
+	padding: 4rpx;
+}
+.echart-box-timeType-item{
+	width: 92rpx;
+	height: 44rpx;
+	line-height: 44rpx;
+	border-radius: 26rpx 26rpx 26rpx 26rpx;
+	opacity: 1;
+	text-align: center;
+}
+.echart-box-timeType-item-acitve{
+	background: #FFFFFF;
+}
+.echart-title{
+	line-height: 36rpx;
+	font-size: 24rpx;
+	font-weight: 400;
+	color: #333333;
+}
+
+/* 实时设备数据 */
+.sssb-box{
+	justify-content: space-between;
+	padding: 30rpx 60rpx;
+}
+.sssb-item{
+	text-align: center;
+}
+.sssb-label{
+	line-height: 36rpx;
+	font-size: 24rpx;
+	font-weight: 400;
+	color: #666464;
+}
+.sssb-data{
+	line-height: 50rpx;
+	font-size: 36rpx;
+	font-weight: bold;
+	color: #333333;
+	margin-top: 8rpx;
+}
+.sssb-line{
+	width: 1rpx;
+	height: 88rpx;
+	opacity: 1;
+	background-color:  #E6E6E6;
+}
+.sssb-color{
+	color: #EB5C20;
+}
+
+/* 商家营业额 */
+.search-box{
+	width: 690rpx;
+	height: 76rpx;
+	line-height: 76rpx;
+	background: #FFFFFF;
+	border-radius: 20rpx 20rpx 20rpx 20rpx;
+	margin: 30rpx;
+	opacity: 1;
+	padding:0 30rpx;
+	box-sizing: border-box;
+}
+.search-icon{
+	width: 26rpx;
+	height: 28rpx;
+	margin-right: 10rpx;
+}
+.search-btn{
+	width: 96rpx;
+	height: 47rpx;
+	line-height: 47rpx;
+	background: #EB5C20;
+	border-radius: 24rpx 24rpx 24rpx 24rpx;
+	opacity: 1;
+	text-align: center;
+	color: #fff;
+}
+
+/* 商家营业额 */
+.sjyy-item{
+	width: 690rpx;
+	background: #FFFFFF;
+	border-radius: 20rpx 20rpx 20rpx 20rpx;
+	opacity: 1;
+	padding: 30rpx;
+	box-sizing: border-box;
+	margin: 30rpx;
+}
+.sjyy-header{
+	width: 88rpx;
+	height: 88rpx;
+	background: #F5F5F5;
+	opacity: 1;
+	border-radius: 100%;
+	overflow: hidden;
+	margin-right: 10rpx;
+}
+.sjyy-header image{
+	width: 100%;
+	height: 100%;
+}
+.sjyy-name{
+	line-height: 45rpx;
+	font-size: 32rpx;
+	font-weight: 800;
+	color: #333333;
+}
+.sjyy-phone{
+	line-height: 36rpx;
+	font-size: 24rpx;
+	font-weight: 500;
+	color: #666464;
+}
+.sjyy-btn{
+	width: 180rpx;
+	line-height: 56rpx;
+	border-radius: 73rpx 73rpx 73rpx 73rpx;
+	opacity: 1;
+	border: 2rpx solid #A8A5A5;
+	text-align: center;
+	margin-left: 20rpx;
+}
+.sjyy-data{
+	background: rgba(242, 242, 242, 0.5);
+	border-radius: 8rpx 8rpx 8rpx 8rpx;
+	margin:20rpx auto 0;
+	padding: 20rpx;
+}
+.sjyy-data-item{
+	text-align: center;
+}

+ 255 - 0
pages/operationDataPersonal/operationDataPersonal.vue

@@ -0,0 +1,255 @@
+<template>
+	<view style="padding-bottom: 30rpx;">
+		<!-- 图表统计 -->
+		<view class="echart-box">
+			<view class="echart-box-header ddflex">
+				<view class="echart-box-title">运营情况</view>
+			</view>
+			<view class="sssb-box ddflex">
+				<view class="sssb-item">
+					<view class="sssb-label">营业总额</view>
+					<view class="sssb-data sssb-color">867.00</view>
+				</view>
+				<view class="sssb-line"></view>
+				<view class="sssb-item">
+					<view class="sssb-label">收益总额</view>
+					<view class="sssb-data sssb-color">1915.00</view>
+				</view>
+			</view>
+			<view style="margin-top: 30rpx;height:500rpx">
+				<view class="echart-title">近一周营业额度(元)图表数据</view>
+				<l-echart ref="chart2" @finished="init"></l-echart>
+			</view>
+			<view style="margin-top: 30rpx;height:500rpx">
+				<view class="echart-title">近一周收益额度(元)</view>
+				<l-echart ref="chart3" @finished="init"></l-echart>
+			</view>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+	import LEchart from '../../components/l-echart/l-echart.vue';
+	import * as echarts from '../../utils/echarts.min.js'
+	export default {
+		components: {
+			LEchart
+		},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop: 0,
+				pxToRpxScale: 0,
+				rpxTopxScale: 0,
+
+
+				// 近一周营业额度(元)图表数据
+				option2: {
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							type: 'shadow'
+						},
+						confine: true
+					},
+					grid: {
+						left: 0,
+						right: 8,
+						bottom: 20,
+						top: 30,
+						containLabel: true
+					},
+					xAxis: [{
+						type: 'category',
+						data: [],
+						axisLine: {
+							lineStyle: {
+								color: '#999999'
+							}
+						},
+						axisLabel: {
+							color: '#666666',
+							// interval: 0,
+
+						}
+					}],
+					yAxis: [{
+						type: 'value',
+
+						axisTick: {
+							show: false
+						},
+						axisLine: {
+							lineStyle: {
+								color: '#999999'
+							}
+						},
+						axisLabel: {
+							color: '#666666'
+						}
+					}],
+					series: [{
+						name: '订单',
+						type: 'bar',
+						label: {
+							normal: {
+								show: true,
+								position: 'top',
+								color: '#FF770F',
+								formatter: '¥{c}',
+							},
+						},
+						data: [285, 200, 285, 300, 285, 285, 320],
+						barWidth: 15,
+						itemStyle: {
+							// 颜色
+							color: '#FF770F',
+							// 给bar设置倒角
+							barBorderRadius: [0, 0, 0, 0]
+						}
+					}]
+				},
+
+				// 近一周收益额度(元)
+				option3: {
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							type: 'shadow'
+						},
+						confine: true
+					},
+					grid: {
+						left: 0,
+						right: 8,
+						bottom: 20,
+						top: 30,
+						containLabel: true
+					},
+					xAxis: [{
+						type: 'category',
+						data: [],
+						axisLine: {
+							lineStyle: {
+								color: '#999999'
+							}
+						},
+						axisLabel: {
+							color: '#666666',
+							// interval: 0,
+
+						}
+					}],
+					yAxis: [{
+						type: 'value',
+
+						axisTick: {
+							show: false
+						},
+						axisLine: {
+							lineStyle: {
+								color: '#999999'
+							}
+						},
+						axisLabel: {
+							color: '#666666'
+						}
+					}],
+					series: [{
+						name: '订单',
+						type: 'bar',
+						label: {
+							normal: {
+								show: true,
+								position: 'top',
+								color: '#FF770F',
+								formatter: '¥{c}',
+							},
+						},
+						data: [285, 200, 285, 300, 285, 285, 320],
+						barWidth: 15,
+						itemStyle: {
+							// 颜色
+							color: '#FF770F',
+							// 给bar设置倒角
+							barBorderRadius: [0, 0, 0, 0]
+						}
+					}]
+				}
+
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+
+		},
+		methods: {
+			jumpUrl(url) {
+				if (req.isLogins(true)) {
+					uni.navigateTo({
+						url: url
+					})
+				}
+			},
+			
+			init() {
+				if (this.$refs.chart2) {
+					this.$refs.chart2.init(echarts, async chart => {
+						// let echartData = await this.getEchartData()
+						this.option2.xAxis[0].data = ['04-04', '04-05', '04-06', '04-07', '04-08', '04-09',
+							'04-10'
+						]
+						this.option2.yAxis[0].axisLabel.fontSize = 13 * this.rpxTopxScale
+						this.option2.xAxis[0].axisLabel.fontSize = 13 * this.rpxTopxScale
+						this.option2.series[0].data = [300, 270, 340, 344, 300, 320, 310]
+						this.option2.series[0].label.normal.fontSize = 13 * this.rpxTopxScale
+						chart.setOption(this.option2);
+					});
+				}
+				if (this.$refs.chart3) {
+					this.$refs.chart3.init(echarts, async chart => {
+						// let echartData = await this.getEchartData()
+						this.option3.xAxis[0].data = ['04-04', '04-05', '04-06', '04-07', '04-08', '04-09',
+							'04-10'
+						]
+						this.option3.yAxis[0].axisLabel.fontSize = 13 * this.rpxTopxScale
+						this.option3.xAxis[0].axisLabel.fontSize = 13 * this.rpxTopxScale
+						this.option3.series[0].data = [300, 270, 340, 344, 300, 320, 310]
+						this.option3.series[0].label.normal.fontSize = 13 * this.rpxTopxScale
+						chart.setOption(this.option3);
+					});
+				}
+			}
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			this.pxToRpxScale = pxToRpxScale
+			this.rpxTopxScale = systemInfo.windowWidth / 750
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./operationDataPersonal.css";
+</style>

+ 110 - 0
pages/order/order.css

@@ -0,0 +1,110 @@
+.tab-box{
+	background-color: #fff;
+	padding: 30rpx;
+	position: fixed;
+	left: 0;
+	right: 0;
+	top: 0;
+	z-index: 100;
+}
+.tab-item{
+	text-align: center;
+	font-size: 28rpx;
+	line-height: 41rpx;
+}
+.tab-item image{
+	visibility: hidden;
+}
+.tab-item-active{
+	color: #EB5C20;
+}
+.tab-item-active image{
+	visibility: visible;
+}
+.tab-active-icon{
+	width: 32rpx;
+	height: 10rpx;
+	margin-top: 10rpx;
+	margin: auto;
+}
+.saoma{
+	width: 39rpx;
+	height: 36rpx;
+	margin-left: 60rpx;
+	margin-bottom: 10rpx;
+}
+.sousuo{
+	width: 36rpx;
+	height: 36rpx;
+	margin-left: 50rpx;
+	margin-bottom: 10rpx;
+}
+
+/* 订单 */
+.order-item{
+	background: #FFFFFF;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	padding: 25rpx 31rpx;
+	margin: 30rpx;
+}
+.order-item-header{
+	justify-content: space-between;
+	padding-bottom: 26rpx;
+	border-bottom: 1rpx solid #E6E6E6;
+}
+.order-time{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #A8A5A5;
+}
+.order-state{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #EB5C20;
+}
+.order-item-body{
+	padding: 10rpx 0 0;
+	
+}
+.order-item-content{
+	margin: 20rpx 0;
+	justify-content: space-between;
+}
+.order-item-content-label{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #A8A5A5;
+	margin-right: 20rpx;
+}
+.order-item-content-data{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #666464;
+	text-align: right;
+}
+.order-btns{
+	justify-content: flex-end;
+	margin-top: 20rpx;
+	padding-top: 20rpx;
+	border-top: 1rpx solid #E6E6E6;
+}
+.order-btn{
+	line-height: 56rpx;
+	background: #EB5C20;
+	border-radius: 73rpx 73rpx 73rpx 73rpx;
+	opacity: 1;
+	padding: 0 23rpx;
+	margin-left: 20rpx;
+	font-size: 28rpx;
+	font-weight: normal;
+	color: #FFFFFF;
+}

+ 136 - 0
pages/order/order.vue

@@ -0,0 +1,136 @@
+<template>
+	<view>
+		<!-- tab -->
+		<view class="tab-box ddflex">
+			<view class="fflex ddflex">
+				<view :class="'tab-item fflex '+(queryType==1?'tab-item-active':'')" @click="queryTypeChange(1)">
+					<view>待确认</view>
+					<image class="tab-active-icon" src="../../static/images/tab_cur.png"></image>
+				</view>
+				<view :class="'tab-item fflex '+(queryType==2?'tab-item-active':'')" @click="queryTypeChange(2)">
+					<view>已完成</view>
+					<image class="tab-active-icon" src="../../static/images/tab_cur.png"></image>
+				</view>
+				<view :class="'tab-item fflex '+(queryType==3?'tab-item-active':'')" @click="queryTypeChange(3)">
+					<view>全部</view>
+					<image class="tab-active-icon" src="../../static/images/tab_cur.png"></image>
+				</view>
+			</view>
+			<view class="ddflex">
+				<image class="saoma" src="../../static/pages/images/saoma.png"></image>
+				<image class="sousuo" src="../../static/pages/images/search.png"></image>
+			</view>
+		</view>
+		<view style="height: 110rpx;"></view>
+		
+		<!-- 订单 -->
+		<view>
+			<view class="order-item" v-for="item,index in 10" @click="jumpUrl('/pages/orderDetail/orderDetail?id='+item)">
+				<view class="ddflex order-item-header">
+					<view class="order-time">2023-03-29 12:05:58</view>
+					<block>
+						<view v-if="index!=1" class="order-state">线下-待确认</view>
+						<view v-else class="order-state" style="color: #0FCB27;">微信-支付成功</view>
+					</block>
+				</view>
+				<view class="order-item-body">
+					<view class="order-item-content ddflex">
+						<view class="order-item-content-label">订单编号</view>
+						<view class="order-item-content-data fflex tover">159582346324325171424</view>
+					</view>
+					<view class="order-item-content ddflex">
+						<view class="order-item-content-label">门店名称</view>
+						<view class="order-item-content-data fflex tover">白云科技</view>
+					</view>
+					<view class="order-item-content ddflex">
+						<view class="order-item-content-label">租借机柜</view>
+						<view class="order-item-content-data fflex tover">CHZD04TTCC200329109</view>
+					</view>
+					<view class="order-item-content ddflex">
+						<view class="order-item-content-label">电池ID</view>
+						<view class="order-item-content-data fflex tover">613880983244</view>
+					</view>
+					<view class="order-item-content ddflex">
+						<view class="order-item-content-label">电池型号</view>
+						<view class="order-item-content-data fflex tover">60V 30Ah</view>
+					</view>	
+					<view class="order-item-content ddflex">
+						<view class="order-item-content-label">租赁用户</view>
+						<view class="order-item-content-data fflex tover">文涛 15200809658</view>
+					</view>
+					<view class="order-item-content ddflex">
+						<view class="order-item-content-label">租借时长</view>
+						<view class="order-item-content-data fflex tover">8小时</view>
+					</view>
+					<view class="order-item-content ddflex">
+						<view class="order-item-content-label">应付金额</view>
+						<view class="order-item-content-data fflex tover" style="color: #EB5C20;">3元</view>
+					</view>
+				</view>
+				<view v-if="index!=1" class="order-btns ddflex">
+					<view class="order-btn" @click.stop="">确认支付</view>
+				</view>
+			</view>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+
+	export default {
+		components: {},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop: 0,
+
+				queryType: 1,
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+
+		},
+		methods: {
+			jumpUrl(url) {
+				if (req.isLogins(true)) {
+					uni.navigateTo({
+						url: url
+					})
+				}
+			},
+			queryTypeChange(val) {
+				if (this.queryType == val) return false
+				this.queryType = val
+			},
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./order.css";
+</style>

+ 66 - 0
pages/orderDetail/orderDetail.css

@@ -0,0 +1,66 @@
+page{
+	background-color: #fff;
+}
+.money-box{
+	justify-content: space-between;
+	padding: 30rpx 60rpx 0;
+}
+.state{
+	line-height: 54rpx;
+	font-size: 36rpx;
+	font-family: Source Han Sans CN-Bold, Source Han Sans CN;
+	font-weight: bold;
+	color: #242323;
+}
+.act-color{
+	color: #EB5C20;
+}
+.symbol{
+	font-size: 38rpx;
+}
+.money{
+	line-height: 100rpx;
+	font-size: 100rpx;
+	font-family: Bahnschrift-Bold SemiCondensed, Bahnschrift;
+	font-weight: normal;
+	color: #EB5C20;
+}
+
+.info-box{
+	background: #FFFFFF;
+	box-shadow: 0rpx 8rpx 40rpx 1rpx rgba(51,51,51,0.06);
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	padding: 17rpx 30rpx;
+	margin: 30rpx;
+}
+.info-box-title{
+	line-height: 47rpx;
+	font-size: 32rpx;
+	font-family: Source Han Sans CN-Bold, Source Han Sans CN;
+	font-weight: bold;
+	color: #242323;
+}
+.info-item{
+	margin: 20rpx 0;
+	justify-content: space-between;
+}
+.info-item-label{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #A8A5A5;
+	margin-right: 100rpx;
+}
+.info-item-data{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #242323;
+	text-align: right;
+}
+.mag-b50{
+	margin-bottom: 50rpx;
+}

+ 160 - 0
pages/orderDetail/orderDetail.vue

@@ -0,0 +1,160 @@
+<template>
+	<view style="padding-bottom: 50rpx;">
+		<view class="money-box ddflex">
+			<view class="state">
+				<view>已归还</view>
+				<view class="act-color">已支付</view>
+			</view>
+			<view class="money act-color ddflex">
+				<text class="symbol">¥</text>
+				<text>20</text>
+			</view>
+		</view>
+		
+		<view class="info-box">
+			<view class="info-item ddflex">
+				<view class="info-item-label">使用时长</view>
+				<view class="info-item-data fflex tover">一次</view>
+			</view>
+			<view class="info-item ddflex">
+				<view class="info-item-label">计费方式</view>
+				<view class="info-item-data fflex tover">按次计费</view>
+			</view>
+			<view class="info-item ddflex">
+				<view class="info-item-label">使用费用</view>
+				<view class="info-item-data fflex tover">¥15</view>
+			</view>
+			<view class="info-item ddflex">
+				<view class="info-item-label">超时</view>
+				<view class="info-item-data fflex tover">2小时</view>
+			</view>
+			<view class="info-item ddflex">
+				<view class="info-item-label">超时费用</view>
+				<view class="info-item-data fflex tover">¥5</view>
+			</view>	
+			<view class="info-item ddflex">
+				<view class="info-item-label">订单总额</view>
+				<view class="info-item-data fflex tover act-color">¥20</view>
+			</view>
+			<view class="info-item ddflex">
+				<view class="info-item-label">支付方式</view>
+				<view class="info-item-data fflex tover">钱包支付</view>
+			</view>
+			<view class="info-item dflex">
+				<view class="info-item-label">收费标准</view>
+				<view class="info-item-data fflex">4元/小时,免费试用5分钟,不足60分钟按60分钟计费</view>
+			</view>
+		</view>
+		
+		<view class="info-box">
+			<view class="info-box-title">租借信息</view>
+			<view class="info-item ddflex">
+				<view class="info-item-label">租赁合同</view>
+				<view class="ddflex">
+					<view class="info-item-data fflex tover">2346324325171424</view>
+					<view style="color: #2A82E4;margin-left: 10rpx;text-decoration: underline;">查看</view>
+				</view>
+			</view>
+			<view class="info-item ddflex">
+				<view class="info-item-label">租借方式</view>
+				<view class="info-item-data fflex tover">微信支付分租借</view>
+			</view>
+			<view class="info-item ddflex">
+				<view class="info-item-label">租借时间</view>
+				<view class="info-item-data fflex tover">2022-11-25 00:55</view>
+			</view>
+			<view class="info-item ddflex mag-b50">
+				<view class="info-item-label">归还时间</view>
+				<view class="info-item-data fflex tover">2022-11-25 00:58</view>
+			</view>
+			<view class="info-item ddflex">
+				<view class="info-item-label">电池ID</view>
+				<view class="info-item-data fflex tover">XCZX000100707</view>
+			</view>	
+			<view class="info-item ddflex">
+				<view class="info-item-label">电池型号</view>
+				<view class="info-item-data fflex tover act-color">60V 30Ah</view>
+			</view>
+			<view class="info-item ddflex">
+				<view class="info-item-label">租借机柜</view>
+				<view class="info-item-data fflex tover">ZXCCD12210250093</view>
+			</view>
+			<view class="info-item ddflex">
+				<view class="info-item-label">租借门店</view>
+				<view class="info-item-data fflex tover">白云科技</view>
+			</view>
+			<view class="info-item dflex mag-b50">
+				<view class="info-item-label">租借地点</view>
+				<view class="info-item-data fflex">广东省惠州市惠城区下埔路23号广东省惠州市惠城区下埔路23号</view>
+			</view>
+			<view class="info-item ddflex">
+				<view class="info-item-label">归还门店</view>
+				<view class="info-item-data fflex tover">白云科技</view>
+			</view>
+			<view class="info-item dflex">
+				<view class="info-item-label">归还地点</view>
+				<view class="info-item-data fflex">广东省惠州市惠城区下埔路23号广东省惠州市惠城区下埔路23号</view>
+			</view>
+			<view class="info-item ddflex mag-b50">
+				<view class="info-item-label">归还机柜</view>
+				<view class="info-item-data fflex tover">ZXCCD12210250093</view>
+			</view>
+			<view class="info-item ddflex">
+				<view class="info-item-label">用户手机号</view>
+				<view class="info-item-data fflex tover">15200809658</view>
+			</view>
+			<view class="info-item ddflex">
+				<view class="info-item-label">订单编号</view>
+				<view class="info-item-data fflex tover">159582346324325171424</view>
+			</view>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+
+	export default {
+		components: {},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop:0,
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+			
+		},
+		methods: {
+			
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./orderDetail.css";
+</style>

+ 59 - 5
pages/user/user.css

@@ -1,8 +1,8 @@
 /* pages/user/user.wxss */
 page {background: #F0F0F0;}
-.mine {/* height: 388rpx; */position: relative;background: var(--mina) !important;}
+.mine {/* height: 388rpx; */position: relative;background: linear-gradient(180deg, #EB692F 0%, #EB5C20 100%) !important;}
 .wdbg {display: block;width: 100%;height: 100%;position: absolute;top: 0;left: 0;z-index: 1;}
-.minec {position: relative;z-index: 2;display: flex;display: -webkit-flex;align-items: center;padding: 20rpx 0 0 30rpx;}
+.minec {position: relative;z-index: 2;display: flex;display: -webkit-flex;align-items: center;padding: 20rpx 0 120rpx 30rpx;}
 .user {display: block;width: 120rpx;height: 120rpx;border: 4rpx solid #fff;border-radius: 50%;margin-right: 30rpx;background: #fff;}
 .mines {flex: 1;-webkit-flex: 1;margin-right: 20rpx;}
 .mines view {font-size: 36rpx;color: #fff;}
@@ -22,8 +22,8 @@ page {background: #F0F0F0;}
 .list1 .li image {display: block;width: 62rpx;height: 54rpx;margin: 0 auto 20rpx;}
 .new {display: block;width: 28rpx;height: 28rpx;background: #ED462F;border-radius: 50%;font-size: 20rpx;color: #fff;text-align: center;line-height: 28rpx;position: absolute;top: 29rpx;right: 30%;}
 .list2 {flex-wrap: wrap;padding-bottom: 25rpx;}
-.list2 .li {width: 25% !important;text-align: center;font-size: 26rpx !important;color: #666;padding: 30rpx 0 !important;position: relative;}
-.list2 .li image {width: 74rpx;height: 74rpx;margin: 0 auto 8rpx;}
+.list2 .li {width: 25% !important;text-align: center;font-size: 24rpx !important;color: #666;padding: 20rpx 0 !important;position: relative;line-height: 36rpx;}
+.list2 .li image {width: 54rpx;height: 54rpx;margin: 0 auto 13rpx;}
 .list2 .li button{font-size: 26rpx;color: #666;}
 .tuig {padding-bottom: 25rpx;}
 .fenxiao {width: 630rpx;height: 107rpx;margin: 0 auto;}
@@ -88,4 +88,58 @@ page {background: #F0F0F0;}
 
 .news{position: relative;}
 .news image{width: 40rpx;height: 40rpx;}
-.list2 .li .new{top: 26rpx;right: 20%;border: 1rpx solid #fff;}
+.list2 .li .new{top: 26rpx;right: 20%;border: 1rpx solid #fff;}
+
+
+/* 异常 */
+.yichang-box{
+	margin: -70rpx 30rpx 30rpx;
+	z-index: 10;
+	position: relative;
+}
+.yichang-item{
+	background: #FFFFFF;
+	box-shadow: 0rpx 8rpx 40rpx 1rpx rgba(51,51,51,0.06);
+	border-radius: 16rpx 16rpx 16rpx 16rpx;
+	opacity: 1;
+	border: 1rpx solid rgba(0,0,0,0);
+	padding: 32rpx;
+	position: relative;
+}
+.yichang-item image{
+	position: absolute;
+	width: 120rpx;height: 120rpx;
+	bottom: 0;
+	right: 0;
+}
+.yichang-title{
+	line-height: 45rpx;
+	font-size: 30rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #242323;
+}
+.yichang-data{
+	line-height: 71rpx;
+	font-size:48rpx;
+	font-family: SourceHanSansCN-Regular-, SourceHanSansCN-Regular;
+	font-weight: bold;
+	color: #242323;
+}
+.symbol{
+	font-size: 24rpx;
+	font-weight: normal;
+}
+.yichang-btn{
+	width: 118rpx;
+	line-height: 47rpx;
+	border-radius: 24rpx 24rpx 24rpx 24rpx;
+	opacity: 1;
+	border: 1px solid #EB5C20;
+	font-size: 22rpx;
+	font-family: SourceHanSansCN-Regular-, SourceHanSansCN-Regular;
+	font-weight: normal;
+	color: #EB5C20;
+	text-align: center;
+}
+

+ 33 - 280
pages/user/user.vue

@@ -1,7 +1,7 @@
 <template>
 	<view>
 		<view :class="'mine' + (skinNotColor ? ' not-color' : '')">
-			<image :src="'/static/pages/images/' + iconSrc + (skinNotColor ? 'wdbg1.png' : 'wdbg.png')" class="wdbg"
+			<image src="/static/images/wdbg.png" class="wdbg"
 				@click="jumpUrl('mine/userinfo/userinfo')"></image>
 			<view class="minec">
 				<image :src="userInfos.avatar ? userInfos.avatar : '/static/pages/images/userimg.png'" mode="aspectFit"
@@ -16,309 +16,62 @@
 				<view class="flex" v-else>
 					<text class="login-btn" @click="jumpUrl('')">点击登录</text>
 				</view>
-				<!-- <navigator url="/mine/userinfo/userinfo" hover-class="none" class="set"> -->
-				<!-- <view class="set">
-					<image src="/static/pages/images/set.png" @click="signFun"></image>
-				</view> -->
-				<view class="rule dflex" @click="jumpUrl('integralshop/task/index')" v-if="isShowSign"><!-- isSign==0||sign==1?jumpUrl(''):signFun() -->
-					<image src="/static/pages/images/qdico.png"></image>
-					{{!isLogin ? '签到' : isSign==0||sign==1?'已签到':'签到'}}
-				</view>
-				<!-- </navigator> -->
-			</view>
-			<view class="datas dflex">
-				<navigator url="" hover-class="none" class="li" v-if="is_open_wallet.isOpenWallet==1"
-					@click="jumpUrl('wallet/index/index')"><text>{{userMoney?userMoney:'0.00'}}</text>钱包
-				</navigator>
-				<navigator url="" hover-class="none" class="li"
-					:style="is_open_wallet.isOpenWallet!=1&&Open_Points_Mall!=1?'width:50%':''"
-					@click="jumpUrl('mine/coupons/coupons')">
-					<text>{{userInfos.coupon?userInfos.coupon:'0'}}</text>优惠券
-				</navigator>
-				<navigator url="" hover-class="none" class="li" @click="jumpUrl('integralshop/index/index')">
-					<text>{{userInfos.integral?userInfos.integral:'0'}}</text>积分
-				</navigator>
-				<navigator url="" hover-class="none" class="li"
-					:style="is_open_wallet.isOpenWallet!=1&&Open_Points_Mall!=1?'width:50%':''"
-					@click="jumpUrl('mine/collect/collect')">
-					<text>{{userInfos.collect?userInfos.collect:'0'}}</text>收藏
-				</navigator>
-				<!-- <navigator url="/mine/footprint/footprint" hover-class="none" class="li"><text>{{footprint?footprint:'0'}}</text>足迹</navigator> -->
-			</view>
-			<block v-if="isLogin">
-				<view class="upgrade ddflex" v-if="config.is_show_member_upgrade == 1 && userinfovip.levelGrade < vipList.length"><!-- config.ordinary_member_icon -->
-					<view :class="'li' + (!userinfovip.levelGrade ? ' active':'')">
-						<view>普通会员</view>
-					</view>
-					<view class="li" :class="{active:userinfovip.level == item.id,cur:item.isShowInfo}" v-for="(item,index) in vipList" :key="index"
-						@click="showInfo(index)">
-						<view class="vip-info" v-if="item.isShowInfo&&item.upgradeTerm.terms.length>0">
-							<text
-								v-if="item.upgradeTerm.terms[0].bind == 'order_money'">累计消费金额达到{{item.upgradeTerm.terms[0].value}}元即可升级</text>
-							<text
-								v-if="item.upgradeTerm.terms[0].bind == 'order_num'">累计购买订单达到{{item.upgradeTerm.terms[0].value}}笔即可升级</text>
-							<text
-								v-if="item.upgradeTerm.terms[0].bind == 'share_new'">分享拉新人数累计达到{{item.upgradeTerm.terms[0].value}}人即可升级</text>
-						</view>
-						<view class="vip-tit">{{item.title}}</view>
-					</view>
-				</view>
-				<view class="vip" v-if="vipList&&vipList.length>=1&&rongkang!='ZQ1VK5oc17I387E'"
-					@click="jumpUrl('mine/vip/vip')">
-					<image :src="picUrlss+'vip_bg.png'" class="vipbg"></image>
-					<view class="vipc dflex">
-						<view class="dflex flex" v-if="userinfovip.levelGrade>0&& !userinfovip.end">
-							<!-- <image :src="userinfovip.icon"></image> -->
-							<image src="/static/pages/images/hg_ico1.png" class="vipimg"></image>
-							<view class="huiyuan">{{userinfovip.levelName}}</view>
-							<!-- <text class="level" >{{userinfovip.levelGrade}}</text> -->
-						</view>
-						<view class="dflex flex" v-else>
-							<image src="/static/pages/images/hg_ico1.png" class="vipimg"></image>
-							<text class="huiyuan">会员立享专属权益</text>
-						</view>
-						<view class="cheng" v-if="userinfovip.levelGrade>0&& !userinfovip.end">
-							{{userinfovip.expireTime}} 到期
-						</view>
-						<view class="ling" v-else>立即开通</view>
-					</view>
-				</view>
-			</block>
-			<view class="vip" v-else @click="jumpUrl('mine/vip/vip')">
-				<image :src="picUrlss+'vip_bg.png'" class="vipbg"></image>
-				<view class="vipc dflex">
-					<view class="dflex flex">
-						<image src="/static/pages/images/hg_ico1.png" class="vipimg"></image>
-						<text class="huiyuan">会员立享专属权益</text>
-					</view>
-					<view class="ling">立即开通</view>
-				</view>
+				
 			</view>
 		</view>
 
-		<view class="con">
-			<view class="order">
-				<navigator url="" hover-class="none" class="tits dflex" @click="jumpUrl('mine/order/order')">
-					<view class="flex">我的订单</view>查看全部<image src="/static/pages/images/rico.png" class="rico"></image>
-				</navigator>
-				<view class="list1">
-					<navigator url="" hover-class="none" class="li" @click="jumpUrl('mine/order/order')">
-						<image :src="picUrlss+'ddico0.png'"></image>
-						<view>全部订单</view>
-					</navigator>
-					<navigator url="" hover-class="none" class="li" @click="jumpUrl('mine/order/order?state=1')">
-						<image :src="picUrlss+'ddico1.png'"></image>
-						<text class="new" v-if="userInfos.dfk > 0">{{userInfos.dfk}}</text>
-						<view>待付款</view>
-					</navigator>
-					<navigator url="" hover-class="none" class="li" @click="jumpUrl('mine/order/order?state=3')">
-						<image :src="picUrlss+'ddico2.png'"></image>
-						<text class="new" v-if="userInfos.yqr > 0">{{userInfos.yqr}}</text>
-						<view>待发货</view>
-					</navigator>
-					<navigator url="" hover-class="none" class="li" @click="jumpUrl('mine/order/order?state=5')">
-						<image :src="picUrlss+'ddico3.png'"></image>
-						<text class="new" v-if="userInfos.yfh > 0">{{userInfos.yfh}}</text>
-						<view>待收货</view>
-					</navigator>
-					<navigator url="" hover-class="none" class="li" @click="jumpUrl('mine/order/order?state=7')">
-						<image :src="picUrlss+'ddico4.png'"></image>
-						<text class="new" v-if="userInfos.ywc > 0">{{userInfos.ywc}}</text>
-						<view>已完成</view>
-					</navigator>
-					<!-- <navigator url="/mine/order/order?state=21" hover-class="none" class="li">
-				<image src="/pages/images/ddico0_1.png"></image>
-				<text class="new" wx:if="{{ywc > 0}}">{{ywc}}</text>
-				<view>退款售后</view>
-			</navigator> -->
-				</view>
+		<view class="yichang-box ddflex">
+			<view class="yichang-item fflex" @click="jumpUrl('warning/abnormalAlarm/abnormalAlarm')">
+				<view class="yichang-title">异常告警</view>
+				<view class="yichang-data">10<text class="symbol">条</text></view>
+				<view class="yichang-btn">去查看</view>
+				<image src="../../static/images/ycjg.png"></image>
 			</view>
-		</view>
-		<!-- 店铺 -->
-		<view class="order shopname"
-			v-if="(userInfos.listMerchant&&userInfos.listMerchant!=null&&userInfos.listMerchant.length>0)||(is_open_shop == 1&&userInfos.listShopBase&&userInfos.listShopBase!=null&&userInfos.listShopBase.length>0)||userInfos.merchantId!=null">
-
-			<image src="/static/pages/images/md_ic_bg.png" class="md_ic_bg"></image>
-			<navigator url="" hover-class="none" class="tits dflex" @click="jumpMerchantManage()">
-				<view class="dflex flex">
-					<image src="/static/pages/images/position_b_icon.png" class="bico"></image>
-					<block v-if="!userInfos.listShopBase||!userInfos.listMerchant">
-						门店管理
-					</block>
-					<block v-else>
-						<block v-if="userInfos.listMerchant.length>0&&userInfos.listShopBase.length<1">
-							{{userInfos.listMerchant[0].title?userInfos.listMerchant[0].title:'门店管理'}}</block>
-						<block v-else-if="userInfos.listShopBase.length>0">
-							{{userInfos.listShopBase[0].title?userInfos.listShopBase[0].title:'门店管理'}}</block>
-						<!-- {{!listShopBase?listMerchant[0].title:listShopBase.length==0?listMerchant[0].title:listShopBase[0].title}} -->
-					</block>
-
-				</view>
-				查看更多<image src="/static/pages/images/rico.png" class="rico"></image>
-			</navigator>
-			<view class="datasw dflex">
-				<navigator url="" hover-class="none" class="li" @click="jumpMerchantManage()">
-					全部订单<text>{{statistics.total}}</text>
-				</navigator>
-				<navigator url="" hover-class="none" class="li" @click="jumpMerchantManage()">
-					待发货<text>{{statistics.t3}}</text>
-				</navigator>
-				<navigator url="" hover-class="none" class="li" @click="jumpMerchantManage()">
-					待提货<text>{{statistics.t4}}</text>
-				</navigator>
+			<view class="yichang-item fflex" style="margin-left: 26rpx;" @click="jumpUrl('warning/orderAlarm/orderAlarm')">
+				<view class="yichang-title">异常处理</view>
+				<view class="yichang-data">10<text class="symbol">个</text></view>
+				<view class="yichang-btn">去处理</view>
+				<image src="../../static/images/yccl.png"></image>
 			</view>
 		</view>
-		<view class="order" v-if="distr.distributionIsOpen==1&&userInfos.isDistriUser == 2">
-			<navigator url hover-class="none" class="tits dflex">
-				<view class="flex">全民推广</view>
-				<!-- 查看更多<image src="/pages/images/rico.png" class="rico"></image> -->
-			</navigator>
-			<view class="list3 dflex">
-				<navigator url="" hover-class="none" class="li" @click="jumpUrl('promote/team/team')">
-					<image :src="picUrlss+'fxico1.png'"></image>
-					<view>推广中心</view>
-				</navigator>
-				<navigator url="" hover-class="none" class="li"
-					@click="jumpUrl('promote/teamList/teamList?IS_secondary_members=' + IS_secondary_members)">
-					<image :src="picUrlss+'fxico2.png'"></image>
-					<view>我的客户</view>
-				</navigator>
-				<navigator url="" hover-class="none" class="li" @click="jumpUrl('promote/sales/sales')">
-					<image :src="picUrlss+'fxico3.png'"></image>
-					<view>业绩订单</view>
-				</navigator>
-				<navigator url="" hover-class="none" class="li" @click="jumpUrl('promote/invite/invite')">
-					<image :src="picUrlss+'fxico4.png'"></image>
-					<view>我要推广</view>
-				</navigator>
-			</view>
-		</view>
-		<block v-if="isLogin">
-			<block v-if="distr.distributionIsOpen==1&&config.is_hide_distribution_entry != 1">
-				<navigator url="" hover-class="none" class="order tuig" v-if="userInfos.isDistriUser==1"
-					@click="jumpUrl('promote/status/status')">
-					<view class="tits dflex">
-						<view class="flex">全民推广</view>
-					</view>
-					<image :src="picUrlss+'fenxiao.png'" class="fenxiao"></image>
-				</navigator>
-				<navigator url="" hover-class="none" class="order tuig"
-					v-if="userInfos.isDistriUser!=2 && userInfos.isDistriUser!=1" @click="jumpUrl('promote/info/info')">
-					<view class="tits dflex">
-						<view class="flex">全民推广</view>
-					</view>
-					<image :src="picUrlss+'fenxiao.png'" class="fenxiao"></image>
-				</navigator>
-			</block>
-		</block>
-		<navigator url="" hover-class="none" class="order tuig" @click="jumpUrl('promote/apply/apply')"
-			v-if="!isLogin&&config.is_hide_distribution_entry != 1">
-			<view class="tits dflex">
-				<view class="flex">全民推广</view>
-			</view>
-			<image :src="picUrlss+'fenxiao.png'" class="fenxiao"></image>
-		</navigator>
+		
 		<view class="order">
 			<view class="tits dflex">
 				<view class="flex">我的服务</view>
 			</view>
 			<view class="list2 dflex">
-				<!-- <navigator url="/mine/order/order?orderType=5" hover-class="none" class="li">
-      <image src="/pages/images/ddico5_1.png"></image>
-      <text>及时达订单</text>
-    </navigator> -->
-				<!-- <navigator url="/pages/supplier/supplier" hover-class="none" class="li">
-					<image :src="picUrlss+'supplier.png'"></image>
-					<text>我是供应商</text>
-				</navigator> -->
-				<!-- <navigator url="" hover-class="none" class="li" @click="jumpUrl('mine/order/order?orderType=2')">
-					<image :src="picUrlss+'ddico5_2.png'"></image>
-					<text>社区团购</text>
-				</navigator> -->
-				<navigator url="" hover-class="none" class="li" @click="jumpUrl('mine/order/order?orderType=4')">
-					<image :src="picUrlss+'ddico4_1.png'"></image>
-					<text>拼团订单</text>
-				</navigator>
-				<navigator url="" hover-class="none" class="li" @click="jumpUrl('mine/order/order?orderType=7')">
-					<image :src="picUrlss+'ddico7_1.png'"></image>
-					<text>砍价订单</text>
+				<navigator url="" hover-class="none" class="li" @click="jumpUrl('mine/order/order')">
+					<image src="../../static/pages/images/user_service1.png"></image>
+					<text>我的订单</text>
 				</navigator>
-				<navigator url="" hover-class="none" class="li" v-if="Open_Points_Mall==1"
-					@click="jumpUrl('integralshop/index/index')">
-					<image :src="picUrlss+'ddico8_1.png'"></image>
-					<text>积分商城</text>
+				<navigator url="" hover-class="none" class="li" @click="jumpUrl('pages/myMerchant/myMerchant')">
+					<image src="../../static/pages/images/user_service2.png"></image>
+					<text>我的商家</text>
 				</navigator>
-				<!-- <navigator url="" hover-class="none" class="li" @click="jumpUrl('mine/remind/remind')">
-					<image :src="picUrlss+'ddico7.png'"></image>
-					<text>开团提醒</text>
-				</navigator> -->
-				<navigator url="" hover-class="none" class="li" @click="jumpUrl('product/coupon/coupon')">
-					<image :src="picUrlss+'ddico5_3.png'"></image>
-					<text>领券中心</text>
-				</navigator>
-				<navigator url="" hover-class="none" class="li" @click="jumpUrl('topics/release/release')">
-					<image :src="picUrlss+'ddico7.png'"></image>
-					<text>我的发布</text>
-				</navigator>
-				<navigator url="" hover-class="none" class="li" @click="jumpUrl('office/follow/index')">
-					<image :src="picUrlss+'ddico5_2.png'"></image>
-					<text>我的关注</text>
-				</navigator>
-				<navigator url="" hover-class="none" class="li" @click="jumpUrl('mine/news/news')">
-					<image :src="picUrlss+'ddico5_1.png'"></image>
-					<text>我的消息</text>
-					<view class="new" v-if="newsCount > 0">{{newsCount}}</view>
-				</navigator>
-				<!-- <navigator url="/pages/nearby/nearby" hover-class="none" class="li">
-      <image src="/pages/images/ddico5.png"></image>
-      <text>附近门店</text>
-    </navigator> -->
-				<navigator url="" hover-class="none" class="li" @click="jumpUrl('mine/address/address')">
-					<image :src="picUrlss+'ddico6.png'"></image>
-					<text>收货地址</text>
+				<navigator url="" hover-class="none" class="li" @click="jumpUrl('integralshop/index/index')">
+					<image src="../../static/pages/images/user_service3.png"></image>
+					<text>我的门店</text>
 				</navigator>
-				<navigator url="" hover-class="none" class="li" @click="jumpUrl('mine/invoice/invoice')"
-					v-if="config.is_open_invoice == 1">
-					<image :src="picUrlss+'ddico11_4.png'"></image>
-					<text>我的发票</text>
+				<navigator url="" hover-class="none" class="li" @click="jumpUrl('pages/operationData/operationData')">
+					<image src="../../static/pages/images/user_service4.png"></image>
+					<text>运营数据</text>
 				</navigator>
-				<view class="li" v-if="!isLogin" @click="jumpUrl('')">
-					<image :src="picUrlss+'ddico11_1.png'"></image>
-					<text>绑定手机号</text>
-				</view>
-				<button class="li" v-if="!userInfos.mobile && isLogin" open-type="getPhoneNumber"
-					@getphonenumber="getphonenumber" hover-class="none">
-					<image :src="picUrlss+'ddico11_1.png'"></image>
-					<text>绑定手机号</text>
-				</button>
 				<view class="li">
-					<contact-button :img-url="picUrlss+'ddico9.png'" img-style='width: 74rpx;height: 74rpx;margin: 0 auto 12rpx;' button-text="联系客服" styles="line-height:initial;"></contact-button>
-				</view>
-				<!-- <button open-type="contact" class="li" hover-class="none">
-					<image :src="picUrlss+'ddico9.png'"></image>
-					<text>联系客服</text>
-				</button> -->
-				<view class="li" @tap="callPhone" v-if="phone">
-					<image :src="picUrlss+'ddico11_2.png'"></image>
-					<text>服务热线</text>
+					<contact-button img-url="../../static/pages/images/user_service5.png" img-style='width: 74rpx;height: 74rpx;margin: 0 auto 12rpx;' button-text="官方客服" styles="line-height:initial;"></contact-button>
 				</view>
-				<navigator url="/mine/help/help" hover-class="none" class="li">
-					<image :src="picUrlss+'ddico8.png'"></image>
-					<text>帮助中心</text>
-				</navigator>
 				<navigator url="/pages/about/about" hover-class="none" class="li">
-					<image :src="picUrlss+'ddico11_3.png'"></image>
+					<image src="../../static/pages/images/user_service6.png"></image>
 					<text>关于我们</text>
 				</navigator>
 
 				<navigator url="/mine/feedback/feedback" hover-class="none" class="li">
-					<image :src="picUrlss+'ddico10.png'"></image>
+					<image src="../../static/pages/images/user_service7.png"></image>
 					<text>建议反馈</text>
 				</navigator>
-				<!-- <navigator url="/pages/web/web" hover-class="none" class="li" wx:if="{{merchantId}}">
-			<image src="/pages/images/ddico11.png"></image>
-			<text>门店管理</text>
-		</navigator> -->
+				<navigator url="/mine/feedback/feedback" hover-class="none" class="li">
+					<image src="../../static/pages/images/user_service8.png"></image>
+					<text>退出登录</text>
+				</navigator>
 
 			</view>
 		</view>

BIN
static/images/wdbg.png


BIN
static/images/yccl.png


BIN
static/images/ycjg.png


BIN
static/pages/images/address-icon.png


BIN
static/pages/images/call.png


BIN
static/pages/images/cell.png


BIN
static/pages/images/daohang.png


BIN
static/pages/images/dow-ssicon.png


BIN
static/pages/images/dwico1.png


BIN
static/pages/images/refresh.png


BIN
static/pages/images/saoma.png


BIN
static/pages/images/search.png


BIN
static/pages/images/ssico.png


BIN
static/pages/images/ssicon.png


BIN
static/pages/images/tab-aicon.png


BIN
static/pages/images/user_service1.png


BIN
static/pages/images/user_service2.png


BIN
static/pages/images/user_service3.png


BIN
static/pages/images/user_service4.png


BIN
static/pages/images/user_service5.png


BIN
static/pages/images/user_service6.png


BIN
static/pages/images/user_service7.png


BIN
static/pages/images/user_service8.png


+ 5 - 5
utils/request.js

@@ -30,7 +30,7 @@ const publics = {
 	'is_customer_pick_up': false,
 	'mapLBSKEY': 'YQZBZ-6LMC4-IGQUO-XE64O-4UJL6-YNB77',
 	'iconSrc': 'red/',
-	'titleTopBgColor': '#cd0b01',
+	'titleTopBgColor': '#EB692F',
 }
 /*
  * 获取token
@@ -1033,12 +1033,12 @@ var tab = [{
 		show: true
 	},
 	{
-		text: "分类",
+		text: "机柜",
 		iconPath: "/static/pages/images/sort.png",
 		selectedIconPath: '/static/pages/images/' + publics.iconSrc + 'sort_h.png',
-		pagePath: 'pages/sort/sort',
-		click: 'goSort',
-		channel: 'sort',
+		pagePath: 'pages/machine/machine',
+		click: 'goMachine',
+		channel: 'machine',
 		index: 2,
 		show: true
 	},

+ 54 - 0
warning/abnormalAlarm/abnormalAlarm.css

@@ -0,0 +1,54 @@
+page{
+	background-color: #fff;
+}
+.alarm-box{
+	background: #FFFFFF;
+	box-shadow: 0rpx 8rpx 40rpx 1rpx rgba(51,51,51,0.06);
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	padding: 40rpx;
+	margin: 30rpx;
+	position: relative;
+}
+.alarm-icon{
+	width: 96rpx;
+	height: 96rpx;
+	margin-right: 30rpx;
+	background: #EB5C20;
+	border-radius: 100%;
+}
+.alarm-icon image{
+	width: 54rpx;
+	height: 54rpx;
+	margin: auto auto;
+}
+.alarm-title{
+	line-height: 47rpx;
+	font-size: 32rpx;
+	font-family: Source Han Sans CN-Bold, Source Han Sans CN;
+	font-weight: bold;
+	color: #242323;
+}
+.alarm-note{
+	line-height: 36rpx;
+	font-size: 24rpx;
+	font-family: SourceHanSansCN-Regular-Regular, SourceHanSansCN-Regular;
+	font-weight: 400;
+	color: #A8A5A5;
+}
+.rico{
+	width: 22rpx;
+	height: 36rpx;
+	margin-left: 30rpx;
+}
+.dot{
+	width: 20rpx;
+	height: 20rpx;
+	background: #FF0000;
+	opacity: 1;
+	border: 3rpx solid #FFFFFF;
+	border-radius: 100%;
+	position: absolute;
+	top: 40rpx;
+	left: 110rpx;
+}

+ 89 - 0
warning/abnormalAlarm/abnormalAlarm.vue

@@ -0,0 +1,89 @@
+<template>
+	<view>
+		<view class="alarm-box ddflex" @click="jumpUrl('warning/userAlarm/userAlarm')">
+			<view class="alarm-icon ddflex" >
+				<image src="../static/images/yc1.png"></image>
+			</view>
+			<view class="fflex">
+				<view class="alarm-title">用户报障</view>
+				<view class="alarm-note">您有4条用户保障记录,请及时处理</view>
+			</view>
+			<image class="rico" src="../../static/pages/images/ssicon.png"></image>
+			<view class="dot"></view>
+		</view>
+		
+		<view class="alarm-box ddflex" @click="jumpUrl('warning/machineAlarm/machineAlarm')">
+			<view class="alarm-icon ddflex" >
+				<image src="../static/images/yc2.png"></image>
+			</view>
+			<view class="fflex">
+				<view class="alarm-title">机柜报障</view>
+				<view class="alarm-note">您有4条机柜保障提醒,请及时处理</view>
+			</view>
+			<image class="rico" src="../../static/pages/images/ssicon.png"></image>
+			<view class="dot"></view>
+		</view>
+		
+		<view class="alarm-box ddflex" @click="jumpUrl('warning/reconditionAlarm/reconditionAlarm')">
+			<view class="alarm-icon ddflex" >
+				<image src="../static/images/yc3.png"></image>
+			</view>
+			<view class="fflex">
+				<view class="alarm-title">检修提醒</view>
+				<view class="alarm-note">您有1条检修提醒,请及时处理</view>
+			</view>
+			<image class="rico" src="../../static/pages/images/ssicon.png"></image>
+			<view class="dot"></view>
+		</view>
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+
+	export default {
+		components: {},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop:0,
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+			
+		},
+		methods: {
+			jumpUrl(url) {
+				if (!req.isLogin()) return false;
+				app.globalData.navigateTo(url);
+			},
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./abnormalAlarm.css";
+</style>

+ 138 - 0
warning/machineAlarm/machineAlarm.css

@@ -0,0 +1,138 @@
+/* 订单 */
+.order-item{
+	background: #FFFFFF;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	padding: 25rpx 31rpx;
+	margin: 30rpx;
+}
+.order-item-header{
+	justify-content: space-between;
+	/* padding-bottom: 26rpx; */
+	/* border-bottom: 1rpx solid #E6E6E6; */
+}
+.order-time{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #666464;
+}
+.order-state{
+	width: 92rpx;
+	height: 36rpx;
+	line-height: 36rpx;
+	border-radius: 5rpx 5rpx 5rpx 5rpx;
+	opacity: 1;
+	border: 2rpx solid #EB5C20;
+	text-align: center;
+	color: #EB5C20;
+}
+.order-item-body{
+	/* padding: 10rpx 0 0; */
+	
+}
+.order-item-body2{
+	padding-top: 20rpx;
+	border-top:1rpx solid #E6E6E6;;
+}
+.order-item-body2 .order-item-content-label{
+	
+}
+.images-box{
+	/* justify-content: space-between; */
+}
+.images{
+	width: 193rpx;
+	height: 193rpx;
+	background: #E6E6E6;
+	border-radius: 0rpx 0rpx 0rpx 0rpx;
+	opacity: 1;
+	margin-right: calc((100% - (3 * 193rpx)) / 2);
+}
+.images:nth-child(3n){
+	margin-right: 0;
+}
+.order-item-content{
+	margin: 20rpx 0;
+	justify-content: space-between;
+}
+.order-item-content-label{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #666464;
+	/* margin-right: 20rpx; */
+}
+.order-item-content-data{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #666464;
+	text-align: left;
+}
+.order-btns{
+	justify-content: flex-end;
+	margin-top: 20rpx;
+	padding-top: 20rpx;
+	border-top: 1rpx solid #E6E6E6;
+}
+.order-btn{
+	line-height: 56rpx;
+	background: #EB5C20;
+	border-radius: 73rpx 73rpx 73rpx 73rpx;
+	opacity: 1;
+	padding: 0 23rpx;
+	margin-left: 20rpx;
+	font-size: 28rpx;
+	font-weight: normal;
+	color: #FFFFFF;
+}
+
+/* 弹窗 */
+.nodata-icon{
+	width: 96rpx;
+	height: 103rpx;
+	background: #E6E6E6;
+	opacity: 1;
+	margin: auto;
+}
+.nodata-note{
+	margin-top: 35rpx;
+	margin-bottom: 77rpx;
+	font-size: 28rpx;
+	color: #666464;
+	font-weight: 400;
+	text-align: center;
+	line-height: 41rpx;
+}
+.pop-btns{
+	justify-content: space-between;
+}
+.pop-btns .btn{
+	width: 301rpx;
+	height: 76rpx;
+	line-height: 76rpx;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	border: 2rpx solid #EB5C20;
+	color: #EB5C20;
+	font-weight: 500;
+	font-size: 28rpx;
+	text-align: center;
+}
+.pop-btns .btn2{
+	width: 301rpx;
+	height: 76rpx;
+	line-height: 76rpx;
+	background: #EB5C20;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	border: 2rpx solid #EB5C20;
+	color: #fff;
+	font-weight: 500;
+	font-size: 28rpx;
+	text-align: center;
+}

+ 115 - 0
warning/machineAlarm/machineAlarm.vue

@@ -0,0 +1,115 @@
+<template>
+	<view>
+		<view class="order-item" v-for="item,index in 10" @click="openPop(item)">
+			<view class="ddflex order-item-header">
+				<view class="order-time">类型:整柜巡检</view>
+				<block>
+					<view v-if="index!=1" class="order-state">待消除</view>
+					<view v-else class="order-state" style="color: #0FCB27;border: 2rpx solid #0FCB27;">已消除</view>
+				</block>
+			</view>
+			<view class="order-item-body">
+				<view class="order-item-content ddflex">
+					<view class="order-item-content-label">机柜编号:</view>
+					<view class="order-item-content-data fflex tover">CHZD04TTCC200329109</view>
+				</view>
+				<view class="order-item-content ddflex">
+					<view class="order-item-content-label">电池编号:</view>
+					<view class="order-item-content-data fflex tover">613880983244</view>
+				</view>
+				<view class="order-item-content ddflex">
+					<view class="order-item-content-label">描述:</view>
+					<view class="order-item-content-data fflex tover">市电故障</view>
+				</view>
+				<view class="order-item-content ddflex">
+					<view class="order-item-content-label">告警时间:</view>
+					<view class="order-item-content-data fflex tover">2022-12-31 17:16:37</view>
+				</view>
+			</view>
+		</view>
+		
+		<bottom-pop v-if="showPop" :showPop='showPop' :btnColor="'#11BB8B'" :showBtn='false' title="解除提醒"
+			@closePop="closePop()" @popSubmit="popSubmit()">
+			<view>
+				<view>
+					<image class="nodata-icon" src="../../static/pages/images/user_service1.png"></image>
+					<view class="nodata-note">上传检修记录,恢复正常</view>
+				</view>
+				<view class="pop-btns ddflex">
+					<view class="btn" @click="closePop">取消</view>
+					<view class="btn2" @click="jumpUrl('warning/reconditionAlarmUpload/reconditionAlarmUpload')">上传检修记录</view>
+				</view>
+			</view>
+		</bottom-pop>
+		
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+	import bottomPop from "../../components/bottom-pop/index";
+	export default {
+		components: {
+			bottomPop
+		},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop:0,
+				
+				showPop: false,
+				tempData: null,
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+			
+		},
+		methods: {
+			jumpUrl(url) {
+				if (!req.isLogin()) return false;
+				app.globalData.navigateTo(url);
+			},
+			// 弹窗弹出
+			openPop(item) {
+				this.tempData = JSON.parse(JSON.stringify(item))
+				this.showPop = true
+			},
+			// 弹窗关闭
+			closePop() {
+				this.showPop = false
+				this.tempData = null
+			},
+			// 弹窗确认
+			popSubmit() {
+				this.closePop()
+			},
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./machineAlarm.css";
+</style>

+ 120 - 0
warning/orderAlarm/orderAlarm.css

@@ -0,0 +1,120 @@
+.tab-box{
+	background-color: #fff;
+	padding: 30rpx;
+	position: fixed;
+	left: 0;
+	right: 0;
+	top: 0;
+	z-index: 100;
+}
+.tab-item{
+	text-align: center;
+	font-size: 28rpx;
+	line-height: 41rpx;
+}
+.tab-item image{
+	visibility: hidden;
+}
+.tab-item-active{
+	color: #EB5C20;
+}
+.tab-item-active image{
+	visibility: visible;
+}
+.tab-active-icon{
+	width: 32rpx;
+	height: 10rpx;
+	margin-top: 10rpx;
+	margin: auto;
+}
+.saoma{
+	width: 39rpx;
+	height: 36rpx;
+	margin-left: 60rpx;
+	margin-bottom: 10rpx;
+}
+.sousuo{
+	width: 36rpx;
+	height: 36rpx;
+	margin-left: 50rpx;
+	margin-bottom: 10rpx;
+}
+
+/* 订单 */
+.order-item{
+	background: #FFFFFF;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	padding: 25rpx 31rpx;
+	margin: 30rpx;
+}
+.order-item-header{
+	justify-content: space-between;
+	/* padding-bottom: 26rpx;
+	border-bottom: 1rpx solid #E6E6E6; */
+}
+.order-time{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #666464;
+}
+.order-state{
+	width: 92rpx;
+	height: 36rpx;
+	line-height: 36rpx;
+	border-radius: 5rpx 5rpx 5rpx 5rpx;
+	opacity: 1;
+	border: 2rpx solid #EB5C20;
+	text-align: center;
+	color: #EB5C20;
+}
+.order-item-body{
+	/* padding: 10rpx 0 0; */
+	
+}
+.order-item-content{
+	margin: 20rpx 0;
+	justify-content: space-between;
+}
+.order-item-content-label{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #666464;
+}
+.order-item-content-data{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #666464;
+	text-align: left;
+}
+.order-btns{
+	justify-content: space-between;
+	margin-top: 20rpx;
+	padding-top: 20rpx;
+	border-top: 1rpx solid #E6E6E6;
+}
+.order-btn{
+	line-height: 56rpx;
+	background: #EB5C20;
+	border-radius: 73rpx 73rpx 73rpx 73rpx;
+	opacity: 1;
+	padding: 0 23rpx;
+	margin-left: 20rpx;
+	font-size: 28rpx;
+	font-weight: normal;
+	color: #FFFFFF;
+}
+.order-btn-time{
+	width: 266rpx;
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #A8A5A5;
+}

+ 120 - 0
warning/orderAlarm/orderAlarm.vue

@@ -0,0 +1,120 @@
+<template>
+	<view>
+		<!-- tab -->
+		<view class="tab-box ddflex">
+			<view class="fflex ddflex">
+				<view :class="'tab-item fflex '+(queryType==1?'tab-item-active':'')" @click="queryTypeChange(1)">
+					<view>待确认</view>
+					<image class="tab-active-icon" src="../../static/images/tab_cur.png"></image>
+				</view>
+				<view :class="'tab-item fflex '+(queryType==2?'tab-item-active':'')" @click="queryTypeChange(2)">
+					<view>已完成</view>
+					<image class="tab-active-icon" src="../../static/images/tab_cur.png"></image>
+				</view>
+			</view>
+		</view>
+		<view style="height: 110rpx;"></view>
+		
+		<!-- 订单 -->
+		<view>
+			<view class="order-item" v-for="item,index in 10" @click="jumpUrl('/pages/orderDetail/orderDetail?id='+item)">
+				<view class="ddflex order-item-header">
+					<view class="order-time">类型:自动扣费失败</view>
+					<block>
+						<view v-if="index!=1" class="order-state">待处理</view>
+						<view v-else class="order-state" style="color: #0FCB27;border: 2rpx solid #0FCB27;">已处理</view>
+					</block>
+				</view>
+				<view class="order-item-body">
+					<view class="order-item-content ddflex">
+						<view class="order-item-content-label">订单编号:</view>
+						<view class="order-item-content-data fflex tover">159582346324325171424</view>
+					</view>
+					<view class="order-item-content ddflex">
+						<view class="order-item-content-label">订单状态:</view>
+						<view class="order-item-content-data fflex tover">未结束</view>
+					</view>
+					<view class="order-item-content ddflex">
+						<view class="order-item-content-label">机柜编号:</view>
+						<view class="order-item-content-data fflex tover">CHZD04TTCC200329109</view>
+					</view>
+					<view class="order-item-content ddflex">
+						<view class="order-item-content-label">电池编号:</view>
+						<view class="order-item-content-data fflex tover">613880983244</view>
+					</view>
+					<view class="order-item-content ddflex">
+						<view class="order-item-content-label">描述:</view>
+						<view class="order-item-content-data fflex tover">使用后未缴费</view>
+					</view>
+				</view>
+				<view v-if="index!=1" class="order-btns ddflex">
+					<view class="order-btn-time">2022-12-31 17:16:37</view>
+					<view style="justify-content: flex-end;" class="ddflex">
+						<view class="order-btn" @click.stop="">结束订单</view>
+						<view class="order-btn" @click.stop="">禁用</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+
+	export default {
+		components: {},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop: 0,
+
+				queryType: 1,
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+
+		},
+		methods: {
+			jumpUrl(url) {
+				if (req.isLogins(true)) {
+					uni.navigateTo({
+						url: url
+					})
+				}
+			},
+			queryTypeChange(val) {
+				if (this.queryType == val) return false
+				this.queryType = val
+			},
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./orderAlarm.css";
+</style>

+ 138 - 0
warning/reconditionAlarm/reconditionAlarm.css

@@ -0,0 +1,138 @@
+/* 订单 */
+.order-item{
+	background: #FFFFFF;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	padding: 25rpx 31rpx;
+	margin: 30rpx;
+}
+.order-item-header{
+	justify-content: space-between;
+	/* padding-bottom: 26rpx; */
+	/* border-bottom: 1rpx solid #E6E6E6; */
+}
+.order-time{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #666464;
+}
+.order-state{
+	width: 92rpx;
+	height: 36rpx;
+	line-height: 36rpx;
+	border-radius: 5rpx 5rpx 5rpx 5rpx;
+	opacity: 1;
+	border: 2rpx solid #EB5C20;
+	text-align: center;
+	color: #EB5C20;
+}
+.order-item-body{
+	/* padding: 10rpx 0 0; */
+	
+}
+.order-item-body2{
+	padding-top: 20rpx;
+	border-top:1rpx solid #E6E6E6;;
+}
+.order-item-body2 .order-item-content-label{
+	
+}
+.images-box{
+	/* justify-content: space-between; */
+}
+.images{
+	width: 193rpx;
+	height: 193rpx;
+	background: #E6E6E6;
+	border-radius: 0rpx 0rpx 0rpx 0rpx;
+	opacity: 1;
+	margin-right: calc((100% - (3 * 193rpx)) / 2);
+}
+.images:nth-child(3n){
+	margin-right: 0;
+}
+.order-item-content{
+	margin: 20rpx 0;
+	justify-content: space-between;
+}
+.order-item-content-label{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #666464;
+	/* margin-right: 20rpx; */
+}
+.order-item-content-data{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #666464;
+	text-align: left;
+}
+.order-btns{
+	justify-content: flex-end;
+	margin-top: 20rpx;
+	padding-top: 20rpx;
+	border-top: 1rpx solid #E6E6E6;
+}
+.order-btn{
+	line-height: 56rpx;
+	background: #EB5C20;
+	border-radius: 73rpx 73rpx 73rpx 73rpx;
+	opacity: 1;
+	padding: 0 23rpx;
+	margin-left: 20rpx;
+	font-size: 28rpx;
+	font-weight: normal;
+	color: #FFFFFF;
+}
+
+/* 弹窗 */
+.nodata-icon{
+	width: 96rpx;
+	height: 103rpx;
+	background: #E6E6E6;
+	opacity: 1;
+	margin: auto;
+}
+.nodata-note{
+	margin-top: 35rpx;
+	margin-bottom: 77rpx;
+	font-size: 28rpx;
+	color: #666464;
+	font-weight: 400;
+	text-align: center;
+	line-height: 41rpx;
+}
+.pop-btns{
+	justify-content: space-between;
+}
+.pop-btns .btn{
+	width: 301rpx;
+	height: 76rpx;
+	line-height: 76rpx;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	border: 2rpx solid #EB5C20;
+	color: #EB5C20;
+	font-weight: 500;
+	font-size: 28rpx;
+	text-align: center;
+}
+.pop-btns .btn2{
+	width: 301rpx;
+	height: 76rpx;
+	line-height: 76rpx;
+	background: #EB5C20;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	border: 2rpx solid #EB5C20;
+	color: #fff;
+	font-weight: 500;
+	font-size: 28rpx;
+	text-align: center;
+}

+ 115 - 0
warning/reconditionAlarm/reconditionAlarm.vue

@@ -0,0 +1,115 @@
+<template>
+	<view>
+		<view class="order-item" v-for="item,index in 10" @click="openPop(item)">
+			<view class="ddflex order-item-header">
+				<view class="order-time">类型:整柜巡检</view>
+				<block>
+					<view v-if="index!=1" class="order-state">待处理</view>
+					<view v-else class="order-state" style="color: #0FCB27;border: 2rpx solid #0FCB27;">已处理</view>
+				</block>
+			</view>
+			<view class="order-item-body">
+				<view class="order-item-content ddflex">
+					<view class="order-item-content-label">机柜编号:</view>
+					<view class="order-item-content-data fflex tover">CHZD04TTCC200329109</view>
+				</view>
+				<view class="order-item-content ddflex">
+					<view class="order-item-content-label">电池编号:</view>
+					<view class="order-item-content-data fflex tover">613880983244</view>
+				</view>
+				<view class="order-item-content ddflex">
+					<view class="order-item-content-label">描述:</view>
+					<view class="order-item-content-data fflex tover">定期巡检提醒</view>
+				</view>
+				<view class="order-item-content ddflex">
+					<view class="order-item-content-label">提醒时间:</view>
+					<view class="order-item-content-data fflex tover">2022-12-31 17:16:37</view>
+				</view>
+			</view>
+		</view>
+		
+		<bottom-pop v-if="showPop" :showPop='showPop' :btnColor="'#11BB8B'" :showBtn='false' title="解除提醒"
+			@closePop="closePop()" @popSubmit="popSubmit()">
+			<view>
+				<view>
+					<image class="nodata-icon" src="../../static/pages/images/user_service1.png"></image>
+					<view class="nodata-note">上传检修记录,恢复正常</view>
+				</view>
+				<view class="pop-btns ddflex">
+					<view class="btn" @click="closePop">取消</view>
+					<view class="btn2" @click="jumpUrl('warning/reconditionAlarmUpload/reconditionAlarmUpload')">上传检修记录</view>
+				</view>
+			</view>
+		</bottom-pop>
+		
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+	import bottomPop from "../../components/bottom-pop/index";
+	export default {
+		components: {
+			bottomPop
+		},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop:0,
+				
+				showPop: false,
+				tempData: null,
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+			
+		},
+		methods: {
+			jumpUrl(url) {
+				if (!req.isLogin()) return false;
+				app.globalData.navigateTo(url);
+			},
+			// 弹窗弹出
+			openPop(item) {
+				this.tempData = JSON.parse(JSON.stringify(item))
+				this.showPop = true
+			},
+			// 弹窗关闭
+			closePop() {
+				this.showPop = false
+				this.tempData = null
+			},
+			// 弹窗确认
+			popSubmit() {
+				this.closePop()
+			},
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./reconditionAlarm.css";
+</style>

+ 113 - 0
warning/reconditionAlarmUpload/reconditionAlarmUpload.css

@@ -0,0 +1,113 @@
+page {
+	background-color: #fff;
+}
+
+.input-box {
+	padding: 30rpx 30rpx 0;
+}
+
+.input-box .input {
+	width: 615rpx;
+	height: 76rpx;
+	line-height: 76rpx;
+	background: #F8F8F8;
+	border-radius: 20rpx 20rpx 20rpx 20rpx;
+	opacity: 1;
+	padding: 0 32rpx;
+}
+
+.input-box .input input {
+	width: 100%;
+	height: 100%;
+}
+
+.saoma {
+	width: 39rpx;
+	height: 36rpx;
+	margin-left: 35rpx;
+}
+
+
+.item {
+	padding: 35rpx 0rpx;
+	justify-content: space-between;
+	border-bottom: 1rpx solid #E6E6E6;
+	;
+	margin: 0 30rpx;
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+}
+
+.label {
+	color: #666464;
+	margin-right: 30rpx;
+}
+
+.item-input {
+	color: #A8A5A5;
+	text-align: right;
+}
+
+.biao .date-content {
+	text-align: right !important;
+}
+
+/* 图片上传 */
+.product-image {
+	width: 124rpx;
+	height: 124rpx;
+	border: 1rpx solid #DBDBDB;
+	color: #999999;
+	font-size: 24rpx;
+	text-align: center;
+	display: flex;
+	flex-direction: column;
+	justify-content: center;
+	align-items: center;
+	margin-right: 20rpx;
+	position: relative;
+	margin-bottom: 10rpx;
+}
+
+.product-image image {
+	width: 46rpx;
+	height: 37rpx;
+	margin-bottom: 10rpx;
+}
+
+.product-image .product-image-delete {
+	width: 30rpx;
+	height: 30rpx;
+	position: absolute;
+	top: 0;
+	right: 0;
+	transform: translate(50%, -50%);
+}
+
+/* 保存按钮 */
+.submit-box{
+	height: 140rpx;
+	background: #FFFFFF;
+	box-shadow: 0rpx -5rpx 15rpx 1rpx rgba(0,0,0,0.05);
+	border-radius: 0rpx 0rpx 0rpx 0rpx;
+	opacity: 1;
+	position: fixed;
+	left: 0;
+	right: 0;
+	bottom: 0;
+}
+.submit-btn{
+	width: 556rpx;
+	line-height: 76rpx;
+	background: #EB5C20;
+	border-radius: 38rpx 38rpx 38rpx 38rpx;
+	opacity: 1;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #FFFFFF;
+	text-align: center;
+	margin:30rpx auto;
+}

+ 237 - 0
warning/reconditionAlarmUpload/reconditionAlarmUpload.vue

@@ -0,0 +1,237 @@
+<template>
+	<view>
+		<view class="input-box ddflex">
+			<view class="input fflex">
+				<input class="fflex" placeholder="请输入设备编号"/>
+			</view>
+			<image class="saoma" src="../../static/pages/images/saoma.png"></image>
+		</view>
+		
+		<view>
+			<view class="item ddflex">
+				<view class="label">所属门店</view>
+				<view class="item-input fflex">
+					<input v-model="name" :disabled="true" class="fflex"/>
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">机柜名称</view>
+				<view class="item-input fflex">
+					<input v-model="name" :disabled="true" class="fflex"/>
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">巡检时间</view>
+				<view class="item-input fflex">
+					<biaofundatetimepicker class="biao fflex" :dateStr="time"
+						placeholder="巡检时间" fields="minute" @change="changeEndDatetimePicker"></biaofundatetimepicker>
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">检修记录表</view>
+				<view class="item-input fflex" style="color: #2A82E4;" @click="choiceImages">
+					点击上传
+				</view>
+			</view>
+			
+			<view class="ddflex" style="margin-bottom: 40rpx;padding: 30rpx;">
+				<view class="product-image" v-for="item,index in imageList">
+					<image style="width: 100%;height: 100%;margin-bottom: 0;" :src="item"></image>
+					<image class="product-image-delete" src="../static/images/imagecuo.png" @click="removeProductImage(index)"></image>
+				</view>
+			</view>
+			
+		</view>
+		
+		<!-- 保存按钮 -->
+		<view class="savepadding submit-box">
+			<view class="submit-btn">
+				保存
+			</view>
+		</view>
+		
+		<canvas canvas-id="canvas" :style="'width:' + cWidth + 'px;height:' + cHeight +'px;position: absolute;left:-1000px;top:-1000px;'"></canvas>
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+	import biaofundatetimepicker from '../../components/biaofun-datetime-picker/biaofun-datetime-picker.vue';
+	export default {
+		components: {
+			biaofundatetimepicker
+		},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop:0,
+				
+				name:'白云科技门店',
+				time:'',
+				
+				imageList:[],
+				cWidth: 0,
+				cHeight: 0,
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+			
+		},
+		methods: {
+			changeEndDatetimePicker(val) {
+				this.time = val.f1 + " " + val.hh+":"+val.mm+":"+"00"
+			},
+			// 图片移除
+			// 移除产品图片
+			removeProductImage(index){
+				this.imageList.splice(index,1)
+			},
+			// 图片上传
+			choiceImages(event) {
+				let that = this;
+				uni.chooseImage({
+					count: 9,
+					sourceType: ['album', 'camera'],
+					sizeType: ['compressed'],
+					async success(res) {
+						console.log(res);
+						let list = res.tempFiles;
+						console.log(list);
+						let allList = [];
+						for (let i = 0; i < list.length; i++) {
+							//两M
+							if (list[i].size > 50000) {
+								var path = await that.compressImg(list[i].path)
+								console.log(path)
+								var data = {
+									formData: {
+										flag: 726
+									},
+									filePath: path,
+									name: 'file'
+								}
+								allList.push(data);
+							} else {
+								var data = {
+									formData: {
+										flag: 722
+									},
+									filePath: list[i].path,
+									name: 'file'
+								}
+								allList.push(data);
+							}
+						}
+						console.log(allList)
+						let successUp = 0;
+						let failUp = 0;
+						let count = 0
+						// 多图上传 allList:图片数组 successUp:上传成功次数 现在上传的下标
+						that.uploadImgs(allList, successUp, failUp, count);
+					},
+					fail(err) {}
+				})
+			},
+			//通过canvans缩放长宽来压缩图片 path:图片本地路径  limitNum:压缩到长宽多大
+			async compressImg(path, multiple = 2, limitNum = 600) {
+				console.log('图片链接', path)
+				let that = this;
+				return new Promise((resolve, reject) => {
+					uni.getImageInfo({
+						src: path,
+						success(res) {
+							var canvasWidth = res.width //图片原始长宽
+							var canvasHeight = res.height
+							console.log('图片的基本信息', res)
+							// while循环 保证宽高在100以内 Math.trunc()去掉小数点右边数
+							while (canvasWidth > limitNum || canvasHeight > limitNum) {
+								canvasWidth = Math.trunc(res.width / multiple)
+								canvasHeight = Math.trunc(res.height / multiple)
+								multiple++
+							}
+						 //设置画布长宽
+							that.setData({
+								cWidth: canvasWidth,
+								cHeight: canvasHeight
+							})
+							//----------绘制图形并取出图片路径--------------
+							var ctx = uni.createCanvasContext('canvas')
+							ctx.drawImage(res.path, 0, 0, canvasWidth, canvasHeight)
+							ctx.draw(false, setTimeout(() => {
+								uni.canvasToTempFilePath({
+									canvasId: 'canvas',
+									destWidth: canvasWidth,
+									destHeight: canvasHeight,
+									success: function(res) {
+										console.log(res.tempFilePath) //图片路径
+										resolve(res.tempFilePath)
+									},
+									fail: function(res) {
+										console.log(res.errMsg)
+									}
+								})
+							}, 100))
+						},
+						fail: function(res) {
+							console.log(res.errMsg)
+						},
+					})
+				})
+			},
+			//多张图片上传
+			uploadImgs: function(allList, successUp, failUp, count) {
+				console.log(allList, successUp, failUp, count)
+				let that = this;
+				let length = allList.length; //总共上传的数量
+				var promise = Promise.all(allList.map(tempFilePath => {
+					return new Promise(function(resolve, reject) {
+						req.loadIng("上传中");
+						req.uploadFile('/api/upload', tempFilePath.filePath, res => {
+							that.imageList = that.imageList.concat(res.src);
+							resolve()
+						});
+					});
+				}));
+				promise.then(function(results) {
+					uni.showToast({
+						title: '上传成功',
+						icon: 'success',
+						duration: 2000
+					});
+					// console.log(results);
+				}).catch(function(err) {
+					uni.hideToast()
+					// console.log(err);
+				});
+			
+			},
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./reconditionAlarmUpload.css";
+</style>

BIN
warning/static/images/imagecuo.png


BIN
warning/static/images/yc1.png


BIN
warning/static/images/yc2.png


BIN
warning/static/images/yc3.png


+ 138 - 0
warning/userAlarm/userAlarm.css

@@ -0,0 +1,138 @@
+/* 订单 */
+.order-item{
+	background: #FFFFFF;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	padding: 25rpx 31rpx;
+	margin: 30rpx;
+}
+.order-item-header{
+	justify-content: space-between;
+	padding-bottom: 26rpx;
+	border-bottom: 1rpx solid #E6E6E6;
+}
+.order-time{
+	line-height: 41rpx;
+	font-size: 32rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #242323;
+}
+.order-state{
+	width: 92rpx;
+	height: 36rpx;
+	line-height: 36rpx;
+	border-radius: 5rpx 5rpx 5rpx 5rpx;
+	opacity: 1;
+	border: 2rpx solid #EB5C20;
+	text-align: center;
+	color: #EB5C20;
+}
+.order-item-body{
+	padding: 10rpx 0 0;
+	
+}
+.order-item-body2{
+	padding-top: 20rpx;
+	border-top:1rpx solid #E6E6E6;;
+}
+.order-item-body2 .order-item-content-label{
+	
+}
+.images-box{
+	/* justify-content: space-between; */
+}
+.images{
+	width: 193rpx;
+	height: 193rpx;
+	background: #E6E6E6;
+	border-radius: 0rpx 0rpx 0rpx 0rpx;
+	opacity: 1;
+	margin-right: calc((100% - (3 * 193rpx)) / 2);
+}
+.images:nth-child(3n){
+	margin-right: 0;
+}
+.order-item-content{
+	margin: 20rpx 0;
+	justify-content: space-between;
+}
+.order-item-content-label{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #A8A5A5;
+	margin-right: 20rpx;
+}
+.order-item-content-data{
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #242323;
+	text-align: right;
+}
+.order-btns{
+	justify-content: flex-end;
+	margin-top: 20rpx;
+	padding-top: 20rpx;
+	border-top: 1rpx solid #E6E6E6;
+}
+.order-btn{
+	line-height: 56rpx;
+	background: #EB5C20;
+	border-radius: 73rpx 73rpx 73rpx 73rpx;
+	opacity: 1;
+	padding: 0 23rpx;
+	margin-left: 20rpx;
+	font-size: 28rpx;
+	font-weight: normal;
+	color: #FFFFFF;
+}
+
+/* 弹窗 */
+.nodata-icon{
+	width: 96rpx;
+	height: 103rpx;
+	background: #E6E6E6;
+	opacity: 1;
+	margin: auto;
+}
+.nodata-note{
+	margin-top: 35rpx;
+	margin-bottom: 77rpx;
+	font-size: 28rpx;
+	color: #666464;
+	font-weight: 400;
+	text-align: center;
+	line-height: 41rpx;
+}
+.pop-btns{
+	justify-content: space-between;
+}
+.pop-btns .btn{
+	width: 301rpx;
+	height: 76rpx;
+	line-height: 76rpx;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	border: 2rpx solid #EB5C20;
+	color: #EB5C20;
+	font-weight: 500;
+	font-size: 28rpx;
+	text-align: center;
+}
+.pop-btns .btn2{
+	width: 301rpx;
+	height: 76rpx;
+	line-height: 76rpx;
+	background: #EB5C20;
+	border-radius: 10rpx 10rpx 10rpx 10rpx;
+	opacity: 1;
+	border: 2rpx solid #EB5C20;
+	color: #fff;
+	font-weight: 500;
+	font-size: 28rpx;
+	text-align: center;
+}

+ 120 - 0
warning/userAlarm/userAlarm.vue

@@ -0,0 +1,120 @@
+<template>
+	<view>
+		<view class="order-item" v-for="item,index in 10" @click="openPop(item)">
+			<view class="ddflex order-item-header">
+				<view class="order-time">2023-03-29 12:05:58</view>
+				<block>
+					<view v-if="index!=1" class="order-state">待处理</view>
+					<view v-else class="order-state" style="color: #0FCB27;border: 2rpx solid #0FCB27;">已处理</view>
+				</block>
+			</view>
+			<view class="order-item-body">
+				<view class="order-item-content ddflex">
+					<view class="order-item-content-label">机柜编号</view>
+					<view class="order-item-content-data fflex tover">CHZD04TTCC200329109</view>
+				</view>
+				<view class="order-item-content ddflex">
+					<view class="order-item-content-label">电池ID</view>
+					<view class="order-item-content-data fflex tover">613880983244</view>
+				</view>
+				<view class="order-item-content ddflex">
+					<view class="order-item-content-label">报障问题</view>
+					<view class="order-item-content-data fflex tover">电池断电</view>
+				</view>
+			</view>
+			<view class="order-item-body2">
+				<view class="order-item-content-label">问题补充描述</view>
+				<view class="order-item-content ddflex" style="font-size: 24rpx;font-weight: 400;">
+					电池充不进去电,一开始可以充进去,不到5分钟就没电了,但是电量显示还有80%的电。
+				</view>
+				<view class="images-box ddflex">
+					<image class="images" v-for="item in 3"></image>
+				</view>
+			</view>
+		</view>
+		
+		<bottom-pop v-if="showPop" :showPop='showPop' :btnColor="'#11BB8B'" :showBtn='false' title="解除提醒"
+			@closePop="closePop()" @popSubmit="popSubmit()">
+			<view>
+				<view>
+					<image class="nodata-icon" src="../../static/pages/images/user_service1.png"></image>
+					<view class="nodata-note">上传检修记录,恢复正常</view>
+				</view>
+				<view class="pop-btns ddflex">
+					<view class="btn" @click="closePop">取消</view>
+					<view class="btn2" @click="jumpUrl('warning/userAlarmUpload/userAlarmUpload')">上传检修记录</view>
+				</view>
+			</view>
+		</bottom-pop>
+		
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+	import bottomPop from "../../components/bottom-pop/index";
+	export default {
+		components: {
+			bottomPop
+		},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop:0,
+				
+				showPop: false,
+				tempData: null,
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+			
+		},
+		methods: {
+			jumpUrl(url) {
+				if (!req.isLogin()) return false;
+				app.globalData.navigateTo(url);
+			},
+			// 弹窗弹出
+			openPop(item) {
+				this.tempData = JSON.parse(JSON.stringify(item))
+				this.showPop = true
+			},
+			// 弹窗关闭
+			closePop() {
+				this.showPop = false
+				this.tempData = null
+			},
+			// 弹窗确认
+			popSubmit() {
+				this.closePop()
+			},
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./userAlarm.css";
+</style>

+ 113 - 0
warning/userAlarmUpload/userAlarmUpload.css

@@ -0,0 +1,113 @@
+page {
+	background-color: #fff;
+}
+
+.input-box {
+	padding: 30rpx 30rpx 0;
+}
+
+.input-box .input {
+	width: 615rpx;
+	height: 76rpx;
+	line-height: 76rpx;
+	background: #F8F8F8;
+	border-radius: 20rpx 20rpx 20rpx 20rpx;
+	opacity: 1;
+	padding: 0 32rpx;
+}
+
+.input-box .input input {
+	width: 100%;
+	height: 100%;
+}
+
+.saoma {
+	width: 39rpx;
+	height: 36rpx;
+	margin-left: 35rpx;
+}
+
+
+.item {
+	padding: 35rpx 0rpx;
+	justify-content: space-between;
+	border-bottom: 1rpx solid #E6E6E6;
+	;
+	margin: 0 30rpx;
+	line-height: 41rpx;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+}
+
+.label {
+	color: #666464;
+	margin-right: 30rpx;
+}
+
+.item-input {
+	color: #A8A5A5;
+	text-align: right;
+}
+
+.biao .date-content {
+	text-align: right !important;
+}
+
+/* 图片上传 */
+.product-image {
+	width: 124rpx;
+	height: 124rpx;
+	border: 1rpx solid #DBDBDB;
+	color: #999999;
+	font-size: 24rpx;
+	text-align: center;
+	display: flex;
+	flex-direction: column;
+	justify-content: center;
+	align-items: center;
+	margin-right: 20rpx;
+	position: relative;
+	margin-bottom: 10rpx;
+}
+
+.product-image image {
+	width: 46rpx;
+	height: 37rpx;
+	margin-bottom: 10rpx;
+}
+
+.product-image .product-image-delete {
+	width: 30rpx;
+	height: 30rpx;
+	position: absolute;
+	top: 0;
+	right: 0;
+	transform: translate(50%, -50%);
+}
+
+/* 保存按钮 */
+.submit-box{
+	height: 140rpx;
+	background: #FFFFFF;
+	box-shadow: 0rpx -5rpx 15rpx 1rpx rgba(0,0,0,0.05);
+	border-radius: 0rpx 0rpx 0rpx 0rpx;
+	opacity: 1;
+	position: fixed;
+	left: 0;
+	right: 0;
+	bottom: 0;
+}
+.submit-btn{
+	width: 556rpx;
+	line-height: 76rpx;
+	background: #EB5C20;
+	border-radius: 38rpx 38rpx 38rpx 38rpx;
+	opacity: 1;
+	font-size: 28rpx;
+	font-family: Source Han Sans CN-Medium, Source Han Sans CN;
+	font-weight: 500;
+	color: #FFFFFF;
+	text-align: center;
+	margin:30rpx auto;
+}

+ 237 - 0
warning/userAlarmUpload/userAlarmUpload.vue

@@ -0,0 +1,237 @@
+<template>
+	<view>
+		<view class="input-box ddflex">
+			<view class="input fflex">
+				<input class="fflex" placeholder="请输入设备编号"/>
+			</view>
+			<image class="saoma" src="../../static/pages/images/saoma.png"></image>
+		</view>
+		
+		<view>
+			<view class="item ddflex">
+				<view class="label">所属门店</view>
+				<view class="item-input fflex">
+					<input v-model="name" :disabled="true" class="fflex"/>
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">机柜名称</view>
+				<view class="item-input fflex">
+					<input v-model="name" :disabled="true" class="fflex"/>
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">巡检时间</view>
+				<view class="item-input fflex">
+					<biaofundatetimepicker class="biao fflex" :dateStr="time"
+						placeholder="巡检时间" fields="minute" @change="changeEndDatetimePicker"></biaofundatetimepicker>
+				</view>
+			</view>
+			<view class="item ddflex">
+				<view class="label">检修记录表</view>
+				<view class="item-input fflex" style="color: #2A82E4;" @click="choiceImages">
+					点击上传
+				</view>
+			</view>
+			
+			<view class="ddflex" style="margin-bottom: 40rpx;padding: 30rpx;">
+				<view class="product-image" v-for="item,index in imageList">
+					<image style="width: 100%;height: 100%;margin-bottom: 0;" :src="item"></image>
+					<image class="product-image-delete" src="../static/images/imagecuo.png" @click="removeProductImage(index)"></image>
+				</view>
+			</view>
+			
+		</view>
+		
+		<!-- 保存按钮 -->
+		<view class="savepadding submit-box">
+			<view class="submit-btn">
+				保存
+			</view>
+		</view>
+		
+		<canvas canvas-id="canvas" :style="'width:' + cWidth + 'px;height:' + cHeight +'px;position: absolute;left:-1000px;top:-1000px;'"></canvas>
+	</view>
+</template>
+
+<script>
+	const app = getApp();
+	const req = require("../../utils/request.js");
+	import biaofundatetimepicker from '../../components/biaofun-datetime-picker/biaofun-datetime-picker.vue';
+	export default {
+		components: {
+			biaofundatetimepicker
+		},
+		props: {},
+		data() {
+			return {
+				systems: {},
+				isTop:0,
+				
+				name:'白云科技门店',
+				time:'',
+				
+				imageList:[],
+				cWidth: 0,
+				cHeight: 0,
+			}
+		},
+		onLoad(options) {
+
+		},
+		onShow() {
+			
+		},
+		methods: {
+			changeEndDatetimePicker(val) {
+				this.time = val.f1 + " " + val.hh+":"+val.mm+":"+"00"
+			},
+			// 图片移除
+			// 移除产品图片
+			removeProductImage(index){
+				this.imageList.splice(index,1)
+			},
+			// 图片上传
+			choiceImages(event) {
+				let that = this;
+				uni.chooseImage({
+					count: 9,
+					sourceType: ['album', 'camera'],
+					sizeType: ['compressed'],
+					async success(res) {
+						console.log(res);
+						let list = res.tempFiles;
+						console.log(list);
+						let allList = [];
+						for (let i = 0; i < list.length; i++) {
+							//两M
+							if (list[i].size > 50000) {
+								var path = await that.compressImg(list[i].path)
+								console.log(path)
+								var data = {
+									formData: {
+										flag: 726
+									},
+									filePath: path,
+									name: 'file'
+								}
+								allList.push(data);
+							} else {
+								var data = {
+									formData: {
+										flag: 722
+									},
+									filePath: list[i].path,
+									name: 'file'
+								}
+								allList.push(data);
+							}
+						}
+						console.log(allList)
+						let successUp = 0;
+						let failUp = 0;
+						let count = 0
+						// 多图上传 allList:图片数组 successUp:上传成功次数 现在上传的下标
+						that.uploadImgs(allList, successUp, failUp, count);
+					},
+					fail(err) {}
+				})
+			},
+			//通过canvans缩放长宽来压缩图片 path:图片本地路径  limitNum:压缩到长宽多大
+			async compressImg(path, multiple = 2, limitNum = 600) {
+				console.log('图片链接', path)
+				let that = this;
+				return new Promise((resolve, reject) => {
+					uni.getImageInfo({
+						src: path,
+						success(res) {
+							var canvasWidth = res.width //图片原始长宽
+							var canvasHeight = res.height
+							console.log('图片的基本信息', res)
+							// while循环 保证宽高在100以内 Math.trunc()去掉小数点右边数
+							while (canvasWidth > limitNum || canvasHeight > limitNum) {
+								canvasWidth = Math.trunc(res.width / multiple)
+								canvasHeight = Math.trunc(res.height / multiple)
+								multiple++
+							}
+						 //设置画布长宽
+							that.setData({
+								cWidth: canvasWidth,
+								cHeight: canvasHeight
+							})
+							//----------绘制图形并取出图片路径--------------
+							var ctx = uni.createCanvasContext('canvas')
+							ctx.drawImage(res.path, 0, 0, canvasWidth, canvasHeight)
+							ctx.draw(false, setTimeout(() => {
+								uni.canvasToTempFilePath({
+									canvasId: 'canvas',
+									destWidth: canvasWidth,
+									destHeight: canvasHeight,
+									success: function(res) {
+										console.log(res.tempFilePath) //图片路径
+										resolve(res.tempFilePath)
+									},
+									fail: function(res) {
+										console.log(res.errMsg)
+									}
+								})
+							}, 100))
+						},
+						fail: function(res) {
+							console.log(res.errMsg)
+						},
+					})
+				})
+			},
+			//多张图片上传
+			uploadImgs: function(allList, successUp, failUp, count) {
+				console.log(allList, successUp, failUp, count)
+				let that = this;
+				let length = allList.length; //总共上传的数量
+				var promise = Promise.all(allList.map(tempFilePath => {
+					return new Promise(function(resolve, reject) {
+						req.loadIng("上传中");
+						req.uploadFile('/api/upload', tempFilePath.filePath, res => {
+							that.imageList = that.imageList.concat(res.src);
+							resolve()
+						});
+					});
+				}));
+				promise.then(function(results) {
+					uni.showToast({
+						title: '上传成功',
+						icon: 'success',
+						duration: 2000
+					});
+					// console.log(results);
+				}).catch(function(err) {
+					uni.hideToast()
+					// console.log(err);
+				});
+			
+			},
+		},
+		mounted() {
+			const systemInfo = uni.getSystemInfoSync();
+			// px转换到rpx的比例
+			let pxToRpxScale = 750 / systemInfo.windowWidth;
+			let systems = {
+				ktxStatusHeight: systemInfo.statusBarHeight * pxToRpxScale, // 状态栏的高度
+				navigationHeight: 44 * pxToRpxScale // 导航栏的高度
+			};
+			systems.barHeight = systems.ktxStatusHeight + systems.navigationHeight;
+			this.systems = systems;
+		},
+		onPageScroll: function(e) {
+			if (e.scrollTop > this.systems.barHeight) {
+				this.isTop = 1;
+			} else {
+				this.isTop = 0;
+			}
+		}
+	}
+</script>
+
+<style>
+	@import "./userAlarmUpload.css";
+</style>