From b850badcf800eff5819e0789d1b81e5e27fcd037 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期五, 29 十一月 2024 17:21:34 +0800
Subject: [PATCH] ll

---
 h5/pages.json                                                   |   22 
 h5/api/index.js                                                 |    9 
 h5/static/empty.png                                             |    0 
 h5/pages/workOrder/edit.vue                                     |  396 ++++++++++-----
 h5/pages/common/memberSel.vue                                   |  256 ++++++++++
 h5/pages/operation/detail.vue                                   |   37 +
 h5/utils/service.js                                             |    2 
 h5/pages/index.vue                                              |   41 +
 h5/pages/login.vue                                              |   82 +-
 admin/src/views/workorder/components/detail.vue                 |    2 
 h5/pages/workOrder/list.vue                                     |   56 +
 h5/api/yw.js                                                    |   73 ++
 h5/pages/workOrder/detail.vue                                   |  108 ++-
 h5/pages/operation/record.vue                                   |  154 ++++-
 h5/api/staff.js                                                 |  211 --------
 h5/manifest.json                                                |    4 
 h5/static/home/ic_xinzenggongdan@2x.png                         |    0 
 admin/src/views/workorder/components/OperaYwWorkorderWindow.vue |    2 
 18 files changed, 945 insertions(+), 510 deletions(-)

diff --git a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
index 8542213..85d8bee 100644
--- a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
+++ b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
@@ -49,7 +49,7 @@
               <i class="el-icon-plus avatar-uploader-icon"></i>
               <div>鍥剧墖/瑙嗛</div>
             </div>
-          </el-upload>
+          </el-upload>  
           <div v-for="(item, i) in fileList" :key="i" class="item">
             <i @click="handleDelImg(i)" class="el-icon-error close"></i>
             <el-image :src="item.fileurlFull" :preview-src-list="[item.fileurlFull]" v-if="item.type == 0"
diff --git a/admin/src/views/workorder/components/detail.vue b/admin/src/views/workorder/components/detail.vue
index 9722c08..9f020e9 100644
--- a/admin/src/views/workorder/components/detail.vue
+++ b/admin/src/views/workorder/components/detail.vue
@@ -178,7 +178,7 @@
       uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch',
       dealFileList: [],
       uploadData: {
-        folder: 'HIDDEN_DANGER_FILE'
+        folder: 'YW_WORKORDER_FILE'
       },
     }
   },
diff --git a/h5/api/index.js b/h5/api/index.js
index 9a7edfe..c931054 100644
--- a/h5/api/index.js
+++ b/h5/api/index.js
@@ -1,6 +1,7 @@
 import { http } from '@/utils/service.js'
 export * from '@/utils/config.js'
 export * from './staff'
+export * from './yw'
 
 
 
@@ -16,14 +17,6 @@
   return http({
     url: 'visitsAdmin/cloudService/web/visitor/wxAuthorize',
     method: 'get',
-    data
-  })
-}
-//  鍙戦�佺煭淇¢獙璇佺爜
-export const sendSms = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/smsEmail/sendSms',
-    method: 'post',
     data
   })
 }
\ No newline at end of file
diff --git a/h5/api/staff.js b/h5/api/staff.js
index ea64d24..b77655f 100644
--- a/h5/api/staff.js
+++ b/h5/api/staff.js
@@ -3,53 +3,29 @@
 // login
 export const loginPost = (data) => {
   return http({
-    url: 'loginH5',
+    url: 'loginByPhone',
     method: 'post',
     data
   })
 }
-export const loginCaptcha = () => {
+export const sendSMsPost = (data) => {
   return http({
-    url: 'captcha',
-    method: 'get'
+    url: 'visitsAdmin/cloudService/business/smsEmail/sendSms',
+    method: 'post',
+    data
   })
 }
-// 鍒锋柊token
-export const refreshToken = () => {
+export const findInternalList = (data) => {
   return http({
-    url: 'refreshtoken',
-    method: 'post'
+    url: 'visitsAdmin/cloudService/system/user/findInternalList',
+    method: 'post',
+    data
   })
 }
 export const getUserInfo = () => {
   return http({
     url: 'getUserInfo',
     method: 'get'
-  })
-}
-// 鏌ヨ浜哄憳鐩稿叧淇℃伅0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴浜哄憳,绀轰緥鍊�(1)
-export const findTypeMemberInfo = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/member/findTypeMemberInfo',
-    // url: 'visitsAdmin/cloudService/business/member/page',
-    method: 'post',
-    data
-  })
-}
-//  閲嶇疆瀵嗙爜
-export const resetPassword = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/visits/resetPassword',
-    method: 'post',
-    data
-  })
-}
-//  淇敼瀵嗙爜
-export const uploadPassword = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/member/updatePwd',
-    method: 'post',
-    data
   })
 }
 // loginout
@@ -61,172 +37,3 @@
   })
 }
 
