瀏覽代碼

泰山运维系统-云服务-20240221

dylan 2 年之前
父節點
當前提交
09a2c48eb1
共有 100 個文件被更改,包括 26760 次插入0 次删除
  1. 61 0
      App.vue
  2. 69 0
      api/home.js
  3. 8 0
      api/role.js
  4. 41 0
      api/user.js
  5. 36 0
      common/setting.js
  6. 153 0
      components/pick-regions/pick-regions.vue
  7. 0 0
      components/pick-regions/regions.json
  8. 77 0
      http/api.js
  9. 45 0
      http/config.js
  10. 18 0
      http/install.js
  11. 196 0
      js_sdk/mmmm-image-tools/index.js
  12. 11 0
      js_sdk/mmmm-image-tools/package.json
  13. 31 0
      main.js
  14. 120 0
      manifest.json
  15. 164 0
      package-lock.json
  16. 6 0
      package.json
  17. 686 0
      pages.json
  18. 472 0
      pages/check-order/checkorderlist.vue
  19. 192 0
      pages/check-order/comfiredelaycheckorderlist.vue
  20. 287 0
      pages/check-order/companycheckorderlist.vue
  21. 357 0
      pages/check-order/completedcheckorderlist.vue
  22. 122 0
      pages/check-order/manuallyaddcheckorder.vue
  23. 122 0
      pages/check-order/manuallyclosecheckorder.vue
  24. 181 0
      pages/check-order/mycheckorderlist.vue
  25. 433 0
      pages/check-order/orderadd.vue
  26. 130 0
      pages/check-order/ordercancel.vue
  27. 433 0
      pages/check-order/ordercloseapprove.vue
  28. 231 0
      pages/check-order/orderconfirm.vue
  29. 391 0
      pages/check-order/ordercostsapprove.vue
  30. 145 0
      pages/check-order/orderprocesschange.vue
  31. 560 0
      pages/check-order/orderprocessreport.vue
  32. 473 0
      pages/check-order/orderprocessreportdetail.vue
  33. 71 0
      pages/check-order/photoView.vue
  34. 340 0
      pages/check-order/processcheckorderlistview.vue
  35. 222 0
      pages/check-order/rtu/rtucheckorderlist.vue
  36. 248 0
      pages/check-order/servicepersoncheckorderlist.vue
  37. 143 0
      pages/check-order/todaycheckorderrprocesseportlist.vue
  38. 263 0
      pages/check-order/uncomfirecheckorderlist.vue
  39. 195 0
      pages/check-order/uncomfirecheckorderlistview.vue
  40. 85 0
      pages/check-order/videoView.vue
  41. 238 0
      pages/equipment-inspection/companyfinishedinspectionreportlist.vue
  42. 2862 0
      pages/equipment-inspection/equipmentinspectionreport.vue
  43. 326 0
      pages/equipment-inspection/finishedinspectionreportlist.vue
  44. 554 0
      pages/equipment-inspection/inspectionlist.vue
  45. 177 0
      pages/equipment-inspection/inspectionremainingproblemsclose.vue
  46. 326 0
      pages/equipment-inspection/inspectionremainingproblemslist.vue
  47. 1048 0
      pages/equipment-inspection/inspectionreportdetail.vue
  48. 477 0
      pages/equipment-inspection/inspectionreportlist.vue
  49. 146 0
      pages/equipment-inspection/inspectionreportview.vue
  50. 159 0
      pages/equipment-inspection/rtuinspectionreportview.vue
  51. 218 0
      pages/equipment-inspection/servicepersonfinishedinspectionreportlist.vue
  52. 118 0
      pages/equipment-inspection/todayinspectionreportlist.vue
  53. 147 0
      pages/home/dangerarea.vue
  54. 193 0
      pages/home/dangerareamap.vue
  55. 954 0
      pages/home/home.vue
  56. 147 0
      pages/home/leaveline.vue
  57. 160 0
      pages/home/leavelinemap.vue
  58. 147 0
      pages/home/region.vue
  59. 168 0
      pages/home/regionmap.vue
  60. 223 0
      pages/home/start/start.vue
  61. 334 0
      pages/login/login-account.vue
  62. 290 0
      pages/login/login-phone.vue
  63. 282 0
      pages/news/detail.vue
  64. 203 0
      pages/news/noticelist.vue
  65. 87 0
      pages/realdata/rtudata.vue
  66. 277 0
      pages/realdata/rtugrounddata.vue
  67. 146 0
      pages/realdata/rtugrounddatadetail.vue
  68. 349 0
      pages/realdata/rturaindata.vue
  69. 267 0
      pages/realdata/rturiverdata.vue
  70. 116 0
      pages/report-forms/checkorderreportcount.vue
  71. 111 0
      pages/report-forms/contact.vue
  72. 128 0
      pages/report-forms/inspectionreportcount.vue
  73. 117 0
      pages/report-forms/orgcheckorderreportcount.vue
  74. 163 0
      pages/report-forms/orginspectionreportcount.vue
  75. 219 0
      pages/rtu-manage/rtudetail.vue
  76. 1435 0
      pages/rtu-manage/rtumanage.vue
  77. 391 0
      pages/rtu-manage/rturealdatadetail.vue
  78. 401 0
      pages/serviceperson/servicepersonadd.vue
  79. 417 0
      pages/serviceperson/servicepersonedit.vue
  80. 515 0
      pages/serviceperson/servicepersonmanage.vue
  81. 22 0
      pages/system/setting.vue
  82. 152 0
      pages/user/about.vue
  83. 363 0
      pages/user/center.vue
  84. 22 0
      pages/user/font-setting.vue
  85. 203 0
      pages/user/modify-password.vue
  86. 241 0
      pages/user/profile.vue
  87. 163 0
      pages/warning/rtuwarninglist.vue
  88. 190 0
      pages/warning/warninginfodetail.vue
  89. 142 0
      pages/warning/warninglist.vue
  90. 333 0
      pages/yjxt/check/dangerareacheck.vue
  91. 197 0
      pages/yjxt/dangerarea/dangerarea.vue
  92. 159 0
      pages/yjxt/dangerarea/dangerareamap.vue
  93. 78 0
      pages/yjxt/dangerarea/dangerareaqr.vue
  94. 178 0
      pages/yjxt/dangerarealeaveline/leaveline.vue
  95. 126 0
      pages/yjxt/dangerarealeaveline/leavelinemap.vue
  96. 90 0
      pages/yjxt/resident/dangerarearesidentfamilylist.vue
  97. 236 0
      pages/yjxt/resident/dangerarearesidentlocation.vue
  98. 390 0
      pages/yjxt/resident/dangerarearesidentrecord.vue
  99. 200 0
      pages/yjxt/resident/dangerarearesidentrecordlist.vue
  100. 421 0
      pages/yjxt/transfer/residenttransferrecord.vue

+ 61 - 0
App.vue

@@ -0,0 +1,61 @@
+<script>
+	export default {
+		onLaunch: function() {
+			// #ifdef APP-PLUS
+			try {
+				let loginTime = uni.getStorageSync("loginTime");
+				if (loginTime) {
+					let dt = new Date();
+					let time = dt.getTime();
+					let expires = this.userInfo.expires_in;
+					if (expires) {
+						if ((time - loginTime) / 1000 > (expires - 60)) {
+							uni.reLaunch({
+								url: "pages/login/login-account",
+								success: () => {
+									plus.navigator.closeSplashscreen();
+								}
+							})
+						} else {
+							plus.navigator.closeSplashscreen();
+						}
+					} else {
+						uni.reLaunch({
+							url: "pages/login/login-account",
+							success: () => {
+								plus.navigator.closeSplashscreen();
+							}
+						})
+					}
+				} else {
+					uni.reLaunch({
+						url: "pages/login/login-account",
+						success: () => {
+							plus.navigator.closeSplashscreen();
+						}
+					})
+				}
+			} catch (e) {
+				uni.reLaunch({
+					url: "pages/login/login-account",
+					success: () => {
+						plus.navigator.closeSplashscreen();
+					}
+				})
+			}
+			// #endif
+		},
+		onShow: function() {
+			console.log('App Show')
+		},
+		onHide: function() {
+			console.log('App Hide')
+		}
+	}
+</script>
+<style lang="scss">
+	/*uview全局样式*/
+	@import "uview-ui/index.scss";
+	/*app全局样式*/
+	@import 'static/style/app.scss';
+</style>

+ 69 - 0
api/home.js

@@ -0,0 +1,69 @@
+const navButtons = [
+	{
+		name: '运维工单',
+		img: '/static/images/home/order.png',
+		url: '/pages/check-order/checkorderlist',
+		badge: false,
+		value: 0,
+	},
+	{
+		name: '设备巡检',
+		img: '/static/images/home/inspection.png',
+		url: '/pages/equipment-inspection/inspectionlist',
+		badge: false,
+		value: 0,
+	},
+	{
+		name: '工单统计',
+		img: '/static/images/home/order_statistics.png',
+		url: '/pages/report-forms/checkorderreportcount',
+		badge: false,
+		value: 0,
+	},
+	{
+		name: '巡检统计',
+		img: '/static/images/home/inspection_statistics.png',
+		url: '/pages/report-forms/inspectionreportcount',
+		badge: false,
+		value: 0,
+	},
+	{
+		name: '人员管理',
+		img: '/static/images/home/contact.png',
+		url: '/pages/serviceperson/servicepersonmanage?add=1',
+		badge: false,
+		value: 0,
+	},
+	{
+		name: '人员通讯表',
+		img: '/static/images/home/contact.png',
+		url: '/pages/serviceperson/servicepersonmanage?add=0',
+		badge: false,
+		value: 0,
+	},
+]
+
+//获取系统管理员导航按钮
+const sysAdminNavButton = [true,false,false,false,true,false];
+
+//获取盟市管理员导航按钮
+const orgAdminNavButton = [true,false,false,false,true,false];
+
+//获取运维公司管理员导航按钮
+const companyAdminNavButton = [true,true,true,true,true,false];
+
+//获取运维公司技术员导航按钮
+const companyServicePersonNavButton = [true,false,false,false,false,false];
+
+//获取运应急人员导航按钮
+const yjServicePersonNavButton = [false,false,false,false,true,false];
+
+
+export default {
+	navButtons,
+	sysAdminNavButton,
+	orgAdminNavButton,
+	companyAdminNavButton,
+	companyServicePersonNavButton,
+	yjServicePersonNavButton
+}

+ 8 - 0
api/role.js

@@ -0,0 +1,8 @@
+
+export const role = {
+	'admin': 'sys_admin',
+	'orgAdmin': 'org_admin',
+	'companyAdmin': 'company_admin',
+	'companyServciePerson': 'company_servcie_person',
+	'yjServicePerson': 'org_yj_service_person',
+}

+ 41 - 0
api/user.js

@@ -0,0 +1,41 @@
+import http from '@/http/api.js'
+
+// 获取token
+const token = (tenantId, username, password, type) => {
+	  
+	return http.request({
+		url: '/galaxy-auth/oauth/token',
+		method: 'POST',
+		header: {
+			'Tenant-Id': tenantId
+		},
+		params: {
+			tenantId,
+			username,
+			password,
+			grant_type: "password",
+			scope: "all",
+			type
+		}
+	})
+}
+
+// 获取用户信息
+const userInfo = () => {
+	return http.request({
+		url: '/galaxy-user/info',
+		method: 'GET',
+	})
+}
+
+// export const role = {
+// 	'admin': 'sys_admin',
+// 	'orgAdmin': 'org_admin',
+// 	'companyAdmin': 'company_admin',
+// 	'companyServciePerson': 'company_servcie_person',
+// }
+
+export default {
+	token,
+	userInfo,
+}

+ 36 - 0
common/setting.js

@@ -0,0 +1,36 @@
+/**
+ * 全局变量配置
+ */
+module.exports = {
+	// 应用名
+	name: 'tscloudywxt',
+	// 应用logo,支持本地路径和网络路径
+	logo: '/static/images/logo.png',
+	// 版本号
+	version: '1.0.0',
+	// 客户端类型
+	userType: 'app',
+	// 开发环境接口Url
+	devUrl: 'http://127.0.0.1:50004',
+	//devUrl: 'http://111.204.228.227:50004',
+	// 生产环境
+	oss: 'https://wx.dahengsi.com:30001/oss/galaxy/',
+	imgPath: 'https://wx.dahengsi.com:30001/img/',
+	prodUrl: 'https://wx.dahengsi.com:30001/api',
+	// 测试环境
+	// oss: 'https://wx.dahengsi.com:44301/oss/galaxy/',
+	// imgPath: 'https://wx.dahengsi.com:44301/img/',
+	// prodUrl: 'https://wx.dahengsi.com:44301/api',
+	// 后端数据的接收方式application/json;charset=UTF-8或者application/x-www-form-urlencoded;charset=UTF-8
+	contentType: 'application/json;charset=UTF-8',
+	// 后端返回状态码
+	codeName: 'code',
+	// 操作正常code
+	successCode: 200,
+	// 登录失效code
+	invalidCode: 401,
+	// 客户端ID
+	clientId: 'tscloudywxt',
+	// 客户端密钥
+	clientSecret: 'tscloudywxt_secret_82828800',
+}

+ 153 - 0
components/pick-regions/pick-regions.vue

@@ -0,0 +1,153 @@
+<template>
+	<picker
+		mode="multiSelector"
+		:value="multiIndex"
+		:range="multiArray"
+		@change="handleValueChange"
+		@columnchange="handleColumnChange"
+	>
+		<slot></slot>
+	</picker>
+</template>
+
+<script>
+const CHINA_REGIONS = require('./regions.json');
+export default {
+	props: {
+		defaultRegions: {
+			type: Array,
+			default() {
+				return [];
+			}
+		},
+		defaultRegionCode: {
+			type: String
+		},
+		defaultRegion: [String, Array],
+		value: [String, Array]
+	},
+	data() {
+		return {
+			cityArr: CHINA_REGIONS[0].childs,
+			districtArr: CHINA_REGIONS[0].childs[0].childs,
+			multiIndex: [0, 0, 0],
+			isInitMultiArray: true
+		};
+	},
+	watch: {
+		defaultRegion: {
+			handler(region, oldRegion) {
+				if (Array.isArray(region)) {
+					// 避免传的是字面量的时候重复触发
+					oldRegion = oldRegion || [];
+					if (region.join('') !== oldRegion.join('')) {
+						this.handleDefaultRegion(region);
+					}
+				} else if (region && region.length == 6) {
+					this.handleDefaultRegion(region);
+				} else {
+					console.warn('defaultRegion非有效格式');
+				}
+			},
+			immediate: true
+		}
+	},
+	computed: {
+		multiArray() {
+			return this.pickedArr.map(arr => arr.map(item => item.name));
+		},
+		pickedArr() {
+			// 进行初始化
+			if (this.isInitMultiArray) {
+				return [
+					CHINA_REGIONS,
+					CHINA_REGIONS[0].childs,
+					CHINA_REGIONS[0].childs[0].childs
+				];
+			}
+			return [CHINA_REGIONS, this.cityArr, this.districtArr];
+		}
+	},
+	methods: {
+		handleColumnChange(e) {
+			// console.log(e);
+			this.isInitMultiArray = false;
+			const that = this;
+			let col = e.detail.column;
+			let row = e.detail.value;
+			that.multiIndex[col] = row;
+			try {
+				switch (col) {
+					case 0:
+						if (CHINA_REGIONS[that.multiIndex[0]].childs.length == 0) {
+							that.cityArr = that.districtArr = [
+								CHINA_REGIONS[that.multiIndex[0]]
+							];
+							break;
+						}
+						that.cityArr = CHINA_REGIONS[that.multiIndex[0]].childs;
+						that.districtArr =
+							CHINA_REGIONS[that.multiIndex[0]].childs[
+								that.multiIndex[1]
+							].childs;
+						break;
+					case 1:
+						that.districtArr =
+							CHINA_REGIONS[that.multiIndex[0]].childs[
+								that.multiIndex[1]
+							].childs;
+						break;
+					case 2:
+						break;
+				}
+			} catch (e) {
+				// console.log(e);
+				that.districtArr = CHINA_REGIONS[that.multiIndex[0]].childs[0].childs;
+			}
+		},
+		handleValueChange(e) {
+			// 结构赋值
+			let [index0, index1, index2] = e.detail.value;
+			let [arr0, arr1, arr2] = this.pickedArr;
+			let address = [arr0[index0], arr1[index1], arr2[index2]];
+			// console.log(address);
+			this.$emit('getRegion', address);
+			this.$emit(
+				'input',
+				`${address[0].name}${address[1].name}${address[2].name}`
+			);
+		},
+		handleDefaultRegion(region) {
+			const isCode = !Array.isArray(region);
+			this.isInitMultiArray = false;
+			let children = CHINA_REGIONS;
+			for (let i = 0; i < 3; i++) {
+				for (let j = 0; j < children.length; j++) {
+					let condition = isCode
+						? children[j].code == region.slice(0, (i + 1) * 2)
+						: children[j].name.includes(region[i]);
+					if (condition) {
+						// 匹配成功进行赋值
+						// console.log(i,j,children.length-1);
+						children = children[j].childs;
+						if (i == 0) {
+							this.cityArr = children;
+						} else if (i == 1) {
+							this.districtArr = children;
+						}
+						this.$set(this.multiIndex, i, j);
+						// console.log(this.multiIndex);
+						break;
+					} else {
+						// 首次匹配失败就用默认的初始化
+						// console.log(i,j,children.length-1);
+						if (i == 0 && j == children.length - 1) {
+							this.isInitMultiArray = true;
+						}
+					}
+				}
+			}
+		}
+	}
+};
+</script>

File diff suppressed because it is too large
+ 0 - 0
components/pick-regions/regions.json


+ 77 - 0
http/api.js

@@ -0,0 +1,77 @@
+import {
+	clientId,
+	clientSecret
+} from '@/common/setting'
+import {
+	options
+} from '@/http/config.js';
+import {
+	Base64
+} from '@/utils/base64.js';
+import Request from '@/utils/luch-request/index.js';
+const http = new Request(options);
+http.interceptors.request.use((config) => { // 可使用async await 做异步操作
+	// 假设有token值需要在头部需要携带
+	let accessToken = uni.getStorageSync('accessToken');
+	if (accessToken) {
+		config.header['Blade-Auth'] = 'bearer ' + accessToken;
+	}
+	// 客户端认证参数
+	config.header['Authorization'] = 'Basic ' + Base64.encode(clientId + ':' + clientSecret);
+  
+
+	// 额外参数
+	// config.data = config.data || {};
+	// config.data.pf = uni.getSystemInfoSync().platform;
+	// config.data.sys = uni.getSystemInfoSync().system;
+
+	// 演示custom 用处
+	// if (config.custom.auth) {
+	//   config.header.token = 'token'
+	// }
+	// if (config.custom.loading) {
+	//  uni.showLoading()
+	// }
+	/**
+	 /* 演示
+	 if (!token) { // 如果token不存在,return Promise.reject(config) 会取消本次请求
+	    return Promise.reject(config)
+	  }
+	 **/
+	return config
+}, config => { // 可使用async await 做异步操作
+	return Promise.reject(config)
+})
+http.interceptors.response.use((response) => {
+	// 若有数据返回则通过
+	if (response.data.access_token || response.data.key) {
+		return response.data
+	}
+	// 服务端返回的状态码不等于200,则reject()
+	if (response.data.code !== 200) {
+		return Promise.reject(response);
+	}
+	return response.data;
+}, (response) => {
+
+	/*  对响应错误做点什么 (statusCode !== 200)*/
+	if (response.data.code == 401) {
+		// uni.reLaunch({
+		// 	url: '/pages/login/login-account'
+		// })
+		
+		uni.navigateTo({
+			url: '/pages/login/login-account'
+		})
+		
+	} 
+	else {
+		uni.showToast({
+			title: response.data.msg+" code:"+response.data.code,
+			icon: 'none'
+		});
+	}
+
+	return Promise.reject(response)
+})
+export default http;

+ 45 - 0
http/config.js

@@ -0,0 +1,45 @@
+import {
+	devUrl,
+	prodUrl,
+	contentType
+} from '@/common/setting'
+
+var options = {
+	baseURL: process.env.NODE_ENV === 'development' ? devUrl : prodUrl,
+	header: {
+		'Content-Type': contentType,
+		'Access-Control-Allow-Origin':'*',
+	},
+	method: 'POST',
+	dataType: 'json',
+	// #ifndef MP-ALIPAY || APP-PLUS
+	responseType: 'text',
+	// #endif
+	// 注:如果局部custom与全局custom有同名属性,则后面的属性会覆盖前面的属性,相当于Object.assign(全局,局部)
+	custom: {}, // 全局自定义参数默认值
+	// #ifdef MP-ALIPAY || MP-WEIXIN
+	timeout: 30000,
+	// #endif
+	// #ifdef APP-PLUS
+	sslVerify: true,
+	// #endif
+	// #ifdef H5
+	// 跨域请求时是否携带凭证(cookies)仅H5支持(HBuilderX 2.6.15+)
+	//withCredentials: false,
+	// #endif
+	// #ifdef APP-PLUS
+	firstIpv4: false, // DNS解析时优先使用ipv4 仅 App-Android 支持 (HBuilderX 2.8.0+)
+	// #endif
+	// 局部优先级高于全局,返回当前请求的task,options。请勿在此处修改options。非必填
+	// getTask: (task, options) => {
+	// 相当于设置了请求超时时间500ms
+	//   setTimeout(() => {
+	//     task.abort()
+	//   }, 500)
+	// },
+	// 全局自定义验证器。参数为statusCode 且必存在,不用判断空情况。
+	// validateStatus: (statusCode) => { // statusCode 必存在。此处示例为全局默认配置
+	// 	return statusCode >= 200 && statusCode < 300
+	// }
+};
+export { options };

+ 18 - 0
http/install.js

@@ -0,0 +1,18 @@
+// 获取api目录所有js文件
+const files = require.context('@/api', false, /\.js$/)
+// 此处第二个参数vm,就是我们在页面使用的this,可以通过vm获取vuex等操作
+const install = (Vue, vm) => {
+	// 将各个定义的接口名称,统一放进对象挂载到vm.$u.api下(因为vm就是this,也即this.$u.api)
+	// 自动将所有api挂载到vm.$u.api中
+	vm.$u.api = {}
+	files.keys().forEach(key => {
+		const api = files(key).default
+		for (let item in api) {
+			vm.$u.api[item] = api[item]
+		}
+	})
+}
+
+export default {
+	install
+}

+ 196 - 0
js_sdk/mmmm-image-tools/index.js

@@ -0,0 +1,196 @@
+function getLocalFilePath(path) {
+    if (path.indexOf('_www') === 0 || path.indexOf('_doc') === 0 || path.indexOf('_documents') === 0 || path.indexOf('_downloads') === 0) {
+        return path
+    }
+    if (path.indexOf('file://') === 0) {
+        return path
+    }
+    if (path.indexOf('/storage/emulated/0/') === 0) {
+        return path
+    }
+    if (path.indexOf('/') === 0) {
+        var localFilePath = plus.io.convertAbsoluteFileSystem(path)
+        if (localFilePath !== path) {
+            return localFilePath
+        } else {
+            path = path.substr(1)
+        }
+    }
+    return '_www/' + path
+}
+
+function dataUrlToBase64(str) {
+    var array = str.split(',')
+    return array[array.length - 1]
+}
+
+var index = 0
+function getNewFileId() {
+    return Date.now() + String(index++)
+}
+
+function biggerThan(v1, v2) {
+    var v1Array = v1.split('.')
+    var v2Array = v2.split('.')
+    var update = false
+    for (var index = 0; index < v2Array.length; index++) {
+        var diff = v1Array[index] - v2Array[index]
+        if (diff !== 0) {
+            update = diff > 0
+            break
+        }
+    }
+    return update
+}
+
+export function pathToBase64(path) {
+    return new Promise(function(resolve, reject) {
+        if (typeof window === 'object' && 'document' in window) {
+            if (typeof FileReader === 'function') {
+                var xhr = new XMLHttpRequest()
+                xhr.open('GET', path, true)
+                xhr.responseType = 'blob'
+                xhr.onload = function() {
+                    if (this.status === 200) {
+                        let fileReader = new FileReader()
+                        fileReader.onload = function(e) {
+                            resolve(e.target.result)
+                        }
+                        fileReader.onerror = reject
+                        fileReader.readAsDataURL(this.response)
+                    }
+                }
+                xhr.onerror = reject
+                xhr.send()
+                return
+            }
+            var canvas = document.createElement('canvas')
+            var c2x = canvas.getContext('2d')
+            var img = new Image
+            img.onload = function() {
+                canvas.width = img.width
+                canvas.height = img.height
+                c2x.drawImage(img, 0, 0)
+                resolve(canvas.toDataURL())
+                canvas.height = canvas.width = 0
+            }
+            img.onerror = reject
+            img.src = path
+            return
+        }
+        if (typeof plus === 'object') {
+            plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) {
+                entry.file(function(file) {
+                    var fileReader = new plus.io.FileReader()
+                    fileReader.onload = function(data) {
+                        resolve(data.target.result)
+                    }
+                    fileReader.onerror = function(error) {
+                        reject(error)
+                    }
+                    fileReader.readAsDataURL(file)
+                }, function(error) {
+                    reject(error)
+                })
+            }, function(error) {
+                reject(error)
+            })
+            return
+        }
+        if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
+            wx.getFileSystemManager().readFile({
+                filePath: path,
+                encoding: 'base64',
+                success: function(res) {
+                    resolve('data:image/png;base64,' + res.data)
+                },
+                fail: function(error) {
+                    reject(error)
+                }
+            })
+            return
+        }
+        reject(new Error('not support'))
+    })
+}
+
+export function base64ToPath(base64) {
+    return new Promise(function(resolve, reject) {
+        if (typeof window === 'object' && 'document' in window) {
+            base64 = base64.split(',')
+            var type = base64[0].match(/:(.*?);/)[1]
+            var str = atob(base64[1])
+            var n = str.length
+            var array = new Uint8Array(n)
+            while (n--) {
+                array[n] = str.charCodeAt(n)
+            }
+            return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], { type: type })))
+        }
+        var extName = base64.split(',')[0].match(/data\:\S+\/(\S+);/)
+        if (extName) {
+            extName = extName[1]
+        } else {
+            reject(new Error('base64 error'))
+        }
+        var fileName = getNewFileId() + '.' + extName
+        if (typeof plus === 'object') {
+            var basePath = '_doc'
+            var dirPath = 'uniapp_temp'
+            var filePath = basePath + '/' + dirPath + '/' + fileName
+            if (!biggerThan(plus.os.name === 'Android' ? '1.9.9.80627' : '1.9.9.80472', plus.runtime.innerVersion)) {
+                plus.io.resolveLocalFileSystemURL(basePath, function(entry) {
+                    entry.getDirectory(dirPath, {
+                        create: true,
+                        exclusive: false,
+                    }, function(entry) {
+                        entry.getFile(fileName, {
+                            create: true,
+                            exclusive: false,
+                        }, function(entry) {
+                            entry.createWriter(function(writer) {
+                                writer.onwrite = function() {
+                                    resolve(filePath)
+                                }
+                                writer.onerror = reject
+                                writer.seek(0)
+                                writer.writeAsBinary(dataUrlToBase64(base64))
+                            }, reject)
+                        }, reject)
+                    }, reject)
+                }, reject)
+                return
+            }
+            var bitmap = new plus.nativeObj.Bitmap(fileName)
+            bitmap.loadBase64Data(base64, function() {
+                bitmap.save(filePath, {}, function() {
+                    bitmap.clear()
+                    resolve(filePath)
+                }, function(error) {
+                    bitmap.clear()
+                    reject(error)
+                })
+            }, function(error) {
+                bitmap.clear()
+                reject(error)
+            })
+            return
+        }
+        if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
+            var filePath = wx.env.USER_DATA_PATH + '/' + fileName
+            wx.getFileSystemManager().writeFile({
+                filePath: filePath,
+                data: dataUrlToBase64(base64),
+                encoding: 'base64',
+                success: function() {
+                    resolve(filePath)
+                },
+                fail: function(error) {
+                    reject(error)
+                }
+            })
+            return
+        }
+        reject(new Error('not support'))
+    })
+}

+ 11 - 0
js_sdk/mmmm-image-tools/package.json

@@ -0,0 +1,11 @@
+{
+    "id": "mmmm-image-tools",
+    "name": "image-tools",
+    "version": "1.4.0",
+    "description": "图像转换工具,可用于图像和base64的转换",
+    "keywords": [
+        "base64",
+        "保存",
+        "图像"
+    ]
+}

+ 31 - 0
main.js

@@ -0,0 +1,31 @@
+import Vue from 'vue'
+import App from './App'
+import store from '@/store';
+
+Vue.config.productionTip = false;
+
+App.mpType = 'app';
+
+// 引入全局uView
+import uView from 'uview-ui'
+Vue.use(uView);
+
+// 引入vuex
+const vuexStore = require("@/store/$u.mixin.js");
+Vue.mixin(vuexStore);
+
+// 创建对象
+const app = new Vue({
+	store,
+    ...App
+});
+
+// 接口集中管理
+import httpInstall from '@/http/install.js'
+Vue.use(httpInstall, app)
+
+// 公共函数
+import globalFunc from '@/utils/func.js'
+Vue.use(globalFunc, app);
+
+app.$mount()

+ 120 - 0
manifest.json

@@ -0,0 +1,120 @@
+{
+    "name" : "TSYWXT-CLOUD-APP",
+    "appid" : "__UNI__ED7D1E2",
+    "description" : "泰山电教维护服务",
+    "versionName" : "1.0.1",
+    "versionCode" : 101,
+    "transformPx" : false,
+    /* 5+App特有相关 */
+    "app-plus" : {
+        "compatible" : {
+            "ignoreVersion" : true
+        },
+        "safearea" : {
+            "bottom" : {
+                "offset" : "none"
+            }
+        },
+        "usingComponents" : true,
+        "nvueCompiler" : "uni-app",
+        "compilerVersion" : 3,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : false,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        /* 模块配置 */
+        "modules" : {
+            "Maps" : {}
+        },
+        /* 应用发布信息 */
+        "distribute" : {
+            /* android打包配置 */
+            "android" : {
+                "permissions" : [
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_CHECKIN_PROPERTIES\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_MOCK_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_SURFACE_FLINGER\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.INSTALL_PACKAGES\"/>",
+                    "<uses-permission android:name=\"android.permission.INTERNET\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ]
+            },
+            /* ios打包配置 */
+            "ios" : {},
+            /* SDK配置 */
+            "sdkConfigs" : {
+                "ad" : {},
+                "maps" : {
+                    "amap" : {
+                        "appkey_ios" : "2656439f05da583bdc52c71c0166ff86",
+                        "appkey_android" : "49a203cf65da9c928783ff36cdfeb878"
+                    }
+                },
+                "push" : {}
+            },
+            "splashscreen" : {
+                "androidStyle" : "default"
+            }
+        }
+    },
+    /* 快应用特有相关 */
+    "quickapp" : {},
+    /* 小程序特有相关 */
+    "mp-weixin" : {
+        "appid" : "wxfb185f8fbc51e643",
+        "setting" : {
+            "urlCheck" : false,
+            "minified" : true
+        },
+        "usingComponents" : true,
+        "unipush" : {
+            "enable" : false
+        }
+    },
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "h5" : {
+        "template" : "template.h5.html",
+        "router" : {
+            "mode" : "hash",
+            "base" : "/rider/"
+        },
+        "optimization" : {
+            "treeShaking" : {
+                "enable" : true
+            }
+        },
+        "sdkConfigs" : {
+            "maps" : {
+                "qqmap" : {
+                    "key" : "U7CBZ-D6LWX-OSJ4B-TJ5DU-WH746-7WBR4"
+                }
+            }
+        }
+    }
+}

+ 164 - 0
package-lock.json

@@ -0,0 +1,164 @@
+{
+  "name": "SHZHJCYJPTYWXTAPP",
+  "lockfileVersion": 2,
+  "requires": true,
+  "packages": {
+    "": {
+      "devDependencies": {
+        "browserslist": "^4.21.5",
+        "caniuse-lite": "^1.0.30001469"
+      }
+    },
+    "node_modules/browserslist": {
+      "version": "4.21.5",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
+      "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        }
+      ],
+      "dependencies": {
+        "caniuse-lite": "^1.0.30001449",
+        "electron-to-chromium": "^1.4.284",
+        "node-releases": "^2.0.8",
+        "update-browserslist-db": "^1.0.10"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      }
+    },
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001469",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz",
+      "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        }
+      ]
+    },
+    "node_modules/electron-to-chromium": {
+      "version": "1.4.337",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.337.tgz",
+      "integrity": "sha512-W8gdzXG86mVPoc56eM8YA+QiLxaAxJ8cmDjxZgfhLLWVvZQxyA918w5tX2JEWApZta45T1/sYcmFHTsTOUE3nw==",
+      "dev": true
+    },
+    "node_modules/escalade": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/node-releases": {
+      "version": "2.0.10",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
+      "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==",
+      "dev": true
+    },
+    "node_modules/picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+      "dev": true
+    },
+    "node_modules/update-browserslist-db": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+      "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        }
+      ],
+      "dependencies": {
+        "escalade": "^3.1.1",
+        "picocolors": "^1.0.0"
+      },
+      "bin": {
+        "browserslist-lint": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
+      }
+    }
+  },
+  "dependencies": {
+    "browserslist": {
+      "version": "4.21.5",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
+      "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
+      "dev": true,
+      "requires": {
+        "caniuse-lite": "^1.0.30001449",
+        "electron-to-chromium": "^1.4.284",
+        "node-releases": "^2.0.8",
+        "update-browserslist-db": "^1.0.10"
+      }
+    },
+    "caniuse-lite": {
+      "version": "1.0.30001469",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz",
+      "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==",
+      "dev": true
+    },
+    "electron-to-chromium": {
+      "version": "1.4.337",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.337.tgz",
+      "integrity": "sha512-W8gdzXG86mVPoc56eM8YA+QiLxaAxJ8cmDjxZgfhLLWVvZQxyA918w5tX2JEWApZta45T1/sYcmFHTsTOUE3nw==",
+      "dev": true
+    },
+    "escalade": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+      "dev": true
+    },
+    "node-releases": {
+      "version": "2.0.10",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
+      "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==",
+      "dev": true
+    },
+    "picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+      "dev": true
+    },
+    "update-browserslist-db": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+      "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
+      "dev": true,
+      "requires": {
+        "escalade": "^3.1.1",
+        "picocolors": "^1.0.0"
+      }
+    }
+  }
+}

+ 6 - 0
package.json

@@ -0,0 +1,6 @@
+{
+  "devDependencies": {
+    "browserslist": "^4.21.5",
+    "caniuse-lite": "^1.0.30001469"
+  }
+}

+ 686 - 0
pages.json

@@ -0,0 +1,686 @@
+{
+
+	"easycom": {
+		"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
+	},
+	//pages数组中第一项表示应用启动页
+	"pages": [{
+			"path": "pages/home/home",
+			"style": {
+				"navigationBarTitleText": "首页",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/serviceperson/servicepersonmanage",
+			"style": {
+				"navigationBarTitleText": "人员管理",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/serviceperson/servicepersonadd",
+			"style": {
+				"navigationBarTitleText": "人员添加",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/serviceperson/servicepersonedit",
+			"style": {
+				"navigationBarTitleText": "人员修改",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/home/start/start",
+			"style": {
+				"navigationBarTitleText": "开始页",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/checkorderlist",
+			"style": {
+				"navigationBarTitleText": "维修任务",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/orderadd",
+			"style": {
+				"navigationBarTitleText": "添加工单",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/processcheckorderlistview",
+			"style": {
+				"navigationBarTitleText": "维修任务",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/ordercloseapprove",
+			"style": {
+				"navigationBarTitleText": "工单完结审批",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/ordercostsapprove",
+			"style": {
+				"navigationBarTitleText": "工单费用审批",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/ordercancel",
+			"style": {
+				"navigationBarTitleText": "工单取消",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/photoView",
+			"style": {
+				"navigationBarTitleText": "图片预览",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/videoView",
+			"style": {
+				"navigationBarTitleText": "视频播放",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/servicepersoncheckorderlist",
+			"style": {
+				"navigationBarTitleText": "运维人员维修任务",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/companycheckorderlist",
+			"style": {
+				"navigationBarTitleText": "公司维修任务",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/comfiredelaycheckorderlist",
+			"style": {
+				"navigationBarTitleText": "确认超时维修任务",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/uncomfirecheckorderlistview",
+			"style": {
+				"navigationBarTitleText": "查看未确认维修任务",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/uncomfirecheckorderlist",
+			"style": {
+				"navigationBarTitleText": "新任务",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/completedcheckorderlist",
+			"style": {
+				"navigationBarTitleText": "维修历史",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+
+		},
+		{
+			"path": "pages/check-order/mycheckorderlist",
+			"style": {
+				"navigationBarTitleText": "我的工单",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+
+		},
+		{
+			"path": "pages/check-order/todaycheckorderrprocesseportlist",
+			"style": {
+				"navigationBarTitleText": "今日维修任务动态",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+
+		},
+		{
+			"path": "pages/check-order/rtu/rtucheckorderlist",
+			"style": {
+				"navigationBarTitleText": "测站工单",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+
+		},
+		{
+			"path": "pages/check-order/orderconfirm",
+			"style": {
+				"navigationBarTitleText": "维修任务确认",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/orderprocesschange",
+			"style": {
+				"navigationBarTitleText": "维修任务指派",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/manuallyaddcheckorder",
+			"style": {
+				"navigationBarTitleText": "人工派单",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+
+		},
+		{
+			"path": "pages/check-order/manuallyclosecheckorder",
+			"style": {
+				"navigationBarTitleText": "人工关闭",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+
+		},
+		{
+			"path": "pages/check-order/orderprocessreport",
+			"style": {
+				"navigationBarTitleText": "工单填报",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/check-order/orderprocessreportdetail",
+			"style": {
+				"navigationBarTitleText": "工单填报详情",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/equipment-inspection/inspectionlist",
+			"style": {
+				"navigationBarTitleText": "待巡检设备",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/equipment-inspection/finishedinspectionreportlist",
+			"style": {
+				"navigationBarTitleText": "已巡检设备",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/equipment-inspection/servicepersonfinishedinspectionreportlist",
+			"style": {
+				"navigationBarTitleText": "已巡检设备",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/equipment-inspection/companyfinishedinspectionreportlist",
+			"style": {
+				"navigationBarTitleText": "公司已巡检设备",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/equipment-inspection/equipmentinspectionreport",
+			"style": {
+				"navigationBarTitleText": "设备巡检填报",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+
+		},
+		{
+			"path": "pages/equipment-inspection/inspectionreportview",
+			"style": {
+				"navigationBarTitleText": "设备巡检填报页面",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+
+		},
+		{
+			"path": "pages/equipment-inspection/rtuinspectionreportview",
+			"style": {
+				"navigationBarTitleText": "设备巡检填报页面",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+
+		},
+		{
+			"path": "pages/equipment-inspection/inspectionreportdetail",
+			"style": {
+				"navigationBarTitleText": "设备巡检填报详情",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+
+		},
+		{
+			"path": "pages/equipment-inspection/inspectionreportlist",
+			"style": {
+				"navigationBarTitleText": "巡检填报信息",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/equipment-inspection/inspectionremainingproblemslist",
+			"style": {
+				"navigationBarTitleText": "巡检遗留问题",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+
+		},
+		{
+			"path": "pages/equipment-inspection/inspectionremainingproblemsclose",
+			"style": {
+				"navigationBarTitleText": "巡检遗留问题关闭处理",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+
+		},
+		{
+			"path": "pages/equipment-inspection/todayinspectionreportlist",
+			"style": {
+				"navigationBarTitleText": "今日巡检填报信息",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+
+		},
+		{
+			"path": "pages/rtu-manage/rtumanage",
+			"style": {
+				"navigationBarTitleText": "管理工作台",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/warning/rtuwarninglist",
+			"style": {
+				"navigationBarTitleText": "测站预警",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/warning/warninglist",
+			"style": {
+				"navigationBarTitleText": "预警信息",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/rtu-manage/rtudetail",
+			"style": {
+				"navigationBarTitleText": "测站详情",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/warning/warninginfodetail",
+			"style": {
+				"navigationBarTitleText": "预警信息",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/realdata/rtudata",
+			"style": {
+				"navigationBarTitleText": "测站数据",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/realdata/rturaindata",
+			"style": {
+				"navigationBarTitleText": "降水测站数据",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/realdata/rturiverdata",
+			"style": {
+				"navigationBarTitleText": "河道测站数据",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/realdata/rtugrounddata",
+			"style": {
+				"navigationBarTitleText": "墒情测站数据",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		}, {
+			"path": "pages/realdata/rtugrounddatadetail",
+			"style": {
+				"navigationBarTitleText": "测站实时数据信息",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/rtu-manage/rturealdatadetail",
+			"style": {
+				"navigationBarTitleText": "测站实时数据",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/report-forms/checkorderreportcount",
+			"style": {
+				"navigationBarTitleText": "维修任务统计报表",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/report-forms/inspectionreportcount",
+			"style": {
+				"navigationBarTitleText": "设备巡检统计报表",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/report-forms/orgcheckorderreportcount",
+			"style": {
+				"navigationBarTitleText": "维修任务统计报表",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/report-forms/orginspectionreportcount",
+			"style": {
+				"navigationBarTitleText": "设备巡检统计报表",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/report-forms/contact",
+			"style": {
+				"navigationBarTitleText": "通讯录",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/news/noticelist",
+			"style": {
+				"navigationBarTitleText": "公告列表",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/news/detail",
+			"style": {
+				"navigationBarTitleText": "公告详情",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/user/center",
+			"style": {
+				"navigationBarTitleText": "我的",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		}, 
+		{
+			"path": "pages/user/profile",
+			"style": {
+				"navigationBarTitleText": "个人资料",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		}, 
+		{
+			"path": "pages/user/about",
+			"style": {
+				"navigationBarTitleText": "关于",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		}, 
+		{
+			"path": "pages/user/font-setting",
+			"style": {
+				"navigationBarTitleText": "字体设置",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		}, 
+		{
+			"path": "pages/user/modify-password",
+			"style": {
+				"navigationBarTitleText": "修改密码",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/login/login-account",
+			"style": {
+				"navigationBarTitleText": "账号登录",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/system/setting",
+			"style": {
+				"navigationBarTitleText": "设置",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/yjxt/check/dangerareacheck",
+			"style": {
+				"navigationBarTitleText": "巡查巡检",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/yjxt/warn/yjwarnlist",
+			"style": {
+				"navigationBarTitleText": "预警响应",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/yjxt/warn/yjwarnqr",
+			"style": {
+				"navigationBarTitleText": "预警二维码",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/yjxt/transfer/residenttransferrecord",
+			"style": {
+				"navigationBarTitleText": "转移登记",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/yjxt/transfer/transferresidentlist",
+			"style": {
+				"navigationBarTitleText": "转移人员清单",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/yjxt/resident/dangerarearesidentrecord",
+			"style": {
+				"navigationBarTitleText": "群众登记",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/yjxt/resident/dangerarearesidentrecordlist",
+			"style": {
+				"navigationBarTitleText": "登记清单",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/yjxt/dangerarea/dangerarea",
+			"style": {
+				"navigationBarTitleText": "危险区",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/yjxt/dangerarea/dangerareamap",
+			"style": {
+				"navigationBarTitleText": "危险区地图",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/yjxt/dangerarealeaveline/leaveline",
+			"style": {
+				"navigationBarTitleText": "转移路线",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/yjxt/dangerarealeaveline/leavelinemap",
+			"style": {
+				"navigationBarTitleText": "转移路线地图",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/yjxt/warn/yjwarndetail",
+			"style": {
+				"navigationBarTitleText": "预警详情",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/yjxt/resident/dangerarearesidentlocation",
+			"style": {
+				"navigationBarTitleText": "定位补录",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/yjxt/resident/dangerarearesidentfamilylist",
+			"style": {
+				"navigationBarTitleText": "家庭成员表",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/yjxt/dangerarea/dangerareaqr",
+			"style": {
+				"navigationBarTitleText": "危险区二维码",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+		}
+	],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "",
+		"navigationBarBackgroundColor": "#fff",
+		"backgroundColor": "#F7F7F7"
+	},
+	"tabBar": {
+		"color": "#A6ABB5",
+		"selectedColor": "#0BB9C8",
+		"borderStyle": "white",
+		"backgroundColor": "#FFFFFF",
+		"list": [{
+				"pagePath": "pages/home/home",
+				"iconPath": "static/images/tabbar/home.png",
+				"selectedIconPath": "static/images/tabbar/home_selected.png",
+				"text": "运维"
+			},
+
+			{
+				"pagePath": "pages/user/center",
+				"iconPath": "static/images/tabbar/user.png",
+				"selectedIconPath": "static/images/tabbar/user_selected.png",
+				"text": "用户中心"
+			}
+		]
+	}
+}

+ 472 - 0
pages/check-order/checkorderlist.vue

@@ -0,0 +1,472 @@
+<!--
+ * @Title: 
+ * @Description: 运维工单列表
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<view v-if="permission.orgAdmin || (permission.companyServciePerson && postName=='servicePerson')"
+				class="view-flex-inline-center">
+				<view style="width: 90%;margin-top: 20px;margin-bottom: 20px;">
+					<button type="warn" @click="onCreateOrderClick">立即发起工单</button>
+				</view>
+			</view>
+			<uni-section title="工单查询" type="circle">
+				<view class="search-block">
+					<view style="margin-top: 10px;padding-left: 0px;padding-right: 0px;">
+						<view class="select-checkbox">
+							<uni-data-checkbox v-model="orderStatusOption" :localdata="orderStatusItems">
+							</uni-data-checkbox>
+						</view>
+					</view>
+					<view class="submit-btn">
+						<button type="default" @click="search">查 询</button>
+					</view>
+				</view>
+			</uni-section>
+			<uni-section title="工单列表信息" type="circle">
+				<uni-list>
+					<uni-list-item v-for="item in list" :key="item.id" direction="column">
+						<template v-slot:body>
+							<view class="list-item-block">
+								<view class="line">
+									<uni-icons class="input-uni-icon" type="gear" size="18" color="lightblue" />
+									<view v-if="item.orderType==1" class="text" style="color: gray;">工单类型:<span
+											style="margin-left: 5px;color: cornflowerblue;">维修工单</span></view>
+									<view v-else-if="item.orderType==2" class="text" style="color: gray;">工单类型:<span
+											style="margin-left: 5px;color: cornflowerblue;">服务工单</span></view>
+									<view v-else></view>
+								</view>
+								<view class="line">
+									<uni-icons class="input-uni-icon" type="refresh" size="18" color="lightblue" />
+									<view class="text" style="color: gray;">工单状态:<span
+											style="margin-left: 10px;color: cornflowerblue;">{{item.orderStatusName}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<uni-icons class="input-uni-icon" type="personadd" size="18" color="lightblue" />
+									<view class="text" style="color: gray;">工单发起人:<span
+											style="margin-left: 10px;color: cornflowerblue;">{{item.createOrderPersonName}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+									<view class="text" style="color: gray;">发起时间:<span
+											style="margin-left: 10px;color: cornflowerblue;">{{item.createTime}}</span>
+									</view>
+								</view>
+								<view v-if="item.orderType==1" class="line">
+									<uni-icons class="input-uni-icon" type="help" size="18" color="lightblue" />
+									<view class="text text-ellipsis" style="color: gray;width: 90%;"
+										@click="toOrderProcessDetail(item)">故障问题描述:<span class="text-underline"
+											style="margin-left: 10px;color: cornflowerblue;">{{item.orderDesc}}</span>
+									</view>
+								</view>
+								<view v-else class="line">
+									<uni-icons class="input-uni-icon" type="help" size="18" color="lightblue" />
+									<view class="text text-ellipsis" style="color: gray;width: 90%;"
+										@click="toOrderProcessDetail(item)">服务内容描述:<span class="text-underline"
+											style="margin-left: 10px;color: cornflowerblue;">{{item.orderDesc}}</span>
+									</view>
+								</view>
+							</view>
+						</template>
+					</uni-list-item>
+				</uni-list>
+			</uni-section>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+
+	export default {
+		components: {},
+		data() {
+			return {
+				title: '运维工单',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				postName: '',
+				searchorderstatus: ['0'],
+				searchwarnstatus: [],
+				orderStatusItems: [{
+					'value': 0,
+					'text': '全部'
+				}, {
+					'value': 2,
+					'text': '待处理工单'
+				}, {
+					'value': 4,
+					'text': '费用待审批工单'
+				}, {
+					'value': 6,
+					'text': '完结待审批工单'
+				}, {
+					'value': 7,
+					'text': '工单完结'
+				}],
+				orderStatusOption: 0,
+				countInfo: {
+					orderCount: 0,
+					orderUnconfirm: 0,
+					orderProcessing: 0,
+					reportOrder: 0
+				},
+				warnKindItems: [{
+					'value': 0,
+					'text': '全部'
+				}, {
+					'value': 1,
+					'text': '离线'
+				}, {
+					'value': 2,
+					'text': '时钟异常'
+				}, {
+					'value': 3,
+					'text': '雨量漏报'
+				}, {
+					'value': 4,
+					'text': '水位漏报'
+				}, {
+					'value': 5,
+					'text': '5分钟上报延时'
+				}, {
+					'value': 6,
+					'text': '雨量小时上报延时'
+				}, {
+					'value': 7,
+					'text': '水位小时上报延时'
+				}, {
+					'value': 8,
+					'text': '雨量疑似异常值'
+				}],
+				warnKindOption: 0,
+				selectUnconfirm: 0,
+				selectProcess: 0,
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				regionTree: [],
+				regionCode: '',
+				selectedTreeNode: '',
+				searchRtuNameVal: '',
+				searchRtuCodeVal: '',
+				query: {},
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				}
+			}
+		},
+		computed: {
+
+		},
+		onLoad(option) {
+			this.permission.admin = false;
+			this.permission.orgAdmin = false;
+			this.permission.companyAdmin = false;
+			this.permission.companyServciePerson = false;
+			if (this.userInfo.role_name === role.admin) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role.orgAdmin) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role.companyAdmin) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role.companyServciePerson) {
+				this.permission.companyServciePerson = true;
+				if (this.userInfo.post_id == '1706859505948098562') {
+					this.postName = "engineer";
+				} else if (this.userInfo.post_id == '1730535542909140993') {
+					this.postName = "servicePerson";
+				}
+			}
+			this.pageCurrent = 1;
+			this.getPage()
+		},
+		onShow() {
+			this.permission.admin = false;
+			this.permission.orgAdmin = false;
+			this.permission.companyAdmin = false;
+			this.permission.companyServciePerson = false;
+			if (this.userInfo.role_name === role.admin) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role.orgAdmin) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role.companyAdmin) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role.companyServciePerson) {
+				this.permission.companyServciePerson = true;
+				if (this.userInfo.post_id == '1706859505948098562') {
+					this.postName = "engineer";
+				} else if (this.userInfo.post_id == '1730535542909140993') {
+					this.postName = "servicePerson";
+				}
+			}
+		},
+		methods: {
+			//返回上一页
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			//行政区划选择
+			onTreeNodeClick(node) {
+				console.log(JSON.stringify(node))
+			},
+			onTreePopupOpened(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreePopupClosed(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreeChange(e) {
+				console.log(JSON.stringify(e))
+				let nodes = e.detail.value;
+				if (nodes.length > 0) {
+					let node = nodes[nodes.length - 1];
+					this.regionCode = node.value;
+					this.query = {};
+					this.query['adCode'] = this.regionCode;
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+					this.getCountInfo(this.regionCode);
+				} else {
+					this.regionCode = '';
+					this.query = {};
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+					this.getCountInfo(this.regionCode);
+				}
+			},
+			onCreateOrderClick() {
+				let url = '/pages/check-order/orderadd';
+				uni.navigateTo({
+					url: url
+				})
+			},
+			toOrderProcessDetail(item) {
+				let url = '/pages/check-order/processcheckorderlistview?orderType=' + item.orderType + '&orderId=' + item
+					.id + '&orderClose=' + item.orderClose + '&orderRate=' + item.orderRate;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			//录入查询
+			search() {
+				this.pageCurrent = 1;
+				let params = {};
+				params['orderStatusOption'] = this.orderStatusOption;
+				this.getPage(params);
+			},
+			searchRtuNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuNameVal = '';
+					if (this.searchRtuNameVal.length == 0) {
+						let params = {};
+						if (this.searchRtuCodeVal.length > 0) {
+							params['rtuCode'] = this.searchRtuCodeVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			searchRtuCodeValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuCodeVal = '';
+					if (this.searchRtuCodeVal.length == 0) {
+						let params = {};
+						if (this.searchRtuNameVal.length > 0) {
+							params['rtuName'] = this.searchRtuNameVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			call(phone) {
+				console.log(phone)
+				uni.showModal({
+					content: '是否需要拨打[' + phone + ']?',
+					showCancel: true,
+					success(res) {
+						if (res.confirm) {
+							uni.makePhoneCall({
+								phoneNumber: phone
+							});
+						}
+					}
+				});
+			},
+			onDetailViewClick(id) {
+				let url = '/pages/check-order/orderprocessreportdetail?orderId=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onCheckOrderChangeClick(item) {
+				let contactUserName = '无';
+				if (item.orderConfirm == 1) {
+					contactUserName = item.contactUserName;
+				}
+				let url = '/pages/check-order/orderprocesschange?orderId=' + item.id + "&contactUserName=" +
+					contactUserName;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onLocationClick(item) {
+				if (item.lat && item.lat) {
+					let lat = item.lat;
+					let lng = item.lng;
+					let name = item.rtuName;
+					let add = '';
+					if (item.locationDesc) {
+						add = item.locationDesc;
+					}
+					uni.openLocation({
+						latitude: Number(lat),
+						longitude: Number(lng),
+						name: name,
+						address: "",
+						success() {}
+					})
+				} else {
+					uni.showModal({
+						content: '经纬度为空,请确认!',
+						showCancel: true,
+						success(res) {
+							if (res.confirm) {
+
+							}
+						}
+					});
+				}
+			},
+			onManuallyCloseOrderClick(id) {
+				uni.navigateTo({
+					url: '/pages/check-order/manuallyclosecheckorder?id=' + id
+				})
+			},
+			onComfireCheckOrderClick(id) {
+				let url =
+					'/pages/check-order/orderconfirm?id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			orderStatusOptionChange: function(evt) {
+				console.log(JSON.stringify(evt))
+				console.log(this.orderStatusOption)
+				this.pageCurrent = 1;
+				let params = {};
+				this.getPage(params);
+			},
+			warnKindOptionChange: function(evt) {
+				let params = {};
+				this.pageCurrent = 1;
+				this.getPage(params);
+			},
+			getRegionTree() {
+				var that = this;
+				http.request({
+					url: '/galaxy-business/baseinfo/region/tree',
+					method: 'GET',
+				}).then(res => {
+					if (res.data != null) {
+						that.regionTree = res.data;
+						that.regionCode = that.regionTree[0].id;
+						that.selectedTreeNode = that.regionTree[0].id;
+						that.query = {};
+						that.query['adCode'] = that.regionCode;
+						that.getPage();
+						that.getCountInfo(that.regionCode);
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			getCountInfo(adCode) {
+				let that = this;
+				http.request({
+					url: '/galaxy-business/rtu/check/order/count',
+					method: 'GET',
+					data: {
+						adCode
+					}
+				}).then(res => {
+					that.countInfo = res.data;
+				})
+			},
+			getPage(params = {}) {
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/order/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.select-checkbox {
+		margin-top: 0px;
+		margin-bottom: 5px;
+		padding-left: 15px;
+	}
+</style>

+ 192 - 0
pages/check-order/comfiredelaycheckorderlist.vue

@@ -0,0 +1,192 @@
+<!--
+ * @Title: 
+ * @Description: 确认超时维修任务列表
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+									src="/static/images/list/order_item.png" mode="widthFix">
+								</image>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="item-text-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+								<text class="item-text-lable">创建时长:</text>
+								<text class="item-text-content" style="color: red;">{{item.taskCreateDuration}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="location" size="18" color="lightblue" />
+								<text class="item-text-lable">行政区划:</text>
+								<text class="item-text-content">{{item.areaName}}</text>
+							</view>
+							<view class="item-text-line">
+								<uni-icons class="input-uni-icon" type="home" size="18" color="lightblue" />
+								<text class="item-text-lable">运维公司:</text>
+								<text class="item-text-content">
+									{{item.manageCompany}}
+								</text>
+							</view>
+							<view class="item-text-line">
+								<uni-icons class="input-uni-icon" type="auth" size="18" color="lightblue" />
+								<text class="item-text-lable">运维公司管理员:</text>
+								<text class="item-text-content">{{item.manageCompanyAdminName}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="phone" size="18" color="lightblue" />
+								<text class="item-text-lable">联系电话:</text>
+								<view v-if="item.manageCompanyAdminPhone != null" @click="call(item.manageCompanyAdminPhone)">
+									<text class="item-text-content-phone">{{item.manageCompanyAdminPhone}}</text>
+								</view>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button" @click="call(item.manageCompanyAdminPhone)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="phone" size="18" color="coral" />
+										<text class="button-text">电 话</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+	export default {
+		components: {},
+		onLoad(option) {
+			if (this.userInfo.role_name === role['admin']) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role['orgAdmin']) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role['companyAdmin']) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role['companyServciePerson']) {
+				this.permission.companyServciePerson = true;
+			}
+			this.pageCurrent = 1;
+			this.getPage()
+		},
+		data() {
+			return {
+				title: '确认超时维修任务',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				query: {},
+			}
+		},
+		computed: {},
+		onShow() {},
+		methods: {
+			//返回上一页
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			call(phone) {
+				console.log(phone)
+				uni.showModal({
+					content: '是否需要拨打[' + phone + ']?',
+					showCancel: true,
+					success(res) {
+						if (res.confirm) {
+							uni.makePhoneCall({
+								phoneNumber: phone
+							});
+						}
+					}
+				});
+			},
+			getPage(params = {}) {
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/rtu/check/order/confirm/delay/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.nav-title {
+		width: 100%;
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+
+		text {
+			color: white;
+			font-size: 1rem;
+		}
+	}
+
+	.container {
+		padding: 0 0 100rpx;
+	}
+</style>

+ 287 - 0
pages/check-order/companycheckorderlist.vue

@@ -0,0 +1,287 @@
+<!--
+ * @Title: 
+ * @Description: 当前维修任务列表
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id" showArrow clickable
+					@click="onOrderReportItemClick(item.id)">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+									src="/static/images/list/order_item.png" mode="widthFix">
+								</image>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="list" size="18" color="lightblue" />
+								<text class="item-text-lable">维修状态:</text>
+								<text v-if="item.orderStatus==1" class="item-text-content"
+									style="color: red;">等待确认</text>
+								<text v-if="item.orderStatus==2" class="item-text-content"
+									style="color: orange;">处理中</text>
+								<text v-if="item.orderStatus==3" class="item-text-content"
+									style="color: blue;">已处理</text>
+								<text v-if="item.orderStatus==4" class="item-text-content"
+									style="color: green;">已完成</text>
+							</view>
+							<view v-if="item.orderStatus==1" class="items-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+								<text class="item-text-lable">创建时长:</text>
+								<text class="item-text-content" style="color: red;">{{item.taskCreateDuration}}</text>
+							</view>
+							<view v-else class="items-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+								<text class="item-text-lable">维修时长:</text>
+								<text class="item-text-content" style="color: red;">{{item.taskProcessDuration}}</text>
+							</view>
+
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="location" size="18" color="lightblue" />
+								<text class="item-text-lable">行政区划:</text>
+								<text class="item-text-content">{{item.areaName}}</text>
+							</view>
+							<view v-if="item.orderStatus==1" class="items-line">
+								<uni-icons class="input-uni-icon" type="person" size="18" color="lightblue" />
+								<text class="item-text-lable">运维公司管理员:</text>
+								<text class="item-text-content">{{item.manageCompanyAdminName}}</text>
+							</view>
+							<view v-else class="items-line">
+								<uni-icons class="input-uni-icon" type="person" size="18" color="lightblue" />
+								<text class="item-text-lable">处理人:</text>
+								<text class="item-text-content">{{item.contactUserName}}</text>
+							</view>
+							<view v-if="item.orderStatus==1" class="items-line">
+								<uni-icons class="input-uni-icon" type="phone" size="18" color="lightblue" />
+								<text class="item-text-lable">联系电话:</text>
+								<view v-if="item.manageCompanyAdminPhone != null" @click="call(item.manageCompanyAdminPhone)">
+									<text class="item-text-content-phone">{{item.manageCompanyAdminPhone}}</text>
+								</view>
+							</view>
+							<view v-else class="items-line">
+								<uni-icons class="input-uni-icon" type="phone" size="18" color="lightblue" />
+								<text class="item-text-lable">联系电话:</text>
+								<view v-if="item.contactPhone != null"
+									@click="call(item.contactPhone)">
+									<text class="item-text-content-phone">{{item.contactPhone}}</text>
+								</view>
+							</view>
+							<view v-if="item.orderStatus==3" class="item-button-group">
+								<view class="item-button" style="background-color:lightblue"
+									@click="onOrderReportItemClick(item.id)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">维修详情</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+
+	export default {
+		components: {},
+		onLoad(option) {
+			if (this.userInfo.role_name === role['admin']) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role['orgAdmin']) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role['companyAdmin']) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role['companyServciePerson']) {
+				this.permission.companyServciePerson = true;
+			}
+			this.type = option.type;
+			if (this.type == '1') {
+				this.query['orderClose'] = 0;
+				this.title = "全部维修任务信息";
+			} else if (this.type == '2') {
+				this.query['orderStatus'] = 1;
+				this.query['orderClose'] = 0;
+				this.title = "未确认维修任务信息";
+			} else if (this.type == '3') {
+				this.query['orderStatus'] = 2;
+				this.query['orderClose'] = 0;
+				this.title = "处理中维修任务信息";
+			} else if (this.type == '4') {
+				this.query['orderStatus'] = 3;
+				this.query['orderClose'] = 0;
+				this.title = "已处理维修任务信息";
+			}
+			let deptId = option.deptId;
+			if (null != deptId) {
+				this.query['deptId'] = deptId;
+			}
+			this.pageCurrent = 1;
+			this.getPage()
+		},
+		data() {
+			return {
+				title: '维修任务信息',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				type: '',
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				query: {},
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				}
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+
+		},
+		methods: {
+			//返回上一页
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			call(phone) {
+				console.log(phone)
+				uni.showModal({
+					content: '是否需要拨打[' + phone + ']?',
+					showCancel: true,
+					success(res) {
+						if (res.confirm) {
+							uni.makePhoneCall({
+								phoneNumber: phone
+							});
+						}
+					}
+				});
+			},
+			onDetailViewClick(id) {
+				let url = '/pages/check-order/orderprocessreportdetail?orderId=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onLocationClick(item) {
+				let lat = item.lat;
+				let lng = item.lng;
+				let name = item.rtuName;
+				let add = item.locationDesc;
+				uni.openLocation({
+					latitude: Number(lat),
+					longitude: Number(lng),
+					name: name,
+					address: "",
+					success() {}
+				})
+			},
+			onOrderReportItemClick(id) {
+				console.log("opne record ", id)
+				var url = '/pages/check-order/orderprocessreportdetail?orderId=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onManuallyCloseOrderClick(id) {
+				uni.navigateTo({
+					url: '/pages/check-order/manuallyclosecheckorder?id=' + id
+				})
+			},
+			onComfireCheckOrderClick(id) {
+				let url =
+					'/pages/check-order/orderconfirm?id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			getPage(params = {}) {
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/rtu/check/order/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.nav-title {
+		width: 100%;
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+
+		text {
+			color: white;
+			font-size: 1rem;
+		}
+	}
+
+	.container {
+		padding: 0 0 100rpx;
+	}
+</style>

+ 357 - 0
pages/check-order/completedcheckorderlist.vue

@@ -0,0 +1,357 @@
+<!--
+ * @Title: 
+ * @Description: 当前维修任务列表
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-section title="查询" type="line">
+				<view class="search-block">
+					<view class="adcd-adnm">
+						<uni-data-picker placeholder="请选择地区" popup-title="请选择所在地区" :localdata="regionTree"
+							v-model="selectedTreeNode" @change="onTreeChange" @nodeclick="onTreeNodeClick"
+							@popupopened="onTreePopupOpened" @popupclosed="onTreePopupClosed" :clear-icon="false">
+						</uni-data-picker>
+					</view>
+					<view class="rtu-code">
+						<uni-easyinput :styles="inputStyles" @input="searchRtuCodeValClear" prefixIcon="search"
+							v-model="searchRtuCodeVal" placeholder="请输入测站编码">
+						</uni-easyinput>
+					</view>
+					<view class="rtu-name">
+						<uni-easyinput :styles="inputStyles" @input="searchRtuNameValClear" prefixIcon="search"
+							v-model="searchRtuNameVal" placeholder="请输入测站名称">
+						</uni-easyinput>
+					</view>
+					<view class="submit-btn">
+						<button type="default" @click="search">查 询</button>
+					</view>
+				</view>
+			</uni-section>
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+									src="/static/images/list/order_item.png" mode="widthFix">
+								</image>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="loop" size="18" color="lightblue" />
+								<text class="item-text-lable">维修时长:</text>
+								<text class="item-text-content" style="color: red;">{{item.taskProcessDuration}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="location" size="18" color="lightblue" />
+								<text class="item-text-lable">行政区划:</text>
+								<text class="item-text-content">{{item.areaName}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="home" size="18" color="lightblue" />
+								<text class="item-text-lable">运维公司:</text>
+								<text class="item-text-content">
+									{{item.manageCompany}}
+								</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="person" size="18" color="lightblue" />
+								<text class="item-text-lable">填报人:</text>
+								<text class="item-text-content">{{item.processUserName}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="phone" size="18" color="lightblue" />
+								<text class="item-text-lable">联系电话:</text>
+								<view v-if="item.processUserPhone != null" @click="call(item.processUserPhone)">
+									<text class="item-text-content-phone">{{item.processUserPhone}}</text>
+								</view>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button" @click="call(item.processUserPhone)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="phone" size="18" color="coral" />
+										<text class="button-text">电话</text>
+									</view>
+								</view>
+								<view class="item-button" @click="onDetailViewClick(item.id)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">维修详情</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+
+	export default {
+		components: {
+
+		},
+		onLoad(option) {
+			if (this.userInfo.role_name === role['admin']) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role['orgAdmin']) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role['companyAdmin']) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role['companyServciePerson']) {
+				this.permission.companyServciePerson = true;
+			}
+			this.getRegionTree();
+		},
+		data() {
+			return {
+				title: '维修任务历史信息',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				regionTree: [],
+				regionCode: '',
+				selectedTreeNode: '',
+				searchRtuNameVal: '',
+				searchRtuCodeVal: '',
+				query: {},
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				}
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+			this.pageCurrent = 1;
+			this.getPage()
+		},
+		methods: {
+			//返回上一页
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			//行政区划选择
+			onTreeNodeClick(node) {
+				console.log(JSON.stringify(node))
+			},
+			onTreePopupOpened(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreePopupClosed(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreeChange(e) {
+				console.log(JSON.stringify(e))
+				let nodes = e.detail.value;
+				if (nodes.length > 0) {
+					let node = nodes[nodes.length - 1];
+					this.regionCode = node.value;
+					this.query = {};
+					this.query['adCode'] = this.regionCode;
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+
+				} else {
+					this.regionCode = '';
+					this.query = {};
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+
+				}
+			},
+			//录入查询
+			search() {
+				this.pageCurrent = 1;
+				let params = {};
+				if (this.searchRtuCodeVal.length > 0) {
+					params['rtuCode'] = this.searchRtuCodeVal;
+				}
+				if (this.searchRtuNameVal.length > 0) {
+					params['rtuName'] = this.searchRtuNameVal;
+				}
+				this.getPage(params);
+			},
+			searchRtuNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuNameVal = '';
+					if (this.searchRtuNameVal.length == 0) {
+						let params = {};
+						if (this.searchRtuCodeVal.length > 0) {
+							params['rtuCode'] = this.searchRtuCodeVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			searchRtuCodeValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuCodeVal = '';
+					if (this.searchRtuCodeVal.length == 0) {
+						let params = {};
+						if (this.searchRtuNameVal.length > 0) {
+							params['rtuName'] = this.searchRtuNameVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			call(phone) {
+				console.log(phone)
+				uni.showModal({
+					content: '是否需要拨打[' + phone + ']?',
+					showCancel: true,
+					success(res) {
+						if (res.confirm) {
+							uni.makePhoneCall({
+								phoneNumber: phone
+							});
+						}
+					}
+				});
+			},
+			onDetailViewClick(id) {
+				let url = '/pages/check-order/orderprocessreportdetail?orderId=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onLocationClick(item) {
+				let lat = item.lat;
+				let lng = item.lng;
+				let name = item.rtuName;
+				let add = item.locationDesc;
+				uni.openLocation({
+					latitude: Number(lat),
+					longitude: Number(lng),
+					name: name,
+					address: "",
+					success() {}
+				})
+			},
+			onManuallyCloseOrderClick(id) {
+				uni.navigateTo({
+					url: '/pages/check-order/manuallyclosecheckorder?id=' + id
+				})
+			},
+			onComfireCheckOrderClick(id) {
+				let url =
+					'/pages/check-order/orderconfirm?id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			getRegionTree() {
+				var that = this;
+				http.request({
+					url: '/galaxy-business/baseinfo/region/tree',
+					method: 'GET',
+				}).then(res => {
+					if (res.data != null) {
+						that.regionTree = res.data;
+						that.regionCode = that.regionTree[0].id;
+						that.selectedTreeNode = that.regionTree[0].id;
+						that.query = {};
+						that.query['adCode'] = that.regionCode;
+						that.getPage();
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			getPage(params = {}) {
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				params['orderClose'] = 1;
+				params['orderReportStatus'] = 1;
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/rtu/check/order/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.nav-title {
+		width: 100%;
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+
+		text {
+			color: white;
+			font-size: 1rem;
+		}
+	}
+
+	.container {
+		padding: 0 0 100rpx;
+	}
+</style>

+ 122 - 0
pages/check-order/manuallyaddcheckorder.vue

@@ -0,0 +1,122 @@
+<!--
+ * @Title: 
+ * @Description: 人工派单
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view style="width: 100%;display: flex;flex-direction: row;justify-content: center;align-items: center;">
+				<text style="color: white;font-size: 1rem;">{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-section title="任务说明" type="circle">
+				<view style="margin-top: 20px;margin-bottom: 40px;;padding-left: 10px;padding-right: 10px;">
+					<uni-easyinput :styles="inputStyles" prefixIcon="search" v-model="orderDesc" placeholder="请输入任务说明">
+					</uni-easyinput>
+				</view>
+			</uni-section>
+			<view style="margin-top: 10px;margin-bottom: 10px;padding-left: 10px;padding-right: 10px;">
+				<button style="background-color: lightcoral;" type="default"
+					@click="onCheckOrderSubmitClick()">提交任务</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+
+	export default {
+		components: {
+
+		},
+		onLoad(option) {
+			this.rtuCode = option.rtuCode;
+		},
+		data() {
+			return {
+				rtuCode: '',
+				orderDesc: '',
+				title: '人工添加维修任务',
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				},
+				checkOrderForm: {
+					id: '',
+					rtuName: '',
+					rtuCode: '',
+					orderDesc: '',
+				},
+				query: {}
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+
+		},
+		created() {
+
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onCheckOrderSubmitClick() {
+				let that = this;
+				this.checkOrderForm['rtuCode'] = this.rtuCode;
+				this.checkOrderForm['orderDesc'] = this.orderDesc;
+				let postData = Object.assign(this.checkOrderForm, this.query);
+				http.request({
+					url: '/galaxy-business/rtu/check/order/manually',
+					method: 'POST',
+					data: postData
+				}).then(res => {
+					if (res.success) {
+						uni.showModal({
+							content: '人工派单操作已成功!',
+							showCancel: true,
+							success(res) {
+								if (res.confirm) {
+									that.toBack();
+								}
+							}
+						});
+					} else {
+						uni.showModal({
+							content: '人工派单操作失败!',
+							showCancel: true,
+							success(res) {
+
+							}
+						});
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.container {
+		padding: 0 0 150rpx;
+	}
+</style>

+ 122 - 0
pages/check-order/manuallyclosecheckorder.vue

@@ -0,0 +1,122 @@
+<!--
+ * @Title: 
+ * @Description: 人工关闭工单
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view style="width: 100%;display: flex;flex-direction: row;justify-content: center;align-items: center;">
+				<text style="color: white;font-size: 1rem;">{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-section title="关闭任务说明" type="circle">
+				<view style="margin-top: 20px;margin-bottom: 40px;;padding-left: 10px;padding-right: 10px;">
+					<uni-easyinput :styles="inputStyles" prefixIcon="search" v-model="orderDesc" placeholder="请输入处理意见">
+					</uni-easyinput>
+				</view>
+			</uni-section>
+			<view style="margin-top: 10px;margin-bottom: 10px;padding-left: 10px;padding-right: 10px;">
+				<button style="background-color: lightcoral;" type="default"
+					@click="onCheckOrderSubmitClick()">提交任务</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+
+	export default {
+		components: {
+
+		},
+		onLoad(option) {
+			this.id = option.id;
+		},
+		data() {
+			return {
+				id: '',
+				orderDesc: '',
+				title: '人工关闭维修任务',
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				},
+				checkOrderForm: {
+					id: '',
+					rtuName: '',
+					rtuCode: '',
+					orderDesc: '',
+				},
+				query: {}
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+
+		},
+		created() {
+
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onCheckOrderSubmitClick() {
+				let that = this;
+				this.checkOrderForm['id'] = this.id;
+				this.checkOrderForm['orderDesc'] = this.orderDesc;
+				let postData = Object.assign(this.checkOrderForm, this.query);
+				http.request({
+					url: '/galaxy-business/rtu/check/order/close',
+					method: 'POST',
+					params: postData
+				}).then(res => {
+					if (res.success) {
+						uni.showModal({
+							content: '人工关闭维修任务操作成功!',
+							showCancel: true,
+							success(res) {
+								if (res.confirm) {
+									that.toBack();
+								}
+							}
+						});
+					} else {
+						uni.showModal({
+							content: '人工关闭维修任务操作失败!',
+							showCancel: true,
+							success(res) {
+
+							}
+						});
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.container {
+		padding: 0 0 150rpx;
+	}
+</style>

+ 181 - 0
pages/check-order/mycheckorderlist.vue

@@ -0,0 +1,181 @@
+<!--
+ * @Title: 
+ * @Description: 我的维修任务列表
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" status-bar left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<view class="block">
+									<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+										src="/static/images/list/order_item.png" mode="widthFix">
+									</image>
+								</view>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="loop" size="18" color="lightblue" />
+								<text class="item-text-lable">维修时长:</text>
+								<text class="item-text-content" style="color: red;">{{item.taskProcessDuration}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="location" size="18" color="lightblue" />
+								<text class="item-text-lable">行政区划:</text>
+								<text class="item-text-content">{{item.areaName}}</text>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button"
+									@click="onLocationClick(item)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="location" size="18" color="coral" />
+										<text class="button-text">导航</text>
+									</view>
+								</view>
+								<view class="item-button"
+									@click="onReportDetailClick(item.id)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">维修详情</text>
+									</view>
+								</view>
+								<view class="item-button" @click="onCheckOrderReportEditClick(item.id)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="compose" size="18" color="coral" />
+										<text class="button-text">维修填报</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+
+
+	export default {
+		components: {
+
+		},
+		onLoad(option) {
+			this.getPage();
+		},
+		data() {
+			return {
+				list: [],
+				title: '我的维修任务',
+				desc: '',
+				pageSize: 10,
+				// 当前页
+				pageCurrent: 1,
+				// 数据总量
+				total: 0,
+				query: {},
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+
+		},
+		created() {
+
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			getPage() {
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let that = this;
+				http.request({
+					url: '/galaxy-business/rtu/check/order/my/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			onCheckOrderReportEditClick(id) {
+				console.log("iddd" + id)
+				var url = '/pages/check-order/orderprocessreport?orderId=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onReportDetailClick(id) {
+				let url = '/pages/check-order/orderprocessreportdetail?orderId=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onLocationClick(item) {
+				let lat = item.lat;
+				let lng = item.lng;
+				let name = item.rtuName;
+				let add = item.locationDesc;
+				uni.openLocation({
+					latitude: Number(lat),
+					longitude: Number(lng),
+					name: name,
+					address: add,
+					success() {
+
+					}
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+
+</style>

+ 433 - 0
pages/check-order/orderadd.vue

@@ -0,0 +1,433 @@
+<!--
+ * @Title: 
+ * @Description: 工单创建
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view style="width: 100%;display: flex;flex-direction: row;justify-content: center;align-items: center;">
+				<text style="color: white;font-size: 1rem;">{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<uni-forms ref="baseForm" :model="formData" :rules="rules">
+			<uni-group>
+				<view class="view-flex-inline">
+					<text style="color: black;font-size: 1rem;margin-bottom: 10px;">工单类型</text>
+				</view>
+				<uni-forms-item v-if="permission.orgAdmin" name="orderType" label-width="0px" required>
+					<uni-data-checkbox v-model="formData.orderType" :localdata="orderTypeOption.items">
+					</uni-data-checkbox>
+				</uni-forms-item>
+				<uni-forms-item v-else-if="permission.companyServciePerson" label-width="0px">
+					<view class="view-flex-inline">
+						<text class="text" style="color: gray;">当前角色仅支持创建维修工单</text>
+					</view>
+				</uni-forms-item>
+				<uni-forms-item v-else label-width="0px">
+				</uni-forms-item>
+				<view class="view-flex-inline">
+					<text style="color: black;font-size: 1rem;margin-bottom: 10px;">问题描述</text>
+				</view>
+				<uni-forms-item name='orderDesc' label-width="0px" required>
+					<uni-easyinput :styles="styles" type="textarea" :autoHeight="true" v-model="formData.orderDesc"
+						placeholder="请描述您遇到的问题" />
+				</uni-forms-item>
+			</uni-group>
+			<uni-card title="拍摄照片" extra="点击下方按钮开始拍摄" :is-shadow="false">
+				<view class="view-flex-rs-flex-wrap">
+					<view v-for="(item, index) in orderPhotos" :key="index" class="view-flex-cc" style="width: 80px;">
+						<view class="img-container">
+							<view class="note-image-box">
+								<view class="note-image-item">
+									<view class="close-icon" @click="onPhotoDel(index)">
+										<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+									</view>
+									<view class="image-box">
+										<image :src="toOss(item)" mode="widthFix">
+										</image>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+					<view class="view-flex-cc" style="width: 80px;">
+						<view class="img-container">
+							<view class="note-image-box">
+								<view class="note-image-item" @click="onCheckPhotoAdd()">
+									<view class="image-box">
+										<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</uni-card>
+			<uni-card title="拍摄视频" extra="点击下方按钮开始拍摄" :is-shadow="false">
+				<view class="view-flex-rs-flex-wrap">
+					<view v-for="(item, index) in orderVideos" :key="index" class="view-flex-cc" style="width: 80px;">
+						<view class="img-container">
+							<view class="note-image-box">
+								<view class="note-image-item">
+									<view class="close-icon" @click="onVideoDel(index)">
+										<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+									</view>
+									<view class="image-box">
+										<image :src="videoImg" mode="widthFix" @click="openVideo(item)">
+										</image>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+					<view class="view-flex-cc" style="width: 80px;">
+						<view class="img-container">
+							<view class="note-image-box">
+								<view class="note-image-item" @click="onCheckVideoAdd()">
+									<view class="image-box">
+										<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</uni-card>
+		</uni-forms>
+		<view class="footer">
+			<view class="control">
+				<view class="view-flex-rc">
+					<view class="block"
+						style="width: 160px;height:32px;margin-left: 10px;margin-right: 10px;border-radius:7px;background-color:lightsalmon"
+						@click="toSubmit()">
+						<view class="view-flex-cc">
+							<uni-icons class="input-uni-icon" type="checkmarkempty" size="18" color="#ffffff" />
+						</view>
+						<view class="view-flex-cc" style="padding-left:5px;">
+							<text style="color:black;font-size:0.7rem">立即提交</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+	import {
+		oss,
+		imgPath,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+
+	export default {
+		components: {},
+		data() {
+			return {
+				title: '创建工单',
+				desc: '',
+				styles: {
+					color: '#333',
+					borderColor: '#e5e5e5',
+					disableColor: '#FFFFFF'
+				},
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				baseURL: '',
+				baseOSS: '',
+				videoImg: '/static/images/video.png',
+				formData: {
+					orderType: 0,
+					orderDesc: ''
+				},
+				rules: {
+					orderTypeOption: {
+						rules: [{
+							required: true,
+							errorMessage: '必填项',
+						}]
+					},
+					orderDesc: {
+						rules: [{
+							required: true,
+							errorMessage: '必填项',
+						}, ]
+					},
+				},
+				orderTypeOption: {
+					items: [{
+						'value': 1,
+						'text': '维修工单'
+					}, {
+						'value': 2,
+						'text': '服务工单'
+					}],
+					current: 0,
+				},
+				orderPhotos: [],
+				orderVideos: [],
+				uuid: '',
+			}
+		},
+		computed: {
+			videoImage() {
+				return imgPath + "logo_pc.png";
+			}
+		},
+		onLoad(options) {
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			console.log(this.baseURL)
+			this.baseOSS = oss;
+			this.permission.admin = false;
+			this.permission.orgAdmin = false;
+			this.permission.companyAdmin = false;
+			this.permission.companyServciePerson = false;
+			if (this.userInfo.role_name === role.admin) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role.orgAdmin) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role.companyAdmin) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role.companyServciePerson) {
+				this.permission.companyServciePerson = true;
+				this.formData.orderType = 1;
+			}
+			this.uuid = this.getUuid();
+		},
+		onReady() {
+			console.log("onReady++++++++++++++")
+			// 需要在onReady中设置规则
+			this.$refs.baseForm.setRules(this.rules)
+		},
+		onShow() {
+			this.permission.admin = false;
+			this.permission.orgAdmin = false;
+			this.permission.companyAdmin = false;
+			this.permission.companyServciePerson = false;
+			if (this.userInfo.role_name === role.admin) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role.orgAdmin) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role.companyAdmin) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role.companyServciePerson) {
+				this.permission.companyServciePerson = true;
+				this.formData.orderType = 1;
+			}
+			this.uuid = this.getUuid();
+		},
+		methods: {
+			getUuid() {
+				return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+					var r = (Math.random() * 16) | 0,
+						v = c == 'x' ? r : (r & 0x3) | 0x8;
+					return v.toString(16);
+				});
+			},
+			toOss(path) {
+				return this.baseOSS + path;
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onCheckPhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['album ', 'camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadPhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadPhoto(imagePath) {
+				let that = this;
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.orderPhotos.push(path);
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onPhotoDel(index) {
+				this.orderPhotos.splice(index, 1);
+			},
+			onCheckVideoAdd() {
+				let that = this;
+				uni.chooseVideo({
+					sourceType: ['camera'],
+					maxDuration: 10,
+					success: (res) => {
+						that.uploadVideo(res.tempFilePath);
+					}
+				})
+			},
+			uploadVideo(videoPath) {
+				let that = this;
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					filePath: videoPath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.orderVideos.push(path);
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onVideoDel(index) {
+				this.orderVideos.splice(index, 1);
+			},
+			openVideo(item) {
+				let url = '/pages/check-order/videoView?url=' + item;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			toSubmit() {
+				let that = this;
+				this.$refs.baseForm.validate().then(res => {
+					that.submitData();
+				}).catch(err => {
+					//console.log('表单错误信息:', err);
+					uni.showModal({
+						content: "录入错误,请根据提示信息检查录入内容!",
+						showCancel: false,
+						success(res) {
+							if (res.confirm) {
+								//that.$refs.baseForm.clearValidate();
+							}
+						}
+					});
+				})
+			},
+			submitData() {
+				let formdata = this.formData;
+				formdata['batchId'] = this.uuid;
+				if (this.orderPhotos.length > 0) {
+					let photos = '';
+					for (let i = 0; i < this.orderPhotos.length; i++) {
+						if (photos.length > 0) {
+							photos = photos + ',';
+						}
+						photos = photos + this.orderPhotos[i];
+					}
+					formdata['orderPhotos'] = photos;
+				}
+				if (this.orderVideos.length > 0) {
+					let videos = '';
+					for (let i = 0; i < this.orderVideos.length; i++) {
+						if (videos.length > 0) {
+							videos = videos + ',';
+						}
+						videos = videos + this.orderVideos[i];
+					}
+					formdata['orderVideos'] = videos;
+				}
+				let that = this;
+				http.request({
+					url: '/galaxy-business/order/save',
+					method: 'POST',
+					data: formdata
+				}).then(res => {
+					if (res.success) {
+						uni.showModal({
+							content: '已成功提交',
+							showCancel: false,
+							success(res) {
+								that.toBack();
+							}
+						});
+					} else {
+						uni.showModal({
+							content: '' + res.msg,
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		padding: 0 0 100rpx;
+	}
+
+	.view-flex-rc {
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.view-flex-cc {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+	}
+</style>

+ 130 - 0
pages/check-order/ordercancel.vue

@@ -0,0 +1,130 @@
+<!--
+ * @Title: 
+ * @Description: 工单取消
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-group>
+				<uni-forms ref="baseForm" :model="formData">
+					<uni-section title="取消说明" ftitleFontSize="0.8rem" style="width: 100%;">
+						<template v-slot:decoration>
+							<view class="decoration"></view>
+						</template>
+						<view style="padding-top: 10px;padding-bottom: 0px;padding-left: 15px;padding-right: 15px;">
+							<uni-forms-item>
+								<uni-easyinput :styles="styles" type="textarea" v-model="formData.orderDesc"
+									placeholder="请录入工单取消说明" />
+							</uni-forms-item>
+						</view>
+					</uni-section>
+				</uni-forms>
+				<view class="view-btn">
+					<button style="background-color: lightcoral;" type="default"
+						@click="onOrderCancelClick()">提交操作</button>
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+	export default {
+		components: {},
+		data() {
+			return {
+				title: '工单取消',
+				id: '',
+				formData: {
+					orderDesc: '',
+				},
+				styles: {
+					color: '#333',
+					borderColor: '#e5e5e5',
+					disableColor: '#FFFFFF'
+				},
+				baseURL: '',
+			}
+		},
+		computed: {},
+		onLoad(option) {
+			this.id = option.id;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+		},
+		onShow() {},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 2
+				})
+			},
+			onOrderCancelClick() {
+				let that = this;
+				uni.showModal({
+					content: '是否确定取消工单?',
+					showCancel: true,
+					success(res) {
+						if (res.confirm) {
+							that.cancelOrderSubmit();
+						}
+					}
+				});
+			},
+			cancelOrderSubmit() {
+				let that = this;
+				this.formData['id'] = this.id;
+				console.log("id "+JSON.stringify(this.formData))
+				http.request({
+					url: '/galaxy-business/order/cancel',
+					method: 'POST',
+					params: this.formData
+				}).then(res => {
+					if (res.success) {
+						uni.showModal({
+							content: '已成功提交',
+							showCancel: false,
+							success(res) {
+								that.toBack();
+							}
+						});
+					} else {
+						uni.showModal({
+							content: '' + res.msg,
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.view-btn {
+		margin-top: 20px;
+		margin-bottom: 20px;
+		padding-left: 10px;
+		padding-right: 10px;
+	}
+
+	.line-space {
+		margin-top: 4px;
+	}
+</style>

+ 433 - 0
pages/check-order/ordercloseapprove.vue

@@ -0,0 +1,433 @@
+<!--
+ * @Title: 
+ * @Description: 任务确认
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-forms ref="baseForm" :model="formData">
+				<uni-section title="审批意见" ftitleFontSize="0.8rem" style="width: 100%;">
+					<template v-slot:decoration>
+						<view class="decoration"></view>
+					</template>
+					<view style="padding-top: 10px;padding-bottom: 0px;padding-left: 15px;padding-right: 15px;">
+						<uni-forms-item>
+							<uni-easyinput :styles="styles" type="textarea" v-model="formData.processDesc"
+								placeholder="请录入工单完结审批意见" />
+						</uni-forms-item>
+					</view>
+				</uni-section>
+				<uni-card title="评分">
+					<uni-rate v-model="formData.orderRate" />
+				</uni-card>
+				<!-- 		<uni-section title="评分" ftitleFontSize="0.8rem" style="width: 100%;">
+					<template v-slot:decoration>
+						<view class="decoration"></view>
+					</template>
+					<uni-rate v-model="formData.orderRate" />
+				</uni-section> -->
+			</uni-forms>
+			<view class="view-btn">
+				<button style="background-color: lightcoral;" type="default"
+					@click="toOrderCloseConfirm()">工单关闭</button>
+			</view>
+			<uni-section title="工单处理详情" type="line">
+				<uni-list>
+					<uni-list-item v-for="(item,index) in orderProcessList" :key="item.id" direction="column">
+						<template v-slot:body>
+							<view class="point">
+								<view class="dot">
+									{{index+1}}
+								</view>
+								<view class="time-title">{{item.createTime}}【{{item.orderStatusName}}】</view>
+							</view>
+							<view class="time-info">
+								<view class="time-line">
+									<view v-if="item.orderStatusCode ==2" class="list-item-block">
+										<view class="line" style="padding-left:12px">
+											<view v-if="orderType==1" class="text" style="color: gray;">工单类型:<span
+													style="margin-left: 5px;color: cornflowerblue;">维修工单</span></view>
+											<view v-else-if="orderType==2" class="text" style="color: gray;">工单类型:<span
+													style="margin-left: 5px;color: cornflowerblue;">服务工单</span></view>
+											<view v-else></view>
+										</view>
+										<view class="line" style="padding-left:12px">
+											<view class="text" style="width: 90%;color: gray;">
+												工单创建人:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessUserName}}</span>
+											</view>
+										</view>
+										<view class="line" style="padding-left:12px">
+											<view class="text" style="width: 90%;color: gray;">
+												创建时间:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.createTime}}</span>
+											</view>
+										</view>
+										<uni-card title="问题描述">
+											<view class="text" style="color: cornflowerblue;">{{item.processDesc}}
+											</view>
+										</uni-card>
+						<!-- 				<view class="line">
+											<view class="text" style="width: 90%;color: gray;">
+												问题描述:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.processDesc}}</span>
+											</view>
+										</view> -->
+										<uni-card title="处理照片">
+											<view class="view-flex-rs-flex-wrap">
+												<view v-for="(path, index) in item.failureProcessPhotoList" :key="index"
+													class="view-flex-cc" style="width: 80px;">
+													<view class="img-container">
+														<view class="note-image-box">
+															<view class="note-image-item">
+																<view class="image-box">
+																	<image :src="toOss(path)" mode="widthFix"
+																		@click="openPhoto(path)">
+																	</image>
+																</view>
+															</view>
+														</view>
+													</view>
+												</view>
+											</view>
+											<!-- 									<view class="view-flex-block-center">
+										<image v-for="(path, index) in item.failureProcessPhotoList" :key="index"
+											mode="widthFix" style="width: 80%;margin-top: 10px;" :src="toOss(path)">
+										</image>
+									</view> -->
+										</uni-card>
+										<uni-card title="处理视频">
+											<view class="view-flex-inline">
+												<image v-for="(path, index) in item.failureProcessVideoList"
+													:key="index" mode="widthFix" style="width: 80px;" :src="videoImg"
+													@click="openVideo(path)">
+												</image>
+											</view>
+										</uni-card>
+									</view>
+									<view v-else-if="item.orderStatusCode ==3" class="list-item-block">
+										<view class="line" style="padding-left:12px">
+											<view class="text" style="width: 90%;color: gray;">
+												工单处理人:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessUserName}}</span>
+											</view>
+										</view>
+										<view class="line" style="padding-left:12px">
+											<view class="text" style="width: 90%;color: gray;">
+												处理时间:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.createTime}}</span>
+											</view>
+										</view>
+										<uni-card v-if="orderType==1" title="故障现象描述">
+											<view class="text" style="color: cornflowerblue;">{{item.failureCheckDesc}}
+											</view>
+										</uni-card>
+		<!-- 								<view v-if="orderType==1" class="line">
+											<view class="text" style="width: 90%;color: gray;">
+												故障现象描述:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.failureCheckDesc}}</span>
+											</view>
+										</view> -->
+										<uni-card v-else-if="orderType==2" title="服务内容描述">
+											<view class="text" style="color: cornflowerblue;">{{item.failureCheckDesc}}
+											</view>
+										</uni-card>
+<!-- 										<view v-else-if="orderType==2" class="line">
+											<view class="text" style="width: 90%;color: gray;">
+												服务内容描述:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.failureCheckDesc}}</span>
+											</view>
+										</view> -->
+										<view v-else></view>
+										<uni-card title="解决措施说明">
+											<view class="text" style="color: cornflowerblue;">{{item.processDesc}}
+											</view>
+										</uni-card>
+<!-- 										<view class="line">
+											<view class="text" style="width: 90%;color: gray;">
+												解决措施说明:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.processDesc}}</span>
+											</view>
+										</view> -->
+										<uni-card v-if="orderType==1 && item.costsReport==2" title="费用说明">
+											<view class="text" style="color: cornflowerblue;">{{item.costsReportDesc}}
+											</view>
+										</uni-card>
+										
+<!-- 										<view v-if="orderType==1 && item.costsReport==2" class="line">
+											<view class="text" style="width: 90%;color: gray;">
+												费用说明:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.costsReportDesc}}</span>
+											</view>
+										</view> -->
+										<uni-card title="处理照片">
+											<view class="view-flex-rs-flex-wrap">
+												<view v-for="(path, index) in item.failureProcessPhotoList" :key="index"
+													class="view-flex-cc" style="width: 80px;">
+													<view class="img-container">
+														<view class="note-image-box">
+															<view class="note-image-item">
+																<view class="image-box">
+																	<image :src="toOss(path)" mode="widthFix"
+																		@click="openPhoto(path)">
+																	</image>
+																</view>
+															</view>
+														</view>
+													</view>
+												</view>
+											</view>
+											<!-- 									<view class="view-flex-block-center">
+										<image v-for="(path, index) in item.failureProcessPhotoList" :key="index"
+											mode="widthFix" style="width: 80%;margin-top: 10px;" :src="toOss(path)">
+										</image>
+									</view> -->
+										</uni-card>
+									</view>
+									<view v-else-if="item.orderStatusCode ==5" class="list-item-block">
+										<view class="line" style="padding-left:12px">
+											<view class="text" style="width: 90%;color: gray;">
+												费用审批人:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessUserName}}</span>
+											</view>
+										</view>
+			<!-- 							<view class="line" style="padding-left:12px">
+											<view class="text" style="width: 90%;color: gray;">
+												审批时间:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.createTime}}</span>
+											</view>
+										</view> -->
+										<uni-card title="审批意见">
+											<view class="text" style="color: cornflowerblue;">{{item.processDesc}}
+											</view>
+										</uni-card>
+<!-- 										<view class="line">
+											<view class="text" style="width: 90%;color: gray;">
+												审批意见:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.processDesc}}</span>
+											</view>
+										</view> -->
+									</view>
+									<view v-else-if="item.orderStatusCode ==7" class="list-item-block">
+										<view class="line" style="padding-left:12px">
+											<view class="text" style="width: 90%;color: gray;">
+												工单完结审批人:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessUserName}}</span>
+											</view>
+										</view>
+			<!-- 							<view class="line" style="padding-left:12px">
+											<view class="text" style="width: 90%;color: gray;">
+												审批时间:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.createTime}}</span>
+											</view>
+										</view> -->
+										<uni-card title="审批意见">
+											<view class="text" style="color: cornflowerblue;">{{item.processDesc}}
+											</view>
+										</uni-card> 
+									</view>
+								</view>
+							</view>
+						</template>
+					</uni-list-item>
+				</uni-list>
+			</uni-section>
+			<view style="margin-top: 5px;margin-bottom: 10px;padding-left: 10px;padding-right: 10px;">
+				<button style="background-color: lightcoral;" type="default" @click="toTopClick()">返回顶部</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+	export default {
+		components: {
+
+		},
+		data() {
+			return {
+				title: '工单完结审批',
+				orderId: '',
+				orderType: 1,
+				orderProcessList: [],
+				formData: {
+					processDesc: '',
+					orderRate: 5,
+				},
+				orderInfo: {
+					'id': 0,
+					'updateTime': '',
+					'orderDesc': '',
+					'orderConfirm': 0,
+				},
+				styles: {
+					color: '#333',
+					borderColor: '#e5e5e5',
+					disableColor: '#FFFFFF'
+				},
+				baseURL: '',
+				baseOSS: '',
+				videoImg: '/static/images/video.png',
+			}
+		},
+		computed: {},
+		onLoad(option) {
+			this.orderId = option.orderId;
+			this.orderType = option.orderType;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.baseOSS = oss;
+			this.getDetail();
+		},
+		onShow() {},
+		methods: {
+			toOss(path) {
+				let url = this.baseOSS + path;
+				//console.log("tooss " + url)
+				return url;
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			toTopClick() {
+				uni.pageScrollTo({
+					scrollTop: 0,
+					duration: 100,
+				});
+			},
+			openPhoto(file) {
+				let url = '/pages/check-order/photoView?url=' + file;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			openVideo(file) {
+				let url = '/pages/check-order/videoView?url=' + file;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			getDetail() {
+				let that = this;
+				let postData = {};
+				postData['orderId'] = this.orderId;
+				http.request({
+					url: '/galaxy-business/order/process/list',
+					method: 'GET',
+					data: postData,
+				}).then(res => {
+					if (res.data != null) {
+						console.log(JSON.stringify(res.data))
+						that.orderProcessList = res.data;
+					}
+				}).catch(err => {
+					console.log(JOSN.stringify(err))
+				})
+			},
+			toOrderCloseConfirm() {
+				let that = this;
+				uni.showModal({
+					content: '确定关闭该工单?',
+					showCancel: true,
+					success(res) {
+						if (res.confirm) {
+							that.formData['orderId'] = that.orderId;
+							http.request({
+								url: '/galaxy-business/order/process/closeapprove',
+								method: 'POST',
+								params: that.formData
+							}).then(res => {
+								console.log(res)
+								if (res.success) {
+									that.toBack();
+								}
+							}).catch(err => {
+								console.log(err)
+							})
+						}
+					}
+				});
+			},
+			toOrderProcessReport() {
+				var url = '/pages/check-order/orderprocessreport?orderId=' + this.id + '&skipPage=2';
+				uni.navigateTo({
+					url: url
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.view-btn {
+		margin-top: 20px;
+		margin-bottom: 20px;
+		padding-left: 10px;
+		padding-right: 10px;
+	}
+
+	.line-space {
+		margin-top: 4px;
+	}
+
+	.point {
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		margin: 15rpx 0;
+	}
+
+	.dot {
+		//margin-left: -22rpx;
+		background-color: #19be6b;
+		box-shadow: 0 0 5rpx 5rpx #71d5a1;
+		color: white;
+		width: 50rpx;
+		height: 50rpx;
+		padding: 5rpx;
+		font-size: 28rpx;
+		text-align: center;
+		border-radius: 50rpx;
+	}
+
+	.time-title {
+		font-size: 30rpx;
+		margin-left: 15rpx;
+		background-color: whitesmoke;
+		padding: 12rpx 25rpx;
+		border-radius: 50rpx;
+		color: orangered;
+	}
+
+	.time-info {
+		padding: 0rpx 0rpx 0rpx 25rpx;
+	}
+
+	.time-line {
+		border-left: 3rpx solid #71d5a1;
+		padding: 10rpx 10rpx 30rpx 20rpx;
+	}
+</style>

+ 231 - 0
pages/check-order/orderconfirm.vue

@@ -0,0 +1,231 @@
+<!--
+ * @Title: 
+ * @Description: 任务确认
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<view class="view-btn">
+				<button style="background-color: lightcoral;" type="default" @click="toOrderProcess()">工单处理填报</button>
+			</view>
+			<uni-section title="工单详情" titleFontSize="0.8rem" type="circle">
+				<uni-group style="margin-top: 0px;">
+					<view class="items-line">
+						<view class="item-text-lable">工单发起人:</view>
+					</view>
+					<view class="items-line">
+						<view class="item-text-content" style="margin-left: 0px;color: deepskyblue;">
+							{{orderInfo.createOrderPersonName}}
+						</view>
+					</view>
+					<view class="items-line line-space">
+						<view class="item-text-lable">发起时间:</view>
+					</view>
+					<view class="items-line line-space">
+						<view class="item-text-content" style="margin-left: 0px;color: deepskyblue;">
+							{{orderInfo.createTime}}
+						</view>
+					</view>
+					<view class="items-line line-space">
+						<view class="item-text-lable">问题描述:</view>
+					</view>
+					<view class="items-line line-space">
+						<view class="item-text-content" style="margin-left: 0px;color: deepskyblue;">
+							{{orderInfo.orderDesc}}
+						</view>
+					</view>
+				</uni-group>
+				<uni-card title="工单照片">
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(path, index) in orderInfo.orderPhotoList" :key="index"
+							class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="image-box">
+											<image :src="toOss(path)" mode="widthFix"
+												@click="openPhoto(path)">
+											</image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+<!-- 					<view class="view-flex-block-center">
+						<image v-for="(path, index) in orderInfo.orderPhotoList" :key="index" mode="widthFix"
+							style="width: 80%;margin-top: 10px;" :src="toOss(path)">
+						</image>
+					</view> -->
+				</uni-card>
+				<uni-card title="工单视频" sub-title="点击视频图标可进行播放预览">
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(item, index) in orderInfo.orderVideoList" :key="index" class="view-flex-cc"
+							style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="image-box">
+											<image :src="videoImg" mode="widthFix" @click="openVideo(item)">
+											</image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</uni-card>
+			</uni-section>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		oss,
+	} from '@/common/setting';
+	export default {
+		components: {
+
+		},
+		data() {
+			return {
+				title: '工单详情',
+				orderId: '',
+				orderInfo: {
+					createOrderPersonName: '',
+					createTime: '',
+					orderDesc: '',
+				},
+				orderType: 1,
+				videoImg: '/static/images/video.png',
+			}
+		},
+		computed: {},
+		onLoad(option) {
+			this.orderId = option.orderId;
+			this.orderType = option.orderType;
+			this.getDetail();
+		},
+		onShow() {},
+		methods: {
+			toOss(url) {
+				return oss + url;
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			openPhoto(file) {
+				let url = '/pages/check-order/photoView?url=' + file;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			openVideo(file) {
+				let url = '/pages/check-order/videoView?url=' + file;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			getDetail() {
+				let that = this;
+				let postData = {};
+				postData['id'] = this.orderId;
+				http.request({
+					url: '/galaxy-business/order/detail',
+					method: 'GET',
+					data: postData
+				}).then(res => {
+					console.log(res)
+					if (res.data != null) {
+						that.orderInfo = res.data;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			toOrderProcess() {
+				var url = '/pages/check-order/orderprocessreport?skipPage=2&costsApprove=1&orderType=' + this.orderType +
+					'&orderId=' + this.orderId;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			toOrderConfirm() {
+				let that = this;
+				uni.showModal({
+					content: '确定接受该维修任务?',
+					showCancel: true,
+					success(res) {
+						if (res.confirm) {
+							let postData = {};
+							postData['id'] = that.id;
+							http.request({
+								url: '/galaxy-business/rtu/check/order/confirm',
+								method: 'POST',
+								data: postData
+							}).then(res => {
+								console.log(res)
+								if (res.success) {
+									uni.showModal({
+										content: '任务已确认,是否立即填报?',
+										showCancel: true,
+										cancelText: "返回",
+										success(res) {
+											if (res.confirm) {
+												that.toOrderProcessReport();
+											} else {
+												that.toBack();
+											}
+										}
+									});
+								}
+							}).catch(err => {
+								console.log(err)
+							})
+						}
+					}
+				});
+			},
+			toOrderProcessReport() {
+				var url = '/pages/check-order/orderprocessreport?orderId=' + this.id + '&skipPage=2';
+				uni.navigateTo({
+					url: url
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.view-btn {
+		margin-top: 20px;
+		margin-bottom: 20px;
+		padding-left: 10px;
+		padding-right: 10px;
+	}
+
+	.line-space {
+		margin-top: 4px;
+	}
+	
+</style>

+ 391 - 0
pages/check-order/ordercostsapprove.vue

@@ -0,0 +1,391 @@
+<!--
+ * @Title: 
+ * @Description: 人工关闭工单
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view style="width: 100%;display: flex;flex-direction: row;justify-content: center;align-items: center;">
+				<text style="color: white;font-size: 1rem;">{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-forms ref="baseForm" :model="formData">
+				<uni-section title="审批意见" type="circle">
+					<view style="margin-top: 20px;margin-bottom: 40px;;padding-left: 10px;padding-right: 10px;">
+						<uni-easyinput :styles="inputStyles" type="textarea" v-model="formData.processDesc"
+							placeholder="请录入审批意见">
+						</uni-easyinput>
+					</view>
+				</uni-section>
+				<view style="margin-top: 5px;margin-bottom: 10px;padding-left: 10px;padding-right: 10px;">
+					<button style="background-color: lightcoral;" type="default"
+						@click="onOrderCostsApproveSubmitClick()">审批确认</button>
+				</view>
+			</uni-forms>
+			<uni-section title="工单处理详情" type="circle">
+				<uni-list>
+					<uni-list-item v-for="(item,index) in orderProcessList" :key="item.id" direction="column">
+						<template v-slot:body>
+							<view class="point">
+								<view class="dot">
+									{{index+1}}
+								</view>
+								<view class="time-title">{{item.createTime}}【{{item.orderStatusName}}】</view>
+							</view>
+							<view class="time-info">
+								<view class="time-line">
+									<view v-if="item.orderStatusCode ==2" class="list-item-block">
+										<view class="line" style="padding-left:12px">
+											<view v-if="orderType==1" class="text" style="color: gray;">工单类型:<span
+													style="margin-left: 5px;color: cornflowerblue;">维修工单</span></view>
+											<view v-else-if="orderType==2" class="text" style="color: gray;">工单类型:<span
+													style="margin-left: 5px;color: cornflowerblue;">服务工单</span></view>
+											<view v-else></view>
+										</view>
+										<view class="line" style="padding-left:12px">
+											<view class="text" style="width: 90%;color: gray;">
+												工单创建人:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessUserName}}</span>
+											</view>
+										</view>
+										<!-- 										<view class="line">
+											<view class="text" style="width: 90%;color: gray;">
+												创建时间:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.createTime}}</span>
+											</view>
+										</view> -->
+										<uni-card title="问题描述">
+											<view class="text" style="color: cornflowerblue;">{{item.processDesc}}
+											</view>
+										</uni-card>
+										<!-- 									<view class="line">
+											<view class="text" style="width: 90%;color: gray;">
+												问题描述:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.processDesc}}</span>
+											</view>
+										</view> -->
+										<uni-card title="处理照片">
+											<view class="view-flex-rs-flex-wrap">
+												<view v-for="(path, index) in item.failureProcessPhotoList" :key="index"
+													class="view-flex-cc" style="width: 80px;">
+													<view class="img-container">
+														<view class="note-image-box">
+															<view class="note-image-item">
+																<view class="image-box">
+																	<image :src="toOss(path)" mode="widthFix"
+																		@click="openPhoto(path)">
+																	</image>
+																</view>
+															</view>
+														</view>
+													</view>
+												</view>
+											</view>
+										</uni-card>
+										<uni-card title="处理视频">
+											<view class="view-flex-inline">
+												<image v-for="(path, index) in item.failureProcessVideoList"
+													:key="index" mode="widthFix" style="width: 80px;" :src="videoImg"
+													@click="openVideo(path)">
+												</image>
+											</view>
+										</uni-card>
+									</view>
+									<view v-else-if="item.orderStatusCode ==3" class="list-item-block">
+										<view class="line" style="padding-left:12px">
+											<view class="text" style="width: 90%;color: gray;">
+												工单处理人:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessUserName}}</span>
+											</view>
+										</view>
+										<!-- 							<view class="line" style="padding-left:12px">
+											<view class="text" style="width: 90%;color: gray;">
+												处理时间:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.createTime}}</span>
+											</view>
+										</view> -->
+										<uni-card v-if="orderType==1" title="故障现象描述">
+											<view class="text" style="color: cornflowerblue;">{{item.failureCheckDesc}}
+											</view>
+										</uni-card>
+										<uni-card v-else-if="orderType==2" title="服务内容描述">
+											<view class="text" style="color: cornflowerblue;">{{item.failureCheckDesc}}
+											</view>
+										</uni-card>
+										<!-- <view v-else></view> -->
+										<uni-card title="解决措施说明">
+											<view class="text" style="color: cornflowerblue;">{{item.processDesc}}
+											</view>
+										</uni-card>
+										<!-- 							<view class="line">
+											<view class="text" style="width: 90%;color: gray;">
+												解决措施说明:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.processDesc}}</span>
+											</view>
+										</view> -->
+
+										<uni-card v-if="orderType==1 && item.costsReport==2" title="费用说明">
+											<view class="text" style="color: cornflowerblue;">{{item.costsReportDesc}}
+											</view>
+										</uni-card>
+										<uni-card title="处理照片">
+											<view class="view-flex-rs-flex-wrap">
+												<view v-for="(path, index) in item.failureProcessPhotoList" :key="index"
+													class="view-flex-cc" style="width: 80px;">
+													<view class="img-container">
+														<view class="note-image-box">
+															<view class="note-image-item">
+																<view class="image-box">
+																	<image :src="toOss(path)" mode="widthFix"
+																		@click="openPhoto(path)">
+																	</image>
+																</view>
+															</view>
+														</view>
+													</view>
+												</view>
+											</view>
+										</uni-card>
+									</view>
+
+									<view v-else-if="item.orderStatusCode ==5" class="list-item-block">
+										<view class="line" style="padding-left:12px">
+											<view class="text" style="width: 90%;color: gray;">
+												费用审批人:<span
+													style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessUserName}}</span>
+											</view>
+										</view>
+										<!-- 								<view class="line">
+																		<view class="text" style="width: 90%;color: gray;">
+																			审批时间:<span
+																				style="margin-left: 5px;color: cornflowerblue;">{{item.createTime}}</span>
+																		</view>
+																	</view> -->
+										<uni-card title="审批意见">
+											<view class="text" style="color: cornflowerblue;">{{item.processDesc}}
+											</view>
+										</uni-card>
+									</view>
+								</view>
+							</view>
+
+
+							<!-- 							<view v-else-if="item.orderStatusCode ==7" class="list-item-block">
+								<view class="line">
+									<view class="text" style="width: 90%;color: gray;">
+										工单完结审批人:<span
+											style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessUserName}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<view class="text" style="width: 90%;color: gray;">
+										审批时间:<span
+											style="margin-left: 5px;color: cornflowerblue;">{{item.createTime}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<view class="text" style="width: 90%;color: gray;">
+										审批意见:<span
+											style="margin-left: 5px;color: cornflowerblue;">{{item.processDesc}}</span>
+									</view>
+								</view>
+							</view> -->
+						</template>
+					</uni-list-item>
+				</uni-list>
+			</uni-section>
+			<view style="margin-top: 5px;margin-bottom: 10px;padding-left: 10px;padding-right: 10px;">
+				<button style="background-color: lightcoral;" type="default" @click="toTopClick()">返回顶部</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+	export default {
+		components: {
+
+		},
+		data() {
+			return {
+				title: '工单费用审批',
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				},
+				formData: {
+					orderId: '',
+					processDesc: '',
+					costsApproveType: 0,
+				},
+				query: {},
+				orderId: '',
+				orderType: 1,
+				costsApproveItems: {
+					items: [{
+						'value': 1,
+						'text': '通过'
+					}, {
+						'value': 2,
+						'text': '退回'
+					}],
+					current: 0,
+				},
+				orderProcessList: [],
+				baseURL: '',
+				baseOSS: '',
+				videoImg: '/static/images/video.png',
+			}
+		},
+		computed: {},
+		onLoad(option) {
+			this.orderId = option.orderId;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.baseOSS = oss;
+			this.orderType = option.orderType;
+			this.getDetail();
+		},
+		onShow() {},
+		methods: {
+			toOss(path) {
+				let url = this.baseOSS + path;
+				//console.log("tooss " + url)
+				return url;
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			toTopClick() {
+				uni.pageScrollTo({
+					scrollTop: 0,
+					duration: 100,
+				});
+			},
+			openPhoto(file) {
+				let url = '/pages/check-order/photoView?url=' + file;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			openVideo(file) {
+				let url = '/pages/check-order/videoView?url=' + file;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			getDetail() {
+				let that = this;
+				let postData = {};
+				postData['orderId'] = this.orderId;
+				http.request({
+					url: '/galaxy-business/order/process/list',
+					method: 'GET',
+					data: postData,
+				}).then(res => {
+					if (res.data != null) {
+						console.log(JSON.stringify(res.data))
+						that.orderProcessList = res.data;
+					}
+				}).catch(err => {
+					console.log(JOSN.stringify(err))
+				})
+			},
+			onOrderCostsApproveSubmitClick() {
+				let that = this;
+				this.formData['orderId'] = this.orderId;
+				let postData = Object.assign(this.formData, this.query);
+				http.request({
+					url: '/galaxy-business/order/process/costsapprove',
+					method: 'POST',
+					params: postData
+				}).then(res => {
+					if (res.success) {
+						uni.showModal({
+							content: '操作成功!',
+							showCancel: true,
+							success(res) {
+								if (res.confirm) {
+									that.toBack();
+								}
+							}
+						});
+					} else {
+						uni.showModal({
+							content: '操作失败!',
+							showCancel: true,
+							success(res) {
+
+							}
+						});
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.container {
+		padding: 0 0 150rpx;
+	}
+
+	.point {
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		margin: 15rpx 0;
+	}
+
+	.dot {
+		//margin-left: -22rpx;
+		background-color: #19be6b;
+		box-shadow: 0 0 5rpx 5rpx #71d5a1;
+		color: white;
+		width: 50rpx;
+		height: 50rpx;
+		padding: 5rpx;
+		font-size: 28rpx;
+		text-align: center;
+		border-radius: 50rpx;
+	}
+
+	.time-title {
+		font-size: 30rpx;
+		margin-left: 15rpx;
+		background-color: whitesmoke;
+		padding: 12rpx 25rpx;
+		border-radius: 50rpx;
+		color: orangered;
+	}
+
+	.time-info {
+		padding: 0rpx 0rpx 0rpx 25rpx;
+	}
+
+	.time-line {
+		border-left: 3rpx solid #71d5a1;
+		padding: 10rpx 10rpx 30rpx 20rpx;
+	}
+</style>

+ 145 - 0
pages/check-order/orderprocesschange.vue

@@ -0,0 +1,145 @@
+<!--
+ * @Title: 
+ * @Description: 任务转派
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-section title="当前负责人" type="circle">
+				<uni-group>
+					<view>{{contactUserName}}</view>
+				</uni-group>
+			</uni-section>
+			<uni-section title="指派给" type="circle">
+				<uni-group>
+					<uni-data-select v-model="selectedPersonId" :localdata="servicePersonList" @change="selectChange"
+						placeholder="请选择运维人员">
+					</uni-data-select>
+				</uni-group>
+			</uni-section>
+			<view class="view-btn">
+				<button style="background-color: lightcoral;" type="default" @click="toOrderChange()">确认转派</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+
+
+	export default {
+		components: {
+
+		},
+		onLoad(option) {
+			this.orderId = option.orderId;
+			this.contactUserName = option.contactUserName;
+			this.getServicePersonList();
+		},
+		data() {
+			return {
+				orderId: '',
+				contactUserName: '',
+				selectedPersonId: '',
+				servicePersonList: [],
+				title: '维修任务转派',
+				desc: '',
+			}
+		},
+		computed: {
+		},
+		onShow() {
+		},
+		created() {
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			selectChange(e) {
+			},
+			getServicePersonList() {
+				let that = this;
+				http.request({
+					url: '/galaxy-business/serviceperson/list',
+					method: 'GET',
+				}).then(res => {
+					//console.log("list " + JSON.stringify(res))
+					if (res.success) {
+						let persons = res.data.map(function(item) {
+							let person = {};
+							person['value'] = item.id;
+							person['text'] = item.realName;
+							return person;
+						})
+						that.servicePersonList = persons;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			toOrderChange() {
+				let that = this;
+				var postData = {};
+				postData['id'] = '' + this.orderId;
+				postData['servicePersonId'] = '' + this.selectedPersonId;
+				//console.log(postData)
+				http.request({
+					url: '/galaxy-business/rtu/check/order/change',
+					method: 'POST',
+					data: postData
+				}).then(res => {
+					if (res.success) {
+						uni.showModal({
+							content: '任务指派操作已成功!',
+							showCancel: true,
+							success(res) {
+								if (res.confirm) {
+									that.toBack();
+								}
+							}
+						});
+					} else {
+						uni.showModal({
+							content: '任务指派操作失败!',
+							showCancel: true,
+							success(res) {
+
+							}
+						});
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.view-btn {
+		margin-top: 10px;
+		margin-bottom: 10px;
+		padding-left: 10px;
+		padding-right: 10px;
+	}
+</style>

+ 560 - 0
pages/check-order/orderprocessreport.vue

@@ -0,0 +1,560 @@
+<!--
+ * @Title: 
+ * @Description: 维修任务填报提交页
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view style="width: 100%;display: flex;flex-direction: row;justify-content: center;align-items: center;">
+				<text style="color: white;font-size: 1rem;">{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<uni-forms ref="baseForm" :model="formData">
+			<uni-section :title="failureCheckTitle" ftitleFontSize="0.8rem" type="circle">
+<!-- 				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template> -->
+				<view style="padding-top: 10px;padding-bottom: 0px;padding-left: 15px;padding-right: 15px;">
+					<uni-forms-item name='networkPayer' required>
+						<uni-easyinput :styles="styles" type="textarea" v-model="formData.failureCheckDesc"
+							:placeholder="failureCheckPlaceholder" />
+					</uni-forms-item>
+				</view>
+			</uni-section>
+			<uni-section title="解决措施说明" ftitleFontSize="0.8rem" type="circle">
+<!-- 				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template> -->
+				<view style="padding-top: 10px;padding-bottom: 10px;padding-left: 15px;padding-right: 15px;">
+					<uni-forms-item required>
+						<uni-easyinput type="textarea" v-model="formData.processDesc" placeholder="请录入解决方案说明" />
+					</uni-forms-item>
+					<uni-card title="拍摄照片" extra="点击下方按钮开始拍摄" :is-shadow="false">
+						<view class="view-flex-rs-flex-wrap">
+							<view v-for="(item, index) in failureProcessPhotos" :key="index" class="view-flex-cc"
+								style="width: 80px;">
+								<view class="img-container">
+									<view class="note-image-box">
+										<view class="note-image-item">
+											<view class="close-icon" @click="onPhotoDel(index)">
+												<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+											</view>
+											<view class="image-box">
+												<image :src="toOss(item)" mode="widthFix">
+												</image>
+											</view>
+										</view>
+									</view>
+								</view>
+							</view>
+							<view class="view-flex-cc" style="width: 80px;">
+								<view class="img-container">
+									<view class="note-image-box">
+										<view class="note-image-item" @click="onCheckPhotoAdd()">
+											<view class="image-box">
+												<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+											</view>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</uni-card>
+				</view>
+			</uni-section>
+			<uni-section v-if="orderType ==1" title="费用申报" ftitleFontSize="0.8rem" type="circle">
+<!-- 				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template> -->
+				<view style="padding-top: 10px;padding-bottom: 10px;padding-left: 15px;padding-right: 15px;">
+					<uni-forms-item label="是否产生费用" label-width="130px" required>
+						<uni-data-checkbox v-model="formData.costsReport"
+							:localdata="costsReportItems.items"></uni-data-checkbox>
+					</uni-forms-item>
+					<uni-forms-item v-if="formData.costsReport==2">
+						<uni-easyinput type="textarea" v-model="formData.costsReportDesc" placeholder="请录入费用说明" />
+					</uni-forms-item>
+				</view>
+			</uni-section>
+		</uni-forms>
+		<view class="footer">
+			<view class="control">
+				<view class="view-flex-rc">
+					<view class="block"
+						style="width: 160px;height:32px;margin-left: 10px;margin-right: 10px;border-radius:7px;background-color:lightsalmon"
+						@click="toSubmit()">
+						<view class="view-flex-cc">
+							<uni-icons class="input-uni-icon" type="checkmarkempty" size="18" color="#999" />
+						</view>
+						<view class="view-flex-cc" style="padding-left:5px;">
+							<text style="color:black;font-size:0.7rem">立即提交</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		pathToBase64,
+		base64ToPath
+	} from '@/js_sdk/mmmm-image-tools/index.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+	export default {
+		components: {},
+		data() {
+			return {
+				styles: {
+					color: '#333',
+					borderColor: '#e5e5e5',
+					disableColor: '#FFFFFF'
+				},
+				rules: {
+					failureCheckDesc: {
+						rules: [{
+							required: true,
+							errorMessage: '必填项',
+						}]
+					},
+					failureSolutionDesc: {
+						rules: [{
+							required: true,
+							errorMessage: '必填项',
+						}, ]
+					},
+				},
+				skipPage: 1,
+				costsApprove: 0,
+				orderId: 0,
+				orderType: 1,
+				formData: {
+					failureCheckDesc: '',
+					processDesc: '',
+					costsReport: 1,
+					costsReportDesc: '',
+				},
+				failureProcessPhotos: [],
+				pattern: {
+					color: '#7A7E83',
+					backgroundColor: '#fff',
+					selectedColor: '#007AFF',
+					buttonColor: '#007AFF',
+					iconColor: '#fff'
+				},
+				baseURL: '',
+				baseOSS: '',
+				costsReportItems: {
+					items: [{
+						'value': 1,
+						'text': '否'
+					}, {
+						'value': 2,
+						'text': '是'
+					}],
+					current: 1,
+				},
+				title: '工单处理填报',
+				desc: '',
+				failureCheckTitle: '',
+				failureCheckPlaceholder: '',
+			}
+		},
+		computed: {},
+		onLoad(options) {
+			this.skipPage = options.skipPage;
+			this.costsApprove = options.costsApprove;
+			this.orderProcessId = options.orderProcessId;
+			this.orderId = options.orderId;
+			this.orderType = options.orderType;
+			console.log("order type "+this.orderType);
+			if (this.orderType == 1) {
+				this.failureCheckTitle = '故障问题描述';
+				this.failureCheckPlaceholder = '请录入故障问题现象';
+			} else if (this.orderType == 2) {
+				this.failureCheckTitle = '服务内容描述';
+				this.failureCheckPlaceholder = '请录入服务内容';
+			}
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.baseOSS = oss;
+			if (this.costsApprove == '2') {
+				this.getDetail();
+			}
+		},
+		onReady() {
+			console.log("onReady++++++++++++++")
+			// 需要在onReady中设置规则
+			this.$refs.baseForm.setRules(this.rules)
+		},
+		onShow() {},
+		methods: {
+			toOss(path) {
+				let url = this.baseOSS + path;
+				//console.log("tooss " + url)
+				return url;
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: Number(this.skipPage)
+				})
+			},
+			getDetail() {
+				let that = this;
+				let postData = {};
+				postData['orderId'] = this.orderId;
+				http.request({
+					url: '/galaxy-business/order/process/last/report',
+					method: 'GET',
+					data: postData
+				}).then(res => {
+					if (res.data != null) {
+						console.log(JSON.stringify(res.data))
+						that.formData.processDesc = res.data.processDesc;
+						that.formData.failureCheckDesc = res.data.failureCheckDesc;
+						if (res.data.failureProcessPhotoList != null) {
+							that.failureProcessPhotos = res.data.failureProcessPhotoList;
+						}
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			onCheckPhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['album ','camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadPhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadPhoto(imagePath) {
+				let that = this;
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.failureProcessPhotos.push(path);
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onPhotoDel(index) {
+				this.failureProcessPhotos.splice(index, 1);
+			},
+			toSubmit() {
+				console.log('表单提交');
+				let that = this;
+				this.$refs.baseForm.validate().then(res => {
+					that.submitData();
+				}).catch(err => {
+					console.log('表单错误信息:', err);
+					uni.showModal({
+						content: "内容填报错误,请根据提示信息检查录入内容!",
+						showCancel: false,
+						success(res) {
+							if (res.confirm) {
+								//that.$refs.baseForm.clearValidate();
+							}
+						}
+					});
+				})
+			},
+			submitData() {
+				let formdata = this.formData;
+				formdata['orderId'] = this.orderId;
+				if (this.failureProcessPhotos.length > 0) {
+					let photos = '';
+					for (let i = 0; i < this.failureProcessPhotos.length; i++) {
+						if (photos.length > 0) {
+							photos = photos + ',';
+						}
+						photos = photos + this.failureProcessPhotos[i];
+					}
+					formdata['failureProcessPhotos'] = photos;
+				}
+				let that = this;
+				http.request({
+					url: '/galaxy-business/order/process/save',
+					method: 'POST',
+					data: formdata
+				}).then(res => {
+					if (res.success) {
+						uni.showModal({
+							content: '已成功提交',
+							showCancel: false,
+							success(res) {
+								if (res.confirm) {
+									that.toBack();
+								}
+							}
+						});
+					} else {
+						uni.showModal({
+							content: '' + res.msg,
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			formReset: function(e) {
+				console.log('清空数据')
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.cell-hover-class {
+		background-color: rgb(235, 237, 238);
+	}
+
+	.view-flex-rs {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+		align-items: center;
+	}
+
+	.view-flex-rc {
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.view-flex-re {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-end;
+		align-items: center;
+	}
+
+	.view-flex-cs {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-start;
+	}
+
+	.view-flex-cc {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+	}
+
+	.view-flex-ce {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-end;
+	}
+
+	.line-body {
+		padding-left: 10px;
+		padding-right: 10px;
+	}
+
+	.required-star {
+		color: #FF0000;
+		font-size: 15px;
+		width: 20px;
+		text-align: center;
+		padding-left: 0px;
+		padding-right: 2px;
+	}
+
+	.item-title {
+		color: #909399;
+		font-size: 15px;
+	}
+
+	.mline-text {
+		padding-left: 2px;
+		width: 100%;
+		/* background-color:#909399; */
+		height: 70px;
+		border: 1px solid #FF5A5F;
+		border-radius: 5px;
+	}
+
+	.footer {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		z-index: 1;
+		height: 100rpx;
+		padding: 20rpx;
+		box-sizing: border-box;
+		display: flex;
+		align-items: center;
+		justify-content: flex-end;
+		background-color: whitesmoke;
+
+		.ipt {
+			width: 380rpx;
+			height: 77rpx;
+			background: #f7f7f7;
+			border-radius: 38px;
+			padding: 0 37rpx;
+			box-sizing: border-box;
+			margin-right: 20rpx;
+		}
+
+		.control {
+			flex: 1;
+			display: flex;
+			align-items: center;
+			justify-content: flex-end;
+
+			.block {
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				flex: 1;
+			}
+
+			.icon {
+				height: auto;
+			}
+
+			.c {
+				width: 41rpx;
+				margin-right: 10rpx;
+			}
+
+			.s {
+				width: 36rpx;
+			}
+
+			.t {
+				width: 31rpx;
+			}
+		}
+	}
+
+	.container {
+		padding: 0 0 100rpx;
+	}
+
+	.img-container {
+		margin-bottom: 0px;
+		width: 80px;
+		height: 80px;
+
+		.note-image-box {
+			margin-top: 5px;
+			display: flex;
+			flex-wrap: wrap;
+			padding: 0px;
+
+			.note-image-item {
+				position: relative;
+				width: 100%;
+				height: 0;
+				padding-top: 100%;
+				box-sizing: border-box;
+				// background-color: #18B566;
+
+				.close-icon {
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					position: absolute;
+					right: 0px;
+					top: 0px;
+					width: 22px;
+					height: 22px;
+					border-radius: 50%;
+					background-color: #d5d5d5;
+					z-index: 2;
+				}
+
+				.image-box {
+					display: flex;
+					justify-content: center;
+
+					align-items: center;
+					position: absolute;
+					top: 0px;
+					right: 0px;
+					border: 0px;
+					left: 0px;
+					border: 1px #eee solid;
+					border-radius: 5px;
+					overflow: hidden;
+					width: 98%;
+					height: 98%;
+
+				}
+
+
+			}
+		}
+	}
+
+	.input-body {
+		background-color: #fff;
+		padding: 10px;
+	}
+
+	.mb-10 {
+		margin-top: 0px;
+		margin-bottom: 0px;
+	}
+
+	.decoration {
+		width: 6px;
+		height: 6px;
+		margin-right: 4px;
+		border-radius: 50%;
+		background-color: cadetblue;
+	}
+</style>

+ 473 - 0
pages/check-order/orderprocessreportdetail.vue

@@ -0,0 +1,473 @@
+<!--
+ * @Title: 
+ * @Description: 维修任务填报详情
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view style="width:100%;display:flex;flex-direction:row;justify-content:center;align-items:center;">
+				<text style="color: white;font-size: 1rem;">{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<uni-section v-for="item in list" :key="item.id" :title="item.createTime" type="circle">
+			<view v-if="item.orderStatusKey==orderStatusCreateKey">
+				<uni-card title="维修任务创建" :is-shadow="false">
+					<text class="uni-body">{{item.processDesc}}</text>
+				</uni-card>
+			</view>
+			<view v-else-if="item.orderStatusKey==orderStatusConfirmKey">
+				<uni-card title="维修任务确认" :is-shadow="false">
+					<view class="uni-body">{{item.processDesc}}</view>
+				</uni-card>
+			</view>
+			<view v-else-if="item.orderStatusKey==orderStatusProcessKey">
+				<uni-card title="填报人姓名" :is-shadow="false">
+					<view class="uni-body">{{item.orderProcessUserName}}</view>
+				</uni-card>
+				<uni-card title="RTU设备运行状态" :is-shadow="false">
+					<text v-if="item.rtuStatus == 0" style="font-size: 0.7rem;color: green;margin-left: 4px;">正常</text>
+					<text v-else style="font-size: 0.7rem;color: orangered;margin-left: 4px;">故障</text>
+				</uni-card>
+				<uni-card title="是否更换RTU" :is-shadow="false">
+					<text v-if="item.rtuReplace==0" class="uni-body">否</text>
+					<text v-else class="uni-body">更换</text>
+				</uni-card>
+				<uni-card title="RTU设备维修说明" :is-shadow="false">
+					<text class="uni-body">{{item.rtuDesc}}</text>
+				</uni-card>
+				<uni-card v-if="item.rtuPhotoTake==1" padding="0" spacing="0" :is-shadow="false">
+					<template v-slot:cover>
+						<view class="custom-cover">
+							<image v-if="item.rtuPhotoUrl" class="cover-image" style="width: 100%;" mode="aspectFill"
+								:src="toOss(item.rtuPhotoUrl)">
+							</image>
+							<view class="cover-content" style="text-align: center;">
+								<text class="uni-subtitle uni-white" style="color: gray;">RTU设备照片</text>
+							</view>
+						</view>
+					</template>
+				</uni-card>
+				<view v-if="item.isRain ==1">
+					<uni-card title="雨量传感器运行状态" :is-shadow="false">
+						<text v-if="item.rainSensorStatus == 0"
+							style="font-size: 0.7rem;color: green;margin-left: 4px;">正常</text>
+						<text v-else style="font-size: 0.7rem;color: orangered;margin-left: 4px;">故障</text>
+					</uni-card>
+					<uni-card title="是否更换雨量传感器" :is-shadow="false">
+						<text v-if="item.rainSensorReplace==0" class="uni-body">否</text>
+						<text v-else class="uni-body">更换</text>
+					</uni-card>
+					<uni-card title="雨量传感器维修说明" :is-shadow="false">
+						<text class="uni-body">{{item.rainSensorDesc}}</text>
+					</uni-card>
+					<uni-card v-if="item.rainSensorPhotoTake==1" padding="0" spacing="0" :is-shadow="false">
+						<template v-slot:cover>
+							<view class="custom-cover">
+								<image v-if="item.rainSensorPhotoUrl" class="cover-image" style="width: 100%;"
+									mode="aspectFill" :src="toOss(item.rainSensorPhotoUrl)">
+								</image>
+								<view class="cover-content" style="text-align: center;">
+									<text class="uni-subtitle uni-white" style="color: gray;">雨量传感器照片</text>
+								</view>
+							</view>
+						</template>
+					</uni-card>
+				</view>
+				<view v-if="item.isRiver ==1 || item.isRes ==1 ">
+					<uni-card title="水位传感器运行状态" :is-shadow="false">
+						<text v-if="item.waterLevelSensorStatus == 0"
+							style="font-size: 0.7rem;color: green;margin-left: 4px;">正常</text>
+						<text v-else style="font-size: 0.7rem;color: orangered;margin-left: 4px;">故障</text>
+					</uni-card>
+					<uni-card title="是否更换水位传感器" :is-shadow="false">
+						<text v-if="item.waterSensorReplace==0" class="uni-body">否</text>
+						<text v-else class="uni-body">更换</text>
+					</uni-card>
+					<uni-card title="水位传感器维修说明" :is-shadow="false">
+						<text class="uni-body">{{item.waterSensorDesc}}</text>
+					</uni-card>
+					<uni-card v-if="item.waterSensorPhotoTake==1" padding="0" spacing="0" :is-shadow="false">
+						<template v-slot:cover>
+							<view class="custom-cover">
+								<image v-if="item.waterSensorPhotoUrl" class="cover-image" style="width: 100%;"
+									mode="aspectFill" :src="toOss(item.waterSensorPhotoUrl)">
+								</image>
+								<view class="cover-content" style="text-align: center;">
+									<text class="uni-subtitle uni-white" style="color: gray;">水位传感器照片</text>
+								</view>
+							</view>
+						</template>
+					</uni-card>
+				</view>
+				<view v-if="item.isGround ==1">
+					<uni-card title="墒情传感器运行状态" :is-shadow="false">
+						<text v-if="item.groundWaterSensorStatus == 0"
+							style="font-size: 0.7rem;color: green;margin-left: 4px;">正常</text>
+						<text v-else style="font-size: 0.7rem;color: orangered;margin-left: 4px;">故障</text>
+					</uni-card>
+					<uni-card title="是否更换墒情传感器" :is-shadow="false">
+						<text v-if="item.groundSensorReplace==0" class="uni-body">否</text>
+						<text v-else class="uni-body">更换</text>
+					</uni-card>
+					<uni-card title="墒情传感器维修说明" :is-shadow="false">
+						<text class="uni-body">{{item.groundSensorDesc}}</text>
+					</uni-card>
+					<uni-card v-if="item.groundSensorPhotoTake==1" padding="0" spacing="0" :is-shadow="false">
+						<template v-slot:cover>
+							<view class="custom-cover">
+								<image v-if="item.groundSensorPhotoUrl" class="cover-image" style="width: 100%;"
+									mode="aspectFill" :src="toOss(item.groundSensorPhotoUrl)">
+								</image>
+								<view class="cover-content" style="text-align: center;">
+									<text class="uni-subtitle uni-white" style="color: gray;">墒情传感器照片</text>
+								</view>
+							</view>
+						</template>
+					</uni-card>
+				</view>
+				<uni-card title="供电系统运行状态" :is-shadow="false">
+					<text v-if="item.powerStatus == 0"
+						style="font-size: 0.7rem;color: green;margin-left: 4px;">正常</text>
+					<text v-else style="font-size: 0.7rem;color: orangered;margin-left: 4px;">故障</text>
+				</uni-card>
+				<uni-card title="是否更换蓄电池" :is-shadow="false">
+					<text v-if="item.batteryReplace==0" class="uni-body">否</text>
+					<text v-else class="uni-body">更换</text>
+				</uni-card>
+				<uni-card title="是否更换太阳能板" :is-shadow="false">
+					<text v-if="item.sunPowerReplace==0" class="uni-body">否</text>
+					<text v-else class="uni-body">更换</text>
+				</uni-card>
+				<uni-card title="供电系统维修说明" :is-shadow="false">
+					<text class="uni-body">{{item.powerDesc}}</text>
+				</uni-card>
+				<uni-card v-if="item.batteryPhotoTake==1" padding="0" spacing="0" :is-shadow="false">
+					<template v-slot:cover>
+						<view class="custom-cover">
+							<image v-if="item.batteryPhotoUrl" class="cover-image" style="width: 100%;"
+								mode="aspectFill" :src="toOss(item.batteryPhotoUrl)">
+							</image>
+							<view class="cover-content" style="text-align: center;">
+								<text class="uni-subtitle uni-white" style="color: gray;">蓄电池照片</text>
+							</view>
+						</view>
+					</template>
+				</uni-card>
+				<uni-card v-if="item.sunPhotoTake==1" padding="0" spacing="0" :is-shadow="false">
+					<template v-slot:cover>
+						<view class="custom-cover">
+							<image v-if="item.sunPhotoUrl" class="cover-image" style="width: 100%;" mode="aspectFill"
+								:src="toOss(item.sunPhotoUrl)">
+							</image>
+							<view class="cover-content" style="text-align: center;">
+								<text class="uni-subtitle uni-white" style="color: gray;">太阳能板照片</text>
+							</view>
+						</view>
+					</template>
+				</uni-card>
+				<uni-card title="是否欠费" :is-shadow="false">
+					<text v-if="item.networkOverdue==0" class="uni-body">否</text>
+					<text v-else class="uni-body">欠费</text>
+				</uni-card>
+				
+				<uni-card v-if="item.isSatellite ==0" title="4G移动网络维修说明" :is-shadow="false">
+					<text class="uni-body">{{item.networkDesc}}</text>
+				</uni-card>
+				<uni-card v-else title="北斗通讯维修说明" :is-shadow="false">
+					<text class="uni-body">{{item.satelliteDesc}}</text>
+				</uni-card>
+				<uni-card title="维修总结说明" :is-shadow="false">
+					<text class="uni-body">{{item.processDesc}}</text>
+				</uni-card>
+				<uni-card v-if="item.baseBeforePhoto1Take ==1" padding="0" spacing="0" :is-shadow="false">
+					<template v-slot:cover>
+						<view class="custom-cover">
+							<image v-if="item.baseBeforePhoto1Url" class="cover-image" style="width: 100%;"
+								mode="aspectFill" :src="toOss(item.baseBeforePhoto1Url)">
+							</image>
+							<view class="cover-content" style="text-align: center;">
+								<text class="uni-subtitle uni-white" style="color: gray;">维修前照片一</text>
+							</view>
+						</view>
+					</template>
+				</uni-card>
+				<uni-card v-if="item.baseBeforePhoto2Take==1" padding="0" spacing="0" :is-shadow="false">
+					<template v-slot:cover>
+						<view class="custom-cover">
+							<image v-if="item.baseBeforePhoto2Url" class="cover-image" style="width: 100%;"
+								mode="aspectFill" :src="toOss(item.baseBeforePhoto2Url)">
+							</image>
+							<view class="cover-content" style="text-align: center;">
+								<text class="uni-subtitle uni-white" style="color: gray;">维修前照片二</text>
+							</view>
+						</view>
+					</template>
+				</uni-card>
+				<uni-card v-if="item.baseAfterPhoto1Take ==1" padding="0" spacing="0" :is-shadow="false">
+					<template v-slot:cover>
+						<view class="custom-cover">
+							<image v-if="item.baseAfterPhoto1Url" class="cover-image" style="width: 100%;"
+								mode="aspectFill" :src="toOss(item.baseAfterPhoto1Url)">
+							</image>
+							<view class="cover-content" style="text-align: center;">
+								<text class="uni-subtitle uni-white" style="color: gray;">维修后照片一</text>
+							</view>
+						</view>
+					</template>
+				</uni-card>
+				<uni-card v-if="item.baseAfterPhoto2Take==1" padding="0" spacing="0" :is-shadow="false">
+					<template v-slot:cover>
+						<view class="custom-cover">
+							<image v-if="item.baseAfterPhoto2Url" class="cover-image" style="width: 100%;"
+								mode="aspectFill" :src="toOss(item.baseAfterPhoto2Url)">
+							</image>
+							<view class="cover-content" style="text-align: center;">
+								<text class="uni-subtitle uni-white" style="color: gray;">维修后照片二</text>
+							</view>
+						</view>
+					</template>
+				</uni-card>
+			</view>
+			<view v-else>
+				<uni-card title="维修完成" :is-shadow="false">
+					<view class="uni-body">{{item.processDesc}}</view>
+				</uni-card>
+			</view>
+		</uni-section>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		pathToBase64,
+		base64ToPath
+	} from '@/js_sdk/mmmm-image-tools/index.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+
+	export default {
+		components: {},
+		onLoad(options) {
+			this.orderId = options.orderId;
+		},
+		data() {
+			return {
+				list: [],
+				orderId: 0,
+				reportId: 0,
+				orderStatusCreateKey: 0,
+				orderStatusConfirmKey: 0,
+				orderStatusProcessKey: 0,
+				orderStatusCloseKey: 0,
+				title: '维修任务处理详情',
+			}
+		},
+		computed: {},
+		onShow() {
+			this.getReportDict();
+		},
+		created() {},
+		methods: {
+			toOss(path) {
+				return oss + path;
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			getReportDict() {
+				var that = this;
+				http.request({
+					url: '/galaxy-system/dict-biz/dictionary?code=rtu_check_order_status',
+					method: 'GET'
+				}).then(res => {
+					if (res.data != null) {
+						const dictLength = res.data['length'];
+						for (var i = 0; i < dictLength; i++) {
+							let dict = res.data[i];
+							if (dict.dictKey === '1') {
+								that.orderStatusCreateKey = dict.id;
+							} else if (dict.dictKey === '2') {
+								that.orderStatusConfirmKey = dict.id;
+							} else if (dict.dictKey === '3') {
+								that.orderStatusProcessKey = dict.id;
+							} else if (dict.dictKey === '4') {
+								that.orderStatusCloseKey = dict.id;
+							}
+						}
+						this.getOrderProcessList();
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			getOrderProcessList() {
+				let that = this;
+				let postData = {};
+				postData['id'] = this.orderId;
+				http.request({
+					url: '/galaxy-business/rtu/check/order/process/list',
+					method: 'GET',
+					data: postData,
+				}).then(res => {
+					if (res.data != null) {
+						that.list = res.data;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+
+	.cell-hover-class {
+		background-color: rgb(235, 237, 238);
+	}
+
+	.view-flex-rs {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+	}
+
+	.view-flex-rc {
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+	}
+
+	.view-flex-re {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-end;
+	}
+
+	.view-flex-cs {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-start;
+	}
+
+	.view-flex-cc {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+	}
+
+	.view-flex-ce {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-end;
+	}
+
+	.line-body {
+		padding-left: 10px;
+		padding-right: 10px;
+	}
+
+	.required-star {
+		color: #FF0000;
+		font-size: 15px;
+		width: 20px;
+		text-align: center;
+		padding-left: 0px;
+		padding-right: 2px;
+	}
+
+	.item-title {
+		color: #909399;
+		font-size: 15px;
+	}
+
+	.mline-text {
+		padding-left: 2px;
+		width: 100%;
+		/* background-color:#909399; */
+		height: 70px;
+		border: 1px solid #FF5A5F;
+		border-radius: 5px;
+	}
+</style>
+
+<style lang="scss" scoped>
+	.container {
+		padding: 0 0 50rpx;
+	}
+
+	.uni-body {
+		font-size: 0.7rem;
+	}
+
+	.img-container {
+		margin-bottom: 0px;
+		width: 100px;
+		height: 100px;
+
+		.note-image-box {
+			margin-top: 0px;
+			display: flex;
+			flex-wrap: wrap;
+			padding: 10px;
+
+			.note-image-item {
+				position: relative;
+				width: 100%;
+				height: 0;
+				padding-top: 100%;
+				box-sizing: border-box;
+				// background-color: #18B566;
+
+
+				.close-icon {
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					position: absolute;
+					right: 0px;
+					top: 0px;
+					width: 22px;
+					height: 22px;
+					border-radius: 50%;
+					background-color: #d5d5d5;
+					z-index: 2;
+				}
+
+				.image-box {
+					display: flex;
+					justify-content: center;
+
+					align-items: center;
+					position: absolute;
+					top: 5px;
+					right: 5px;
+					border: 5px;
+					left: 5px;
+					border: 1px #eee solid;
+					border-radius: 5px;
+					overflow: hidden;
+					width: 98%;
+					height: 98%;
+
+				}
+
+
+			}
+		}
+	}
+</style>

+ 71 - 0
pages/check-order/photoView.vue

@@ -0,0 +1,71 @@
+<!--
+ * @Title: 
+ * @Description: 照片预览
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view style="width: 100%;display: flex;flex-direction: row;justify-content: center;align-items: center;">
+				<text style="color: white;font-size: 1rem;">{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<uni-group>
+			<view class="view-flex-block-center">
+				<image mode="widthFix" style="margin-top: 0px;" :src="photoPath">
+				</image>
+			</view>
+		</uni-group>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+	export default {
+		components: {},
+		data() {
+			return {
+				title: '照片预览',
+				desc: '',
+				show: false,
+				photoPath: '',
+				baseURL: '',
+			}
+		},
+		computed: {
+
+		},
+		onLoad(options) {
+			this.photoPath = oss + options.url;
+			console.log(this.photoPath)
+		},
+		onReady() {
+			console.log("onReady++++++++++++++")
+		},
+		onShow() {
+
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		padding: 0 0 100rpx;
+	}
+</style>

+ 340 - 0
pages/check-order/processcheckorderlistview.vue

@@ -0,0 +1,340 @@
+<!--
+ * @Title: 
+ * @Description: 工单处理记录信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<view v-if="permission.orgAdmin && orderClose==0" class="view-flex-inline-center">
+				<view style="width: 90%;margin-top: 20px;margin-bottom: 20px;">
+					<button type="warn" @click="toCancelOrder">取消工单</button>
+				</view>
+			</view>
+			<view v-if="orderClose==1">
+				<uni-card title="工单评分">
+					<uni-rate :value="orderRate" color="#bbb" active-color="coral" />
+				</uni-card>
+			</view>
+			<uni-list style="width: 100%;">
+				<uni-list-item v-for="(item,index) in list" :key="item.id" direction="column">
+					<template v-slot:body>
+						<view class="point">
+							<view class="dot">
+								{{index+1}}
+							</view>
+							<view class="time-title">{{item.createTime}}【{{item.orderStatusName}}】</view>
+						</view>
+						<view class="time-info">
+							<view class="time-line">
+								<!-- 工单下发 -->
+								<view v-if="item.orderStatusCode ==2" class="list-item-block">
+									<view class="line" style="padding-left:12px">
+										<view v-if="orderType==1" class="text" style="color: gray;width: 90%;">
+											工单类型:<span style="margin-left: 5px;color: cornflowerblue;">维修工单</span>
+										</view>
+										<view v-else-if="orderType==2" class="text" style="color: gray;width: 90%;">
+											工单类型:<span style="margin-left: 5px;color: cornflowerblue;">服务工单</span>
+										</view>
+										<view v-else></view>
+									</view>
+									<view class="line" style="padding-left:12px">
+										<view class="text" style="color: gray;width: 90%;">
+											工单创建人:<span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessUserName}}</span>
+										</view>
+									</view>
+									<uni-card title="问题描述">
+										<view class="text" style="color: cornflowerblue;">{{item.processDesc}}
+										</view>
+									</uni-card>
+									<uni-card title="照片">
+										<view class="view-flex-rs-flex-wrap">
+											<view v-for="(path, index) in item.failureProcessPhotoList" :key="index"
+												class="view-flex-cc" style="width: 80px;">
+												<view class="img-container">
+													<view class="note-image-box">
+														<view class="note-image-item">
+															<view class="image-box">
+																<image :src="toOss(path)" mode="widthFix"
+																	@click="openPhoto(path)">
+																</image>
+															</view>
+														</view>
+													</view>
+												</view>
+											</view>
+										</view>
+									</uni-card>
+									<uni-card title="视频">
+										<view class="view-flex-inline">
+											<image v-for="(path, index) in item.failureProcessVideoList" :key="index"
+												mode="widthFix" style="width: 80px;" :src="videoImg"
+												@click="openVideo(path)">
+											</image>
+										</view>
+									</uni-card>
+								</view>
+								<!-- 		工单处理中 -->
+								<view v-else-if="item.orderStatusCode ==3" class="list-item-block">
+									<view class="line" style="padding-left:12px">
+										<view class="text" style="width: 90%;color: gray;">
+											工单处理人:<span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessUserName}}</span>
+										</view>
+									</view>
+									<!-- <view v-if="orderType==1" class="line"> -->
+										<uni-card v-if="orderType==1" title="故障现象描述">
+											<view class="text" style="color: cornflowerblue;">{{item.failureCheckDesc}}
+											</view>
+										</uni-card>
+									<!-- </view> -->
+									<!-- <view v-else-if="orderType==2" class="line"> -->
+										<uni-card v-else-if="orderType==2" title="服务内容描述">
+											<view class="text" style="color: cornflowerblue;">{{item.failureCheckDesc}}
+											</view>
+										</uni-card>
+									<!-- </view> -->
+
+								<!-- 	<view v-else></view> -->
+									<uni-card title="解决措施说明">
+										<view class="text" style="color: cornflowerblue;">{{item.processDesc}}
+										</view>
+									</uni-card>
+									<uni-card v-if="orderType==1 && item.costsReport==2" title="费用说明">
+										<view class="text" style="color: cornflowerblue;">{{item.costsReportDesc}}
+										</view>
+									</uni-card>
+									<uni-card title="照片">
+										<view class="view-flex-rs-flex-wrap">
+											<view v-for="(path, index) in item.failureProcessPhotoList" :key="index"
+												class="view-flex-cc" style="width: 80px;">
+												<view class="img-container">
+													<view class="note-image-box">
+														<view class="note-image-item">
+															<view class="image-box">
+																<image :src="toOss(path)" mode="widthFix"
+																	@click="openPhoto(path)">
+																</image>
+															</view>
+														</view>
+													</view>
+												</view>
+											</view>
+										</view>
+										<!-- 										<view class="view-flex-block-center">
+											<image v-for="(path, index) in item.failureProcessPhotoList" :key="index"
+												mode="widthFix" style="width: 80%;margin-top: 10px;" :src="toOss(path)">
+											</image>
+										</view> -->
+									</uni-card>
+								</view>
+								<!-- 费用审批 -->
+								<view v-else-if="item.orderStatusCode ==5" class="list-item-block">
+									<view class="line" style="padding-left:12px">
+										<view class="text" style="width: 90%;color: gray;">
+											费用审批人:<span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessUserName}}</span>
+										</view>
+									</view>
+									<uni-card title="审批意见">
+										<view class="text" style="color: cornflowerblue;">{{item.processDesc}}
+										</view>
+									</uni-card>
+								</view>
+								<!-- 关闭审批 -->
+								<view v-else-if="item.orderStatusCode ==7" class="list-item-block">
+									<view class="line" style="padding-left:12px">
+										<view class="text" style="width: 90%;color: gray;">
+											工单完结审批人:<span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessUserName}}</span>
+										</view>
+									</view>
+									<uni-card title="审批意见">
+										<view class="text" style="color: cornflowerblue;">{{item.processDesc}}
+										</view>
+									</uni-card>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+	export default {
+		components: {},
+		data() {
+			return {
+				title: '工单处理记录详情',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				query: {},
+				orderId: '',
+				orderType: 1,
+				orderRate: 0,
+				baseURL: '',
+				baseOSS: '',
+				videoImg: '/static/images/video.png',
+				orderClose: 0,
+			}
+		},
+		computed: {},
+		onLoad(option) {
+			this.permission.admin = false;
+			this.permission.orgAdmin = false;
+			this.permission.companyAdmin = false;
+			this.permission.companyServciePerson = false;
+			if (this.userInfo.role_name === role.admin) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role.orgAdmin) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role.companyAdmin) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role.companyServciePerson) {
+				this.permission.companyServciePerson = true;
+				if (this.userInfo.post_id == '1706859505948098562') {
+					this.postName = "engineer";
+				} else if (this.userInfo.post_id == '1730535542909140993') {
+					this.postName = "servicePerson";
+				}
+			}
+			this.orderClose = option.orderClose;
+
+			this.orderId = option.orderId;
+			this.orderType = option.orderType;
+			if (this.orderClose == 1) {
+				this.orderRate = option.orderRate;
+			}
+
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.baseOSS = oss;
+			this.query = {};
+			this.query['orderId'] = this.orderId;
+			this.pageCurrent = 1;
+			this.getPage()
+		},
+		onShow() {},
+		methods: {
+			toOss(path) {
+				return this.baseOSS + path;
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			toCancelOrder() {
+				uni.navigateTo({
+					url: '/pages/check-order/ordercancel?id=' + this.orderId
+				})
+			},
+			openPhoto(file) {
+				let url = '/pages/check-order/photoView?url=' + file;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			openVideo(file) {
+				let url = '/pages/check-order/videoView?url=' + file;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			getPage(params = {}) {
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/order/process/list',
+					method: 'GET',
+					data: postData,
+				}).then(res => {
+					if (res.data != null) {
+						console.log(JSON.stringify(res.data))
+						that.list = res.data;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.point {
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		margin: 15rpx 0;
+	}
+
+	.dot {
+		//margin-left: -22rpx;
+		background-color: #19be6b;
+		box-shadow: 0 0 5rpx 5rpx #71d5a1;
+		color: white;
+		width: 50rpx;
+		height: 50rpx;
+		padding: 5rpx;
+		font-size: 28rpx;
+		text-align: center;
+		border-radius: 50rpx;
+	}
+
+	.time-title {
+		font-size: 30rpx;
+		margin-left: 15rpx;
+		background-color: whitesmoke;
+		padding: 12rpx 25rpx;
+		border-radius: 50rpx;
+		color: orangered;
+	}
+
+	.time-info {
+		padding: 0rpx 0rpx 0rpx 25rpx;
+	}
+
+	.time-line {
+		border-left: 3rpx solid #71d5a1;
+		padding: 10rpx 10rpx 30rpx 20rpx;
+	}
+</style>

+ 222 - 0
pages/check-order/rtu/rtucheckorderlist.vue

@@ -0,0 +1,222 @@
+<!--
+ * @Title: 
+ * @Description: RTU维修任务列表,包括正在处理和历史的任务
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+									src="/static/images/logo_pc.png" mode="widthFix">
+								</image>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="list" size="18" color="lightblue" />
+								<text class="item-text-lable">维修状态:</text>
+								<text v-if="item.orderStatus==1" class="item-text-content" style="color: red;">等待确认</text>
+								<text v-if="item.orderStatus==2" class="item-text-content" style="color: orange;">处理中</text>
+								<text v-if="item.orderStatus==3" class="item-text-content" style="color: blue;">已处理</text>
+								<text v-if="item.orderStatus==4" class="item-text-content" style="color: green;">已完成</text>
+							</view>
+							<view v-if="item.orderStatus==1" class="items-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+								<text class="item-text-lable">创建时长:</text>
+								<text class="item-text-content" style="color: red;">{{item.taskCreateDuration}}</text>
+							</view>
+							<view v-else class="items-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+								<text class="item-text-lable">维修时长:</text>
+								<text class="item-text-content" style="color: red;">{{item.taskProcessDuration}}</text>
+							</view>
+							<view v-if="item.orderStatus==1" class="items-line">
+								<uni-icons class="input-uni-icon" type="auth" size="18" color="lightblue" />
+								<text class="item-text-lable">运维公司管理员:</text>
+								<text class="item-text-content">{{item.manageCompanyAdminName}}</text>
+							</view>
+							<view v-else class="items-line">
+								<uni-icons class="input-uni-icon" type="auth" size="18" color="lightblue" />
+								<text class="item-text-lable">处理人:</text>
+								<text class="item-text-content">{{item.contactUserName}}</text>
+							</view>
+							<view v-if="item.orderStatus==1" class="items-line">
+								<uni-icons class="input-uni-icon" type="phone" size="18" color="lightblue" />
+								<text class="item-text-lable">联系电话:</text>
+								<view v-if="item.manageCompanyAdminPhone != null" @click="call(item.manageCompanyAdminPhone)">
+									<text class="item-text-content" style="text-decoration-line: underline;">{{item.manageCompanyAdminPhone}}</text>
+								</view>
+							</view>
+							<view v-else class="items-line">
+								<uni-icons class="input-uni-icon" type="phone" size="18" color="lightblue" />
+								<text class="item-text-lable">联系电话:</text>
+								<view v-if="item.contactPhone != null" @click="call(item.contactPhone)">
+									<text class="item-text-content" style="text-decoration-line: underline;">{{item.contactPhone}}</text>
+								</view>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button"
+									@click="onDetailViewClick(item.id)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">维修详情</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="uni-pagination-box">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+
+	export default {
+		components: {
+
+		},
+		onLoad(option) {
+			this.rtuCode = option.rtuCode;
+			if (this.userInfo.role_name === role['admin']) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role['orgAdmin']) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role['companyAdmin']) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role['companyServciePerson']) {
+				this.permission.companyServciePerson = true;
+			}
+			let params = {};
+			params['rtuCode'] = this.rtuCode;
+			this.getPage(params);
+		},
+		data() {
+			return {
+				title: '维修任务信息',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				query: {},
+				rtuCode: '',
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+
+		},
+		methods: {
+			//返回上一页
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			onDetailViewClick(id) {
+				let url = '/pages/check-order/orderprocessreportdetail?orderId=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			getAreaName(item) {
+				let htmltext = '';
+				if (item.adCity) {
+					htmltext = htmltext + item.adCity;
+				}
+				if (item.adDist) {
+					if (htmltext.length > 0) {
+						htmltext = htmltext + ' / ';
+					}
+					htmltext = htmltext + item.adDist;
+				}
+				return htmltext;
+			},
+			getPage(params = {}) {
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/rtu/check/order/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.nav-title {
+		width: 100%;
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+
+		text {
+			color: white;
+			font-size: 1rem;
+		}
+	}
+
+	.container {
+		padding: 0 0 100rpx;
+	}
+
+</style>

+ 248 - 0
pages/check-order/servicepersoncheckorderlist.vue

@@ -0,0 +1,248 @@
+<!--
+ * @Title: 
+ * @Description: 当前维修任务列表
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<uni-card title="等待确认">
+							<view class="list-item-block">
+								<view class="items-line">
+									<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+										src="/static/images/list/order_item.png" mode="widthFix">
+									</image>
+									<text class="item-title-rtu-name">{{item.rtuName}}</text>
+									<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+								</view>
+								<view class="items-line">
+									<uni-icons class="input-uni-icon" type="loop" size="18" color="lightblue" />
+									<text class="item-text-lable">维修状态:</text>
+									<text v-if="item.orderStatus==1" class="item-text-content"
+										style="color: red;">等待确认</text>
+									<text v-if="item.orderStatus==2" class="item-text-content"
+										style="color: orange;">处理中</text>
+									<text v-if="item.orderStatus==3" class="item-text-content"
+										style="color: blue;">已处理</text>
+									<text v-if="item.orderStatus==4" class="item-text-content"
+										style="color: green;">已完成</text>
+								</view>
+								<view class="items-line">
+									<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+									<text class="item-text-lable">维修时长:</text>
+									<text class="item-text-content"
+										style="color: red;">{{item.taskProcessDuration}}</text>
+								</view>
+								<view class="items-line">
+									<uni-icons class="input-uni-icon" type="location" size="18" color="lightblue" />
+									<text class="item-text-lable">行政区划:</text>
+									<text class="item-text-content">{{item.areaName}}</text>
+								</view>
+								<view class="items-line">
+									<uni-icons class="input-uni-icon" type="person" size="18" color="lightblue" />
+									<text class="item-text-lable">处理人:</text>
+									<text class="item-text-content">{{item.contactUserName}}</text>
+								</view>
+								<view class="items-line">
+									<uni-icons class="input-uni-icon" type="phone" size="18" color="lightblue" />
+									<text class="item-text-lable">联系电话:</text>
+									<view v-if="item.contactPhone != null" @click="call(item.contactPhone)">
+										<text class="item-text-content-phone">{{item.contactPhone}}</text>
+									</view>
+								</view>
+								<view v-if="item.orderStatus==3" class="item-button-group">
+									<view class="item-button" style="background-color:lightblue"
+										@click="onOrderReportItemClick(item.id)">
+										<view class="items-line">
+											<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+											<text class="button-text">维修详情</text>
+										</view>
+									</view>
+								</view>
+							</view>
+						</uni-card>
+					</template>
+				</uni-list-item>
+			</uni-list>
+
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+
+	export default {
+		components: {},
+		onLoad(option) {
+			if (this.userInfo.role_name === role['admin']) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role['orgAdmin']) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role['companyAdmin']) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role['companyServciePerson']) {
+				this.permission.companyServciePerson = true;
+			}
+			this.type = option.type;
+			if (this.type == '1') {
+				this.query['orderClose'] = 0;
+				this.title = "全部维修任务信息";
+			} else if (this.type == '2') {
+				this.query['orderStatus'] = 2;
+				this.query['orderClose'] = 0;
+				this.title = "处理中维修任务信息";
+			} else if (this.type == '3') {
+				this.query['orderStatus'] = 3;
+				this.query['orderClose'] = 0;
+				this.title = "已处理维修任务信息";
+			}
+			let userId = option.userId;
+			if (userId) {
+				this.query['servicePersonId'] = userId;
+			}
+			this.pageCurrent = 1;
+			this.getPage()
+		},
+		data() {
+			return {
+				title: '维修任务信息',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				type: '',
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				query: {},
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				}
+			}
+		},
+		computed: {},
+		onShow() {},
+		methods: {
+			//返回上一页
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			call(phone) {
+				console.log(phone)
+				uni.showModal({
+					content: '是否需要拨打[' + phone + ']?',
+					showCancel: true,
+					success(res) {
+						if (res.confirm) {
+							uni.makePhoneCall({
+								phoneNumber: phone
+							});
+						}
+					}
+				});
+			},
+			onDetailViewClick(id) {
+				let url = '/pages/check-order/orderprocessreportdetail?orderId=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onOrderReportItemClick(id) {
+				console.log("opne record ", id)
+				var url = '/pages/check-order/orderprocessreportdetail?orderId=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onLocationClick(item) {
+				let lat = item.lat;
+				let lng = item.lng;
+				let name = item.rtuName;
+				let add = item.locationDesc;
+				uni.openLocation({
+					latitude: Number(lat),
+					longitude: Number(lng),
+					name: name,
+					address: "",
+					success() {}
+				})
+			},
+			onManuallyCloseOrderClick(id) {
+				uni.navigateTo({
+					url: '/pages/check-order/manuallyclosecheckorder?id=' + id
+				})
+			},
+			onComfireCheckOrderClick(id) {
+				let url =
+					'/pages/check-order/orderconfirm?id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			getPage(params = {}) {
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/rtu/check/order/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 143 - 0
pages/check-order/todaycheckorderrprocesseportlist.vue

@@ -0,0 +1,143 @@
+<!--
+ * @Title: 
+ * @Description: 当天维修任务动态信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+									src="/static/images/list/order_item.png" mode="widthFix">
+								</image>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="loop" size="18" color="lightblue" />
+								<text class="item-text-lable">状态:</text>
+								<text class="item-text-content">{{item.orderStatusName}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="person" size="18" color="lightblue" />
+								<text class="item-text-lable">填报人:</text>
+								<text class="item-text-content">{{item.orderProcessUserName}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+								<text class="item-text-lable">填报时间:</text>
+								<text class="item-text-content">{{item.updateTime}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="compose" size="18" color="lightblue" />
+								<text class="item-text-lable">说明:</text>
+								<text class="item-text-content-ellipsis">{{item.processDesc}}</text>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button" @click="toOrderProcessDetail(item.orderId)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">详情信息</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	export default {
+		components: {
+		},
+		onLoad(option) {},
+		data() {
+			return {
+				list: [],
+				title: '今日测站动态信息',
+				pageSize: 10,
+				// 当前页
+				pageCurrent: 1,
+				// 数据总量
+				total: 0,
+			}
+		},
+		computed: {
+		},
+		onShow() {
+			this.getPage();
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			getPage() {
+				let that = this;
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				http.request({
+					url: '/galaxy-business/rtu/check/order/process/today/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+				}).then(res => {
+					if (res.success) {
+						if (res.data.records != null) {
+							that.list = res.data.records;
+						}
+						this.total = res.data.total;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			toOrderProcessDetail(id) {
+				console.log("opne record ", id)
+				var url = '/pages/check-order/orderprocessreportdetail?orderId=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+
+</style>
+
+<style lang="scss" scoped>
+
+</style>

+ 263 - 0
pages/check-order/uncomfirecheckorderlist.vue

@@ -0,0 +1,263 @@
+<!--
+ * @Title: 
+ * @Description: 新任务,可以进行确认操作
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<view style="padding-left: 5px;padding-right: 5px;">
+				<uni-collapse v-model="value">
+					<uni-collapse-item title="异常类别筛选条件" :show-animation="true">
+						<view class="select-checkbox">
+							<uni-data-checkbox v-model="warnKindOption" :localdata="warnKindItems"
+								@change="warnKindOptionChange">
+							</uni-data-checkbox>
+						</view>
+					</uni-collapse-item>
+				</uni-collapse>
+			</view>
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<view class="block">
+									<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+										src="/static/images/list/order_item.png" mode="widthFix">
+									</image>
+								</view>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="location" size="18" color="lightblue" />
+								<text class="item-text-lable">行政区划:</text>
+								<text class="item-text-content">{{item.areaName}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="bars" size="18" color="lightblue" />
+								<text class="item-text-lable">异常类型:</text>
+								<text class="item-text-content-ellipsis">{{item.warnKindInfo}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+								<text class="item-text-lable">任务创建时长:</text>
+								<text class="item-text-content">{{item.taskCreateDuration}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="auth" size="18" color="lightblue" />
+								<text class="item-text-lable">运维公司管理员:</text>
+								<text class="item-text-content">{{item.manageCompanyAdminName}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="phone" size="18" color="lightblue" />
+								<text class="item-text-lable">联系电话:</text>
+								<view v-if="item.manageCompanyAdminPhone != null" @click="call(item.manageCompanyAdminPhone)">
+									<text class="item-text-content-phone">{{item.manageCompanyAdminPhone}}</text>
+								</view>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button" @click="onLocationClick(item)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="location" size="18" color="coral" />
+										<text class="button-text">导航</text>
+									</view>
+								</view>
+								<view class="item-button" @click="call(item.manageCompanyAdminPhone)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="phone" size="18" color="coral" />
+										<text class="button-text">电 话</text>
+									</view>
+								</view>
+								<view class="item-button" @click="onComfireCheckOrderClick(item.id)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="auth" size="18" color="coral" />
+										<text class="button-text">查看任务</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+	export default {
+		components: {},
+		onLoad(option) {
+			if (this.userInfo.role_name === role['admin']) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role['orgAdmin']) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role['companyAdmin']) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role['companyServciePerson']) {
+				this.permission.companyServciePerson = true;
+			}
+			this.query = {};
+			this.query['orderConfirm'] = 0;
+			this.query['orderClose'] = 0;
+			this.getPage();
+		},
+		data() {
+			return {
+				title: '新任务',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				value: ['0'],
+				warnKindItems: [{
+					'value': 0,
+					'text': '全部'
+				}, {
+					'value': 1,
+					'text': '离线'
+				}, {
+					'value': 2,
+					'text': '时钟异常'
+				}, {
+					'value': 3,
+					'text': '雨量漏报'
+				}, {
+					'value': 4,
+					'text': '水位漏报'
+				}, {
+					'value': 5,
+					'text': '5分钟上报延时'
+				}, {
+					'value': 6,
+					'text': '雨量小时上报延时'
+				}, {
+					'value': 7,
+					'text': '水位小时上报延时'
+				}, {
+					'value': 8,
+					'text': '雨量疑似异常值'
+				}],
+				warnKindOption: 0,
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				query: {},
+			}
+		},
+		computed: {},
+		onShow() {},
+		methods: {
+			//返回上一页
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			warnKindOptionChange: function(evt) {
+				let params = {};
+				this.getPage(params);
+			},
+			call(phone) {
+				console.log(phone)
+				uni.showModal({
+					content: '是否需要拨打[' + phone + ']?',
+					showCancel: true,
+					success(res) {
+						if (res.confirm) {
+							uni.makePhoneCall({
+								phoneNumber: phone
+							});
+						}
+					}
+				});
+			},
+			onLocationClick(item) {
+				let lat = item.lat;
+				let lng = item.lng;
+				let name = item.rtuName;
+				let add = item.locationDesc;
+				uni.openLocation({
+					latitude: Number(lat),
+					longitude: Number(lng),
+					name: name,
+					address: "",
+					success() {}
+				})
+			},
+			onComfireCheckOrderClick(id) {
+				let url =
+					'/pages/check-order/orderconfirm?id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			getPage(params = {}) {
+				if (this.warnKindOption == 0) {} else {
+					params['warnKind'] = this.warnKindOption;
+				}
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/rtu/check/order/unconfirm/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.select-checkbox {
+		margin-top: 0px;
+		margin-bottom: 5px;
+		padding-left: 15px;
+	}
+</style>

+ 195 - 0
pages/check-order/uncomfirecheckorderlistview.vue

@@ -0,0 +1,195 @@
+<!--
+ * @Title: 
+ * @Description: 未确认维修任务列表,只查看
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+									src="/static/images/list/order_item.png" mode="widthFix">
+								</image>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+								<text class="item-text-lable">创建时长:</text>
+								<text class="item-text-content" style="color: red;">{{item.taskCreateDuration}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="location" size="18" color="lightblue" />
+								<text class="item-text-lable">行政区划:</text>
+								<text class="item-text-content">{{item.areaName}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="home" size="18" color="lightblue" />
+								<text class="item-text-lable">运维公司:</text>
+								<text class="item-text-content">
+									{{item.manageCompany}}
+								</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="auth" size="18" color="lightblue" />
+								<text class="item-text-lable">运维公司管理员:</text>
+								<text class="item-text-content">{{item.manageCompanyAdminName}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="phone" size="18" color="lightblue" />
+								<text class="item-text-lable">联系电话:</text>
+								<view v-if="item.manageCompanyAdminPhone != null" @click="call(item.manageCompanyAdminPhone)">
+									<text class="item-text-content-phone">{{item.manageCompanyAdminPhone}}</text>
+								</view>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button"
+									@click="call(item.manageCompanyAdminPhone)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="phone" size="18" color="coral" />
+										<text class="button-text">电 话</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+
+	export default {
+		components: {
+
+		},
+		onLoad(option) {
+			if (this.userInfo.role_name === role['admin']) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role['orgAdmin']) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role['companyAdmin']) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role['companyServciePerson']) {
+				this.permission.companyServciePerson = true;
+			}
+
+			this.query = {};
+			this.query['orderConfirm'] = 0;
+			this.query['orderClose'] = 0;
+
+			this.pageCurrent = 1;
+			this.getPage()
+		},
+		data() {
+			return {
+				title: '未确认维修任务信息',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				query: {},
+			}
+		},
+		computed: {
+			getIcon() {
+				return path => {
+					return 'https://cdn.uviewui.com/uview/example/' + path + '.png';
+				}
+			},
+		},
+		onShow() {
+
+		},
+		methods: {
+			//返回上一页
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			call(phone) {
+				console.log(phone)
+				uni.showModal({
+					content: '是否需要拨打[' + phone + ']?',
+					showCancel: true,
+					success(res) {
+						if (res.confirm) {
+							uni.makePhoneCall({
+								phoneNumber: phone
+							});
+						}
+					}
+				});
+			},
+			getPage(params = {}) {
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/rtu/check/order/unconfirm/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						//console.log(JSON.stringify(res.data.records))
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 85 - 0
pages/check-order/videoView.vue

@@ -0,0 +1,85 @@
+<!--
+ * @Title: 
+ * @Description: 视频预览
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view style="width: 100%;display: flex;flex-direction: row;justify-content: center;align-items: center;">
+				<text style="color: white;font-size: 1rem;">{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<uni-group>
+			<view class="view-flex-inline-center">
+				<video :src="videoPath"></video>
+			</view>
+		</uni-group>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+	export default {
+		components: {},
+		data() {
+			return {
+				title: '视频预览',
+				desc: '',
+				show:false,
+				videoPath:'',
+				//videoPath:'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/2minute-demo.mp4',
+				//videoPath: 'https://wx.dahengsi.com:44301/mp4/galaxy/upload/20231229/061345ac7e717c1d0dc3546c4cd0df0c.mp4',
+				baseURL: '',
+			}
+		},
+		computed: {
+
+		},
+		onLoad(options) {
+			this.videoPath =oss+options.url;
+			console.log(this.videoPath)
+		},
+		onReady() {
+			console.log("onReady++++++++++++++")
+		},
+		onShow() {
+
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		padding: 0 0 100rpx;
+	}
+
+	.view-flex-rc {
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.view-flex-cc {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+	}
+</style>

+ 238 - 0
pages/equipment-inspection/companyfinishedinspectionreportlist.vue

@@ -0,0 +1,238 @@
+<!--
+ * @Title: 
+ * @Description: 巡检上报列表
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+									src="/static/images/list/inspection_item.png" mode="widthFix">
+								</image>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view v-if="rainSeasonKind==0" style="margin-top: 2px;">
+								<view class="items-line">
+									<text v-if="item.beforeRainSeasonStatus ==1"
+										class="item-text-content">汛前:{{item.beforeRainSeasonReportUserName}}/{{item.beforeRainSeasonReportTime}}</text>
+								</view>
+								<view class="items-line">
+									<text v-if="item.rainSeasonFirstStatus ==1"
+										class="item-text-content">汛中(一):{{item.rainSeasonFirstReportUserName}}/{{item.rainSeasonFirstReportTime}}</text>
+								</view>
+								<view class="items-line">
+									<text v-if="item.rainSeasonSecondStatus ==1"
+										class="item-text-content">汛中(二):{{item.rainSeasonSecondReportUserName}}/{{item.rainSeasonSecondReportTime}}</text>
+								</view>
+							</view>
+							<view v-else>
+								<view class="items-line" style="margin-top: 2px;">
+									<uni-icons class="input-uni-icon" type="auth" size="18" color="lightblue" />
+									<text class="item-text-lable">填报人:</text>
+									<text v-if="rainSeasonKind ==1"
+										class="item-text-content">{{item.beforeRainSeasonReportUserName}}</text>
+									<text v-else-if="rainSeasonKind ==2"
+										class="item-text-content">{{item.rainSeasonFirstReportUserName}}</text>
+									<text v-else-if="rainSeasonKind ==3"
+										class="item-text-content">{{item.rainSeasonSecondReportUserName}}</text>
+								</view>
+								<view class="items-line" style="margin-top: 2px;">
+									<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+									<text class="item-text-lable">填报时间:</text>
+									<text v-if="rainSeasonKind ==1"
+										class="item-text-content">{{item.beforeRainSeasonReportTime}}</text>
+									<text v-else-if="rainSeasonKind ==2"
+										class="item-text-content">{{item.rainSeasonFirstReportTime}}</text>
+									<text v-else-if="rainSeasonKind ==3"
+										class="item-text-content">{{item.rainSeasonSecondReportTime}}</text>
+								</view>
+							</view>
+							<view class="item-button-group">
+								<view v-if="item.beforeRainSeasonStatus ==1" class="item-button"
+									@click="onBeforeRainDetailViewClick(item.beforeRainSeasonReportId)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">汛前详情</text>
+									</view>
+								</view>
+								<view v-if="item.rainSeasonFirstStatus ==1" class="item-button"
+									@click="onRainFirstDetailViewClick(item.rainSeasonFirstReportId)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">汛中(一)详情</text>
+									</view>
+								</view>
+								<view v-if="item.rainSeasonSecondStatus ==1" class="item-button"
+									@click="onRainSencodDetailViewClick(item.rainSeasonSecondReportId)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">汛中(二)详情</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :page-size="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+
+	export default {
+		components: {},
+		onLoad(option) {
+			if (this.userInfo.role_name === role['admin']) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role['orgAdmin']) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role['companyAdmin']) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role['companyServciePerson']) {
+				this.permission.companyServciePerson = true;
+			}
+			this.rainSeasonKind = option.rainSeasonKind;
+			this.query['deptId'] = option.deptId;
+
+			if (this.rainSeasonKind == 0) {
+				this.title = '年度已巡检设备信息';
+			} else if (this.rainSeasonKind == 1) {
+				this.title = '汛前已巡检设备信息';
+				this.query['rainSeasonKind'] = option.rainSeasonKind;
+			} else if (this.rainSeasonKind == 2) {
+				this.title = '汛中(一)已巡检设备信息';
+				this.query['rainSeasonKind'] = option.rainSeasonKind;
+			} else if (this.rainSeasonKind == 3) {
+				this.title = '汛中(二)已巡检设备信息';
+				this.query['rainSeasonKind'] = option.rainSeasonKind;
+			}
+			console.log(JSON.stringify(this.query))
+			this.getPage();
+		},
+		data() {
+			return {
+				rainSeasonKind: 0,
+				title: '已巡检设备信息',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				list: [],
+				pageSize: 10,
+				// 当前页
+				pageCurrent: 1,
+				// 数据总量
+				total: 0,
+				query: {},
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				}
+			}
+		},
+		computed: {
+		},
+		onShow() {
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			onBeforeRainDetailViewClick(id) {
+				console.log("onDetailViewClick " + id)
+				var url = '/pages/equipment-inspection/inspectionreportview?type=1&id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onRainFirstDetailViewClick(id) {
+				console.log("onDetailViewClick " + id)
+				var url = '/pages/equipment-inspection/inspectionreportview?type=2&id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onRainSencodDetailViewClick(id) {
+				console.log("onDetailViewClick " + id)
+				var url = '/pages/equipment-inspection/inspectionreportview?type=3&id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			getPage(params = {}) {
+				let that = this;
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(this.query, params);
+				http.request({
+					url: '/galaxy-business/equipment/inspection/rain/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data != null) {
+						if (res.data.records != null) {
+							that.list = res.data.records;
+						}
+						this.total = res.data.total;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+
+</style>

+ 2862 - 0
pages/equipment-inspection/equipmentinspectionreport.vue

@@ -0,0 +1,2862 @@
+<!--
+ * @Title: 
+ * @Description: 巡检填报
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<uni-forms ref="baseForm" :model="formData">
+			<uni-section title="移动网络信号" ftitleFontSize="0.8rem" style="width: 100%;">
+				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template>
+				<view style="padding-top: 10px;padding-bottom: 10px;padding-left: 15px;padding-right: 15px;">
+					<uni-forms-item name="networkSignalStatus" label="手机网络信号" label-width="130px" required>
+						<uni-data-checkbox v-model="formData.networkSignalStatus" :localdata="ispItems.items">
+						</uni-data-checkbox>
+					</uni-forms-item>
+					<view
+						style="margin-top: 10px;margin-bottom: 10px;padding-left: 0px;padding-right: 15px;font-size: 0.6rem;color:skyblue;">
+						备注:如以下物联网卡信息发生变化,请仔细核对修改</view>
+					<uni-forms-item name='networkPayer' label="物联网卡运营商" label-width="130px">
+						<uni-easyinput v-model="formData.networkPayer" placeholder="请录入物联网卡运营商名称" />
+					</uni-forms-item>
+					<uni-forms-item name='networkSimId' label="物联网卡号" label-width="130px">
+						<uni-easyinput v-model="formData.networkSimId" placeholder="请录入物联网卡号" />
+					</uni-forms-item>
+				</view>
+			</uni-section>
+			<uni-section title="基础信息" titleFontSize="0.8rem" style="width: 100%;">
+				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template>
+				<view style="padding-top: 10px;padding-bottom: 10px;padding-left: 15px;padding-right: 15px;">
+					<uni-forms-item label="测站名称:" label-width="100px">
+						<view class="view-flex-rs" style="height: 100%;">
+							<view class="view-flex-cc"><text>{{rtuInfo.rtuName}}</text></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="测站编码:" label-width="100px">
+						<view class="view-flex-rs" style="height: 100%;">
+							<view class="view-flex-cc"><text>{{rtuInfo.rtuCode}}</text></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="测站类型:" label-width="100px">
+						<view class="view-flex-rs" style="height: 100%;">
+							<view class="view-flex-cc">
+								<text>{{toRtuKind()}}</text>
+							</view>
+						</view>
+					</uni-forms-item>
+				</view>
+			</uni-section>
+			<uni-section title="地理信息" titleFontSize="0.8rem" style="width: 100%;">
+				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template>
+				<view style="padding-top: 10px;padding-bottom: 10px;padding-left: 15px;padding-right: 15px;">
+					<!-- <view style="margin-bottom: 10px;font-size: 0.7rem;color:lightcoral;">备注:以下信息可以进行修改</view> -->
+					<uni-forms-item label="测站安装地址:" label-width="100px">
+						<view class="view-flex-rs" style="height: 100%;">
+							<view class="view-flex-cc"><text>{{data.locationDesc}}</text></view>
+						</view>
+					</uni-forms-item>
+					<uni-forms-item label="经纬度:" label-width="100px">
+						<view class="view-flex-rs" style="height: 100%;">
+							<view class="view-flex-cc"><text>{{data.lng}}/{{data.lat}}</text></view>
+						</view>
+					</uni-forms-item>
+				</view>
+			</uni-section>
+			<uni-section title="站点状态检查" titleFontSize="0.8rem" style="width: 100%;">
+				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template>
+				<uni-card title="检查项(单选)" :is-shadow="false">
+					<radio-group @change="onSiteCheckStatusRadioChange" class="view-flex-rs">
+						<label style="margin-right: 10px;width:80px" class="view-flex-rs"
+							v-for="(item, index) in data.siteCheckStatus.items" :key="item.id">
+							<view>
+								<radio :value="item.id" :checked="index === data.siteCheckStatus.current" />
+							</view>
+							<view style="font-size: 0.7rem;">{{item.dictValue}}</view>
+						</label>
+					</radio-group>
+				</uni-card>
+				<uni-card title="拍摄照片" extra="点击下方按钮开始拍摄" :is-shadow="false">
+					<view
+						style="padding-top: 10px;padding-left: 0px;padding-right: 15px;font-size: 0.7rem;color:lightcoral;">
+						备注:必填项,至少要拍一张照片</view>
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(item, index) in data.siteCheckPhotos" :key="index" class="view-flex-cc"
+							style="width: 100px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="close-icon" @click="onSiteCheckPhotoDel(index)">
+											<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+										</view>
+										<view class="image-box">
+											<image :src="toOss(item)" mode="widthFix">
+											</image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item" @click="onSiteCheckPhotoAdd()">
+										<view class="image-box">
+											<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</uni-card>
+				<uni-card title="站点检查补充说明:" :is-shadow="false">
+					<uni-easyinput type="textarea" v-model="data.siteCheckRemark" placeholder="请输入站点检查补充说明" />
+				</uni-card>
+			</uni-section>
+			<uni-section v-if="rtuInfo.isRain" title="雨量站检查" titleFontSize="0.8rem" style="width: 100%;">
+				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template>
+				<uni-card title="检查项(多选)" :is-shadow="false">
+					<checkbox-group @change="onRainSiteCheckboxChange" class="view-flex-rs">
+						<label class="view-flex-rs" style="margin-right: 10px;font-size: 0.7rem;"
+							v-for="(item, index) in data.rainSiteCheckItems.items" :key="item.id">
+							<view>
+								<checkbox v-if="item.checked" :value="item.id" checked="true" />
+								<checkbox v-else :value="item.id" />
+							</view>
+							<view style="font-size: 0.7rem;">{{item.dictValue}}</view>
+						</label>
+					</checkbox-group>
+				</uni-card>
+				<uni-card title="拍摄照片" extra="点击下方按钮开始拍摄" :is-shadow="false">
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(item, index) in data.rainSiteCheckPhotos" :key="index" class="view-flex-cc"
+							style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="close-icon" @click="onRainSitePhotoDel(index)">
+											<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+										</view>
+										<view class="image-box">
+											<image :src="toOss(item)" mode="widthFix">
+											</image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item" @click="onRainSiteCheckPhotoAdd()">
+										<view class="image-box">
+											<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</uni-card>
+				<uni-card title="巡检结果" :is-shadow="false">
+					<radio-group @change="onRainSiteCheckStatusRadioChange" class="view-flex-rs">
+						<label style="margin-right: 10px;width:80px" class="view-flex-rs"
+							v-for="(item, index) in data.rainSiteCheckStatus.items" :key="item.id">
+							<view>
+								<radio :value="item.id" :checked="index === data.rainSiteCheckStatus.current" />
+							</view>
+							<view style="font-size: 0.7rem;">{{item.dictValue}}</view>
+						</label>
+					</radio-group>
+				</uni-card>
+				<uni-card title="雨量站检查补充说明:" :is-shadow="false">
+					<uni-easyinput type="textarea" v-model="data.rainSiteCheckRemark" placeholder="请输入雨量站检查补充说明" />
+				</uni-card>
+			</uni-section>
+			<uni-section v-if="rtuInfo.isRiver || rtuInfo.isRes" title="水位站检查" titleFontSize="0.8rem"
+				style="width: 100%;">
+				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template>
+				<uni-card title="检查项(多选)" :is-shadow="false">
+					<checkbox-group @change="onWaterSiteCheckboxChange" class="view-flex-rs">
+						<label class="view-flex-rs" style="margin-right: 10px;font-size: 0.7rem;"
+							v-for="(item, index) in data.waterSiteCheckItems.items" :key="item.id">
+							<view>
+								<checkbox v-if="item.checked" :value="item.id" checked="true" />
+								<checkbox v-else :value="item.id" />
+							</view>
+							<view style="font-size: 0.7rem;">{{item.dictValue}}</view>
+						</label>
+					</checkbox-group>
+				</uni-card>
+				<uni-card title="拍摄照片" extra="点击下方按钮开始拍摄" :is-shadow="false">
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(item, index) in data.waterSiteCheckPhotos" :key="index" class="view-flex-cc"
+							style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="close-icon" @click="onWaterSitePhotoDel(index)">
+											<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+										</view>
+										<view class="image-box">
+											<image :src="toOss(item)" mode="widthFix">
+											</image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item" @click="onWaterSiteCheckPhotoAdd()">
+										<view class="image-box">
+											<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</uni-card>
+				<uni-card title="巡检结果" :is-shadow="false">
+					<radio-group @change="onWaterSiteCheckStatusRadioChange" class="view-flex-rs">
+						<label style="margin-right: 10px;width:80px" class="view-flex-rs"
+							v-for="(item, index) in data.waterSiteCheckStatus.items" :key="item.id">
+							<view>
+								<radio :value="item.id" :checked="index === data.waterSiteCheckStatus.current" />
+							</view>
+							<view style="font-size: 0.7rem;">{{item.dictValue}}</view>
+						</label>
+					</radio-group>
+				</uni-card>
+				<uni-card title="水位站检查补充说明:" :is-shadow="false">
+					<uni-easyinput type="textarea" v-model="data.waterSiteCheckRemark" placeholder="请输入水位站检查补充说明" />
+				</uni-card>
+			</uni-section>
+			<uni-section v-if="rtuInfo.isGround" title="墒情站检查" titleFontSize="0.8rem" style="width: 100%;">
+				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template>
+				<uni-card title="检查项(多选)" :is-shadow="false">
+					<checkbox-group @change="onGroundSiteCheckboxChange" class="view-flex-rs">
+						<label class="view-flex-rs" style="margin-right: 10px;font-size: 0.7rem;"
+							v-for="(item, index) in data.groundSiteCheckItems.items" :key="item.id">
+							<view>
+								<checkbox v-if="item.checked" :value="item.id" checked="true" />
+								<checkbox v-else :value="item.id" />
+							</view>
+							<view style="font-size: 0.7rem;">{{item.dictValue}}</view>
+						</label>
+					</checkbox-group>
+				</uni-card>
+				<uni-card title="拍摄照片" extra="点击下方按钮开始拍摄" :is-shadow="false">
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(item, index) in data.groundSiteCheckPhotos" :key="index" class="view-flex-cc"
+							style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="close-icon" @click="onGroundSitePhotoDel(index)">
+											<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+										</view>
+										<view class="image-box">
+											<image :src="toOss(item)" mode="widthFix">
+											</image>
+										</view>
+									</view>
+
+								</view>
+							</view>
+						</view>
+						<view class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item" @click="onGroundSiteCheckPhotoAdd()">
+										<view class="image-box">
+											<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</uni-card>
+				<uni-card title="巡检结果" :is-shadow="false">
+					<radio-group @change="onGroundSiteCheckStatusRadioChange" class="view-flex-rs">
+						<label style="margin-right: 10px;width:80px" class="view-flex-rs"
+							v-for="(item, index) in data.groundSiteCheckStatus.items" :key="item.id">
+							<view>
+								<radio :value="item.id" :checked="index === data.groundSiteCheckStatus.current" />
+							</view>
+							<view style="font-size: 0.7rem;">{{item.dictValue}}</view>
+						</label>
+					</radio-group>
+				</uni-card>
+				<uni-card title="墒情站检查补充说明:" :is-shadow="false">
+					<uni-easyinput type="textarea" v-model="data.groundSiteCheckRemark" placeholder="请输入墒情站检查补充说明" />
+				</uni-card>
+			</uni-section>
+			<uni-section title="其他设备检查" titleFontSize="0.8rem" style="width: 100%;">
+				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template>
+				<uni-card title="检查项(多选)" :is-shadow="false">
+					<checkbox-group @change="onOthersEquipmentCheckboxChange" class="view-flex-rs-flex-wrap">
+						<label class="view-flex-rs"
+							style="width: 140px;margin-bottom: 10px;margin-right: 10px;font-size: 0.7rem;"
+							v-for="(item, index) in data.othersEquipmentCheckItems.items" :key="item.id">
+							<view>
+								<checkbox v-if="item.checked" :value="item.id" checked="true" />
+								<checkbox v-else :value="item.id" />
+							</view>
+							<view style="font-size: 0.7rem;">{{item.dictValue}}</view>
+						</label>
+					</checkbox-group>
+				</uni-card>
+				<uni-card title="拍摄照片" extra="点击下方按钮开始拍摄" :is-shadow="false">
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(item, index) in data.othersEquipmentCheckPhotos" :key="index" class="view-flex-cc"
+							style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="close-icon" @click="onOthersEquipmentPhotoDel(index)">
+											<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+										</view>
+										<view class="image-box">
+											<image :src="toOss(item)" mode="widthFix">
+											</image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item" @click="onOthersEquipmentCheckPhotoAdd()">
+										<view class="image-box">
+											<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</uni-card>
+				<uni-card title="巡检结果" :is-shadow="false">
+					<radio-group @change="onOthersEquipmentCheckStatusRadioChange" class="view-flex-rs">
+						<label style="margin-right: 10px;width:80px" class="view-flex-rs"
+							v-for="(item, index) in data.othersEquipmentCheckStatus.items" :key="item.id">
+							<view>
+								<radio :value="item.id" :checked="index === data.othersEquipmentCheckStatus.current" />
+							</view>
+							<view style="font-size: 0.7rem;">{{item.dictValue}}</view>
+						</label>
+					</radio-group>
+				</uni-card>
+				<uni-card title="其他设备检查补充说明:" :is-shadow="false">
+					<uni-easyinput type="textarea" v-model="data.othersEquipmentCheckRemark"
+						placeholder="请输入其他设备检查补充说明" />
+				</uni-card>
+			</uni-section>
+			<uni-section title="设备更换" titleFontSize="0.8rem" style="width: 100%;">
+				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template>
+				<uni-card title="设备项(多选)" :is-shadow="false">
+					<checkbox-group @change="onEquipmentReplaceCheckboxChange" class="view-flex-rs-flex-wrap">
+						<label class="view-flex-rs"
+							style="width: 140px;margin-bottom: 10px;margin-right: 10px;font-size: 0.7rem;"
+							v-for="(item, index) in data.equipmentsReplaceItems.items" :key="item.id">
+							<view>
+								<checkbox v-if="item.checked" :value="item.id" checked="true" />
+								<checkbox v-else :value="item.id" />
+							</view>
+							<view style="font-size: 0.7rem;">{{item.dictValue}}</view>
+						</label>
+					</checkbox-group>
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.rtuReplace" title="RTU型号说明" :is-shadow="false">
+					<uni-easyinput v-model="data.rtuModelRemark" placeholder="请录入RTU型号说明" />
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.rtuReplace" title="RTU更换照片" extra="点击下方按钮开始拍摄"
+					:is-shadow="false">
+					<view
+						style="padding-top: 10px;padding-left: 0px;padding-right: 15px;font-size: 0.7rem;color:lightcoral;">
+						备注:必填项</view>
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(item, index) in data.rtuReplacePhotos" :key="index" class="view-flex-cc"
+							style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="close-icon" @click="onRtuReplacePhotoDel(index)">
+											<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+										</view>
+										<view class="image-box">
+											<image :src="toOss(item)" mode="widthFix">
+											</image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item" @click="onRtuReplacePhotoAdd()">
+										<view class="image-box">
+											<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.rainSensorReplace" title="雨量计型号说明"
+					:is-shadow="false">
+					<uni-easyinput v-model="data.rainSensorModelRemark" placeholder="请录入雨量计型号说明" />
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.rainSensorReplace" title="雨量计更换照片"
+					extra="点击下方按钮开始拍摄" :is-shadow="false">
+					<view
+						style="padding-top: 10px;padding-left: 0px;padding-right: 15px;font-size: 0.7rem;color:lightcoral;">
+						备注:必填项</view>
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(item, index) in data.rainSensorReplacePhotos" :key="index" class="view-flex-cc"
+							style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="close-icon" @click="onRainSensorReplacePhotoDel(index)">
+											<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+										</view>
+										<view class="image-box">
+											<image :src="toOss(item)" mode="widthFix">
+											</image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item" @click="onRainSensorReplacePhotoAdd()">
+										<view class="image-box">
+											<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.waterSensorReplace" title="水位计型号说明"
+					:is-shadow="false">
+					<uni-easyinput v-model="data.waterSensorModelRemark" placeholder="请录入水位计型号说明" />
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.waterSensorReplace" title="水位计更换照片"
+					extra="点击下方按钮开始拍摄" :is-shadow="false">
+					<view
+						style="padding-top: 10px;padding-left: 0px;padding-right: 15px;font-size: 0.7rem;color:lightcoral;">
+						备注:必填项</view>
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(item, index) in data.waterSensorReplacePhotos" :key="index" class="view-flex-cc"
+							style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="close-icon" @click="onWaterSensorReplacePhotoDel(index)">
+											<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+										</view>
+										<view class="image-box">
+											<image :src="toOss(item)" mode="widthFix">
+											</image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item" @click="onWaterSensorReplacePhotoAdd()">
+										<view class="image-box">
+											<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.groundSensorReplace" title="墒情计型号说明"
+					:is-shadow="false">
+					<uni-easyinput v-model="data.groundSensorModelRemark" placeholder="请录入墒情计型号说明" />
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.groundSensorReplace" title="墒情计更换照片"
+					extra="点击下方按钮开始拍摄" :is-shadow="false">
+					<view
+						style="padding-top: 10px;padding-left: 0px;padding-right: 15px;font-size: 0.7rem;color:lightcoral;">
+						备注:必填项</view>
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(item, index) in data.groundSensorReplacePhotos" :key="index" class="view-flex-cc"
+							style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="close-icon" @click="onGroundSensorReplacePhotoDel(index)">
+											<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+										</view>
+										<view class="image-box">
+											<image :src="toOss(item)" mode="widthFix">
+											</image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item" @click="onGroundSensorReplacePhotoAdd()">
+										<view class="image-box">
+											<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.batteryReplace" title="蓄电池型号说明" :is-shadow="false">
+					<uni-easyinput v-model="data.batteryModelRemark" placeholder="请录入蓄电池型号说明" />
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.batteryReplace" title="蓄电池更换照片" extra="点击下方按钮开始拍摄"
+					:is-shadow="false">
+					<view
+						style="padding-top: 10px;padding-left: 0px;padding-right: 15px;font-size: 0.7rem;color:lightcoral;">
+						备注:必填项</view>
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(item, index) in data.batteryReplacePhotos" :key="index" class="view-flex-cc"
+							style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="close-icon" @click="onBatteryReplacePhotoDel(index)">
+											<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+										</view>
+										<view class="image-box">
+											<image :src="toOss(item)" mode="widthFix">
+											</image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item" @click="onBatteryReplacePhotoAdd()">
+										<view class="image-box">
+											<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.sunPowerReplace" title="太阳能板型号说明"
+					:is-shadow="false">
+					<uni-easyinput v-model="data.sunPowerModelRemark" placeholder="请录入太阳能板型号说明" />
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.sunPowerReplace" title="太阳能板更换照片" extra="点击下方按钮开始拍摄"
+					:is-shadow="false">
+					<view
+						style="padding-top: 10px;padding-left: 0px;padding-right: 15px;font-size: 0.7rem;color:lightcoral;">
+						备注:必填项</view>
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(item, index) in data.sunPowerReplacePhotos" :key="index" class="view-flex-cc"
+							style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="close-icon" @click="onSunPowerReplacePhotoDel(index)">
+											<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+										</view>
+										<view class="image-box">
+											<image :src="toOss(item)" mode="widthFix">
+											</image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item" @click="onSunPowerReplacePhotoAdd()">
+										<view class="image-box">
+											<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.batteryControllerReplace" title="充电控制器型号说明"
+					:is-shadow="false">
+					<uni-easyinput v-model="data.batteryControlModelRemark" placeholder="请录入充电控制器型号说明" />
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.batteryControllerReplace" title="充电控制器更换照片"
+					extra="点击下方按钮开始拍摄" :is-shadow="false">
+					<view
+						style="padding-top: 10px;padding-left: 0px;padding-right: 15px;font-size: 0.7rem;color:lightcoral;">
+						备注:必填项</view>
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(item, index) in data.batteryControlReplacePhotos" :key="index"
+							class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="close-icon" @click="onBatteryControllerReplacePhotoDel(index)">
+											<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+										</view>
+										<view class="image-box">
+											<image :src="toOss(item)" mode="widthFix">
+											</image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item" @click="onBatteryControllerReplacePhotoAdd()">
+										<view class="image-box">
+											<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.otherEquipmentReplace" title="其他设备说明"
+					:is-shadow="false">
+					<uni-easyinput v-model="data.otherEquipmentModelRemark" placeholder="请录入其他设备说明" />
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItemsCheckBox.otherEquipmentReplace" title="其他设备更换照片"
+					extra="点击下方按钮开始拍摄" :is-shadow="false">
+					<view
+						style="padding-top: 10px;padding-left: 0px;padding-right: 15px;font-size: 0.7rem;color:lightcoral;">
+						备注:必填项</view>
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(item, index) in data.otherEquipmentReplacePhotos" :key="index"
+							class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="close-icon" @click="onOtherEquipmentReplacePhotoDel(index)">
+											<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+										</view>
+										<view class="image-box">
+											<image :src="toOss(item)" mode="widthFix">
+											</image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item" @click="onOtherEquipmentReplacePhotoAdd()">
+										<view class="image-box">
+											<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</uni-card>
+			</uni-section>
+			<uni-section title="遗留问题补充说明" titleFontSize="0.8rem" style="width: 100%;">
+				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template>
+				<view style="padding-top: 10px;padding-bottom: 10px;padding-left: 15px;padding-right: 15px;">
+					<uni-easyinput type="textarea" v-model="data.inspectionRemainProblemsRemark"
+						placeholder="请输入遗留问题补充说明" />
+				</view>
+			</uni-section>
+			<uni-section title="巡检工作留存照片" titleFontSize="0.8rem" style="width: 100%;">
+				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template>
+				<view
+					style="padding-top: 10px;padding-left: 15px;padding-right: 15px;font-size: 0.7rem;color:lightcoral;">
+					备注:必填项,至少要拍一张整体的站点照片</view>
+				<uni-card title="拍摄照片" extra="点击下方按钮开始拍摄" :is-shadow="false">
+					<view class="view-flex-rs-flex-wrap">
+						<view v-for="(item, index) in data.inspectionWorkPhotos" :key="index" class="view-flex-cc"
+							style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item">
+										<view class="close-icon" @click="onInspectionWorkPhotoDel(index)">
+											<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+										</view>
+										<view class="image-box">
+											<image :src="toOss(item)" mode="widthFix">
+											</image>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+						<view class="view-flex-cc" style="width: 80px;">
+							<view class="img-container">
+								<view class="note-image-box">
+									<view class="note-image-item" @click="onInspectionWorkCheckPhotoAdd()">
+										<view class="image-box">
+											<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+										</view>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</uni-card>
+			</uni-section>
+		</uni-forms>
+	
+		<view class="footer">
+			<view class="control">
+				<view class="view-flex-rc">
+					<view class="block"
+						style="width: 120px;height:28px;margin-left: 10px;margin-right: 10px;border-radius:7px;background-color:lightblue"
+						@click="toSave()">
+						<view class="view-flex-cc">
+							<uni-icons class="input-uni-icon" type="folder-add" size="18" color="#999" />
+						</view>
+						<view class="view-flex-cc" style="padding-left:5px;">
+							<text style="color:black;font-size:0.7rem">暂存</text>
+						</view>
+					</view>
+					<view class="block"
+						style="width: 120px;height:28px;margin-left: 10px;margin-right: 10px;border-radius:7px;background-color:lightpink"
+						@click="toSubmit()">
+						<view class="view-flex-cc">
+							<uni-icons class="input-uni-icon" type="checkmarkempty" size="18" color="#999" />
+						</view>
+						<view class="view-flex-cc" style="padding-left:5px;">
+							<text style="color:black;font-size:0.7rem">立即提交</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		pathToBase64,
+		base64ToPath
+	} from '@/js_sdk/mmmm-image-tools/index.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+
+	export default {
+		components: {
+
+		},
+		data() {
+			return {
+				formData: {
+
+				},
+				rules: {
+					networkSignalStatus: {
+						rules: [{
+							required: true,
+							errorMessage: '必填项,请选择手机网络信号',
+						}]
+					},
+				},
+				title: '设备巡检填报',
+				baseURL: '',
+				baseOSS: '',
+				rtuCode: '',
+				ispItems: {
+					items: [{
+						'value': 0,
+						'text': '正常'
+					}, {
+						'value': 1,
+						'text': '三大运营商均无信号'
+					}],
+					current: -1,
+				},
+				rtuInfo: {
+					isRain: 0,
+					isRiver: 0,
+					isRes: 0,
+					isGround: 0,
+					rtuCode: '',
+					rtuName: '',
+					lng: '',
+					lat: '',
+					locationDesc: '',
+					isRain: false,
+					isWaterLevel: false,
+					isGround: false,
+					isCamera: false,
+				},
+				data: {
+					lng: '',
+					lat: '',
+					locationDesc: '',
+					//站点状态检查项
+					siteCheckStatus: {
+						items: [{
+							'id': '0',
+							'dictValue': '水毁'
+						}, {
+							'id': '1',
+							'dictValue': '丢失'
+						}, {
+							'id': '2',
+							'dictValue': '损坏'
+						}, {
+							'value': '3',
+							'dictValue': '正常'
+						}],
+						current: 3,
+					},
+					siteCheckPhotos: [],
+					siteCheckRemark: '',
+					//雨量站检查数据
+					rainSiteCheckItems: {
+						items: [{
+							'id': '0',
+							'checked': false,
+							'dictValue': '故障排查'
+						}, {
+							'id': '1',
+							'checked': false,
+							'dictValue': '清理堵塞'
+						}, {
+							'id': '2',
+							'checked': false,
+							'dictValue': '雨量计校核'
+						}],
+						current: -1,
+					},
+					rainSiteCheckItemsCheckBox: {
+						equipmentFaultCheck: 0,
+						equipmentClear: 0,
+						rainSensorCheck: 0,
+					},
+					rainSiteCheckPhotos: [],
+					rainSiteCheckStatus: {
+						items: [{
+							'id': '0',
+							'dictValue': '异常'
+						}, {
+							'id': '1',
+							'dictValue': '正常'
+						}],
+						current: 1,
+					},
+					rainSiteCheckRemark: '',
+					//水位站检查数据
+					waterSiteCheckItems: {
+						items: [{
+							'id': '0',
+							'checked': false,
+							'dictValue': '故障排查'
+						}, {
+							'id': '1',
+							'checked': false,
+							'dictValue': '水位计校核'
+						}],
+						current: -1,
+					},
+					waterSiteCheckItemsCheckBox: {
+						equipmentFaultCheck: 0,
+						waterSensorCheck: 0,
+					},
+					waterSiteCheckPhotos: [],
+					waterSiteCheckStatus: {
+						items: [{
+							'id': '0',
+							'dictValue': '异常'
+						}, {
+							'id': '1',
+							'dictValue': '正常'
+						}],
+						current: 1,
+					},
+					waterSiteCheckRemark: '',
+					//墒情站检查数据
+					groundSiteCheckItems: {
+						items: [{
+							'id': '0',
+							'checked': false,
+							'dictValue': '故障排查'
+						}, {
+							'id': '1',
+							'checked': false,
+							'dictValue': '墒情计校核'
+						}],
+						current: -1,
+					},
+					groundSiteCheckItemsCheckBox: {
+						equipmentFaultCheck: 0,
+						groundSensorCheck: 0,
+					},
+					groundSiteCheckPhotos: [],
+					groundSiteCheckStatus: {
+						items: [{
+							'id': '0',
+							'dictValue': '异常'
+						}, {
+							'id': '1',
+							'dictValue': '正常'
+						}],
+						current: 1,
+					},
+					groundSiteCheckRemark: '',
+					//其他设备检查
+					othersEquipmentCheckItems: {
+						items: [{
+							'id': '0',
+							'checked': false,
+							'dictValue': '设备接地检测'
+						}, {
+							'id': '1',
+							'checked': false,
+							'dictValue': '电源电压检测'
+						}, {
+							'id': '2',
+							'checked': false,
+							'dictValue': '太阳能板检查'
+						}, {
+							'id': '3',
+							'checked': false,
+							'dictValue': '蓄电池检查'
+						}, {
+							'id': '4',
+							'checked': false,
+							'dictValue': '网络通信检查'
+						}],
+						current: -1,
+					},
+					othersEquipmentCheckItemsCheckBox: {
+						equipmentGroundWireCheck: 0,
+						bvCheck: 0,
+						sunPowerCheck: 0,
+						btCheck: 0,
+						netCheck: 0,
+					},
+					othersEquipmentCheckPhotos: [],
+					othersEquipmentCheckStatus: {
+						items: [{
+							'id': '0',
+							'dictValue': '异常'
+						}, {
+							'id': '1',
+							'dictValue': '正常'
+						}],
+						current: 1,
+					},
+					othersEquipmentCheckRemark: '',
+					//设备替换
+					equipmentsReplaceItems: {
+						items: [{
+							'id': '0',
+							'checked': false,
+							'dictValue': 'RTU'
+						}, {
+							'id': '1',
+							'checked': false,
+							'dictValue': '雨量计'
+						}, {
+							'id': '2',
+							'checked': false,
+							'dictValue': '水位计'
+						}, {
+							'id': '3',
+							'checked': false,
+							'dictValue': '墒情计'
+						}, {
+							'id': '4',
+							'checked': false,
+							'dictValue': '蓄电池'
+						}, {
+							'id': '5',
+							'checked': false,
+							'dictValue': '太阳能板'
+						}, {
+							'id': '6',
+							'checked': false,
+							'dictValue': '充电控制器'
+						}, {
+							'id': '7',
+							'checked': false,
+							'dictValue': '其他'
+						}],
+						current: -1,
+					},
+					equipmentsReplaceItemsCheckBox: {
+						rtuReplace: 0,
+						rainSensorReplace: 0,
+						waterSensorReplace: 0,
+						groundSensorReplace: 0,
+						batteryReplace: 0,
+						sunPowerReplace: 0,
+						batteryControllerReplace: 0,
+						otherEquipmentReplace: 0
+					},
+					rtuModelRemark: '',
+					rtuReplacePhotos: [],
+					rainSensorModelRemark: '',
+					rainSensorReplacePhotos: [],
+					waterSensorModelRemark: '',
+					waterSensorReplacePhotos: [],
+					groundSensorModelRemark: '',
+					groundSensorReplacePhotos: [],
+					batteryModelRemark: '',
+					batteryReplacePhotos: [],
+					sunPowerModelRemark: '',
+					sunPowerReplacePhotos: [],
+					batteryControlModelRemark: '',
+					batteryControlReplacePhotos: [],
+					otherEquipmentModelRemark: '',
+					otherEquipmentReplacePhotos: [],
+					//巡检遗留问题描述
+					inspectionRemainProblemsRemark: '',
+					//工作留存数据
+					inspectionWorkPhotos: [],
+				},
+			}
+		},
+		computed: {
+			getIcon() {
+				return path => {
+					return 'https://cdn.uviewui.com/uview/example/' + path + '.png';
+				}
+			},
+		},
+		onShow() {},
+		created() {},
+		onReady() {
+			console.log("onReady++++++++++++++")
+			// 需要在onReady中设置规则
+			this.$refs.baseForm.setRules(this.rules)
+		},
+		onLoad(options) {
+			this.rtuCode = options.rtuCode;
+			this.baseOSS = oss;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.loadRtuInfo();
+		},
+		methods: {
+			toOss(path) {
+				let url = this.baseOSS + path;
+				return url;
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			getDetail() {
+				console.log("ddddddddddddddddddddd")
+				//this.formData.networkSimId='1111'
+				let that = this;
+				let postData = {};
+				postData['id'] = this.orderId;
+				http.request({
+					url: '/galaxy-business/rtu/check/order/detail',
+					method: 'GET',
+					data: postData
+				}).then(res => {
+					console.log("ddddddddddddddddddddd " + JSON.stringify(res.data))
+					//if (res.data != null) {
+					let p = {};
+					p['networkSimId'] = res.data.networkSimId;
+					p['networkPayer'] = res.data.networkPayer;
+					that.formData = p;
+					//}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			toRtuKind() {
+				let htmltext = '';
+				if (this.rtuInfo.isRain === 1) {
+					htmltext = htmltext + "雨量站";
+				}
+				if (this.rtuInfo.isRiver == 1 || this.rtuInfo.isRes == 1) {
+					if (htmltext.length > 0) {
+						htmltext = htmltext + ' / ';
+					}
+					htmltext = htmltext + '水位站';
+				}
+				if (this.rtuInfo.isGround == 1) {
+					if (htmltext.length > 0) {
+						htmltext = htmltext + ' / ';
+					}
+					htmltext = htmltext + '墒情站';
+				}
+				if (this.rtuInfo.isVideo == 1) {
+					if (htmltext.length > 0) {
+						htmltext = htmltext + ' / ';
+					}
+					htmltext = htmltext + '视频站';
+				}
+				return htmltext;
+			},
+			loadCacheData() {
+				let formdata = uni.getStorageSync('inspection_report_storage_' + this.rtuCode);
+				if (null != formdata && '' != formdata) {
+					this.data = formdata;
+
+					let p = {};
+					p['networkSignalStatus'] = formdata.networkSignalStatus;
+					p['networkSimId'] = formdata.networkSimId;
+					p['networkPayer'] = formdata.networkPayer;
+					that.formData = p;
+
+					//雨位计
+					if (this.data.rainSiteCheckItemsCheckBox.equipmentFaultCheck == 1) {
+						this.data.rainSiteCheckItems.items[0].checked = true;
+					}
+					if (this.data.rainSiteCheckItemsCheckBox.equipmentClear == 1) {
+						this.data.rainSiteCheckItems.items[1].checked = true;
+					}
+					if (this.data.rainSiteCheckItemsCheckBox.rainSensorCheck == 1) {
+						this.data.rainSiteCheckItems.items[2].checked = true;
+					}
+					//水位计
+					if (this.data.waterSiteCheckItemsCheckBox.equipmentFaultCheck == 1) {
+						this.data.waterSiteCheckItems.items[0].checked = true;
+					}
+					if (this.data.waterSiteCheckItemsCheckBox.waterSensorCheck == 1) {
+						this.data.waterSiteCheckItems.items[1].checked = true;
+					}
+					//墒情计
+					if (this.data.groundSiteCheckItemsCheckBox.equipmentFaultCheck == 1) {
+						this.data.groundSiteCheckItems.items[0].checked = true;
+					}
+					if (this.data.groundSiteCheckItemsCheckBox.groundSensorCheck == 1) {
+						this.data.groundSiteCheckItems.items[1].checked = true;
+					}
+					//其他设备
+					if (this.data.othersEquipmentCheckItemsCheckBox.equipmentGroundWireCheck == 1) {
+						this.data.othersEquipmentCheckItems.items[0].checked = true;
+					}
+					if (this.data.othersEquipmentCheckItemsCheckBox.bvCheck == 1) {
+						this.data.othersEquipmentCheckItems.items[1].checked = true;
+					}
+					if (this.data.othersEquipmentCheckItemsCheckBox.sunPowerCheck == 1) {
+						this.data.othersEquipmentCheckItems.items[2].checked = true;
+					}
+					if (this.data.othersEquipmentCheckItemsCheckBox.btCheck == 1) {
+						this.data.othersEquipmentCheckItems.items[3].checked = true;
+					}
+					if (this.data.othersEquipmentCheckItemsCheckBox.netCheck == 1) {
+						this.data.othersEquipmentCheckItems.items[4].checked = true;
+					}
+					//设备更换
+					if (this.data.equipmentsReplaceItemsCheckBox.rtuReplace == 1) {
+						this.data.equipmentsReplaceItems.items[0].checked = true;
+					}
+					if (this.data.equipmentsReplaceItemsCheckBox.rainSensorReplace == 1) {
+						this.data.equipmentsReplaceItems.items[1].checked = true;
+					}
+					if (this.data.equipmentsReplaceItemsCheckBox.waterSensorReplace == 1) {
+						this.data.equipmentsReplaceItems.items[2].checked = true;
+					}
+					if (this.data.equipmentsReplaceItemsCheckBox.groundSensorReplace == 1) {
+						this.data.equipmentsReplaceItems.items[3].checked = true;
+					}
+					if (this.data.equipmentsReplaceItemsCheckBox.batteryReplace == 1) {
+						this.data.equipmentsReplaceItems.items[4].checked = true;
+					}
+					if (this.data.equipmentsReplaceItemsCheckBox.sunPowerReplace == 1) {
+						this.data.equipmentsReplaceItems.items[5].checked = true;
+					}
+					if (this.data.equipmentsReplaceItemsCheckBox.batteryControllerReplace == 1) {
+						this.data.equipmentsReplaceItems.items[6].checked = true;
+					}
+					if (this.data.equipmentsReplaceItemsCheckBox.otherEquipmentReplace == 1) {
+						this.data.equipmentsReplaceItems.items[7].checked = true;
+					}
+				} else {
+					//this.getDetail();
+				}
+			},
+			clearCache() {
+				uni.removeStorageSync('inspection_report_storage_' + this.rtuCode);
+			},
+			loadRtuInfo() {
+				let that = this;
+				let postData = {};
+				postData['rtuCode'] = this.rtuCode;
+				http.request({
+					url: '/galaxy-business/rtu/base/detail',
+					method: 'GET',
+					data: postData
+				}).then(res => {
+					if (res.data != null) {
+						console.log(JSON.stringify(res.data))
+
+						that.rtuInfo = res.data;
+
+						that.rtuInfo.isRain = 1;
+						that.rtuInfo.isRiver = 1;
+						that.rtuInfo.isRes = 1;
+						that.rtuInfo.isGround = 1;
+
+						that.data['lng'] = that.rtuInfo.lng;
+						that.data['lat'] = that.rtuInfo.lat;
+						that.data['locationDesc'] = that.rtuInfo.locationDesc;
+
+						let p = {};
+						p['networkSimId'] = that.rtuInfo.networkSimId;
+						p['networkPayer'] = that.rtuInfo.networkPayer;
+						that.formData = p;
+						that.loadCacheData();
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			toSave() {
+				let that = this;
+				uni.setStorageSync('inspection_report_storage_' + this.rtuCode, this.data);
+				uni.showModal({
+					content: '已成功缓存,确认返回!',
+					showCancel: true,
+					success(res) {
+						if (res.confirm) {
+							that.toBack();
+						}
+					}
+				});
+			},
+			toSubmit() {
+				let that = this;
+				this.$refs.baseForm.validate().then(res => {
+					console.log('表单数据信息1:', res);
+					//console.log('表单数据信息2:', that.formData);
+					if (that.formData.networkSignalStatus == 0) {
+						let next = false;
+						let msg = '';
+
+						if (that.data.siteCheckPhotos.length > 0) {
+							next = true;
+						} else {
+							next = false;
+							msg = "站点状态检查照片为必填项,请至少要拍一张照片,请检查!";
+						}
+
+						if (next) {
+							if (this.data.equipmentsReplaceItemsCheckBox.rtuReplace == 1) {
+								if (this.data.rtuReplacePhotos.length > 0) {
+									next = true;
+								} else {
+									next = false;
+									msg = "更换RTU设备时,请至少要拍一张照片,请检查!";
+								}
+							}
+						}
+						if (next) {
+							if (this.data.equipmentsReplaceItemsCheckBox.rainSensorReplace == 1) {
+								if (this.data.rainSensorReplacePhotos.length > 0) {
+									next = true;
+								} else {
+									next = false;
+									msg = "更换雨量计时,请至少要拍一张照片,请检查!";
+								}
+							}
+						}
+						if (next) {
+							if (this.data.equipmentsReplaceItemsCheckBox.waterSensorReplace == 1) {
+								if (this.data.waterSensorReplacePhotos.length > 0) {
+									next = true;
+								} else {
+									next = false;
+									msg = "更换水位计时,请至少要拍一张照片,请检查!";
+								}
+							}
+						}
+
+						if (next) {
+							if (this.data.equipmentsReplaceItemsCheckBox.groundSensorReplace == 1) {
+								if (this.data.groundSensorReplacePhotos.length > 0) {
+									next = true;
+								} else {
+									next = false;
+									msg = "更换墒情计时,请至少要拍一张照片,请检查!";
+								}
+							}
+						}
+						if (next) {
+							if (this.data.equipmentsReplaceItemsCheckBox.batteryReplace == 1) {
+								if (this.data.batteryReplacePhotos.length > 0) {
+									next = true;
+								} else {
+									next = false;
+									msg = "更换蓄电池时,请至少要拍一张照片,请检查!";
+								}
+							}
+						}
+						if (next) {
+							if (this.data.equipmentsReplaceItemsCheckBox.sunPowerReplace == 1) {
+								if (this.data.sunPowerReplacePhotos.length > 0) {
+									next = true;
+								} else {
+									next = false;
+									msg = "更换太阳能板时,请至少要拍一张照片,请检查!";
+								}
+							}
+						}
+						if (next) {
+							if (this.data.equipmentsReplaceItemsCheckBox.batteryControllerReplace == 1) {
+								if (this.data.batteryControlReplacePhotos.length > 0) {
+									next = true;
+								} else {
+									next = false;
+									msg = "更换充电控制器时,请至少要拍一张照片,请检查!";
+								}
+							}
+						}
+						if (next) {
+							if (this.data.equipmentsReplaceItemsCheckBox.otherEquipmentReplace == 1) {
+								if (this.data.otherEquipmentReplacePhotos.length > 0) {
+									next = true;
+								} else {
+									next = false;
+									msg = "更换其他设备时,请至少要拍一张照片,请检查!";
+								}
+							}
+						}
+						if (next) {
+							if (that.data.inspectionWorkPhotos.length > 0) {
+								next = true;
+							} else {
+								next = false;
+								msg = "巡检工作留存照片为必填项,请至少要拍一张整体的站点照片,请检查!";
+							}
+						}
+						if (next) {
+							that.submitData();
+						} else {
+							uni.showModal({
+								content: msg,
+								showCancel: false,
+								success(res) {
+									if (res.confirm) {
+
+									}
+								}
+							});
+						}
+					} else {
+						that.submitData();
+					}
+				}).catch(err => {
+					console.log('表单错误信息:', err);
+					uni.showModal({
+						content: "内容填报错误,请根据提示信息检查录入内容!",
+						showCancel: false,
+						success(res) {
+							if (res.confirm) {
+								//that.$refs.baseForm.clearValidate();
+							}
+						}
+					});
+				})
+			},
+			submitData() {
+				let formdata = this.formData;
+				formdata['rtuCode'] = this.rtuCode;
+				formdata['lng'] = this.data.lng;
+				formdata['lat'] = this.data.lat;
+				formdata['locationDesc'] = this.data.locationDesc;
+				formdata['siteCheckItem'] = '' + this.data.siteCheckStatus.current;
+				if (this.data.siteCheckPhotos.length > 0) {
+					let photos = '';
+					for (let i = 0; i < this.data.siteCheckPhotos.length; i++) {
+						if (photos.length > 0) {
+							photos = photos + ',';
+						}
+						photos = photos + this.data.siteCheckPhotos[i];
+					}
+					formdata['siteCheckPhotos'] = photos;
+				}
+				formdata['siteCheckRemark'] = this.data.siteCheckRemark;
+				//雨量站点检查信息
+				if (this.rtuInfo.isRain) {
+					let items = '';
+					if (this.data.rainSiteCheckItemsCheckBox.equipmentFaultCheck == 1) {
+						items = items + '1'
+					} else {
+						items = items + '0';
+					}
+					items = items + ',';
+					if (this.data.rainSiteCheckItemsCheckBox.equipmentClear == 1) {
+						items = items + '1'
+					} else {
+						items = items + '0';
+					}
+					items = items + ',';
+					if (this.data.rainSiteCheckItemsCheckBox.rainSensorCheck == 1) {
+						items = items + '1'
+					} else {
+						items = items + '0';
+					}
+					formdata['rainSiteCheckItem'] = items;
+					if (this.data.rainSiteCheckPhotos.length > 0) {
+						let photos = '';
+						for (let i = 0; i < this.data.rainSiteCheckPhotos.length; i++) {
+							if (photos.length > 0) {
+								photos = photos + ',';
+							}
+							photos = photos + this.data.rainSiteCheckPhotos[i];
+						}
+						formdata['rainSiteCheckPhotos'] = photos;
+					}
+					formdata['rainSiteCheckRemark'] = this.data.rainSiteCheckRemark;
+					formdata['rainSiteCheckResult'] = this.data.rainSiteCheckStatus.current;
+				}
+				//水位站点检查信息
+				if (this.rtuInfo.isRiver || this.rtuInfo.isRes) {
+					let items = '';
+					if (this.data.waterSiteCheckItemsCheckBox.equipmentFaultCheck == 1) {
+						items = items + '1'
+					} else {
+						items = items + '0';
+					}
+					items = items + ',';
+					if (this.data.waterSiteCheckItemsCheckBox.waterSensorCheck == 1) {
+						items = items + '1'
+					} else {
+						items = items + '0';
+					}
+					formdata['waterSiteCheckItem'] = items;
+					if (this.data.waterSiteCheckPhotos.length > 0) {
+						let photos = '';
+						for (let i = 0; i < this.data.waterSiteCheckPhotos.length; i++) {
+							if (photos.length > 0) {
+								photos = photos + ',';
+							}
+							photos = photos + this.data.waterSiteCheckPhotos[i];
+						}
+						formdata['waterSiteCheckPhotos'] = photos;
+					}
+					formdata['waterSiteCheckRemark'] = this.data.waterSiteCheckRemark;
+					formdata['waterSiteCheckResult'] = this.data.waterSiteCheckStatus.current;
+				}
+				//墒情站点检查信息
+				if (this.rtuInfo.isGround) {
+					let items = '';
+					if (this.data.groundSiteCheckItemsCheckBox.equipmentFaultCheck == 1) {
+						items = items + '1'
+					} else {
+						items = items + '0';
+					}
+					items = items + ',';
+					if (this.data.groundSiteCheckItemsCheckBox.groundSensorCheck == 1) {
+						items = items + '1'
+					} else {
+						items = items + '0';
+					}
+					formdata['groundSiteCheckItem'] = items;
+					if (this.data.groundSiteCheckPhotos.length > 0) {
+						let photos = '';
+						for (let i = 0; i < this.data.groundSiteCheckPhotos.length; i++) {
+							if (photos.length > 0) {
+								photos = photos + ',';
+							}
+							photos = photos + this.data.groundSiteCheckPhotos[i];
+						}
+						formdata['groundSiteCheckPhotos'] = photos;
+					}
+					formdata['groundSiteCheckRemark'] = this.data.groundSiteCheckRemark;
+					formdata['groundSiteCheckResult'] = this.data.groundSiteCheckStatus.current;
+				}
+
+				//其他设备检查信息
+
+				let otheritems = '';
+				if (this.data.othersEquipmentCheckItemsCheckBox.equipmentGroundWireCheck == 1) {
+					otheritems = otheritems + '1'
+				} else {
+					otheritems = otheritems + '0';
+				}
+				otheritems = otheritems + ',';
+				if (this.data.othersEquipmentCheckItemsCheckBox.bvCheck == 1) {
+					otheritems = otheritems + '1'
+				} else {
+					otheritems = otheritems + '0';
+				}
+				otheritems = otheritems + ',';
+				if (this.data.othersEquipmentCheckItemsCheckBox.sunPowerCheck == 1) {
+					otheritems = otheritems + '1'
+				} else {
+					otheritems = otheritems + '0';
+				}
+				otheritems = otheritems + ',';
+				if (this.data.othersEquipmentCheckItemsCheckBox.btCheck == 1) {
+					otheritems = otheritems + '1'
+				} else {
+					otheritems = otheritems + '0';
+				}
+				otheritems = otheritems + ',';
+				if (this.data.othersEquipmentCheckItemsCheckBox.netCheck == 1) {
+					otheritems = otheritems + '1'
+				} else {
+					otheritems = otheritems + '0';
+				}
+
+				formdata['otherEquipmentCheckItem'] = otheritems;
+				if (this.data.othersEquipmentCheckPhotos.length > 0) {
+					let photos = '';
+					for (let i = 0; i < this.data.othersEquipmentCheckPhotos.length; i++) {
+						if (photos.length > 0) {
+							photos = photos + ',';
+						}
+						photos = photos + this.data.othersEquipmentCheckPhotos[i];
+					}
+					formdata['otherEquipmentCheckPhotos'] = photos;
+				}
+				formdata['otherEquipmentCheckRemark'] = this.data.othersEquipmentCheckRemark;
+				formdata['otherEquipmentCheckResult'] = this.data.othersEquipmentCheckStatus.current;
+
+				formdata['rtuReplace'] = this.data.equipmentsReplaceItemsCheckBox.rtuReplace;
+				if (this.data.equipmentsReplaceItemsCheckBox.rtuReplace == 1) {
+					formdata['rtuModelRemark'] = this.data.rtuModelRemark;
+					if (this.data.rtuReplacePhotos.length > 0) {
+						let photos = '';
+						for (let i = 0; i < this.data.rtuReplacePhotos.length; i++) {
+							if (photos.length > 0) {
+								photos = photos + ',';
+							}
+							photos = photos + this.data.rtuReplacePhotos[i];
+						}
+						formdata['rtuReplacePhotos'] = photos;
+					}
+				}
+
+				formdata['rainSensorReplace'] = this.data.equipmentsReplaceItemsCheckBox.rainSensorReplace;
+				if (this.data.equipmentsReplaceItemsCheckBox.rainSensorReplace == 1) {
+					formdata['rainSensorModelRemark'] = this.data.rainSensorModelRemark;
+					if (this.data.rainSensorReplacePhotos.length > 0) {
+						let photos = '';
+						for (let i = 0; i < this.data.rainSensorReplacePhotos.length; i++) {
+							if (photos.length > 0) {
+								photos = photos + ',';
+							}
+							photos = photos + this.data.rainSensorReplacePhotos[i];
+						}
+						formdata['rainSensorReplacePhotos'] = photos;
+					}
+				}
+				formdata['waterSensorReplace'] = this.data.equipmentsReplaceItemsCheckBox.waterSensorReplace;
+				if (this.data.equipmentsReplaceItemsCheckBox.waterSensorReplace == 1) {
+					formdata['waterSensorModelRemark'] = this.data.waterSensorModelRemark;
+					if (this.data.waterSensorReplacePhotos.length > 0) {
+						let photos = '';
+						for (let i = 0; i < this.data.waterSensorReplacePhotos.length; i++) {
+							if (photos.length > 0) {
+								photos = photos + ',';
+							}
+							photos = photos + this.data.waterSensorReplacePhotos[i];
+						}
+						formdata['waterSensorReplacePhotos'] = photos;
+					}
+				}
+				formdata['groundSensorReplace'] = this.data.equipmentsReplaceItemsCheckBox.groundSensorReplace;
+				if (this.data.equipmentsReplaceItemsCheckBox.groundSensorReplace == 1) {
+					formdata['groundSensorModelRemark'] = this.data.groundSensorModelRemark;
+					if (this.data.groundSensorReplacePhotos.length > 0) {
+						let photos = '';
+						for (let i = 0; i < this.data.groundSensorReplacePhotos.length; i++) {
+							if (photos.length > 0) {
+								photos = photos + ',';
+							}
+							photos = photos + this.data.groundSensorReplacePhotos[i];
+						}
+						formdata['groundSensorReplacePhotos'] = photos;
+					}
+				}
+				formdata['batteryReplace'] = this.data.equipmentsReplaceItemsCheckBox.batteryReplace;
+				if (this.data.equipmentsReplaceItemsCheckBox.batteryReplace == 1) {
+					formdata['batteryModelRemark'] = this.data.batteryModelRemark;
+					if (this.data.batteryReplacePhotos.length > 0) {
+						let photos = '';
+						for (let i = 0; i < this.data.batteryReplacePhotos.length; i++) {
+							if (photos.length > 0) {
+								photos = photos + ',';
+							}
+							photos = photos + this.data.batteryReplacePhotos[i];
+						}
+						formdata['batteryReplacePhotos'] = photos;
+					}
+				}
+				formdata['sunPowerReplace'] = this.data.equipmentsReplaceItemsCheckBox.sunPowerReplace;
+				if (this.data.equipmentsReplaceItemsCheckBox.sunPowerReplace == 1) {
+					formdata['sunPowerModelRemark'] = this.data.sunPowerModelRemark;
+					if (this.data.sunPowerReplacePhotos.length > 0) {
+						let photos = '';
+						for (let i = 0; i < this.data.sunPowerReplacePhotos.length; i++) {
+							if (photos.length > 0) {
+								photos = photos + ',';
+							}
+							photos = photos + this.data.sunPowerReplacePhotos[i];
+						}
+						formdata['sunPowerReplacePhotos'] = photos;
+					}
+				}
+				formdata['batteryControllerReplace'] = this.data.equipmentsReplaceItemsCheckBox.batteryControllerReplace;
+				if (this.data.equipmentsReplaceItemsCheckBox.batteryControllerReplace == 1) {
+					formdata['batteryControllerModelRemark'] = this.data.batteryControlModelRemark;
+					if (this.data.batteryControlReplacePhotos.length > 0) {
+						let photos = '';
+						for (let i = 0; i < this.data.batteryControlReplacePhotos.length; i++) {
+							if (photos.length > 0) {
+								photos = photos + ',';
+							}
+							photos = photos + this.data.batteryControlReplacePhotos[i];
+						}
+						formdata['batteryControllerReplacePhotos'] = photos;
+					}
+				}
+				formdata['otherEquipmentReplace'] = this.data.equipmentsReplaceItemsCheckBox.otherEquipmentReplace;
+				if (this.data.equipmentsReplaceItemsCheckBox.otherEquipmentReplace == 1) {
+					formdata['otherEquipmentModelRemark'] = this.data.otherEquipmentModelRemark;
+					if (this.data.otherEquipmentReplacePhotos.length > 0) {
+						let photos = '';
+						for (let i = 0; i < this.data.otherEquipmentReplacePhotos.length; i++) {
+							if (photos.length > 0) {
+								photos = photos + ',';
+							}
+							photos = photos + this.data.otherEquipmentReplacePhotos[i];
+						}
+						formdata['otherEquipmentReplacePhotos'] = photos;
+					}
+
+				}
+
+				formdata['remainQuestion'] = this.data.inspectionRemainProblemsRemark;
+				if (this.data.inspectionWorkPhotos.length > 0) {
+					let photos = '';
+					for (let i = 0; i < this.data.inspectionWorkPhotos.length; i++) {
+						if (photos.length > 0) {
+							photos = photos + ',';
+						}
+						photos = photos + this.data.inspectionWorkPhotos[i];
+					}
+					formdata['inspectionWorkPhotos'] = photos;
+				}
+
+				console.log('toSubmit事件:', JSON.stringify(formdata));
+				let that = this;
+				http.request({
+					url: '/galaxy-business/equipment/inspection/report/save',
+					method: 'POST',
+					data: formdata
+				}).then(res => {
+					console.log('res ', JSON.stringify(res));
+					if (res.success) {
+						if (res.data.code == 0) {
+							that.clearCache();
+							uni.showModal({
+								content: '填报信息已成功提交',
+								showCancel: false,
+								success(res) {
+									if (res.confirm) {
+										uni.navigateBack();
+									}
+								}
+							});
+						} else {
+
+							uni.showModal({
+								content: '提交失败',
+								showCancel: false
+							});
+						}
+					} else {
+
+						uni.showModal({
+							content: '提交失败',
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					//	console.log('errr3',JSON.stringify(err));
+					uni.showModal({
+						content: '' + err.data.msg,
+						showCancel: false
+					});
+				})
+			},
+			//站点状态检查项
+			onSiteCheckStatusRadioChange: function(evt) {
+				for (let i = 0; i < this.data.siteCheckStatus.items.length; i++) {
+					if (this.data.siteCheckStatus.items[i].id === evt.detail.value) {
+						this.data.siteCheckStatus.current = i;
+						break;
+					}
+				}
+			},
+			//雨量站检查项
+			onRainSiteCheckboxChange: function(evt) {
+				this.data.rainSiteCheckItemsCheckBox.equipmentFaultCheck = 0;
+				this.data.rainSiteCheckItemsCheckBox.equipmentClear = 0;
+				this.data.rainSiteCheckItemsCheckBox.rainSensorCheck = 0;
+				for (let i = 0; i < evt.detail.value.length; i++) {
+					let c = evt.detail.value[i];
+					if (c === '0') {
+						this.data.rainSiteCheckItemsCheckBox.equipmentFaultCheck = 1;
+					} else if (c === '1') {
+						this.data.rainSiteCheckItemsCheckBox.equipmentClear = 1;
+					} else if (c === '2') {
+						this.data.rainSiteCheckItemsCheckBox.rainSensorCheck = 1;
+					}
+				}
+			},
+			//雨量站检查结果
+			onRainSiteCheckStatusRadioChange: function(evt) {
+				for (let i = 0; i < this.data.rainSiteCheckStatus.items.length; i++) {
+					if (this.data.rainSiteCheckStatus.items[i].id === evt.detail.value) {
+						this.data.rainSiteCheckStatus.current = i;
+						break;
+					}
+				}
+			},
+			//水位站检查项
+			onWaterSiteCheckboxChange: function(evt) {
+				this.data.waterSiteCheckItemsCheckBox.equipmentFaultCheck = 0;
+				this.data.waterSiteCheckItemsCheckBox.waterSensorCheck = 0;
+				for (let i = 0; i < evt.detail.value.length; i++) {
+					let c = evt.detail.value[i];
+					if (c === '0') {
+						this.data.waterSiteCheckItemsCheckBox.equipmentFaultCheck = 1;
+					} else if (c === '1') {
+						this.data.waterSiteCheckItemsCheckBox.waterSensorCheck = 1;
+					}
+				}
+			},
+			//水位站检查结果
+			onWaterSiteCheckStatusRadioChange: function(evt) {
+				for (let i = 0; i < this.data.waterSiteCheckStatus.items.length; i++) {
+					if (this.data.waterSiteCheckStatus.items[i].id === evt.detail.value) {
+						this.data.waterSiteCheckStatus.current = i;
+						break;
+					}
+				}
+			},
+			//墒情站检查项
+			onGroundSiteCheckboxChange: function(evt) {
+				this.data.groundSiteCheckItemsCheckBox.equipmentFaultCheck = 0;
+				this.data.groundSiteCheckItemsCheckBox.groundSensorCheck = 0;
+				for (let i = 0; i < evt.detail.value.length; i++) {
+					let c = evt.detail.value[i];
+					if (c === '0') {
+						this.data.groundSiteCheckItemsCheckBox.equipmentFaultCheck = 1;
+					} else if (c === '1') {
+						this.data.groundSiteCheckItemsCheckBox.groundSensorCheck = 1;
+					}
+				}
+			},
+			//墒情站检查结果
+			onGroundSiteCheckStatusRadioChange: function(evt) {
+				for (let i = 0; i < this.data.groundSiteCheckStatus.items.length; i++) {
+					if (this.data.groundSiteCheckStatus.items[i].id === evt.detail.value) {
+						this.data.groundSiteCheckStatus.current = i;
+						break;
+					}
+				}
+			},
+			//其他设备检查项
+			onOthersEquipmentCheckboxChange: function(evt) {
+				this.data.othersEquipmentCheckItemsCheckBox.equipmentGroundWireCheck = 0;
+				this.data.othersEquipmentCheckItemsCheckBox.bvCheck = 0;
+				this.data.othersEquipmentCheckItemsCheckBox.sunPowerCheck = 0;
+				this.data.othersEquipmentCheckItemsCheckBox.btCheck = 0;
+				this.data.othersEquipmentCheckItemsCheckBox.netCheck = 0;
+
+				for (let i = 0; i < evt.detail.value.length; i++) {
+					let c = evt.detail.value[i];
+					if (c === '0') {
+						this.data.othersEquipmentCheckItemsCheckBox.equipmentGroundWireCheck = 1;
+					} else if (c === '1') {
+						this.data.othersEquipmentCheckItemsCheckBox.bvCheck = 1;
+					} else if (c === '2') {
+						this.data.othersEquipmentCheckItemsCheckBox.sunPowerCheck = 1;
+					} else if (c === '3') {
+						this.data.othersEquipmentCheckItemsCheckBox.btCheck = 1;
+					} else if (c === '4') {
+						this.data.othersEquipmentCheckItemsCheckBox.netCheck = 1;
+					}
+				}
+			},
+			//其他设备检查结果
+			onOthersEquipmentCheckStatusRadioChange: function(evt) {
+				for (let i = 0; i < this.data.othersEquipmentCheckStatus.items.length; i++) {
+					if (this.data.othersEquipmentCheckStatus.items[i].id === evt.detail.value) {
+						this.data.othersEquipmentCheckStatus.current = i;
+						break;
+					}
+				}
+			},
+			//设备更换
+			onEquipmentReplaceCheckboxChange: function(evt) {
+
+				this.data.equipmentsReplaceItemsCheckBox.rtuReplace = 0;
+				this.data.equipmentsReplaceItemsCheckBox.rainSensorReplace = 0;
+				this.data.equipmentsReplaceItemsCheckBox.waterSensorReplace = 0;
+				this.data.equipmentsReplaceItemsCheckBox.groundSensorReplace = 0;
+				this.data.equipmentsReplaceItemsCheckBox.batteryReplace = 0;
+				this.data.equipmentsReplaceItemsCheckBox.sunPowerReplace = 0;
+				this.data.equipmentsReplaceItemsCheckBox.batteryControllerReplace = 0;
+				this.data.equipmentsReplaceItemsCheckBox.otherEquipmentReplace = 0;
+				for (let i = 0; i < evt.detail.value.length; i++) {
+					let c = evt.detail.value[i];
+					if (c === '0') {
+						this.data.equipmentsReplaceItemsCheckBox.rtuReplace = 1;
+					} else if (c === '1') {
+						this.data.equipmentsReplaceItemsCheckBox.rainSensorReplace = 1;
+					} else if (c === '2') {
+						this.data.equipmentsReplaceItemsCheckBox.waterSensorReplace = 1;
+					} else if (c === '3') {
+						this.data.equipmentsReplaceItemsCheckBox.groundSensorReplace = 1;
+					} else if (c === '4') {
+						this.data.equipmentsReplaceItemsCheckBox.batteryReplace = 1;
+					} else if (c === '5') {
+						this.data.equipmentsReplaceItemsCheckBox.sunPowerReplace = 1;
+					} else if (c === '6') {
+						this.data.equipmentsReplaceItemsCheckBox.batteryControllerReplace = 1;
+					} else if (c === '7') {
+						this.data.equipmentsReplaceItemsCheckBox.otherEquipmentReplace = 1;
+					}
+				}
+			},
+			onSiteCheckPhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadSiteCheckPhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadSiteCheckPhoto(imagePath) {
+				let that = this;
+
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.data.siteCheckPhotos.push(path);
+
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onSiteCheckPhotoDel(index) {
+				this.data.siteCheckPhotos.splice(index, 1);
+
+			},
+			onRainSiteCheckPhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadRainSiteCheckPhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadRainSiteCheckPhoto(imagePath) {
+				let that = this;
+
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.data.rainSiteCheckPhotos.push(path);
+
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onRainSitePhotoDel(index) {
+				this.data.rainSiteCheckPhotos.splice(index, 1);
+
+			},
+			onWaterSiteCheckPhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadWaterSiteCheckPhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadWaterSiteCheckPhoto(imagePath) {
+				let that = this;
+
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.data.waterSiteCheckPhotos.push(path);
+
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onWaterSitePhotoDel(index) {
+				this.data.waterSiteCheckPhotos.splice(index, 1);
+
+			},
+			onGroundSiteCheckPhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadGroundSiteCheckPhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadGroundSiteCheckPhoto(imagePath) {
+				let that = this;
+
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.data.groundSiteCheckPhotos.push(path);
+
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onGroundSitePhotoDel(index) {
+				this.data.groundSiteCheckPhotos.splice(index, 1);
+
+			},
+			onOthersEquipmentCheckPhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadOthersEquipmentCheckPhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadOthersEquipmentCheckPhoto(imagePath) {
+				let that = this;
+
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.data.othersEquipmentCheckPhotos.push(path);
+
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onOthersEquipmentPhotoDel(index) {
+				this.data.othersEquipmentCheckPhotos.splice(index, 1);
+
+			},
+			onInspectionWorkCheckPhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadInspectionWorkCheckPhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadInspectionWorkCheckPhoto(imagePath) {
+				let that = this;
+
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.data.inspectionWorkPhotos.push(path);
+
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onInspectionWorkPhotoDel(index) {
+				this.data.inspectionWorkPhotos.splice(index, 1);
+
+			},
+			onRtuReplacePhotoDel(index) {
+				this.data.rtuReplacePhotos.splice(index, 1);
+			},
+			onRtuReplacePhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadRtuReplacePhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadRtuReplacePhoto(imagePath) {
+				let that = this;
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.data.rtuReplacePhotos.push(path);
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onRainSensorReplacePhotoDel(index) {
+				this.data.rainSensorReplacePhotos.splice(index, 1);
+			},
+			onRainSensorReplacePhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadRainSensorReplacePhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadRainSensorReplacePhoto(imagePath) {
+				let that = this;
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.data.rainSensorReplacePhotos.push(path);
+
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onWaterSensorReplacePhotoDel(index) {
+				this.data.waterSensorReplacePhotos.splice(index, 1);
+			},
+			onWaterSensorReplacePhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadWaterSensorReplacePhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadWaterSensorReplacePhoto(imagePath) {
+				let that = this;
+
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.data.waterSensorReplacePhotos.push(path);
+
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onGroundSensorReplacePhotoDel(index) {
+				this.data.groundSensorReplacePhotos.splice(index, 1);
+			},
+			onGroundSensorReplacePhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadGroundSensorReplacePhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadGroundSensorReplacePhoto(imagePath) {
+				let that = this;
+
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.data.groundSensorReplacePhotos.push(path);
+
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onBatteryReplacePhotoDel(index) {
+				this.data.batteryReplacePhotos.splice(index, 1);
+			},
+			onBatteryReplacePhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadBatteryReplacePhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadBatteryReplacePhoto(imagePath) {
+				let that = this;
+
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.data.batteryReplacePhotos.push(path);
+
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onSunPowerReplacePhotoDel(index) {
+				this.data.sunPowerReplacePhotos.splice(index, 1);
+			},
+			onSunPowerReplacePhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadSunPowerReplacePhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadSunPowerReplacePhoto(imagePath) {
+				let that = this;
+
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.data.sunPowerReplacePhotos.push(path);
+
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onBatteryControllerReplacePhotoDel(index) {
+				this.data.batteryControlReplacePhotos.splice(index, 1);
+			},
+			onBatteryControllerReplacePhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadBatteryControllerReplacePhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadBatteryControllerReplacePhoto(imagePath) {
+				let that = this;
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.data.batteryControlReplacePhotos.push(path);
+
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onOtherEquipmentReplacePhotoDel(index) {
+				this.data.otherEquipmentReplacePhotos.splice(index, 1);
+			},
+			onOtherEquipmentReplacePhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadOtherEquipmentReplacePhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadOtherEquipmentReplacePhoto(imagePath) {
+				let that = this;
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.data.otherEquipmentReplacePhotos.push(path);
+
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.cell-hover-class {
+		background-color: rgb(235, 237, 238);
+	}
+
+	.view-flex-rs {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+		align-items: center;
+	}
+
+	.view-flex-rs-flex-wrap {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+		flex-wrap: wrap;
+	}
+
+	.view-flex-rc {
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.view-flex-re {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-end;
+		align-items: center;
+	}
+
+	.view-flex-cs {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-start;
+		align-items: center;
+	}
+
+	.view-flex-cc {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.view-flex-ce {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-end;
+		align-items: center;
+	}
+
+	.line-body {
+		padding-left: 10px;
+		padding-right: 10px;
+	}
+
+	.required-star {
+		color: #FF0000;
+		font-size: 15px;
+		width: 20px;
+		text-align: center;
+		padding-left: 0px;
+		padding-right: 2px;
+	}
+
+	.item-title {
+		color: #909399;
+		font-size: 15px;
+	}
+
+	.mline-text {
+		padding-left: 2px;
+		width: 100%;
+		/* background-color:#909399; */
+		height: 70px;
+		border: 1px solid #FF5A5F;
+		border-radius: 5px;
+	}
+
+	.footer {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		z-index: 1;
+		height: 100rpx;
+		padding: 20rpx;
+		box-sizing: border-box;
+		display: flex;
+		align-items: center;
+		justify-content: flex-end;
+		background-color: whitesmoke;
+
+		.ipt {
+			width: 380rpx;
+			height: 77rpx;
+			background: #f7f7f7;
+			border-radius: 38px;
+			padding: 0 37rpx;
+			box-sizing: border-box;
+			margin-right: 20rpx;
+		}
+
+		.control {
+			flex: 1;
+			display: flex;
+			align-items: center;
+			justify-content: flex-end;
+
+			.block {
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				flex: 1;
+			}
+
+			.icon {
+				height: auto;
+			}
+
+			.c {
+				width: 41rpx;
+				margin-right: 10rpx;
+			}
+
+			.s {
+				width: 36rpx;
+			}
+
+			.t {
+				width: 31rpx;
+			}
+		}
+	}
+
+	.container {
+		padding: 0 0 100rpx;
+	}
+
+	.img-container {
+		margin-bottom: 0px;
+		width: 100px;
+		height: 100px;
+
+		.note-image-box {
+			margin-top: 0px;
+			display: flex;
+			flex-wrap: wrap;
+			padding: 10px;
+
+			.note-image-item {
+				position: relative;
+				width: 100%;
+				height: 0;
+				padding-top: 100%;
+				box-sizing: border-box;
+				// background-color: #18B566;
+
+				.close-icon {
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					position: absolute;
+					right: 0px;
+					top: 0px;
+					width: 22px;
+					height: 22px;
+					border-radius: 50%;
+					background-color: #d5d5d5;
+					z-index: 2;
+				}
+
+				.image-box {
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					position: absolute;
+					top: 0px;
+					right: 0px;
+					border: 0px;
+					left: 0px;
+					border: 1px #eee solid;
+					border-radius: 5px;
+					overflow: hidden;
+					width: 99%;
+					height: 99%;
+
+				}
+
+
+			}
+		}
+	}
+
+	.input-body {
+		background-color: #fff;
+		padding: 10px;
+	}
+
+	.decoration {
+		width: 6px;
+		height: 6px;
+		margin-right: 4px;
+		border-radius: 50%;
+		background-color: cadetblue;
+	}
+</style>

+ 326 - 0
pages/equipment-inspection/finishedinspectionreportlist.vue

@@ -0,0 +1,326 @@
+<!--
+ * @Title: 
+ * @Description: 巡检上报列表
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+									src="/static/images/list/inspection_item.png" mode="widthFix">
+								</image>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="auth" size="18" color="lightblue" />
+								<text class="item-text-lable">填报人:</text>
+								<text v-if="rainSeasonKind ==1"
+									class="item-text-content">{{item.beforeRainSeasonReportUserName}}</text>
+								<text v-else-if="rainSeasonKind ==2"
+									class="item-text-content">{{item.rainSeasonFirstReportUserName}}</text>
+								<text v-else-if="rainSeasonKind ==3"
+									class="item-text-content">{{item.rainSeasonSecondReportUserName}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+								<text class="item-text-lable">填报时间:</text>
+								<text v-if="rainSeasonKind ==1"
+									class="item-text-content">{{item.beforeRainSeasonReportTime}}</text>
+								<text v-else-if="rainSeasonKind ==2"
+									class="item-text-content">{{item.rainSeasonFirstReportTime}}</text>
+								<text v-else-if="rainSeasonKind ==3"
+									class="item-text-content">{{item.rainSeasonSecondReportTime}}</text>
+							</view>
+							<view class="item-button-group">
+								<view v-if="rainSeasonKind ==1" class="item-button" style="width: 120px;"
+									@click="onBeforeRainDetailViewClick(item.beforeRainSeasonReportId)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">巡检填报详情</text>
+									</view>
+								</view>
+								<view v-if="rainSeasonKind ==2" class="item-button" style="width: 120px;"
+									@click="onRainFirstDetailViewClick(item.rainSeasonFirstReportId)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">巡检填报详情</text>
+									</view>
+								</view>
+								<view v-if="rainSeasonKind ==3" class="item-button" style="width: 120px;"
+									@click="onRainSencodDetailViewClick(item.rainSeasonSecondReportId)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">巡检填报详情</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :page-size="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+
+	export default {
+		components: {
+		},
+		onLoad(option) {
+			if (this.userInfo.role_name === role['admin']) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role['orgAdmin']) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role['companyAdmin']) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role['companyServciePerson']) {
+				this.permission.companyServciePerson = true;
+			}
+			this.rainSeasonKind = option.rainSeasonKind;
+			if (this.rainSeasonKind == 1) {
+				this.title = '汛前已巡检设备信息';
+			} else if (this.rainSeasonKind == 2) {
+				this.title = '汛中(一)已巡检设备信息';
+			} else if (this.rainSeasonKind == 3) {
+				this.title = '汛中(二)已巡检设备信息';
+			}
+			this.getPage();
+		},
+		data() {
+			return {
+				rainSeasonKind: 0,
+				title: '汛前已巡检设备信息',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				countInfo: {
+					rainKind: 0,
+				},
+				list: [],
+				pageSize: 10,
+				// 当前页
+				pageCurrent: 1,
+				// 数据总量
+				total: 0,
+				regionTree: [],
+				regionCode: '',
+				selectedTreeNode: '',
+				searchRtuNameVal: '',
+				searchRtuCodeVal: '',
+				query: {},
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				}
+			}
+		},
+		computed: {
+		},
+		onShow() {
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			onTreeNodeClick(node) {
+				console.log(JSON.stringify(node))
+			},
+			onTreePopupOpened(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreePopupClosed(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreeChange(e) {
+				console.log(JSON.stringify(e))
+				let nodes = e.detail.value;
+				if (nodes.length > 0) {
+					let node = nodes[nodes.length - 1];
+					this.regionCode = node.value;
+					this.query = {};
+					this.query['adCode'] = this.regionCode;
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+					this.getCountInfo(this.regionCode);
+				} else {
+					this.regionCode = '';
+					this.query = {};
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+					this.getCountInfo(this.regionCode);
+				}
+			},
+			onBeforeRainDetailViewClick(id) {
+				console.log("onDetailViewClick " + id)
+				var url = '/pages/equipment-inspection/inspectionreportview?type=1&id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onRainFirstDetailViewClick(id) {
+				console.log("onDetailViewClick " + id)
+				var url = '/pages/equipment-inspection/inspectionreportview?type=2&id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onRainSencodDetailViewClick(id) {
+				console.log("onDetailViewClick " + id)
+				var url = '/pages/equipment-inspection/inspectionreportview?type=3&id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			//录入查询
+			search() {
+				this.pageCurrent = 1;
+				//	console.log(JSON.stringify(res))
+				let params = {};
+				if (this.searchRtuCodeVal.length > 0) {
+					params['rtuCode'] = this.searchRtuCodeVal;
+				}
+				if (this.searchRtuNameVal.length > 0) {
+					params['rtuName'] = this.searchRtuNameVal;
+				}
+				this.getPage(params);
+			},
+			searchRtuNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuNameVal = '';
+					if (this.searchRtuNameVal.length == 0) {
+						let params = {};
+						if (this.searchRtuCodeVal.length > 0) {
+							params['rtuCode'] = this.searchRtuCodeVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			searchRtuCodeValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuCodeVal = '';
+					if (this.searchRtuCodeVal.length == 0) {
+						let params = {};
+						if (this.searchRtuNameVal.length > 0) {
+							params['rtuName'] = this.searchRtuNameVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			getCountInfo(adCode) {
+				let that = this;
+				http.request({
+					url: '/galaxy-business/equipment/inspection/count',
+					method: 'GET',
+					data: {
+						adCode
+					}
+				}).then(res => {
+					that.countInfo = res.data;
+				})
+			},
+			getRegionTree() {
+				var that = this;
+				http.request({
+					url: '/galaxy-business/baseinfo/region/tree',
+					method: 'GET',
+				}).then(res => {
+					if (res.data != null) {
+						that.regionTree = res.data;
+						that.selectedTreeNode = that.regionTree[0].value;
+						that.regionCode = that.regionTree[0].value;
+						that.query = {};
+						that.query['adCode'] = that.regionCode;
+						//that.orgId = that.projectTree[0].orgId;
+						//that.projectId = that.projectTree[0].projectId;
+						that.getPage();
+						that.getCountInfo(that.regionCode);
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			getPage(params = {}) {
+				let that = this;
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				params['rainSeasonKind'] = this.rainSeasonKind;
+				let postData = Object.assign(params, this.query);
+				http.request({
+					url: '/galaxy-business/equipment/inspection/rain/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data != null) {
+						if (res.data.records != null) {
+							that.list = res.data.records;
+						}
+						this.total = res.data.total;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	
+</style>

+ 554 - 0
pages/equipment-inspection/inspectionlist.vue

@@ -0,0 +1,554 @@
+<!--
+ * @Title: 
+ * @Description: 巡检上报列表
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-section title="查询" titleFontSize="0.8rem" type="line">
+				<view class="search-block">
+					<view class="adcd-adnm">
+						<uni-data-picker placeholder="请选择地区" popup-title="请选择所在地区" :localdata="regionTree"
+							v-model="selectedTreeNode" @change="onTreeChange" @nodeclick="onTreeNodeClick"
+							@popupopened="onTreePopupOpened" @popupclosed="onTreePopupClosed" :clear-icon="false">
+						</uni-data-picker>
+					</view>
+					<view class="rtu-code">
+						<uni-easyinput :styles="inputStyles" @input="searchRtuCodeValClear" prefixIcon="search"
+							v-model="searchRtuCodeVal" placeholder="请输入测站编码">
+						</uni-easyinput>
+					</view>
+					<view class="rtu-name">
+						<uni-easyinput :styles="inputStyles" @input="searchRtuNameValClear" prefixIcon="search"
+							v-model="searchRtuNameVal" placeholder="请输入测站名称">
+						</uni-easyinput>
+					</view>
+					<view class="submit-btn">
+						<button type="default" @click="search">查 询</button>
+					</view>
+				</view>
+			</uni-section>
+			<view class="line" style="margin-top: 5px;">
+				<view class="lineText">
+					<text class="inspectionCount">当前汛期: </text>
+					<text v-if="countInfo.rainKind==1" class="content">汛前巡检</text>
+					<text v-else-if="countInfo.rainKind==2" class="content">汛中(一)巡检</text>
+					<text v-else-if="countInfo.rainKind==3" class="content">汛中(二)巡检</text>
+					<text v-else class="content">--</text>
+				</view>
+				<view class="lineText">
+					<text class="beforeRainInspectionCount">巡检设备总数量: </text>
+					<text class="content">{{ countInfo.rtus }}</text>
+				</view>
+				<view class="lineText">
+					<text class="rainSencodInspectionCount">剩余待巡检设备数量: </text>
+					<text class="content">{{ countInfo.remaininspectionrtus }}</text>
+				</view>
+			</view>
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.rtuCode">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+									src="/static/images/list/inspection_item.png" mode="widthFix">
+								</image>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="map" size="18" color="lightblue" />
+								<text class="item-text-lable">行政区划:</text>
+								<text class="item-text-content">{{getAreaName(item)}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="location" size="18" color="lightblue" />
+								<text class="item-text-lable">安装位置:</text>
+								<text class="item-text-content-ellipsis">{{item.locationDesc}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="home" size="18" color="lightblue" />
+								<text class="item-text-lable">测站类型:</text>
+								<text class="item-text-content">{{getSiteKind(item)}}</text>
+							</view>
+							<view v-if="item.runStatusId==1" class="items-line">
+								<image class="item-title-run-status-icon" mode="widthFix"
+									src="/static/images/icon_warning.png">
+								</image>
+								<text class="item-text-lable">站点异常:</text>
+								<text class="item-text-content-ellipsis">{{item.warnKindInfo}}</text>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button" @click="onLocationClick(item)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="location" size="18" color="coral" />
+										<text class="button-text">导航</text>
+									</view>
+								</view>
+								<!-- 					<view v-if="item.runStatusId==1" class="item-button" @click="onWarnInfoViewClick(item.rtuCode)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">异常信息</text>
+									</view>
+								</view> -->
+								<!-- 			<view v-if="(permission.companyAdmin || permission.companyServciePerson) && item.orderStatus==1 && (item.orderConfirm ==0 || item.myOrder ==1)" class="item-button" @click="onComfireCheckOrderClick(item)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="compose" size="18" color="coral" />
+										<text class="button-text">异常处理</text>
+									</view>
+								</view> -->
+								<!-- 						<view v-if="(permission.companyAdmin || permission.companyServciePerson) && item.orderStatus==1 && item.orderConfirm ==1 && item.myOrder ==0" class="item-button" @click="onCheckOrderReportClick(item)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="compose" size="18" color="coral" />
+										<text class="button-text">维修填报</text>
+									</view>
+								</view> -->
+								<view v-if="item.orderStatus==1" class="item-button"
+									@click="onCheckOrderProcessClick(item)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="compose" size="18" color="coral" />
+										<text class="button-text">维修任务</text>
+									</view>
+								</view>
+								<view v-if="permission.companyAdmin || permission.companyServciePerson"
+									class="item-button" @click="onReportClick(item.rtuCode)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="compose" size="18" color="coral" />
+										<text class="button-text">开始填报</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :page-size="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+
+	export default {
+		components: {
+
+		},
+		onLoad(option) {
+			if (this.userInfo.role_name === role['admin']) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role['orgAdmin']) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role['companyAdmin']) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role['companyServciePerson']) {
+				this.permission.companyServciePerson = true;
+			}
+			this.getRegionTree();
+		},
+		data() {
+			return {
+				title: '待巡检设备',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				countInfo: {
+					rainKind: 0,
+				},
+				//planId: 0,
+				//orgId: '',
+				//projectId: '',
+				list: [],
+
+				pageSize: 10,
+				// 当前页
+				pageCurrent: 1,
+				// 数据总量
+				total: 0,
+				regionTree: [],
+				regionCode: '',
+				selectedTreeNode: '',
+				searchRtuNameVal: '',
+				searchRtuCodeVal: '',
+				query: {},
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				}
+			}
+		},
+		computed: {
+			getIcon() {
+				return path => {
+					return 'https://cdn.uviewui.com/uview/example/' + path + '.png';
+				}
+			},
+		},
+		onShow() {
+			this.pageCurrent = 1;
+			this.getPage()
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			onTreeNodeClick(node) {
+				console.log(JSON.stringify(node))
+			},
+			onTreePopupOpened(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreePopupClosed(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreeChange(e) {
+				console.log(JSON.stringify(e))
+				let nodes = e.detail.value;
+				if (nodes.length > 0) {
+					let node = nodes[nodes.length - 1];
+					this.regionCode = node.value;
+					this.query = {};
+					this.query['adCode'] = this.regionCode;
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+					//this.getCountInfo(this.regionCode);
+				} else {
+					this.regionCode = '';
+					this.query = {};
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+					//this.getCountInfo(this.regionCode);
+				}
+			},
+			onDetailViewClick(rtuCode) {
+				console.log("onDetailViewClick " + rtuCode)
+				var url = '/pages/equipment-inspection/inspectionreportview?rtuCode=' + rtuCode;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onReportClick(rtuCode) {
+				console.log("onReportClick " + rtuCode)
+				var url = '/pages/equipment-inspection/equipmentinspectionreport?rtuCode=' + rtuCode;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onLocationClick(item) {
+				if (item.lat && item.lat) {
+					let lat = item.lat;
+					let lng = item.lng;
+					let name = item.rtuName;
+					let add = '';
+					if (item.locationDesc) {
+						add = item.locationDesc;
+					}
+					uni.openLocation({
+						latitude: Number(lat),
+						longitude: Number(lng),
+						name: name,
+						address: "",
+						success() {}
+					})
+				} else {
+					uni.showModal({
+						content: '经纬度为空,请确认!',
+						showCancel: true,
+						success(res) {
+							if (res.confirm) {
+
+							}
+						}
+					});
+				}
+			},
+			onWarnInfoViewClick(rtuCode) {
+				uni.navigateTo({
+					url: '/pages/warning/rtuwarninglist?rtuCode=' + rtuCode
+				})
+			},
+			onCheckOrderProcessClick(item) {
+				var that = this;
+				console.log("order id " + item.orderId)
+				if (this.permission.admin || this.permission.orgAdmin) {
+					let url = '/pages/check-order/orderprocessreportdetail?orderId=' + item.orderId;
+					uni.navigateTo({
+						url: url
+					})
+				} else {
+					if (item.orderConfirm == 0) {
+						// uni.showModal({
+						// 	content: '确定接受该维修任务?',
+						// 	showCancel: true,
+						// 	success(res) {
+						// 		if (res.confirm) {
+						// 			let url =
+						// 				'/pages/check-order/orderconfirm?id=' + item.orderId;
+						// 			uni.navigateTo({
+						// 				url: url
+						// 			})
+						// 		}
+						// 	}
+						// });
+						let url =
+							'/pages/check-order/orderconfirm?id=' + item.orderId;
+						uni.navigateTo({
+							url: url
+						})
+					} else {
+						if (item.myOrder == 1) {
+							uni.showModal({
+								content: '确定继续进行维修任务填报?',
+								showCancel: true,
+								success(res) {
+									if (res.confirm) {
+										let url = '/pages/check-order/orderprocessreport?orderId=' + item.orderId;
+										uni.navigateTo({
+											url: url
+										})
+									}
+								}
+							});
+						} else {
+							let url = '/pages/check-order/orderprocessreportdetail?orderId=' + item.orderId;
+							uni.navigateTo({
+								url: url
+							})
+						}
+					}
+				}
+			},
+			// onCheckOrderReportClick(item){
+			// 	console.log("order id" + item.orderId)
+			// 	var url = '/pages/check-order/orderprocessreport?orderId=' + item.orderId;
+			// 	uni.navigateTo({
+			// 		url: url
+			// 	})
+			// },
+			// onViewCheckOrderInfoClick(item){
+			// 	let url = '/pages/check-order/orderprocessreportdetail?orderId=' + item.orderId;
+			// 	uni.navigateTo({
+			// 		url: url
+			// 	})
+			// },
+			//录入查询
+			search() {
+				this.pageCurrent = 1;
+				//	console.log(JSON.stringify(res))
+				let params = {};
+				if (this.searchRtuCodeVal.length > 0) {
+					params['rtuCode'] = this.searchRtuCodeVal;
+				}
+				if (this.searchRtuNameVal.length > 0) {
+					params['rtuName'] = this.searchRtuNameVal;
+				}
+				this.getPage(params);
+			},
+			searchRtuNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuNameVal = '';
+					if (this.searchRtuNameVal.length == 0) {
+						let params = {};
+						if (this.searchRtuCodeVal.length > 0) {
+							params['rtuCode'] = this.searchRtuCodeVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			searchRtuCodeValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuCodeVal = '';
+					if (this.searchRtuCodeVal.length == 0) {
+						let params = {};
+						if (this.searchRtuNameVal.length > 0) {
+							params['rtuName'] = this.searchRtuNameVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			getCountInfo(adCode) {
+				let that = this;
+				http.request({
+					url: '/galaxy-business/equipment/inspection/count',
+					method: 'GET',
+					data: {
+						adCode
+					}
+				}).then(res => {
+					that.countInfo = res.data;
+				})
+			},
+			getRegionTree() {
+				var that = this;
+				http.request({
+					url: '/galaxy-business/baseinfo/region/tree',
+					method: 'GET',
+				}).then(res => {
+					if (res.data != null) {
+						that.regionTree = res.data;
+						that.selectedTreeNode = that.regionTree[0].value;
+						that.regionCode = that.regionTree[0].value;
+						that.query = {};
+						that.query['adCode'] = that.regionCode;
+						//that.orgId = that.projectTree[0].orgId;
+						//that.projectId = that.projectTree[0].projectId;
+						that.getPage();
+						that.getCountInfo(that.regionCode);
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			getSiteKind(val) {
+				let htmltext = '';
+				if (val.isRain === 1) {
+					htmltext = htmltext + "雨量站";
+				}
+				if (val.isRiver == 1 || val.isRes == 1) {
+					if (htmltext.length > 0) {
+						htmltext = htmltext + ' / ';
+					}
+					htmltext = htmltext + '水位站';
+				}
+				if (val.isGround == 1) {
+					if (htmltext.length > 0) {
+						htmltext = htmltext + ' / ';
+					}
+					htmltext = htmltext + '墒情站';
+				}
+				if (val.isVideo == 1) {
+					if (htmltext.length > 0) {
+						htmltext = htmltext + ' / ';
+					}
+					htmltext = htmltext + '视频站';
+				}
+				return htmltext;
+			},
+			getAreaName(item) {
+				let htmltext = '';
+				if (item.adCity) {
+					htmltext = htmltext + item.adCity;
+				}
+				if (item.adDist) {
+					if (htmltext.length > 0) {
+						htmltext = htmltext + ' / ';
+					}
+					htmltext = htmltext + item.adDist;
+				}
+				return htmltext;
+			},
+			getPage(params = {}) {
+				let that = this;
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				http.request({
+					url: '/galaxy-business/equipment/inspection/rtu/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data != null) {
+						//console.log(JSON.stringify(res.data))
+						if (res.data.records != null) {
+							that.list = res.data.records;
+						}
+						this.total = res.data.total;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.line {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-start;
+	}
+
+	.line .lineText {
+		margin-left: 10px;
+		margin-right: 0px;
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+	}
+
+	.line .lineText .inspectionCount {
+		color: dodgerblue;
+		font-size: 0.7rem;
+	}
+
+	.line .lineText .content {
+		margin-left: 10px;
+		color: gray;
+		font-size: 0.7rem;
+	}
+
+	.line .lineText .beforeRainInspectionCount {
+		color: darkorange;
+		font-size: 0.7rem;
+	}
+
+	.line .lineText .rainFirstInspectionCount {
+		color: lightcoral;
+		font-size: 0.7rem;
+	}
+
+	.line .lineText .rainSencodInspectionCount {
+		color: darkcyan;
+		font-size: 0.7rem;
+	}
+</style>

+ 177 - 0
pages/equipment-inspection/inspectionremainingproblemsclose.vue

@@ -0,0 +1,177 @@
+<!--
+ * @Title: 
+ * @Description: 巡检遗留问题关闭操作
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<uni-forms ref="baseForm">
+			<uni-card title="处理意见" :is-shadow="false">
+				<uni-easyinput type="textarea" v-model="remainQuestionResolution" placeholder="请输入处理意见" />
+			</uni-card>
+		</uni-forms>
+		<view class="footer">
+			<view class="control">
+				<view style="display: flex;flex-direction: row;justify-content: flex-start;">
+					<view
+						style="display:flex;flex-direction: row;justify-content: center;width: 90px;height:28px;margin-right: 10px;border-radius:7px;background-color:lightpink"
+						@click="toSubmit()">
+						<view style="display:flex;flex-direction: column;justify-content: center;">
+							<uni-icons class="input-uni-icon" type="location" size="18" color="#999" />
+						</view>
+						<view style="display:flex;flex-direction: column;justify-content: center;padding-left:5px;">
+							<text style="color:black;font-size:0.6rem">立即提交</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		pathToBase64,
+		base64ToPath
+	} from '@/js_sdk/mmmm-image-tools/index.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+
+	export default {
+		components: {
+		},
+		onLoad(options) {
+			this.id = options.id;
+		},
+		data() {
+			return {
+				title: '巡检遗留问题关闭处理',
+				id: '',
+				remainQuestionResolution: '',
+			}
+		},
+		computed: {
+
+		},
+		onShow() {},
+		created() {},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			toSubmit() {
+				let formdata = {};
+				formdata['id'] = Number(this.id);
+				formdata['remainQuestionResolution'] = this.remainQuestionResolution;
+				console.log(JSON.stringify(formdata))
+				http.request({
+					url: '/galaxy-business/equipment/inspection/report/remainingproblems/close',
+					method: 'POST',
+					data: formdata
+				}).then(res => {
+					if (res.success) {
+						uni.showModal({
+							content: '关闭操作已提交',
+							showCancel: false,
+							success(res) {
+								uni.navigateBack();
+							}
+						});
+					} else {
+						uni.showModal({
+							content: '' + res.msg,
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			formReset: function(e) {
+				console.log('清空数据')
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+
+	.footer {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		z-index: 1;
+		height: 100rpx;
+		padding: 20rpx;
+		box-sizing: border-box;
+		display: flex;
+		align-items: center;
+		justify-content: flex-end;
+		background-color: #ffffff;
+
+		.ipt {
+			width: 380rpx;
+			height: 77rpx;
+			background: #f7f7f7;
+			border-radius: 38px;
+			padding: 0 37rpx;
+			box-sizing: border-box;
+			margin-right: 20rpx;
+		}
+
+		.control {
+			flex: 1;
+			display: flex;
+			align-items: center;
+			justify-content: flex-end;
+
+			.block {
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				flex: 1;
+			}
+
+			.icon {
+				height: auto;
+			}
+
+			.c {
+				width: 41rpx;
+				margin-right: 10rpx;
+			}
+
+			.s {
+				width: 36rpx;
+			}
+
+			.t {
+				width: 31rpx;
+			}
+		}
+	}
+
+	
+</style>

+ 326 - 0
pages/equipment-inspection/inspectionremainingproblemslist.vue

@@ -0,0 +1,326 @@
+<!--
+ * @Title: 
+ * @Description: 巡检遗留问题列表
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-section title="查询条件" titleFontSize="0.7rem" type="line" style="padding-left: 0px;padding-right: 0px;">
+				<view style="margin-top: 5px;margin-bottom: 5px;padding-left: 10px;padding-right: 10px;">
+					<uni-easyinput :styles="inputStyles" @input="searchRtuCodeValClear" prefixIcon="search"
+						v-model="searchRtuCodeVal" placeholder="请输入测站编码">
+					</uni-easyinput>
+				</view>
+				<view style="margin-top: 5px;margin-bottom: 5px;padding-left: 10px;padding-right: 10px;">
+					<uni-easyinput :styles="inputStyles" @input="searchRtuNameValClear" prefixIcon="search"
+						v-model="searchRtuNameVal" placeholder="请输入测站名称">
+					</uni-easyinput>
+				</view>
+				<view style="margin-top: 5px;margin-bottom: 5px;padding-left: 10px;padding-right: 10px;">
+					<view class="inspectionYear">
+						<picker pa mode="date" fields="year" :value="inspectionYear" @change="inspectionYearChange">
+							<view class="item-text-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="skyblue" />
+								<text
+									style="margin-left: 4px;font-size: 0.7rem;color:grey;">{{getInspectionYear}}</text>
+							</view>
+						</picker>
+					</view>
+				</view>
+				<view style="margin-top: 5px;margin-bottom: 5px;padding-left: 10px;padding-right: 10px;">
+					<uni-data-select placeholder="请选择汛期" v-model="rainSeasonKind" :localdata="rainDictData"
+						@change="rainSelectChange" :clear="false"></uni-data-select>
+				</view>
+				<view style="margin-top: 5px;margin-bottom: 5px;padding-left: 10px;padding-right: 10px;">
+					<button type="default" @click="search">查 询</button>
+				</view>
+			</uni-section>
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+									src="/static/images/list/inspection_item.png" mode="widthFix">
+								</image>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+								<text class="item-text-lable">填报时间:</text>
+								<text class="item-text-content">{{item.createTime}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="compose" size="18" color="lightblue" />
+								<text class="item-text-lable">汛期:</text>
+								<text v-if="item.rainSeasonKind == 1" class="item-text-content">汛前巡检</text>
+								<text v-else-if="item.rainSeasonKind == 2" class="item-text-content">汛中第一次巡检</text>
+								<text v-else-if="item.rainSeasonKind == 3" class="item-text-content">汛中第二次巡检</text>
+								<text v-else></text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="list" size="18" color="lightblue" />
+								<text class="item-text-lable">问题处理状态:</text>
+								<text v-if="item.remainQuestionState ==1" class="item-text-content"
+									style="color:red;">待处理</text>
+								<text v-else class="item-text-content" style="color:blue;">已完成</text>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button" style="width: 120px;"
+									@click="onDetailViewClick(item.id,item.rainSeasonKind)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">巡检填报详情</text>
+									</view>
+								</view>
+								<view v-if="(permission.admin || permission.orgAdmin) && item.remainQuestionState == 1"
+									class="item-button" style="width: 120px;"
+									@click="onCloseRemainingProblemClick(item.id)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="compose" size="18" color="coral" />
+										<text class="button-text">关闭问题</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :page-size="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+	export default {
+		components: {},
+		onLoad(option) {
+			let date = new Date();
+			this.inspectionYear = date.getFullYear();
+			if (this.userInfo.role_name === role['admin']) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role['orgAdmin']) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role['companyAdmin']) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role['companyServciePerson']) {
+				this.permission.companyServciePerson = true;
+			}
+			this.pageCurrent = 1;
+			this.getPage()
+		},
+		data() {
+			return {
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				list: [],
+				title: '设备巡检遗留问题信息',
+				pageSize: 10,
+				// 当前页
+				pageCurrent: 1,
+				// 数据总量
+				total: 0,
+				regionTree: [],
+				regionCode: '',
+				selectedTreeNode: '',
+				searchRtuNameVal: '',
+				searchRtuCodeVal: '',
+				query: {},
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				},
+				inspectionYear: '2023',
+				rainSeasonKind: 0,
+				rainDictData: [{
+						value: 1,
+						text: "汛前巡检"
+					},
+					{
+						value: 2,
+						text: "汛中第一次巡检"
+					},
+					{
+						value: 3,
+						text: "汛中第二次巡检"
+					},
+				],
+			}
+		},
+		computed: {
+			getInspectionYear() {
+				return this.inspectionYear + "年";
+			}
+		},
+		onShow() {},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			onTreeNodeClick(node) {
+				console.log(JSON.stringify(node))
+			},
+			onTreePopupOpened(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreePopupClosed(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreeChange(e) {
+				console.log(JSON.stringify(e))
+				let nodes = e.detail.value;
+				if (nodes.length > 0) {
+					let node = nodes[nodes.length - 1];
+					this.regionCode = node.value;
+					this.query = {};
+					this.query['adCode'] = this.regionCode;
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+				} else {
+					this.regionCode = '';
+					this.query = {};
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+				}
+			},
+			onDetailViewClick(id, rainSeasonKind) {
+				let url = '/pages/equipment-inspection/inspectionreportview?id=' + id + "&type=" + rainSeasonKind;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onCloseRemainingProblemClick(id) {
+				let url = '/pages/equipment-inspection/inspectionremainingproblemsclose?id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			//录入查询
+			search() {
+				this.pageCurrent = 1;
+				let params = {};
+				if (this.searchRtuCodeVal.length > 0) {
+					params['rtuCode'] = this.searchRtuCodeVal;
+				}
+				if (this.searchRtuNameVal.length > 0) {
+					params['rtuName'] = this.searchRtuNameVal;
+				}
+				if (this.inspectionYear) {
+					params['inspectionYear'] = this.inspectionYear + "-01-01";
+				}
+				if (this.rainSeasonKind) {
+					params['rainSeasonKind'] = this.rainSeasonKind;
+				}
+				this.getPage(params);
+			},
+			searchRtuNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuNameVal = '';
+					if (this.searchRtuNameVal.length == 0) {
+						let params = {};
+						if (this.searchRtuCodeVal.length > 0) {
+							params['rtuCode'] = this.searchRtuCodeVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			searchRtuCodeValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuCodeVal = '';
+					if (this.searchRtuCodeVal.length == 0) {
+						let params = {};
+						if (this.searchRtuNameVal.length > 0) {
+							params['rtuName'] = this.searchRtuNameVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			inspectionYearChange(event) {
+				this.inspectionYear = event.detail.value;
+			},
+			rainSelectChange(e) {
+				if (e != null && e != '') {
+					console.log("e:", e);
+					this.rainSeasonKind = e;
+				}
+			},
+			getPage(params = {}) {
+				const that = this;
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				http.request({
+					url: '/galaxy-business/equipment/inspection/report/remainingproblems/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+				//	console.log(JSON.stringify(res))
+					if (res.data != null) {
+						if (res.data.records != null) {
+							that.list = res.data.records;
+						}
+						this.total = res.data.total;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+
+</style>

+ 1048 - 0
pages/equipment-inspection/inspectionreportdetail.vue

@@ -0,0 +1,1048 @@
+<!--
+ * @Title: 
+ * @Description: 巡检填报详情
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-section title="站点基础信息">
+			<template v-slot:decoration>
+				<view class="decoration"></view>
+			</template>
+			<uni-card title="测站名称">
+				<view class="item-text-line">
+					<text class="item-title">{{data.rtuName}}</text>/<text class="item-text">{{data.rtuCode}}</text>
+				</view>
+			</uni-card>
+			<uni-card title="测站类型">
+				<view class="item-text-line">
+					<text class="item-text">{{getSiteKind}}</text>
+				</view>
+			</uni-card>
+			<uni-card title="测站安装地址">
+				<view class="item-text-line">
+					<text class="item-text-block">{{data.locationDesc}}</text>
+				</view>
+			</uni-card>
+			<uni-card title="经纬度">
+				<view class="item-text-line">
+					<text class="item-text">{{data.lng}}/{{data.lat}}</text>
+				</view>
+			</uni-card>
+			<uni-card title="行政区划">
+				<view class="item-text-line">
+					<text class="item-text">{{getAreaName}}</text>
+				</view>
+			</uni-card>
+		</uni-section>
+		<uni-section title="站点状态检查信息">
+			<template v-slot:decoration>
+				<view class="decoration"></view>
+			</template>
+			<uni-card title="已选检查项">
+				<view class="item-text-line">
+					<text class="item-title select-text">{{getSiteCheckStatus}}</text>
+				</view>
+			</uni-card>
+			<uni-card title="站点检查补充说明">
+				<view class="item-text-line">
+					<text class="item-text-block">{{data.siteCheckRemark}}</text>
+				</view>
+			</uni-card>
+			<uni-card title="拍摄照片">
+				<view v-if="data.siteCheckPhotos && data.siteCheckPhotos.length>0" class="view-flex-cc">
+					<image v-for="(item, index) in data.siteCheckPhotos" :key="index" class="cover-image"
+						mode="widthFix" style="width: 100%;" :src="toOss(item)">
+					</image>
+				</view>
+			</uni-card>
+		</uni-section>
+		<uni-section title="雨量站检查信息">
+			<template v-slot:decoration>
+				<view class="decoration"></view>
+			</template>
+			<uni-card title="已选检查项">
+				<view class="item-text-line">
+					<text class="item-title select-text">{{getRainSiteCheckItems}}</text>
+				</view>
+			</uni-card>
+			<uni-card title="拍摄照片">
+				<view v-if="data.rainSiteCheckPhotos && data.rainSiteCheckPhotos.length>0" class="view-flex-cc">
+					<image v-for="(item, index) in data.rainSiteCheckPhotos" :key="index" class="cover-image"
+						mode="widthFix" style="width: 100%;" :src="toOss(item)">
+					</image>
+				</view>
+			</uni-card>
+			<uni-card title="巡检结果">
+				<view class="item-text-line">
+					<text v-if="data.rainSiteCheckResult==0" class="item-title error-text">异常</text>
+					<text v-else class="item-title normally-text">正常</text>
+				</view>
+			</uni-card>
+			<uni-card title="雨量站检查补充说明">
+				<view class="item-text-line">
+					<text class="item-text-block">{{data.rainSiteCheckRemark}}</text>
+				</view>
+			</uni-card>
+		</uni-section>
+		<uni-section title="水位站检查信息">
+			<template v-slot:decoration>
+				<view class="decoration"></view>
+			</template>
+			<uni-card title="已选检查项">
+				<view class="item-text-line">
+					<text class="item-title select-text">{{getWaterSiteCheckItems}}</text>
+				</view>
+			</uni-card>
+			<uni-card v-if="data.waterSiteCheckPhotos.length>0" title="拍摄照片">
+				<view class="view-flex-cc">
+					<image v-for="(item, index) in data.waterSiteCheckPhotos" :key="index" class="cover-image"
+						mode="widthFix" style="width: 100%;" :src="toOss(item)">
+					</image>
+				</view>
+			</uni-card>
+			<uni-card title="巡检结果">
+				<view class="item-text-line">
+					<text v-if="data.waterSiteCheckResult==0" class="item-title error-text">异常</text>
+					<text v-else class="item-title normally-text">正常</text>
+				</view>
+			</uni-card>
+			<uni-card title="检查补充说明">
+				<view class="item-text-line">
+					<text class="item-text-block">{{data.waterSiteCheckRemark}}</text>
+				</view>
+			</uni-card>
+		</uni-section>
+		<uni-section title="墒情站检查信息">
+			<template v-slot:decoration>
+				<view class="decoration"></view>
+			</template>
+			<uni-card title="已选检查项">
+				<view class="item-text-line">
+					<text class="item-title select-text">{{getGroundSiteCheckItems}}</text>
+				</view>
+			</uni-card>
+			<uni-card title="拍摄照片">
+				<view v-if="data.groundSiteCheckPhotos && data.groundSiteCheckPhotos.length>0" class="view-flex-cc">
+					<image v-for="(item, index) in data.groundSiteCheckPhotos" :key="index" class="cover-image"
+						mode="widthFix" style="width: 100%;" :src="toOss(item)">
+					</image>
+				</view>
+			</uni-card>
+			<uni-card title="巡检结果">
+				<view class="item-text-line">
+					<text v-if="data.groundSiteCheckResult==0" class="item-title error-text">异常</text>
+					<text v-else class="item-title normally-text">正常</text>
+				</view>
+			</uni-card>
+			<uni-card title="检查补充说明">
+				<view class="item-text-line">
+					<text class="item-text-block">{{data.groundSiteCheckRemark}}</text>
+				</view>
+			</uni-card>
+		</uni-section>
+		<uni-section title="其他设备检查信息">
+			<template v-slot:decoration>
+				<view class="decoration"></view>
+			</template>
+			<uni-card title="已选检查项">
+				<view class="item-text-line">
+					<text class="item-title select-text">{{getOthersEquipmentCheckItems}}</text>
+				</view>
+			</uni-card>
+			<uni-card title="拍摄照片">
+				<view v-if="data.othersEquipmentCheckPhotos && data.othersEquipmentCheckPhotos.length>0"
+					class="view-flex-cc">
+					<image v-for="(item, index) in data.othersEquipmentCheckPhotos" :key="index" class="cover-image"
+						mode="widthFix" style="width: 100%;" :src="toOss(item)">
+					</image>
+				</view>
+			</uni-card>
+			<uni-card title="巡检结果">
+				<view class="item-text-line">
+					<text v-if="data.otherEquipmentCheckResult==0" class="item-title error-text">异常</text>
+					<text v-else class="item-title normally-text">正常</text>
+				</view>
+			</uni-card>
+			<uni-card title="其他设备检查补充说明">
+				<view class="item-text-line">
+					<text class="item-text-block">{{data.othersEquipmentCheckRemark}}</text>
+				</view>
+			</uni-card>
+		</uni-section>
+		<uni-section title="设备更换信息">
+			<template v-slot:decoration>
+				<view class="decoration"></view>
+			</template>
+			<view style="min-height: 50px;">
+				<uni-card v-if="data.equipmentsReplaceItems.items[0].checked" title="更换RTU">
+					<view class="item-text-line">
+						<text class="item-text-block">{{data.rtuModelRemark}}</text>
+					</view>
+				</uni-card>
+				<uni-card title="RTU更换照片">
+					<view v-if="data.rtuReplacePhotos && data.rtuReplacePhotos.length>0" class="view-flex-cc">
+						<image v-for="(item, index) in data.rtuReplacePhotos" :key="index" class="cover-image"
+							mode="widthFix" style="width: 100%;" :src="toOss(item)">
+						</image>
+					</view>
+				</uni-card>
+
+				<uni-card v-if="data.equipmentsReplaceItems.items[1].checked" title="更换雨量计">
+					<view class="item-text-line">
+						<text class="item-text-block">{{data.rainSensorModelRemark}}</text>
+					</view>
+				</uni-card>
+				<uni-card title="雨量计更换照片">
+					<view v-if="data.rainSensorReplacePhotos&&data.rainSensorReplacePhotos.length>0"
+						class="view-flex-cc">
+						<image v-for="(item, index) in data.rainSensorReplacePhotos" :key="index" class="cover-image"
+							mode="widthFix" style="width: 100%;" :src="toOss(item)">
+						</image>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItems.items[2].checked" title="更换水位计">
+					<view class="item-text-line">
+						<text class="item-text-block">{{data.waterSensorModelRemark}}</text>
+					</view>
+				</uni-card>
+				<uni-card title="水位计更换照片">
+					<view v-if="data.waterSensorReplacePhotos &&data.waterSensorReplacePhotos.length>0"
+						class="view-flex-cc">
+						<image v-for="(item, index) in data.waterSensorReplacePhotos" :key="index" class="cover-image"
+							mode="widthFix" style="width: 100%;" :src="toOss(item)">
+						</image>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItems.items[3].checked" title="更换墒情计">
+					<view class="item-text-line">
+						<text class="item-text-block">{{data.groundSensorModelRemark}}</text>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.groundSensorReplacePhotos&&data.groundSensorReplacePhotos.length>0"
+					title="墒情计更换照片">
+					<view class="view-flex-cc">
+						<image v-for="(item, index) in data.groundSensorReplacePhotos" :key="index" class="cover-image"
+							mode="widthFix" style="width: 100%;" :src="toOss(item)">
+						</image>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItems.items[4].checked" title="更换蓄电池">
+					<view class="item-text-line">
+						<text class="item-text-block">{{data.batteryModelRemark}}</text>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.batteryReplacePhotos&&data.batteryReplacePhotos.length>0" title="蓄电池更换照片">
+					<view class="view-flex-cc">
+						<image v-for="(item, index) in data.batteryReplacePhotos" :key="index" class="cover-image"
+							mode="widthFix" style="width: 100%;" :src="toOss(item)">
+						</image>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItems.items[5].checked" title="更换太阳能板">
+					<view class="item-text-line">
+						<text class="item-text-block">{{data.sunPowerModelRemark}}</text>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.sunPowerReplacePhotos&&data.sunPowerReplacePhotos.length>0" title="太阳能板更换照片">
+					<view class="view-flex-cc">
+						<image v-for="(item, index) in data.sunPowerReplacePhotos" :key="index" class="cover-image"
+							mode="widthFix" style="width: 100%;" :src="toOss(item)">
+						</image>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItems.items[6].checked" title="更换充电控制器">
+					<view class="item-text-line">
+						<text class="item-text-block">{{data.batteryControlModelRemark}}</text>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.batteryControllerReplacePhotos&&data.batteryControllerReplacePhotos.length>0"
+					title="充电控制器更换照片">
+					<view class="view-flex-cc">
+						<image v-for="(item, index) in data.batteryControllerReplacePhotos" :key="index"
+							class="cover-image" mode="widthFix" style="width: 100%;" :src="toOss(item)">
+						</image>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.equipmentsReplaceItems.items[7].checked" title="更换其他设备">
+					<view class="item-text-line">
+						<text class="item-text-block">{{data.otherEquipmentModelRemark}}</text>
+					</view>
+				</uni-card>
+				<uni-card v-if="data.otherEquipmentReplacePhotos&&data.otherEquipmentReplacePhotos.length>0"
+					title="其他设备更换照片">
+					<view class="view-flex-cc">
+						<image v-for="(item, index) in data.otherEquipmentReplacePhotos" :key="index"
+							class="cover-image" mode="widthFix" style="width: 100%;" :src="toOss(item)">
+						</image>
+					</view>
+				</uni-card>
+			</view>
+		</uni-section>
+		<uni-section title="遗留问题补充说明">
+			<template v-slot:decoration>
+				<view class="decoration"></view>
+			</template>
+			<view class="item-text-line"
+				style="padding-left: 10px;padding-right: 10px;padding-top: 10px;min-height: 50px;">
+				<text class="item-text-block">{{data.inspectionRemainProblemsRemark}}</text>
+			</view>
+		</uni-section>
+		<uni-section title="巡检工作留存照片">
+			<template v-slot:decoration>
+				<view class="decoration"></view>
+			</template>
+			<view style="min-height: 50px;">
+				<uni-card v-if="data.inspectionWorkPhotos&&data.inspectionWorkPhotos.length>0" title="拍摄照片">
+					<view class="view-flex-cc">
+						<image v-for="(item, index) in data.inspectionWorkPhotos" :key="index" class="cover-image"
+							mode="widthFix" style="width: 100%;" :src="toOss(item)">
+						</image>
+					</view>
+				</uni-card>
+			</view>
+		</uni-section>
+	</view>
+
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+	import {
+		oss
+	} from '@/common/setting';
+	export default {
+		components: {
+
+		},
+		props: {
+			inspectionId: {
+				type: String,
+				required: true,
+			},
+		},
+		data() {
+			return {
+				query: {},
+				title: '巡检填报详情',
+				data: {
+					rtuCode: '',
+					rtuName: '',
+					isRain: false,
+					isRiver: false,
+					isRes: false,
+					isGround: false,
+					isCamera: false,
+					lng: '',
+					lat: '',
+					adCity: '',
+					adDist: '',
+					locationDesc: '',
+					//站点状态检查项
+					siteCheckStatus: {
+						items: [{
+							'id': '0',
+							'dictValue': '水毁'
+						}, {
+							'id': '1',
+							'dictValue': '丢失'
+						}, {
+							'id': '2',
+							'dictValue': '损坏'
+						}, {
+							'id': '3',
+							'dictValue': '正常'
+						}],
+						current: 3
+					},
+					siteCheckPhotos: [],
+					siteCheckRemark: '',
+					//雨量站检查数据
+					rainSiteCheckItems: {
+						items: [{
+							'id': '0',
+							'checked': false,
+							'dictValue': '故障排查'
+						}, {
+							'id': '1',
+							'checked': false,
+							'dictValue': '清理堵塞'
+						}, {
+							'id': '2',
+							'checked': false,
+							'dictValue': '雨量计校核'
+						}],
+						current: 0
+					},
+					rainSiteCheckPhotos: [],
+					rainSiteCheckResult: 1,
+					rainSiteCheckRemark: '',
+					//水位站检查数据
+					waterSiteCheckItems: {
+						items: [{
+							'id': '0',
+							'checked': false,
+							'dictValue': '故障排查'
+						}, {
+							'id': '1',
+							'checked': false,
+							'dictValue': '水位计校核'
+						}],
+						current: 0
+					},
+					waterSiteCheckPhotos: [],
+					waterSiteCheckResult: 1,
+					waterSiteCheckRemark: '',
+					//墒情站检查数据
+					groundSiteCheckItems: {
+						items: [{
+							'id': '0',
+							'checked': false,
+							'dictValue': '故障排查'
+						}, {
+							'id': '1',
+							'checked': false,
+							'dictValue': '墒情计校核'
+						}],
+						current: 0
+					},
+					groundSiteCheckPhotos: [],
+					groundSiteCheckRemark: '',
+					groundSiteCheckResult: 1,
+					//其他设备检查
+					othersEquipmentCheckItems: {
+						items: [{
+							'id': '0',
+							'checked': false,
+							'dictValue': '设备接地检测'
+						}, {
+							'id': '1',
+							'checked': false,
+							'dictValue': '电源电压检测'
+						}, {
+							'id': '2',
+							'checked': false,
+							'dictValue': '太阳能板检查'
+						}, {
+							'id': '3',
+							'checked': false,
+							'dictValue': '蓄电池检查'
+						}, {
+							'id': '4',
+							'checked': false,
+							'dictValue': '网络通信检查'
+						}],
+						current: 0
+					},
+					othersEquipmentCheckPhotos: [],
+					othersEquipmentCheckRemark: '',
+					otherEquipmentCheckResult: 1,
+					//设备替换
+					equipmentsReplaceItems: {
+						items: [{
+							'id': '0',
+							'checked': false,
+							'dictValue': 'RTU'
+						}, {
+							'id': '1',
+							'checked': false,
+							'dictValue': '雨量计'
+						}, {
+							'id': '2',
+							'checked': false,
+							'dictValue': '水位计'
+						}, {
+							'id': '3',
+							'checked': false,
+							'dictValue': '墒情计'
+						}, {
+							'id': '4',
+							'checked': false,
+							'dictValue': '蓄电池'
+						}, {
+							'id': '5',
+							'checked': false,
+							'dictValue': '太阳能板'
+						}, {
+							'id': '6',
+							'checked': false,
+							'dictValue': '充电控制器'
+						}, {
+							'id': '7',
+							'checked': false,
+							'dictValue': '其他'
+						}],
+						current: 0
+					},
+					rtuModelRemark: '',
+					rtuReplacePhotos: [],
+					rainSensorModelRemark: '',
+					rainSensorReplacePhotos: [],
+					waterSensorModelRemark: '',
+					waterSensorReplacePhotos: [],
+					groundSensorModelRemark: '',
+					groundSensorReplacePhotos: [],
+					batteryModelRemark: '',
+					batteryReplacePhotos: [],
+					sunPowerModelRemark: '',
+					sunPowerReplacePhotos: [],
+					batteryControlModelRemark: '',
+					batteryControlReplacePhotos: [],
+					otherEquipmentModelRemark: '',
+					otherEquipmentReplacePhotos: [],
+					//巡检遗留问题描述
+					inspectionRemainProblemsRemark: '',
+					//工作留存数据
+					inspectionWorkPhotos: [],
+
+				},
+			}
+		},
+		onLoad(options) {
+			console.log("ddddd onLoad")
+		},
+		onShow() {
+			console.log("ddd onShow")
+		},
+		created() {
+			console.log("dddd created")
+			console.log("id " + this.inspectionId)
+			let params = {};
+			params['id'] = this.inspectionId;
+			console.log("id " + this.inspectionId)
+			this.getDetail(params);
+		},
+		computed: {
+			getSiteKind() {
+				let htmltext = '';
+				if (this.data.isRain === 1) {
+					htmltext = htmltext + "雨量站";
+				}
+				if (this.data.isRiver == 1 || this.data.isRes == 1) {
+					if (htmltext.length > 0) {
+						htmltext = htmltext + ' / ';
+					}
+					htmltext = htmltext + '水位站';
+				}
+				if (this.data.isGround == 1) {
+					if (htmltext.length > 0) {
+						htmltext = htmltext + ' / ';
+					}
+					htmltext = htmltext + '墒情站';
+				}
+				if (this.data.isVideo == 1) {
+					if (htmltext.length > 0) {
+						htmltext = htmltext + ' / ';
+					}
+					htmltext = htmltext + '视频站';
+				}
+				return htmltext;
+			},
+			getAreaName() {
+				let htmltext = '';
+				if (this.data.adCity) {
+					htmltext = htmltext + this.data.adCity;
+				}
+				if (this.data.adDist) {
+					if (htmltext.length > 0) {
+						htmltext = htmltext + ' / ';
+					}
+					htmltext = htmltext + this.data.adDist;
+				}
+				return htmltext;
+			},
+			getSiteCheckStatus() {
+				return this.data.siteCheckStatus.items[this.data.siteCheckStatus.current].dictValue;
+			},
+			getRainSiteCheckItems() {
+				//console.log(JSON.stringify(this.data.rainSiteCheckItems))
+				let text = '';
+				for (let i = 0; i < this.data.rainSiteCheckItems.items.length; i++) {
+					if (this.data.rainSiteCheckItems.items[i].checked) {
+						if (text.length > 0) {
+							text = text + ' / ';
+						}
+						text = text + this.data.rainSiteCheckItems.items[i].dictValue;
+					}
+				}
+				return text;
+			},
+			getWaterSiteCheckItems() {
+				let text = '';
+				for (let i = 0; i < this.data.waterSiteCheckItems.items.length; i++) {
+					if (this.data.waterSiteCheckItems.items[i].checked) {
+						if (text.length > 0) {
+							text = text + ' / ';
+						}
+						text = text + this.data.waterSiteCheckItems.items[i].dictValue;
+					}
+				}
+				return text;
+			},
+			getGroundSiteCheckItems() {
+				let text = '';
+				for (let i = 0; i < this.data.groundSiteCheckItems.items.length; i++) {
+					if (this.data.groundSiteCheckItems.items[i].checked) {
+						if (text.length > 0) {
+							text = text + ' / ';
+						}
+						text = text + this.data.groundSiteCheckItems.items[i].dictValue;
+					}
+				}
+				return text;
+			},
+			getOthersEquipmentCheckItems() {
+				let text = '';
+				for (let i = 0; i < this.data.othersEquipmentCheckItems.items.length; i++) {
+					if (this.data.othersEquipmentCheckItems.items[i].checked) {
+						if (text.length > 0) {
+							text = text + ' / ';
+						}
+						text = text + this.data.othersEquipmentCheckItems.items[i].dictValue;
+					}
+				}
+				return text;
+			},
+		},
+		methods: {
+			toOss(path) {
+				return oss + path;
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			getDetail(params = {}) {
+				console.log(JSON.stringify(params))
+				let that = this;
+				this.query = {};
+				Object.assign(this.query, params);
+				console.log(JSON.stringify(this.query))
+				http.request({
+					url: '/galaxy-business/equipment/inspection/report/detail',
+					method: 'GET',
+					params: this.query
+				}).then(res => {
+					if (res.success) {
+						that.data.rtuName = res.data['rtuName'];
+						that.data.rtuCode = res.data['rtuCode'];
+						that.data.isRain = res.data['isRain'];
+						that.data.isRiver = res.data['isRiver'];
+						that.data.isRes = res.data['isRes'];
+						that.data.isGround = res.data['isGround'];
+						that.data.lng = res.data['lng'];
+						that.data.lat = res.data['lat'];
+						that.data.adCity = res.data['adCity'];
+						that.data.adDist = res.data['adDist'];
+						that.data.locationDesc = res.data['locationDesc'];
+						that.data.siteCheckStatus.current = Number(res.data['siteCheckItem']);
+						that.data.siteCheckRemark = res.data['siteCheckRemark'];
+						that.data.siteCheckPhotoCount = 0;
+						that.data.siteCheckPhotos = [];
+						let photos = res.data['siteCheckPhotos'];
+						if (null != photos && photos.length > 0) {
+							let photoList = photos.split(",");
+							that.data.siteCheckPhotos = photoList;
+							//that.data.siteCheckPhotoCount = photoList.length;
+						}
+						//雨量站检查
+						let items = res.data['rainSiteCheckItem'];
+						if (null != items && items.length > 0) {
+							let itemList = items.split(",");
+							that.data.rainSiteCheckItems.items[0].checked = (itemList[0] == 0) ? false : true;
+							that.data.rainSiteCheckItems.items[1].checked = (itemList[1] == 0) ? false : true;
+							that.data.rainSiteCheckItems.items[2].checked = (itemList[2] == 0) ? false : true;
+						}
+
+						that.data.rainSiteCheckResult = res.data['rainSiteCheckResult'];
+						//that.data.rainSiteCheckPhotoCount = 0;
+						that.data.rainSiteCheckPhotos = [];
+						photos = res.data['rainSiteCheckPhotos'];
+						if (null != photos && photos.length > 0) {
+							let photoList = photos.split(",");
+							that.data.rainSiteCheckPhotos = photoList;
+							//that.data.rainSiteCheckPhotoCount = photoList.length;
+						}
+						that.data.rainSiteCheckRemark = res.data['rainSiteCheckRemark'];
+						//水位站检查
+						items = res.data['waterSiteCheckItem'];
+						if (null != items && items.length > 0) {
+							let itemList = items.split(",");
+							that.data.waterSiteCheckItems.items[0].checked = (itemList[0] == 0) ? false : true;
+							that.data.waterSiteCheckItems.items[1].checked = (itemList[1] == 0) ? false : true;
+						}
+						//that.data.waterSiteCheckPhotoCount = 0;
+						that.data.waterSiteCheckPhotos = [];
+						photos = res.data['waterSiteCheckPhotos'];
+						if (null != photos && photos.length > 0) {
+							let photoList = photos.split(",");
+							that.data.waterSiteCheckPhotos = photoList;
+							//that.data.waterSiteCheckPhotoCount = photoList.length;
+						}
+						that.data.waterSiteCheckRemark = res.data['waterSiteCheckRemark'];
+						that.data.waterSiteCheckResult = res.data['waterSiteCheckResult'];
+						items = res.data['groundSiteCheckItem'];
+						if (null != items && items.length > 0) {
+							let itemList = items.split(",");
+							that.data.groundSiteCheckItems.items[0].checked = itemList[0] == 0 ? false : true;
+							that.data.groundSiteCheckItems.items[1].checked = itemList[1] == 0 ? false : true;
+						}
+						//that.data.groundSiteCheckPhotoCount = 0;
+						that.data.groundSiteCheckPhotos = [];
+						photos = res.data['groundSiteCheckPhotos'];
+						if (null != photos && photos.length > 0) {
+							let photoList = photos.split(",");
+							that.data.groundSiteCheckPhotos = photoList;
+							//that.data.groundSiteCheckPhotoCount = photoList.length;
+						}
+						that.data.groundSiteCheckRemark = res.data['groundSiteCheckRemark'];
+						that.data.groundSiteCheckResult = res.data['groundSiteCheckResult'];
+						items = res.data['otherEquipmentCheckItem'];
+						if (null != items && items.length > 0) {
+							let itemList = items.split(",");
+							that.data.othersEquipmentCheckItems.items[0].checked = itemList[0] == 0 ? false : true;
+							that.data.othersEquipmentCheckItems.items[1].checked = itemList[1] == 0 ? false : true;
+							that.data.othersEquipmentCheckItems.items[2].checked = itemList[2] == 0 ? false : true;
+							that.data.othersEquipmentCheckItems.items[3].checked = itemList[3] == 0 ? false : true;
+							that.data.othersEquipmentCheckItems.items[4].checked = itemList[4] == 0 ? false : true;
+
+						}
+						//that.data.othersEquipmentCheckPhotoCount = 0;
+						that.data.othersEquipmentCheckPhotos = [];
+						photos = res.data['otherEquipmentCheckPhotos'];
+						if (null != photos && photos.length > 0) {
+							let photoList = photos.split(",");
+							that.data.othersEquipmentCheckPhotos = photoList;
+							//that.data.othersEquipmentCheckPhotoCount = photoList.length;
+						}
+						that.data.othersEquipmentCheckRemark = res.data['otherEquipmentCheckRemark'];
+						that.data.otherEquipmentCheckResult = res.data['otherEquipmentCheckResult'];
+						that.data.equipmentsReplaceItems.items[0].checked = res.data['rtuReplace'] == 0 ? false :
+							true;
+						that.data.equipmentsReplaceItems.items[1].checked = res.data['rainSensorReplace'] == 0 ?
+							false :
+							true;
+						that.data.equipmentsReplaceItems.items[2].checked = res.data['waterSensorReplace'] == 0 ?
+							false :
+							true;
+						that.data.equipmentsReplaceItems.items[3].checked = res.data['groundSensorReplace'] == 0 ?
+							false : true;
+						that.data.equipmentsReplaceItems.items[4].checked = res.data['batteryReplace'] == 0 ?
+							false :
+							true;
+						that.data.equipmentsReplaceItems.items[5].checked = res.data['sunPowerReplace'] == 0 ?
+							false :
+							true;
+						that.data.equipmentsReplaceItems.items[6].checked = res.data['batteryControllerReplace'] ==
+							0 ?
+							false : true;
+						that.data.equipmentsReplaceItems.items[7].checked = res.data['otherEquipmentReplace'] ==
+							0 ?
+							false : true;
+
+						that.data.rtuModelRemark = res.data['rtuModelRemark'];
+						that.data.rtuReplacePhotos = [];
+						photos = res.data['rtuReplacePhotos'];
+						if (null != photos && photos.length > 0) {
+							let photoList = photos.split(",");
+							that.data.rtuReplacePhotos = photoList;
+							//that.data.inspectionWorkPhotoCount = photoList.length;
+						}
+						that.data.inspectionRemainProblemsRemark = res.data['remainQuestion'];
+						that.data.rtuReplacePhotos = [];
+						photos = res.data['rtuReplacePhotos'];
+						if (null != photos && photos.length > 0) {
+							let photoList = photos.split(",");
+							that.data.rtuReplacePhotos = photoList;
+							//that.data.inspectionWorkPhotoCount = photoList.length;
+						}
+						that.data.rainSensorModelRemark = res.data['rainSensorModelRemark'];
+						that.data.rainSensorReplacePhotos = [];
+						photos = res.data['rainSensorReplacePhotos'];
+						if (null != photos && photos.length > 0) {
+							let photoList = photos.split(",");
+							that.data.rainSensorReplacePhotos = photoList;
+							//that.data.inspectionWorkPhotoCount = photoList.length;
+						}
+						that.data.waterSensorModelRemark = res.data['waterSensorModelRemark'];
+						that.data.waterSensorReplacePhotos = [];
+						photos = res.data['waterSensorReplacePhotos'];
+						if (null != photos && photos.length > 0) {
+							let photoList = photos.split(",");
+							that.data.waterSensorReplacePhotos = photoList;
+							//that.data.inspectionWorkPhotoCount = photoList.length;
+						}
+						that.data.groundSensorModelRemark = res.data['groundSensorModelRemark'];
+						that.data.groundSensorReplacePhotos = [];
+						photos = res.data['groundSensorReplacePhotos'];
+						if (null != photos && photos.length > 0) {
+							let photoList = photos.split(",");
+							that.data.groundSensorReplacePhotos = photoList;
+							//that.data.inspectionWorkPhotoCount = photoList.length;
+						}
+						that.data.batteryModelRemark = res.data['batteryModelRemark'];
+						that.data.batteryReplacePhotos = [];
+						photos = res.data['batteryReplacePhotos'];
+						if (null != photos && photos.length > 0) {
+							let photoList = photos.split(",");
+							that.data.batteryReplacePhotos = photoList;
+							//that.data.inspectionWorkPhotoCount = photoList.length;
+						}
+						that.data.sunPowerModelRemark = res.data['sunPowerModelRemark'];
+						that.data.sunPowerReplacePhotos = [];
+						photos = res.data['sunPowerReplacePhotos'];
+						if (null != photos && photos.length > 0) {
+							let photoList = photos.split(",");
+							that.data.sunPowerReplacePhotos = photoList;
+							//that.data.inspectionWorkPhotoCount = photoList.length;
+						}
+						that.data.batteryControlModelRemark = res.data['batteryControllerModelRemark'];
+						that.data.batteryControllerReplacePhotos = [];
+						photos = res.data['batteryControllerReplacePhotos'];
+						if (null != photos && photos.length > 0) {
+							let photoList = photos.split(",");
+							that.data.batteryControllerReplacePhotos = photoList;
+							//that.data.inspectionWorkPhotoCount = photoList.length;
+						}
+						that.data.otherEquipmentModelRemark = res.data['otherEquipmentModelRemark'];
+						that.data.otherEquipmentReplacePhotos = [];
+						photos = res.data['otherEquipmentReplacePhotos'];
+						if (null != photos && photos.length > 0) {
+							let photoList = photos.split(",");
+							that.data.otherEquipmentReplacePhotos = photoList;
+							//that.data.inspectionWorkPhotoCount = photoList.length;
+						}
+						//that.data.inspectionWorkPhotoCount = 0;
+						that.data.inspectionWorkPhotos = [];
+						photos = res.data['inspectionWorkPhotos'];
+						if (null != photos && photos.length > 0) {
+							let photoList = photos.split(",");
+							that.data.inspectionWorkPhotos = photoList;
+							//that.data.inspectionWorkPhotoCount = photoList.length;
+						}
+						that.data.inspectionRemainProblemsRemark = res.data['remainQuestion'];
+
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+
+	.uni-body {
+		font-size: 0.7rem;
+	}
+
+	.decoration {
+		width: 6px;
+		height: 6px;
+		margin-right: 4px;
+		border-radius: 50%;
+		background-color: cadetblue;
+	}
+
+	.view-flex-rs {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+		align-items: center;
+	}
+
+	.view-flex-rs-flex-wrap {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+		flex-wrap: wrap;
+	}
+
+	.view-flex-rc {
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.view-flex-re {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-end;
+		align-items: center;
+	}
+
+	.view-flex-cs {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-start;
+		align-items: center;
+	}
+
+	.view-flex-cc {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.view-flex-ce {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-end;
+		align-items: center;
+	}
+
+	.cell-hover-class {
+		background-color: rgb(235, 237, 238);
+	}
+
+	.view-flex-ce {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-end;
+	}
+
+	.line-body {
+		padding-left: 10px;
+		padding-right: 10px;
+	}
+
+	.item-text-line {
+		width: 100%;
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+
+		.item-title {
+			font-size: 0.7rem;
+			font-weight: bold;
+		}
+
+		.item-text {
+			overflow: hidden;
+			margin-left: 5px;
+			font-size: 0.7rem;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+		}
+
+		.item-text-block {
+			margin-left: 5px;
+			font-size: 0.7rem;
+			word-wrap: break-word;
+			word-break: normal;
+		}
+
+		.error-text {
+			color: #FF0000;
+		}
+
+		.normally-text {
+			color: darkgreen;
+		}
+
+		.select-text {
+			color: royalblue;
+		}
+	}
+
+	.required-star {
+		color: #FF0000;
+		font-size: 15px;
+		width: 20px;
+		text-align: center;
+		padding-left: 0px;
+		padding-right: 2px;
+	}
+
+	.item-title {
+		color: #909399;
+		font-size: 15px;
+	}
+
+	.mline-text {
+		padding-left: 2px;
+		width: 100%;
+		/* background-color:#909399; */
+		height: 70px;
+		border: 1px solid #FF5A5F;
+		border-radius: 5px;
+	}
+
+
+	.img-container {
+		margin-bottom: 0px;
+		width: 100px;
+		height: 100px;
+
+		.note-image-box {
+			margin-top: 0px;
+			display: flex;
+			flex-wrap: wrap;
+			padding: 10px;
+
+			.note-image-item {
+				position: relative;
+				width: 100%;
+				height: 0;
+				padding-top: 100%;
+				box-sizing: border-box;
+				// background-color: #18B566;
+
+				.close-icon {
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					position: absolute;
+					right: 0px;
+					top: 0px;
+					width: 22px;
+					height: 22px;
+					border-radius: 50%;
+					background-color: #d5d5d5;
+					z-index: 2;
+				}
+
+				.image-box {
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					position: absolute;
+					top: 0px;
+					right: 0px;
+					border: 0px;
+					left: 0px;
+					border: 1px #eee solid;
+					border-radius: 5px;
+					overflow: hidden;
+					width: 99%;
+					height: 99%;
+
+				}
+
+
+			}
+		}
+	}
+
+	.input-body {
+		background-color: #fff;
+		padding: 10px;
+	}
+</style>

+ 477 - 0
pages/equipment-inspection/inspectionreportlist.vue

@@ -0,0 +1,477 @@
+<!--
+ * @Title: 
+ * @Description: 巡检上报列表
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-section title="查询" titleFontSize="0.8rem" type="line">
+				<view class="search-block">
+					<view class="adcd-adnm">
+						<uni-data-picker placeholder="请选择地区" popup-title="请选择所在地区" :localdata="regionTree"
+							v-model="selectedTreeNode" @change="onTreeChange" @nodeclick="onTreeNodeClick"
+							@popupopened="onTreePopupOpened" @popupclosed="onTreePopupClosed" :clear-icon="false">
+						</uni-data-picker>
+					</view>
+					<view class="rtu-code">
+						<uni-easyinput :styles="inputStyles" @input="searchRtuCodeValClear" prefixIcon="search"
+							v-model="searchRtuCodeVal" placeholder="请输入测站编码">
+						</uni-easyinput>
+					</view>
+					<view class="rtu-name">
+						<uni-easyinput :styles="inputStyles" @input="searchRtuNameValClear" prefixIcon="search"
+							v-model="searchRtuNameVal" placeholder="请输入测站名称">
+						</uni-easyinput>
+					</view>
+					<view class="submit-btn">
+						<button type="default" @click="search">查 询</button>
+					</view>
+				</view>
+			</uni-section>
+			<view style="margin-top: 5px;padding-left: 10px;padding-right: 10px;margin-bottom: 5px;">
+				<view class="line">
+					<view class="lineText">
+						<text class="inspectionCount">当前汛期: </text>
+						<text v-if="countInfo.rainKind==1" class="content">汛前巡检</text>
+						<text v-else-if="countInfo.rainKind==2" class="content">汛中(一)巡检</text>
+						<text v-else-if="countInfo.rainKind==3" class="content">汛中(二)巡检</text>
+						<text v-else class="content">--</text>
+					</view>
+					<view class="lineText">
+						<text class="beforeRainInspectionCount">巡检设备总数量: </text>
+						<text class="content">{{ countInfo.rtus }}</text>
+					</view>
+
+					<view class="lineText">
+						<text class="rainSencodInspectionCount">汛前已巡检数量: </text>
+						<text class="content">{{ countInfo.beforeRainInspectionCount }}</text>
+					</view>
+					<view class="lineText">
+						<text class="rainSencodInspectionCount">汛中(一)已巡检数量: </text>
+						<text class="content">{{ countInfo.firstRainInspectionCount }}</text>
+					</view>
+					<view class="lineText">
+						<text class="rainSencodInspectionCount">汛中(二)已巡检数量: </text>
+						<text class="content">{{ countInfo.sencodRainInspectionCount }}</text>
+					</view>
+					<view style="margin-top: 5px;">
+						<uni-data-checkbox v-model="countOption" :localdata="countItems" @change="countOptionChange">
+						</uni-data-checkbox>
+					</view>
+				</view>
+			</view>
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+									src="/static/images/list/inspection_item.png" mode="widthFix">
+								</image>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="compose" size="18" color="lightblue" />
+								<text class="item-text-lable">汛前填报:</text>
+								<view v-if="item.beforeRainSeasonStatus ==1">
+									<text class="item-text-content" style="color:dodgerblue;">已填报</text>
+									<text class="item-text-content" style="color:gray;">/</text>
+									<text class="item-text-content"
+										style="color:gray;">{{item.beforeRainSeasonReportTime}}</text>
+								</view>
+								<text v-else class="item-text-content" style="color:darkorange;">未填报</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="compose" size="18" color="lightblue" />
+								<text class="item-text-lable">汛中(一)填报:</text>
+								<view v-if="item.rainSeasonFirstStatus ==1">
+									<text class="item-text-content" style="color:dodgerblue;">已填报</text>
+									<text class="item-text-content" style="color:gray;">/</text>
+									<text class="item-text-content"
+										style="color:gray;">{{item.rainSeasonFirstReportTime}}</text>
+								</view>
+								<text v-else class="item-text-content" style="color:darkorange;">未填报</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="compose" size="18" color="lightblue" />
+								<text class="item-text-lable">汛中(二)填报:</text>
+								<view v-if="item.rainSeasonSecondStatus ==1">
+									<text class="item-text-content" style="color:dodgerblue;">已填报</text>
+									<text class="item-text-content" style="color:gray;">/</text>
+									<text class="item-text-content"
+										style="color:gray;">{{item.rainSeasonSecondReportTime}}</text>
+								</view>
+								<text v-else class="item-text-content" style="color:darkorange;">未填报</text>
+							</view>
+							<view class="item-button-group">
+								<view v-if="item.beforeRainSeasonStatus ==1" class="item-button" style="width: 120px;"
+									@click="onBeforeRainDetailViewClick(item.beforeRainSeasonReportId)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">汛前详情</text>
+									</view>
+								</view>
+								<view v-else class="item-button-disabled" style="width: 120px;">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="gray" />
+										<text class="button-text">汛前详情</text>
+									</view>
+								</view>
+								<view v-if="item.rainSeasonFirstStatus ==1" class="item-button" style="width: 120px;"
+									@click="onRainFirstDetailViewClick(item.rainSeasonFirstReportId)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">汛中(一)详情</text>
+									</view>
+								</view>
+								<view v-else class="item-button-disabled" style="width: 120px;">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="gray" />
+										<text class="button-text">汛中(一)详情</text>
+									</view>
+								</view>
+								<view v-if="item.rainSeasonSecondStatus ==1" class="item-button" style="width: 120px;"
+									@click="onRainSencodDetailViewClick(item.rainSeasonSecondReportId)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">汛中(二)详情</text>
+									</view>
+								</view>
+								<view v-else class="item-button-disabled" style="width: 120px;">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="gray" />
+										<text class="button-text">汛中(二)详情</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :page-size="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+
+	export default {
+		components: {
+
+		},
+		onLoad(option) {
+			if (this.userInfo.role_name === role['admin']) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role['orgAdmin']) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role['companyAdmin']) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role['companyServciePerson']) {
+				this.permission.companyServciePerson = true;
+			}
+			this.getRegionTree();
+		},
+		data() {
+			return {
+				title: '设备巡检填报信息',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				countItems: [{
+					'value': 0,
+					'text': '全部'
+				}, {
+					'value': 1,
+					'text': '汛前巡检'
+				}, {
+					'value': 2,
+					'text': '汛中(一)巡检'
+				}, {
+					'value': 3,
+					'text': '汛中(二)巡检'
+				}],
+				countOption: 0,
+				countInfo: {
+					rainKind: 0,
+				},
+				list: [],
+				pageSize: 10,
+				// 当前页
+				pageCurrent: 1,
+				// 数据总量
+				total: 0,
+				regionTree: [],
+				regionCode: '',
+				selectedTreeNode: '',
+				searchRtuNameVal: '',
+				searchRtuCodeVal: '',
+				query: {},
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				}
+			}
+		},
+		computed: {},
+		onShow() {},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			onTreeNodeClick(node) {
+				console.log(JSON.stringify(node))
+			},
+			onTreePopupOpened(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreePopupClosed(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreeChange(e) {
+				console.log(JSON.stringify(e))
+				let nodes = e.detail.value;
+				if (nodes.length > 0) {
+					let node = nodes[nodes.length - 1];
+					this.regionCode = node.value;
+					this.query = {};
+					this.query['adCode'] = this.regionCode;
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+					this.getCountInfo(this.regionCode);
+				} else {
+					this.regionCode = '';
+					this.query = {};
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+					this.getCountInfo(this.regionCode);
+				}
+			},
+			onBeforeRainDetailViewClick(id) {
+				console.log("onDetailViewClick " + id)
+				var url = '/pages/equipment-inspection/inspectionreportview?type=1&id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onRainFirstDetailViewClick(id) {
+				console.log("onDetailViewClick " + id)
+				var url = '/pages/equipment-inspection/inspectionreportview?type=2&id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onRainSencodDetailViewClick(id) {
+				console.log("onDetailViewClick " + id)
+				var url = '/pages/equipment-inspection/inspectionreportview?type=3&id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			//录入查询
+			search() {
+				this.pageCurrent = 1;
+				let params = {};
+				if (this.searchRtuCodeVal.length > 0) {
+					params['rtuCode'] = this.searchRtuCodeVal;
+				}
+				if (this.searchRtuNameVal.length > 0) {
+					params['rtuName'] = this.searchRtuNameVal;
+				}
+				this.getPage(params);
+			},
+			searchRtuNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuNameVal = '';
+					if (this.searchRtuNameVal.length == 0) {
+						let params = {};
+						if (this.searchRtuCodeVal.length > 0) {
+							params['rtuCode'] = this.searchRtuCodeVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			searchRtuCodeValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuCodeVal = '';
+					if (this.searchRtuCodeVal.length == 0) {
+						let params = {};
+						if (this.searchRtuNameVal.length > 0) {
+							params['rtuName'] = this.searchRtuNameVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			countOptionChange: function(evt) {
+				//console.log("sensor" + JSON.stringify(evt))
+				let params = {};
+				// if (this.countOption == 0) {
+
+				// } else if (this.countOption == 1) {
+				// 	params['rainSeasonKind'] = 1;
+				// } else if (this.countOption == 2) {
+				// 	params['rainSeasonKind'] = 2;
+				// } else if (this.countOption == 3) {
+				// 	params['rainSeasonKind'] = 3;
+				// }
+				this.pageCurrent=1;
+				this.getPage(params);
+			},
+			getCountInfo(adCode) {
+				let that = this;
+				http.request({
+					url: '/galaxy-business/equipment/inspection/count',
+					method: 'GET',
+					data: {
+						adCode
+					}
+				}).then(res => {
+					that.countInfo = res.data;
+				})
+			},
+			getRegionTree() {
+				var that = this;
+				http.request({
+					url: '/galaxy-business/baseinfo/region/tree',
+					method: 'GET',
+				}).then(res => {
+					if (res.data != null) {
+						that.regionTree = res.data;
+						that.selectedTreeNode = that.regionTree[0].value;
+						that.regionCode = that.regionTree[0].value;
+						that.query = {};
+						that.query['adCode'] = that.regionCode;
+						//that.orgId = that.projectTree[0].orgId;
+						//that.projectId = that.projectTree[0].projectId;
+						that.getPage();
+						that.getCountInfo(that.regionCode);
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			getPage(params = {}) {
+				let that = this;
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				if (this.countOption == 0) {
+				
+				} else if (this.countOption == 1) {
+					params['rainSeasonKind'] = 1;
+				} else if (this.countOption == 2) {
+					params['rainSeasonKind'] = 2;
+				} else if (this.countOption == 3) {
+					params['rainSeasonKind'] = 3;
+				}
+				let postData = Object.assign(params, this.query);
+				http.request({
+					url: '/galaxy-business/equipment/inspection/rain/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data != null) {
+						if (res.data.records != null) {
+							that.list = res.data.records;
+						}
+						this.total = res.data.total;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.line {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-start;
+	}
+
+	.line .lineText {
+		margin-left: 10px;
+		margin-right: 0px;
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+	}
+
+	.line .lineText .inspectionCount {
+		color: dodgerblue;
+		font-size: 0.7rem;
+	}
+
+	.line .lineText .content {
+		margin-left: 10px;
+		color: gray;
+		font-size: 0.7rem;
+	}
+
+	.line .lineText .beforeRainInspectionCount {
+		color: dodgerblue;
+		font-size: 0.7rem;
+	}
+
+	.line .lineText .rainFirstInspectionCount {
+		color: dodgerblue;
+		font-size: 0.7rem;
+	}
+
+	.line .lineText .rainSencodInspectionCount {
+		color: dodgerblue;
+		font-size: 0.7rem;
+	}
+</style>

+ 146 - 0
pages/equipment-inspection/inspectionreportview.vue

@@ -0,0 +1,146 @@
+<!--
+ * @Title: 
+ * @Description: 巡检填报信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<inspectionreportdetail v-if="isShow"  ref="inspectionreportdetail" :inspectionId="id">
+			</inspectionreportdetail>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import inspectionreportdetail from '@/pages/equipment-inspection/inspectionreportdetail.vue'
+	export default {
+		components: {
+		
+			inspectionreportdetail
+		},
+		onLoad(options) {
+			this.id = options.id;
+			console.log("vvvvvvvv " + this.id);
+			this.inspectionreportRainType = options.type;
+			if (this.inspectionreportRainType == 1) {
+				this.title = '汛前巡检填报详情';
+			} else if (this.inspectionreportRainType == 2) {
+				this.title = '汛中(一)巡检填报详情';
+			} else if (this.inspectionreportRainType == 3) {
+				this.title = '汛中(二)巡检填报详情';
+			}
+		    
+		},
+		data() {
+			return {
+				isShow:false,
+				id: '',
+				inspectionreportRainType: 0,
+				// items: ['汛前巡检', '汛中(一)巡检', '汛中(二)巡检'],
+				// current: 0,
+				// inspectionReportStatus: {
+				// 	beforeRainSeasonReportId: '',
+				// 	rainSeasonFirstReportId: '',
+				// 	rainSeasonSecondReportId: '',
+				// 	beforeRainSeasonStatus: 0,
+				// 	rainSeasonFirstStatus: 0,
+				// 	rainSeasonSecondStatus: 0,
+				// },
+				query: {},
+				title: '巡检填报详情',
+			}
+		},
+		computed: {},
+		onShow() {
+			console.log("vvvvvvvvvv onShow")
+			this.isShow=true;
+		},
+		created() {
+			console.log("vvvvvvvvvvvvvvvv created")
+
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			getInspectionReportStatus(params = {}) {
+				let that = this;
+				let postData = Object.assign(params, this.query);
+				//console.log(JSON.stringify(postData))
+				http.request({
+					url: '/galaxy-business/equipment/inspection/reportStatus',
+					method: 'GET',
+					data: postData
+				}).then(res => {
+					//console.log(JSON.stringify(res))
+					if (res != null && res.success) {
+						if (res.data != null) {
+							that.inspectionReportStatus = res.data;
+							if (that.inspectionReportStatus.rainSeasonSecondStatus == 1) {
+								that.current = 2;
+							} else if (that.inspectionReportStatus.rainSeasonFirstStatus == 1) {
+								that.current = 1;
+							} else if (that.inspectionReportStatus.beforeRainSeasonStatus == 1) {
+								that.current = 0;
+							}
+						}
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			onClickItem(e) {
+				if (this.current != e.currentIndex) {
+					this.current = e.currentIndex;
+				}
+			},
+		}
+	}
+</script>
+
+<style>
+
+</style>
+
+<style lang="scss" scoped>
+	.nav-title {
+		width: 100%;
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+
+		text {
+			color: white;
+			font-size: 1rem;
+		}
+	}
+
+	.container {
+		padding: 0 0 50rpx;
+		width: 100%;
+	}
+
+	.content {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		justify-content: flex-start;
+		flex-direction: column;
+		width: 100%;
+
+	}
+</style>

+ 159 - 0
pages/equipment-inspection/rtuinspectionreportview.vue

@@ -0,0 +1,159 @@
+<!--
+ * @Title: 
+ * @Description: 巡检填报信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-segmented-control :current="current" :values="items" @clickItem="onClickItem" styleType="text"
+				activeColor="#585b61"></uni-segmented-control>
+			<view class="content">
+				<view v-show="current === 0">
+					<inspectionreportdetail :inspectionId="inspectionReportStatus.beforeRainSeasonReportId"
+						v-if="inspectionReportStatus.beforeRainSeasonStatus==1">
+					</inspectionreportdetail>
+					<view v-else style="display: flex;flex-direction: row;justify-content: center;">
+						<text style="color: red;font-size: 0.7rem;margin-top: 20px;">汛前巡检暂未填报</text>
+					</view>
+				</view>
+				<view v-show="current === 1">
+					<inspectionreportdetail :inspectionId="inspectionReportStatus.rainSeasonFirstReportId"
+						v-if="inspectionReportStatus.rainSeasonFirstStatus==1">
+					</inspectionreportdetail>
+					<view v-else style="display: flex;flex-direction: row;justify-content: center;">
+						<text style="color: red;font-size: 0.7rem;margin-top: 20px;">汛中第一次巡检暂未填报</text>
+					</view>
+				</view>
+				<view v-show="current === 2">
+					<inspectionreportdetail :inspectionId="inspectionReportStatus.rainSeasonSecondReportId"
+						v-if="inspectionReportStatus.rainSeasonSecondStatus==1">
+					</inspectionreportdetail>
+					<view v-else style="display: flex;flex-direction: row;justify-content: center;">
+						<text style="color: red;font-size: 0.7rem;margin-top: 20px;">汛中第二次巡检暂未填报</text>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import inspectionreportdetail from '@/pages/equipment-inspection/inspectionreportdetail.vue'
+	export default {
+		components: {
+			inspectionreportdetail
+		},
+		onLoad(options) {
+			this.rtuCode = options.rtuCode;
+			this.query['rtuCode'] = this.rtuCode;
+			console.log("onLoad")
+			this.getInspectionReportStatus();
+		},
+		data() {
+			return {
+				rtuCode: '',
+				items: ['汛前巡检', '汛中(一)巡检', '汛中(二)巡检'],
+				current: -1,
+				inspectionReportStatus: {
+					beforeRainSeasonReportId: 0,
+					rainSeasonFirstReportId: 0,
+					rainSeasonSecondReportId: 0,
+					beforeRainSeasonStatus: 0,
+					rainSeasonFirstStatus: 0,
+					rainSeasonSecondStatus: 0,
+				},
+				query: {},
+				title: '测站巡检填报详情',
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+			console.log("onShow")
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			getInspectionReportStatus(params = {}) {
+				let that = this;
+				let postData = Object.assign(params, this.query);
+				console.log(JSON.stringify(postData))
+				http.request({
+					url: '/galaxy-business/equipment/inspection/rtu/reportStatus',
+					method: 'GET',
+					data: postData
+				}).then(res => {
+					//console.log(JSON.stringify(res))
+					if (res != null && res.success) {
+						if (res.data != null) {
+							that.inspectionReportStatus = res.data;
+							if (that.inspectionReportStatus.rainSeasonSecondStatus == 1) {
+								that.current = 2;
+							} else if (that.inspectionReportStatus.rainSeasonFirstStatus == 1) {
+								that.current = 1;
+							} else if (that.inspectionReportStatus.beforeRainSeasonStatus == 1) {
+								that.current = 0;
+							}
+						}
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			onClickItem(e) {
+				if (this.current != e.currentIndex) {
+					this.current = e.currentIndex;
+				}
+			},
+		}
+	}
+</script>
+
+<style>
+
+</style>
+
+<style lang="scss" scoped>
+	.nav-title {
+		width: 100%;
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+
+		text {
+			color: white;
+			font-size: 1rem;
+		}
+	}
+
+	.container {
+		padding: 0 0 50rpx;
+		width: 100%;
+	}
+
+	.content {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		justify-content: flex-start;
+		flex-direction: column;
+		width: 100%;
+
+	}
+</style>

+ 218 - 0
pages/equipment-inspection/servicepersonfinishedinspectionreportlist.vue

@@ -0,0 +1,218 @@
+<!--
+ * @Title: 
+ * @Description: 运维公司技术员已巡检上报列表
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+									src="/static/images/list/inspection_item.png" mode="widthFix">
+								</image>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="auth" size="18" color="lightblue" />
+								<text class="item-text-lable">填报人:</text>
+								<text v-if="rainSeasonKind ==1"
+									class="item-text-content">{{item.beforeRainSeasonReportUserName}}</text>
+								<text v-else-if="rainSeasonKind ==2"
+									class="item-text-content">{{item.rainSeasonFirstReportUserName}}</text>
+								<text v-else-if="rainSeasonKind ==3"
+									class="item-text-content">{{item.rainSeasonSecondReportUserName}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+								<text class="item-text-lable">填报时间:</text>
+								<text v-if="rainSeasonKind ==1"
+									class="item-text-content">{{item.beforeRainSeasonReportTime}}</text>
+								<text v-else-if="rainSeasonKind ==2"
+									class="item-text-content">{{item.rainSeasonFirstReportTime}}</text>
+								<text v-else-if="rainSeasonKind ==3"
+									class="item-text-content">{{item.rainSeasonSecondReportTime}}</text>
+							</view>
+							<view class="item-button-group">
+								<view v-if="rainSeasonKind ==1" class="item-button"
+									@click="onBeforeRainDetailViewClick(item.beforeRainSeasonReportId)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">巡检填报详情</text>
+									</view>
+								</view>
+								<view v-if="rainSeasonKind ==2" class="item-button"
+									@click="onRainFirstDetailViewClick(item.rainSeasonFirstReportId)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">巡检填报详情</text>
+									</view>
+								</view>
+								<view v-if="rainSeasonKind ==3" class="item-button"
+									@click="onRainSencodDetailViewClick(item.rainSeasonSecondReportId)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">巡检填报详情</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :page-size="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+
+	export default {
+		components: {
+		},
+		onLoad(option) {
+			if (this.userInfo.role_name === role['admin']) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role['orgAdmin']) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role['companyAdmin']) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role['companyServciePerson']) {
+				this.permission.companyServciePerson = true;
+			}
+			this.rainSeasonKind = option.rainSeasonKind;
+			this.query['servicePersonId'] = option.userId;
+			this.query['rainSeasonKind'] = option.rainSeasonKind;
+			console.log(JSON.stringify(this.query))
+			if (this.rainSeasonKind == 1) {
+				this.title = '汛前已巡检设备信息';
+			} else if (this.rainSeasonKind == 2) {
+				this.title = '汛中(一)已巡检设备信息';
+			} else if (this.rainSeasonKind == 3) {
+				this.title = '汛中(二)已巡检设备信息';
+			}
+			this.getPage();
+		},
+		data() {
+			return {
+				rainSeasonKind: 0,
+				title: '已巡检设备信息',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				list: [],
+				pageSize: 10,
+				// 当前页
+				pageCurrent: 1,
+				// 数据总量
+				total: 0,
+				query: {},
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				}
+			}
+		},
+		computed: {
+		},
+		onShow() {
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			onBeforeRainDetailViewClick(id) {
+				console.log("onDetailViewClick " + id)
+				var url = '/pages/equipment-inspection/inspectionreportview?type=1&id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onRainFirstDetailViewClick(id) {
+				console.log("onDetailViewClick " + id)
+				var url = '/pages/equipment-inspection/inspectionreportview?type=2&id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onRainSencodDetailViewClick(id) {
+				console.log("onDetailViewClick " + id)
+				var url = '/pages/equipment-inspection/inspectionreportview?type=3&id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			getPage(params = {}) {
+				let that = this;
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(this.query, params);
+				http.request({
+					url: '/galaxy-business/equipment/inspection/rain/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data != null) {
+						if (res.data.records != null) {
+							that.list = res.data.records;
+						}
+						this.total = res.data.total;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+
+</style>

+ 118 - 0
pages/equipment-inspection/todayinspectionreportlist.vue

@@ -0,0 +1,118 @@
+<!--
+ * @Title: 
+ * @Description: 当天设备巡检动态信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<image class="item-title-run-status-icon" style="box-shadow:0 0 2px 2px lightblue"
+									src="/static/images/list/inspection_item.png" mode="widthFix">
+								</image>
+								<text class="item-title">{{item.rtuName}}</text>
+								<text class="item-sub-title">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="compose" size="18" color="lightblue" />
+								<text class="item-text-lable">汛期:</text>
+								<text v-if="item.rainSeasonKind == 1" class="item-text-content">汛前巡检</text>
+								<text v-else-if="item.rainSeasonKind == 2" class="item-text-content">汛中第一次巡检</text>
+								<text v-else-if="item.rainSeasonKind == 3" class="item-text-content">汛中第二次巡检</text>
+								<text v-else class="item-text-content"></text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="auth" size="18" color="lightblue" />
+								<text class="item-text-lable">填报人:</text>
+								<text class="item-text-content">{{item.servicePersonName}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+								<text class="item-text-lable">填报时间:</text>
+								<text class="item-text-content">{{item.createTime}}</text>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button" style="width: 120px;"
+									@click="onEquipmentInspectionItemClick(item.id,item.rainSeasonKind)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">巡检填报详情</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+
+	export default {
+		components: {},
+		onLoad(option) {
+			this.getPage();
+		},
+		data() {
+			return {
+				list: [],
+				title: '今日巡检填报信息',
+			}
+		},
+		computed: {},
+		onShow() {},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			getPage(params = {}) {
+				let that = this;
+				http.request({
+					url: '/galaxy-business/equipment/inspection/report/today/list',
+					method: 'GET'
+				}).then(res => {
+					if (res.success) {
+						if (res.data != null) {
+							that.list = res.data;
+						}
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			onEquipmentInspectionItemClick(id, rainSeasonKind) {
+				console.log(id)
+				var url = '/pages/equipment-inspection/inspectionreportview?id=' + id + "&type=" + rainSeasonKind;
+				uni.navigateTo({
+					url: url
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+
+</style>
+
+<style lang="scss" scoped>
+
+</style>

+ 147 - 0
pages/home/dangerarea.vue

@@ -0,0 +1,147 @@
+<!--
+ * @Title: 
+ * @Description: 设备异常信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<text class="item-title-rtu-name">{{item.dangerAreaName}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="location" size="18" color="lightblue" />
+								<text class="item-text-lable">行政区划:</text>
+								<text class="item-text-content">{{item.adnm}}</text>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button" @click="toMap(item)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="phone" size="18" color="coral" />
+										<text class="button-text">查看地图</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		pathToBase64,
+		base64ToPath
+	} from '@/js_sdk/mmmm-image-tools/index.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+
+
+	export default {
+		components: {
+
+		},
+		onLoad(options) {
+			this.id = options.id;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.getPage();
+		},
+		data() {
+			return {
+				title: '地图测试',
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				query: {},
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+
+		},
+		created() {
+
+		},
+		methods: {
+
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			toMap(item){
+				let url = '/pages/home/dangerareamap?id=' + item.id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			getPage(params = {}) {
+
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/map/dangerarea/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+	.uni-body {
+		font-size: 0.7rem;
+	}
+</style>

+ 193 - 0
pages/home/dangerareamap.vue

@@ -0,0 +1,193 @@
+<!--
+ * @Title: 
+ * @Description: 设备异常信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="page-body">
+			<view class="page-section page-section-gap">
+				<map style="width: 100%; height: 600px;" :latitude="latitude" :longitude="longitude" :markers="markets"
+					enable-zoom="true" :polygons="polygons" :scale="scale">
+				</map>
+			</view>
+
+			<!-- 			<view class="item-button-group">
+				<view v-for="item in areaList" :key="item.id" class="item-button" @click="onAreaClick(item)">
+					<view class="items-line">
+						<uni-icons class="input-uni-icon" type="close" size="18" color="coral" />
+						<text class="button-text">{{ item.name }}</text>
+					</view>
+				</view>
+			</view> -->
+		</view>
+	</view>
+</template>
+<!-- <script src="../../static/js/gcoord.global.prod.js" type="module"></script> -->
+<script>
+	import {
+		gcoord
+	} from '@/static/js/gcoord.global.prod.js'
+	import http from '@/http/api.js';
+	import {
+		pathToBase64,
+		base64ToPath
+	} from '@/js_sdk/mmmm-image-tools/index.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+
+	export default {
+		components: {
+
+		},
+		onLoad(options) {
+			this.id = options.id;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			let that = this;
+			let postData = {};
+			postData['id'] = this.id;
+			http.request({
+				url: '/galaxy-business/map/dangerarea/detail',
+				method: 'GET',
+				data: postData
+			}).then(res => {
+				console.log(res)
+				if (res.data != null) {
+					let p = {};
+					let ps = res.data.points.map(item => {
+						let l = gcoord.transform(
+							[item.pointLng, item.pointLat],
+							gcoord.WGS84,
+							gcoord.GCJ02
+						);
+						return {
+							latitude: l[1],
+							longitude: l[0],
+						}
+					})
+					p['points'] = ps;
+					let dashArray = [];
+					dashArray.push(4);
+					dashArray.push(10);
+					p['dashArray'] = dashArray;
+					
+					if (res.data.dangerStatus == '1') {
+						// p['strokeColor'] = '#EE6666';
+						p['strokeColor'] = '#FF0000';
+						p['fillColor'] = '#F72C5B7D';
+					} else {
+						p['strokeColor'] = '#FC8452';
+						p['fillColor'] = '#FAC8587D';
+					}
+					that.polygons.push(p);
+					let c = gcoord.transform(
+						[res.data.centerPointLng, res.data.centerPointLat],
+						gcoord.WGS84,
+						gcoord.GCJ02
+					);
+					console.log(c)
+					that.latitude = c[1];
+					that.longitude = c[0];
+
+					let marketPoints = res.data.rtus.map(item => {
+						console.log(JSON.stringify(item))
+						let rtu = {};
+						rtu['iconPath'] = '/static/images/icon_warning.png';
+						rtu['id'] = parseInt(item.id);
+						let r = gcoord.transform(
+							[parseFloat(item.lng), parseFloat(item.lat)],
+							gcoord.WGS84,
+							gcoord.GCJ02
+						);
+
+						rtu['latitude'] = r[1];
+						rtu['longitude'] = r[0];
+						rtu['width'] = 20;
+						rtu['height'] = 20;
+						let label = {};
+						label['content'] = item.rtuName;
+						label['color'] = '#ff0000';
+						label['bgColor'] = '#ffffff';
+						label['anchorY'] = -40;
+						rtu['label'] = label;
+						return rtu;
+					});
+					that.markets = marketPoints;
+					that.scale = 14;
+				}
+			}).catch(err => {
+				console.log(err)
+			})
+		},
+		data() {
+			return {
+				title: '地图测试',
+				id: 0,
+				title: 'map',
+				areaList: [],
+				areaIndex: 0,
+				latitude: 40.848119,
+				longitude: 111.755426,
+				zoom: true,
+				scale: 14,
+				markets: [],
+				polygons: [],
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+
+		},
+		created() {
+
+		},
+		methods: {
+			toOss(path) {
+				return oss + path;
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onAreaClick(item) {
+				let p = {};
+				p['points'] = item.data;
+				let dashArray = [];
+				dashArray.push(10);
+				dashArray.push(10);
+				p['dashArray'] = dashArray;
+				p['strokeColor'] = '#FFF';
+				p['fillColor'] = '#A500337D';
+				this.polygons = [];
+				this.polygons.push(p);
+				let center = item.center;
+				this.latitude = center[1];
+				this.longitude = center[0];
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+	.uni-body {
+		font-size: 0.7rem;
+	}
+</style>

+ 954 - 0
pages/home/home.vue

@@ -0,0 +1,954 @@
+<!--
+ * @Title: 
+ * @Description: 首页
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<!-- 导航栏  #3F9EFF-->
+		<uni-nav-bar :fixed="true" backgroundColor="#3F9EFF" statusBar="false" height="75px">
+			<block slot="left">
+				<view class="view-flex-block-center">
+					<image src="/static/images/logo_start.png" class="logo" mode="widthFix"></image>
+				</view>
+			</block>
+			<view class="view-flex-block-center" style="width: 100%;">
+				<view class="view-flex-inline-center">
+					<text style="color: #ffffff; font-size: 1.2rem;font-family: Microsoft YaHei;">{{title}}</text>
+				</view>
+			</view>
+			<block slot="right">
+				<view style="margin-right:20rpx" @click="onNoticeMoreClick">
+					<uni-badge class="uni-badge-left-margin" absolute="rightTop" :is-dot="noticeDot" :text="noticeValue"
+						size="small">
+						<uni-icons class="input-uni-icon" type="notification" size="24" color="#FFFFFF" />
+					</uni-badge>
+				</view>
+			</block>
+		</uni-nav-bar>
+		<!-- 头部按钮 -->
+		<view class="nav">
+			<u-grid :col="4" :border="false">
+				<u-grid-item v-if="navButtonIndex[index]" bg-color="transparent" v-for="(item, index) in navButton"
+					:key="index">
+					<navigator v-if="item.badge" :url="item.url" hover-class="none" class="nav-item"
+						open-type="navigate">
+						<uni-badge class="uni-badge-left-margin" absolute="rightTop" :text="item.value" size="small">
+							<image :src="item.img" mode="widthFix" class="nav-item-img"></image>
+						</uni-badge>
+						<view style="font-size: 0.9rem;font-weight: bold;">{{ item.name }}</view>
+					</navigator>
+					<navigator v-else :url="item.url" hover-class="none" class="nav-item" open-type="navigate">
+						<image :src="item.img" mode="widthFix" class="nav-item-img"></image>
+						<view style="font-size: 0.9rem;font-weight: bold;">{{ item.name }}</view>
+					</navigator>
+				</u-grid-item>
+			</u-grid>
+		</view>
+		<uni-card v-if="permission.orgAdmin || (permission.companyServciePerson && postName=='servicePerson')"
+			title="快捷操作">
+			<view class="view-flex-inline">
+				<uni-icons class="input-uni-icon" type="phone" size="18" color="coral" />
+				<text class="text-under-line" style="color: coral;font-size: 1rem;"
+					@click="toShortcutCreateOrder">发起工单</text>
+			</view>
+		</uni-card>
+		<!-- 		<uni-card v-if="permission.companyServciePerson && postName=='engineer'" title="新的工单">
+			<view v-if="todoOrderCount>0">
+				<uni-list>
+					<uni-list-item v-for="item in todoOrderList" :key="item.id">
+						<template v-slot:body>
+							<view class="list-item-block">
+								<view class="line">
+									<uni-icons type="gear" size="18" color="lightblue" />
+									<view v-if="item.orderType==1" class="text" style="width: 90%;color: gray;">
+										工单类型: <span style="margin-left: 5px;color: cornflowerblue;">维修工单</span>
+									</view>
+									<view v-else class="text" style="width: 90%;color: gray;">
+										工单类型: <span style="margin-left: 5px;color: cornflowerblue;">服务工单</span>
+									</view>
+								</view>
+								<view class="line">
+									<uni-icons type="personadd" size="18" color="lightblue" />
+									<view class="text" style="width: 90%;color: gray;">
+										工单发起人: <span
+											style="margin-left: 5px;color: cornflowerblue;">{{item.createOrderPersonName}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<uni-icons type="calendar" size="18" color="lightblue" />
+									<view class="text" style="width: 90%;color: gray;">
+										发起时间: <span
+											style="margin-left: 5px;color: cornflowerblue;">{{item.createTime}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<uni-icons type="help" size="18" color="lightblue" />
+									<view class="text text-ellipsis" style="width: 90%;color: gray;">
+										问题描述: <span
+											style="margin-left: 5px;color: cornflowerblue;">{{item.orderDesc}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<view class="block">
+										<uni-icons type="arrow-right" size="20" color="coral" />
+									</view>
+									<view class="text text-underline"
+										style="color: coral;margin-left: 2px;font-size: 1rem;" @click="toDo(item)">
+										去处理
+									</view>
+								</view>
+							</view>
+						</template>
+					</uni-list-item>
+				</uni-list>
+			</view>
+			<view v-else class="view-flex-inline">
+				<image src="/static/images/todo/todo.png" style="width: 40px;margin-left: 10px;" mode="widthFix">
+				</image>
+				<view class="view-flex-block-center" style="margin-left: 10px;align-items: flex-start;">
+					<text>暂无待处理工单</text>
+				</view>
+			</view>
+		</uni-card>
+		<uni-card v-if="permission.orgAdmin" title="待审批费用申请" >
+			<view v-if="costsApproveOrderCount>0">
+				<uni-list>
+					<uni-list-item v-for="item in costsApproveOrderList" :key="item.id">
+						<template v-slot:body>
+							<view class="list-item-block">
+								<view class="line">
+									<uni-icons type="auth" size="18" color="lightblue" />
+									<view class="text" style="width: 90%;color: gray;">
+										费用审批申请人:<span
+											style="margin-left: 5px;color: cornflowerblue;">{{item.processorName}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<uni-icons type="calendar" size="18" color="lightblue" />
+									<view class="text" style="width: 90%;color: gray;">
+										申请时间:<span
+											style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessTime}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<uni-icons type="info" size="18" color="lightblue" />
+									<view class="text text-ellipsis" style="width: 90%;color: gray;">
+										费用说明:<span
+											style="margin-left: 5px;color: cornflowerblue;">{{item.costsReportDesc}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<view class="block">
+										<uni-icons type="arrow-right" size="20" color="coral" />
+									</view>
+									<view class="text  text-ellipsis text-underline"
+										style="width: 90%;color: coral;font-size: 1rem;"
+										@click="toOrderCostsApprove(item)">
+										去审批
+									</view>
+								</view>
+							</view>
+						</template>
+					</uni-list-item>
+				</uni-list>
+			</view>
+			<view v-else class="view-flex-inline">
+				<image src="/static/images/todo/todo.png" style="width: 40px;margin-left: 10px;" mode="widthFix">
+				</image>
+				<view class="view-flex-block-center" style="margin-left: 10px;align-items: flex-start;">
+					<text>暂无待费用审批工单</text>
+				</view>
+			</view>
+		</uni-card>
+		<uni-card v-if="permission.companyServciePerson && postName=='engineer'" title="费用已审批工单">
+			<view v-if="costsApproveOrderCount>0">
+				<uni-list>
+					<uni-list-item v-for="item in costsApproveOrderList" :key="item.id">
+						<template v-slot:body>
+							<view class="list-item-block">
+								<view class="line">
+									<uni-icons type="auth" size="18" color="lightblue" />
+									<view class="text" style="width: 90%;color: gray;">
+										费用审批人:<span
+											style="margin-left: 5px;color: cornflowerblue;">{{item.processorName}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<uni-icons type="calendar" size="18" color="lightblue" />
+									<view class="text" style="width: 90%;color: gray;">
+										审批时间:<span
+											style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessTime}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<uni-icons type="info" size="18" color="lightblue" />
+									<view class="text text-ellipsis" style="width: 90%;color: gray;">
+										审批意见:<span
+											style="margin-left: 5px;color: cornflowerblue;">{{item.processDesc}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<view class="block">
+										<uni-icons type="arrow-right" size="20" color="coral" />
+									</view>
+									<view class="text  text-ellipsis text-underline"
+										style="width: 90%;color: coral;font-size: 1rem;"
+										@click="toOrderProcess(item)">
+										去处理
+									</view>
+								</view>
+							</view>
+						</template>
+					</uni-list-item>
+				</uni-list>
+			</view>
+			<view v-else class="view-flex-inline">
+				<image src="/static/images/todo/todo.png" style="width: 40px;margin-left: 10px;" mode="widthFix">
+				</image>
+				<view class="view-flex-block-center" style="margin-left: 10px;align-items: flex-start;">
+					<text>暂无费用已审批工单</text>
+				</view>
+			</view>
+		</uni-card>
+		<uni-card v-if="permission.orgAdmin" title="待完结审批工单">
+			<view v-if="closeApproveOrderCount>0">
+				<uni-list>
+					<uni-list-item v-for="item in closeApproveOrderList" :key="item.id">
+						<template v-slot:body>
+							<view class="list-item-block">
+								<view class="line">
+									<uni-icons type="auth" size="18" color="lightblue" />
+									<view class="text" style="width: 90%;color: gray;">
+										工单处理人:<span
+											style="margin-left: 5px;color: cornflowerblue;">{{item.processorName}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<uni-icons type="calendar" size="18" color="lightblue" />
+									<view class="text" style="width: 90%;color: gray;">
+										处理时间:<span
+											style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessTime}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<uni-icons type="info" size="18" color="lightblue" />
+									<view class="text text-ellipsis" style="width: 90%;color: gray;">
+										解决措施说明:<span
+											style="margin-left: 5px;color: cornflowerblue;">{{item.processDesc}}</span>
+									</view>
+								</view>
+								<view class="line">
+									<view class="block">
+										<uni-icons type="arrow-right" size="20" color="coral" />
+									</view>
+									<view class="text text-ellipsis text-underline"
+										style="width: 90%;color: coral;font-size: 1rem;"
+										@click="toOrderCloseApprove(item)">
+										去审批
+									</view>
+								</view>
+							</view>
+						</template>
+					</uni-list-item>
+				</uni-list>
+			</view>
+			<view v-else class="view-flex-inline">
+				<image src="/static/images/todo/todo.png" style="width: 40px;margin-left: 10px;" mode="widthFix">
+				</image>
+				<view class="view-flex-block-center" style="margin-left: 10px;align-items: flex-start;">
+					<text>暂无待完结审批工单</text>
+				</view>
+			</view>
+		</uni-card> -->
+		<uni-card title="待处理事件">
+			<uni-section v-if="permission.companyServciePerson && postName=='engineer'" title="新的工单"
+				ftitleFontSize="0.8rem" type="circle">
+<!-- 				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template> -->
+				<view v-if="todoOrderCount>0">
+					<uni-list>
+						<uni-list-item v-for="item in todoOrderList" :key="item.id">
+							<template v-slot:body>
+								<view class="list-item-block">
+									<view class="line">
+										<uni-icons type="gear" size="18" color="lightblue" />
+										<view v-if="item.orderType==1" class="text" style="width: 90%;color: gray;">
+											工单类型: <span style="margin-left: 5px;color: cornflowerblue;">维修工单</span>
+										</view>
+										<view v-else class="text" style="width: 90%;color: gray;">
+											工单类型: <span style="margin-left: 5px;color: cornflowerblue;">服务工单</span>
+										</view>
+									</view>
+									<view class="line">
+										<uni-icons type="personadd" size="18" color="lightblue" />
+										<view class="text" style="width: 90%;color: gray;">
+											工单发起人: <span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.createOrderPersonName}}</span>
+										</view>
+									</view>
+									<view class="line">
+										<uni-icons type="calendar" size="18" color="lightblue" />
+										<view class="text" style="width: 90%;color: gray;">
+											发起时间: <span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.createTime}}</span>
+										</view>
+									</view>
+									<view class="line">
+										<uni-icons type="help" size="18" color="lightblue" />
+										<view class="text text-ellipsis" style="width: 90%;color: gray;">
+											问题描述: <span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.orderDesc}}</span>
+										</view>
+									</view>
+									<view class="line">
+										<view class="block">
+											<uni-icons type="arrow-right" size="20" color="coral" />
+										</view>
+										<view class="text text-underline"
+											style="color: coral;margin-left: 2px;font-size: 1rem;" @click="toDo(item)">
+											去处理
+										</view>
+									</view>
+								</view>
+							</template>
+						</uni-list-item>
+					</uni-list>
+				</view>
+				<view v-else class="view-flex-inline">
+					<image src="/static/images/todo/todo.png" style="width: 40px;margin-left: 10px;" mode="widthFix">
+					</image>
+					<view class="view-flex-block-center" style="margin-left: 10px;align-items: flex-start;">
+						<text>暂无待处理工单</text>
+					</view>
+				</view>
+			</uni-section>
+			<uni-section v-if="permission.orgAdmin" title="待审批费用申请" ftitleFontSize="0.8rem" type="circle">
+<!-- 				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template> -->
+				<view v-if="costsApproveOrderCount>0">
+					<uni-list>
+						<uni-list-item v-for="item in costsApproveOrderList" :key="item.id">
+							<template v-slot:body>
+								<view class="list-item-block">
+									<view class="line">
+										<uni-icons type="auth" size="18" color="lightblue" />
+										<view class="text" style="width: 90%;color: gray;">
+											费用申请人:<span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.processorName}}</span>
+										</view>
+									</view>
+									<view class="line">
+										<uni-icons type="calendar" size="18" color="lightblue" />
+										<view class="text" style="width: 90%;color: gray;">
+											申请时间:<span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessTime}}</span>
+										</view>
+									</view>
+									<view class="line">
+										<uni-icons type="info" size="18" color="lightblue" />
+										<view class="text text-ellipsis" style="width: 90%;color: gray;">
+											费用说明:<span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.costsReportDesc}}</span>
+										</view>
+									</view>
+									<view class="line">
+										<view class="block">
+											<uni-icons type="arrow-right" size="20" color="coral" />
+										</view>
+										<view class="text  text-ellipsis text-underline"
+											style="width: 90%;color: coral;font-size: 1rem;"
+											@click="toOrderCostsApprove(item)">
+											去审批
+										</view>
+									</view>
+								</view>
+							</template>
+						</uni-list-item>
+					</uni-list>
+				</view>
+				<view v-else class="view-flex-inline">
+					<image src="/static/images/todo/todo.png" style="width: 40px;margin-left: 10px;" mode="widthFix">
+					</image>
+					<view class="view-flex-block-center" style="margin-left: 10px;align-items: flex-start;">
+						<text>暂无待审批费用申请工单</text>
+					</view>
+				</view>
+			</uni-section>
+			<uni-section v-if="permission.companyServciePerson && postName=='engineer'" title="费用已审批工单"
+				ftitleFontSize="0.8rem" type="circle">
+<!-- 				<template v-slot:decoration>
+					<view class="decoration"></view>
+				</template> -->
+				<view v-if="costsApproveOrderCount>0">
+					<uni-list>
+						<uni-list-item v-for="item in costsApproveOrderList" :key="item.id">
+							<template v-slot:body>
+								<view class="list-item-block">
+									<view class="line">
+										<uni-icons type="auth" size="18" color="lightblue" />
+										<view class="text" style="width: 90%;color: gray;">
+											费用审批人:<span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.processorName}}</span>
+										</view>
+									</view>
+									<view class="line">
+										<uni-icons type="calendar" size="18" color="lightblue" />
+										<view class="text" style="width: 90%;color: gray;">
+											审批时间:<span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessTime}}</span>
+										</view>
+									</view>
+									<view class="line">
+										<uni-icons type="info" size="18" color="lightblue" />
+										<view class="text text-ellipsis" style="width: 90%;color: gray;">
+											审批意见:<span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.processDesc}}</span>
+										</view>
+									</view>
+									<view class="line">
+										<view class="block">
+											<uni-icons type="arrow-right" size="20" color="coral" />
+										</view>
+										<view class="text  text-ellipsis text-underline"
+											style="width: 90%;color: coral;font-size: 1rem;"
+											@click="toOrderProcess(item)">
+											去处理
+										</view>
+									</view>
+								</view>
+							</template>
+						</uni-list-item>
+					</uni-list>
+				</view>
+				<view v-else class="view-flex-inline">
+					<image src="/static/images/todo/todo.png" style="width: 40px;margin-left: 10px;" mode="widthFix">
+					</image>
+					<view class="view-flex-block-center" style="margin-left: 10px;align-items: flex-start;">
+						<text>暂无费用已审批工单</text>
+					</view>
+				</view>
+			</uni-section>
+			<uni-section v-if="permission.orgAdmin" title="待完结审批工单" ftitleFontSize="0.8rem" type="circle">
+				<view v-if="closeApproveOrderCount>0">
+					<uni-list>
+						<uni-list-item v-for="item in closeApproveOrderList" :key="item.id">
+							<template v-slot:body>
+								<view class="list-item-block">
+									<view class="line">
+										<uni-icons type="auth" size="18" color="lightblue" />
+										<view class="text" style="width: 90%;color: gray;">
+											工单处理人:<span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.processorName}}</span>
+										</view>
+									</view>
+									<view class="line">
+										<uni-icons type="calendar" size="18" color="lightblue" />
+										<view class="text" style="width: 90%;color: gray;">
+											处理时间:<span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.orderProcessTime}}</span>
+										</view>
+									</view>
+									<view class="line">
+										<uni-icons type="info" size="18" color="lightblue" />
+										<view class="text text-ellipsis" style="width: 90%;color: gray;">
+											解决措施说明:<span
+												style="margin-left: 5px;color: cornflowerblue;">{{item.processDesc}}</span>
+										</view>
+									</view>
+									<view class="line">
+										<view class="block">
+											<uni-icons type="arrow-right" size="20" color="coral" />
+										</view>
+										<view class="text text-ellipsis text-underline"
+											style="width: 90%;color: coral;font-size: 1rem;"
+											@click="toOrderCloseApprove(item)">
+											去审批
+										</view>
+									</view>
+								</view>
+							</template>
+						</uni-list-item>
+					</uni-list>
+				</view>
+				<view v-else class="view-flex-inline">
+					<image src="/static/images/todo/todo.png" style="width: 40px;margin-left: 10px;" mode="widthFix">
+					</image>
+					<view class="view-flex-block-center" style="margin-left: 10px;align-items: flex-start;">
+						<text>暂无待完结审批工单</text>
+					</view>
+				</view>
+			</uni-section>
+		</uni-card>
+		<!-- 		<uni-card title="云监控">
+			<uni-row>
+				<uni-col :span="12">
+					<view class="view-flex-inline">
+						<uni-icons class="input-uni-icon" type="calendar" size="18" color="orangered" />
+						<text>未关闭工单 {{realData.orderCount}}</text>
+					</view>
+					<view class="view-flex-inline">
+						<uni-icons class="input-uni-icon" type="calendar" size="18" color="orangered" />
+						<text>工单处理超时 {{realData.delayComfireOrders}}</text>
+					</view>
+				</uni-col>
+				<uni-col :span="12">
+					<view class="view-flex-inline">
+						<uni-icons class="input-uni-icon" type="notification" size="18" color="orangered" />
+						<text>设备异常 {{realData.warningRtus}}</text>
+					</view>
+				</uni-col>
+			</uni-row>
+		</uni-card> -->
+		<!-- 
+		<uni-card title="我的资源">
+			<uni-row>
+				<uni-col :span="12">
+					<view class="view-flex-inline">
+						<uni-icons class="input-uni-icon" type="home" size="18" color="orangered" />
+						<text>运维机构数量</text>
+					</view>
+				</uni-col>
+				<uni-col :span="12">
+					<view class="view-flex-inline">
+						<uni-icons class="input-uni-icon" type="folder-add" size="18" color="orangered" />
+						<text>项目数量</text>
+					</view>
+				</uni-col>
+			</uni-row>
+			<uni-row>
+				<uni-col :span="12">
+					<view class="view-flex-inline">
+						<uni-icons class="input-uni-icon" type="staff" size="18" color="orangered" />
+						<text>运维人员数量</text>
+					</view>
+				</uni-col>
+				<uni-col :span="12">
+					<view class="view-flex-inline">
+						<uni-icons class="input-uni-icon" type="videocam" size="18" color="orangered" />
+						<text>设备数量 {{realData.rtus}}</text>
+					</view>
+				</uni-col>
+			</uni-row>
+		</uni-card> -->
+	</view>
+</template>
+
+<script>
+	import
+	navBtns
+	from "@/api/home.js";
+	import {
+		role
+	} from "@/api/role.js";
+	import {
+		oss
+	} from '@/common/setting';
+	import http from '@/http/api.js';
+	export default {
+		components: {},
+		data() {
+			return {
+				title: '泰山电教维护服务',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+					'yjServicePerson': false,
+				},
+				postName: '',
+				currentRole: '',
+				current: 0,
+				navButton: [],
+				navButtonIndex: [],
+				//more/loading/noMore
+				loadMoreStatus: "noMore",
+				timer: false,
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				noticeDot: false,
+				noticeValue: 0,
+				todoOrderCount: 0,
+				todoOrderList: [],
+				costsApproveOrderCount: 0,
+				costsApproveOrderList: [],
+				closeApproveOrderCount: 0,
+				closeApproveOrderList: [],
+			};
+		},
+		computed: {},
+		onLoad() {
+			//console.log(JSON.stringify(this.userInfo))
+			this.permission.admin = false;
+			this.permission.orgAdmin = false;
+			this.permission.companyAdmin = false;
+			this.permission.companyServciePerson = false;
+			this.permission.yjServicePerson = false;
+			this.navButton = navBtns.navButtons;
+			if (this.userInfo.role_name === role.admin) {
+				this.permission.admin = true;
+				this.navButtonIndex = navBtns.sysAdminNavButton;
+				this.currentRole = role.admin;
+			} else if (this.userInfo.role_name === role.orgAdmin) {
+				this.permission.orgAdmin = true;
+				this.currentRole = role.orgAdmin;
+				this.navButtonIndex = navBtns.orgAdminNavButton;
+			} else if (this.userInfo.role_name === role.companyAdmin) {
+				this.permission.companyAdmin = true;
+				this.currentRole = role.companyAdmin;
+				this.navButtonIndex = navBtns.companyAdminNavButton;
+			} else if (this.userInfo.role_name === role.companyServciePerson) {
+				this.permission.companyServciePerson = true;
+				this.currentRole = role.companyServciePerson;
+				this.navButtonIndex = navBtns.companyServicePersonNavButton;
+				if (this.userInfo.post_id == '1706859505948098562') {
+					this.postName = "engineer";
+				} else if (this.userInfo.post_id == '1730535542909140993') {
+					this.postName = "servicePerson";
+				}
+			}
+			if (this.$u.func.checkLogin()) {
+				console.log("timer start  +++++++ ")
+				this.timer = true;
+				setTimeout(this.timeCall, 10);
+			}
+		},
+		onUnload() {
+			this.timer = false;
+		},
+		onReady() {
+			if (this.$u.func.checkLogin()) {} else {
+				this.$u.func.logout();
+			}
+		},
+		onShow() {
+			if (this.$u.func.checkLogin()) {
+				if (this.userInfo.role_name !== this.currentRole) {
+					this.permission.admin = false;
+					this.permission.orgAdmin = false;
+					this.permission.companyAdmin = false;
+					this.permission.companyServciePerson = false;
+					this.permission.yjServicePerson = false;
+					this.navButton = navBtns.navButtons;
+					if (this.userInfo.role_name === role.admin) {
+						this.permission.admin = true;
+						this.navButtonIndex = navBtns.sysAdminNavButton;
+						this.currentRole = role.admin;
+					} else if (this.userInfo.role_name === role.orgAdmin) {
+						this.permission.orgAdmin = true;
+						this.currentRole = role.orgAdmin;
+						this.navButtonIndex = navBtns.orgAdminNavButton;
+					} else if (this.userInfo.role_name === role.companyAdmin) {
+						this.permission.companyAdmin = true;
+						this.currentRole = role.companyAdmin;
+						this.navButtonIndex = navBtns.companyAdminNavButton;
+					} else if (this.userInfo.role_name === role.companyServciePerson) {
+						this.permission.companyServciePerson = true;
+						this.currentRole = role.companyServciePerson;
+						this.navButtonIndex = navBtns.companyServicePersonNavButton;
+						if (this.userInfo.post_id == '1706859505948098562') {
+							this.postName = "engineer";
+						} else if (this.userInfo.post_id == '1730535542909140993') {
+							this.postName = "servicePerson";
+						}
+					}
+				}
+				if (this.timer == false) {
+					this.timer = true;
+					setTimeout(this.timeCall, 10);
+				}
+			} else {
+				this.$u.func.logout();
+			}
+		},
+		onHide() {
+			this.timer = false;
+		},
+		methods: {
+			toOss(path) {
+				return oss + path;
+			},
+			timeCall() {
+				if (this.timer == true) {
+					this.getHomeInfo();
+					setTimeout(this.timeCall, 10000);
+				}
+			},
+			toDo(item) {
+				var url = '/pages/check-order/orderconfirm?orderType=' + item.orderType + '&orderId=' + item.id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			toOrderProcess(item) {
+				var url = '/pages/check-order/orderprocessreport?skipPage=1&costsApprove=2&orderType=' + item.orderType +
+					'&orderProcessId=' + item
+					.orderProcessId + '&orderId=' + item.id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			toOrderCostsApprove(item) {
+				var url = '/pages/check-order/ordercostsapprove?orderType=' + item.orderType + '&orderId=' + item.id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			toOrderCloseApprove(item) {
+				console.log("toOrderCloseApprove")
+				var url = '/pages/check-order/ordercloseapprove?orderType=' + item.orderType + '&orderId=' + item.id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			toShortcutCreateOrder() {
+				let url = '/pages/check-order/orderadd';
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onNoticeMoreClick() {
+				uni.navigateTo({
+					url: '/pages/news/noticelist'
+				})
+			},
+			getHomeInfo() {
+				this.getTodoOrderList();
+				this.getTodoCostsApproveOrderList();
+				this.getTodoCloseOrderList();
+			},
+			getTodoOrderList() {
+				let that = this;
+				let postData = {};
+				http.request({
+					url: '/galaxy-business/order/todo/list',
+					method: 'GET',
+					data: postData,
+				}).then(res => {
+					that.todoOrderCount = 0;
+					if (res.data != null) {
+						that.todoOrderCount = res.data.length;
+						that.todoOrderList = res.data;
+					}
+				}).catch(err => {
+					console.log(JOSN.stringify(err))
+				})
+			},
+			getTodoCostsApproveOrderList() {
+				let that = this;
+				let postData = {};
+				http.request({
+					url: '/galaxy-business/order/todo/costsapprove/list',
+					method: 'GET',
+					data: postData,
+				}).then(res => {
+					that.costsApproveOrderCount = 0;
+					if (res.data != null) {
+						that.costsApproveOrderCount = res.data.length;
+						that.costsApproveOrderList = res.data;
+					}
+				}).catch(err => {
+					console.log(JOSN.stringify(err))
+				})
+			},
+			getTodoCloseOrderList() {
+				let that = this;
+				let postData = {};
+				http.request({
+					url: '/galaxy-business/order/todo/closeapprove/list',
+					method: 'GET',
+					data: postData,
+				}).then(res => {
+					that.closeApproveOrderCount = 0;
+					if (res.data != null) {
+						that.closeApproveOrderCount = res.data.length;
+						that.closeApproveOrderList = res.data;
+					}
+				}).catch(err => {
+					console.log(JOSN.stringify(err))
+				})
+			},
+		}
+	};
+</script>
+
+<style lang="scss" scoped>
+	$nav-height: 75px;
+
+	.decoration {
+		width: 6px;
+		height: 6px;
+		margin-right: 4px;
+		border-radius: 50%;
+		background-color: cadetblue;
+	}
+
+
+
+	.input-uni-icon {
+		line-height: $nav-height;
+	}
+
+	.item-block {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-start;
+		width: 100%;
+	}
+
+	.line {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+		width: 100%;
+	}
+
+	.line .block {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+	}
+
+	.line-end {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-end;
+		width: 100%;
+	}
+
+	.line-end .block {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+	}
+
+	.line-center {
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		width: 100%;
+		height: 100%;
+	}
+
+	.line-center .block {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+	}
+
+	.rtu-name {
+		margin-left: 5rpx;
+		font-size: 0.7rem;
+		font-weight: bold;
+	}
+
+	.rtu-code {
+		margin-left: 5rpx;
+		font-size: 0.6rem;
+		color: gray;
+	}
+
+	.item-text-line {
+		width: 100%;
+		display: flex;
+		flex-direction: row;
+		align-items: flex-start;
+		padding-left: 0px;
+		padding-right: 0px;
+
+		.block {
+			height: 100%;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
+		}
+
+		.item-title {
+			font-size: 0.7rem;
+		}
+
+		.item-text {
+			padding-left: 2px;
+			padding-right: 5px;
+			font-size: 0.7rem;
+		}
+
+		.item-text-ell {
+			width: 100%;
+			overflow: hidden;
+			font-size: 0.7rem;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+		}
+
+		.item-number {
+			font-size: 0.7rem;
+			margin-left: 2px;
+			margin-right: 5px;
+		}
+	}
+
+	.item-title-image {
+		/* #ifndef APP-NVUE */
+		display: block;
+		/* #endif */
+		margin-right: 5px;
+		width: 20px;
+		height: 20px;
+		border-radius: 50%;
+	}
+
+	.uni-badge-left-margin {
+		margin-left: 0px;
+	}
+
+	.logo {
+		flex-shrink: 0;
+		width: 80rpx;
+		height: auto;
+	}
+
+	.container {
+		background-color: #f7f7f7;
+		min-height: 100vh;
+		overflow: hidden;
+
+	}
+
+	.nav {
+		margin: 0rpx 0;
+		box-sizing: border-box;
+		padding: 0 10rpx;
+
+
+		&-item {
+			width: 100%;
+			box-sizing: border-box;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: space-between;
+			height: 130rpx;
+
+			&-img {
+				width: 80rpx;
+				height: 80rpx;
+			}
+
+			&-name {
+				font-size: 0.7rem;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #585b61;
+			}
+		}
+	}
+</style>

+ 147 - 0
pages/home/leaveline.vue

@@ -0,0 +1,147 @@
+<!--
+ * @Title: 
+ * @Description: 设备异常信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<text class="item-title-rtu-name">{{item.dangerAreaName}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="location" size="18" color="lightblue" />
+								<text class="item-text-lable">行政区划:</text>
+								<text class="item-text-content">{{item.adnm}}</text>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button" @click="toMap(item)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="phone" size="18" color="coral" />
+										<text class="button-text">查看地图</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		pathToBase64,
+		base64ToPath
+	} from '@/js_sdk/mmmm-image-tools/index.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+
+
+	export default {
+		components: {
+
+		},
+		onLoad(options) {
+			this.id = options.id;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.getPage();
+		},
+		data() {
+			return {
+				title: '地图测试',
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				query: {},
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+
+		},
+		created() {
+
+		},
+		methods: {
+
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			toMap(item){
+				let url = '/pages/home/leavelinemap?id=' + item.id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			getPage(params = {}) {
+
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/map/leaveline/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+	.uni-body {
+		font-size: 0.7rem;
+	}
+</style>

+ 160 - 0
pages/home/leavelinemap.vue

@@ -0,0 +1,160 @@
+<!--
+ * @Title: 
+ * @Description: 设备异常信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="page-body">
+			<view class="page-section page-section-gap">
+				<map style="width: 100%; height: 600px;" :latitude="latitude" :longitude="longitude" :markers="markets"
+					enable-zoom="true" :polyline="polylines" :scale="scale">
+				</map>
+			</view>
+
+			<!-- 			<view class="item-button-group">
+				<view v-for="item in areaList" :key="item.id" class="item-button" @click="onAreaClick(item)">
+					<view class="items-line">
+						<uni-icons class="input-uni-icon" type="close" size="18" color="coral" />
+						<text class="button-text">{{ item.name }}</text>
+					</view>
+				</view>
+			</view> -->
+		</view>
+	</view>
+</template>
+<!-- <script src="../../static/js/gcoord.global.prod.js" type="module"></script> -->
+<script>
+	import {
+		gcoord
+	} from '@/static/js/gcoord.global.prod.js'
+	import http from '@/http/api.js';
+	import {
+		pathToBase64,
+		base64ToPath
+	} from '@/js_sdk/mmmm-image-tools/index.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+
+	export default {
+		components: {
+
+		},
+		onLoad(options) {
+			this.id = options.id;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			let that = this;
+			let postData = {};
+			postData['id'] = this.id;
+			http.request({
+				url: '/galaxy-business/map/leaveline/detail',
+				method: 'GET',
+				data: postData
+			}).then(res => {
+				console.log(res)
+				if (res.data != null) {
+					let p = {};
+					let ps = res.data.points.map(item => {
+						let l = gcoord.transform(
+							[item.pointLng, item.pointLat],
+							gcoord.WGS84,
+							gcoord.GCJ02
+						);
+						return {
+							latitude: l[1],
+							longitude: l[0],
+						}
+					})
+					p['points'] = ps;
+		
+					p['color'] = '#EE6666';
+					
+	
+					that.polylines.push(p);
+					let c = gcoord.transform(
+						[res.data.centerPointLng, res.data.centerPointLat],
+						gcoord.WGS84,
+						gcoord.GCJ02
+					);
+					console.log(c)
+					that.latitude = c[1];
+					that.longitude = c[0];
+
+					that.scale = 16;
+				}
+			}).catch(err => {
+				console.log(err)
+			})
+		},
+		data() {
+			return {
+				title: '地图测试',
+				id: 0,
+				title: 'map',
+				areaList: [],
+				areaIndex: 0,
+				latitude: 40.848119,
+				longitude: 111.755426,
+				zoom: true,
+				scale: 16,
+				markets: [],
+				polylines: [],
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+
+		},
+		created() {
+
+		},
+		methods: {
+			toOss(path) {
+				return oss + path;
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onAreaClick(item) {
+				let p = {};
+				p['points'] = item.data;
+				let dashArray = [];
+				dashArray.push(10);
+				dashArray.push(10);
+				p['dashArray'] = dashArray;
+				p['strokeColor'] = '#FFF';
+				p['fillColor'] = '#A500337D';
+				this.polygons = [];
+				this.polygons.push(p);
+				let center = item.center;
+				this.latitude = center[1];
+				this.longitude = center[0];
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+	.uni-body {
+		font-size: 0.7rem;
+	}
+</style>

+ 147 - 0
pages/home/region.vue

@@ -0,0 +1,147 @@
+<!--
+ * @Title: 
+ * @Description: 设备异常信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<text class="item-title-rtu-name">{{item.dangerAreaName}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="location" size="18" color="lightblue" />
+								<text class="item-text-lable">行政区划:</text>
+								<text class="item-text-content">{{item.adnm}}</text>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button" @click="toMap(item)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="phone" size="18" color="coral" />
+										<text class="button-text">查看地图</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		pathToBase64,
+		base64ToPath
+	} from '@/js_sdk/mmmm-image-tools/index.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+
+
+	export default {
+		components: {
+
+		},
+		onLoad(options) {
+			this.id = options.id;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.getPage();
+		},
+		data() {
+			return {
+				title: '地图测试',
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				query: {},
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+
+		},
+		created() {
+
+		},
+		methods: {
+
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			toMap(item){
+				let url = '/pages/home/regionmap?id=' + item.id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			getPage(params = {}) {
+
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/map/region/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+	.uni-body {
+		font-size: 0.7rem;
+	}
+</style>

+ 168 - 0
pages/home/regionmap.vue

@@ -0,0 +1,168 @@
+<!--
+ * @Title: 
+ * @Description: 设备异常信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="page-body">
+			<view class="page-section page-section-gap">
+				<map style="width: 100%; height: 600px;" :latitude="latitude" :longitude="longitude" :markers="markets"
+					enable-zoom="true" :polygons="polygons" :scale="scale">
+				</map>
+			</view>
+
+			<!-- 			<view class="item-button-group">
+				<view v-for="item in areaList" :key="item.id" class="item-button" @click="onAreaClick(item)">
+					<view class="items-line">
+						<uni-icons class="input-uni-icon" type="close" size="18" color="coral" />
+						<text class="button-text">{{ item.name }}</text>
+					</view>
+				</view>
+			</view> -->
+		</view>
+	</view>
+</template>
+<!-- <script src="../../static/js/gcoord.global.prod.js" type="module"></script> -->
+<script>
+	import {
+		gcoord
+	} from '@/static/js/gcoord.global.prod.js'
+	import http from '@/http/api.js';
+	import {
+		pathToBase64,
+		base64ToPath
+	} from '@/js_sdk/mmmm-image-tools/index.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+
+	export default {
+		components: {
+
+		},
+		onLoad(options) {
+			this.id = options.id;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			let that = this;
+			let postData = {};
+			postData['id'] = this.id;
+			http.request({
+				url: '/galaxy-business/map/region/detail',
+				method: 'GET',
+				data: postData
+			}).then(res => {
+				console.log(res)
+				if (res.data != null) {
+					let p = {};
+					let ps = res.data.points.map(item => {
+						let l = gcoord.transform(
+							[item.pointLng, item.pointLat],
+							gcoord.WGS84,
+							gcoord.GCJ02
+						);
+						return {
+							latitude: l[1],
+							longitude: l[0],
+						}
+					})
+					p['points'] = ps;
+					let dashArray = [];
+					dashArray.push(4);
+					dashArray.push(10);
+					p['dashArray'] = dashArray;
+					
+			        p['strokeWidth'] = 2;
+					p['strokeColor'] = '#EE1ADC';
+						//p['fillColor'] = '#FAC8587D';
+					
+					that.polygons.push(p);
+					let c = gcoord.transform(
+						[res.data.centerPointLng, res.data.centerPointLat],
+						gcoord.WGS84,
+						gcoord.GCJ02
+					);
+					console.log(c)
+					that.latitude = c[1];
+					that.longitude = c[0];
+
+				
+				
+					that.scale = 8;
+				}
+			}).catch(err => {
+				console.log(err)
+			})
+		},
+		data() {
+			return {
+				title: '地图测试',
+				id: 0,
+				title: 'map',
+				areaList: [],
+				areaIndex: 0,
+				latitude: 40.848119,
+				longitude: 111.755426,
+				zoom: true,
+				scale: 8,
+				markets: [],
+				polygons: [],
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+
+		},
+		created() {
+
+		},
+		methods: {
+			toOss(path) {
+				return oss + path;
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onAreaClick(item) {
+				let p = {};
+				p['points'] = item.data;
+				let dashArray = [];
+				dashArray.push(10);
+				dashArray.push(10);
+				p['dashArray'] = dashArray;
+				p['strokeColor'] = '#FFF';
+				p['fillColor'] = '#A500337D';
+				this.polygons = [];
+				this.polygons.push(p);
+				let center = item.center;
+				this.latitude = center[1];
+				this.longitude = center[0];
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+	.uni-body {
+		font-size: 0.7rem;
+		
+	}
+</style>

+ 223 - 0
pages/home/start/start.vue

@@ -0,0 +1,223 @@
+<template>
+	<view style="padding-top: 20px;">
+		<uni-card title="运维系统">
+			<uni-row>
+				<uni-col :span="14">
+					<uni-card>
+						<view
+							style="height: 140px;display: flex;justify-content: center;flex-direction: column;align-items: center;">
+							<!-- <image class="yj-img" :src="yjxtImgUrl" mode="heightFix"></image> -->
+							<text style="color: black;font-size: 40px;font-weight: 200;;">运维</text>
+						</view>
+						<!-- 			<view style="height: 160px;width: 100%;margin-bottom: 10px;align-items: center;overflow:hidden">
+							<image class="yj-img" :src="ywxtImgUrl" mode="heightFix"></image>
+						</view> -->
+					</uni-card>
+				</uni-col>
+				<uni-col :span="10">
+					<view class="tag" style="margin-top: 10px;">
+						<view>
+							<uni-tag :inverted="true" text="维修直填报" type="primary" />
+						</view>
+						<view>
+							<uni-tag :inverted="true" text="设备巡检" type="primary" />
+						</view>
+						<view>
+							<uni-tag :inverted="true" text="站点管理" type="primary" />
+						</view>
+						<view>
+							<uni-tag :inverted="true" text="统计" type="primary" />
+						</view>
+						<view>
+							<uni-tag :inverted="true" text="通讯录" type="primary" />
+						</view>
+					</view>
+				</uni-col>
+			</uni-row>
+			<view class="yw-button" @click="onYwxtClick()">
+				<view class="btn-items">
+					<uni-icons class="input-uni-icon" type="person" size="18" color="white" />
+					<text>进入运维系统</text>
+					<uni-icons class="input-uni-icon" type="arrow-right" size="18" color="coral" />
+				</view>
+			</view>
+		</uni-card>
+		<uni-card title="应急系统">
+			<uni-row>
+				<uni-col :span="14">
+					<uni-card>
+						<view
+							style="height: 140px;display: flex;justify-content: center;flex-direction: column;align-items: center;">
+							<!-- <image class="yj-img" :src="yjxtImgUrl" mode="heightFix"></image> -->
+							<text style="color: black;font-size: 40px;font-weight: 200;;">应急</text>
+						</view>
+					</uni-card>
+				</uni-col>
+				<uni-col :span="10">
+					<view class="tag" style="margin-top: 10px;">
+						<view>
+							<uni-tag :inverted="true" text="群众登记" type="primary" />
+						</view>
+						<view>
+							<uni-tag :inverted="true" text="监测预警" type="primary" />
+						</view>
+						<view>
+							<uni-tag :inverted="true" text="危险区动态管理" type="primary" />
+						</view>
+						<view>
+							<uni-tag :inverted="true" text="转移避险" type="primary" />
+						</view>
+						<view>
+							<uni-tag :inverted="true" text="巡查检查" type="primary" @click="toDangerAreaCheck" />
+						</view>
+					</view>
+				</uni-col>
+			</uni-row>
+			<view class="yj-button" @click="onYjxtClick()">
+				<view class="btn-items">
+					<uni-icons class="input-uni-icon" type="person" size="18" color="white" />
+					<text>进入应急系统</text>
+					<uni-icons class="input-uni-icon" type="arrow-right" size="18" color="coral" />
+				</view>
+			</view>
+		</uni-card>
+	</view>
+</template>
+
+<script>
+	import {
+		img
+	} from '@/common/setting';
+
+	export default {
+		data() {
+			return {
+				ywxtImgUrl: img + 'ywxt.png',
+				yjxtImgUrl: img + 'yjxt7.png',
+			}
+		},
+		created() {},
+		methods: {
+			onYwxtClick() {
+				uni.setStorageSync("SubSystemSelectInfo", {
+					subSystem: 1,
+				});
+				uni.setTabBarItem({
+					"index": 1,
+					"iconPath": "static/images/tabbar/workbench.png",
+					"selectedIconPath": "static/images/tabbar/workbench_selected.png",
+					"text": "管理工作台",
+				})
+				uni.switchTab({
+					url: '/pages/home/home'
+				})
+			},
+			onYjxtClick() {
+				uni.setStorageSync("SubSystemSelectInfo", {
+					subSystem: 2,
+				});
+				uni.setTabBarItem({
+					"index": 1,
+					"iconPath": "static/images/tabbar/warn.png",
+					"selectedIconPath": "static/images/tabbar/warn_selected.png",
+					"text": "监测预警",
+				})
+				uni.switchTab({
+					url: '/pages/home/home'
+				})
+			},
+			toDangerAreaCheck() {
+				uni.navigateTo({
+					url: '/pages/yjxt/dangerareacheck?id=&type=0'
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.tag {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+		align-items: center;
+		margin-bottom: 10px;
+		padding-left: 10px;
+		flex-wrap: wrap;
+
+		view {
+			margin: 5px;
+		}
+	}
+
+	.yw-button {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		width: 100%;
+		height: 40px;
+		margin-left: 5px;
+		margin-top: 3px;
+		margin-bottom: 3px;
+		border-radius: 20px;
+		background-color: royalblue;
+		padding-left: 20px;
+
+		.btn-items {
+			display: flex;
+			flex-direction: row;
+			justify-content: center;
+			align-items: center;
+
+			text {
+				margin-left: 5px;
+				margin-right: 5px;
+				color: white;
+				font-size: 0.6rem;
+			}
+		}
+	}
+
+	.yw-button:active {
+		background-color: gray;
+	}
+
+	.yj-img {
+		flex-shrink: 0;
+		width: auto;
+		height: 160px;
+	}
+
+	.yj-button {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		width: 100%;
+		height: 40px;
+		margin-left: 5px;
+		margin-top: 3px;
+		margin-bottom: 3px;
+		border-radius: 20px;
+		background-color: royalblue;
+		padding-left: 20px;
+
+		.btn-items {
+			display: flex;
+			flex-direction: row;
+			justify-content: center;
+			align-items: center;
+
+			text {
+				margin-left: 5px;
+				margin-right: 5px;
+				color: white;
+				font-size: 0.6rem;
+			}
+		}
+
+	}
+
+	.yj-button:active {
+		background-color: gray;
+	}
+</style>

+ 334 - 0
pages/login/login-account.vue

@@ -0,0 +1,334 @@
+<template>
+	<view class="container">
+		<view class="content">
+			<view class="top">
+				<image src="/static/images/logo_start.png" class="logo" mode="widthFix"></image>
+				<view
+					style="width: 100%;margin-bottom: 80rpx;display: flex;flex-direction: column;align-items: center;">
+					<!-- 	<text style="font-size: 32rpx;">泰山云平台</text> -->
+					<text style="font-size: 1.5rem;margin-top: 5rpx;">
+						泰山电教维护服务系统
+					</text>
+				</view>
+				<view class="cell">
+					<view class="input-box">
+						<uIcons type="auth" size="30"></uIcons>
+						<input type="text" v-model="username" placeholder="请输入账号" class="ipt" placeholder-class="hold"
+							@blur="handleInputCheck" />
+					</view>
+				</view>
+				<view class="cell">
+					<view class="input-box">
+						<uIcons type="locked" size="30"></uIcons>
+						<input type="password" v-model="password" placeholder="请输入密码" class="ipt"
+							placeholder-class="hold" @blur="handleInputCheck" />
+					</view>
+				</view>
+				<!-- <view class="agree">
+					登录即代表同意
+					<text class="a">《用户协议》</text>
+					和
+					<text class="a">《隐私政策》</text>
+				</view> -->
+				<!-- <view class="tip">未注册用户验证后将自动注册并登录</view> -->
+				<view class="cell">
+					<view
+						style="margin-top: 30rpx;margin-right:24rpx;display: flex;justify-content: flex-end;flex-direction:row;">
+						<checkbox-group @change="checkboxChange">
+							<label style="font-size: 24rpx;">
+								<checkbox value="rememberPw" :checked="rememberPw" />记住密码
+							</label>
+						</checkbox-group>
+					</view>
+				</view>
+				<view class="cell">
+					<button class="submit" @click="submit" :disabled="disabled">登录</button>
+				</view>
+				<!-- <navigator url="/pages/login/login-phone" hover-class="none" class="change">手机登录 ></navigator> -->
+			</view>
+
+			<!-- 社交账号登录 -->
+			<!-- 			<view class="bottom">
+				<view class="tag">社交账号登录</view>
+				<view class="chat-arr">
+					<image src="/static/images/wx.png" class="icon" mode=""></image>
+					<image src="/static/images/qq.png" class="icon" mode=""></image>
+					<image src="/static/images/wb.png" class="icon" mode=""></image>
+				</view>
+			</view> -->
+		</view>
+		<!--  -->
+	</view>
+</template>
+
+<script>
+	import md5 from '@/utils/md5.js'
+	import uIcons from '@/uni_modules/uni-icons/components/uni-icons/uni-icons.vue'
+	import {
+		devUrl,
+		prodUrl,
+		contentType
+	} from '@/common/setting'
+	export default {
+		components: {
+			uIcons,
+		},
+		data() {
+			return {
+				tenantId: '000000',
+				username: '',
+				password: '',
+				disabled: true,
+				rememberPw: false
+			};
+		},
+		onLoad() {
+			console.log("login+++")
+			// uni.getPushClientId({
+			// 		success: (res) => {
+			// 			console.log("id11111111111 "+res.cid);
+			// 		},
+			// 		fail(err) {
+			// 			console.log(err)
+			// 		}
+			// 	})
+			// uni.getLocation({
+			// 	type: 'gcj02',
+			// 	geocode: true,
+			// 	success: function (res) {
+			// 		console.log('当前位置:' + JSON.stringify(res));
+			// 	}
+			// });
+
+			let userLoginInfo = uni.getStorageSync("userLoginInfo");
+			if (userLoginInfo) {
+				this.rememberPw = true;
+				this.disabled = false;
+				this.username = userLoginInfo.username;
+				this.password = userLoginInfo.pw;
+			}
+		},
+		methods: {
+			submit() {
+				this.$u.api.token(this.tenantId, this.username, md5(this.password)).then(data => {
+					console.log("token " + JSON.stringify(data))
+					let dt = new Date();
+					uni.setStorageSync("loginTime", dt.getTime());
+					if (this.rememberPw) {
+						uni.setStorageSync("userLoginInfo", {
+							username: this.username,
+							pw: this.password,
+						});
+					} else {
+						uni.removeStorageSync("userLoginInfo");
+					}
+					this.$u.func.login(data)
+				}).catch(err => {
+					console.log(err)
+					this.$u.func.showToast({
+						title: '用户名或密码错误' + err,
+					})
+				})
+			},
+			handleInputCheck() {
+				this.disabled = false
+			},
+			checkboxChange: function(e) {
+				let values = e.detail.value;
+				if (values.length > 0) {
+					this.rememberPw = true;
+				} else {
+					this.rememberPw = false;
+				}
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.container {
+		min-height: 100vh;
+		overflow: hidden;
+
+		.set-icon {
+			vertical-align: middle;
+			width: 41rpx;
+			height: auto;
+			margin-right: 35rpx;
+		}
+	}
+
+	.content {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+		height: 90vh;
+		width: 100%;
+
+		.top {
+			width: 100%;
+		}
+
+		.logo {
+			display: block;
+			width: 160rpx;
+			height: auto;
+			margin: 0 auto 40rpx;
+		}
+
+		.cell {
+			width: 100%;
+			padding: 0 85rpx;
+			box-sizing: border-box;
+			margin-top: 12rpx;
+
+			.name {
+				font-size: 22rpx;
+				font-family: Source Han Sans CN;
+				font-weight: 400;
+				color: #3e4a59;
+				line-height: 30rpx;
+				opacity: 0.72;
+			}
+
+			.input-box {
+				padding: 30rpx 0;
+				border-bottom: 2rpx solid #f6f6f6;
+				display: flex;
+				align-items: center;
+
+				.code {
+					font-size: 22rpx;
+					font-family: Source Han Sans CN;
+					font-weight: 400;
+					color: #0d0d0d;
+					line-height: 30rpx;
+
+					text {
+						color: #14b9c8;
+					}
+				}
+
+				.ipt {
+					flex: 1;
+					// height: 24rpx;
+					font-size: 24rpx;
+					padding-left: 10rpx;
+				}
+
+				.hold {
+					font-size: 24rpx;
+					font-family: Source Han Sans CN;
+					font-weight: 400;
+					color: #3e4a59;
+					line-height: 30px;
+					opacity: 0.45;
+				}
+			}
+		}
+
+		.agree {
+			margin: 27rpx 95rpx 0;
+			font-size: 22rpx;
+			font-family: Adobe Heiti Std;
+			font-weight: normal;
+			color: #cacaca;
+			line-height: 34rpx;
+
+			.a {
+				color: #000000;
+			}
+		}
+
+		.submit {
+			margin-top: 40rpx;
+			border: none;
+			width: 100%;
+			height: 80rpx;
+			line-height: 80rpx;
+			box-sizing: border-box;
+			border-radius: 15rpx;
+			// font-size: 36rpx;
+			background: linear-gradient(to right, #48b1f8, #3976f7);
+			color: #ffffff;
+
+			&::after {
+				content: none;
+			}
+
+			&::before {
+				content: none;
+			}
+
+			&[disabled='true'] {
+				background: linear-gradient(to right, #48b1f8, #3976f7);
+				font-size: 36rpx;
+				font-family: Source Han Sans CN;
+				font-weight: 500;
+				color: #ffffff;
+			}
+		}
+
+		.tip {
+			margin-top: 30rpx;
+			text-align: center;
+			font-size: 22rpx;
+			font-family: Adobe Heiti Std;
+			font-weight: normal;
+			color: #cacaca;
+			line-height: 34rpx;
+		}
+
+		.change {
+			margin-top: 20rpx;
+			text-align: center;
+			font-size: 22rpx;
+			font-family: Adobe Heiti Std;
+			font-weight: normal;
+			color: #14b9c8;
+			line-height: 34rpx;
+		}
+
+		.tag {
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			font-size: 22rpx;
+			font-family: Adobe Heiti Std;
+			font-weight: normal;
+			color: #9f9f9f;
+			line-height: 34rpx;
+
+			&::before {
+				content: '';
+				display: block;
+				width: 160rpx;
+				height: 1px;
+				background: #d8d8d8;
+				opacity: 0.86;
+			}
+
+			&::after {
+				content: '';
+				display: block;
+				width: 160rpx;
+				height: 1px;
+				background: #d8d8d8;
+				opacity: 0.86;
+			}
+		}
+
+		.chat-arr {
+			margin-top: 50rpx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+
+			.icon {
+				width: 73rpx;
+				height: 73rpx;
+			}
+		}
+	}
+</style>

+ 290 - 0
pages/login/login-phone.vue

@@ -0,0 +1,290 @@
+<template>
+	<view class="container">
+		<u-navbar :is-fixed="false" :border-bottom="false" :is-back="false" back-icon-name="arrow-leftward" title="登录"
+			:background="{ background: '#fff' }" title-color="#000000">
+			<view class="" slot="right">
+				<image src="/static/images/user/c8.png" class="set-icon" mode="widthFix"></image>
+			</view>
+		</u-navbar>
+
+		<view class="content">
+			<view class="top">
+				<image src="/static/images/logo.png" class="logo" mode="widthFix"></image>
+				<view class="cell">
+					<view class="name">手机号</view>
+					<view class="input-box">
+						<input type="number" v-model="phone" placeholder="请输入手机号码" class="ipt" placeholder-class="hold"
+							@blur="handleInputCheck" />
+					</view>
+				</view>
+				<view class="cell">
+					<view class="name">短信验证码</view>
+					<view class="input-box">
+						<input type="number" v-model="code" placeholder="请输入验证码" class="ipt" placeholder-class="hold"
+							@blur="handleInputCheck" />
+						<view class="code" @click="sendCode" v-if="count === 60">获取验证码</view>
+						<view class="code" v-else><text>{{ count }}</text>秒重新获取</view>
+					</view>
+				</view>
+				<!-- <view class="agree">
+					登录即代表同意
+					<text class="a">《用户协议》</text>
+					和
+					<text class="a">《隐私政策》</text>
+				</view> -->
+				<button class="submit" @click="submit" :disabled="disabled">登录</button>
+				<view class="tip">未注册用户验证后将自动注册并登录</view>
+				<navigator url="/pages/login/login-account" hover-class="none" class="change">密码登录 ></navigator>
+			</view>
+
+			<!-- 社交账号登录 -->
+			<view class="bottom">
+				<view class="tag">社交账号登录</view>
+				<view class="chat-arr">
+					<image src="/static/images/wx.png" class="icon" mode=""></image>
+					<image src="/static/images/qq.png" class="icon" mode=""></image>
+					<image src="/static/images/wb.png" class="icon" mode=""></image>
+				</view>
+			</view>
+		</view>
+		<!--  -->
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				phone: '',
+				code: '',
+				disabled: true,
+				count: 60,
+				timer: ''
+			};
+		},
+		methods: {
+			submit() {
+				this.$u.func.showToast({
+					title: '新版本即将到来',
+				})
+			},
+			handleInputCheck() {
+				if (!this.phone && !/^1\d{10}$/.test(this.phone)) {
+					this.disabled = true
+					return uni.showToast({
+						title: '请输入正确的手机号',
+						duration: 2000,
+						icon: 'none'
+					});
+				}
+				if (!this.code) {
+					this.disabled = true
+					return uni.showToast({
+						title: '请输入验证码',
+						duration: 2000,
+						icon: 'none'
+					});
+				}
+				this.disabled = false
+			},
+			async sendCode() {
+				this.count = this.count - 1;
+				this.timer = setInterval(() => {
+					if (this.count == 0) {
+						clearInterval(this.timer);
+						this.count = 60;
+						return;
+					}
+					this.count = this.count - 1;
+				}, 1000);
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.container {
+		min-height: 100vh;
+		overflow: hidden;
+
+		.set-icon {
+			vertical-align: middle;
+			width: 41rpx;
+			height: auto;
+			margin-right: 35rpx;
+		}
+	}
+
+	.content {
+		display: flex;
+		flex-direction: column;
+		justify-content: space-around;
+		align-items: center;
+
+		height: 90vh;
+		width: 100%;
+
+		.top {
+			width: 100%;
+		}
+
+		.logo {
+			display: block;
+			width: 281rpx;
+			height: auto;
+			margin: 0 auto 120rpx;
+		}
+
+		.cell {
+			width: 100%;
+			padding: 0 85rpx;
+			box-sizing: border-box;
+			margin-top: 36rpx;
+
+			.name {
+				font-size: 22rpx;
+				font-family: Source Han Sans CN;
+				font-weight: 400;
+				color: #3e4a59;
+				line-height: 30rpx;
+				opacity: 0.72;
+			}
+
+			.input-box {
+				padding: 30rpx 0;
+				border-bottom: 2rpx solid #f6f6f6;
+				display: flex;
+				align-items: center;
+
+				.code {
+					font-size: 22rpx;
+					font-family: Source Han Sans CN;
+					font-weight: 400;
+					color: #0d0d0d;
+					line-height: 30rpx;
+
+					text {
+						color: #14b9c8;
+					}
+				}
+
+				.ipt {
+					flex: 1;
+					// height: 24rpx;
+					font-size: 24rpx;
+				}
+
+				.hold {
+					font-size: 26rpx;
+					font-family: Source Han Sans CN;
+					font-weight: 400;
+					color: #3e4a59;
+					line-height: 30px;
+					opacity: 0.45;
+				}
+			}
+		}
+
+		.agree {
+			margin: 27rpx 95rpx 0;
+			font-size: 22rpx;
+			font-family: Adobe Heiti Std;
+			font-weight: normal;
+			color: #cacaca;
+			line-height: 34rpx;
+
+			.a {
+				color: #000000;
+			}
+		}
+
+		.submit {
+			margin: 60rpx 90rpx 0;
+			border: none;
+			width: 572rpx;
+			height: 86rpx;
+			line-height: 86rpx;
+			box-sizing: border-box;
+			border-radius: 15rpx;
+			background-color: #14b9c8;
+			color: #ffffff;
+
+			&::after {
+				content: none;
+			}
+
+			&::before {
+				content: none;
+			}
+
+			&[disabled='true'] {
+				background: #e4e4e4;
+				font-size: 36rpx;
+				font-family: Source Han Sans CN;
+				font-weight: 500;
+				color: #ffffff;
+			}
+		}
+
+		.tip {
+			margin-top: 30rpx;
+			text-align: center;
+			font-size: 22rpx;
+			font-family: Adobe Heiti Std;
+			font-weight: normal;
+			color: #cacaca;
+			line-height: 34rpx;
+		}
+
+		.change {
+			margin-top: 20rpx;
+			text-align: center;
+			font-size: 22rpx;
+			font-family: Adobe Heiti Std;
+			font-weight: normal;
+			color: #14b9c8;
+			line-height: 34rpx;
+		}
+
+		.tag {
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			font-size: 22rpx;
+			font-family: Adobe Heiti Std;
+			font-weight: normal;
+			color: #9f9f9f;
+			line-height: 34rpx;
+
+			&::before {
+				content: '';
+				display: block;
+				width: 160rpx;
+				height: 1px;
+				background: #d8d8d8;
+				opacity: 0.86;
+			}
+
+			&::after {
+				content: '';
+				display: block;
+				width: 160rpx;
+				height: 1px;
+				background: #d8d8d8;
+				opacity: 0.86;
+			}
+		}
+
+		.chat-arr {
+			margin-top: 50rpx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+
+			.icon {
+				width: 73rpx;
+				height: 73rpx;
+			}
+		}
+	}
+</style>

+ 282 - 0
pages/news/detail.vue

@@ -0,0 +1,282 @@
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view style="width: 100%;display: flex;flex-direction: row;justify-content: center;align-items: center;">
+				<text style="color: white;font-size: 1rem;">{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="content" style="margin-top: 10px;">
+			<view class="title">
+				{{noticeInfo.title}}
+			</view>
+			<view class="static">
+				<view class="left">
+					<view class="block">
+						{{noticeInfo.releaseTime}}
+					</view>
+				</view>
+			</view>
+			<view class="detail">
+				<u-parse :html="noticeInfo.content"></u-parse>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	export default {
+		data() {
+			return {
+				title: '公告详情页',
+				noticeInfo: {
+					'title': '',
+					'releaseTime': '',
+					'content': '',
+				}
+
+			};
+		},
+		onLoad(options) {
+			console.log(options.id)
+			this.getNotice(options.id);
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			getNotice(id) {
+				const that = this;
+				http.request({
+					url: '/galaxy-business/notice/detail',
+					method: 'GET',
+					params: {
+						'id': id,
+					},
+				}).then(res => {
+					console.log(res.data)
+					if (res.data != null) {
+						that.noticeInfo = res.data;
+					}
+
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	};
+</script>
+
+<style lang="scss">
+	.container {
+		padding: 0 0 150rpx;
+	}
+
+	.right-nav {
+		display: flex;
+		align-items: center;
+		margin-right: 40rpx;
+
+		.icon {
+			height: auto;
+
+			&-search {
+				width: 40rpx;
+				margin-right: 40rpx;
+			}
+
+			&-menu {
+				width: 40rpx;
+			}
+		}
+	}
+
+	.header {
+		display: flex;
+		align-items: center;
+		padding: 44rpx;
+
+		.avatar {
+			flex-shrink: 0;
+			width: 69rpx;
+			height: 69rpx;
+			background: #ffffff;
+			border: 1px solid #14b9c8;
+			border-radius: 50%;
+		}
+
+		.info {
+			flex: 1;
+			margin-left: 14rpx;
+
+			.name {
+				display: flex;
+				align-items: center;
+				font-size: 28rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #000000;
+				line-height: 36rpx;
+
+				.tag {
+					margin-left: 10rpx;
+					display: inline-block;
+					padding: 8rpx 10rpx;
+					font-size: 14rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #4cbeca;
+					line-height: 21rpx;
+					border: 1px solid #0bb9c8;
+					border-radius: 6px;
+				}
+			}
+
+			.date {
+				font-size: 24rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #a3a3a3;
+				line-height: 36rpx;
+			}
+		}
+
+		.btn {
+			padding: 8rpx 19rpx;
+			background: #e6e6e6;
+			border-radius: 6rpx;
+			font-size: 20rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #4cbeca;
+			line-height: 1;
+		}
+	}
+
+	.content {
+		padding: 0 44rpx;
+
+		.title {
+			font-size: 40rpx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #000000;
+			line-height: 47rpx;
+		}
+
+		.static {
+			margin-top: 34rpx;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			.left,
+			.right {
+				display: flex;
+				align-items: center;
+
+				.block {
+					display: flex;
+					align-items: center;
+					margin-right: 10rpx;
+				}
+			}
+
+			.left {
+				font-size: 20rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #787878;
+				line-height: 1;
+
+				.gf {
+					width: 24rpx;
+					height: 24rpx;
+					margin-right: 8rpx;
+				}
+			}
+
+			.right {
+				font-size: 20rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #787878;
+				line-height: 1;
+
+				.l {
+					width: 25rpx;
+					height: auto;
+					margin-right: 6rpx;
+				}
+			}
+		}
+
+		.detail {
+			font-size: 24rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #000000;
+			line-height: 47rpx;
+			margin-top: 50rpx;
+		}
+	}
+
+	.footer {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		z-index: 999;
+		height: 100rpx;
+		padding: 20rpx;
+		box-sizing: border-box;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		background-color: #ffffff;
+
+		.ipt {
+			width: 380rpx;
+			height: 77rpx;
+			background: #f7f7f7;
+			border-radius: 38px;
+			padding: 0 37rpx;
+			box-sizing: border-box;
+			margin-right: 20rpx;
+		}
+
+		.control {
+			flex: 1;
+			display: flex;
+			align-items: center;
+			justify-content: space-around;
+
+			.block {
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				flex: 1;
+			}
+
+			.icon {
+				height: auto;
+			}
+
+			.c {
+				width: 41rpx;
+				margin-right: 10rpx;
+			}
+
+			.s {
+				width: 36rpx;
+			}
+
+			.t {
+				width: 31rpx;
+			}
+		}
+	}
+</style>

+ 203 - 0
pages/news/noticelist.vue

@@ -0,0 +1,203 @@
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view style="width: 100%;display: flex;flex-direction: row;justify-content: center;align-items: center;">
+				<text style="color: white;font-size: 1rem;">{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<uni-list>
+			<uni-list-item ellipsis="1" v-for="item in noticeList" :key="item.id" :title="item.title"
+				:note="item.releaseTime" showArrow clickable @click="onNoticeItemClick(item.id)"></uni-list-item>
+		</uni-list>
+		<uni-load-more :status="status" @clickLoadMore="clickLoadMore" />
+	</view>
+</template>
+
+<script>
+
+	import http from '@/http/api.js';
+	export default {
+		components: {
+		},
+		data() {
+			return {
+				title: '通知公告消息',
+				status: 'more',
+				pageCurrent: 1,
+				pageSize: 10,
+				noticeList: [],
+				totalCount: 0,
+			};
+		},
+		onLoad() {
+			this.getNotice();
+		},
+		onReady() {
+		},
+		onPullDownRefresh() {
+		},
+		onReachBottom() {
+			if (this.totalCount > this.noticeList.length) {
+				this.status = 'loading';
+				setTimeout(() => {
+					this.pageCurrent++
+					this.getNotice(); //执行的方法
+				}, 1000)
+			} else { //停止加载
+				this.status = 'noMore';
+			}
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			clickLoadMore(e) {
+				if (this.totalCount > this.noticeList.length) {
+					this.status = 'loading';
+					setTimeout(() => {
+						this.pageCurrent++
+						this.getNotice(); //执行的方法
+					}, 1000)
+				} else { //停止加载
+					this.status = 'noMore';
+				}
+			},
+			getNotice() {
+				let that = this;
+				let current = this.pageCurrent;
+				let size = this.pageSize;
+				http.request({
+					url: '/galaxy-business/notice/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+				}).then(res => {
+					if (res.data.records != null) {
+						for (let i = 0; i < res.data.records.length; i++) {
+							that.noticeList.push(res.data.records[i]);
+						}
+					}
+					that.totalCount = res.data.total;
+					if (that.totalCount > that.noticeList.length) {
+						this.status = 'more';
+					}
+					that.viewNotice();
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			viewNotice() {
+				http.request({
+					url: '/galaxy-business/notice/view',
+					method: 'POST',
+				}).then(res => {}).catch(err => {
+					console.log(err)
+				})
+			},
+			onNoticeItemClick(id) {
+				console.log('执行click事件', id)
+				uni.navigateTo({
+					url: '/pages/news/detail?id=' + id
+				})
+			},
+		}
+	};
+</script>
+
+<style lang="scss">
+	.message-icon {
+		width: 32rpx;
+		height: auto;
+		margin-right: 27rpx;
+	}
+
+	.tab {
+		margin: 0 0 10rpx;
+		border-bottom: 1px solid #e4e7ed;
+	}
+
+	.content {
+		padding: 0 0 150rpx;
+
+		.news {
+			&:not(:last-of-type) {
+				border-bottom: 2rpx solid #e4e7ed;
+			}
+		}
+	}
+
+	.nomore {
+		padding: 30rpx 20rpx;
+	}
+
+	.news {
+		margin: 30rpx 30rpx 0;
+		padding: 0 0 30rpx;
+
+		.head {
+			display: flex;
+
+			.avatar {
+				flex-shrink: 0;
+				width: 69rpx;
+				height: 69rpx;
+				background: #ffffff;
+				border: 1px solid #14b9c8;
+				border-radius: 50%;
+			}
+
+			.info {
+				flex: 1;
+				margin-left: 14rpx;
+
+				.name {
+					display: flex;
+					align-items: center;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #000000;
+					line-height: 36rpx;
+
+					.tag {
+						margin-left: 15rpx;
+						display: inline-block;
+						padding: 8rpx 10rpx;
+						font-size: 14rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #4cbeca;
+						line-height: 21rpx;
+						border: 1px solid #0bb9c8;
+						border-radius: 6px;
+					}
+				}
+
+				.date {
+					font-size: 24rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #a3a3a3;
+					line-height: 36rpx;
+				}
+			}
+		}
+
+		.des {
+			margin-top: 40rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC;
+			color: #000000;
+			line-height: 47rpx;
+		}
+	}
+
+	.swiper-box {
+		height: 100vh;
+	}
+</style>

+ 87 - 0
pages/realdata/rtudata.vue

@@ -0,0 +1,87 @@
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<!-- 头部按钮 end -->
+			<uni-segmented-control :current="current" :values="items" @clickItem="onClickItem" styleType="text"
+				activeColor="#585b61"></uni-segmented-control>
+			<view class="content">
+				<view v-show="current === 0">
+					<rturaindata></rturaindata>
+				</view>
+				<view v-show="current === 1">
+					<rturiverdata></rturiverdata>
+				</view>
+				<view v-show="current === 2">
+					<rtugrounddata></rtugrounddata>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import rtugrounddata from '@/pages/realdata/rtugrounddata.vue'
+	import rturaindata from '@/pages/realdata/rturaindata.vue'
+	import rturiverdata from '@/pages/realdata/rturiverdata.vue'
+
+	export default {
+		components: {
+			rtugrounddata,
+			rturaindata,
+			rturiverdata,
+		},
+		data() {
+			return {
+				title: '实时数据',
+				navButton: [],
+				items: ['雨情数据', '水情数据', '墒情数据'],
+				current: 0,
+			};
+		},
+		onLoad() {
+			const navBtnlist = [{
+					name: '雨情数据',
+					img: '/static/images/home/statistics.png',
+					url: '/pages/rtu-manage/rturaindata'
+				},
+				{
+					name: '水情数据',
+					img: '/static/images/home/statistics.png',
+					url: '/pages/rtu-manage/rturiverdata'
+				},
+				{
+					name: '墒情数据',
+					img: '/static/images/manage/statistics.png',
+					url: '/pages/rtu-manage/rtugrounddata'
+				}
+			];
+			this.navButton = navBtnlist;
+		},
+		onShow() {
+
+		},
+		methods: {
+			onClickItem(e) {
+				if (this.current != e.currentIndex) {
+					this.current = e.currentIndex;
+				}
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+		}
+	};
+</script>
+
+<style lang="scss">
+
+</style>

+ 277 - 0
pages/realdata/rtugrounddata.vue

@@ -0,0 +1,277 @@
+<!--
+ * @Title: 
+ * @Description: 墒情数据
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<view class="container">
+			<uni-section title="查询" titleFontSize="0.8rem" type="line">
+				<view class="search-block">
+					<view class="adcd-adnm">
+						<uni-data-picker placeholder="请选择地区" popup-title="请选择所在地区" :localdata="regionTree"
+							v-model="selectedTreeNode" @change="onTreeChange" @nodeclick="onTreeNodeClick"
+							@popupopened="onTreePopupOpened" @popupclosed="onTreePopupClosed" :clear-icon="false">
+						</uni-data-picker>
+					</view>
+					<view class="rtu-code">
+						<uni-easyinput :styles="inputStyles" @input="searchRtuCodeValClear" prefixIcon="search"
+							v-model="searchRtuCodeVal" placeholder="请输入测站编码">
+						</uni-easyinput>
+					</view>
+					<view class="rtu-name">
+						<uni-easyinput :styles="inputStyles" @input="searchRtuNameValClear" prefixIcon="search"
+							v-model="searchRtuNameVal" placeholder="请输入测站名称">
+						</uni-easyinput>
+					</view>
+					<view class="submit-btn">
+						<button type="default" @click="search">查 询</button>
+					</view>
+				</view>
+			</uni-section>
+			<uni-table ref="table" :loading="loading" border stripe type="" emptyText="暂无更多数据">
+				<uni-tr>
+					<uni-th width="120" align="center">上报时间</uni-th>
+					<uni-th align="center">测站名称</uni-th>
+					<uni-th width="120" align="center">墒情数据</uni-th>
+				</uni-tr>
+				<uni-tr v-for="item in tableData" :key="item.id">
+					<uni-td>
+						<view style="text-align: center;">{{ item.tm }}</view>
+					</uni-td>
+					<uni-td>
+						<view style="text-align: center;">
+							{{ item.rtuName }}/{{ item.rtuCode }}
+						</view>
+				
+					</uni-td>
+					<uni-td align="center">
+						<view class="uni-group">
+							<button class="uni-button" size="mini" type="default"
+								@click="onGroundInfoClick(item)">墒情</button>
+						</view>
+					</uni-td>
+				</uni-tr>
+			</uni-table>
+			<view class="pagination-block">
+				<uni-pagination :page-size="pageSize" :current="pageCurrent" :total="total" @change="pageChange"
+					prev-text="前一页" next-text="后一页" />
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	export default {
+		components: {},
+		onLoad(option) {
+			this.selectedIndexs = [];
+		},
+		created() {
+			this.getRegionTree();
+		},
+		data() {
+			return {
+				title: '墒情实时数据',
+				regionTree: [],
+				regionCode: '',
+				selectedTreeNode: '',
+				searchRtuNameVal: '',
+				searchRtuCodeVal: '',
+				query: {},
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				},
+				// 每页数据量
+				pageSize: 10,
+				// 当前页
+				pageCurrent: 1,
+				// 数据总量
+				total: 0,
+				loading: false,
+				selectedIndexs: [],
+				tableData: [],
+			}
+		},
+		computed: {
+		},
+		onShow() {},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.$refs.table.clearSelection()
+				//this.selectedIndexs.length = 0
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			onTreeNodeClick(node) {
+				console.log(JSON.stringify(node))
+			},
+			onTreePopupOpened(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreePopupClosed(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreeChange(e) {
+				console.log(JSON.stringify(e))
+				let nodes = e.detail.value;
+				if (nodes.length > 0) {
+					let node = nodes[nodes.length - 1];
+					this.regionCode = node.value;
+					this.query = {};
+					this.query['adCode'] = this.regionCode;
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+				} else {
+					this.regionCode = '';
+					this.query = {};
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+				}
+			},
+			//录入查询
+			search() {
+				this.pageCurrent = 1;
+				//	console.log(JSON.stringify(res))
+				let params = {};
+				if (this.searchRtuCodeVal.length > 0) {
+					params['rtuCode'] = this.searchRtuCodeVal;
+				}
+				if (this.searchRtuNameVal.length > 0) {
+					params['rtuName'] = this.searchRtuNameVal;
+				}
+				this.getPage(params);
+			},
+			searchRtuNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuNameVal = '';
+					if (this.searchRtuNameVal.length == 0) {
+						let params = {};
+						if (this.searchRtuCodeVal.length > 0) {
+							params['rtuCode'] = this.searchRtuCodeVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			searchRtuCodeValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuCodeVal = '';
+					if (this.searchRtuCodeVal.length == 0) {
+						let params = {};
+						if (this.searchRtuNameVal.length > 0) {
+							params['rtuName'] = this.searchRtuNameVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			// 多选处理
+			selectedItems() {
+				return this.selectedIndexs.map(i => this.tableData[i])
+			},
+			// 多选
+			selectionChange(e) {
+				console.log(e.detail.index)
+				this.selectedIndexs = e.detail.index
+			},
+			//批量删除
+			delTable() {
+				//console.log(this.selectedItems())
+			},
+			getRegionTree() {
+				var that = this;
+				http.request({
+					url: '/galaxy-business/baseinfo/region/tree',
+					method: 'GET',
+				}).then(res => {
+					if (res.data != null) {
+						that.regionTree = res.data;
+						that.selectedTreeNode = that.regionTree[0].value;
+						that.regionCode = that.regionTree[0].value;
+						that.query = {};
+						that.query['adCode'] = that.regionCode;
+						//that.orgId = that.projectTree[0].orgId;
+						//that.projectId = that.projectTree[0].projectId;
+						that.getPage();
+						//that.getCountInfo(that.regionCode);
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			// 获取数据
+			getPage(params = {}) {
+				this.loading = true
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				const isSubmit = '0';
+				let postData = Object.assign(params, this.query);
+				var that = this;
+				http.request({
+					url: '/galaxy-business/rtu/data/ground/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+						isSubmit
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.tableData = res.data.records;
+						that.total = res.data.total;
+					}
+					this.loading = false
+				}).catch(err => {
+					console.log(err)
+					this.loading = false
+				})
+			},
+			onGroundInfoClick(item) {
+				console.log(item.id + " " + item.rtuName)
+				uni.navigateTo({
+					url: '/pages/realdata/rtugrounddatadetail?id=' + item.id
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.wrap {
+		padding: 0 0 100rpx;
+	}
+
+	.container {
+		background-color: #f7f7f7;
+		min-height: 100vh;
+		overflow: hidden;
+	}
+</style>

+ 146 - 0
pages/realdata/rtugrounddatadetail.vue

@@ -0,0 +1,146 @@
+<!--
+ * @Title: 
+ * @Description: 墒情详情数据
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" status-bar left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view>
+			<uni-table ref="table" :loading="loading" border stripe type="" emptyText="暂无更多数据">
+				<uni-tr>
+					<uni-th width="240" align="center">含水量</uni-th>
+					<uni-th align="center">数值</uni-th>
+				</uni-tr>
+				<uni-tr v-for="(item,index) in tableData" :key="index">
+					<uni-td>
+						<view style="text-align: center;">{{ item.name }}</view>
+					</uni-td>
+					<uni-td align="center">
+						<view v-if="item.value" style="text-align: center;color: coral;">{{ item.value }}</view>
+						<view v-else style="text-align: center;color: coral;">--</view>
+					</uni-td>
+				</uni-tr>
+			</uni-table>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	export default {
+		components: {},
+		onLoad(option) {
+			this.selectedIndexs = [];
+			this.id = option.id;
+			this.getData();
+		},
+		data() {
+			return {
+				id: '',
+				title: '墒情数据详情',
+				tableData: [],
+				loading: false,
+			}
+		},
+		computed: {},
+		onShow() {},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			// 获取数据
+			getData() {
+				let that = this;
+				this.loading = true
+				let params = {};
+				params['id'] = this.id;
+				http.request({
+					url: '/galaxy-business/rtu/data/ground/detail',
+					method: 'GET',
+					data: params,
+				}).then(res => {
+					if (res.data != null) {
+						let values = [];
+						let v1 = {
+							'name': '垂线平均含水量',
+							'value': res.data.vtavslm
+						};
+						values.push(v1);
+						let v2 = {
+							'name': '表层含水量',
+							'value': res.data.srlslm
+						};
+						values.push(v2);
+						let slm10 = {
+							'name': '10CM深度含水量',
+							'value': res.data.slm10
+						};
+						values.push(slm10);
+						let slm20 = {
+							'name': '20CM深度含水量',
+							'value': res.data.slm20
+						};
+						values.push(slm20);
+						let slm30 = {
+							'name': '30CM深度含水量',
+							'value': res.data.slm30
+						};
+						values.push(slm30);
+						let slm40 = {
+							'name': '40CM深度含水量',
+							'value': res.data.slm40
+						};
+						values.push(slm40);
+						let slm60 = {
+							'name': '60CM深度含水量',
+							'value': res.data.slm60
+						};
+						values.push(slm60);
+						let slm80 = {
+							'name': '80CM深度含水量',
+							'value': res.data.slm80
+						};
+						values.push(slm80);
+						let slm100 = {
+							'name': '100CM深度含水量',
+							'value': res.data.slm100
+						};
+						values.push(slm100);
+						that.tableData = values;
+						that.total = values.length;
+						console.log('data', values);
+					}
+					this.loading = false
+				}).catch(err => {
+					console.log(err)
+					this.loading = false
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.container {
+		background-color: #f7f7f7;
+		min-height: 100vh;
+		overflow: hidden;
+	}
+</style>

+ 349 - 0
pages/realdata/rturaindata.vue

@@ -0,0 +1,349 @@
+<!--
+ * @Title: 
+ * @Description: 雨情数据
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<view class="container">
+			<uni-section title="查询" titleFontSize="0.8rem" type="line" style="padding-left: 0px;padding-right: 0px;">
+				<view class="search-block">
+					<view class="adcd-adnm">
+						<uni-data-picker placeholder="请选择地区" popup-title="请选择所在地区" :localdata="regionTree"
+							v-model="selectedTreeNode" @change="onTreeChange" @nodeclick="onTreeNodeClick"
+							@popupopened="onTreePopupOpened" @popupclosed="onTreePopupClosed" :clear-icon="false">
+						</uni-data-picker>
+					</view>
+					<view class="rtu-code">
+						<uni-easyinput :styles="inputStyles" @input="searchRtuCodeValClear" prefixIcon="search"
+							v-model="searchRtuCodeVal" placeholder="请输入测站编码">
+						</uni-easyinput>
+					</view>
+					<view class="rtu-name">
+						<uni-easyinput :styles="inputStyles" @input="searchRtuNameValClear" prefixIcon="search"
+							v-model="searchRtuNameVal" placeholder="请输入测站名称">
+						</uni-easyinput>
+					</view>
+					<view class="submit-btn">
+						<button type="default" @click="search">查 询</button>
+					</view>
+				</view>
+			</uni-section>
+			<uni-group>
+				<!-- <uni-card title="统计时间" :is-shadow="false" style="margin-left: 0px;margin-right: 0px;"> -->
+				<radio-group @change="onRainCountTypeRadioChange" class="view-flex-rs">
+					<label style="margin-right: 5px;margin-bottom: 5px;;width:100px;" class="view-flex-inline"
+						v-for="(item, index) in rainCountType.items" :key="item.id">
+						<view>
+							<radio :value="item.id" :checked="index === rainCountType.value" />
+						</view>
+						<view style="font-size: 0.7rem;">{{item.dictValue}}</view>
+					</label>
+				</radio-group>
+				<!-- 	</uni-card> -->
+			</uni-group>
+			<uni-table ref="table" :loading="loading" border stripe type="" emptyText="暂无更多数据">
+				<uni-tr>
+					<uni-th align="center" width="120">上报时间</uni-th>
+					<uni-th align="center" width="120">测站名称</uni-th>
+					<uni-th align="center" width="70">时段长</uni-th>
+					<uni-th align="center">降水量</uni-th>
+				</uni-tr>
+				<uni-tr v-for="(item, index) in tableData" :key="index">
+					<uni-td align="center">
+						<view style="text-align: center;">{{ item.tm }}</view>
+					</uni-td align="center">
+					<uni-td>
+						<view style="text-align: center;">
+							{{ item.rtuName }}/{{ item.rtuCode }}
+						</view>
+					</uni-td>
+					<uni-td align="center">
+						<!-- 	<view v-if="item.intv === 1.0" style="text-align: center;color: coral;">1小时</view>
+						<view v-else style="text-align: center;color: coral;">5分钟</view> -->
+						<view style="text-align: center;color: coral;">{{item.intvLable}}</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-align: center;color: coral;">{{ item.drp }}</view>
+					</uni-td>
+				</uni-tr>
+			</uni-table>
+			<view class="pagination-block">
+				<uni-pagination :page-size="pageSize" :current="pageCurrent" :total="total" @change="pageChange"
+					prevText="前一页" nextText="后一页" />
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	export default {
+		components: {},
+		onLoad(option) {
+
+		},
+		created() {
+			this.getRegionTree();
+		},
+		data() {
+			return {
+				title: '雨水情实时数据',
+				regionTree: [],
+				regionCode: '',
+				selectedTreeNode: '',
+				searchRtuNameVal: '',
+				searchRtuCodeVal: '',
+				query: {},
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				},
+				// 每页数据量
+				pageSize: 10,
+				// 当前页
+				pageCurrent: 1,
+				// 数据总量
+				total: 0,
+				loading: false,
+				tableData: [],
+				rainCountType: {
+					items: [{
+						'id': '0',
+						'dictValue': '默认'
+					}, {
+						'id': '1',
+						'dictValue': '近1小时'
+					}, {
+						'id': '2',
+						'dictValue': '近3小时'
+					}, {
+						'id': '3',
+						'dictValue': '近6小时'
+					}, {
+						'id': '4',
+						'dictValue': '近12小时'
+					}, {
+						'id': '5',
+						'dictValue': '近24小时'
+					}],
+					value: 0,
+				}
+			}
+		},
+		computed: {},
+		onShow() {},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.$refs.table.clearSelection()
+				//this.selectedIndexs.length = 0
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			onRainCountTypeRadioChange: function(evt) {
+				for (let i = 0; i < this.rainCountType.items.length; i++) {
+					if (this.rainCountType.items[i].id === evt.detail.value) {
+						this.rainCountType.value = i;
+						this.pageCurrent = 1;
+						this.getPage();
+						break;
+					}
+				}
+			},
+			onTreeNodeClick(node) {
+				console.log(JSON.stringify(node))
+			},
+			onTreePopupOpened(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreePopupClosed(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreeChange(e) {
+				console.log(JSON.stringify(e))
+				let nodes = e.detail.value;
+				if (nodes.length > 0) {
+					let node = nodes[nodes.length - 1];
+					this.regionCode = node.value;
+					this.query = {};
+					this.query['adCode'] = this.regionCode;
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+
+				} else {
+					this.regionCode = '';
+					this.query = {};
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+
+				}
+			},
+			//录入查询
+			search() {
+				this.pageCurrent = 1;
+				//	console.log(JSON.stringify(res))
+				let params = {};
+				if (this.searchRtuCodeVal.length > 0) {
+					params['rtuCode'] = this.searchRtuCodeVal;
+				}
+				if (this.searchRtuNameVal.length > 0) {
+					params['rtuName'] = this.searchRtuNameVal;
+				}
+				this.getPage(params);
+			},
+			searchRtuNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuNameVal = '';
+					if (this.searchRtuNameVal.length == 0) {
+						let params = {};
+						if (this.searchRtuCodeVal.length > 0) {
+							params['rtuCode'] = this.searchRtuCodeVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			searchRtuCodeValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuCodeVal = '';
+					if (this.searchRtuCodeVal.length == 0) {
+						let params = {};
+						if (this.searchRtuNameVal.length > 0) {
+							params['rtuName'] = this.searchRtuNameVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			// 多选处理
+			selectedItems() {
+				return this.selectedIndexs.map(i => this.tableData[i])
+			},
+			// 多选
+			selectionChange(e) {
+				console.log(e.detail.index)
+				this.selectedIndexs = e.detail.index
+			},
+			//批量删除
+			delTable() {
+				//console.log(this.selectedItems())
+			},
+			getRegionTree() {
+				var that = this;
+				http.request({
+					url: '/galaxy-business/baseinfo/region/tree',
+					method: 'GET',
+				}).then(res => {
+					if (res.data != null) {
+						that.regionTree = res.data;
+						that.selectedTreeNode = that.regionTree[0].value;
+						that.regionCode = that.regionTree[0].value;
+						that.query = {};
+						that.query['adCode'] = that.regionCode;
+						//that.orgId = that.projectTree[0].orgId;
+						//that.projectId = that.projectTree[0].projectId;
+						that.getPage();
+						//that.getCountInfo(that.regionCode);
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			// 获取数据
+			getPage(params = {}) {
+				this.loading = true;
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				const isSubmit = '0';
+				if (this.rainCountType.value == 1) {
+					params['rainCountType'] = 1;
+				} else if (this.rainCountType.value == 2) {
+					params['rainCountType'] = 3;
+				} else if (this.rainCountType.value == 3) {
+					params['rainCountType'] = 6;
+				} else if (this.rainCountType.value == 4) {
+					params['rainCountType'] = 12;
+				} else if (this.rainCountType.value == 5) {
+					params['rainCountType'] = 24;
+				} else {
+					params['rainCountType'] = 0;
+				}
+
+				let postData = Object.assign(params, this.query);
+				console.log(JSON.stringify(postData))
+				var that = this;
+				http.request({
+					url: '/galaxy-business/rtu/data/rain/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+						isSubmit
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.tableData = res.data.records;
+						that.total = res.data.total;
+					}
+					this.loading = false
+				}).catch(err => {
+					console.log(err)
+					this.loading = false
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.wrap {
+		padding: 0 0 100rpx;
+	}
+
+	.container {
+		background-color: #f7f7f7;
+		min-height: 100vh;
+		overflow: hidden;
+	}
+
+	.view-flex-rs {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+		align-items: center;
+		flex-wrap: wrap;
+	}
+
+	.view-flex-inline {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+		align-items: center;
+
+	}
+</style>

+ 267 - 0
pages/realdata/rturiverdata.vue

@@ -0,0 +1,267 @@
+<!--
+ * @Title: 
+ * @Description: 河道数据
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<view class="container">
+			<uni-section title="查询" titleFontSize="0.8rem" type="line" style="padding-left: 0px;padding-right: 0px;">
+				<view class="search-block">
+					<view class="adcd-adnm">
+						<uni-data-picker placeholder="请选择地区" popup-title="请选择所在地区" :localdata="regionTree"
+							v-model="selectedTreeNode" @change="onTreeChange" @nodeclick="onTreeNodeClick"
+							@popupopened="onTreePopupOpened" @popupclosed="onTreePopupClosed" :clear-icon="false">
+						</uni-data-picker>
+					</view>
+					<view class="rtu-code">
+						<uni-easyinput :styles="inputStyles" @input="searchRtuCodeValClear" prefixIcon="search"
+							v-model="searchRtuCodeVal" placeholder="请输入测站编码">
+						</uni-easyinput>
+					</view>
+					<view class="rtu-name">
+						<uni-easyinput :styles="inputStyles" @input="searchRtuNameValClear" prefixIcon="search"
+							v-model="searchRtuNameVal" placeholder="请输入测站名称">
+						</uni-easyinput>
+					</view>
+					<view class="submit-btn">
+						<button type="default" @click="search">查 询</button>
+					</view>
+				</view>
+			</uni-section>
+			<uni-table ref="table" :loading="loading" border stripe type="" emptyText="暂无更多数据">
+				<uni-tr>
+					<uni-th width="120" align="center">上报时间</uni-th>
+					<uni-th align="center">测站名称</uni-th>
+					<uni-th width="120" align="center">水位</uni-th>
+				</uni-tr>
+				<uni-tr v-for="(item, index) in tableData" :key="index">
+					<uni-td>
+						<view style="text-align: center;">{{ item.wlTm }}</view>
+					</uni-td>
+					<uni-td>
+						<view style="text-align: center;">
+							{{ item.rtuName }}/{{ item.rtuCode }}
+						</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-align: center;color: coral;">{{ item.wl }}</view>
+					</uni-td>
+				</uni-tr>
+			</uni-table>
+			<view class="pagination-block">
+				<uni-pagination :page-size="pageSize" :current="pageCurrent" :total="total" @change="pageChange"
+					prev-text="前一页" next-text="后一页" />
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	export default {
+		components: {},
+		onLoad(option) {
+			this.selectedIndexs = [];
+		},
+		created() {
+			this.getRegionTree();
+		},
+		data() {
+			return {
+				title: '水情实时数据',
+				regionTree: [],
+				regionCode: '',
+				selectedTreeNode: '',
+				searchRtuNameVal: '',
+				searchRtuCodeVal: '',
+				query: {},
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				},
+				// 每页数据量
+				pageSize: 10,
+				// 当前页
+				pageCurrent: 1,
+				// 数据总量
+				total: 0,
+				loading: false,
+				selectedIndexs: [],
+				tableData: [],
+			}
+		},
+		computed: {},
+		onShow() {},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.$refs.table.clearSelection()
+				//this.selectedIndexs.length = 0
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			onTreeNodeClick(node) {
+				console.log(JSON.stringify(node))
+			},
+			onTreePopupOpened(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreePopupClosed(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreeChange(e) {
+				console.log(JSON.stringify(e))
+				let nodes = e.detail.value;
+				if (nodes.length > 0) {
+					let node = nodes[nodes.length - 1];
+					this.regionCode = node.value;
+					this.query = {};
+					this.query['adCode'] = this.regionCode;
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+
+				} else {
+					this.regionCode = '';
+					this.query = {};
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+				}
+			},
+			//录入查询
+			search() {
+				this.pageCurrent = 1;
+				//	console.log(JSON.stringify(res))
+				let params = {};
+				if (this.searchRtuCodeVal.length > 0) {
+					params['rtuCode'] = this.searchRtuCodeVal;
+				}
+				if (this.searchRtuNameVal.length > 0) {
+					params['rtuName'] = this.searchRtuNameVal;
+				}
+				this.getPage(params);
+			},
+			searchRtuNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuNameVal = '';
+					if (this.searchRtuNameVal.length == 0) {
+						let params = {};
+						if (this.searchRtuCodeVal.length > 0) {
+							params['rtuCode'] = this.searchRtuCodeVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			searchRtuCodeValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuCodeVal = '';
+					if (this.searchRtuCodeVal.length == 0) {
+						let params = {};
+						if (this.searchRtuNameVal.length > 0) {
+							params['rtuName'] = this.searchRtuNameVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			// 多选处理
+			selectedItems() {
+				return this.selectedIndexs.map(i => this.tableData[i])
+			},
+			// 多选
+			selectionChange(e) {
+				console.log(e.detail.index)
+				this.selectedIndexs = e.detail.index
+			},
+			//批量删除
+			delTable() {
+				//console.log(this.selectedItems())
+			},
+			getRegionTree() {
+				var that = this;
+				http.request({
+					url: '/galaxy-business/baseinfo/region/tree',
+					method: 'GET',
+				}).then(res => {
+					if (res.data != null) {
+						that.regionTree = res.data;
+						that.selectedTreeNode = that.regionTree[0].value;
+						that.regionCode = that.regionTree[0].value;
+						that.query = {};
+						that.query['adCode'] = that.regionCode;
+						//that.orgId = that.projectTree[0].orgId;
+						//that.projectId = that.projectTree[0].projectId;
+						that.getPage();
+						//that.getCountInfo(that.regionCode);
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			// 获取数据
+			getPage(params = {}) {
+				this.loading = true
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				const isSubmit = '0';
+				let postData = Object.assign(params, this.query);
+				var that = this;
+				http.request({
+					url: '/galaxy-business/rtu/data/river/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+						isSubmit
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.tableData = res.data.records;
+						that.total = res.data.total;
+					}
+					this.loading = false
+				}).catch(err => {
+					console.log(err)
+					this.loading = false
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.wrap {
+		padding: 0 0 100rpx;
+	}
+
+	.container {
+		background-color: #f7f7f7;
+		min-height: 100vh;
+		overflow: hidden;
+	}
+</style>

+ 116 - 0
pages/report-forms/checkorderreportcount.vue

@@ -0,0 +1,116 @@
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-table ref="order_table" border stripe type="" emptyText="暂无更多数据">
+				<uni-tr>
+					<uni-th width="140" align="center">
+						<view style="text-align: center;color: black;">运维人员姓名</view>
+					</uni-th>
+					<uni-th align="center">
+						<view style="text-align: center;color: black;">任务数量</view>
+					</uni-th>
+					<uni-th align="center">
+						<view style="text-align: center;color: black;">处理中</view>
+					</uni-th>
+					<uni-th align="center">
+						<view style="text-align: center;color: black;">已处理</view>
+					</uni-th>
+				</uni-tr>
+				<uni-tr v-for="(item, index) in tableData" :key="index">
+					<uni-td>
+						<view style="text-align: center;">{{ item.servicePersonName }}</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-decoration-line: underline;text-align: center;color: coral;"
+							@click="onCheckOrderCountClick(item)">{{ item.orderCount }}</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-decoration-line: underline;text-align: center;color: coral;"
+							@click="onCheckOrderProcessCountClick(item)">{{ item.processingOrderCount }}
+						</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-decoration-line: underline;text-align: center;color: coral;"
+							@click="onCheckOrderReportCountClick(item)">{{ item.reportOrderCount }}
+						</view>
+					</uni-td>
+				</uni-tr>
+			</uni-table>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	export default {
+		components: {
+		},
+		onLoad(option) {
+			this.getCountInfo();
+		},
+		data() {
+			return {
+				title: '维修任务统计报表',
+				tableData: [],
+			}
+		},
+		computed: {
+		},
+		onShow() {
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onCheckOrderCountClick(item){
+				var url = '/pages/check-order/servicepersoncheckorderlist?type=1&userId='+item.userId;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onCheckOrderProcessCountClick(item){
+				var url = '/pages/check-order/servicepersoncheckorderlist?type=2&userId='+item.userId;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onCheckOrderReportCountClick(item){
+				var url = '/pages/check-order/servicepersoncheckorderlist?type=3&userId=' + item.userId;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			getCountInfo() {
+				var that = this;
+				http.request({
+					url: '/galaxy-business/rtu/check/order/statistics',
+					method: 'GET',
+				}).then(res => {
+					if (res.data != null) {
+						that.tableData = res.data;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+
+</style>
+
+<style lang="scss" scoped>
+	.wrap {
+		padding: 0 0 100rpx;
+	}
+</style>

+ 111 - 0
pages/report-forms/contact.vue

@@ -0,0 +1,111 @@
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<view v-for="(item,index) in list" :key="item.id">
+				<uni-group :title="item.orgName" margin-top="20">
+					<uni-table ref="order_table" border stripe type="" emptyText="暂无更多数据">
+						<uni-tr>
+							<uni-th width="180" align="center">
+								<view style="text-align: center;color: black;">姓名</view>
+							</uni-th>
+							<uni-th align="center">
+								<view style="text-align: center;color: black;">联系电话</view>
+							</uni-th>
+						</uni-tr>
+						<uni-tr v-for="person in item.servicePersonVOList" :key="person.id">
+							<uni-td>
+								<view style="text-align: center;">{{ person.personName }}</view>
+							</uni-td>
+							<uni-td align="center">
+								<view style="text-align: center;color: cornflowerblue;text-decoration:underline;"
+									@click="call(person.contactPhone)">{{ person.contactPhone }}</view>
+							</uni-td>
+						</uni-tr>
+					</uni-table>
+				</uni-group>
+			</view>
+		</view>
+	</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+
+	export default {
+		components: {},
+		onLoad(option) {
+			this.getContact();
+		},
+		data() {
+			return {
+				list: [],
+				title: '人员通讯录',
+				desc: '',
+				tableData: [],
+				equipmentInspectionTableData: [],
+				pageSize: 10,
+				// 当前页
+				pageCurrent: 1,
+				// 数据总量
+				total: 0,
+				orgId: '',
+				projectId: '',
+				projectTree: [],
+				selectedTreeNode: '',
+				searchVal: '',
+			}
+		},
+		computed: {},
+		onShow() {},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			getContact() {
+				var that = this;
+				http.request({
+					url: '/galaxy-business/serviceperson/contact',
+					method: 'GET',
+				}).then(res => {
+					if (res.data != null) {
+						console.log(JSON.stringify(res.data))
+						that.list = res.data;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			call(phone) {
+				console.log(phone)
+				uni.showModal({
+					content: '是否需要拨打[' + phone + ']?',
+					showCancel: true,
+					success(res) {
+						if (res.confirm) {
+							uni.makePhoneCall({
+								phoneNumber: phone
+							});
+						}
+					}
+				});
+			}
+		}
+	}
+</script>
+
+<style>
+
+</style>
+
+<style lang="scss" scoped>
+
+</style>

+ 128 - 0
pages/report-forms/inspectionreportcount.vue

@@ -0,0 +1,128 @@
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-table ref="equipment_inspection_table" border stripe type="" emptyText="暂无更多数据">
+				<uni-tr>
+					<uni-th width="140" align="center">
+						<view style="text-align: center;color: black;">巡检填报人</view>
+					</uni-th>
+					<uni-th align="center">
+						<view style="text-align: center;color: black;">汛前巡检</view>
+					</uni-th>
+					<uni-th align="center">
+						<view style="text-align: center;color: black;">汛中(一)巡检</view>
+					</uni-th>
+					<uni-th align="center">
+						<view style="text-align: center;color: black;">汛中(二)巡检</view>
+					</uni-th>
+				</uni-tr>
+				<uni-tr v-for="(item, index) in tableData" :key="index">
+					<uni-td>
+						<view style="text-align: center;">{{ item.servicePersonName }}</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-decoration-line: underline;text-align: center;color: coral;"
+							@click="onBeforeRainInspectionCountClick(item)">
+							{{ item.beforeRainInspectionCount }}
+						</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-decoration-line: underline;text-align: center;color: coral;"
+							@click="onRainFirstInspectionCountClick(item)">
+							{{ item.firstRainInspectionCount }}
+						</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-decoration-line: underline;text-align: center;color: coral;"
+							@click="onRainSecondInspectionCountClick(item)">
+							{{ item.sencodRainInspectionCount }}
+						</view>
+					</uni-td>
+				</uni-tr>
+			</uni-table>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+
+	export default {
+		components: {
+		},
+		onLoad(option) {
+			this.getCountInfo();
+		},
+		data() {
+			return {
+				title: '设备巡检统计报表',
+				tableData: [],
+			}
+		},
+		computed: {
+		},
+		onShow() {
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBeforeRainInspectionCountClick(item) {
+				var url =
+					'/pages/equipment-inspection/servicepersonfinishedinspectionreportlist?rainSeasonKind=1&userId=' + item
+					.userId;
+				uni.navigateTo({
+					url: url
+				})
+
+			},
+			onRainFirstInspectionCountClick(item) {
+				var url =
+					'/pages/equipment-inspection/servicepersonfinishedinspectionreportlist?rainSeasonKind=2&userId=' + item
+					.userId;
+				uni.navigateTo({
+					url: url
+				})
+
+			},
+			onRainSecondInspectionCountClick(item) {
+				var url =
+					'/pages/equipment-inspection/servicepersonfinishedinspectionreportlist?rainSeasonKind=3&userId=' + item
+					.userId;
+				uni.navigateTo({
+					url: url
+				})
+
+			},
+			getCountInfo() {
+				var that = this;
+				http.request({
+					url: '/galaxy-business/equipment/inspection/person/statistics',
+					method: 'GET',
+				}).then(res => {
+					if (res.data != null) {
+						that.tableData = res.data;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+
+</style>
+
+<style lang="scss" scoped>
+
+</style>

+ 117 - 0
pages/report-forms/orgcheckorderreportcount.vue

@@ -0,0 +1,117 @@
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-table ref="order_table" border stripe type="" emptyText="暂无更多数据">
+				<uni-tr>
+					<uni-th width="140" align="center">机构名称</uni-th>
+					<uni-th align="center">任务数量</uni-th>
+					<uni-th align="center">未确认</uni-th>
+					<uni-th align="center">处理中</uni-th>
+					<uni-th align="center">已处理</uni-th>
+				</uni-tr>
+				<uni-tr v-for="(item, index) in tableData" :key="index">
+					<uni-td>
+						<view style="text-align: center;">{{ item.orgName }}</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-decoration-line: underline;text-align: center;color: coral;"
+							@click="onCheckOrderCountClick(item)">{{ item.orderCount }}</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-decoration-line: underline;text-align: center;color: coral;"
+							@click="onCheckOrderUnconfirmCountClick(item)">{{ item.unconfirmOrderCount }}
+						</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-decoration-line: underline;text-align: center;color: coral;"
+							@click="onCheckOrderProcessCountClick(item)">{{ item.processingOrderCount }}
+						</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-decoration-line: underline;text-align: center;color: coral;"
+							@click="onCheckOrderReportCountClick(item)">{{ item.reportOrderCount }}
+						</view>
+					</uni-td>
+
+				</uni-tr>
+			</uni-table>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+
+	export default {
+		components: {},
+		onLoad(option) {
+			this.getCountInfo();
+		},
+		data() {
+			return {
+				title: '维修任务统计报表',
+				tableData: [],
+			}
+		},
+		computed: {},
+		onShow() {},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onCheckOrderCountClick(item) {
+				var url = '/pages/check-order/companycheckorderlist?type=1&deptId=' + item.deptId;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onCheckOrderUnconfirmCountClick(item) {
+				var url = '/pages/check-order/companycheckorderlist?type=2&deptId=' + item.deptId;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onCheckOrderProcessCountClick(item) {
+				var url = '/pages/check-order/companycheckorderlist?type=3&deptId=' + item.deptId;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onCheckOrderReportCountClick(item){
+				var url = '/pages/check-order/companycheckorderlist?type=4&deptId=' + item.deptId;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			getCountInfo() {
+				var that = this;
+				http.request({
+					url: '/galaxy-business/rtu/check/order/org/statistics',
+					method: 'GET',
+				}).then(res => {
+					if (res.data != null) {
+						that.tableData = res.data;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+
+</style>
+
+<style lang="scss" scoped>
+
+</style>

+ 163 - 0
pages/report-forms/orginspectionreportcount.vue

@@ -0,0 +1,163 @@
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-table ref="equipment_inspection_table" border stripe type="" emptyText="暂无更多数据">
+				<uni-tr>
+					<uni-th width="140" align="center">
+						<view style="text-align: center;color: black;">机构名称</view>
+					</uni-th>
+					<uni-th align="center">
+						<view style="text-align: center;color: black;">测站数量</view>
+					</uni-th>
+					<uni-th align="center">
+						<view style="text-align: center;color: black;">本年度已巡检</view>
+					</uni-th>
+					<uni-th align="center">
+						<view style="text-align: center;color: black;">汛前巡检</view>
+					</uni-th>
+					<uni-th align="center">
+						<view style="text-align: center;color: black;">汛中(一)巡检</view>
+					</uni-th>
+					<uni-th align="center">
+						<view style="text-align: center;color: black;">汛中(二)巡检</view>
+					</uni-th>
+				</uni-tr>
+				<uni-tr v-for="(item, index) in tableData" :key="index">
+					<uni-td>
+						<view style="text-align: center;">{{ item.orgName }}</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-align: center;color: gray;" >
+							{{ item.rtuCount }}
+						</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-decoration-line: underline;text-align: center;color: coral; " @click="onYearInspectionCountClick(item)">
+							{{ item.inspectionCount }}
+						</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-decoration-line: underline;text-align: center;color: coral;"
+							@click="onBeforeRainInspectionCountClick(item)">
+							{{ item.beforeRainInspectionCount }}
+						</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-decoration-line: underline;text-align: center;color: coral;"
+							@click="onRainFirstInspectionCountClick(item)">
+							{{ item.firstRainInspectionCount }}
+						</view>
+					</uni-td>
+					<uni-td align="center">
+						<view style="text-decoration-line: underline;text-align: center;color: coral;"
+							@click="onRainSecondInspectionCountClick(item)">
+							{{ item.sencodRainInspectionCount }}
+						</view>
+					</uni-td>
+				</uni-tr>
+			</uni-table>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+
+	export default {
+		components: {
+		},
+		onLoad(option) {
+			this.getCountInfo();
+		},
+		data() {
+			return {
+				title: '设备巡检统计报表',
+				tableData: [],
+			}
+		},
+		computed: {
+		},
+		onShow() {
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onInspectionCountClick(item) {
+				var url =
+					'/pages/equipment-inspection/companyfinishedinspectionreportlist?type=1&deptId=' + item
+					.deptId;
+				uni.navigateTo({
+					url: url
+				})
+
+			},
+			onYearInspectionCountClick(item) {
+				var url =
+					'/pages/equipment-inspection/companyfinishedinspectionreportlist?rainSeasonKind=0&deptId=' + item
+					.deptId;
+				uni.navigateTo({
+					url: url
+				})
+
+			},
+			onBeforeRainInspectionCountClick(item) {
+				console.log(JSON.stringify(item))
+				var url =
+					'/pages/equipment-inspection/companyfinishedinspectionreportlist?rainSeasonKind=1&deptId=' + item
+					.deptId;
+				uni.navigateTo({
+					url: url
+				})
+
+			},
+			onRainFirstInspectionCountClick(item) {
+				var url =
+					'/pages/equipment-inspection/companyfinishedinspectionreportlist?rainSeasonKind=2&deptId=' + item
+					.deptId;
+				uni.navigateTo({
+					url: url
+				})
+
+			},
+			onRainSecondInspectionCountClick(item) {
+				var url =
+					'/pages/equipment-inspection/companyfinishedinspectionreportlist?rainSeasonKind=3&deptId=' + item
+					.deptId;
+				uni.navigateTo({
+					url: url
+				})
+
+			},
+			getCountInfo() {
+				var that = this;
+				http.request({
+					url: '/galaxy-business/equipment/inspection/org/statistics',
+					method: 'GET',
+				}).then(res => {
+					if (res.data != null) {
+						that.tableData = res.data;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+
+</style>
+
+<style lang="scss" scoped>
+
+</style>

+ 219 - 0
pages/rtu-manage/rtudetail.vue

@@ -0,0 +1,219 @@
+<!--
+ * @Title: 
+ * @Description: 测站基础信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-section title="测站信息" titleFontSize="0.8rem" type="line">
+				<uni-card :is-shadow="false">
+					<view style="width: 100%;padding-left: 0px;padding-right: 10px;">
+						<view style="margin-top: 5px;display: flex;flex-direction: column;">
+							<view style="font-size: 0.7rem;color: black;">测站名称:</view>
+							<view style="font-size: 0.7rem;color: gray;">{{orderInfo.rtuName}}</view>
+						</view>
+						<view style="margin-top: 5px;display: flex;flex-direction: column;">
+							<view style="font-size: 0.7rem;color: black;">测站编码:</view>
+							<view style="font-size: 0.7rem;color: gray;">{{orderInfo.rtuCode}}</view>
+						</view>
+						<view style="margin-top: 5px;display: flex;flex-direction: column;">
+							<view style="font-size: 0.7rem;color: black;">测站类型:</view>
+							<view style="display: flex;flex-direction: row;align-items: center;">
+								<view v-if="orderInfo.isRain ==1"
+									style="margin-right: 5px;font-size: 0.7rem;color: gray;">雨量站</view>
+								<view v-if="orderInfo.isRiver ==1"
+									style="margin-right: 5px;font-size: 0.7rem;color: gray;">水位站</view>
+								<view v-else-if="orderInfo.isRes ==1"
+									style="margin-right: 5px;font-size: 0.7rem;color: gray;">水位站</view>
+								<view v-if="orderInfo.isGround ==1"
+									style="margin-right: 5px;font-size: 0.7rem;color: gray;">墒情站</view>
+							</view>
+						</view>
+						<view style="margin-top: 5px;display: flex;flex-direction: column;">
+							<view style="font-size: 0.7rem;color: black;">行政区划:</view>
+							<view style="font-size: 0.7rem;color: gray;">{{orderInfo.adCity}}/{{orderInfo.adDist}}
+							</view>
+						</view>
+						<view style="margin-top: 5px;display: flex;flex-direction: column;">
+							<view style="font-size: 0.7rem;color: black;">经纬度:</view>
+							<view style="display: flex;flex-direction: row;align-items: center;">
+								<view style="margin-right: 5px;font-size: 0.7rem;color: gray;">经度:{{orderInfo.lng}}
+								</view>
+								<view style="margin-right: 5px;font-size: 0.7rem;color: gray;">纬度:{{orderInfo.lat}}
+								</view>
+							</view>
+						</view>
+						<view style="margin-top: 5px;display: flex;flex-direction: column;">
+							<view style="font-size: 0.7rem;color: black;">安装位置:</view>
+							<view style="font-size: 0.7rem;color: gray;">{{orderInfo.locationDesc}}</view>
+						</view>
+					</view>
+				</uni-card>
+			</uni-section>
+			<uni-section title="测站数据" titleFontSize="0.8rem" type="line">
+				<uni-card :is-shadow="false">
+					<view style="width: 100%;padding-left: 0px;padding-right: 10px;">
+						<view style="margin-top: 5px;display: flex;flex-direction: column;">
+							<view style="font-size: 0.7rem;color: black;">最近上报数据:</view>
+							<view style="display: flex;flex-direction: row;align-items: center;">
+								<view v-if="orderInfo.isRain ==1"
+									style="margin-right: 5px;font-size: 0.7rem;color: gray;">降水:{{orderInfo.drp}}</view>
+								<view v-if="orderInfo.isRiver ==1"
+									style="margin-right: 5px;font-size: 0.7rem;color: gray;">水位:{{orderInfo.z}}</view>
+								<view v-else-if="orderInfo.isRes ==1"
+									style="margin-right: 5px;font-size: 0.7rem;color: gray;">水位:{{orderInfo.rz}}
+								</view>
+								<view v-if="orderInfo.isGround ==1"
+									style="margin-right: 5px;font-size: 0.7rem;color: gray;">墒情:</view>
+							</view>
+						</view>
+						<view style="margin-top: 5px;display: flex;flex-direction: column;">
+							<view style="font-size: 0.7rem;color: black;">最近上报时间:</view>
+							<view style="font-size: 0.7rem;color: gray;">{{orderInfo.lastUpTime}}</view>
+						</view>
+					</view>
+				</uni-card>
+			</uni-section>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+
+	export default {
+		components: {},
+		onLoad(option) {
+			this.rtuCode = option.rtuCode;
+			if (this.userInfo.role_name === role['admin']) {
+				this.permission.admin = true;
+			} else if (this.userInfo.role_name === role['orgAdmin']) {
+				this.permission.orgAdmin = true;
+			} else if (this.userInfo.role_name === role['companyAdmin']) {
+				this.permission.companyAdmin = true;
+			} else if (this.userInfo.role_name === role['companyServciePerson']) {
+				this.permission.companyServciePerson = true;
+			}
+			this.getOrderInfo();
+		},
+		data() {
+			return {
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+				},
+				rtuCode: '',
+				orderInfo: {
+
+				},
+				title: '测站基础信息',
+			}
+		},
+		computed: {},
+		onShow() {
+			this.getOrderInfo();
+		},
+		created() {},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			// 分页触发
+			change(e) {
+				this.selectedIndexs.length = 0
+				this.pageCurrent = e.current;
+				this.getOrderList()
+			},
+			getOrderInfo() {
+				var that = this;
+				var postData = {};
+				postData['rtuCode'] = this.rtuCode;
+				http.request({
+					url: '/galaxy-business/rtu/base/detail',
+					method: 'GET',
+					data: postData
+				}).then(res => {
+					console.log(res)
+					if (res.data != null) {
+						that.orderInfo = res.data;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+
+			},
+			toOrderConfirm() {
+				var that = this;
+				uni.showModal({
+					content: '确定进行维修确认操作?',
+					showCancel: true,
+					success(res) {
+						if (res.confirm) {
+							var postData2 = {};
+							postData2['id'] = that.orderId;
+							http.request({
+								url: '/galaxy-business/rtu/check/order/confirm',
+								method: 'POST',
+								data: postData2
+							}).then(res => {
+								console.log(res)
+								if (res.success) {
+									uni.showModal({
+										content: '确认已成功,是否立即填报?',
+										showCancel: true,
+										success(res) {
+											if (res.confirm) {
+
+												var url =
+													'/pages/check-order/orderprocessreport?orderId=' +
+													that.orderId;
+												uni.navigateTo({
+													url: url
+												})
+											}
+										}
+									});
+								}
+							}).catch(err => {
+								console.log(err)
+							})
+						}
+					}
+				});
+			},
+			toOrderProcessReport() {
+				var url = '/pages/check-order/orderprocessreport?orderId=' + this.orderId;
+				uni.navigateTo({
+					url: url
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+
+</style>

+ 1435 - 0
pages/rtu-manage/rtumanage.vue

@@ -0,0 +1,1435 @@
+<!--
+ * @Title: 
+ * @Description: 管理工作台
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar :fixed="true" backgroundColor="#3F9EFF" statusBar="false" height="75px">
+			<view style="width:100%;display: flex;flex-direction: row;justify-content: center;align-items: center;">
+				<text style="color: #ffffff; font-size: 1rem;font-family: Microsoft YaHei;">{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view v-if="subSystem == 1">
+			<uni-section title="查询" type="line">
+				<view class="search-block">
+					<view class="adcd-adnm">
+						<uni-data-picker placeholder="请选择地区" popup-title="请选择所在地区" :localdata="regionTree"
+							v-model="selectedTreeNode" @change="onTreeChange" @nodeclick="onTreeNodeClick"
+							@popupopened="onTreePopupOpened" @popupclosed="onTreePopupClosed" :clear-icon="false">
+						</uni-data-picker>
+					</view>
+					<view class="rtu-code">
+						<uni-easyinput :styles="inputStyles" @input="searchRtuCodeValClear" prefixIcon="search"
+							v-model="searchRtuCodeVal" placeholder="请输入测站编码">
+						</uni-easyinput>
+					</view>
+					<view class="rtu-name">
+						<uni-easyinput :styles="inputStyles" @input="searchRtuNameValClear" prefixIcon="search"
+							v-model="searchRtuNameVal" placeholder="请输入测站名称">
+						</uni-easyinput>
+					</view>
+					<view class="submit-btn">
+						<button type="default" @click="search">查 询</button>
+					</view>
+				</view>
+			</uni-section>
+			<view class="count-info-line">
+				<view class="rtuCount">
+					<span class="name">测站数量: </span>
+					<span v-if="countInfo.rtuCount" class="count">{{ countInfo.rtuCount }}</span>
+				</view>
+				<view class="warnRtuCount">
+					<span class="name">异常测站数量: </span>
+					<span v-if="countInfo.warningRtuCount" class="count">{{
+						                                        countInfo.warningRtuCount }}</span>
+				</view>
+			</view>
+			<view style="padding-left: 0px;padding-right: 0px;">
+				<uni-collapse v-model="value">
+					<uni-collapse-item title="异常类别筛选条件" :show-animation="true">
+						<view class="select-checkbox">
+							<uni-data-checkbox v-model="warnKindOption" :localdata="warnKindItems"
+								@change="warnKindOptionChange">
+							</uni-data-checkbox>
+						</view>
+					</uni-collapse-item>
+				</uni-collapse>
+			</view>
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<uni-row>
+								<uni-col :span="20">
+									<view class="items-line">
+										<image v-if="item.runStatusId==1" class="item-title-run-status-icon"
+											mode="widthFix" src="/static/images/icon_warning.png">
+										</image>
+										<image v-else class="item-title-run-status-icon" mode="widthFix"
+											src="/static/images/icon_ok.png">
+										</image>
+										<text class="item-title-rtu-name">{{item.rtuName}}</text>
+										<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+									</view>
+								</uni-col>
+								<uni-col :span="4">
+									<view class="items-line" style="padding-top: 5px;"
+										@click="onRtuDetailClick(item.rtuCode)">
+										<text
+											style="text-decoration-line: underline;font-size: 0.6rem;color:gray;">测站信息</text>
+									</view>
+								</uni-col>
+							</uni-row>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+								<text class="item-up-time-text">最后上线时间:</text>
+								<text class="item-up-time-text">{{item.lastUpTime}}</text>
+							</view>
+							<view v-if="item.runStatusId==1" class="items-line">
+								<uni-icons class="input-uni-icon" type="bars" size="18" color="lightblue" />
+								<text class="item-up-time-text">异常类型:</text>
+								<text class="item-up-time-text">{{item.warnKindInfo}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="location" size="18" color="lightblue" />
+								<text class="item-adcd-adnm-text">{{item.areaName}}</text>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button" @click="onLocationClick(item)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="location" size="18" color="coral" />
+										<text class="button-text">导航</text>
+									</view>
+								</view>
+								<view class="item-button" @click="onWarningPageClick(item.rtuCode)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="gear" size="18" color="coral" />
+										<text class="button-text">异常信息</text>
+									</view>
+								</view>
+								<view class="item-button" @click="onCheckOrderPageClick(item.rtuCode)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="gear" size="18" color="coral" />
+										<text class="button-text">维修任务</text>
+									</view>
+								</view>
+								<view class="item-button" @click="onInspectionReportClick(item.rtuCode)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="reload" size="18" color="coral" />
+										<text class="button-text">设备巡检</text>
+									</view>
+								</view>
+								<view class="item-button" @click="onSiteRealDataClick(item)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+										<text class="button-text">实时数据</text>
+									</view>
+								</view>
+								<view v-if="permission.admin || permission.orgAdmin" class="item-button"
+									@click="onManuallyOrderClick(item.rtuCode)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="email" size="18" color="coral" />
+										<text class="button-text">人工派单</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :page-size="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+		<!-- 应急系统 -->
+		<view v-else-if="subSystem == 2">
+			<view class="page-body">
+				<uni-drawer ref="yjDrawerRef" :width="yjDrawerWidth" mode="left">
+					<view v-if="popBoxIndex ===1">
+						<view class="scroll-view">
+							<scroll-view class="scroll-view-box" scroll-y="true">
+								<uni-section title="实时雨情" titleFontSize="0.8rem" type="line">
+									<template v-slot:right>
+										<view class="view-flex-inline" style="margin-right: 10px;"
+											@click="yjPopMenuClose">
+											<view class="text-under-line" style="color: blue;">关闭</view>
+										</view>
+									</template>
+									<view class="search-block">
+										<view class="rtu-code">
+											<uni-easyinput :styles="inputStyles" @input="yjRainSearchRtuCodeValClear"
+												prefixIcon="search" v-model="yjRainSearchRtuCodeVal"
+												placeholder="请输入测站编码">
+											</uni-easyinput>
+										</view>
+										<view class="rtu-name">
+											<uni-easyinput :styles="inputStyles" @input="yjRainSearchRtuNameValClear"
+												prefixIcon="search" v-model="yjRainSearchRtuNameVal"
+												placeholder="请输入测站名称">
+											</uni-easyinput>
+										</view>
+										<uni-group>
+											<radio-group @change="onYjRainCountTypeRadioChange" class="view-flex-rs">
+												<label style="margin-right: 5px;margin-bottom: 5px;;width:100px;"
+													class="view-flex-inline"
+													v-for="(item, index) in yjRainCountType.items" :key="item.id">
+													<view>
+														<radio :value="item.id"
+															:checked="index === yjRainCountType.value" />
+													</view>
+													<view style="font-size: 0.7rem;">{{item.dictValue}}</view>
+												</label>
+											</radio-group>
+										</uni-group>
+										<view class="submit-btn">
+											<button type="default" @click="yjRainDataSearch">查 询</button>
+										</view>
+									</view>
+									<uni-list style="min-height: 40px;">
+										<uni-list-item v-for="item in yjRainTableData" :key="item.id">
+											<template v-slot:body>
+												<view class="list-item-block">
+													<view class="view-flex-inline" @click="onYjRainDataRtuClick(item)">
+														<view
+															class="list-item-title list-item-text-ellipsis text-under-line"
+															style="color: blue;">
+															{{item.rtuName}}
+														</view>
+													</view>
+													<view class="view-flex-inline">
+														<text class="list-item-text" style="color: gray;">累计雨量:</text>
+														<text class="list-item-text"
+															style="color: coral;margin-left: 5px;">{{item.drp}}
+															mm</text>
+													</view>
+												</view>
+											</template>
+										</uni-list-item>
+									</uni-list>
+									<uni-group>
+										<view class="pagination-block" style="margin-top: 5px;">
+											<uni-pagination :page-size="yjRainListPageSize"
+												:current="yjRainListPageCurrent" :total="yjRainListTotal"
+												@change="yjRainListPageChange" prevText="前一页" nextText="后一页" />
+										</view>
+									</uni-group>
+								</uni-section>
+							</scroll-view>
+						</view>
+					</view>
+					<view v-if="popBoxIndex ===2">
+						<view class="scroll-view">
+							<scroll-view class="scroll-view-box" scroll-y="true">
+								<uni-section title="预警信息" titleFontSize="0.8rem" type="line">
+									<template v-slot:right>
+										<view class="view-flex-inline" style="margin-right: 10px;"
+											@click="yjPopMenuClose">
+											<view class="text-under-line" style="color: blue;">关闭</view>
+										</view>
+									</template>
+									<view class="search-block">
+										<view class="rtu-name">
+											<uni-easyinput :styles="inputStyles" @input="yjSearchWarnNameValClear"
+												prefixIcon="search" v-model="yjSearchWarnNameVal" placeholder="请输入预警名称">
+											</uni-easyinput>
+										</view>
+										<view class="rtu-name">
+											<uni-easyinput :styles="inputStyles" @input="yjSearchAdNameValClear"
+												prefixIcon="search" v-model="yjSearchAdNameVal" placeholder="请输入行政区名称">
+											</uni-easyinput>
+										</view>
+										<view class="submit-btn">
+											<button type="default" @click="yjWarnDataSearch">查 询</button>
+										</view>
+									</view>
+									<uni-list style="min-height: 40px;">
+										<uni-list-item v-for="item in yjWarnTableData" :key="item.id">
+											<template v-slot:body>
+												<view class="list-item-block">
+													<view class="view-flex-inline" @click="onYjWarnDataRtuClick(item)">
+														<view
+															class="list-item-title list-item-text-ellipsis text-under-line"
+															style="color: blue;">
+															{{item.warnName}}
+														</view>
+													</view>
+													<view class="view-flex-inline">
+														<text class="list-item-text"
+															style="margin-left: 0px;color: gray;">预警信息:{{item.warnInfo}}</text>
+													</view>
+													<view class="view-flex-inline">
+														<text class="list-item-text"
+															style="color: gray;">预警时间:{{item.warnTime}}</text>
+													</view>
+													<view class="view-flex-inline">
+														<text class="list-item-text"
+															style="color: gray;">行政区:</text>
+													</view>
+												</view>
+											</template>
+										</uni-list-item>
+									</uni-list>
+									<uni-group>
+										<view class="pagination-block" style="margin-top: 5px;">
+											<uni-pagination :page-size="yjWarnPageSize" :current="yjWarnPageCurrent"
+												:total="yjWarnTotal" @change="yjWarnPageChange" prevText="前一页"
+												nextText="后一页" />
+										</view>
+									</uni-group>
+								</uni-section>
+							</scroll-view>
+						</view>
+					</view>
+					<view v-if="popBoxIndex ===3">
+						<view class="scroll-view">
+							<scroll-view class="scroll-view-box" scroll-y="true">
+								<uni-section title="危险区信息" titleFontSize="0.8rem" type="line">
+									<template v-slot:right>
+										<view class="view-flex-inline" style="margin-right: 10px;"
+											@click="yjPopMenuClose">
+											<view class="text-under-line" style="color: blue;">关闭</view>
+										</view>
+									</template>
+									<view class="search-block">
+										<view class="rtu-name">
+											<uni-easyinput :styles="inputStyles" @input="yjDangerAreaNameValClear"
+												prefixIcon="search" v-model="yjDangerAreaNameVal"
+												placeholder="请输入危险区名称">
+											</uni-easyinput>
+										</view>
+										<view class="rtu-name">
+											<uni-easyinput :styles="inputStyles" @input="yjDangerAreaAdNameValClear"
+												prefixIcon="search" v-model="yjDangerAreaAdNameVal"
+												placeholder="请输入行政区名称">
+											</uni-easyinput>
+										</view>
+										<view class="submit-btn">
+											<button type="default" @click="yjDangerAreaDataSearch">查 询</button>
+										</view>
+									</view>
+									<uni-list style="min-height: 40px;">
+										<uni-list-item v-for="item in yjDangerAreaTableData" :key="item.id">
+											<template v-slot:body>
+												<view class="list-item-block">
+													<view class="view-flex-inline" @click="yjDangerAreaDataClick(item)">
+														<view
+															class="list-item-title list-item-text-ellipsis text-under-line"
+															style="color: blue;">
+															{{item.dangerAreaName}}
+														</view>
+													</view>
+													<view class="view-flex-inline">
+														<text class="list-item-text list-item-text-ellipsis"
+															style="color: gray;">测站名称:{{item.rtuName}}</text>
+													</view>
+													<view class="view-flex-inline">
+														<text class="list-item-text list-item-text-ellipsis"
+															style="color: gray;">行政区:{{item.adnm}}</text>
+													</view>
+													<!-- 													<view class="view-flex-inline">
+														<text class="list-item-text"
+															style="color: gray;">经纬度:{{item.centerPointLng)}},{{toLocation(item.centerPointLat)}}</text>
+													</view> -->
+												</view>
+											</template>
+										</uni-list-item>
+									</uni-list>
+									<uni-group>
+										<view class="pagination-block" style="margin-top: 5px;">
+											<uni-pagination :page-size="yjDangerAreaPageSize"
+												:current="yjDangerAreaPageCurrent" :total="yjDangerAreaTotal"
+												@change="yjDangerAreaPageChange" prevText="前一页" nextText="后一页" />
+										</view>
+									</uni-group>
+								</uni-section>
+							</scroll-view>
+						</view>
+					</view>
+				</uni-drawer>
+				<view class="page-section page-section-gap">
+					<map ref="mapId" :style="mapStyles" :latitude="latitude" :longitude="longitude"
+						:markers="yjMapMarkers" :polygons="polygons" :scale="scale" :polyline="polylines">
+						<cover-view v-if="yjDangerAreaCoverView==1" style="width: 200px;background-color: gray;">
+							<uni-section title="危险区" type="line">
+								<uni-list style="min-height: 40px;">
+									<uni-list-item v-for="item in yjDangerAreas" :key="item.id">
+										<template v-slot:body>
+											<view class="list-item-block">
+												<view class="view-flex-inline" @click="yjDangerAreaClick(item)">
+													<view
+														class="list-item-title list-item-text-ellipsis text-under-line"
+														style="color: blue;">
+														{{item.dangerAreaName}}
+													</view>
+												</view>
+											</view>
+										</template>
+									</uni-list-item>
+								</uni-list>
+							</uni-section>
+						</cover-view>
+						<cover-view v-if="yjRtuCoverView==1" style="width: 200px;background-color: gray;">
+							<uni-section title="关联站点" type="line">
+								<uni-list style="min-height: 40px;">
+									<uni-list-item v-for="item in yjDangerAreaRtus" :key="item.id">
+										<template v-slot:body>
+											<view class="list-item-block">
+												<view class="view-flex-inline" @click="yjDangerAreaLinkRtuClick(item)">
+													<view
+														class="list-item-title list-item-text-ellipsis text-under-line"
+														style="color: blue;">
+														{{item.rtuName}}
+													</view>
+												</view>
+											</view>
+										</template>
+									</uni-list-item>
+								</uni-list>
+							</uni-section>
+						</cover-view>
+						<cover-view v-if="yjDangerAreaLineCoverView==1" style="width: 200px;background-color: gray;">
+							<uni-section title="转移路线" type="line">
+								<uni-list style="min-height: 40px;">
+									<uni-list-item v-for="item in yjDangerAreaLeaveLines" :key="item.id">
+										<template v-slot:body>
+											<view class="list-item-block">
+												<view class="view-flex-inline" @click="yjDangerAreaLinkLineClick(item)">
+													<view
+														class="list-item-title list-item-text-ellipsis text-under-line"
+														style="color: blue;">
+														{{item.leaveLineName}}
+													</view>
+												</view>
+											</view>
+										</template>
+									</uni-list-item>
+								</uni-list>
+							</uni-section>
+						</cover-view>
+					</map>
+				</view>
+				<uni-fab ref="fab" :pattern="pattern" :content="content" :horizontal="horizontal" :vertical="vertical"
+					:direction="direction" @trigger="trigger" @fabClick="fabClick" />
+			</view>
+		</view>
+		<view v-else></view>
+	</view>
+</template>
+
+<script>
+	import {
+		gcoord
+	} from '@/static/js/gcoord.global.prod.js'
+	import
+	navBtns
+	from "@/api/home.js";
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+	export default {
+		name: '',
+		components: {
+
+		},
+		data() {
+			return {
+				title: '管理工作台',
+				permission: {
+					'admin': false,
+					'orgAdmin': false,
+					'companyAdmin': false,
+					'companyServciePerson': false,
+					'yjServicePerson': false,
+				},
+				currentRole: '',
+				subSystem: 0,
+				barcurrent: 1,
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				regionTree: [],
+				regionCode: '',
+				selectedTreeNode: '',
+				searchRtuNameVal: '',
+				searchRtuCodeVal: '',
+				query: {},
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				},
+				countInfo: {},
+				loading: false,
+				value: [],
+				warnKindItems: [{
+					'value': 0,
+					'text': '全部'
+				}, {
+					'value': 1,
+					'text': '离线'
+				}, {
+					'value': 2,
+					'text': '时钟异常'
+				}, {
+					'value': 3,
+					'text': '雨量漏报'
+				}, {
+					'value': 4,
+					'text': '水位漏报'
+				}, {
+					'value': 5,
+					'text': '5分钟上报延时'
+				}, {
+					'value': 6,
+					'text': '雨量小时上报延时'
+				}, {
+					'value': 7,
+					'text': '水位小时上报延时'
+				}, {
+					'value': 8,
+					'text': '雨量疑似异常值'
+				}],
+				warnKindOption: 0,
+				//以下为应急参数
+				yjDangerAreaCoverView: 0,
+				yjRtuCoverView: 0,
+				yjDangerAreaLineCoverView: 0,
+				latitude: 40.848119,
+				longitude: 111.755426,
+				zoom: true,
+				scale: 14,
+				polygons: [],
+				polylines: [],
+				includepoints: [],
+				mapStyles: {
+					width: '100%',
+					height: '600px'
+				},
+				horizontal: 'right',
+				vertical: 'bottom',
+				direction: 'horizontal',
+				pattern: {
+					color: '#7A7E83',
+					backgroundColor: '#fff',
+					selectedColor: '#007AFF',
+					buttonColor: '#007AFF',
+					iconColor: '#fff'
+				},
+				content: [{
+						iconPath: '/static/images/tabbar/home.png',
+						selectedIconPath: '/static/images/tabbar/home_selected.png',
+						text: '雨情',
+						active: false
+					},
+					{
+						iconPath: '/static/images/tabbar/warn.png',
+						selectedIconPath: '/static/images/tabbar/warn_selected.png',
+						text: '预警',
+						active: false
+					},
+					{
+						iconPath: '/static/images/tabbar/workbench.png',
+						selectedIconPath: '/static/images/tabbar/workbench_selected.png',
+						text: '危险区',
+						active: false
+					}
+				],
+				popMenu: false,
+				popBoxIndex: 0,
+				yjMapMarkers: [],
+				yjDrawerWidth: 200,
+				//应急雨量参数
+				yjRainCountType: {
+					items: [{
+						'id': '0',
+						'dictValue': '默认'
+					}, {
+						'id': '1',
+						'dictValue': '近1小时'
+					}, {
+						'id': '2',
+						'dictValue': '近3小时'
+					}, {
+						'id': '3',
+						'dictValue': '近6小时'
+					}, {
+						'id': '4',
+						'dictValue': '近12小时'
+					}, {
+						'id': '5',
+						'dictValue': '近24小时'
+					}],
+					value: 0,
+				},
+				yjRainListPageSize: 10,
+				yjRainListPageCurrent: 1,
+				yjRainListTotal: 0,
+				yjRainTableData: [],
+				yjRainSearchRtuNameVal: '',
+				yjRainSearchRtuCodeVal: '',
+				//应急预警参数
+				yjSearchWarnNameVal: '',
+				yjSearchAdNameVal: '',
+				yjWarnPageSize: 10,
+				yjWarnPageCurrent: 1,
+				yjWarnTotal: 0,
+				yjWarnTableData: [],
+				//应急危险区参数
+				yjDangerAreaNameVal: '',
+				yjDangerAreaAdNameVal: '',
+				yjDangerAreaPageSize: 10,
+				yjDangerAreaPageCurrent: 1,
+				yjDangerAreaTotal: 0,
+				yjDangerAreaTableData: [],
+				yjDangerAreaRtus: [],
+				yjDangerAreaLeaveLines: [],
+				yjDangerAreas: [],
+			}
+		},
+		computed: {
+			toLocation(l) {
+				return new Number(l).toFixed(6);
+			}
+		},
+		onInit(option) {
+			console.log("onInit" + JSON.stringify(uni.getWindowInfo()))
+		},
+		onLoad(option) {
+			let subSystemSelectInfo = uni.getStorageSync("SubSystemSelectInfo");
+			this.subSystem = subSystemSelectInfo.subSystem;
+			if (this.subSystem == 1) {
+				this.title = "管理工作台";
+			} else if (this.subSystem == 2) {
+				this.title = "监测预警管理";
+				this.yjDrawerWidth = uni.getWindowInfo().windowWidth - 100;
+				this.mapStyles.height = (uni.getWindowInfo().windowHeight - 75 - 20) + "px";
+			}
+			if (this.$u.func.checkLogin()) {
+				if (this.userInfo.role_name === role.admin) {
+					this.permission.admin = true;
+					this.currentRole = role.admin;
+				} else if (this.userInfo.role_name === role.orgAdmin) {
+					this.permission.orgAdmin = true;
+					this.currentRole = role.orgAdmin;
+				} else if (this.userInfo.role_name === role.companyAdmin) {
+					this.permission.companyAdmin = true;
+					this.currentRole = role.companyAdmin;
+				} else if (this.userInfo.role_name === role.companyServciePerson) {
+					this.permission.companyServciePerson = true;
+					this.currentRole = role.companyServciePerson;
+				} else if (this.userInfo.role_name === role.yjServicePerson) {
+					this.permission.yjServicePerson = true;
+					this.currentRole = role.yjServicePerson;
+				}
+				if (this.subSystem == 1) {
+					this.getRegionTree();
+				} else if (this.subSystem == 2) {
+
+				}
+			} else {
+				this.$u.func.logout();
+			}
+		},
+		onShow() {
+			if (this.$u.func.checkLogin()) {
+				if (this.subSystem == 1) {
+					this.title = "管理工作台";
+				} else if (this.subSystem == 2) {
+					this.title = "监测预警管理";
+				}
+				if (this.userInfo.role_name !== this.currentRole) {
+					this.permission.admin = false;
+					this.permission.orgAdmin = false;
+					this.permission.companyAdmin = false;
+					this.permission.companyServciePerson = false;
+					this.permission.yjServicePerson = false;
+					if (this.userInfo.role_name === role.admin) {
+						this.permission.admin = true;
+						this.currentRole = role.admin;
+					} else if (this.userInfo.role_name === role.orgAdmin) {
+						this.permission.orgAdmin = true;
+						this.currentRole = role.orgAdmin;
+					} else if (this.userInfo.role_name === role.companyAdmin) {
+						this.permission.companyAdmin = true;
+						this.currentRole = role.companyAdmin;
+					} else if (this.userInfo.role_name === role.companyServciePerson) {
+						this.permission.companyServciePerson = true;
+						this.currentRole = role.companyServciePerson;
+					} else if (this.userInfo.role_name === role.yjServicePerson) {
+						this.permission.yjServicePerson = true;
+						this.currentRole = role.yjServicePerson;
+					}
+					if (this.subSystem == 1) {
+						this.getRegionTree();
+					} else if (this.subSystem == 2) {
+
+					}
+				}
+			} else {
+				this.$u.func.logout();
+			}
+		},
+		onReady() {
+			console.log("onReady" + JSON.stringify(uni.getWindowInfo()))
+			this.mapStyles.height = (uni.getWindowInfo().windowHeight - 75 - 20) + "px";
+			this.$refs.fab.open()
+		},
+		methods: {
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			//行政区划选择
+			onTreeNodeClick(node) {
+				console.log(JSON.stringify(node))
+			},
+			onTreePopupOpened(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreePopupClosed(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreeChange(e) {
+				console.log(JSON.stringify(e))
+				let nodes = e.detail.value;
+				if (nodes.length > 0) {
+					let node = nodes[nodes.length - 1];
+					this.regionCode = node.value;
+					this.query = {};
+					this.query['adCode'] = this.regionCode;
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+					this.getCountInfo(this.regionCode);
+				} else {
+					this.regionCode = '';
+					this.query = {};
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+					this.pageCurrent = 1;
+					this.getPage();
+					this.getCountInfo(this.regionCode);
+				}
+			},
+			//录入查询
+			search() {
+				this.pageCurrent = 1;
+				//	console.log(JSON.stringify(res))
+				let params = {};
+				if (this.searchRtuCodeVal.length > 0) {
+					params['rtuCode'] = this.searchRtuCodeVal;
+				}
+				if (this.searchRtuNameVal.length > 0) {
+					params['rtuName'] = this.searchRtuNameVal;
+				}
+				this.getPage(params);
+			},
+			searchRtuNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuNameVal = '';
+					let params = {};
+					if (this.searchRtuCodeVal.length > 0) {
+						params['rtuCode'] = this.searchRtuCodeVal;
+					}
+					this.getPage(params);
+				}
+			},
+			searchRtuCodeValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuCodeVal = '';
+					let params = {};
+					if (this.searchRtuNameVal.length > 0) {
+						params['rtuName'] = this.searchRtuNameVal;
+					}
+					this.getPage(params);
+				}
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			onRtuDetailClick(rtuCode) {
+				uni.navigateTo({
+					url: '/pages/rtu-manage/rtudetail?rtuCode=' + rtuCode
+				})
+			},
+			onWarningPageClick(rtuCode) {
+				uni.navigateTo({
+					url: '/pages/warning/rtuwarninglist?rtuCode=' + rtuCode
+				})
+			},
+			onLocationClick(item) {
+				let lat = item.lat;
+				let lng = item.lng;
+				let name = item.rtuName;
+				let add = item.locationDesc;
+				uni.openLocation({
+					latitude: Number(lat),
+					longitude: Number(lng),
+					name: name,
+					address: "",
+					success() {}
+				})
+			},
+			onCheckOrderPageClick(rtuCode) {
+				uni.navigateTo({
+					url: '/pages/check-order/rtu/rtucheckorderlist?rtuCode=' + rtuCode
+				})
+			},
+			onInspectionReportClick(rtuCode) {
+				console.log("onInspectionReportClick")
+				uni.navigateTo({
+					url: '/pages/equipment-inspection/rtuinspectionreportview?rtuCode=' + rtuCode
+				})
+			},
+			onSiteRealDataClick(item) {
+				uni.navigateTo({
+					url: '/pages/rtu-manage/rturealdatadetail?rtuCode=' + item.rtuCode + '&isRain=' + item.isRain +
+						'&isRiver=' + item.isRiver + '&isRes=' + item.isRes + '&isGround=' + item.isGround,
+				})
+			},
+			onManuallyOrderClick(rtuCode) {
+				uni.navigateTo({
+					url: '/pages/check-order/manuallyaddcheckorder?rtuCode=' + rtuCode
+				})
+			},
+			warnKindOptionChange: function(evt) {
+				let params = {};
+				this.getPage(params);
+			},
+			getSiteData(val) {
+				let htmltext = '';
+				if (val.isRain === 1) {
+					htmltext = htmltext + "降水:";
+					if (val.drp) {
+						htmltext = htmltext + val.drp;
+					} else {
+						htmltext = htmltext + "--";
+					}
+				}
+				if (val.isRiver == 1) {
+					if (htmltext.length > 0) {
+						htmltext = htmltext + ' / ';
+					}
+					htmltext = htmltext + '水位:';
+					if (val.rz) {
+						htmltext = htmltext + val.rz;
+					} else {
+						htmltext = htmltext + "--";
+					}
+				} else if (val.isRes == 1) {
+					if (htmltext.length > 0) {
+						htmltext = htmltext + ' / ';
+					}
+					htmltext = htmltext + '水位:';
+					if (val.z) {
+						htmltext = htmltext + val.z;
+					} else {
+						htmltext = htmltext + "--";
+					}
+				}
+				if (val.isGround == 1) {
+					if (htmltext.length > 0) {
+						htmltext = htmltext + ' / ';
+					}
+					htmltext = htmltext + '墒情含水层:';
+					if (val.ground) {
+						htmltext = htmltext + val.ground;
+					} else {
+						htmltext = htmltext + "--";
+					}
+				}
+				return htmltext;
+			},
+			getRegionTree() {
+				var that = this;
+				http.request({
+					url: '/galaxy-business/baseinfo/region/tree',
+					method: 'GET',
+				}).then(res => {
+					if (res.data != null) {
+						that.regionTree = res.data;
+						that.regionCode = that.regionTree[0].id;
+						that.selectedTreeNode = that.regionTree[0].id;
+						that.query = {};
+						that.query['adCode'] = that.regionCode;
+						that.getPage();
+						that.getCountInfo(that.regionCode);
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			getCountInfo(adCode) {
+				let that = this;
+				http.request({
+					url: '/galaxy-business/rtu/manage/count',
+					method: 'GET',
+					data: {
+						adCode
+					}
+				}).then(res => {
+					that.countInfo = res.data;
+				})
+			},
+			getPage(params = {}) {
+				this.loading = true
+				if (this.warnKindOption == 0) {} else {
+					params['warnKind'] = this.warnKindOption;
+				}
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				var that = this;
+				http.request({
+					url: '/galaxy-business/rtu/manage/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					//	console.log(JSON.stringify(res.data))
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					that.total = res.data.total;
+					this.loading = false
+				}).catch(err => {
+					console.log(err)
+					this.loading = false
+				})
+			},
+			//以下为应急系统业务功能
+			trigger(e) {
+				let that = this;
+				this.content[0].active = false;
+				this.content[1].active = false;
+				this.content[2].active = false;
+				this.content[e.index].active = !e.item.active
+				this.popBoxIndex = e.index + 1;
+				this.$refs.yjDrawerRef.open()
+				// if (this.$refs.fab.isShow) {
+				// 	this.$refs.fab.close()
+				// }
+				this.$nextTick(() => {
+					if (that.popBoxIndex == 1) {
+						that.yjDangerAreaCoverView = 0;
+						that.yjRtuCoverView = 0;
+						that.yjDangerAreaLineCoverView = 0;
+						that.getYjRainDataPage();
+					} else if (that.popBoxIndex == 2) {
+						that.yjDangerAreaCoverView = 0;
+						that.yjRtuCoverView = 0;
+						that.yjDangerAreaLineCoverView = 0;
+						that.getYjWarnDataPage();
+					} else if (that.popBoxIndex == 3) {
+						that.yjDangerAreaCoverView = 1;
+						that.yjRtuCoverView = 1;
+						that.yjDangerAreaLineCoverView = 1;
+						that.getYjDangerAreaDataPage();
+					}
+				})
+			},
+			fabClick() {
+				// this.popMenu = !this.popMenu
+				// if (!this.popMenu) {
+				// 	this.content[0].active = false;
+				// 	this.content[1].active = false;
+				// 	this.content[2].active = false;
+				// }
+			},
+			yjPopMenuClose() {
+				// this.popMenu = false;
+				// this.content[0].active = false;
+				// this.content[1].active = false;
+				// this.content[2].active = false;
+				// if (this.$refs.fab.isShow) {
+				// 	this.$refs.fab.close()
+				// }
+				this.$refs.yjDrawerRef.close();
+			},
+			//雨量数据业务
+			yjRainListPageChange(e) {
+				this.yjRainListPageCurrent = e.current;
+				this.getYjRainDataPage()
+			},
+			yjRainDataSearch() {
+				let params = {};
+				if (this.yjRainSearchRtuCodeVal.length > 0) {
+					params['rtuCode'] = this.yjRainSearchRtuCodeVal;
+				}
+				if (this.yjRainSearchRtuNameVal.length > 0) {
+					params['rtuName'] = this.yjRainSearchRtuNameVal;
+				}
+				this.getYjRainDataPage(params);
+			},
+			getYjRainDataPage(params = {}) {
+				const current = this.yjRainListPageCurrent;
+				const size = this.yjRainListPageSize;
+				const isSubmit = '0';
+				if (this.yjRainCountType.value == 1) {
+					params['rainCountType'] = 1;
+				} else if (this.yjRainCountType.value == 2) {
+					params['rainCountType'] = 3;
+				} else if (this.yjRainCountType.value == 3) {
+					params['rainCountType'] = 6;
+				} else if (this.yjRainCountType.value == 4) {
+					params['rainCountType'] = 12;
+				} else if (this.yjRainCountType.value == 5) {
+					params['rainCountType'] = 24;
+				} else {
+					params['rainCountType'] = 0;
+				}
+				let postData = Object.assign(params, this.query);
+				console.log(JSON.stringify(postData))
+				var that = this;
+				http.request({
+					url: '/galaxy-business/rtu/data/rain/yj/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+						isSubmit
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.yjRainTableData = res.data.records;
+					}
+					that.yjRainListTotal = res.data.total;
+					if (that.yjRainListTotal == 0) {
+						that.yjRainListPageCurrent = 1;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			onYjRainCountTypeRadioChange: function(evt) {
+				for (let i = 0; i < this.yjRainCountType.items.length; i++) {
+					if (this.yjRainCountType.items[i].id === evt.detail.value) {
+						this.yjRainCountType.value = i;
+						//this.getYjRainDataPage();
+						break;
+					}
+				}
+			},
+			yjRainSearchRtuNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.yjRainSearchRtuNameVal = '';
+				}
+			},
+			yjRainSearchRtuCodeValClear(e) {
+				if (e == null || e.length == 0) {
+					this.yjRainSearchRtuCodeValL = '';
+				}
+			},
+			onYjRainDataRtuClick(item) {
+				this.$refs.yjDrawerRef.close();
+				let that = this;
+				this.$nextTick(() => {
+					that.yjMapMarkers = [];
+					let marker = {};
+					marker['id'] = item.id;
+					marker['latitude'] = item.lat;
+					marker['longitude'] = item.lng;
+					let label = {};
+					label['content'] = item.rtuName + "(" + item.drp + "mm)";
+					label['color'] = '#ff0000';
+					label['bgColor'] = '#ffffff';
+					label['anchorY'] = -40;
+					marker['label'] = label;
+					marker['iconPath'] = "/static/images/icon_warning.png";
+					that.yjMapMarkers.push(marker)
+					that.latitude = item.lat;
+					that.longitude = item.lng;
+				})
+			},
+			//应急预警信息
+			yjSearchWarnNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.yjSearchWarnNameVal = '';
+				}
+			},
+			yjSearchAdNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.yjSearchAdNameVal = '';
+				}
+			},
+			yjWarnPageChange(e) {
+				this.yjDangerAreaPageCurrent = e.current;
+				this.getYjWarnDataPage()
+			},
+			onYjWarnDataRtuClick(item) {
+				this.$refs.yjDrawerRef.close();
+				let that = this;
+				this.$nextTick(() => {
+					that.yjMapMarkers = [];
+					let marker = {};
+					marker['id'] = item.id;
+					marker['latitude'] = item.warnLttd;
+					marker['longitude'] = item.warnLgtd;
+					let label = {};
+					label['content'] = item.warnName;
+					label['color'] = '#ff0000';
+					label['bgColor'] = '#ffffff';
+					label['anchorY'] = -40;
+					marker['label'] = label;
+					marker['iconPath'] = "/static/images/icon_warning.png";
+					that.yjMapMarkers.push(marker)
+					that.latitude = item.warnLttd;
+					that.longitude = item.warnLgtd;
+				})
+			},
+			yjWarnDataSearch() {
+				let params = {};
+				if (this.yjSearchWarnNameVal.length > 0) {
+					params['warnName'] = this.yjSearchWarnNameVal;
+				}
+				if (this.yjSearchAdNameVal.length > 0) {
+					params['dangerAreaName'] = this.yjSearchAdNameVal;
+				}
+				this.getYjWarnDataPage(params);
+			},
+			getYjWarnDataPage(params = {}) {
+				const current = this.yjWarnPageCurrent;
+				const size = this.yjWarnPageSize;
+				const isSubmit = '0';
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/yj/warn/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.yjWarnTableData = res.data.records;
+					}
+					that.yjWarnTotal = res.data.total;
+					if (that.yjWarnTotal == 0) {
+						that.yjWarnPageCurrent = 1;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			//应急危险区业务
+			yjDangerAreaNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.yjDangerAreaNameVal = '';
+				}
+			},
+			yjDangerAreaAdNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.yjDangerAreaAdNameVal = '';
+				}
+			},
+			yjDangerAreaDataSearch() {
+				let params = {};
+				if (this.yjDangerAreaNameVal.length > 0) {
+					params['dangerAreaName'] = this.yjDangerAreaNameVal;
+				}
+				if (this.yjDangerAreaAdNameVal.length > 0) {
+					params['adName'] = this.yjDangerAreaAdNameVal;
+				}
+				this.getYjDangerAreaDataPage(params);
+			},
+			yjDangerAreaPageChange(e) {
+				this.yjDangerAreaPageCurrent = e.current;
+				this.getYjDangerAreaDataPage()
+			},
+			getYjDangerAreaDataPage(params = {}) {
+				const current = this.yjDangerAreaPageCurrent;
+				const size = this.yjDangerAreaPageSize;
+				const isSubmit = '0';
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/map/dangerarea/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.yjDangerAreaTableData = res.data.records;
+					}
+					that.yjDangerAreaTotal = res.data.total;
+					if (that.yjDangerAreaTotal == 0) {
+						that.yjDangerAreaPageCurrent = 1;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			yjDangerAreaDataClick(item) {
+				this.$refs.yjDrawerRef.close();
+				let that = this;
+				this.yjDangerAreas = [];
+				let d = {};
+				d['id'] = item.id;
+				d['dangerAreaName'] = item.dangerAreaName;
+				d['lng'] = item.centerPointLng;
+				d['lat'] = item.centerPointLat;
+				this.yjDangerAreas.push(d);
+
+				this.$nextTick(() => {
+					let c = gcoord.transform(
+						[item.centerPointLng, item.centerPointLat],
+						gcoord.WGS84,
+						gcoord.GCJ02
+					);
+					that.latitude = c[1];
+					that.longitude = c[0];
+					this.scale = 14;
+					that.getDangerAreaDataGcoord(item.id);
+				})
+			},
+			getDangerAreaDataGcoord(id) {
+				let that = this;
+				let postData = {};
+				postData['id'] = id;
+				http.request({
+					url: '/galaxy-business/map/dangerarea/detail',
+					method: 'GET',
+					data: postData
+				}).then(res => {
+					if (res.data != null) {
+						that.includepoints = [];
+						that.polygons = [];
+						let p = {};
+						let ps = res.data.points.map(item => {
+							let l = gcoord.transform(
+								[item.pointLng, item.pointLat],
+								gcoord.WGS84,
+								gcoord.GCJ02
+							);
+							return {
+								latitude: l[1],
+								longitude: l[0],
+							}
+						})
+						p['points'] = ps;
+						that.includepoints.push(ps[0]);
+						let dashArray = [];
+						dashArray.push(4);
+						dashArray.push(10);
+						p['dashArray'] = dashArray;
+						if (res.data.dangerStatus == '1') {
+							p['strokeColor'] = '#FF0000';
+							p['fillColor'] = '#F72C5B7D';
+						} else {
+							p['strokeColor'] = '#FC8452';
+							p['fillColor'] = '#FAC8587D';
+						}
+						that.polygons.push(p);
+						that.yjMapMarkers = [];
+
+						let rtus = res.data.rtus.map(item => {
+							let rtu = {};
+							rtu['id'] = item.id;
+							rtu['latitude'] = item.lat;
+							rtu['longitude'] = item.lng;
+							rtu['rtuName'] = item.rtuName;
+							rtu['rtuCode'] = item.rtuCode;
+							return rtu;
+						});
+						that.yjDangerAreaRtus = rtus;
+
+						let leaveLines = res.data.leaveLines.map(item => {
+							let line = {};
+							line['id'] = item.id;
+							line['latitude'] = new Number(item.centerPointLat).toFixed(6);
+							line['longitude'] = new Number(item.centerPointLng).toFixed(6);
+							line['leaveLineName'] = item.leaveLineName;
+							return line;
+						});
+						that.yjDangerAreaLeaveLines = leaveLines;
+						that.scale = 14;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			yjDangerAreaLinkRtuClick(item) {
+				this.yjMapMarkers = [];
+				let marker = {};
+				marker['id'] = item.id;
+				let l = gcoord.transform(
+					[item.longitude, item.latitude],
+					gcoord.WGS84,
+					gcoord.GCJ02
+				);
+				marker['latitude'] = l[1];
+				marker['longitude'] = l[0];
+				let label = {};
+				label['content'] = item.rtuName;
+				label['color'] = '#ff0000';
+				label['bgColor'] = '#ffffff';
+				label['anchorY'] = -40;
+				marker['label'] = label;
+				marker['iconPath'] = "/static/images/icon_warning.png";
+				this.yjMapMarkers.push(marker)
+				this.latitude = item.latitude;
+				this.longitude = item.longitude;
+				this.scale = 12;
+			},
+			yjDangerAreaLinkLineClick(item) {
+				let that = this;
+				this.polylines = [];
+				this.yjMapMarkers = [];
+				this.polygons = [];
+				let c = gcoord.transform(
+					[item.longitude, item.latitude],
+					gcoord.WGS84,
+					gcoord.GCJ02
+				);
+				this.latitude = c[1];
+				this.longitude = c[0];
+				this.scale = 16;
+				let id = item.id;
+				this.$nextTick(() => {
+					that.getYjDangerAreaLineDetail(id);
+				})
+			},
+			getYjDangerAreaLineDetail(id) {
+				let that = this;
+				let postData = {};
+				postData['id'] = id;
+				http.request({
+					url: '/galaxy-business/map/leaveline/detail',
+					method: 'GET',
+					data: postData
+				}).then(res => {
+					if (res.data != null) {
+						let p = {};
+						let ps = res.data.points.map(item => {
+							let l = gcoord.transform(
+								[item.pointLng, item.pointLat],
+								gcoord.WGS84,
+								gcoord.GCJ02
+							);
+							return {
+								latitude: l[1],
+								longitude: l[0],
+							}
+						})
+						p['points'] = ps;
+						p['color'] = '#ee0000';
+						that.polylines.push(p);
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			yjDangerAreaClick(item) {
+				let that = this;
+				this.polylines = [];
+				this.yjMapMarkers = [];
+				this.polygons = [];
+				this.$nextTick(() => {
+					let c = gcoord.transform(
+						[item.lng, item.lat],
+						gcoord.WGS84,
+						gcoord.GCJ02
+					);
+					that.latitude = c[1];
+					that.longitude = c[0];
+					this.scale = 14;
+					that.getDangerAreaDataGcoord(item.id);
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	$nav-height: 75px;
+
+	.select-checkbox {
+		margin-top: 0px;
+		margin-bottom: 5px;
+		padding-left: 15px;
+	}
+
+	.count-info-line {
+		padding-top: 5px;
+		padding-bottom: 5px;
+		padding-left: 10px;
+		padding-right: 10px;
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+	}
+
+	.count-info-line .rtuCount {
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+
+		.name {
+			color: dimgray;
+			font-size: 0.7rem;
+		}
+
+		.count {
+			margin-left: 5px;
+			color: dodgerblue;
+			font-size: 0.7rem;
+		}
+	}
+
+	.count-info-line .warnRtuCount {
+		margin-left: 10px;
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+
+		.name {
+			color: dimgray;
+			font-size: 0.7rem;
+		}
+
+		.count {
+			margin-left: 5px;
+			color: red;
+			font-size: 0.7rem;
+		}
+	}
+
+	.scroll-view {
+		/* #ifndef APP-NVUE */
+		width: 100%;
+		height: 100%;
+		/* #endif */
+		flex: 1
+	}
+
+	// 处理抽屉内容滚动
+	.scroll-view-box {
+		flex: 1;
+		position: absolute;
+		top: 0;
+		right: 0;
+		bottom: 0;
+		left: 0;
+	}
+</style>

+ 391 - 0
pages/rtu-manage/rturealdatadetail.vue

@@ -0,0 +1,391 @@
+<!--
+ * @Title: 
+ * @Description: 测站实时数据
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-section v-if="isRain == 1" title="雨量站" type="line">
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">采集时间:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{rainData.tm}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">上报时间:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{rainData.fromTime}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">时段长:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content" v-if="rainData.intv == 1">小时</text>
+							<text class="content" v-else-if="rainData.intv == 0.05">5分钟</text>
+							<text class="content" v-else>--</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">时段降水:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{rainData.drp}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+			</uni-section>
+			<uni-section v-if="isRiver == 1 || isRes == 1" title="水位站" type="line">
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">采集时间:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{waterData.wlTime}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">上报时间:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{waterData.wlUpTime}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">水位:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{waterData.wl}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+			</uni-section>
+			<uni-section v-if="isGround == 1" title="墒情站" type="line">
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">采集时间:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{groundData.tm}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">上报时间:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{groundData.fromTime}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">垂线平均含水量:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{groundData.vtavslm}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">表层含水量:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{groundData.srlslm}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">10CM深度含水量:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{groundData.slm10}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">20CM深度含水量:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{groundData.slm20}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">30CM深度含水量:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{groundData.slm30}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">40CM深度含水量:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{groundData.slm40}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">50CM深度含水量:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{groundData.slm50}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">60CM深度含水量:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{groundData.slm60}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">80CM深度含水量:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{groundData.slm80}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+				<uni-row>
+					<uni-col :span="10">
+						<view class="line-text">
+							<text class="title">100CM深度含水量:</text>
+						</view>
+					</uni-col>
+					<uni-col :span="14">
+						<view class="line-text">
+							<text class="content">{{groundData.slm100}}</text>
+						</view>
+					</uni-col>
+				</uni-row>
+			</uni-section>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+
+	export default {
+		components: {
+
+		},
+		onLoad(option) {
+			this.query['rtuCode'] = option.rtuCode;
+			this.isRain = option.isRain;
+			this.isRiver = option.isRiver;
+			this.isRes = option.isRes;
+			this.isGround = option.isGround;
+			this.getData();
+		},
+		data() {
+			return {
+				title: '测站实时数据信息',
+				loading: false,
+				query: {},
+				isRain: 0,
+				isRiver: 0,
+				isRes: 0,
+				isGround: 0,
+				rainData: {},
+				//riverData: {},
+				//rsvrData: {},
+				waterData: {},
+				groundData: {},
+			}
+		},
+		computed: {
+
+		},
+		onShow() {},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			// 获取数据
+			getData(params = {}) {
+				let that = this;
+				let postData = Object.assign(params, this.query);
+				http.request({
+					url: '/galaxy-business/rtu/data/ground/detail',
+					method: 'GET',
+					params: postData,
+				}).then(res => {
+					that.groundData = res.data;
+				}).catch(err => {
+					console.log(err)
+				})
+
+				http.request({
+					url: '/galaxy-business/rtu/data/rain/detail',
+					method: 'GET',
+					params: postData,
+				}).then(res => {
+					that.rainData = res.data;
+				}).catch(err => {
+					console.log(err)
+				})
+
+				http.request({
+					url: '/galaxy-business/rtu/data/river/detail',
+					method: 'GET',
+					params: postData,
+				}).then(res => {
+					console.log(JSON.stringify(res))
+					if (res.success) {
+						if (res.data.tm) {
+							let data = {};
+							data['wlTime'] = res.data.tm;
+							data['wlUpTime'] = res.data.fromTime;
+							data['wl'] = res.data.z;
+							that.waterData = data;
+						}
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+
+				http.request({
+					url: '/galaxy-business/rtu/data/rsvr/detail',
+					method: 'GET',
+					params: postData,
+				}).then(res => {
+					console.log(JSON.stringify(res))
+					if (res.success) {
+						if (res.data.tm) {
+							let data = {};
+							data['wlTime'] = res.data.tm;
+							data['wlUpTime'] = res.data.fromTime;
+							data['wl'] = res.data.rz;
+							that.waterData = data;
+						}
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style scoped>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+
+	.line-text {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+		margin-top: 5px;
+		margin-bottom: 5px;
+		padding-left: 10px;
+	}
+
+	.line-text .title {
+		font-size: 0.7rem;
+	}
+
+	.line-text .content {
+		color: darkcyan;
+		font-size: 0.7rem;
+	}
+
+</style>

+ 401 - 0
pages/serviceperson/servicepersonadd.vue

@@ -0,0 +1,401 @@
+<!--
+ * @Title: 
+ * @Description: 维修任务填报提交页
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view style="width: 100%;display: flex;flex-direction: row;justify-content: center;align-items: center;">
+				<text style="color: white;font-size: 1rem;">{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<uni-forms ref="baseForm" :model="formData" :rules="rules">
+			<uni-group>
+				<uni-forms-item name="postCode" label="岗位" label-width="130px" required>
+					<uni-data-checkbox v-model="formData.postCode" :localdata="postCodeOption.items">
+					</uni-data-checkbox>
+				</uni-forms-item>
+				<uni-forms-item name='userAccount' label="用户帐号" label-width="130px" required>
+					<uni-easyinput :styles="styles" v-model="formData.userAccount" placeholder="请录入用户帐号" />
+				</uni-forms-item>
+				<uni-forms-item name='personName' label="姓名" label-width="130px" required>
+					<uni-easyinput :styles="styles" v-model="formData.personName" placeholder="请录入姓名" />
+				</uni-forms-item>
+				<uni-forms-item name='contactPhone' label="联系电话" label-width="130px">
+					<uni-easyinput :styles="styles" v-model="formData.contactPhone" placeholder="请录入联系电话" />
+				</uni-forms-item>
+				<uni-forms-item name='mail' label="邮箱" label-width="130px">
+					<uni-easyinput :styles="styles" v-model="formData.mail" placeholder="请录入邮箱" />
+				</uni-forms-item>
+				<view>
+					<text style="color: gray;font-size: 0.6rem;">备注:默认密码为用户帐号+@8282</text>
+				</view>
+			</uni-group>
+		</uni-forms>
+		<view class="footer">
+			<view class="control">
+				<view class="view-flex-rc">
+					<view class="block"
+						style="width: 120px;height:28px;margin-left: 10px;margin-right: 10px;border-radius:7px;background-color:lightpink"
+						@click="toSubmit()">
+						<view class="view-flex-cc">
+							<uni-icons class="input-uni-icon" type="checkmarkempty" size="18" color="#999" />
+						</view>
+						<view class="view-flex-cc" style="padding-left:5px;">
+							<text style="color:black;font-size:0.7rem">立即提交</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+	export default {
+		components: {},
+		data() {
+			return {
+				title: '人员添加',
+				desc: '',
+				styles: {
+					color: '#333',
+					borderColor: '#e5e5e5',
+					disableColor: '#FFFFFF'
+				},
+				formData: {
+					userAccount: '',
+					personName: '',
+					contactPhone: '',
+					mail: '',
+					postCode: '',
+				},
+				rules: {
+					// 手机网络信号选择
+					postCode: {
+						rules: [{
+							required: true,
+							errorMessage: '必填项',
+						}]
+					},
+					userAccount: {
+						rules: [{
+							required: true,
+							errorMessage: '必填项',
+						}, ]
+					},
+					personName: {
+						rules: [{
+							required: true,
+							errorMessage: '必填项',
+						}, ]
+					},
+				},
+				baseURL: '',
+				baseOSS: '',
+				postCodeOption: {
+					items: [{
+						'value': 1,
+						'text': '工程师'
+					}, {
+						'value': 2,
+						'text': '服务员'
+					}],
+					current: 0,
+				},
+			}
+		},
+		computed: {
+
+		},
+		onLoad(options) {
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.baseOSS = oss;
+		},
+		onReady() {
+			console.log("onReady++++++++++++++")
+			// 需要在onReady中设置规则
+			this.$refs.baseForm.setRules(this.rules)
+		},
+		onShow() {},
+		methods: {
+			toOss(path) {
+				return this.baseOSS + path;
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			toSubmit() {
+				console.log('表单提交');
+				let that = this;
+				this.$refs.baseForm.validate().then(res => {
+					that.submitData();
+				}).catch(err => {
+					console.log('表单错误信息:', err);
+					uni.showModal({
+						content: "内容填报错误,请根据提示信息检查录入内容!",
+						showCancel: false,
+						success(res) {
+							if (res.confirm) {
+								//that.$refs.baseForm.clearValidate();
+							}
+						}
+					});
+				})
+			},
+			submitData() {
+				let formdata = this.formData;
+				let that = this;
+				http.request({
+					url: '/galaxy-business/serviceperson/org/user/save',
+					method: 'POST',
+					data: formdata
+				}).then(res => {
+					if (res.success) {
+						uni.showModal({
+							content: '已成功提交',
+							showCancel: false,
+							success(res) {
+								that.toBack();
+							}
+						});
+					} else {
+						uni.showModal({
+							content: '' + res.msg,
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.cell-hover-class {
+		background-color: rgb(235, 237, 238);
+	}
+
+	.view-flex-rs {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+		align-items: center;
+	}
+
+	.view-flex-rc {
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.view-flex-re {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-end;
+		align-items: center;
+	}
+
+	.view-flex-cs {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-start;
+	}
+
+	.view-flex-cc {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+	}
+
+	.view-flex-ce {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-end;
+	}
+
+	.line-body {
+		padding-left: 10px;
+		padding-right: 10px;
+	}
+
+	.required-star {
+		color: #FF0000;
+		font-size: 15px;
+		width: 20px;
+		text-align: center;
+		padding-left: 0px;
+		padding-right: 2px;
+	}
+
+	.item-title {
+		color: #909399;
+		font-size: 15px;
+	}
+
+	.mline-text {
+		padding-left: 2px;
+		width: 100%;
+		/* background-color:#909399; */
+		height: 70px;
+		border: 1px solid #FF5A5F;
+		border-radius: 5px;
+	}
+
+	.footer {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		z-index: 1;
+		height: 100rpx;
+		padding: 20rpx;
+		box-sizing: border-box;
+		display: flex;
+		align-items: center;
+		justify-content: flex-end;
+		background-color: whitesmoke;
+
+		.ipt {
+			width: 380rpx;
+			height: 77rpx;
+			background: #f7f7f7;
+			border-radius: 38px;
+			padding: 0 37rpx;
+			box-sizing: border-box;
+			margin-right: 20rpx;
+		}
+
+		.control {
+			flex: 1;
+			display: flex;
+			align-items: center;
+			justify-content: flex-end;
+
+			.block {
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				flex: 1;
+			}
+
+			.icon {
+				height: auto;
+			}
+
+			.c {
+				width: 41rpx;
+				margin-right: 10rpx;
+			}
+
+			.s {
+				width: 36rpx;
+			}
+
+			.t {
+				width: 31rpx;
+			}
+		}
+	}
+
+	.container {
+		padding: 0 0 100rpx;
+	}
+
+	.img-container {
+		margin-bottom: 0px;
+		width: 80px;
+		height: 80px;
+
+		.note-image-box {
+			margin-top: 5px;
+			display: flex;
+			flex-wrap: wrap;
+			padding: 0px;
+
+			.note-image-item {
+				position: relative;
+				width: 100%;
+				height: 0;
+				padding-top: 100%;
+				box-sizing: border-box;
+				// background-color: #18B566;
+
+				.close-icon {
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					position: absolute;
+					right: 0px;
+					top: 0px;
+					width: 22px;
+					height: 22px;
+					border-radius: 50%;
+					background-color: #d5d5d5;
+					z-index: 2;
+				}
+
+				.image-box {
+					display: flex;
+					justify-content: center;
+
+					align-items: center;
+					position: absolute;
+					top: 0px;
+					right: 0px;
+					border: 0px;
+					left: 0px;
+					border: 1px #eee solid;
+					border-radius: 5px;
+					overflow: hidden;
+					width: 98%;
+					height: 98%;
+
+				}
+
+
+			}
+		}
+	}
+
+	.input-body {
+		background-color: #fff;
+		padding: 10px;
+	}
+
+	.mb-10 {
+		margin-top: 0px;
+		margin-bottom: 0px;
+	}
+
+	.decoration {
+		width: 6px;
+		height: 6px;
+		margin-right: 4px;
+		border-radius: 50%;
+		background-color: cadetblue;
+	}
+</style>

+ 417 - 0
pages/serviceperson/servicepersonedit.vue

@@ -0,0 +1,417 @@
+<!--
+ * @Title: 
+ * @Description: 维修任务填报提交页
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view style="width: 100%;display: flex;flex-direction: row;justify-content: center;align-items: center;">
+				<text style="color: white;font-size: 1rem;">{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<uni-forms ref="baseForm" :model="formData" :rules="rules">
+			<uni-group>
+<!-- 				<uni-forms-item name="postCode" label="岗位" label-width="130px" required>
+					<uni-data-checkbox v-model="formData.postCode" :localdata="postCodeOption.items">
+					</uni-data-checkbox>
+				</uni-forms-item> -->
+				<uni-forms-item name='personName' label="姓名" label-width="130px" required>
+					<uni-easyinput :styles="styles" v-model="formData.personName" placeholder="请录入姓名" />
+				</uni-forms-item>
+				<uni-forms-item name='contactPhone' label="联系电话" label-width="130px">
+					<uni-easyinput :styles="styles" v-model="formData.contactPhone" placeholder="请录入联系电话" />
+				</uni-forms-item>
+				<uni-forms-item name='mail' label="邮箱" label-width="130px">
+					<uni-easyinput :styles="styles" v-model="formData.mail" placeholder="请录入邮箱" />
+				</uni-forms-item>
+			</uni-group>
+		</uni-forms>
+		<view class="footer">
+			<view class="control">
+				<view class="view-flex-rc">
+					<view class="block"
+						style="width: 120px;height:28px;margin-left: 10px;margin-right: 10px;border-radius:7px;background-color:lightpink"
+						@click="toSubmit()">
+						<view class="view-flex-cc">
+							<uni-icons class="input-uni-icon" type="checkmarkempty" size="18" color="#999" />
+						</view>
+						<view class="view-flex-cc" style="padding-left:5px;">
+							<text style="color:black;font-size:0.7rem">立即提交</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+	export default {
+		components: {},
+		data() {
+			return {
+				title: '人员信息修改',
+				desc: '',
+				styles: {
+					color: '#333',
+					borderColor: '#e5e5e5',
+					disableColor: '#FFFFFF'
+				},
+				formData: {
+					id: '',
+					personName: '',
+					contactPhone: '',
+					mail: '',
+					// postCode: '',
+				},
+				rules: {
+					// 手机网络信号选择
+					postCode: {
+						rules: [{
+							required: true,
+							errorMessage: '必填项',
+						}]
+					},
+					personName: {
+						rules: [{
+							required: true,
+							errorMessage: '必填项',
+						}, ]
+					},
+				},
+				baseURL: '',
+				baseOSS: '',
+				postCodeOption: {
+					items: [{
+						'value': 1,
+						'text': '工程师'
+					}, {
+						'value': 2,
+						'text': '服务员'
+					}],
+					current: 0,
+				},
+				id: '',
+			}
+		},
+		computed: {
+
+		},
+		onLoad(options) {
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.baseOSS = oss;
+			this.id = options.id;
+			this.getDetail(this.id);
+		},
+		onReady() {
+			console.log("onReady++++++++++++++")
+			// 需要在onReady中设置规则
+			this.$refs.baseForm.setRules(this.rules)
+		},
+		onShow() {},
+		methods: {
+			toOss(path) {
+				let url = this.baseOSS + path;
+				console.log("tooss " + url)
+				return url;
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			getDetail(id){
+				let that = this;
+				let postData = {};
+				postData['id'] = this.id;
+				http.request({
+					url: '/galaxy-business/serviceperson/detail',
+					method: 'GET',
+					data: postData
+				}).then(res => {
+					console.log(JSON.stringify(res))
+					if (res.data != null) {
+						that.formData = res.data;
+						// that.formData['personName'] ==res.data.
+						
+						// personName: '',
+						// contactPhone: '',
+						// mail: '',
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			toSubmit() {
+				console.log('表单提交');
+				let that = this;
+				this.$refs.baseForm.validate().then(res => {
+					that.submitData();
+				}).catch(err => {
+					console.log('表单错误信息:', err);
+					uni.showModal({
+						content: "内容填报错误,请根据提示信息检查录入内容!",
+						showCancel: false,
+						success(res) {
+							if (res.confirm) {
+								//that.$refs.baseForm.clearValidate();
+							}
+						}
+					});
+				})
+			},
+			submitData() {
+				let formdata = this.formData;
+				formdata['id'] = this.id;
+				let that = this;
+				http.request({
+					url: '/galaxy-business/serviceperson/update',
+					method: 'POST',
+					data: formdata
+				}).then(res => {
+					if (res.success) {
+						uni.showModal({
+							content: '已成功提交',
+							showCancel: false,
+							success(res) {
+								that.toBack();
+							}
+						});
+					} else {
+						uni.showModal({
+							content: '' + res.msg,
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+	.cell-hover-class {
+		background-color: rgb(235, 237, 238);
+	}
+
+	.view-flex-rs {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+		align-items: center;
+	}
+
+	.view-flex-rc {
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.view-flex-re {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-end;
+		align-items: center;
+	}
+
+	.view-flex-cs {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-start;
+	}
+
+	.view-flex-cc {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+	}
+
+	.view-flex-ce {
+		display: flex;
+		flex-direction: column;
+		justify-content: flex-end;
+	}
+
+	.line-body {
+		padding-left: 10px;
+		padding-right: 10px;
+	}
+
+	.required-star {
+		color: #FF0000;
+		font-size: 15px;
+		width: 20px;
+		text-align: center;
+		padding-left: 0px;
+		padding-right: 2px;
+	}
+
+	.item-title {
+		color: #909399;
+		font-size: 15px;
+	}
+
+	.mline-text {
+		padding-left: 2px;
+		width: 100%;
+		/* background-color:#909399; */
+		height: 70px;
+		border: 1px solid #FF5A5F;
+		border-radius: 5px;
+	}
+
+	.footer {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		z-index: 1;
+		height: 100rpx;
+		padding: 20rpx;
+		box-sizing: border-box;
+		display: flex;
+		align-items: center;
+		justify-content: flex-end;
+		background-color: whitesmoke;
+
+		.ipt {
+			width: 380rpx;
+			height: 77rpx;
+			background: #f7f7f7;
+			border-radius: 38px;
+			padding: 0 37rpx;
+			box-sizing: border-box;
+			margin-right: 20rpx;
+		}
+
+		.control {
+			flex: 1;
+			display: flex;
+			align-items: center;
+			justify-content: flex-end;
+
+			.block {
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				flex: 1;
+			}
+
+			.icon {
+				height: auto;
+			}
+
+			.c {
+				width: 41rpx;
+				margin-right: 10rpx;
+			}
+
+			.s {
+				width: 36rpx;
+			}
+
+			.t {
+				width: 31rpx;
+			}
+		}
+	}
+
+	.container {
+		padding: 0 0 100rpx;
+	}
+
+	.img-container {
+		margin-bottom: 0px;
+		width: 80px;
+		height: 80px;
+
+		.note-image-box {
+			margin-top: 5px;
+			display: flex;
+			flex-wrap: wrap;
+			padding: 0px;
+
+			.note-image-item {
+				position: relative;
+				width: 100%;
+				height: 0;
+				padding-top: 100%;
+				box-sizing: border-box;
+				// background-color: #18B566;
+
+				.close-icon {
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					position: absolute;
+					right: 0px;
+					top: 0px;
+					width: 22px;
+					height: 22px;
+					border-radius: 50%;
+					background-color: #d5d5d5;
+					z-index: 2;
+				}
+
+				.image-box {
+					display: flex;
+					justify-content: center;
+
+					align-items: center;
+					position: absolute;
+					top: 0px;
+					right: 0px;
+					border: 0px;
+					left: 0px;
+					border: 1px #eee solid;
+					border-radius: 5px;
+					overflow: hidden;
+					width: 98%;
+					height: 98%;
+
+				}
+
+
+			}
+		}
+	}
+
+	.input-body {
+		background-color: #fff;
+		padding: 10px;
+	}
+
+	.mb-10 {
+		margin-top: 0px;
+		margin-bottom: 0px;
+	}
+
+	.decoration {
+		width: 6px;
+		height: 6px;
+		margin-right: 4px;
+		border-radius: 50%;
+		background-color: cadetblue;
+	}
+</style>

+ 515 - 0
pages/serviceperson/servicepersonmanage.vue

@@ -0,0 +1,515 @@
+<!--
+ * @Title: 
+ * @Description: 当前维修任务列表
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<view v-if="addType==1" class="view-flex-inline-center">
+				<view style="width: 90%;margin-top: 20px;margin-bottom: 20px;">
+					<button type="warn" @click="onServicePersonAddClick">
+						<uni-icons class="input-uni-icon" type="plusempty" size="18" color="#ffffff" />
+						<text style="color: #ffffff;font-size: 1rem;margin-left: 5px;">添加</text>
+					</button>
+				</view>
+			</view>
+			<uni-section title="查询条件" type="line">
+				<view class="search-block">
+					<view class="rtu-name">
+						<uni-easyinput :styles="inputStyles" @input="searchNameValClear" prefixIcon="search"
+							v-model="searchNameVal" placeholder="请输入姓名">
+						</uni-easyinput>
+					</view>
+					<view style="margin-top: 10px;padding-left: 0px;padding-right: 0px;">
+						<view class="select-checkbox">
+							<uni-data-checkbox v-model="personPostOption" :localdata="personPostItems">
+							</uni-data-checkbox>
+						</view>
+					</view>
+					<view class="submit-btn">
+						<button type="default" @click="search">查 询</button>
+					</view>
+				</view>
+			</uni-section>
+			<uni-section title="人员信息" type="line">
+				<uni-list>
+					<uni-list-item v-for="item in list" :key="item.id">
+						<template v-slot:body>
+							<view class="list-item-block">
+								<view class="line">
+									<text class="title">{{item.personName}}</text>
+								</view>
+								<view class="line">
+									<uni-icons class="input-uni-icon" type="person-filled" size="18"
+										color="lightblue" />
+									<text class="text">岗位:{{item.postName}}</text>
+								</view>
+								<view class="line">
+									<uni-icons class="input-uni-icon" type="phone" size="18" color="lightblue" />
+									<text class="text">电话:{{item.contactPhone}}</text>
+								</view>
+								<view class="line">
+									<uni-icons class="input-uni-icon" type="email" size="18" color="lightblue" />
+									<text class="text">邮箱:{{item.mail}}</text>
+								</view>
+								<view v-if="addType==1" class="item-button-group">
+									<view class="item-button" @click="onEditClick(item.id)">
+										<view class="items-line">
+											<uni-icons class="input-uni-icon" type="phone" size="18" color="coral" />
+											<text class="button-text">修改</text>
+										</view>
+									</view>
+									<view class="item-button" style="background-color:lightblue"
+										@click="onDelClick(item.id)">
+										<view class="items-line">
+											<uni-icons class="input-uni-icon" type="info" size="18" color="coral" />
+											<text class="button-text">删除</text>
+										</view>
+									</view>
+								</view>
+							</view>
+						</template>
+					</uni-list-item>
+				</uni-list>
+				<uni-group>
+					<view class="pagination-block">
+						<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+							@change="pageChange" />
+					</view>
+				</uni-group>
+			</uni-section>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+
+	export default {
+		components: {
+
+		},
+		data() {
+			return {
+				title: '',
+				searchorderstatus: ['0'],
+				searchwarnstatus: [],
+				personPostItems: [{
+					'value': 0,
+					'text': '全部'
+				}, {
+					'value': 1,
+					'text': '工程师'
+				}, {
+					'value': 2,
+					'text': '服务员'
+				}],
+				personPostOption: 0,
+				countInfo: {
+					orderCount: 0,
+					orderUnconfirm: 0,
+					orderProcessing: 0,
+					reportOrder: 0
+				},
+				warnKindItems: [{
+					'value': 0,
+					'text': '全部'
+				}, {
+					'value': 1,
+					'text': '离线'
+				}, {
+					'value': 2,
+					'text': '时钟异常'
+				}, {
+					'value': 3,
+					'text': '雨量漏报'
+				}, {
+					'value': 4,
+					'text': '水位漏报'
+				}, {
+					'value': 5,
+					'text': '5分钟上报延时'
+				}, {
+					'value': 6,
+					'text': '雨量小时上报延时'
+				}, {
+					'value': 7,
+					'text': '水位小时上报延时'
+				}, {
+					'value': 8,
+					'text': '雨量疑似异常值'
+				}],
+				warnKindOption: 0,
+				selectUnconfirm: 0,
+				selectProcess: 0,
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				regionTree: [],
+				regionCode: '',
+				selectedTreeNode: '',
+				searchNameVal: '',
+				searchRtuCodeVal: '',
+				query: {},
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				},
+				addType: 0,
+			}
+		},
+		computed: {
+
+		},
+		onLoad(option) {
+			this.addType = option.add;
+			if (this.addType == 0) {
+				this.title = '人员通讯表';
+			} else if (this.addType == 1) {
+				this.title = '人员管理';
+			}
+			this.pageCurrent = 1;
+			this.getPage()
+		},
+		onShow() {
+            this.getPage();
+		},
+		methods: {
+			//返回上一页
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			onServicePersonAddClick() {
+				let url = '/pages/serviceperson/servicepersonadd';
+				uni.navigateTo({
+					url: url
+				})
+			},
+			//行政区划选择
+			onTreeNodeClick(node) {
+				console.log(JSON.stringify(node))
+			},
+			onTreePopupOpened(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreePopupClosed(e) {
+				console.log(JSON.stringify(e))
+			},
+			onTreeChange(e) {
+				console.log(JSON.stringify(e))
+				let nodes = e.detail.value;
+				if (nodes.length > 0) {
+					let node = nodes[nodes.length - 1];
+					this.regionCode = node.value;
+					this.query = {};
+					this.query['adCode'] = this.regionCode;
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+
+					this.pageCurrent = 1;
+					this.getPage();
+					this.getCountInfo(this.regionCode);
+				} else {
+					this.regionCode = '';
+					this.query = {};
+					this.searchRtuNameVal = '';
+					this.searchRtuCodeVal = '';
+
+					this.pageCurrent = 1;
+					this.getPage();
+					this.getCountInfo(this.regionCode);
+				}
+			},
+			//录入查询
+			search() {
+				this.pageCurrent = 1;
+				let params = {};
+				params['postCode'] = this.personPostOption;
+				if (this.searchNameVal.length > 0) {
+					params['personName'] = this.searchNameVal;
+				}
+				this.getPage(params);
+			},
+			searchNameValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchNameVal = '';
+				}
+			},
+			searchRtuCodeValClear(e) {
+				if (e == null || e.length == 0) {
+					this.searchRtuCodeVal = '';
+					if (this.searchRtuCodeVal.length == 0) {
+						let params = {};
+						if (this.searchRtuNameVal.length > 0) {
+							params['rtuName'] = this.searchRtuNameVal;
+						}
+						this.getPage(params);
+					}
+				}
+			},
+			call(phone) {
+				console.log(phone)
+				uni.showModal({
+					content: '是否需要拨打[' + phone + ']?',
+					showCancel: true,
+					success(res) {
+						if (res.confirm) {
+							uni.makePhoneCall({
+								phoneNumber: phone
+							});
+						}
+					}
+				});
+			},
+			onDetailViewClick(id) {
+				let url = '/pages/check-order/orderprocessreportdetail?orderId=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onEditClick(id) {
+				let url = '/pages/serviceperson/servicepersonedit?id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onDelClick(id) {
+				let that = this;
+				let p = {};
+				p['ids'] = id;
+				http.request({
+					url: '/galaxy-business/serviceperson/remove',
+					method: 'POST',
+					params: p
+				}).then(res => {
+					if (res.success) {
+						uni.showModal({
+							content: '操作成功!',
+							showCancel: false,
+							success(res) {
+								// if (res.confirm) {
+								// 	that.toBack();
+								// }
+								that.getPage();
+							}
+						});
+					} else {
+						uni.showModal({
+							content: '操作失败!',
+							showCancel: false,
+							success(res) {
+
+							}
+						});
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			onCheckOrderChangeClick(item) {
+				let contactUserName = '无';
+				if (item.orderConfirm == 1) {
+					contactUserName = item.contactUserName;
+				}
+				let url = '/pages/check-order/orderprocesschange?orderId=' + item.id + "&contactUserName=" +
+					contactUserName;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onLocationClick(item) {
+				if (item.lat && item.lat) {
+					let lat = item.lat;
+					let lng = item.lng;
+					let name = item.rtuName;
+					let add = '';
+					if (item.locationDesc) {
+						add = item.locationDesc;
+					}
+					uni.openLocation({
+						latitude: Number(lat),
+						longitude: Number(lng),
+						name: name,
+						address: "",
+						success() {}
+					})
+				} else {
+					uni.showModal({
+						content: '经纬度为空,请确认!',
+						showCancel: true,
+						success(res) {
+							if (res.confirm) {
+
+							}
+						}
+					});
+				}
+			},
+			onManuallyCloseOrderClick(id) {
+				uni.navigateTo({
+					url: '/pages/check-order/manuallyclosecheckorder?id=' + id
+				})
+			},
+			onComfireCheckOrderClick(id) {
+				let url =
+					'/pages/check-order/orderconfirm?id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			orderStatusOptionChange: function(evt) {
+				console.log(JSON.stringify(evt))
+				console.log(this.orderStatusOption)
+				this.pageCurrent = 1;
+				let params = {};
+				this.getPage(params);
+			},
+			warnKindOptionChange: function(evt) {
+				let params = {};
+				this.pageCurrent = 1;
+				this.getPage(params);
+			},
+
+			getPage(params = {}) {
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/serviceperson/org/user/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.select-checkbox {
+		margin-top: 0px;
+		margin-bottom: 5px;
+		padding-left: 15px;
+	}
+
+	.count-info-line {
+		padding-top: 5px;
+		padding-bottom: 5px;
+		padding-left: 10px;
+		padding-right: 10px;
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+		flex-wrap: wrap;
+	}
+
+	.count-info-line .orderCount {
+
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+
+		.name {
+			color: dimgray;
+			font-size: 0.7rem;
+		}
+
+		.count {
+			margin-left: 5px;
+			color: dodgerblue;
+			font-size: 0.7rem;
+		}
+	}
+
+	.count-info-line .unconfirmOrderCount {
+
+		margin-left: 10px;
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+
+		.name {
+			color: dimgray;
+			font-size: 0.7rem;
+		}
+
+		.count {
+			margin-left: 5px;
+			color: red;
+			font-size: 0.7rem;
+		}
+	}
+
+	.count-info-line .processOrderCount {
+		margin-left: 10px;
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+
+		.name {
+			color: dimgray;
+			font-size: 0.7rem;
+		}
+
+		.count {
+			margin-left: 5px;
+			color: orange;
+			font-size: 0.7rem;
+		}
+	}
+
+	.count-info-line .reportOrderCount {
+		margin-left: 0px;
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+
+		.name {
+			color: dimgray;
+			font-size: 0.7rem;
+		}
+
+		.count {
+			margin-left: 5px;
+			color: green;
+			font-size: 0.7rem;
+		}
+	}
+</style>

+ 22 - 0
pages/system/setting.vue

@@ -0,0 +1,22 @@
+<template>
+	<view class="container">
+		<u-navbar :is-fixed="false" :border-bottom="false" :is-back="true" back-icon-name="arrow-leftward"
+			back-icon-size="35" :background="{ background: '#fff' }" title="设置" title-color="#000">
+		</u-navbar>
+		<view class="u-demo">
+			<view class="u-demo-wrap">
+				<view class="u-demo-title">正在开发中</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				data: {}
+			};
+		},
+	}
+</script>

+ 152 - 0
pages/user/about.vue

@@ -0,0 +1,152 @@
+<template>
+	<view class="container">
+		<uNavBar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			:title="title" @clickLeft="toBack">
+		</uNavBar>
+		<view class="content">
+			<view class="form">
+<!-- 				<view class="cell">
+					<view class="name">APP版本</view>
+					<input type="text" placeholder="" disabled="true" v-model="versionText" class="ipt"
+						placeholder-class="hold" style="color: skyblue;" />
+				</view> -->
+				<view class="cell">
+					<text>开发单位:</text>
+					<text style="color: skyblue;">北京大恒软件技术有限公司</text>
+				</view>
+				<view class="cell">
+					<text>技术支持电话:</text>
+					<text @click="call('18600457599')" style="color: skyblue;text-decoration-line: underline;">18600457599</text>
+				</view>
+	<!-- 			<view class="cell">
+					<view style="flex: 1;flex-direction: column;">
+						<view>
+							<uni-link :href="apkUrl" text="安卓APP安装包下载地址" color="#007BFF" fontSize="16"
+								copyTips="已自动复制下载地址,请在手机浏览器里粘贴该下载地址"></uni-link>
+						</view>
+						<view style="margin-top: 10px;">
+							<text
+								style="font-size: 0.6rem;color: lightcoral;">备注:在小程序内点击下载地址可复制安装包链接,需自行打开手机浏览器进行粘贴安装包链接进行下载,在app内点击下载地址可直接打开手机浏览器。</text>
+						</view>
+					</view>
+				</view> -->
+			</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js'
+	import uNavBar from '@/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue'
+	import {
+		version
+	} from '@/common/setting.js'
+	export default {
+		components: {
+			uNavBar
+		},
+		data() {
+			return {
+				versionText: '',
+				title: '关于',
+				apkUrl: '',
+			};
+		},
+		onLoad() {
+			this.versionText = version;
+			this.getAppUrl();
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			getAppUrl() {
+				let that = this;
+				http.request({
+					url: '/galaxy-business/version/app',
+					method: 'GET'
+				}).then(res => {
+					console.log(JSON.stringify(res))
+					if (res.data != null) {
+						that.apkUrl = res.data.apkUrl;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			call(phone) {
+				console.log(phone)
+				uni.showModal({
+					content: '是否需要拨打[' + phone + ']?',
+					showCancel: true,
+					success(res) {
+						if (res.confirm) {
+							uni.makePhoneCall({
+								phoneNumber: phone
+							});
+						}
+					}
+				});
+			},
+		}
+	};
+</script>
+
+<style lang="scss">
+	.container {
+		background-color: #f7f7f7;
+		min-height: 100vh;
+		padding: 0 0 200rpx;
+		overflow: hidden;
+	}
+
+
+
+	.content {
+		background-color: #ffffff;
+		overflow: hidden;
+	}
+
+	.form {
+		padding: 0 36rpx;
+
+		.cell {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			padding: 40rpx 0;
+			font-size: 30rpx;
+			// font-family: Source Han Sans CN;
+			// font-weight: bold;
+			color: #666666;
+
+			&:not(:last-of-type) {
+				border-bottom: 2rpx solid #efefef;
+			}
+
+			.name {
+				font-size: 0.8rem;
+			}
+
+			.ipt {
+				flex: 1;
+				margin-left: 40rpx;
+				text-align: right;
+				font-size: 0.8rem;
+				// font-family: Source Han Sans CN;
+				// font-weight: bold;
+				color: #333333;
+			}
+
+			.hold {
+				font-size: 27rpx;
+				// font-family: Source Han Sans CN;
+				// font-weight: bold;
+				color: #c8c8ce;
+			}
+		}
+	}
+</style>

+ 363 - 0
pages/user/center.vue

@@ -0,0 +1,363 @@
+<template>
+	<view class="container">
+		<view class="head">
+			<u-navbar :is-fixed="false" :border-bottom="false" :is-back="false" title="个人中心"
+				:background="{ background: 'transprent' }" title-color="#FFFFFF">
+			</u-navbar>
+			<!-- 用户信息 -->
+			<view class="user-box">
+				<view class="left" style="width: 60%;">
+					<view style="display: flex;flex-direction: row;width: 100%;">
+						<view style="display: flex;flex-direction: column;justify-content: center;">
+							<image :src="userInfo.avatar" class="avatar" mode=""></image>
+							<view class="user-name">{{ userInfo.nick_name }}</view>
+						</view>
+					</view>
+					<view style="display: flex;flex-direction: row;width: 100%;color: #F0F0F0;">
+						{{roleName}}/{{deptName}}
+					</view>
+				</view>
+				<view style="display: flex;flex-direction: column;justify-content: flex-end;">
+					<view @click="$u.func.route('/pages/user/profile')" class="edit-btn">编辑资料</view>
+				</view>
+			</view>
+		</view>
+		<!-- 功能列表 -->
+		<view class="cell-box">
+			<u-cell-group :border="false">
+				<u-cell-item title="修改密码" :border-bottom="false" @click="$u.func.route('/pages/user/modify-password')">
+					<image slot="icon" src="/static/images/user/c8.png" class="icon" mode=""></image>
+				</u-cell-item>
+			</u-cell-group>
+		</view>
+		<view class="cell-box">
+			<u-cell-group :border="false">
+			</u-cell-group>
+		</view>
+<!-- 		<view class="cell-box">
+			<u-cell-group :border="false">
+				<u-cell-item title="检查更新" :border-bottom="false" @click="checkVersion">
+					<image slot="icon" src="/static/images/news/search.png" class="icon" mode=""></image>
+				</u-cell-item>
+			</u-cell-group>
+		</view> -->
+		<view class="cell-box">
+			<u-cell-group :border="false">
+				<u-cell-item title="关于" :border-bottom="false" @click="$u.func.route('/pages/user/about')">
+					<image slot="icon" src="/static/images/user/c7.png" class="icon" mode=""></image>
+				</u-cell-item>
+			</u-cell-group>
+		</view>
+		<u-gap height="50"></u-gap>
+		<view class="cell-box">
+			<u-cell-group :border="false">
+				<button type="warn" @click="logout()">退出登录</button>
+			</u-cell-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js'
+	export default {
+		onLoad() {
+			console.log(this.userInfo.nick_name)
+			const that = this;
+
+			http.request({
+				url: '/galaxy-system/dept/detail?id=' + this.userInfo.dept_id,
+				method: 'GET'
+			}).then(res => {
+				console.log(JSON.stringify(res.data))
+				that.deptName = res.data.deptName;
+			}).catch(err => {
+				console.log(err)
+			})
+
+			http.request({
+				url: '/galaxy-system/role/select?roleId=' + this.userInfo.role_id,
+				method: 'GET'
+			}).then(res => {
+				console.log(JSON.stringify(res.data))
+				var name = "";
+				res.data.forEach(info => {
+					name += name.length > 0 ? ":" : "";
+					name += info.roleName;
+				})
+				that.roleName = name;
+			}).catch(err => {
+				console.log(err)
+			})
+		},
+		data() {
+			return {
+				roleName: '',
+				deptName: '',
+				downloadurl: '',
+			};
+		},
+		methods: {
+			logout() {
+				this.$u.func.logout();
+			},
+			checkVersion() {
+				// #ifdef APP-PLUS  
+				let that = this;
+				let postData = {};
+				postData['appId'] = plus.runtime.appid;
+				postData['version'] = plus.runtime.version;
+				http.request({
+					url: '/galaxy-business/version/check',
+					method: 'GET',
+					data: postData,
+				}).then(res => {
+					console.log(JSON.stringify(res))
+					if (res.data != null) {
+						if (res.data.updateStatus == 1) {
+							that.downloadurl = res.data.apkUrl;
+							uni.showModal({
+								title: "版本检查",
+								content: "有新的APP版本需要更新",
+								success: (res) => {
+									if (res.confirm) {
+										that.updateApp();
+									}
+								},
+							})
+						} else {
+							uni.showModal({
+								title: "提示",
+								content: "当前已是最新版本!",
+								showCancel: false,
+								success: (res) => {
+
+								}
+							})
+						}
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+				// #endif  
+			},
+			updateApp() {
+				// #ifdef APP-PLUS  
+				let task = plus.downloader.createDownload(this.downloadurl, {},
+					function(d, status) {
+						//下载完成
+						if (status == 200) {
+							var path = plus.io.convertLocalFileSystemURL(d
+								.filename);
+							plus.runtime.install(path, {}, function() {
+								plus.nativeUI.closeWaiting();
+								uni.showModal({
+									title: "更新提示",
+									content: "安装已完成,APP需重新启动!",
+									showCancel: false,
+									success: (res) => {
+										plus.runtime.restart();
+									}
+								})
+							}, function(e) {
+								uni.showModal({
+									title: "更新提示",
+									content: "版本更新失败[" + e.code + "]:" + e.message,
+									mask: false,
+									duration: 1500,
+								})
+							})
+						} else {
+							uni.showModal({
+								title: "更新提示",
+								content: "下载安装包文件失败!",
+								mask: false,
+								duration: 1500,
+							})
+						}
+					}
+				)
+				task.addEventListener("statechanged", function(download, status) {
+					switch (download.state) {
+						case 1:
+							loadingDig.setTitle("开始下载");
+							break;
+						case 2:
+							loadingDig.setTitle("已连接");
+							break;
+						case 3:
+							//if (undefined != task.downloadedSize && null != task.downloadedSize && parseFloat(task
+							//	.downloadedSize) > 0.0) {
+							// let prg = parseInt((parseFloat(task
+							// 			.downloadedSize) /
+							// 		parseFloat(task.totalSize)
+							// 	) *
+							// 	100.0);
+							// if (undefined != prg && null != prg && (prg >= 0.0 && prg <= 100.0)) {
+							// 	loadingDig.setTitle("安装包下载 " + prg + "%");
+							// }
+							loadingDig.setTitle("安装包下载中...");
+							break;
+						case 4:
+							plus.nativeUI.closeWaiting();
+							break;
+					}
+				})
+				task.start();
+				var loadingDig = plus.nativeUI.showWaiting("开始下载安装包");
+				// #endif  
+			}
+		}
+
+	};
+</script>
+
+<style lang="scss">
+	.container {
+		background-color: #f7f7f7;
+		min-height: 100vh;
+		overflow: hidden;
+	}
+
+	.head {
+		position: relative;
+		top: 0;
+		left: 0;
+		z-index: 1;
+		// min-height: 582rpx;
+		min-height: 400rpx;
+		overflow: hidden;
+		background: #3F9EFF;
+
+		.set-icon {
+			vertical-align: middle;
+			width: 41rpx;
+			height: auto;
+			margin-right: 35rpx;
+		}
+
+		.head-bg {
+			position: absolute;
+			left: 0px;
+			top: 0px;
+			z-index: -1;
+			width: 750rpx;
+			height: 582rpx;
+			background: #0bb9c8;
+		}
+	}
+
+	.user-box {
+		display: flex;
+		justify-content: space-between;
+		padding: 0 20rpx 0 64rpx;
+		margin-top: 36rpx;
+
+		.left {
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+
+			.avatar {
+				width: 128rpx;
+				height: 128rpx;
+				background: #ffffff;
+				border-radius: 50%;
+			}
+
+			.user-name {
+				margin-top: 20rpx;
+				font-size: 36rpx;
+				font-family: Source Han Sans CN;
+				font-weight: 500;
+				color: #ffffff;
+			}
+
+			.tag {
+				margin-top: 20rpx;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				padding: 5rpx 16rpx;
+				border: 1px solid #f5f5f5;
+				border-radius: 7rpx;
+
+				font-size: 19rpx;
+				font-family: Source Han Sans CN;
+				font-weight: 300;
+				color: #ffffff;
+			}
+		}
+
+		.edit-btn {
+			margin-top: 20rpx;
+			margin-bottom: 10px;
+			flex-shrink: 0;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+
+			width: 165rpx;
+			height: 54rpx;
+			border: 2rpx solid #f5f5f5;
+			border-radius: 11rpx;
+
+			font-size: 27rpx;
+			font-family: Source Han Sans CN;
+			font-weight: 400;
+			color: #ffffff;
+		}
+	}
+
+	.nav {
+		display: flex;
+		//border-top: 2rpx solid #7dcdd6;
+		margin: 36rpx 38rpx 0;
+		padding: 36rpx 0 42rpx;
+
+		.nav-item {
+			width: calc(100% / 4);
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: space-between;
+
+			font-size: 25rpx;
+			font-family: Source Han Sans CN;
+			font-weight: 400;
+			color: #ffffff;
+
+			&:not(:last-of-type) {
+				position: relative;
+
+				&::after {
+					position: absolute;
+					right: 0;
+					top: 50%;
+					transform: translateY(-50%);
+					content: '';
+					display: block;
+					width: 2rpx;
+					background-color: #3ac4d1;
+					height: 30rpx;
+				}
+			}
+
+			.icon {
+				width: 48rpx;
+				height: 48rpx;
+				margin-bottom: 6rpx;
+			}
+		}
+	}
+
+	.cell-box {
+		background: #ffffff;
+		margin: 18rpx;
+
+		.icon {
+			width: 32rpx;
+			height: 32rpx;
+			margin-right: 22rpx;
+		}
+	}
+</style>

+ 22 - 0
pages/user/font-setting.vue

@@ -0,0 +1,22 @@
+<template>
+	<view class="container">
+		<u-navbar :is-fixed="false" :border-bottom="false" :is-back="true" back-icon-name="arrow-leftward"
+			back-icon-size="35" :background="{ background: '#fff' }" title="字体设置" title-color="#000">
+		</u-navbar>
+		<view class="u-demo">
+			<view class="u-demo-wrap">
+				<view class="u-demo-title">正在开发中</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				data: {}
+			};
+		},
+	}
+</script>

+ 203 - 0
pages/user/modify-password.vue

@@ -0,0 +1,203 @@
+<template>
+	<view class="container">
+		<uNavBar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			:title="title" @clickLeft="toBack">
+		</uNavBar>
+		<view class="content">
+			<view class="form">
+				<view class="cell">
+					<view class="name"><text style="color: #FF0000; font-weight: bold;font-size: 20px;">*</text>旧密码
+					</view>
+					<input type="text" password="true" placeholder="输入旧密码" v-model="oldPassword" class="ipt" placeholder-class="hold" />
+				</view>
+				<view class="cell">
+					<view class="name"><text style="color: #FF0000; font-weight: bold;font-size: 20px;">*</text>新密码
+					</view>
+					<input type="text" password="true" placeholder="输入新密码" v-model="newPassword" class="ipt" placeholder-class="hold" />
+				</view>
+				<view class="cell">
+					<view class="name"><text style="color: #FF0000; font-weight: bold;font-size: 20px;">*</text>确认新密码
+					</view>
+					<input type="text" password="true" placeholder="再次输入新密码" v-model="newPassword1" class="ipt"
+						placeholder-class="hold" />
+				</view>
+				<u-gap height="50"></u-gap>
+				<view class="cell">
+					<view style="width: 100%;">
+						<button type="warn" @click="formSubmit()">提交</button>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js'
+	import md5 from '@/utils/md5.js'
+	import uNavBar from '@/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue'
+	export default {
+		components: {
+			uNavBar
+		},
+		data() {
+			return {
+				title:'修改密码',
+				oldPassword: '',
+				newPassword: '',
+				newPassword1: ''
+			};
+		},
+		onLoad() {
+
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			formSubmit: function() {
+				const that = this;
+				if (this.oldPassword.length > 0 && this.newPassword.length > 0 && this.newPassword1.length > 0) {
+					uni.showModal({
+						content: '确定修改密码?',
+						showCancel: true,
+						success(res) {
+							if (res.confirm) {
+								let oldPassword = md5(that.oldPassword);
+								let newPassword = md5(that.newPassword);
+								let newPassword1 = md5(that.newPassword1);
+								http.request({
+									url: '/galaxy-user/update-password',
+									method: 'POST',
+									params: {
+										oldPassword,
+										newPassword,
+										newPassword1
+									}
+								}).then(res => {
+									console.log(JSON.stringify(res.data))
+									if (res.success) {
+										uni.showModal({
+											content: '修改已成功',
+											showCancel: false,
+											success(res) {
+												if (res.confirm) {
+													that.$u.func.logout();
+												}
+											}
+										});
+									}
+								}).catch(err => {
+									console.log(err)
+								})
+							}
+						}
+					});
+
+				} else {
+					uni.showModal({
+						content: '请确认必填项',
+						showCancel: false
+					});
+				}
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.container {
+		background-color: #f7f7f7;
+		min-height: 100vh;
+		padding: 0 0 200rpx;
+		overflow: hidden;
+	}
+
+	.complie {
+		vertical-align: middle;
+		padding: 10rpx 20rpx;
+		font-size: 32rpx;
+		font-family: Source Han Sans CN;
+		font-weight: 400;
+		color: #14b9c8;
+	}
+
+	.content {
+		background-color: #ffffff;
+		overflow: hidden;
+	}
+
+	.avatar {
+		margin-top: 30rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		flex-direction: column;
+
+		font-size: 30rpx;
+		font-family: Source Han Sans CN;
+		font-weight: 400;
+		color: #14b9c8;
+
+		.avatar-image {
+			width: 162rpx;
+			height: 162rpx;
+			background: #ffffff;
+			border-radius: 50%;
+			background-color: #82848a;
+			margin-bottom: 15rpx;
+		}
+	}
+
+	.form {
+		padding: 0 36rpx;
+
+		.cell {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			padding: 40rpx 0;
+
+			font-size: 30rpx;
+			font-family: Source Han Sans CN;
+			font-weight: bold;
+			color: #666666;
+
+			&:not(:last-of-type) {
+				border-bottom: 2rpx solid #efefef;
+			}
+
+			.ipt {
+				flex: 1;
+				margin-left: 40rpx;
+				text-align: right;
+				font-size: 23rpx;
+				font-family: Source Han Sans CN;
+				font-weight: bold;
+				color: #333333;
+			}
+
+			.hold {
+				font-size: 27rpx;
+				font-family: Source Han Sans CN;
+				font-weight: bold;
+				color: #c8c8ce;
+			}
+		}
+	}
+
+	.back {
+		margin-top: 40rpx;
+		text-align: center;
+		height: 109rpx;
+		background: #ffffff;
+
+		font-size: 34rpx;
+		font-family: Source Han Sans CN;
+		font-weight: bold;
+		color: #141414;
+		line-height: 109rpx;
+	}
+</style>

+ 241 - 0
pages/user/profile.vue

@@ -0,0 +1,241 @@
+<template>
+	<view class="container">
+		<uNavBar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			:title="title" rightText="完成" @clickLeft="toBack" @clickRight="submit">
+		</uNavBar>
+		<view class="content">
+			<view class="avatar">
+				<image :src="userInfo.avatar" class="avatar-image" mode=""></image>
+				<view class="a" @click="handleChooseImg">更换头像</view>
+			</view>
+			<view class="form">
+				<view class="cell">
+					<view class="name">姓名</view>
+					<input type="text" placeholder="请输入姓名" v-model="userInfo.nick_name" class="ipt"
+						placeholder-class="hold" />
+				</view>
+				<view class="cell">
+					<view class="name">角色</view>
+					<input type="text" placeholder="" disabled="true" v-model="deptName" class="ipt"
+						placeholder-class="hold" style="color: #82848A;" />
+				</view>
+				<view class="cell">
+					<view class="name">单位</view>
+					<input type="text" placeholder="" disabled="true" v-model="roleName" class="ipt"
+						placeholder-class="hold" style="color: #82848A;" />
+				</view>
+				<view class="cell">
+					<view class="name">手机号</view>
+					<input type="number" placeholder="请填写手机号" v-model="detail.phone" class="ipt"
+						placeholder-class="hold" />
+				</view>
+				<view class="cell">
+					<view class="name">邮箱</view>
+					<input v-model="detail.email" class="ipt" placeholder-class="hold" />
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js'
+	import uNavBar from '@/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue'
+	export default {
+		components: {
+			uNavBar
+		},
+		data() {
+			return {
+				sexPicker: [{
+						name: '男'
+					},
+					{
+						name: '女'
+					}
+				],
+				detail: {},
+				deptName: '',
+				roleName: '',
+				title: '个人资料'
+			};
+		},
+		onLoad() {
+
+				
+			const that = this;
+			this.$u.api.userInfo().then(data => {
+				console.log(data);
+				if (data.success) {
+					this.detail = data.data;
+					http.request({
+						url: '/galaxy-system/dept/detail?id=' + this.userInfo.dept_id,
+						method: 'GET'
+					}).then(res => {
+						console.log(JSON.stringify(res.data))
+						that.deptName = res.data.deptName;
+					}).catch(err => {
+						console.log(err)
+					})
+
+					http.request({
+						url: '/galaxy-system/role/select?roleId=' + this.userInfo.role_id,
+						method: 'GET'
+					}).then(res => {
+						console.log(JSON.stringify(res.data))
+						var name = "";
+						res.data.forEach(info => {
+							name += name.length > 0 ? ":" : "";
+							name += info.roleName;
+						})
+						that.roleName = name;
+					}).catch(err => {
+						console.log(err)
+					})
+
+
+				}
+			}).catch(err => {
+				console.log(err)
+				this.$u.func.showToast({
+					title: err,
+				})
+			})
+
+
+
+
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			logout() {
+				this.$u.func.logout();
+			},
+			submit() {
+				// let detail = this.detail
+				// if (!detail.phone && !/^1\d{10}$/.test(detail.phone)) {
+				// 	return uni.showToast({
+				// 		title: '请输入正确的手机号',
+				// 		duration: 2000,
+				// 		icon: 'none'
+				// 	});
+				// }
+				// console.log(JSON.stringify(detail));
+			},
+			changeDefaultPicker(name, e) {
+				this.detail[name] = e.detail.value;
+			},
+			changePicker(name, e) {
+				this.detail[name] = this[`${name}Picker`][e.detail.value].name;
+			},
+			handleChooseImg() {
+				let that = this;
+				uni.chooseImage({
+					count: 1,
+					success(e) {
+						that.detail.avatar = e.tempFilePaths[0];
+					}
+				});
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.container {
+		background-color: #f7f7f7;
+		min-height: 100vh;
+		padding: 0 0 200rpx;
+		overflow: hidden;
+	}
+
+	.complie {
+		vertical-align: middle;
+		padding: 10rpx 20rpx;
+		font-size: 32rpx;
+		font-family: Source Han Sans CN;
+		font-weight: 400;
+		color: #14b9c8;
+	}
+
+	.content {
+		background-color: #ffffff;
+		overflow: hidden;
+	}
+
+	.avatar {
+		margin-top: 30rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		flex-direction: column;
+
+		font-size: 30rpx;
+		font-family: Source Han Sans CN;
+		font-weight: 400;
+		color: #14b9c8;
+
+		.avatar-image {
+			width: 162rpx;
+			height: 162rpx;
+			background: #ffffff;
+			border-radius: 50%;
+			background-color: #82848a;
+			margin-bottom: 15rpx;
+		}
+	}
+
+	.form {
+		padding: 0 36rpx;
+
+		.cell {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			padding: 40rpx 0;
+
+			font-size: 30rpx;
+			font-family: Source Han Sans CN;
+			font-weight: bold;
+			color: #666666;
+
+			&:not(:last-of-type) {
+				border-bottom: 2rpx solid #efefef;
+			}
+
+			.ipt {
+				flex: 1;
+				margin-left: 40rpx;
+				text-align: right;
+				font-size: 23rpx;
+				font-family: Source Han Sans CN;
+				font-weight: bold;
+				color: #333333;
+			}
+
+			.hold {
+				font-size: 27rpx;
+				font-family: Source Han Sans CN;
+				font-weight: bold;
+				color: #c8c8ce;
+			}
+		}
+	}
+
+	.back {
+		margin-top: 40rpx;
+		text-align: center;
+		height: 109rpx;
+		background: #ffffff;
+
+		font-size: 34rpx;
+		font-family: Source Han Sans CN;
+		font-weight: bold;
+		color: #141414;
+		line-height: 109rpx;
+	}
+</style>

+ 163 - 0
pages/warning/rtuwarninglist.vue

@@ -0,0 +1,163 @@
+<!--
+ * @Title: 
+ * @Description: 测站异常列表信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<image class="item-title-run-status-icon" src="/static/images/icon_warning.png"
+									mode="widthFix">
+								</image>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+								<text class="item-text-lable">创建时间:</text>
+								<text class="item-text-content">{{item.warningHappenTime}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="reload" size="18" color="lightblue" />
+								<text class="item-text-lable">恢复时间:</text>
+								<text v-if="item.warningRecoveryTime!=null"
+									class="item-text-content">{{item.warningRecoveryTime}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="list" size="18" color="lightblue" />
+								<text class="item-text-lable">异常类型:</text>
+								
+								<text v-if="item.warningKind==1" class="item-text-content">测站离线</text>
+								<text v-else-if="item.warningKind==2" class="item-text-content">测站时钟异常</text>
+								<text v-else-if="item.warningKind==3" class="item-text-content">测站雨量小时报漏报</text>
+								<text v-else-if="item.warningKind==4" class="item-text-content">测站水位小时报漏报</text>
+								<text v-else-if="item.warningKind==5" class="item-text-content">雨量5分钟上报延时</text>
+								<text v-else-if="item.warningKind==6" class="item-text-content">雨量站小时上报延时</text>
+								<text v-else-if="item.warningKind==7" class="item-text-content">水位站小时上报延时</text>
+								<text v-else-if="item.warningKind==8" class="item-text-content">雨量疑似异常值</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="compose" size="18" color="lightblue" />
+								<text class="item-text-lable">异常信息:</text>
+							</view>
+							<view class="items-line">
+								<text class="item-text-content" style="margin-left: 0px;">{{item.warningDesc}}</text>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :page-size="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+
+	export default {
+		name: '',
+		components: {
+
+		},
+		onLoad(option) {
+			this.rtuCode = option.rtuCode;
+			this.query = {};
+			this.query['rtuCode'] = this.rtuCode;
+			this.getPage();
+		},
+		data() {
+			return {
+				list: [],
+				title: '异常测站信息',
+				query: {},
+				rtuCode: '',
+				pageSize: 10,
+				// 当前页
+				pageCurrent: 1,
+				// 数据总量
+				total: 0,
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+			this.getPage();
+		},
+		created() {
+
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			getPage(params = {}) {
+				var that = this;
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+
+				http.request({
+					url: '/galaxy-business/rtu/warning/page',
+					method: 'GET',
+					data: postData,
+					params: {
+						current,
+						size,
+					},
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			toWarningPage(id) {
+				var url = '/pages/warning/warninginfodetail?id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+
+</style>

+ 190 - 0
pages/warning/warninginfodetail.vue

@@ -0,0 +1,190 @@
+<!--
+ * @Title: 
+ * @Description: 设备异常信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<uni-section title="预警基本信息" titleFontSize="0.8rem" type="line" style="width: 100%;">
+			<uni-card :is-shadow="false" title="预警名称">
+				<text class="uni-body">{{warnInfo.warnName}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="预警时间">
+				<text class="uni-body">{{warnInfo.warnTime}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="预警等级">
+				<text class="uni-body">{{warnInfo.warnLevelCode}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="预警信息">
+				<text class="uni-body">{{warnInfo.warnInfo}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="预警状态">
+				<text class="uni-body">{{warnInfo.warnStatusText}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="审核状态">
+				<text class="uni-body">{{warnInfo.reviewStatusText}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="站类">
+				<text class="uni-body">{{warnInfo.typeText}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="预警类别">
+				<text class="uni-body">{{warnInfo.warnSort}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="预警定位">
+				<text class="uni-body">{{warnInfo.warnLocation}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="预警政区">
+				<text class="uni-body">{{warnInfo.warnAdcd}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="用户政区">
+				<text class="uni-body">{{warnInfo.userAdcd}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="预警点经度">
+				<text class="uni-body">{{warnInfo.warnLgtd}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="预警点纬度">
+				<text class="uni-body">{{warnInfo.warnLttd}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="备注">
+				<text class="uni-body">{{warnInfo.remark}}</text>
+			</uni-card>
+		</uni-section>
+		<uni-section title="雨情数据" titleFontSize="0.8rem" type="line" style="width: 100%;">
+			<uni-card :is-shadow="false" title="雨量站预警频率">
+				<text class="uni-body">{{warnInfo.rainWarnRateText}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="降雨时段">
+				<text class="uni-body">{{warnInfo.intv}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="时段降水">
+				<text class="uni-body">{{warnInfo.drp}}</text>
+			</uni-card>
+		</uni-section>
+		<uni-section title="河道水情数据" titleFontSize="0.8rem" type="line" style="width: 100%;">
+			<uni-card :is-shadow="false" title="河道水位">
+				<text class="uni-body">{{warnInfo.z}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="河道流量">
+				<text class="uni-body">{{warnInfo.q}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="河道水势">
+				<text class="uni-body">{{warnInfo.wptn}}</text>
+			</uni-card>
+		</uni-section>
+		<uni-section title="水库水情数据" titleFontSize="0.8rem" type="line" style="width: 100%;">
+			<uni-card :is-shadow="false" title="库上水位">
+				<text class="uni-body">{{warnInfo.rz}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="水库水势">
+				<text class="uni-body">{{warnInfo.rwptn}}</text>
+			</uni-card>
+			<uni-card :is-shadow="false" title="水库流量">
+				<text class="uni-body">{{warnInfo.inq}}</text>
+			</uni-card>
+		</uni-section>
+
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		pathToBase64,
+		base64ToPath
+	} from '@/js_sdk/mmmm-image-tools/index.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+
+
+	export default {
+		components: {
+
+		},
+		onLoad(options) {
+			this.id = options.id;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.getWarnInfo();
+		},
+		data() {
+			return {
+				id: '',
+				baseURL: '',
+				warnInfo: {},
+				title: '异常信息详情',
+			}
+		},
+		computed: {
+
+		},
+		onShow() {},
+		created() {
+
+		},
+		methods: {
+			toOss(path) {
+				return oss + path;
+			},
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			dateFormat(dt) {
+				var text = "" + dt.getFullYear();
+				text += "-";
+				text += ((dt.getMonth() + 1) < 10) ? ("0" + (dt.getMonth() + 1)) : (dt
+					.getMonth() +
+					1);
+				text += "-";
+				text += dt.getDate() < 10 ? "0" + dt.getDate() : dt.getDate();
+				text += " ";
+				text += dt.getHours() < 10 ? "0" + dt.getHours() : dt.getHours();
+				text += ":";
+				text += dt.getMinutes() < 10 ? "0" + dt.getMinutes() : dt.getMinutes();
+				text += ":";
+				text += dt.getSeconds() < 10 ? "0" + dt.getSeconds() : dt.getSeconds();
+				return text;
+			},
+			getWarnInfo() {
+				var that = this;
+				var postData = {};
+				postData['id'] = this.id;
+				http.request({
+					url: '/galaxy-business/rtu/warning/original/detail',
+					method: 'GET',
+					data: postData
+				}).then(res => {
+					console.log(res)
+					if (res.data != null) {
+						that.warnInfo = res.data;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+	.uni-body {
+		font-size: 0.7rem;
+	}
+
+
+</style>

+ 142 - 0
pages/warning/warninglist.vue

@@ -0,0 +1,142 @@
+<!--
+ * @Title: 
+ * @Description: 异常列表信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="items-line">
+								<image class="item-title-run-status-icon" src="/static/images/icon_warning.png"
+									mode="widthFix">
+								</image>
+								<text class="item-title-rtu-name">{{item.rtuName}}</text>
+								<text class="item-title-rtu-code">[{{item.rtuCode}}]</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="calendar" size="18" color="lightblue" />
+								<text class="item-text">创建时间:</text>
+								<text class="item-text">{{item.warningHappenTime}}</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="list" size="18" color="lightblue" />
+								<text class="item-text-lable">异常类型:</text>
+								<text v-if="item.warningKind==1" class="item-text-content">测站离线</text>
+								<text v-else-if="item.warningKind==2" class="item-text-content">测站时钟异常</text>
+								<text v-else-if="item.warningKind==3" class="item-text-content">测站雨量小时报漏报</text>
+								<text v-else-if="item.warningKind==4" class="item-text-content">测站水位小时报漏报</text>
+								<text v-else-if="item.warningKind==5" class="item-text-content">雨量5分钟上报延时</text>
+								<text v-else-if="item.warningKind==6" class="item-text-content">雨量站小时上报延时</text>
+								<text v-else-if="item.warningKind==7" class="item-text-content">水位站小时上报延时</text>
+								<text v-else-if="item.warningKind==8" class="item-text-content">雨量疑似异常值</text>
+							</view>
+							<view class="items-line">
+								<uni-icons class="input-uni-icon" type="compose" size="18" color="lightblue" />
+								<text class="item-text-lable">异常信息:</text>
+							</view>
+							<view class="items-line">
+								<text class="item-text-content" style="margin-left: 0px;">{{item.warningDesc}}</text>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :page-size="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	export default {
+		name: '',
+		components: {},
+		onLoad(option) {
+			this.getPage();
+		},
+		data() {
+			return {
+				list: [],
+				title: '异常测站信息',
+				pageSize: 10,
+				// 当前页
+				pageCurrent: 1,
+				// 数据总量
+				total: 0,
+				query: {},
+			}
+		},
+		computed: {},
+		onShow() {},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			// 分页触发
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			getPage(params = {}) {
+				let that = this;
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				http.request({
+					url: '/galaxy-business/rtu/warning/page',
+					method: 'GET',
+					data: postData,
+					params: {
+						current,
+						size,
+					},
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			toWarningPage(id) {
+				var url = '/pages/warning/warninginfodetail?id=' + id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+</style>
+
+<style lang="scss" scoped>
+
+</style>

+ 333 - 0
pages/yjxt/check/dangerareacheck.vue

@@ -0,0 +1,333 @@
+<!--
+*危险区现场巡查
+*
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<uni-forms ref="baseForm" :model="formData">
+			<uni-card title="定位信息" :is-shadow="false">
+				<view class="view-flex-inline" style="margin-bottom: 10px;">
+					<view style="width: 100px;">经纬度</view>
+					<view v-if="longitude != '' && latitude != ''">{{longitude}},{{latitude}}</view>
+				</view>
+				<view style="margin-bottom: 5px;font-size: 0.6rem;color:skyblue;">
+					备注:定位地址可进行人工修改</view>
+				<uni-forms-item name='lng' label="定位地址" label-width="100px">
+					<uni-easyinput v-model="formData.address" placeholder="请录入定位地址" />
+				</uni-forms-item>
+			</uni-card>
+			<uni-card title="巡查反馈" :is-shadow="false">
+				<uni-forms-item name="isFlood" label="是否有山洪" label-width="100px" required>
+					<uni-data-checkbox v-model="formData.isFlood" :localdata="checkItems.items">
+					</uni-data-checkbox>
+				</uni-forms-item>
+				<uni-forms-item name="isDamage" label="是否成灾" label-width="100px" required>
+					<uni-data-checkbox v-model="formData.isDamage" :localdata="checkItems.items">
+					</uni-data-checkbox>
+				</uni-forms-item>
+				<uni-forms-item name='remark' label="备注" label-width="100px">
+					<uni-easyinput v-model="formData.remark" placeholder="请录入其他需要说明的情况" />
+				</uni-forms-item>
+			</uni-card>
+			<uni-card title="巡查图片" extra="点击下方按钮开始拍摄" :is-shadow="false">
+				<view class="view-flex-inline">
+					<view v-for="(item, index) in checkPhotos" :key="index" class="view-flex-block-center"
+						style="width: 100px;">
+						<view class="img-container">
+							<view class="note-image-box">
+								<view class="note-image-item">
+									<view class="close-icon" @click="onCheckPhotoDel(index)">
+										<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+									</view>
+									<view class="image-box">
+										<image :src="toOss(item)" mode="widthFix">
+										</image>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+					<view class="view-flex-block-center" style="width: 80px;">
+						<view class="img-container">
+							<view class="note-image-box">
+								<view class="note-image-item" @click="onCheckPhotoAdd()">
+									<view class="image-box">
+										<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</uni-card>
+		</uni-forms>
+		<view class="footer">
+			<view class="control">
+				<view class="view-flex-inline-center">
+					<view class="block"
+						style="width: 120px;height:28px;margin-left: 10px;margin-right: 10px;border-radius:7px;background-color:lightpink"
+						@click="toSubmit()">
+						<view class="view-flex-block-center">
+							<uni-icons class="input-uni-icon" type="checkmarkempty" size="18" color="#999" />
+						</view>
+						<view class="view-flex-block-center" style="padding-left:5px;">
+							<text style="color:black;font-size:0.7rem">立即提交</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+	export default {
+		data() {
+			return {
+				title: '现场巡查',
+				baseURL: '',
+				baseOSS: '',
+				checkType: 0,
+				warnId: '',
+				latitude: '',
+				longitude: '',
+				formData: {
+					address: '',
+					isFlood: 0,
+					isDamage: 0,
+					remark: '',
+				},
+				checkPhotos: [],
+				checkItems: {
+					items: [{
+						'value': 0,
+						'text': '否'
+					}, {
+						'value': 1,
+						'text': '是'
+					}],
+					current: 0,
+				},
+			}
+		},
+		onLoad(option) {
+			let that = this;
+			this.baseOSS = oss;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.checkType = option.type;
+			this.warnId = option.id;
+			// #ifdef APP-PLUS
+			console.log("app")
+			uni.getLocation({
+				type: 'gcj02',
+				geocode: true,
+				success: function(res) {
+					console.log('当前位置:' + JSON.stringify(res));
+					that.latitude = res.latitude;
+					that.longitude = res.longitude;
+					//that.getAddress(res.longitude;,res.latitude);
+				}
+			});
+			// #endif
+			// #ifdef MP-WEIXIN
+			console.log("weixin")
+			uni.getLocation({
+				type: 'wgs84',
+				success: function(res) {
+					console.log('当前位置:' + JSON.stringify(res));
+					that.latitude = res.latitude;
+					that.longitude = res.longitude;
+					//that.getAddress(res.longitude;,res.latitude);
+				}
+			});
+			// #endif
+		},
+		computed: {
+
+		},
+		onShow() {
+
+		},
+		methods: {
+			toOss(path) {
+				let url = this.baseOSS + path;
+				return url;
+			},
+			//返回上一页
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			getAddress(lng, lat) {
+				console.log("get address " + lat + lng);
+				let url = 'https://apis.map.qq.com/ws/geocoder/v1/?location=' + lat + ',' + lng +
+					'&key=4HYBZ-EB23D-SLC42-HQ5R3-LP3LQ-OZFU5';
+				console.log(url);
+				http.request({
+					url: url,
+					method: 'GET',
+				}).then(res => {
+					console.log('当前位置:' + JSON.stringify(res));
+
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			onCheckPhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadCheckPhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadCheckPhoto(imagePath) {
+				let that = this;
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.checkPhotos.push(path);
+
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onCheckPhotoDel(index) {
+				this.checkPhotos.splice(index, 1);
+			},
+			toSubmit() {
+				let that = this;
+				this.$refs.baseForm.validate().then(res => {
+					console.log('表单数据信息1:', res);
+					that.submit();
+				}).catch(err => {
+					console.log('表单错误信息:', err);
+					uni.showModal({
+						content: "巡查内容录入错误,请根据提示信息检查录入内容!",
+						showCancel: false,
+						success(res) {
+							if (res.confirm) {
+								//that.$refs.baseForm.clearValidate();
+							}
+						}
+					});
+				})
+			},
+			submit() {
+				let formdata = this.formData;
+				formdata['checkType'] = this.checkType;
+				formdata['warnId'] = this.warnId;
+				formdata['longitude'] = this.longitude;
+				formdata['latitude'] = this.latitude;
+				if (this.checkPhotos.length > 0) {
+					let photos = '';
+					for (let i = 0; i < this.checkPhotos.length; i++) {
+						if (photos.length > 0) {
+							photos = photos + ',';
+						}
+						photos = photos + this.checkPhotos[i];
+					}
+					formdata['checkPhotos'] = photos;
+				}
+				console.log('toSubmit事件:', JSON.stringify(formdata));
+				let that = this;
+				http.request({
+					url: '/galaxy-business/yj/check/report',
+					method: 'POST',
+					data: formdata
+				}).then(res => {
+					console.log('res ', JSON.stringify(res));
+					if (res.success) {
+						if (res.code == 200) {
+							//that.clearCache();
+							uni.showModal({
+								content: '巡查信息已成功提交',
+								showCancel: false,
+								success(res) {
+									if (res.confirm) {
+										that.toBack();
+									}
+								}
+							});
+						} else {
+							uni.showModal({
+								content: '提交失败',
+								showCancel: false
+							});
+						}
+					} else {
+
+						uni.showModal({
+							content: '提交失败',
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					//	console.log('errr3',JSON.stringify(err));
+					uni.showModal({
+						content: '' + err.data.msg,
+						showCancel: false
+					});
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		padding: 0 0 100rpx;
+	}
+</style>

+ 197 - 0
pages/yjxt/dangerarea/dangerarea.vue

@@ -0,0 +1,197 @@
+<!--
+ * @Title: 
+ * @Description: 危险区信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-section title="查询" type="line">
+				<view class="search-block">
+					<view class="name">
+						<uni-easyinput :styles="inputStyles" @input="adNameValInput" prefixIcon="search"
+							v-model="adNameVal" placeholder="请输入行政区名称">
+						</uni-easyinput>
+					</view>
+					<view class="name">
+						<uni-easyinput :styles="inputStyles" @input="dangerAreaNameValInput" prefixIcon="search"
+							v-model="dangerAreaNameVal" placeholder="请输入危险区名称">
+						</uni-easyinput>
+					</view>
+					<view class="submit-btn">
+						<button type="default" @click="search">查 询</button>
+					</view>
+				</view>
+			</uni-section>
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="line">
+								<text class="title text-ellipsis">{{item.dangerAreaName}}</text>
+							</view>
+							<view class="line" style="margin-top: 5px;">
+								<uni-icons class="input-uni-icon" type="map-pin-ellipse" size="18" color="orangered" />
+								<text class="lable">行政区划:</text>
+								<text class="content" style="color: blue;">{{item.adnm}}</text>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button mid-size" @click="toQr(item)">
+									<view class="view-flex-inline-center">
+										<uni-icons class="input-uni-icon" type="scan" size="18" color="coral" />
+										<text class="button-text">危险区二维码</text>
+									</view>
+								</view>
+								<view class="item-button mid-size" @click="toMap(item)">
+									<view class="view-flex-inline-center">
+										<uni-icons class="input-uni-icon" type="location" size="18" color="coral" />
+										<text class="button-text">地图查看</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+	export default {
+		components: {
+
+		},
+		onLoad(options) {
+			this.id = options.id;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.getPage();
+		},
+		data() {
+			return {
+				title: '危险区信息',
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				query: {},
+				adNameVal: '',
+				dangerAreaNameVal: '',
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				},
+			}
+		},
+		computed: {
+
+		},
+		onInit(option) {
+			console.log("onInit")
+		},
+		onLoad(option) {
+			console.log("onLoad")
+			this.getPage();
+		},
+		onShow() {
+			console.log("onShow")
+		},
+		onReady() {
+			console.log("onReady")
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			adNameValInput(e) {
+				if (e == null || e.length == 0) {
+					this.adNameVal = '';
+				}
+			},
+			dangerAreaNameValInput(e) {
+				if (e == null || e.length == 0) {
+					this.dangerAreaNameVal = '';
+				}
+			},
+			search() {
+				this.pageCurrent = 1;
+				this.getPage();
+			},
+			toMap(item) {
+				let url = '/pages/yjxt/dangerarea/dangerareamap?id=' + item.id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			toQr(item) {
+				let url = '/pages/yjxt/dangerarea/dangerareaqr?id=' + item.dangerAreaPid;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			getPage(params = {}) {
+				if (this.adNameVal.length > 0) {
+					params['adName'] = this.adNameVal;
+				}
+				if (this.dangerAreaNameVal.length > 0) {
+					params['dangerAreaName'] = this.dangerAreaNameVal;
+				}
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/map/dangerarea/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+	.uni-body {
+		font-size: 0.7rem;
+	}
+</style>

+ 159 - 0
pages/yjxt/dangerarea/dangerareamap.vue

@@ -0,0 +1,159 @@
+<!--
+ * @Title: 
+ * @Description: 危险区地图
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="page-body">
+			<view class="page-section page-section-gap">
+				<map :style="mapStyles" :latitude="latitude" :longitude="longitude" :markers="markets"
+					enable-zoom="true" :polygons="polygons" :scale="scale">
+				</map>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+	import {
+		gcoord
+	} from '@/static/js/gcoord.global.prod.js'
+	import http from '@/http/api.js';
+	import {
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+
+	export default {
+		components: {
+
+		},
+		onLoad(options) {
+			this.mapStyles.height = (uni.getWindowInfo().windowHeight - 50) + "px";
+			this.id = options.id;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			let that = this;
+			let postData = {};
+			postData['id'] = this.id;
+			http.request({
+				url: '/galaxy-business/map/dangerarea/detail',
+				method: 'GET',
+				data: postData
+			}).then(res => {
+				console.log(res)
+				if (res.data != null) {
+					let p = {};
+					let ps = res.data.points.map(item => {
+						let l = gcoord.transform(
+							[item.pointLng, item.pointLat],
+							gcoord.WGS84,
+							gcoord.GCJ02
+						);
+						return {
+							latitude: l[1],
+							longitude: l[0],
+						}
+					})
+					p['points'] = ps;
+					let dashArray = [];
+					dashArray.push(4);
+					dashArray.push(10);
+					p['dashArray'] = dashArray;
+					if (res.data.dangerStatus == '1') {
+						p['strokeColor'] = '#FF0000';
+						p['fillColor'] = '#F72C5B7D';
+					} else {
+						p['strokeColor'] = '#FC8452';
+						p['fillColor'] = '#FAC8587D';
+					}
+					that.polygons.push(p);
+					let c = gcoord.transform(
+						[res.data.centerPointLng, res.data.centerPointLat],
+						gcoord.WGS84,
+						gcoord.GCJ02
+					);
+					console.log(c)
+					that.latitude = c[1];
+					that.longitude = c[0];
+
+					// let marketPoints = res.data.rtus.map(item => {
+					// 	console.log(JSON.stringify(item))
+					// 	let rtu = {};
+					// 	rtu['iconPath'] = '/static/images/icon_warning.png';
+					// 	rtu['id'] = parseInt(item.id);
+					// 	let r = gcoord.transform(
+					// 		[parseFloat(item.lng), parseFloat(item.lat)],
+					// 		gcoord.WGS84,
+					// 		gcoord.GCJ02
+					// 	);
+
+					// 	rtu['latitude'] = r[1];
+					// 	rtu['longitude'] = r[0];
+					// 	rtu['width'] = 20;
+					// 	rtu['height'] = 20;
+					// 	let label = {};
+					// 	label['content'] = item.rtuName;
+					// 	label['color'] = '#ff0000';
+					// 	label['bgColor'] = '#ffffff';
+					// 	label['anchorY'] = -40;
+					// 	rtu['label'] = label;
+					// 	return rtu;
+					// });
+					//that.markets = marketPoints;
+					that.scale = 14;
+				}
+			}).catch(err => {
+				console.log(err)
+			})
+		},
+		data() {
+			return {
+				title: '危险区地图',
+				id: 0,
+				areaList: [],
+				areaIndex: 0,
+				latitude: 40.848119,
+				longitude: 111.755426,
+				zoom: true,
+				scale: 14,
+				markets: [],
+				polygons: [],
+				mapStyles: {
+					width: '100%',
+					height: '600px'
+				},
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+	.uni-body {
+		font-size: 0.7rem;
+	}
+</style>

+ 78 - 0
pages/yjxt/dangerarea/dangerareaqr.vue

@@ -0,0 +1,78 @@
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="page-body">
+			<uni-card :title="dangerAreaName">
+				<image style="width: 100%;" :src="toQr" mode="widthFix"></image>
+			</uni-card>
+		</view>
+	</view>
+</template>
+<script>
+	import http from '@/http/api.js';
+	import {
+		oss
+	} from '@/common/setting';
+	export default {
+		components: {
+
+		},
+		data() {
+			return {
+				title: '危险区二维码',
+				dangerAreaName: '',
+				dangerAreaPid: '',
+				baseOSS: '',
+				qrImageUrl: '',
+			}
+		},
+		computed: {
+			toQr() {
+				if (this.qrImageUrl.length > 0) {
+					let url = this.baseOSS + this.qrImageUrl;
+					return url;
+				} else {
+					return '';
+				}
+			},
+		},
+		onLoad(options) {
+			this.baseOSS = oss;
+			this.dangerAreaPid = options.id;
+			let that = this;
+			let postData = {};
+			postData['dangerAreaPid'] = this.dangerAreaPid;
+			http.request({
+				url: '/galaxy-business/map/dangerarea/qr',
+				method: 'GET',
+				data: postData
+			}).then(res => {
+				if (res.data != null) {
+					that.qrImageUrl = res.data.qrUrl;
+					that.dangerAreaName = res.data.dangerAreaName;
+				}
+			}).catch(err => {
+				console.log(err)
+			})
+		},
+		onShow() {
+
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 178 - 0
pages/yjxt/dangerarealeaveline/leaveline.vue

@@ -0,0 +1,178 @@
+<!--
+ * @Title: 
+ * @Description: 转移路线信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-section title="查询" type="line">
+				<view class="search-block">
+					<view class="name">
+						<uni-easyinput :styles="inputStyles" @input="adNameValInput" prefixIcon="search"
+							v-model="adNameVal" placeholder="请输入行政区名称">
+						</uni-easyinput>
+					</view>
+					<view class="name">
+						<uni-easyinput :styles="inputStyles" @input="leaveLineNameValInput" prefixIcon="search"
+							v-model="leaveLineNameVal" placeholder="请输入转移路线名称">
+						</uni-easyinput>
+					</view>
+					<view class="submit-btn">
+						<button type="default" @click="search">查 询</button>
+					</view>
+				</view>
+			</uni-section>
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="line">
+								<text class="title text-ellipsis">{{item.leaveLineName}}</text>
+							</view>
+							<view class="line">
+								<uni-icons class="input-uni-icon" type="map-pin-ellipse" size="18" color="orangered" />
+								<text class="lable">行政区划:</text>
+								<text class="content">{{item.adnm}}</text>
+							</view>
+							<view class="item-button-group">
+								<view class="item-button" @click="toMap(item)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="location" size="18" color="coral" />
+										<text class="button-text">地图查看</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import http from '@/http/api.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+
+	export default {
+		components: {
+
+		},
+		onLoad(options) {
+			this.id = options.id;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.getPage();
+		},
+		data() {
+			return {
+				title: '转移路线信息',
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				query: {},
+				adNameVal: '',
+				leaveLineNameVal: '',
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				},
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			adNameValInput(e) {
+				if (e == null || e.length == 0) {
+					this.adNameVal = '';
+				}
+			},
+			leaveLineNameValInput(e) {
+				if (e == null || e.length == 0) {
+					this.leaveLineNameVal = '';
+				}
+			},
+			search() {
+				this.pageCurrent = 1;
+				this.getPage();
+			},
+			toMap(item) {
+				let url = '/pages/yjxt/dangerarealeaveline/leavelinemap?id=' + item.id;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			getPage(params = {}) {
+				if (this.adNameVal.length > 0) {
+					params['adnm'] = this.adNameVal;
+				}
+				if (this.leaveLineNameVal.length > 0) {
+					params['leaveLineName'] = this.leaveLineNameVal;
+				}
+				console.log(JSON.stringify(params))
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/map/leaveline/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	/* page {
+		background-color: rgb(240, 242, 244);
+	} */
+	.uni-body {
+		font-size: 0.7rem;
+	}
+</style>

+ 126 - 0
pages/yjxt/dangerarealeaveline/leavelinemap.vue

@@ -0,0 +1,126 @@
+<!--
+ * @Title: 
+ * @Description: 转移路线地图信息
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="page-body">
+			<view class="page-section page-section-gap">
+				<map :style="mapStyles" :latitude="latitude" :longitude="longitude" :markers="markets"
+					enable-zoom="true" :polyline="polylines" :scale="scale">
+				</map>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+	import {
+		gcoord
+	} from '@/static/js/gcoord.global.prod.js'
+	import http from '@/http/api.js';
+	import {
+		pathToBase64,
+		base64ToPath
+	} from '@/js_sdk/mmmm-image-tools/index.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+
+	export default {
+		components: {
+
+		},
+		onLoad(options) {
+			this.mapStyles.height = (uni.getWindowInfo().windowHeight - 50) + "px";
+			this.id = options.id;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			let that = this;
+			let postData = {};
+			postData['id'] = this.id;
+			http.request({
+				url: '/galaxy-business/map/leaveline/detail',
+				method: 'GET',
+				data: postData
+			}).then(res => {
+				console.log(res)
+				if (res.data != null) {
+					let p = {};
+					let ps = res.data.points.map(item => {
+						let l = gcoord.transform(
+							[item.pointLng, item.pointLat],
+							gcoord.WGS84,
+							gcoord.GCJ02
+						);
+						return {
+							latitude: l[1],
+							longitude: l[0],
+						}
+					})
+					p['points'] = ps;
+					p['color'] = '#EE6666';
+					that.polylines.push(p);
+					let c = gcoord.transform(
+						[res.data.centerPointLng, res.data.centerPointLat],
+						gcoord.WGS84,
+						gcoord.GCJ02
+					);
+					console.log(c)
+					that.latitude = c[1];
+					that.longitude = c[0];
+					that.scale = 16;
+				}
+			}).catch(err => {
+				console.log(err)
+			})
+		},
+		data() {
+			return {
+				title: '转移路线地图',
+				id: 0,
+				areaList: [],
+				areaIndex: 0,
+				latitude: 40.848119,
+				longitude: 111.755426,
+				zoom: true,
+				scale: 16,
+				markets: [],
+				polylines: [],
+				mapStyles: {
+					width: '100%',
+					height: '600px'
+				},
+			}
+		},
+		computed: {
+
+		},
+		onShow() {
+
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	.uni-body {
+		font-size: 0.7rem;
+	}
+</style>

+ 90 - 0
pages/yjxt/resident/dangerarearesidentfamilylist.vue

@@ -0,0 +1,90 @@
+<!--
+ * @Title: 
+ * @Description: 家庭成员清单
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view v-if="item.isHouseholder ===1" class="line">
+								<text class="text" style="color: blue;">户主</text>
+							</view>
+							<view v-else class="line">
+								<text class="text" style="color: blue;">家庭成员</text>
+							</view>
+							<view class="line">
+								<text class="text text-ellipsis">姓名:{{item.personName}}</text>
+							</view>
+							<view class="line">
+								<text class="text text-ellipsis">身份证号:{{item.personId}}</text>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+	export default {
+		components: {},
+		onLoad(option) {
+			this.query = {};
+			this.query['personId'] = option.personId;
+			this.getList();
+		},
+		data() {
+			return {
+				title: '家庭成员表',
+				list: [],
+				query: {},
+			}
+		},
+		computed: {},
+		onShow() {},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			getList(params = {}) {
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/yj/resident/family/list',
+					method: 'GET',
+					data: postData,
+				}).then(res => {
+					if (res.data != null) {
+						that.list = res.data;
+					}
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 236 - 0
pages/yjxt/resident/dangerarearesidentlocation.vue

@@ -0,0 +1,236 @@
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<uni-forms ref="baseForm" :model="formData">
+			<uni-card title="住址定位信息" :is-shadow="false">
+				<uni-forms-item name='longitude' label="经度" label-width="100px" required>
+					<uni-easyinput v-model="formData.longitude" placeholder="请录入经度" />
+				</uni-forms-item>
+				<uni-forms-item name='latitude' label="纬度" label-width="100px" required>
+					<uni-easyinput v-model="formData.latitude" placeholder="请录入纬度" />
+				</uni-forms-item>
+				<view class="item-button-group" style="padding-right: 10px;">
+					<view class="item-button mid-size" @click="onRestartLocation()">
+						<view class="items-line">
+							<uni-icons class="input-uni-icon" type="location" size="18" color="coral" />
+							<text class="button-text">重新定位</text>
+						</view>
+					</view>
+				</view>
+			</uni-card>
+		</uni-forms>
+		<view class="footer">
+			<view class="control">
+				<view class="view-flex-rc">
+					<view class="block"
+						style="width: 120px;height:28px;margin-left: 10px;margin-right: 10px;border-radius:7px;background-color:lightpink"
+						@click="toSubmit()">
+						<view class="view-flex-cc">
+							<uni-icons class="input-uni-icon" type="checkmarkempty" size="18" color="#999" />
+						</view>
+						<view class="view-flex-cc" style="padding-left:5px;">
+							<text style="color:black;font-size:0.7rem">立即提交</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+	export default {
+		data() {
+			return {
+				title: '家庭住址定位补录',
+				baseURL: '',
+				formData: {
+					id: '',
+					latitude: '',
+					longitude: '',
+				},
+				rules: {
+					latitude: {
+						rules: [{
+							required: true,
+							errorMessage: '必填项',
+						}]
+					},
+					longitude: {
+						rules: [{
+							required: true,
+							errorMessage: '必填项',
+						}, ]
+					},
+				},
+			}
+		},
+		onLoad(option) {
+			let that = this;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+
+			this.formData.id = option.id;
+			that.formData.latitude = option.lat;
+			that.formData.longitude = option.lng;
+			
+			// #ifdef APP-PLUS
+			console.log("app")
+			uni.getLocation({
+				type: 'gcj02',
+				geocode: true,
+				success: function(res) {
+					console.log('当前位置:' + JSON.stringify(res));
+					that.formData.latitude = res.latitude;
+					that.formData.longitude = res.longitude;
+					uni.showModal({
+						content: '定位成功',
+						showCancel: false
+					});
+				}
+			});
+			// #endif
+			// #ifdef MP-WEIXIN
+			console.log("weixin")
+			uni.getLocation({
+				type: 'wgs84',
+				success: function(res) {
+					console.log('当前位置:' + JSON.stringify(res));
+					that.formData.latitude = res.latitude;
+					that.formData.longitude = res.longitude;
+					uni.showModal({
+						content: '定位成功',
+						showCancel: false
+					});
+				}
+			});
+			// #endif
+		},
+		computed: {
+
+		},
+		onShow() {},
+		onReady() {
+			// 需要在onReady中设置规则
+			this.$refs.baseForm.setRules(this.rules)
+		},
+		methods: {
+			//返回上一页
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			onRestartLocation() {
+				// #ifdef APP-PLUS
+				console.log("app")
+				uni.getLocation({
+					type: 'gcj02',
+					geocode: true,
+					success: function(res) {
+						console.log('当前位置:' + JSON.stringify(res));
+						that.formData.latitude = res.latitude;
+						that.formData.longitude = res.longitude;
+
+					}
+				});
+				// #endif
+				// #ifdef MP-WEIXIN
+				console.log("weixin")
+				uni.getLocation({
+					type: 'wgs84',
+					success: function(res) {
+						console.log('当前位置:' + JSON.stringify(res));
+						that.formData.latitude = res.latitude;
+						that.formData.longitude = res.longitude;
+					}
+				});
+				// #endif
+			},
+			toSubmit() {
+				let that = this;
+				this.$refs.baseForm.validate().then(res => {
+					console.log('表单数据信息1:', res);
+					that.submit();
+				}).catch(err => {
+					console.log('表单错误信息:', err);
+					uni.showModal({
+						content: "内容录入错误,请根据提示信息检查录入内容!",
+						showCancel: false,
+						success(res) {
+							if (res.confirm) {
+								//that.$refs.baseForm.clearValidate();
+							}
+						}
+					});
+				})
+			},
+			submit() {
+				let formdata = this.formData;
+				console.log('toSubmit事件:', JSON.stringify(formdata));
+				let that = this;
+				http.request({
+					url: '/galaxy-business/yj/resident/location/add',
+					method: 'POST',
+					data: formdata
+				}).then(res => {
+					console.log('res ', JSON.stringify(res));
+					if (res.success) {
+						if (res.code == 200) {
+							//that.clearCache();
+							uni.showModal({
+								content: '填报信息已成功提交',
+								showCancel: false,
+								success(res) {
+									if (res.confirm) {
+										that.toBack();
+									}
+								}
+							});
+						} else {
+							uni.showModal({
+								content: '提交失败',
+								showCancel: false
+							});
+						}
+					} else {
+
+						uni.showModal({
+							content: '提交失败',
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					uni.showModal({
+						content: '' + err.data.msg,
+						showCancel: false
+					});
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		padding: 0 0 100rpx;
+	}
+</style>

+ 390 - 0
pages/yjxt/resident/dangerarearesidentrecord.vue

@@ -0,0 +1,390 @@
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<uni-forms ref="baseForm" :model="formData">
+			<uni-card title="住址定位信息" :is-shadow="false">
+				<uni-forms-item name='longitude' label="经度" label-width="100px">
+					<uni-easyinput v-model="formData.longitude" placeholder="请录入经度" />
+				</uni-forms-item>
+				<uni-forms-item name='latitude' label="纬度" label-width="100px">
+					<uni-easyinput v-model="formData.latitude" placeholder="请录入纬度" />
+				</uni-forms-item>
+			</uni-card>
+			<uni-card title="群众家庭信息" :is-shadow="false">
+				<uni-forms-item name='personName' label="户主姓名" label-width="100px" required>
+					<uni-easyinput v-model="formData.personName" placeholder="请录入户主姓名" />
+				</uni-forms-item>
+				<uni-forms-item name='personId' label="身份证号" label-width="100px" required>
+					<uni-easyinput v-model="formData.personId" placeholder="请录入身份证号" />
+				</uni-forms-item>
+				<uni-forms-item name='dangerAreaPid' label="危险区编码" label-width="100px" required>
+					<uni-row>
+						<uni-col :span="17">
+							<uni-easyinput v-model="formData.dangerAreaPid" placeholder="请录入危险区编码" />
+						</uni-col>
+						<uni-col :span="7" class="view-flex-inline-end">
+							<image class="scan-icon" mode="widthFix" src="/static/images/scan.png"
+								@click="onQrCodeClick">
+							</image>
+						</uni-col>
+					</uni-row>
+				</uni-forms-item>
+				<!-- 				<uni-forms-item name="isHouseholder" label="是否户主" label-width="100px" required>
+					<uni-data-checkbox v-model="formData.isHouseholder" :localdata="checkItems.items">
+					</uni-data-checkbox>
+				</uni-forms-item> -->
+			</uni-card>
+			<uni-card title="家庭成员" :is-shadow="false">
+				<view class="item-button-group">
+					<view class="item-button" @click="onResidentAddClick()">
+						<view class="items-line">
+							<uni-icons class="input-uni-icon" type="personadd" size="18" color="coral" />
+							<text class="button-text">添加成员</text>
+						</view>
+					</view>
+				</view>
+				<uni-list style="min-height: 40px;">
+					<uni-list-item v-for="item in familyMembersList" :key="item.id">
+						<template v-slot:body>
+							<view class="list-item-block">
+								<view class="line">
+									<text class="text text-ellipsis" style="color: gray;">姓名:{{item.personName}}</text>
+								</view>
+								<view class="line">
+									<text class="text text-ellipsis" style="color: gray;">身份证号:{{item.personId}}</text>
+								</view>
+							</view>
+						</template>
+					</uni-list-item>
+				</uni-list>
+			</uni-card>
+		</uni-forms>
+		<view class="footer">
+			<view class="control">
+				<view class="view-flex-rc">
+					<view class="block"
+						style="width: 120px;height:28px;margin-left: 10px;margin-right: 10px;border-radius:7px;background-color:lightpink"
+						@click="toSubmit()">
+						<view class="view-flex-cc">
+							<uni-icons class="input-uni-icon" type="checkmarkempty" size="18" color="#999" />
+						</view>
+						<view class="view-flex-cc" style="padding-left:5px;">
+							<text style="color:black;font-size:0.7rem">立即提交</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<uni-drawer ref="showRight" mode="right" :mask-click="false" :width="drawerWidth">
+			<view>
+				<view class="view-flex-inline" style="background-color: #3F9EFF;height: 40px;padding-left: 10px;">
+					<uni-icons class="input-uni-icon" type="personadd" size="30" color="coral" />
+					<text style="color: white;font-size: 1rem;margin-left: 10px;">添加家庭成员</text>
+				</view>
+				<view style="padding-top: 20px;padding-left: 5px;padding-right: 5px;">
+					<uni-forms ref="familyMembersForm" :model="familyMembersFormData">
+						<uni-forms-item name='personName' label="姓名" label-width="90px" required>
+							<uni-easyinput v-model="familyMembersFormData.personName" placeholder="请录入姓名" />
+						</uni-forms-item>
+						<uni-forms-item name='personId' label="身份证号" label-width="90px" required>
+							<uni-easyinput v-model="familyMembersFormData.personId" placeholder="请录入身份证号" />
+						</uni-forms-item>
+					</uni-forms>
+				</view>
+				<view class="item-button-group" style="padding-right: 10px;">
+					<view class="item-button" @click="onResidentEditCloseClick()">
+						<view class="items-line">
+							<uni-icons class="input-uni-icon" type="closeempty" size="18" color="coral" />
+							<text class="button-text">取消</text>
+						</view>
+					</view>
+					<view class="item-button" @click="onResidentEditSubmitClick()">
+						<view class="items-line">
+							<uni-icons class="input-uni-icon" type="checkmarkempty" size="18" color="coral" />
+							<text class="button-text">确定</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</uni-drawer>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+	import {
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+	export default {
+		data() {
+			return {
+				title: '危险区群众登记',
+				baseURL: '',
+				warnId: '',
+				formData: {
+					latitude: '',
+					longitude: '',
+					personName: '',
+					personId: '',
+					dangerAreaPid: '',
+					isHouseholder: 1,
+				},
+				familyMembersFormData: {
+					personName: '',
+					personId: '',
+				},
+				rules: {
+					personName: {
+						rules: [{
+							required: true,
+							errorMessage: '必填项',
+						}]
+					},
+					personId: {
+						rules: [{
+							required: true,
+							errorMessage: '必填项',
+						}, ]
+					},
+					dangerAreaPid: {
+						rules: [{
+							required: true,
+							errorMessage: '必填项',
+						}, ]
+					},
+				},
+				keepPhotos: [],
+				familyMembersList: [],
+				checkItems: {
+					items: [{
+						'value': 0,
+						'text': '否'
+					}, {
+						'value': 1,
+						'text': '是'
+					}],
+					current: 0,
+				},
+				drawerWidth: 300,
+			}
+		},
+		onLoad(option) {
+			let that = this;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.drawerWidth = uni.getWindowInfo().windowWidth - 100;
+			// #ifdef APP-PLUS
+			console.log("app")
+			uni.getLocation({
+				type: 'gcj02',
+				geocode: true,
+				success: function(res) {
+					console.log('当前位置:' + JSON.stringify(res));
+					that.formData.latitude = res.latitude;
+					that.formData.longitude = res.longitude;
+				}
+			});
+			// #endif
+			// #ifdef MP-WEIXIN
+			console.log("weixin")
+			uni.getLocation({
+				type: 'wgs84',
+				success: function(res) {
+					console.log('当前位置:' + JSON.stringify(res));
+					that.formData.latitude = res.latitude;
+					that.formData.longitude = res.longitude;
+				}
+			});
+			// #endif
+		},
+		computed: {
+
+		},
+		onShow() {},
+		onReady() {
+			// 需要在onReady中设置规则
+			this.$refs.baseForm.setRules(this.rules)
+		},
+		methods: {
+			//返回上一页
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			onResidentAddClick() {
+				this.familyMembersFormData.personId = '';
+				this.familyMembersFormData.personName = '';
+				this.$refs['showRight'].open();
+			},
+			onResidentEditCloseClick() {
+				this.$refs['showRight'].close();
+			},
+			onResidentEditSubmitClick() {
+				let familyMember = {};
+				familyMember['personId'] = this.familyMembersFormData.personId;
+				familyMember['personName'] = this.familyMembersFormData.personName;
+				this.familyMembersList.push(familyMember);
+				this.$refs['showRight'].close();
+			},
+			onCheckPhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadCheckPhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadCheckPhoto(imagePath) {
+				let that = this;
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.keepPhotos.push(path);
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onCheckPhotoDel(index) {
+				this.keepPhotos.splice(index, 1);
+			},
+			onQrCodeClick() {
+				let that = this;
+				uni.scanCode({
+					scanType: ['qrCode'],
+					success: function(res) {
+						console.log('条码类型:' + res.scanType);
+						console.log('条码内容:' + res.result);
+						that.formData.dangerAreaPid = res.result;
+					}
+				});
+			},
+			toSubmit() {
+				let that = this;
+				this.$refs.baseForm.validate().then(res => {
+					console.log('表单数据信息1:', res);
+					that.submit();
+				}).catch(err => {
+					console.log('表单错误信息:', err);
+					uni.showModal({
+						content: "内容录入错误,请根据提示信息检查录入内容!",
+						showCancel: false,
+						success(res) {
+							if (res.confirm) {
+								//that.$refs.baseForm.clearValidate();
+							}
+						}
+					});
+				})
+			},
+			submit() {
+				let formdata = this.formData;
+				//if (this.formData.isHouseholder === 1) {
+				formdata['familyMembers'] = this.familyMembersList;
+				//}
+				console.log('toSubmit事件:', JSON.stringify(formdata));
+				let that = this;
+				http.request({
+					url: '/galaxy-business/yj/resident/record',
+					method: 'POST',
+					data: formdata
+				}).then(res => {
+					console.log('res ', JSON.stringify(res));
+					if (res.success) {
+						if (res.code == 200) {
+							//that.clearCache();
+							uni.showModal({
+								content: '填报信息已成功提交',
+								showCancel: false,
+								success(res) {
+									if (res.confirm) {
+										that.toBack();
+									}
+								}
+							});
+						} else {
+							uni.showModal({
+								content: '提交失败',
+								showCancel: false
+							});
+						}
+					} else {
+
+						uni.showModal({
+							content: '提交失败',
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					uni.showModal({
+						content: '' + err.data.msg,
+						showCancel: false
+					});
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		padding: 0 0 100rpx;
+	}
+
+	.scan-icon {
+		/* #ifndef APP-NVUE */
+		display: block;
+		/* #endif */
+		// margin-right: 10px;
+		width: 30px;
+		height: 30px;
+	}
+
+	.close {
+		padding: 10px;
+	}
+</style>

+ 200 - 0
pages/yjxt/resident/dangerarearesidentrecordlist.vue

@@ -0,0 +1,200 @@
+<!--
+ * @Title: 
+ * @Description: 危险区人员清单
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+	<view class="wrap">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<view class="container">
+			<uni-section title="查询" type="line">
+				<view class="search-block">
+					<view class="rtu-name">
+						<uni-easyinput :styles="inputStyles" @input="adNameValInput" prefixIcon="search"
+							v-model="adNameVal" placeholder="请录入行政区名称">
+						</uni-easyinput>
+					</view>
+					<view class="rtu-name">
+						<uni-easyinput :styles="inputStyles" @input="dangerAreaNameValInput" prefixIcon="search"
+							v-model="dangerAreaNameVal" placeholder="请录入危险区名称">
+						</uni-easyinput>
+					</view>
+					<view class="rtu-name">
+						<uni-easyinput :styles="inputStyles" @input="personNameValInput" prefixIcon="search"
+							v-model="personNameVal" placeholder="请录入户主名称">
+						</uni-easyinput>
+					</view>
+					<view class="submit-btn">
+						<button type="default" @click="search">查 询</button>
+					</view>
+				</view>
+			</uni-section>
+			<uni-list>
+				<uni-list-item v-for="item in list" :key="item.id">
+					<template v-slot:body>
+						<view class="list-item-block">
+							<view class="line">
+								<text class="text text-ellipsis">行政区:{{item.adName}}</text>
+							</view>
+							<view class="line">
+								<text class="text text-ellipsis">危险区:{{item.dangerAreaName}}</text>
+							</view>
+							<view class="line">
+								<text class="text text-ellipsis">户主姓名:{{item.personName}}</text>
+							</view>
+							<view class="line">
+								<text class="text text-ellipsis">身份证号:{{item.personId}}</text>
+							</view>
+							<view class="line">
+								<text class="text text-ellipsis">住址经纬度:{{item.longitude}},{{item.latitude}}</text>
+							</view>
+							<view class="item-button-group" style="padding-right: 10px;">
+								<view class="item-button mid-size" @click="onAddLocationClick(item)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="location" size="18" color="coral" />
+										<text class="button-text">定位补录</text>
+									</view>
+								</view>
+								<view class="item-button mid-size" @click="onOpenFamilyListClick(item)">
+									<view class="items-line">
+										<uni-icons class="input-uni-icon" type="staff" size="18" color="coral" />
+										<text class="button-text">家庭成员表</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+			<uni-group>
+				<view class="pagination-block">
+					<uni-pagination show-icon :pageSize="pageSize" :current="pageCurrent" :total="total"
+						@change="pageChange" />
+				</view>
+			</uni-group>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+	export default {
+		components: {},
+		onLoad(option) {
+			this.query = {};
+			this.query['isHouseholder'] = 1;
+		},
+		data() {
+			return {
+				title: '登记人员清单',
+				pageSize: 10,
+				pageCurrent: 1,
+				total: 0,
+				list: [],
+				query: {},
+				warnId: '',
+				adNameVal: '',
+				dangerAreaNameVal: '',
+				personNameVal: '',
+				inputStyles: {
+					color: '#808080',
+					borderColor: '#d3d3d3'
+				},
+			}
+		},
+		computed: {},
+		onShow() {
+			this.getPage();
+		},
+		methods: {
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			adNameValInput(e) {
+				if (e == null || e.length == 0) {
+					this.adNameVal = '';
+				}
+			},
+			dangerAreaNameValInput(e) {
+				if (e == null || e.length == 0) {
+					this.dangerAreaNameVal = '';
+				}
+			},
+			personNameValInput(e) {
+				if (e == null || e.length == 0) {
+					this.personNameVal = '';
+				}
+			},
+			search() {
+				this.pageCurrent = 1;
+				let params = {};
+				if (this.adNameVal.length > 0) {
+					params['adName'] = this.adNameVal;
+				}
+				if (this.dangerAreaNameVal.length > 0) {
+					params['dangerAreaName'] = this.dangerAreaNameVal;
+				}
+				if (this.personNameVal.length > 0) {
+					params['personName'] = this.personNameVal;
+				}
+				this.getPage(params);
+			},
+			onAddLocationClick(item) {
+				var url = '/pages/yjxt/resident/dangerarearesidentlocation?id=' + item.id + '&lng=' + item.longitude +
+					'&lat=' + item.latitude;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			onOpenFamilyListClick(item) {
+				var url = '/pages/yjxt/resident/dangerarearesidentfamilylist?personId=' + item.personId;
+				uni.navigateTo({
+					url: url
+				})
+			},
+			pageChange(e) {
+				this.pageCurrent = e.current;
+				this.getPage()
+			},
+			getPage(params = {}) {
+				const current = this.pageCurrent;
+				const size = this.pageSize;
+				let postData = Object.assign(params, this.query);
+				let that = this;
+				http.request({
+					url: '/galaxy-business/yj/resident/page',
+					method: 'GET',
+					params: {
+						current,
+						size,
+					},
+					data: postData,
+				}).then(res => {
+					if (res.data.records != null) {
+						that.list = res.data.records;
+					}
+					this.total = res.data.total;
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 421 - 0
pages/yjxt/transfer/residenttransferrecord.vue

@@ -0,0 +1,421 @@
+<template>
+	<view class="container">
+		<uni-nav-bar dark :fixed="true" backgroundColor="#3F9EFF" statusBar="false" left-icon="left" left-text="返回"
+			@clickLeft="toBack">
+			<view class="nav-title">
+				<text>{{title}}</text>
+			</view>
+		</uni-nav-bar>
+		<uni-forms ref="baseForm" :model="formData">
+			<uni-card title="转移人员信息" :is-shadow="false">
+				<uni-forms-item name='name' label="姓名" label-width="100px" required>
+					<uni-easyinput v-model="formData.personName" placeholder="请录入姓名" />
+				</uni-forms-item>
+				<uni-forms-item name='id' label="身份证号" label-width="100px" required>
+					<uni-easyinput v-model="formData.personId" placeholder="请录入身份证号" />
+				</uni-forms-item>
+				<uni-forms-item name="familyMembersTransferStatus" label="家庭户是否转移完成" label-width="100px" required>
+					<uni-data-checkbox v-model="formData.familyMembersTransferStatus" :localdata="checkItems.items">
+					</uni-data-checkbox>
+				</uni-forms-item>
+				<uni-forms-item name='remark' label="补充说明" label-width="100px">
+					<uni-easyinput v-model="formData.remark" placeholder="请录入其他需要说明的情况" />
+				</uni-forms-item>
+			</uni-card>
+			<uni-card title="留存图片" extra="点击下方按钮开始拍摄" :is-shadow="false">
+				<view class="view-flex-rs-flex-wrap">
+					<view v-for="(item, index) in keepPhotos" :key="index" class="view-flex-cc" style="width: 100px;">
+						<view class="img-container">
+							<view class="note-image-box">
+								<view class="note-image-item">
+									<view class="close-icon" @click="onCheckPhotoDel(index)">
+										<uni-icons type="closeempty" size="18" color="#fff"></uni-icons>
+									</view>
+									<view class="image-box">
+										<image :src="toOss(item)" mode="widthFix">
+										</image>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+					<view class="view-flex-cc" style="width: 80px;">
+						<view class="img-container">
+							<view class="note-image-box">
+								<view class="note-image-item" @click="onCheckPhotoAdd()">
+									<view class="image-box">
+										<uni-icons type="plusempty" size="50" color="#eee"></uni-icons>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</uni-card>
+		</uni-forms>
+		<view class="footer">
+			<view class="control">
+				<view class="view-flex-rc">
+					<view class="block"
+						style="width: 120px;height:28px;margin-left: 10px;margin-right: 10px;border-radius:7px;background-color:lightpink"
+						@click="toSubmit()">
+						<view class="view-flex-cc">
+							<uni-icons class="input-uni-icon" type="checkmarkempty" size="18" color="#999" />
+						</view>
+						<view class="view-flex-cc" style="padding-left:5px;">
+							<text style="color:black;font-size:0.7rem">立即提交</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		role
+	} from "@/api/role.js";
+	import http from '@/http/api.js';
+	import {
+		oss,
+		devUrl,
+		prodUrl
+	} from '@/common/setting';
+	export default {
+		data() {
+			return {
+				title: '转移登记',
+				baseURL: '',
+				baseOSS: '',
+				warnId: '',
+				formData: {
+					personName: '',
+					personId: '',
+					familyMembersTransferStatus: 0,
+					remark: '',
+				},
+				keepPhotos: [],
+				checkItems: {
+					items: [{
+						'value': 0,
+						'text': '否'
+					}, {
+						'value': 1,
+						'text': '是'
+					}],
+					current: 0,
+				},
+			}
+		},
+		onLoad(option) {
+			let that = this;
+			this.baseOSS = oss;
+			this.baseURL = process.env.NODE_ENV === 'development' ? devUrl : prodUrl;
+			this.warnId = option.id;
+		},
+		computed: {
+
+		},
+		onShow() {},
+		methods: {
+			toOss(path) {
+				let url = this.baseOSS + path;
+				return url;
+			},
+			onBackPress() {
+				// #ifdef APP-PLUS
+				plus.key.hideSoftKeybord();
+				// #endif
+			},
+			//返回上一页
+			toBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			},
+			getAddress(lng, lat) {
+				console.log("get address " + lat + lng);
+				let url = 'https://apis.map.qq.com/ws/geocoder/v1/?location=' + lat + ',' + lng +
+					'&key=4HYBZ-EB23D-SLC42-HQ5R3-LP3LQ-OZFU5';
+				console.log(url);
+				http.request({
+					url: url,
+					method: 'GET',
+				}).then(res => {
+					console.log('当前位置:' + JSON.stringify(res));
+
+				}).catch(err => {
+					console.log(err)
+				})
+			},
+			onCheckPhotoAdd() {
+				let that = this;
+				uni.chooseImage({
+					sourceType: ['camera'],
+					sizeType: ['compressed'],
+					success: (res) => {
+						const len = res.tempFilePaths.length;
+						if (len === 1) {
+							res.tempFilePaths.forEach(path => {
+								that.uploadCheckPhoto(path);
+							})
+						} else {
+							uni.showModal({
+								content: '只能选择一张图片,请确认!',
+								showCancel: false
+							});
+						}
+					}
+				})
+			},
+			uploadCheckPhoto(imagePath) {
+				let that = this;
+				uni.showLoading({
+					title: '上传中'
+				});
+				uni.uploadFile({
+					url: this.baseURL + '/galaxy-resource/oss/endpoint/put-file-attach?Blade-Auth=' +
+						uni.getStorageSync('accessToken'),
+					fileType: 'image',
+					filePath: imagePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						if (uploadFileRes.statusCode == 200) {
+							let data = JSON.parse(uploadFileRes.data);
+							if (data.success) {
+								let path = data.data['name'];
+								that.keepPhotos.push(path);
+
+							}
+						}
+					},
+					fail: (err) => {
+						console.log(err);
+						reject('err')
+					},
+					complete() {
+						uni.hideLoading()
+					}
+				});
+			},
+			onCheckPhotoDel(index) {
+				this.keepPhotos.splice(index, 1);
+			},
+			toSubmit() {
+				let that = this;
+				this.$refs.baseForm.validate().then(res => {
+					console.log('表单数据信息1:', res);
+					that.submit();
+				}).catch(err => {
+					console.log('表单错误信息:', err);
+					uni.showModal({
+						content: "内容填报错误,请根据提示信息检查录入内容!",
+						showCancel: false,
+						success(res) {
+							if (res.confirm) {
+								//that.$refs.baseForm.clearValidate();
+							}
+						}
+					});
+				})
+			},
+			submit() {
+				let formdata = this.formData;
+				formdata['warnId'] = this.warnId;
+				if (this.keepPhotos.length > 0) {
+					let photos = '';
+					for (let i = 0; i < this.keepPhotos.length; i++) {
+						if (photos.length > 0) {
+							photos = photos + ',';
+						}
+						photos = photos + this.keepPhotos[i];
+					}
+					formdata['keepPhotos'] = photos;
+				}
+				console.log('toSubmit事件:', JSON.stringify(formdata));
+				let that = this;
+				http.request({
+					url: '/galaxy-business/yj/transfer/person/record',
+					method: 'POST',
+					data: formdata
+				}).then(res => {
+					console.log('res ', JSON.stringify(res));
+					if (res.success) {
+						if (res.code == 200) {
+							//that.clearCache();
+							uni.showModal({
+								content: '填报信息已成功提交',
+								showCancel: false,
+								success(res) {
+									if (res.confirm) {
+										that.toBack();
+									}
+								}
+							});
+						} else {
+							uni.showModal({
+								content: '提交失败',
+								showCancel: false
+							});
+						}
+					} else {
+
+						uni.showModal({
+							content: '提交失败',
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					//	console.log('errr3',JSON.stringify(err));
+					uni.showModal({
+						content: '' + err.data.msg,
+						showCancel: false
+					});
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		padding: 0 0 100rpx;
+	}
+
+
+
+	.view-flex-rs-flex-wrap {
+		display: flex;
+		flex-direction: row;
+		justify-content: flex-start;
+		flex-wrap: wrap;
+	}
+
+	.img-container {
+		margin-bottom: 0px;
+		width: 100px;
+		height: 100px;
+
+		.note-image-box {
+			margin-top: 0px;
+			display: flex;
+			flex-wrap: wrap;
+			padding: 10px;
+
+			.note-image-item {
+				position: relative;
+				width: 100%;
+				height: 0;
+				padding-top: 100%;
+				box-sizing: border-box;
+				// background-color: #18B566;
+
+				.close-icon {
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					position: absolute;
+					right: 0px;
+					top: 0px;
+					width: 22px;
+					height: 22px;
+					border-radius: 50%;
+					background-color: #d5d5d5;
+					z-index: 2;
+				}
+
+				.image-box {
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					position: absolute;
+					top: 0px;
+					right: 0px;
+					border: 0px;
+					left: 0px;
+					border: 1px #eee solid;
+					border-radius: 5px;
+					overflow: hidden;
+					width: 99%;
+					height: 99%;
+
+				}
+
+
+			}
+		}
+	}
+
+	.view-flex-rc {
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+	}
+
+
+
+	.view-flex-cc {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.footer {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		z-index: 1;
+		height: 100rpx;
+		padding: 20rpx;
+		box-sizing: border-box;
+		display: flex;
+		align-items: center;
+		justify-content: flex-end;
+		background-color: whitesmoke;
+
+		.ipt {
+			width: 380rpx;
+			height: 77rpx;
+			background: #f7f7f7;
+			border-radius: 38px;
+			padding: 0 37rpx;
+			box-sizing: border-box;
+			margin-right: 20rpx;
+		}
+
+		.control {
+			flex: 1;
+			display: flex;
+			align-items: center;
+			justify-content: flex-end;
+
+			.block {
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				flex: 1;
+			}
+
+			.icon {
+				height: auto;
+			}
+
+			.c {
+				width: 41rpx;
+				margin-right: 10rpx;
+			}
+
+			.s {
+				width: 36rpx;
+			}
+
+			.t {
+				width: 31rpx;
+			}
+		}
+	}
+</style>

Some files were not shown because too many files changed in this diff