-//  闅愭偅闅忔墜鎷� 鍒涘缓
-export const DangerCreate = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/hiddenDanger/create',
-    method: 'post',
-    data
-  })
-}
-// 闅愭偅鍖哄煙
-export const DangerArea = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/hiddenDanger/create',
-    method: 'post',
-    data
-  })
-}
-// 闅愭偅 璇︽儏
-export const hiddenDangerDetail = (id) => {
-  return http({
-    url:  `visitsAdmin/cloudService/business/hiddenDanger/${id}`,
-    method: 'get'
-  })
-}
-// 閮ㄩ棬鍒楄〃
-export const deptListPost = (data) => {
-  return http({
-    url: '/visitsAdmin/cloudService/business/company/list',
-    method: 'post',
-    data
-  })
-}
-// 闅愭偅 绫诲瀷
-export const DangerConfigType = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/hiddenDangerParam/list',
-    method: 'post',
-    data
-  })
-}
-// 闅愭偅 鏌ヨ鍖哄煙鍐呭畨鍏ㄥ憳
-export const findHiddenAreaMemberList = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/hiddenDangerParam/findHiddenAreaMemberList',
-    method: 'post',
-    data
-  })
-}
-// 闅愭偅 澶勭悊
-export const dealHiddenDanger = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/hiddenDanger/dealHiddenDanger',
-    method: 'post',
-    data
-  })
-}
-// 闅愭偅 杞氦
-export const transferHiddenDanger = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/hiddenDanger/transferHiddenDanger',
-    method: 'post',
-    data
-  })
-}
-// 闅愭偅 娴佺▼鍒楄〃
-export const findListFlowDanger = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/hiddenDangerLog/findList',
-    method: 'post',
-    data
-  })
-}
-// 杞﹁締 鍒楄〃
-export const getCarsList = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/cars/list',
-    method: 'post',
-    data
-  })
-}
-// 鏌ヨ杞﹁締鍙绾︽椂娈�
-export const carCanReservationDate = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/carUseBook/carCanReservationDate',
-    method: 'get',
-    data
-  })
-}
-// 鏌ヨ杞﹁締 棰勭害璁板綍
-export const carUseBookList = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/carUseBook/carUseBookList',
-    method: 'post',
-    data
-  })
-}
-
-// 鐢ㄨ溅鐢宠鎻愪氦
-export const carUseBookCraete = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/carUseBook/create',
-    method: 'post',
-    data
-  })
-}
-
-// 鏌ヨ杞﹁締 娲捐溅璁板綍
-export const carUseBookPaiche = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/carUseBook/page',
-    method: 'post',
-    data
-  })
-}
-// 鏌ヨ杞﹁締 娲捐溅璁板綍 璇︽儏
-export const carUseBookDetail = (id) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/carUseBook/'+id,
-    method: 'get'
-  })
-}
-//  瀹℃壒
-export const carUseBookAppr = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/approve/approved',
-    method: 'post',
-    data
-  })
-}
-// 鏌ヨ杞﹁締 娲捐溅璁板綍 鎾ら攢鐢宠
-export const carUseBookBack = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/carUseBook/revoke',
-    method: 'get',
-    data
-  })
-}
-// 鏌ヨ杞﹁締 鍙告満鍒楄〃
-export const driveListPost = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/member/driveList',
-    method: 'post',
-    data
-  })
-}
-
-//  浠诲姟涓績 澶撮儴鏁版嵁
-export const stagingHead = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/staging/taskCenterHead',
-    method: 'get',
-    data
-  })
-}
-//  浠诲姟涓績 鍒嗛〉鏁版嵁
-export const stagingTaskPage = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/staging/taskPage',
-    method: 'post',
-    data
-  })
-}
-//  浠诲姟涓績 鏍囪宸茶
-export const signReadTask = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/business/staging/signRead',
-    method: 'get',
-    data
-  })
-}
diff --git a/h5/api/yw.js b/h5/api/yw.js
new file mode 100644
index 0000000..ff980d2
--- /dev/null
+++ b/h5/api/yw.js
@@ -0,0 +1,73 @@
+import { http } from '@/utils/service.js'
+
+// 宸ュ崟鍒楄〃
+export const ywWorkorder = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywWorkorder/page',
+    data
+  })
+}
+// 宸ュ崟璇︽儏
+export const ywWorkorderD = (id) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywWorkorder/' + id,
+		method: 'get'
+  })
+}
+// 宸ュ崟澶勭悊
+export const ywWorkorderDeal = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywWorkorder/dealOrder',
+    data
+  })
+}
+// 鍒涘缓宸ュ崟
+export const ywWorkorderCreate = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywWorkorder/create',
+    data
+  })
+}
+// 椤圭洰鍒楄〃
+export const ywProjectPost = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywProject/list',
+    data
+  })
+}
+// 妤煎畤鍒楄〃
+export const ywBuildingPost = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywBuilding/list',
+    data
+  })
+}
+// 妤煎眰鍒楄〃
+export const ywFloorPost = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywFloor/list',
+    data
+  })
+}
+// 鎴挎簮鍒楄〃
+export const ywRoomPost = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywRoom/list',
+    data
+  })
+}
+
+// 杩愮淮璁板綍
+export const ywDeviceRecord = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywDeviceRecord/page',
+    data
+  })
+}
+// 杩愮淮璁板綍璇︽儏
+export const ywDeviceDetail = (id) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/ywDeviceRecord/' + id,
+    method: 'get'
+  })
+}
\ No newline at end of file
diff --git a/h5/manifest.json b/h5/manifest.json
index 2e78cce..952b225 100644
--- a/h5/manifest.json
+++ b/h5/manifest.json
@@ -129,9 +129,9 @@
                 "/gateway_interface" : {
                     // 杩欎釜瀛楁鍚嶉渶涓庝綘閰嶇疆鐨刡asePrefixUrl涓�鑷达紝绯荤粺璇嗗埆鍒板甫鏈�/dev-api璇锋眰鐨勫湴鍧�鏃讹紝浼氬湪鍓嶉潰鎷兼帴涓婁唬鐞嗘湇鍔″櫒鍦板潃
                     // "target" : "http://172.20.10.7:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
-                    // "target" : "http://192.168.0.100:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+                    "target" : "http://192.168.0.108:10030", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
                     // "target" : "http://10.50.250.253:8088/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
-                    "target" : "http://192.168.0.173/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+                    // "target" : "http://192.168.0.173/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
                     "changeOrigin" : true, // 鍏佽璺ㄥ煙 
                     "pathRewrite" : {
                         "^/gateway_interface" : ""
diff --git a/h5/pages.json b/h5/pages.json
index c288dfa..af9ee5b 100644
--- a/h5/pages.json
+++ b/h5/pages.json
@@ -2,17 +2,18 @@
 	"easycom": {
 		"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
 	},
-	"pages": [{
+	"pages": [
+		{
+			"path": "pages/login",
+			"style": {
+				"navigationBarTitleText": "鐧诲綍"
+			}
+		},
+		{
 			"path": "pages/index",
 			"style": {
 				"navigationBarTitleText": "棣栭〉",
 				"enablePullDownRefresh": false
-			}
-		},
-		{
-			"path": "pages/login",
-			"style": {
-				"navigationBarTitleText": "鐧诲綍"
 			}
 		},
 		{
@@ -75,6 +76,13 @@
 			{
 				"navigationBarTitleText" : "宸℃鐐�"
 			}
+		},
+		{
+			"path" : "pages/common/memberSel",
+			"style" : 
+			{
+				"navigationBarTitleText" : "閫夋嫨浜哄憳"
+			}
 		}
 	],
 	"globalStyle": {
diff --git a/h5/pages/common/memberSel.vue b/h5/pages/common/memberSel.vue
new file mode 100644
index 0000000..ee80a52
--- /dev/null
+++ b/h5/pages/common/memberSel.vue
@@ -0,0 +1,256 @@
+<template>
+	<view class="main_app">
+		<view class="search_inp df_ac">
+			<image class="mr12 search" src="@/static/home/ic_search@2x.png" mode="widthFix"></image>
+			<input v-model="param.name" @blur="initData()" type="text" placeholder="璇疯緭鍏ュ鍚嶈繘琛屾悳绱�"
+				placeholder-style="color: #999999;" />
+		</view>
+		<view class="member_list">
+			<view v-for="item in memberList" @click="onSubmit(item)" :key="item.id" class="line">
+				<image v-if="item.faceImgFull" :src="item.faceImgFull" class="avatar"></image>
+				<span v-else class="img_name">{{item.realname && item.realname.slice(0,1)}}</span>
+				<view class="content">
+					<view class="info">
+						<text class="name">{{ item.realname }}</text>
+						<!-- <text class="tag">tag</text> -->
+					</view>
+					<view class="depart">{{ item.companyName }}</view>
+				</view>
+				<text></text>
+			</view>
+			<view v-if="memberList.length == 0" class="empty_wrap">
+				<image src="@/static/empty.png"></image>
+				<text>鏆傛棤鏁版嵁</text>
+			</view>
+		</view>
+		<!--  -->
+	</view>
+</template>
+
+<script>
+	import {
+		findInternalList
+	} from '@/api'
+	export default {
+		data() {
+			return {
+				memberList: [],
+				selList: [],
+				param: {},
+
+				isShowSelMem: false
+			}
+		},
+		onLoad() {
+			this.initData()
+		},
+		methods: {
+			onSubmit(item) {
+				this.$eventBus.$emit('memberSel', { realname: item.realname, id: item.id })
+				uni.navigateBack()
+			},
+			changeMem(e) {
+				console.log(e.detail.value[0]);
+				const id = Number(e.detail.value[0])
+				const item = this.memberList.find(i => i.id === id)
+				this.$eventBus.$emit('snapshotSel', item)
+				uni.navigateBack()
+			},
+			initData() {
+				const {
+					param
+				} = this
+				findInternalList({
+					realname: param.name,
+					id: param.id
+				}).then(res => {
+					this.memberList = res.data || []
+				})
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.modal {
+		padding: 40rpx 30rpx;
+
+		.modal_header {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			.status {
+				font-weight: 600;
+			}
+
+			.btn {
+				color: $uni-color-primary;
+			}
+		}
+
+		.modal_mem_list {
+			.line {
+				display: flex;
+				align-items: center;
+				border-bottom: 1rpx solid #e5e5e5;
+				padding: 30rpx 0;
+
+				.avatar {
+					width: 64rpx;
+					height: 64rpx;
+					border-radius: 50%;
+					overflow: hidden;
+					margin-right: 20rpx;
+				}
+
+				.content {
+					flex: 1;
+
+					.depart {
+						font-size: 24rpx;
+						color: #666666;
+					}
+
+					.info {
+						display: flex;
+						margin-bottom: 16rpx;
+
+						.name {
+							font-size: 30rpx;
+						}
+					}
+				}
+
+				.btn {
+					width: 80rpx;
+					height: 48rpx;
+					line-height: 48rpx;
+					text-align: center;
+					font-size: 24rpx;
+					color: #333333;
+					border-radius: 4rpx;
+					border: 1rpx solid #999999;
+				}
+			}
+		}
+	}
+
+	.sub_wrap {
+		position: absolute;
+		bottom: 0;
+		left: 0;
+		width: 100%;
+		box-shadow: 0rpx 0rpx 6rpx 0rpx #b2b2b2;
+		padding: 30rpx 30rpx 64rpx;
+
+		.sel_mem {
+			display: flex;
+			align-items: center;
+
+			.members {
+				width: 500rpx;
+				color: $uni-color-primary;
+				white-space: nowrap;
+				overflow: hidden; //鏂囨湰瓒呭嚭闅愯棌
+				text-overflow: ellipsis;
+				margin-right: 20rpx;
+			}
+
+			.open_icon {
+				width: 44rpx;
+				height: 44rpx;
+			}
+		}
+
+		.btn {
+			width: 690rpx;
+			height: 88rpx;
+			line-height: 88rpx;
+			background: $uni-color-primary;
+			border-radius: 44rpx;
+			color: #fff;
+			text-align: center;
+			margin-top: 22rpx;
+		}
+	}
+
+	.member_list {
+		.line {
+			display: flex;
+			align-items: center;
+			border-bottom: 1rpx solid #e5e5e5;
+			padding: 30rpx 0;
+
+			.avatar {
+				width: 64rpx;
+				height: 64rpx;
+				border-radius: 50%;
+				overflow: hidden;
+				margin-right: 20rpx;
+			}
+
+			.img_name {
+				width: 64rpx;
+				height: 64rpx;
+				line-height: 64rpx;
+				text-align: center;
+				border-radius: 50%;
+				overflow: hidden;
+				margin-right: 20rpx;
+				background: $uni-color-primary;
+				color: #fff;
+				border: 1rpx solid $uni-color-primary;
+			}
+
+			.content {
+				flex: 1;
+
+				.depart {
+					font-size: 24rpx;
+					color: #666666;
+				}
+
+				.info {
+					display: flex;
+					margin-bottom: 16rpx;
+
+					.name {
+						font-size: 30rpx;
+					}
+
+					.tag {
+						font-size: 24rpx;
+						border-radius: 4rpx;
+						border: 1rpx solid #f62710;
+						color: #f62710;
+						padding: 0rpx 6rpx;
+						margin-left: 8rpx;
+					}
+				}
+			}
+		}
+
+		.empty {
+			width: 100%;
+			height: 280rpx;
+		}
+	}
+
+	.search_inp {
+		height: 72rpx;
+		background: #f7f7f7;
+		border-radius: 4rpx;
+		padding-left: 16rpx;
+
+		.search {
+			width: 28rpx;
+		}
+
+		input {
+			flex: 1;
+			font-size: 28rpx;
+			color: #333333;
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/h5/pages/index.vue b/h5/pages/index.vue
index 3970282..8232d81 100644
--- a/h5/pages/index.vue
+++ b/h5/pages/index.vue
@@ -1,6 +1,6 @@
 <template>
 	<view class="main_app">
-		<view class="hone_name title">{{ userInfo.name }}锛屾杩庣櫥褰�</view>
+		<view class="hone_name title">{{ userInfo.realname }}锛屾杩庣櫥褰�</view>
 		<view class="home_con">
 			<image class="bg" src="@/static/home/home_bg.jpg" mode=""></image>
 			<view class="h1">闃滃畞鏂囦綋涓績</view>
@@ -20,19 +20,21 @@
 				<view class="name">{{item.name}}</view>
 			</view>
 		</view>
+		<view class="loginout" @click="loginOut">閫�鍑虹櫥闄�</view>
 	</view>
-
 </template>
 
-<script>
+<script>
+	import { logoutPost } from '@/api'
 	export default {
 		data() {
 			return {
 				userInfo: uni.getStorageSync('userInfo') || {},
-				list1: [{
-						name: '鎵爜宸℃',
-						url: '',
-						img: require('@/static/home/ic_fangkebaobei@2x.png'),
+				list1: [
+					{
+						name: '鏂板宸ュ崟',
+						url: '/pages/workOrder/edit',
+						img: require('@/static/home/ic_xinzenggongdan@2x.png'),
 						auth: 'weixin:menu:visitcar'
 					},
 					{
@@ -72,7 +74,14 @@
 					url: item.url
 				})
 			},
-			
+			loginOut() {
+				this.$store.commit('empty')
+				logoutPost()
+				uni.redirectTo({
+					url: '/pages/login'
+				})
+			},
+
 		}
 	}
 </script>
@@ -131,5 +140,21 @@
 				}
 			}
 		}
+
+		.loginout {
+			position: fixed;
+			bottom: 88rpx;
+			left: 50%;
+			transform: translate(-50%, 0);
+			width: 152rpx;
+			height: 60rpx;
+			border-radius: 30rpx;
+			border: 1rpx solid $primaryColor;
+			color: $primaryColor;
+			font-size: 26rpx;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+		}
 	}
 </style>
\ No newline at end of file
diff --git a/h5/pages/login.vue b/h5/pages/login.vue
index 0b3b772..666d529 100644
--- a/h5/pages/login.vue
+++ b/h5/pages/login.vue
@@ -5,16 +5,17 @@
     <view class="login_list">
       <view class="login_list_item">
         <image src="@/static/login_ic_phone@2x.png" mode="widthFix" />
-        <input v-model="form.username" maxlength="18" placeholder="璇疯緭鍏ユ墜鏈哄彿" />
+        <input v-model="form.phone" maxlength="18" placeholder="璇疯緭鍏ユ墜鏈哄彿" />
       </view>
-<!--      <view class="login_list_item">
+<!--     <view class="login_list_item">
         <image src="@/static/login_ic_password@2x.png" mode="widthFix" />
         <input v-model="form.password" type="password" placeholder="瀵嗙爜" />
       </view> -->
-      <view class="login_list_item">
+     <view class="login_list_item">
         <image src="@/static/login_ic_password@2x.png" mode="widthFix"></image>
         <input v-model="form.code" placeholder="璇疯緭鍏ラ獙璇佺爜" type="text" />
-        <view class="btn">鑾峰彇楠岃瘉鐮�</view>
+        <view v-if="downTime == 0" class="btn" @click="sendSms">鑾峰彇楠岃瘉鐮�</view>
+        <view v-else class="btn gray">{{ downTime }}</view>
       </view>
     </view>
     <view class="login_btn">
@@ -24,7 +25,7 @@
 </template>
 
 <script>
-import { loginPost, loginCaptcha, getUserInfo, getSystemDictData } from '@/api'
+import { loginPost, getUserInfo, sendSMsPost } from '@/api'
 import { mapState, mapMutations } from 'vuex'
 export default {
   name: 'login',
@@ -32,20 +33,14 @@
   data() {
     return {
       form: {
-        // username: '18056814089',
-        username: '',
-        password: '',
-				code: ''
+				phone: '17878787878',
+				code: '1'
       },
-      isShowProtocol: false,
-      ProtocolFlag: false,
-      captcha: {},
-      htmlText: ''
+			downTime: 0
     }
   },
 
   onLoad() {
-    this.initCaptcha()
   },
   onBackPress(options) {
     uni.redirectTo({
@@ -55,39 +50,28 @@
   },
   methods: {
     ...mapMutations(["setToken", "setUserInfo"]),
-    changeFalg() {
-      this.ProtocolFlag = !this.ProtocolFlag
-    },
-    getContent() {
-      getSystemDictData({
-        dictCode: 'SYSTEM',
-        label: 'USER_PROTOCOL'
-      }).then(res => {
-        this.htmlText = res.data.code
-        this.isShowProtocol = true
-      })
-    },
-    showContent() {
-      this.getContent()
-    },
-    initCaptcha() {
-      loginCaptcha().then(res => {
-        this.captcha = res.data
-      })
-    },
-
+		sendSms() {
+			this.downTime = 60
+			let timer = setInterval(() => {
+				if(this.downTime == 0) return clearInterval(timer)
+				this.downTime = this.downTime - 1
+			}, 1000)
+			const { form } = this
+			sendSMsPost({
+				phone: form.phone,
+				type: 0
+			}).then(res => {
+				this.showToast('鐭俊鍙戦�佹垚鍔�')
+			})
+		},
     onLogin() {
       const { form, ProtocolFlag } = this
-      if (!ProtocolFlag) return uni.showToast({
-        title: '璇峰厛闃呰骞跺悓鎰忕敤鎴峰崗璁�',
-        icon: 'none'
-      })
-      if (!form.username) return uni.showToast({
-        title: '璐﹀彿涓嶈兘涓虹┖',
-        icon: 'none'
-      })
-      if (!form.password) return uni.showToast({
-        title: '瀵嗙爜涓嶈兘涓虹┖',
+      // if (!ProtocolFlag) return uni.showToast({
+      //   title: '璇峰厛闃呰骞跺悓鎰忕敤鎴峰崗璁�',
+      //   icon: 'none'
+      // })
+      if (!form.phone) return uni.showToast({
+        title: '鎵嬫満鍙蜂笉鑳戒负绌�',
         icon: 'none'
       })
       if (!form.code) return uni.showToast({
@@ -96,15 +80,15 @@
       })
       loginPost({
         ...form,
-        uuid: this.captcha.uuid,
         openId: this.$store.state.openId
       }).then(res => {
         if (res.code === 200) {
           this.setToken(res.data)
+					this.showToast('鐧诲綍鎴愬姛')
           getUserInfo().then(ress => {
             this.setUserInfo(ress.data)
             uni.redirectTo({
-              url: "/pages/staff/index"
+              url: "/pages/index"
             })
           })
         }
@@ -162,7 +146,11 @@
       .btn{
       	width: 145rpx;
       	color:  $primaryColor;
+				text-align: center;
       }
+			.gray{
+				color: #999999;
+			}
       input {
         flex: 1;
         height: 100%;
diff --git a/h5/pages/operation/detail.vue b/h5/pages/operation/detail.vue
index ab1ce29..0420d6b 100644
--- a/h5/pages/operation/detail.vue
+++ b/h5/pages/operation/detail.vue
@@ -2,31 +2,47 @@
 	<view>
 		<view class="content">
 			<view class="name_wrap">
-				<view class="name">xx璁惧</view>
-				<view class="status red">姝e父</view>
+				<view class="name">{{info.deviceName}}</view>
+				<view class="status" v-if="info.status == 0">姝e父</view>
+				<view class="status red" v-if="info.status == 1">鎹熷潖</view>
+				<view class="status red" v-if="info.status == 2">鎶ュ簾</view>
 			</view>
-			<view class="line">杩愮淮浜猴細xxx</view>
-			<view class="line">杩愮淮鏃堕棿锛�121212</view>
+			<view class="line">杩愮淮浜猴細{{info.realName}}</view>
+			<view class="line">杩愮淮鏃堕棿锛歿{info.createDate}}</view>
 		</view>
 		<!--  -->
 		<view class="remark">
 			<view class="title">杩愮淮澶囨敞</view>
 			<view class="file_list">
-				<view class="file">
-					
+				<view class="file" v-for="item in info.multifileList">
+					<image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
+					<video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video>
 				</view>
 			</view>
-			<view class="desc">remark</view>
+			<view class="desc">{{info.content}}</view>
 		</view>
 	</view>
 </template>
 
-<script>
+<script>
+	import { ywDeviceDetail } from '@/api'
 	export default {
 		data() {
 			return {
-
+				id: '',
+				info: {}
 			};
+		},
+		onLoad(option) {
+			this.id = option.id
+			this.getDetail()
+		},
+		methods: {
+			getDetail() {
+				ywDeviceDetail(this.id).then(res => {
+					this.info = res.data
+				})
+			}
 		}
 	}
 </script>
@@ -81,6 +97,9 @@
 					margin-right: 0;
 				}
 			}
+			image,video{
+				width: 156rpx;
+			}
 		}
 		.desc{
 			margin-top: 8rpx;
diff --git a/h5/pages/operation/record.vue b/h5/pages/operation/record.vue
index 818efb9..aaa32ae 100644
--- a/h5/pages/operation/record.vue
+++ b/h5/pages/operation/record.vue
@@ -3,64 +3,113 @@
 		<view class="head_wrap">
 			<view class="search_wrap">
 				<image class="mr12 search" src="@/static/home/ic_search@2x.png" mode="widthFix"></image>
-				<input v-model="param.keyword" @confirm="getList()" type="text" placeholder="鎼滅储璁惧鍚嶇О/缂栧彿" placeholder-class="placeholder9" />
+				<input v-model="param.keyword" @confirm="getList()" type="text" placeholder="鎼滅储璁惧鍚嶇О/缂栧彿"
+					placeholder-class="placeholder9" />
 			</view>
-			<view class="name_wrap" @click="showModal = true">
-				<view class="name">杩愮淮浜�</view>
+			<view class="name_wrap" @click="handleMem">
+				<view class="name">{{ param.realname ? param.realname : '杩愮淮浜�' }}</view>
 				<u-icon :name="showModal  ? 'arrow-right' : 'arrow-down'" color="#999999" size="12"></u-icon>
 			</view>
 		</view>
 		<!--  -->
 		<view class="list">
-			<view class="item" v-for="item in 10" @click="itemClick(item)">
+			<view class="item" v-for="item in list" @click="itemClick(item)">
 				<image src="@/static/side/ic_shuiyu@2x.png" class="icon"></image>
 				<view class="content">
 					<view class="name_wrap">
 						<view class="name">
-							<text class="device">xx璁惧</text>
-							<text>D20231</text>
+							<text class="device">{{item.deviceName}}</text>
+							<text>{{item.deviceCode}}</text>
 						</view>
-						<view class="status red">姝e父</view>
+						<view class="status" v-if="item.status == 0">姝e父</view>
+						<view class="status red" v-if="item.status == 1">鎹熷潖</view>
+						<view class="status red" v-if="item.status == 2">鎶ュ簾</view>
 					</view>
-					<view class="line">杩愮淮浜猴細xxx</view>
-					<view class="line">杩愮淮鏃堕棿锛�121212</view>
+					<view class="line">杩愮淮浜猴細{{item.realName}}</view>
+					<view class="line">杩愮淮鏃堕棿锛歿{item.dealDate}}</view>
 				</view>
 
 			</view>
 		</view>
 		<!--  -->
-		<u-picker :show="showModal" keyName="name" @cancel="showModal = false" @confirm='confirm'
+		<u-picker :show="showModal" keyName="realname" @cancel="showModal = false" @confirm='confirm'
 			:columns="columns"></u-picker>
 	</view>
 </template>
 
 <script>
+	import {
+		ywDeviceRecord,
+		findInternalList
+	} from '@/api'
 	export default {
 		data() {
 			return {
 				param: {},
 				columns: [],
-				showModal: false
+				showModal: false,
+				list: [],
+				total: 0,
+				page: 1,
 			};
 		},
-		methods: {
-			getList() {},
+		onLoad() {
+			this.getpeo()
+			this.getList()
+
+		},
+		mounted() {
+			this.$eventBus.$on('memberSel', (option) => {
+				this.$set(this.param, 'realname', option.realname)
+				this.$set(this.param, 'memberId', option.id)
+				this.getList()
+			})
+			
+		},
+		methods: {
+			getList() {
+				const {
+					page,
+					total,
+					list,
+					param
+				} = this
+				ywDeviceRecord({
+					page,
+					capacity: 10,
+					model: param
+				}).then(res => {
+					this.list = res.data.records || []
+					this.total = res.data.total
+				})
+			},
+			handleMem() {
+				uni.navigateTo({
+					url: '/pages/common/memberSel'
+				})
+			},
+			getpeo() {
+				findInternalList().then(res => {
+					this.columns = [res.data]
+				})
+			},
 			confirm() {
 				this.showModal = false
-			},
-			itemClick() {
-				uni.navigateTo({
-					url: '/pages/operation/detail'
-				})
+			},
+			itemClick(item) {
+				uni.navigateTo({
+					url: '/pages/operation/detail?id='+ item.id
+				})
 			}
 		}
 	}
 </script>
 
-<style lang="scss" scoped>
-	.main_app{
-		padding: 0 30rpx;
+<style lang="scss" scoped>
+	.main_app {
+		padding: 0 30rpx;
 	}
+
 	.head_wrap {
 		display: flex;
 		align-items: center;
@@ -73,9 +122,11 @@
 			background: #F7F7F7;
 			border-radius: 38rpx;
 			padding-left: 30rpx;
-			input{
-				flex: 1;
+
+			input {
+				flex: 1;
 			}
+
 			.search {
 				width: 28rpx;
 				height: 28rpx;
@@ -94,39 +145,44 @@
 	.list {
 		.item {
 			display: flex;
-			height: 228rpx;
-			padding: 30rpx 0;
+			height: 228rpx;
+			padding: 30rpx 0;
 			border-bottom: 2rpx solid #E5E5E5;
+
 			.icon {
 				width: 80rpx;
-				height: 80rpx;
+				height: 80rpx;
 				margin-right: 24rpx;
 			}
 
 			.content {
-				flex: 1;
-				color: #666666;
-				display: flex;
-				flex-direction: column;
-				justify-content: space-between;
-				.name_wrap{
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					.name{
-						display: flex;
-						align-items: flex-end;
-						font-size: 26rpx;
-						.device{
-							font-weight: 600;
-							font-size: 34rpx;
-							color: #222222;
-							margin-right: 6rpx;
-						}
-					}
-					.status{
-						color: $primaryColor;
-					}
+				flex: 1;
+				color: #666666;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+
+				.name_wrap {
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+
+					.name {
+						display: flex;
+						align-items: flex-end;
+						font-size: 26rpx;
+
+						.device {
+							font-weight: 600;
+							font-size: 34rpx;
+							color: #222222;
+							margin-right: 6rpx;
+						}
+					}
+
+					.status {
+						color: $primaryColor;
+					}
 				}
 			}
 		}
diff --git a/h5/pages/workOrder/detail.vue b/h5/pages/workOrder/detail.vue
index 1b763a0..a3bf40d 100644
--- a/h5/pages/workOrder/detail.vue
+++ b/h5/pages/workOrder/detail.vue
@@ -2,59 +2,63 @@
 	<view>
 		<view class="main_info">
 			<view class="title">
-				<text>闃滃畞鏂囦綋涓績/A搴�/401</text>
-				<text class="status">寰呭鐞�</text>
+				<text>{{ info.projectName }}/{{ info.buildingName }}/{{info.roomNum || info.floorName}}</text>
+				<text class="status" v-if="info.dealStatus == 0">寰呭鐞�</text>
+				<text class="status" v-if="info.dealStatus == 1">宸叉寚娲�</text>
+				<text class="status gray" v-if="info.dealStatus == 2">宸插鐞�</text>
 			</view>
-			<view class="desc">瑗胯竟璧板粖鐨勪竴涓《鐏潖浜嗭紝涓嶄寒闇�瑕佺淮淇タ杈�</view>
+			<view class="desc">{{ info.content }}</view>
 			<view class="file_list">
-				<view class="file">
-
+				<view class="file" v-for="(item,index) in info.fileList">
+					<image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
+					<video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video>
 				</view>
 			</view>
 			<view class="content">
-				<view class="line">
+				<view class="line" v-if="info.categoryName">
 					<view class="la">宸ュ崟绫诲瀷锛�</view>
-					<view class="val">1111</view>
+					<view class="val">{{info.categoryName}}</view>
 				</view>
 				<view class="line">
 					<view class="la">涓婃姤浜猴細</view>
-					<view class="val">1111</view>
+					<view class="val">{{ info.creatorName }}{{info.creatorCompany ? '-' + info.creatorCompany : ''}}</view>
 				</view>
-				<view class="line">
+				<view class="line"  v-if="info.creatorPhone">
 					<view class="la">鑱旂郴鐢佃瘽锛�</view>
-					<view class="val">1111</view>
+					<view class="val">{{ info.creatorPhone }}</view>
 				</view>
 				<view class="line">
 					<view class="la">涓婃姤鏃堕棿锛�</view>
-					<view class="val">1111</view>
+					<view class="val">{{ info.createDate }}</view>
 				</view>
-				<view class="line">
+				<view class="line" v-if="info.getDate">
 					<view class="la">涓婇棬鏃堕棿锛�</view>
-					<view class="val">1111</view>
+					<view class="val">{{ info.getDate }}</view>
 				</view>
 			</view>
-			<view class="result_wrap">
+			<view class="result_wrap" v-if="info.dealStatus == 2">
 				<div class="title">澶勭悊缁撴灉</div>
-				<view class="file_list">
-					<view class="file">
-
+				<view v-if="info.dealFileList && info.dealFileList.length > 0" class="file_list">
+					<view class="file" v-for="item in info.dealFileList">
+						<image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
+						<video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video>
 					</view>
 				</view>
-				<view class="content">
-					宸叉洿鎹㈢伅娉″拰鐏僵宸叉洿鎹㈢伅娉″拰鐏僵宸叉洿鎹㈢伅
+				<view v-if="info.dealInfo" class="content">
+					{{info.dealInfo}}
 				</view>
 				<view class="line">
 					<view class="la">澶勭悊浜猴細</view>
-					<view class="val">{{ 1111 }}</view>
+					<view class="val">{{ info.dealUserName }}</view>
 				</view>
 				<view class="line">
 					<view class="la">澶勭悊鏃堕棿锛�</view>
-					<view class="val">{{ 1111 }}</view>
+					<view class="val">{{ info.dealDate }}</view>
 				</view>
 			</view>
 		</view>
 		<!--  -->
-		<view class="btns">
+		<view class="btns" v-if="info.dealStatus == 0">
 			<view class="btn">
 				<image src="@/static/side/phoneed.png" class="icon"></image>
 				<text>涓婃姤浜�</text>
@@ -62,7 +66,7 @@
 			<view class="btn active" @click="isShowHandle = true">鍘诲鐞�</view>
 		</view>
 		<!--  -->
-		<u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>
+		<u-popup :show="showUpload" @close="showUpload = false" zIndex="10076" closeOnClickOverlay>
 			<view class="sel_upload_wrap">
 				<view class="btn" @click="uploadImage">閫夋嫨鍥剧墖</view>
 				<view class="btn" @click="uploadVideo">閫夋嫨瑙嗛</view>
@@ -70,11 +74,12 @@
 		</u-popup>
 		<!--  -->
 		<!-- 宸ュ崟澶勭悊 -->
-		<u-popup :show="isShowHandle" :round="10" :safeAreaInsetBottom="true" mode="bottom" closeable @close="isShowHandle = false">
+		<u-popup :show="isShowHandle" :round="10" :safeAreaInsetBottom="true" mode="bottom" closeable
+			@close="isShowHandle = false">
 			<view class="appr_modal">
 				<view class="title">宸ュ崟澶勭悊</view>
 				<view class="df_sb">
-					<view>澶勭悊鏃堕棿</view>
+					<view><text class="red">*</text>澶勭悊鏃堕棿</view>
 					<view class="df_ac" @click="isShowHandleDate = true" v-if="handleParam.dealTime">
 						{{ handleParam.dealTime }}
 						<u-icon name="arrow-right"></u-icon>
@@ -86,7 +91,6 @@
 				</view>
 
 				<view class="label">
-					<text>*</text>
 					涓婁紶鍥剧墖/瑙嗛
 				</view>
 				<view class="upload_wrap">
@@ -119,12 +123,16 @@
 
 <script>
 	import {
-		uploadUrl
+		uploadUrl,
+		ywWorkorderD,
+		ywWorkorderDeal
 	} from '@/api'
 	import dayjs from 'dayjs';
 	export default {
 		data() {
 			return {
+				id: '',
+				info: {},
 				showUpload: false,
 				isShowHandle: false,
 				isShowHandleDate: false,
@@ -132,9 +140,30 @@
 				dealFileList: []
 			};
 		},
+		onLoad(option) {
+			console.log(option);
+			this.id = option.id
+			this.getDetail()
+		},
 		methods: {
-			onSubmit() {
-
+			onSubmit() {
+				const { handleParam, dealFileList, id } = this
+				if (!handleParam.dealTime) return this.showToast('澶勭悊鏃堕棿涓嶈兘涓虹┖')
+				ywWorkorderDeal({
+					...handleParam,
+					id,
+					dealFileList
+				}).then(res => {
+					if(res.code == 200){
+						this.showToast('鎿嶄綔鎴愬姛')
+						uni.navigateBack()
+					}
+				})
+			},
+			getDetail() {
+				ywWorkorderD(this.id).then(res => {
+					this.info = res.data
+				})
 			},
 			callPhone() {
 				uni.makePhoneCall({
@@ -152,7 +181,7 @@
 				this.showUpload = false;
 				let token = uni.getStorageSync('token') || '';
 				uni.chooseImage({
-					count: 4,
+					count: 6,
 					success: chooseImageRes => {
 						uni.showLoading({
 							title: '涓婁紶涓�',
@@ -170,7 +199,7 @@
 							files: imgs,
 							name: 'file',
 							formData: {
-								folder: 'HIDDEN_DANGER_FILE'
+								folder: 'YW_WORKORDER_FILE'
 							},
 							header: {
 								Dm_user_token: token
@@ -182,7 +211,7 @@
 										i.type = 0;
 										i.fileurl = i.imgaddr;
 										i.fileurlFull = i.url;
-										this.submitFileList.push(i);
+										this.dealFileList.push(i);
 									});
 								}
 							},
@@ -216,7 +245,7 @@
 							},
 							name: 'file',
 							formData: {
-								folder: 'HIDDEN_DANGER_FILE'
+								folder: 'YW_WORKORDER_FILE'
 							},
 							success: uploadFileRes => {
 								let res = JSON.parse(uploadFileRes.data);
@@ -225,7 +254,7 @@
 										i.type = 1;
 										i.fileurl = i.imgaddr;
 										i.fileurlFull = i.url;
-										this.submitFileList.push(i);
+										this.dealFileList.push(i);
 									});
 								}
 							},
@@ -264,6 +293,10 @@
 				font-size: 28rpx;
 				color: $primaryColor;
 			}
+
+			.gray {
+				color: #999999;
+			}
 		}
 
 		.file_list {
@@ -279,6 +312,11 @@
 
 				&:nth-of-type(4n) {
 					margin-right: 0;
+				}
+
+				image,
+				video {
+					width: 156rpx;
 				}
 			}
 		}
@@ -368,7 +406,7 @@
 
 	.sel_upload_wrap {
 		width: 100%;
-		border-top: 1px solid #333333;
+		border-top: 1px solid #666666;
 		box-shadow: 0 1 1 #333333;
 
 		.btn {
diff --git a/h5/pages/workOrder/edit.vue b/h5/pages/workOrder/edit.vue
index 2116212..add269c 100644
--- a/h5/pages/workOrder/edit.vue
+++ b/h5/pages/workOrder/edit.vue
@@ -3,29 +3,30 @@
 		<view class="list">
 			<view class="item">
 				<view class="la"><text class="red">*</text>浣嶇疆绫诲瀷</view>
-				<view class="line sel_wrap">
-					<view class="left" :class="param.name ? '' : 'placeholder9'">{{ param.name ? param.name : '璇烽�夋嫨' }}</view>
+				<view class="line sel_wrap" @click="showModal0 = true">
+					<view class="left" :class="param.areaName ? '' : 'placeholder9'">{{ param.areaName ? param.areaName : '璇烽�夋嫨' }}
+					</view>
 					<u-icon name="arrow-right" color="#999999" size="15"></u-icon>
 				</view>
 			</view>
 			<view class="item">
 				<view class="la"><text class="red">*</text>閫夋嫨鍖哄煙</view>
-				<view class="line sel_wrap">
-					<view class="left" :class="param.name ? '' : 'placeholder9'">{{ param.name ? param.name : '璇烽�夋嫨' }}</view>
+				<view class="line sel_wrap" @click="showModal1 = true">
+					<view class="left" :class="param.projectName ? '' : 'placeholder9'">{{ param.projectName ? `${param.projectName} ${param.buildingName || ''} ${param.areaType == 0 ? param.roomName || '' : param.floorName || ''}` : '璇烽�夋嫨' }}</view>
 					<u-icon name="arrow-right" color="#999999" size="15"></u-icon>
 				</view>
 			</view>
 			<view class="item">
 				<view class="la">涓婇棬鏃堕棿</view>
-				<view class="line sel_wrap">
-					<view class="left" :class="param.name ? '' : 'placeholder9'">{{ param.name ? param.name : '璇烽�夋嫨' }}</view>
+				<view class="line sel_wrap" @click="showTime = true">
+					<view class="left" :class="param.getDate ? '' : 'placeholder9'">{{ param.getDate ? param.getDate : '璇烽�夋嫨' }}</view>
 					<u-icon name="arrow-right" color="#999999" size="15"></u-icon>
 				</view>
 			</view>
 			<view class="item">
 				<view class="la">鎻忚堪</view>
 				<view class="line">
-					<textarea v-model="param.checkInfo" placeholder="璇疯緭鍏�" placeholder-class="placeholder9" />
+					<textarea v-model="param.content" placeholder="璇疯緭鍏�" placeholder-class="placeholder9" />
 				</view>
 			</view>
 			<view class="item">
@@ -35,16 +36,16 @@
 						<u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
 						<view class="mt6">鍥剧墖/瑙嗛</view>
 					</view>
-					<view class="upload_file" v-for="(item, i) in dealFileList" :key="i">
+					<view class="upload_file" v-for="(item, i) in fileList" :key="i">
 						<u-icon class="close" size="20" name="close-circle-fill" color="red"
 							@click="fileDel('dealBeforeFileList', i)"></u-icon>
 						<image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
 						<video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video>
 					</view>
 				</view>
-			</view>
-		</view>
-		<view class="sub_btn">鎻愪氦</view>
+			</view>
+		</view>
+		<view class="sub_btn" @click="onSubmit">鎻愪氦</view>
 		<!--  -->
 		<u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>
 			<view class="sel_upload_wrap">
@@ -52,121 +53,252 @@
 				<view class="btn" @click="uploadVideo">閫夋嫨瑙嗛</view>
 			</view>
 		</u-popup>
+		<!--  -->
+		<u-picker :show="showModal0" keyName="name" @cancel="showModal0 = false" @confirm='confirm0'
+			:columns="areaType"></u-picker>
+		<!--  -->
+		<u-picker :show="showModal1" keyName="name" @cancel="showModal1 = false" @confirm='confirm1'
+			:columns="projectList"></u-picker>
+		<u-picker :show="showModal2" keyName="name" @cancel="showModal2 = false" @confirm='confirm2'
+			:columns="buildingList"></u-picker>
+		<u-picker :show="showModal3" keyName="name" @cancel="showModal3 = false" @confirm='confirm3'
+			:columns="floorList"></u-picker>
+		<u-picker :show="showModal4" keyName="name" @cancel="showModal4 = false" @confirm='confirm4'
+			:columns="roomList"></u-picker>
+		<!--  -->
+		<u-datetime-picker :minDate="new Date().getTime()" :show="showTime" @confirm="confirmDate"
+			@cancel="showTime = false" mode="datetime"></u-datetime-picker>
 	</view>
 </template>
 
-<script>
-	import {
-		uploadUrl
-	} from '@/api'
+<script>
+	import {
+		uploadUrl,
+		ywProjectPost,
+		ywBuildingPost,
+		ywFloorPost,
+		ywRoomPost,
+		ywWorkorderCreate
+	} from '@/api'
 	import dayjs from 'dayjs';
 	export default {
 		data() {
 			return {
 				param: {},
 				showUpload: false,
-				dealFileList: [],
+				fileList: [],
+
+				showModal0: false,
+				showModal1: false,
+				showModal2: false,
+				showModal3: false,
+				showModal4: false,
+				showTime: false,
+				areaType: [
+					[{
+							name: '瀹ゅ唴瑁呬慨',
+							id: 0
+						},
+						{
+							name: '鍏叡缁翠慨',
+							id: 1
+						}
+					]
+				],
+				projectList: [],
+				buildingList: [],
+				floorList: [],
+				roomList: [],
 			};
-		},
+		},
+		onLoad() {
+			this.getProject()
+		},
 		methods: {
-			fileDel(str, i) {
-				this[str].splice(i, 1);
+			onSubmit() {
+				const { param, fileList } = this
+				ywWorkorderCreate({
+					...param,
+					// roomId: '',
+					fileList
+				}).then(res => {
+					this.showToast('鎻愪氦鎴愬姛')
+					uni.redirectTo({
+						url: '/pages/workOrder/list'
+					})
+				})
+			},
+			confirm0(e) {
+				const item = e.value[0]
+				this.$set(this.param, 'areaType', item.id)
+				this.$set(this.param, 'areaName', item.name)
+				this.showModal0 = false
+				this.param = {
+					areaType: item.id,
+					areaName: item.name,
+				}
+			},
+			confirm1(e) {
+				const item = e.value[0]
+				this.showModal1 = false
+				this.$set(this.param, 'projectName', item.name)
+				this.$set(this.param, 'projectId', item.id)
+				this.getBuilding(item.id)
+				this.showModal2 = true
+			},
+			confirm2(e) {
+				const item = e.value[0]
+				this.showModal2 = false
+				this.$set(this.param, 'buildingName', item.name)
+				this.$set(this.param, 'buildingId', item.id)
+				if (this.areaType == 0) {
+					this.getRoom(item.id)
+					this.showModal4 = true
+				} else {
+					this.getFloor(item.id)
+					this.showModal3 = true
+				}
 			},
-			uploadImage() {
-				this.showUpload = false;
-				let token = uni.getStorageSync('token') || '';
-				uni.chooseImage({
-					count: 4,
-					success: chooseImageRes => {
-						uni.showLoading({
-							title: '涓婁紶涓�',
-							mask: true
-						});
-						const tempFilePaths = chooseImageRes.tempFilePaths;
-						let imgs = tempFilePaths.map((value, index) => {
-							return {
-								name: 'file',
-								uri: value
-							};
-						});
-						uni.uploadFile({
-							url: `${uploadUrl}`,
-							files: imgs,
-							name: 'file',
-							formData: {
-								folder: 'HIDDEN_DANGER_FILE'
-							},
-							header: {
-								Dm_user_token: token
-							},
-							success: uploadFileRes => {
-								let res = JSON.parse(uploadFileRes.data);
-								if (res.data && res.data.length > 0) {
-									res.data.forEach(i => {
-										i.type = 0;
-										i.fileurl = i.imgaddr;
-										i.fileurlFull = i.url;
-										this.submitFileList.push(i);
-									});
-								}
-							},
-							fail(err) {
-								console.log('err', err);
-							},
-							complete() {
-								uni.hideLoading();
-								// if (i === chooseImageRes.tempFilePaths.length - 1) {
-								//   uni.hideLoading()
-								// }
-							}
-						});
-					}
-				});
+			confirm3(e) {
+				const item = e.value[0]
+				this.showModal3 = false
+				this.$set(this.param, 'floorName', item.name)
+				this.$set(this.param, 'floorId', item.id)
 			},
-			uploadVideo() {
-				this.showUpload = false;
-				let token = uni.getStorageSync('token') || '';
-				uni.chooseVideo({
-					success: chooseImageRes => {
-						uni.showLoading({
-							title: '涓婁紶涓�',
-							mask: true
-						});
-						uni.uploadFile({
-							url: `${uploadUrl}`,
-							filePath: chooseImageRes.tempFilePath,
-							header: {
-								Dm_user_token: token
-							},
-							name: 'file',
-							formData: {
-								folder: 'HIDDEN_DANGER_FILE'
-							},
-							success: uploadFileRes => {
-								let res = JSON.parse(uploadFileRes.data);
-								if (res.data && res.data.length > 0) {
-									res.data.forEach(i => {
-										i.type = 1;
-										i.fileurl = i.imgaddr;
-										i.fileurlFull = i.url;
-										this.submitFileList.push(i);
-									});
-								}
-							},
-							complete() {
-								uni.hideLoading();
-							}
-						});
-					}
-				});
-			}
+			confirm4(e) {
+				const item = e.value[0]
+				this.showModal4 = false
+				this.$set(this.param, 'roomName', item.name)
+				this.$set(this.param, 'roomId', item.id)
+			},
+			confirmDate(e) {
+				this.$set(this.param, 'getDate', dayjs(e.value).format('YYYY-MM-DD HH:mm:ss'));
+				this.showTime = false
+			},
+			getProject() {
+				ywProjectPost().then(res => {
+					this.projectList = [res.data || []]
+				})
+			},
+			getBuilding(projectId) {
+				ywBuildingPost({
+					projectId
+				}).then(res => {
+					this.buildingList = [res.data || []]
+				})
+			},
+			getFloor(buildingId) {
+				ywFloorPost({
+					buildingId
+				}).then(res => {
+					this.floorList = [res.data || []]
+				})
+			},
+			getRoom(buildingId) {
+				ywRoomPost({
+					buildingId
+				}).then(res => {
+					this.roomList = [res.data || []]
+				})
+			},
+			fileDel(str, i) {
+				this[str].splice(i, 1);
+			},
+			uploadImage() {
+				this.showUpload = false;
+				let token = uni.getStorageSync('token') || '';
+				uni.chooseImage({
+					count: 6,
+					success: chooseImageRes => {
+						uni.showLoading({
+							title: '涓婁紶涓�',
+							mask: true
+						});
+						const tempFilePaths = chooseImageRes.tempFilePaths;
+						let imgs = tempFilePaths.map((value, index) => {
+							return {
+								name: 'file',
+								uri: value
+							};
+						});
+						uni.uploadFile({
+							url: `${uploadUrl}`,
+							files: imgs,
+							name: 'file',
+							formData: {
+								folder: 'YW_WORKORDER_FILE'
+							},
+							header: {
+								Dm_user_token: token
+							},
+							success: uploadFileRes => {
+								let res = JSON.parse(uploadFileRes.data);
+								if (res.data && res.data.length > 0) {
+									res.data.forEach(i => {
+										i.type = 0;
+										i.fileurl = i.imgaddr;
+										i.fileurlFull = i.url;
+										this.fileList.push(i);
+									});
+								}
+							},
+							fail(err) {
+								console.log('err', err);
+							},
+							complete() {
+								uni.hideLoading();
+								// if (i === chooseImageRes.tempFilePaths.length - 1) {
+								//   uni.hideLoading()
+								// }
+							}
+						});
+					}
+				});
+			},
+			uploadVideo() {
+				this.showUpload = false;
+				let token = uni.getStorageSync('token') || '';
+				uni.chooseVideo({
+					success: chooseImageRes => {
+						uni.showLoading({
+							title: '涓婁紶涓�',
+							mask: true
+						});
+						uni.uploadFile({
+							url: `${uploadUrl}`,
+							filePath: chooseImageRes.tempFilePath,
+							header: {
+								Dm_user_token: token
+							},
+							name: 'file',
+							formData: {
+								folder: 'YW_WORKORDER_FILE'
+							},
+							success: uploadFileRes => {
+								let res = JSON.parse(uploadFileRes.data);
+								if (res.data && res.data.length > 0) {
+									res.data.forEach(i => {
+										i.type = 1;
+										i.fileurl = i.imgaddr;
+										i.fileurlFull = i.url;
+										this.fileList.push(i);
+									});
+								}
+							},
+							complete() {
+								uni.hideLoading();
+							}
+						});
+					}
+				});
+			}
 		}
 	}
 </script>
 
 <style lang="scss" scoped>
-	.list {
-		
+	.list {
+
 		.item {
 			.la {
 				margin-top: 30rpx;
@@ -216,9 +348,11 @@
 				align-items: center;
 				justify-content: center;
 				position: relative;
-				&:nth-of-type(4n){
-					margin-right: 0;
+
+				&:nth-of-type(4n) {
+					margin-right: 0;
 				}
+
 				.close {
 					position: absolute;
 					right: -20rpx;
@@ -238,21 +372,33 @@
 			}
 
 		}
+	}
+
+	.sub_btn {
+		position: fixed;
+		bottom: 68rpx;
+		left: 40rpx;
+		width: 670rpx;
+		height: 88rpx;
+		background: $primaryColor;
+		box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3);
+		border-radius: 44rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		font-weight: 500;
+		font-size: 32rpx;
+		color: #FFFFFF;
 	}
-	.sub_btn{
-		position: fixed;
-		bottom: 68rpx;
-		left: 40rpx;
-		width: 670rpx;
-		height: 88rpx;
-		background: $primaryColor;
-		box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0,104,255,0.3);
-		border-radius: 44rpx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		font-weight: 500;
-		font-size: 32rpx;
-		color: #FFFFFF;
+	.sel_upload_wrap {
+		width: 100%;
+		border-top: 1px solid #666666;
+		box-shadow: 0 1 1 #333333;
+	
+		.btn {
+			height: 90rpx;
+			line-height: 90rpx;
+			text-align: center;
+		}
 	}
 </style>
\ No newline at end of file
diff --git a/h5/pages/workOrder/list.vue b/h5/pages/workOrder/list.vue
index 0ea131f..6a87955 100644
--- a/h5/pages/workOrder/list.vue
+++ b/h5/pages/workOrder/list.vue
@@ -8,11 +8,11 @@
 		</view>
 		<!--  -->
 		<view class="tabs">
-			<view class="tab" :class="{active: activeTab == 0}" @click="tabsClick(0)">
+			<view class="tab" :class="{active: activeTab == -1}" @click="tabsClick(-1)">
 				<text>寰呭鐞�</text>
 				<text class="border"></text>
 			</view>
-			<view class="tab" :class="{active: activeTab == 1}" @click="tabsClick(1)">
+			<view class="tab" :class="{active: activeTab == 2}" @click="tabsClick(2)">
 				<text>宸插鐞�</text>
 				<text class="border"></text>
 			</view>
@@ -27,18 +27,20 @@
 		</view>
 		<!--  -->
 		<view class="list">
-			<view class="item" v-for="item in 10" @click="itemClick(item)">
+			<view class="item" v-for="item in list" @click="itemClick(item)">
 				<image v-if="item.stats == 1" src="@/static/side/workordered.png" class="icon"></image>
 				<image v-else src="@/static/side/workorder.png" class="icon"></image>
 				<view class="content">
 					<view class="name_wrap line">
-						<view class="name">A搴�/401</view>
-						<view class="status">宸插鐞�</view>
+						<view class="name">{{item.buildingName}}/{{item.roomNum}}</view>
+						<view class="status gray" v-if="item.dealStatus == 2">宸插鐞�</view>
+						<view class="status" v-if="item.dealStatus == 0">寰呭鐞�</view>
+						<view class="status" v-if="item.dealStatus == 1">寰呭鐞�</view>
 					</view>
-					<view class="line">宸ュ崟绫诲瀷锛歺xx</view>
-					<view class="line">鎶ヤ慨鐗╁搧锛�121212</view>
-					<view class="line">涓婃姤鏃堕棿锛�121212</view>
-					<view class="line">涓婇棬鏃堕棿锛�121212</view>
+					<view class="line">浣嶇疆绫诲瀷锛歿{item.areaType == '0' ? '瀹ゅ唴瑁呬慨' : '鍏叡鍖哄煙'}}</view>
+					<view class="line">宸ュ崟鍒嗙被锛歿{item.categoryName}}</view>
+					<view class="line">涓婃姤鏃堕棿锛歿{item.createDate}}</view>
+					<view class="line">涓婇棬鏃堕棿锛歿{item.getDate}}</view>
 				</view>
 			</view>
 		</view>
@@ -46,29 +48,50 @@
 	</view>
 </template>
 
-<script>
+<script>
+	import { ywWorkorder } from '@/api'
 	export default {
 		data() {
 			return {
 				param: {},
-				activeTab: 0,
-				selectAll: false
+				activeTab: -1,
+				selectAll: false,
+				
+				list: [],
+				total: 0,
+				page: 1,
 			};
+		},
+		onShow() {	
+			this.getList()
+		},
+		onReachBottom() {
+			
 		},
 		methods: {
 			tabsClick(val) {
 				this.activeTab = val
+				this.list = []
+				this.page = 1
+				this,getList()
 			},
 			allClick() {
 				this.selectAll = !this.selectAll
 			},
-			itemClick() {
+			itemClick(item) {
 				uni.navigateTo({
-					url: '/pages/workOrder/detail'
+					url: `/pages/workOrder/detail?id=${item.id}`
 				})
 			},
 			getList() {
-				console.log('---');
+				const { page, total, list, activeTab } = this
+				ywWorkorder({
+					page,
+					capacity: 10,
+					model: {  }
+				}).then(res => {
+					this.list = res.data.records || []
+				})
 			}
 		}
 	}
@@ -181,6 +204,9 @@
 					.status{
 						color: $primaryColor;
 					}
+					.gray{
+						color: #999999;
+					}
 				}
 			}
 		}
diff --git a/h5/static/empty.png b/h5/static/empty.png
new file mode 100644
index 0000000..953c40f
--- /dev/null
+++ b/h5/static/empty.png
Binary files differ
diff --git a/h5/static/home/ic_xinzenggongdan@2x.png b/h5/static/home/ic_xinzenggongdan@2x.png
new file mode 100644
index 0000000..0324d69
--- /dev/null
+++ b/h5/static/home/ic_xinzenggongdan@2x.png
Binary files differ
diff --git a/h5/utils/service.js b/h5/utils/service.js
index 70e1617..0a05213 100644
--- a/h5/utils/service.js
+++ b/h5/utils/service.js
@@ -15,7 +15,7 @@
 			uni.request({
 				url: baseUrl + options.url,
 				data: options.data || {},
-				method: options.method || 'GET',
+				method: options.method || 'POST',
 				header: options.header || {
 					// 鏍规嵁瀹為檯鎺ュ彛璁捐 key 鍙� token 鎴栬�� authorization
 					dm_user_token: token,

--
Gitblit v1.9.3