Browse Source

智慧巡检静态页画写完成

htc 4 months ago
parent
commit
4858c9d7d5

+ 2 - 3
http/baseApi.js

@@ -1,6 +1,5 @@
-// const BaseApi = 'http://gpu.ringzle.com:8082/witcarbon-app/app'
-//李勇
-const BaseApi = 'http://192.168.2.19:9023/witcarbon-app/app'
+const BaseApi = 'https://glt.ringzle.com:8033/witcarbon-app/app' //线上
+// const BaseApi = 'http://192.168.2.19:9023/witcarbon-app/app' //李勇
 
 export {
 	BaseApi

+ 30 - 0
pages.json

@@ -315,6 +315,36 @@
 					"style": {
 						"navigationStyle": "custom"
 					}
+				},
+				{
+					"path": "onlineRepair/index",
+					"style": {
+						"navigationStyle": "custom"
+					}
+				},
+				{
+					"path": "record/index",
+					"style": {
+						"navigationStyle": "custom"
+					}
+				},
+				{
+					"path": "waitOrder/index",
+					"style": {
+						"navigationStyle": "custom"
+					}
+				},
+				{
+					"path": "waitOrder/detail",
+					"style": {
+						"navigationStyle": "custom"
+					}
+				},
+				{
+					"path": "abnormalDevice/index",
+					"style": {
+						"navigationStyle": "custom"
+					}
 				}
 			]
 		},

+ 197 - 0
pagesInspection/abnormalDevice/index.vue

@@ -0,0 +1,197 @@
+<template>
+	<view class="page" :style="{'min-height':h+'px', 'padding-top':mt+'px'}">
+		<cus-header title='设备异常'></cus-header>
+		<div class="top" @tap="placeShow = true;">
+			<div class="left">
+				<image :src="imgBase+'inspection/record_location.png'"></image>
+				<text>{{'电商园四期B座'}}</text>
+			</div>
+			<div class="right">
+				<u-icon name="arrow-right" color="#FFFFFF" size="32"></u-icon>
+			</div>
+		</div>
+		<div class="title">共有<span>{{list.length}}</span>条记录</div>
+		<div class="boxs" v-if="list.length">
+			<div class="box" v-for="(item,index) in list" :key="index">
+				<div class="place">{{item.place}}</div>
+				<div class="pre">安装位置<span>{{item.time}}</span></div>
+				<div class="pre">设备编号<span>{{item.deviceno}}</span></div>
+				<div class="pre">告警原因<span class="red">{{item.reason}}</span></div>
+				<div class="pre">告警内容<span>{{item.content}}</span></div>
+				<div class="pre">巡检时间<span>{{item.time}}</span></div>
+			</div>
+		</div>
+		<template v-else>
+			<page-empty :height="'calc(100vh - '+(mt+105)+'px)'" marginTop="105px"></page-empty>
+		</template>
+		<u-picker :show="placeShow" :columns="placeColumns" @cancel="placeShow=false" @change="changeHandler" @confirm="e=>paramsConfirm(e,'')" ref="uPicker"></u-picker>
+	</view>
+</template>
+
+<script>
+	export default {
+		data(){
+			return {
+				placeShow:false,
+				placeColumns:[
+					['A栋','B栋'],
+                    ['A101', 'A102', 'A103', 'A201']
+				],
+                placeColumnData: [
+                    ['A101', 'A102', 'A103', 'A201'],
+                    ['B201', 'B203', 'B303', 'B404']
+                ],
+				list:[
+					{
+						place:'B座13楼1301',
+						position:'电商园四期B座-13层',
+						deviceno:'A32486',
+						reason:'温度 ≥ 40℃',
+						content:'实时温度52℃',
+						time:'2024-12-28 10:34:22'
+					},
+					{
+						place:'B座13楼1302',
+						position:'电商园四期B座-13层',
+						deviceno:'A32486',
+						reason:'温度 ≥ 40℃',
+						content:'实时温度52℃',
+						time:'2024-12-28 10:34:22'
+					}
+				]
+			}
+		},
+		methods:{
+            changeHandler(e) {
+                const {
+                    columnIndex,
+                    value,
+                    values, // values为当前变化列的数组内容
+                    index,
+					// 微信小程序无法将picker实例传出来,只能通过ref操作
+                    picker = this.$refs.uPicker
+                } = e
+                // 当第一列值发生变化时,变化第二列(后一列)对应的选项
+                if (columnIndex === 0) {
+                    // picker为选择器this实例,变化第二列对应的选项
+                    picker.setColumnValues(1, this.placeColumnData[index])
+                }
+            },
+			paramsConfirm(e,type){
+				this.placeShow = false;
+			}
+		}
+	}
+</script>
+
+<style scoped lang="less">
+	.page{
+		padding-bottom: 20rpx;
+		background: #F4F8FB;
+		box-sizing: border-box;
+		.top{
+			width: 100%;
+			height: 102rpx;
+			background: #198CFF;
+			padding: 0 30rpx;
+			box-sizing: border-box;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			.left{
+				display: flex;
+				align-items: center;
+				image{
+					width: 36rpx;
+					height: 36rpx;
+				}
+				text{
+					font-family: PingFangSC, PingFang SC;
+					font-weight: 400;
+					font-size: 30rpx;
+					color: #FFFFFF;
+					line-height: 42rpx;
+					margin-left: 10rpx;
+				}
+			}
+		}
+		.filtrate{
+			width: 100%;
+			height: 90rpx;
+			background: #FFFFFF;
+			display: flex;
+			.pre{
+				width: calc(100% / 3);
+				height: 100%;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				text{
+					font-family: PingFangSC, PingFang SC;
+					font-weight: 400;
+					font-size: 28rpx;
+					color: #4E5969;
+					line-height: 40rpx;
+					margin-right: 12rpx;
+				}
+			}
+		}
+		
+		.title{
+			font-family: PingFang-SC, PingFang-SC;
+			font-weight: bold;
+			font-size: 32rpx;
+			color: #1D2129;
+			line-height: 32rpx;
+			margin-top: 36rpx;
+			padding-left: 24rpx;
+			span{
+				color: #198CFF;
+				margin: 0 10rpx;
+			}
+		}
+		
+		.boxs{
+			width: 100%;
+			padding: 0 24rpx;
+			box-sizing: border-box;
+			margin-top: 16rpx;
+			overflow: hidden;
+			.box{
+				margin-top: 20rpx;
+				background: #FFFFFF;
+				border-radius: 16rpx;
+				padding: 36rpx 24rpx;
+				.place{
+					font-family: PingFang-SC, PingFang-SC;
+					font-weight: bold;
+					font-size: 32rpx;
+					color: #1D2129;
+					line-height: 36rpx;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+				}
+				.pre{
+					font-family: PingFangSC, PingFang SC;
+					font-weight: 400;
+					font-size: 24rpx;
+					color: #86909C;
+					line-height: 24rpx;
+					margin-top: 26rpx;
+					span{
+						font-family: PingFangSC, PingFang SC;
+						font-weight: 400;
+						font-size: 26rpx;
+						color: #1D2129;
+						line-height: 26rpx;
+						margin-left: 20rpx;
+						&.red{
+							color: #F95050;
+						}
+					}
+				}
+			}
+		}
+	}
+</style>

+ 14 - 16
pagesInspection/index.vue

@@ -3,21 +3,17 @@
 		<cus-header title='智能巡检' :showback='false' bgColor='transparent'></cus-header>
 		<image class="topbg" :src="imgBase+'inspection/inspection_top_bg.png'" mode="widthFix"></image>
 		<div class="top">
-			<div class="box">
+			<div class="box" @tap="toTurn('/pagesInspection/onlineRepair/index')">
 				<image :src="imgBase+'inspection/inspection_img_xsbx.png'"></image>
 				<text>线上报修</text>
 			</div>
-			<div class="box">
+			<div class="box" @tap="toTurn('/pagesInspection/record/index')">
 				<image :src="imgBase+'inspection/inspection_img_xjjl.png'"></image>
 				<text>巡检记录</text>
 			</div>
-			<div class="box">
-				<image :src="imgBase+'inspection/inspection_img_kjjl.png'"></image>
-				<text>扣缴记录</text>
-			</div>
 		</div>
 		<div class="card">
-			<div class="title">
+			<div class="title" @tap="toTurn('/pagesInspection/waitOrder/index')">
 				<div class="left">工单待办</div>
 				<div class="right">
 					<text>立即查看</text>
@@ -40,7 +36,7 @@
 			</div>
 		</div>
 		<div class="card">
-			<div class="title">
+			<div class="title" @tap="toTurn('/pagesInspection/abnormalDevice/index')">
 				<div class="left">设备</div>
 				<div class="right">
 					<text>立即查看</text>
@@ -78,7 +74,10 @@
 			}
 		},
 		methods:{
-			
+			toTurn(url){
+				if(!url) return
+				uni.navigateTo({ url })
+			}
 		}
 	}
 </script>
@@ -102,16 +101,15 @@
 			width: 100%;
 			position: relative;
 			display: flex;
-			justify-content: space-around;
+			justify-content: space-between;
 			margin-top: 20rpx;
 			.box{
-				width: calc(100% / 3 - 10rpx);
-				padding: 36rpx 0 40rpx;
+				width: calc(50% - 9rpx);
+				padding: 36rpx 24rpx;
 				box-sizing: border-box;
 				background: #FFFFFF;
 				border-radius: 16rpx;
 				display: flex;
-				flex-direction: column;
 				align-items: center;
 				image{
 					width: 98rpx;
@@ -120,11 +118,11 @@
 				text{
 					font-family: PingFang-SC, PingFang-SC;
 					font-weight: bold;
-					font-size: 28rpx;
-					color: #333333;
+					font-size: 30rpx;
+					color: #1D2129;
 					line-height: 28rpx;
 					text-align: center;
-					margin-top: 20rpx;
+					margin-left: 24rpx;
 				}
 			}
 		}

+ 283 - 0
pagesInspection/onlineRepair/index.vue

@@ -0,0 +1,283 @@
+<template>
+	<view class="page" :style="{'min-height':h+'px', 'padding-top':mt+'px'}">
+		<cus-header title='报修'></cus-header>
+		<div class="form">
+			<div class="item">
+				<div class="left">报修位置</div>
+				<div class="right">
+					<div class="right" @tap="placeShow = true">
+						<text v-if="receiptDto.warehouseName">{{receiptDto.warehouseName}} ></text>
+						<div class="tip" v-else>
+							请选择<u-icon name="arrow-right" color="#B9C0C8" size="28"
+								style="margin-left: 10rpx;"></u-icon>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="item">
+				<div class="left">报修区域</div>
+				<div class="right">
+					<div class="right" @tap="areaShow = true">
+						<text v-if="receiptDto.warehouseName">{{receiptDto.warehouseName}} ></text>
+						<div class="tip" v-else>
+							请选择<u-icon name="arrow-right" color="#B9C0C8" size="28"
+								style="margin-left: 10rpx;"></u-icon>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="item">
+				<div class="left">报修类型</div>
+				<div class="right">
+					<div class="right" @tap="typeShow = true">
+						<text v-if="receiptDto.warehouseName">{{receiptDto.warehouseName}} ></text>
+						<div class="tip" v-else>
+							请选择<u-icon name="arrow-right" color="#B9C0C8" size="28"
+								style="margin-left: 10rpx;"></u-icon>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="item">
+				<div class="left">联系人</div>
+				<div class="right">
+					<input type="text" placeholder-class="repair-inp-ph" placeholder="请输入">
+				</div>
+			</div>
+			<div class="item">
+				<div class="left">联系电话</div>
+				<div class="right">
+					<input type="text" placeholder-class="repair-inp-ph" placeholder="请输入">
+				</div>
+			</div>
+			<div class="pre">
+				<div class="title">故障描述</div>
+				<div class="desc">
+					<u--textarea placeholder="请输入" placeholder-class="repair-inp-ph" autoHeight></u--textarea>
+				</div>
+			</div>
+		</div>
+		<div class="upload">
+			<div class="title">上传照片</div>
+			<div class="box">
+				<u-upload :fileList="fileList" @afterRead="afterRead" @delete="deletePic" multiple
+					name="1" :maxCount="10"></u-upload>
+			</div>
+		</div>
+		<div class="bottom">
+			<div class="save">保存</div>
+		</div>
+		<u-picker :show="placeShow" :columns="placeColumns" title="报修位置" @cancel="placeShow=false" @confirm="e=>paramsConfirm(e,'')"></u-picker>
+		<u-picker :show="areaShow" :columns="areaColumns" title="报修区域" @cancel="areaShow=false" @confirm="e=>paramsConfirm(e,'')"></u-picker>
+		<u-picker :show="typeShow" :columns="typeColumns" title="报修类型" @cancel="typeShow=false" @confirm="e=>paramsConfirm(e,'')"></u-picker>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				placeShow: false,
+				areaShow: false,
+				typeShow: false,
+				placeColumns:[
+					['位置1','位置2']
+				],
+				areaColumns:[
+					['区域1','区域2']
+				],
+				typeColumns:[
+					['类型1','类型2']
+				],
+				params: {
+
+				},
+				fileList1: [],
+			}
+		},
+		methods: {
+			// 删除图片
+			deletePic(event) {
+				this[`fileList${event.name}`].splice(event.index, 1);
+			},
+			// 新增图片
+			async afterRead(event) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file);
+				let fileListLen = this[`fileList${event.name}`].length;
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: "uploading",
+						message: "上传中",
+					});
+				});
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url);
+					let item = this[`fileList${event.name}`][fileListLen];
+					this[`fileList${event.name}`].splice(
+						fileListLen,
+						1,
+						Object.assign(item, {
+							status: "success",
+							message: "",
+							url: result,
+						})
+					);
+					fileListLen++;
+				}
+			},
+			uploadFilePromise(url) {
+				return new Promise((resolve, reject) => {
+					let a = uni.uploadFile({
+						url: "http://192.168.2.21:7001/upload", // 仅为示例,非真实的接口地址
+						filePath: url,
+						name: "file",
+						formData: {
+							user: "test",
+						},
+						success: (res) => {
+							setTimeout(() => {
+								resolve(res.data.data);
+							}, 1000);
+						},
+					});
+				});
+			},
+			paramsConfirm(e,type){
+				this.placeShow = this.areaShow = this.typeShow = false;
+			}
+		}
+	}
+</script>
+
+<style>
+	.repair-inp-ph{
+		color: #1D2129 !important;
+	}
+</style>
+<style scoped lang="less">
+	::v-deep .desc .u-textarea{
+		border: none;
+		padding: 0 !important;
+	}
+	::v-deep .upload .u-upload .u-upload__button{
+		width: 168rpx !important;
+		height: 180rpx !important;
+	}
+	::v-deep .upload .u-upload .u-icon__icon{
+		font-size: 24px !important;
+	}
+	
+	.page {
+		padding: 0 24rpx 168rpx;
+		box-sizing: border-box;
+		background: #F4F8FB;
+		
+		.form{
+			background: #FFFFFF;
+			border-radius: 16rpx;
+			padding: 0 24rpx;
+			margin-top: 20rpx;
+			.item{
+				height: 90rpx;
+				box-shadow: inset 0rpx -1rpx 0rpx 0rpx #ECECEC;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				.left{
+					font-family: PingFangSC, PingFang SC;
+					font-weight: 400;
+					font-size: 30rpx;
+					color: #1D2129;
+					line-height: 42rpx;
+				}
+				.right{
+					font-family: PingFangSC, PingFang SC;
+					font-weight: 400;
+					font-size: 28rpx;
+					color: #1D2129;
+					line-height: 40rpx;
+					text-align: right;
+					.tip{
+						font-family: PingFangSC, PingFang SC;
+						font-weight: 400;
+						font-size: 28rpx;
+						color: #B9C0C8;
+						line-height: 40rpx;
+						text-align: right;
+						display: flex;
+						align-items: center;
+					}
+					input{
+						border: none;
+						outline: none;
+						font-family: PingFangSC, PingFang SC;
+						font-weight: 400;
+						font-size: 28rpx;
+						color: #1D2129;
+						line-height: 40rpx;
+						text-align: right;
+					}
+				}
+			}
+			.pre{
+				margin-top: 24rpx;
+				overflow: hidden;
+				.title{
+					font-family: PingFangSC, PingFang SC;
+					font-weight: 400;
+					font-size: 30rpx;
+					color: #1D2129;
+					line-height: 42rpx;
+				}
+				.desc{
+					margin: 24rpx 0 40rpx;
+				}
+			}
+		}
+		
+		.upload{
+			padding: 38rpx 24rpx;
+			background: #FFFFFF;
+			border-radius: 16rpx;
+			margin-top: 20rpx;
+			.title{
+				font-family: PingFang-SC, PingFang-SC;
+				font-weight: bold;
+				font-size: 30rpx;
+				color: #1D2129;
+				line-height: 36rpx;
+			}
+			.box{
+				margin-top: 34rpx;
+				width: 168rpx;
+				height: 180rpx;
+			}
+		}
+		
+		.bottom{
+			width: 100%;
+			height: 148rpx;
+			padding: 20rpx 48rpx 0;
+			box-sizing: border-box;
+			background: #FFFFFF;
+			position: fixed;
+			left: 0;
+			bottom: 0;
+			.save{
+				width: 100%;
+				height: 88rpx;
+				background: #198CFF;
+				border-radius: 16rpx;
+				font-family: PingFang-SC, PingFang-SC;
+				font-weight: bold;
+				font-size: 32rpx;
+				color: #FFFFFF;
+				line-height: 88rpx;
+				text-align: center;
+				letter-spacing: 2rpx;
+			}
+		}
+	}
+</style>

+ 227 - 0
pagesInspection/record/index.vue

@@ -0,0 +1,227 @@
+<template>
+	<view class="page" :style="{'min-height':h+'px', 'padding-top':mt+'px'}">
+		<cus-header title='巡检记录'></cus-header>
+		<div class="top" @tap="placeShow = true;">
+			<div class="left">
+				<image :src="imgBase+'inspection/record_location.png'"></image>
+				<text>{{'电商园四期B座'}}</text>
+			</div>
+			<div class="right">
+				<u-icon name="arrow-right" color="#FFFFFF" size="32"></u-icon>
+			</div>
+		</div>
+		<div class="filtrate">
+			<div class="pre" @tap="timeShow = true;">
+				<text>巡检时间</text>
+				<div style="transform: rotate(30deg);"><u-icon name="play-left-fill" color="#999999" size="24"></u-icon></div>
+			</div>
+			<div class="pre" @tap="typeShow = true">
+				<text>巡检类型</text>
+				<div style="transform: rotate(30deg);"><u-icon name="play-left-fill" color="#999999" size="24"></u-icon></div>
+			</div>
+			<div class="pre" @tap="userShow = true">
+				<text>巡检人员</text>
+				<div style="transform: rotate(30deg);"><u-icon name="play-left-fill" color="#999999" size="24"></u-icon></div>
+			</div>
+		</div>
+		<div class="title">共有<span>{{list.length}}</span>条记录</div>
+		<div class="boxs" v-if="list.length">
+			<div class="box" v-for="(item,index) in list" :key="index">
+				<div class="place">{{item.place}}</div>
+				<div class="pre">巡检类型<span>{{item.type}}</span></div>
+				<div class="pre">巡检人员<span>{{item.person}}</span></div>
+				<div class="pre">联系电话<span>{{item.phone}}</span></div>
+				<div class="pre">巡检时间<span>{{item.time}}</span></div>
+			</div>
+		</div>
+		<template v-else>
+			<page-empty :height="'calc(100vh - '+(mt+150)+'px)'" marginTop="150px"></page-empty>
+		</template>
+		<u-picker :show="placeShow" :columns="placeColumns" @cancel="placeShow=false" @change="changeHandler" @confirm="e=>paramsConfirm(e,'')" ref="uPicker"></u-picker>
+		<u-picker :show="timeShow" :columns="timeColumns" title="巡检时间" @cancel="timeShow=false" @confirm="e=>paramsConfirm(e,'')"></u-picker>
+		<u-picker :show="typeShow" :columns="typeColumns" title="巡检类型" @cancel="typeShow=false" @confirm="e=>paramsConfirm(e,'')"></u-picker>
+		<u-picker :show="userShow" :columns="userColumns" title="巡检人员" @cancel="userShow=false" @confirm="e=>paramsConfirm(e,'')"></u-picker>
+	</view>
+</template>
+
+<script>
+	export default {
+		data(){
+			return {
+				timeShow:false,
+				timeColumns:[
+					['不限','2025-01-09','2025-01-08']
+				],
+				placeShow:false,
+				placeColumns:[
+					['A栋','B栋'],
+                    ['A101', 'A102', 'A103', 'A201']
+				],
+                placeColumnData: [
+                    ['A101', 'A102', 'A103', 'A201'],
+                    ['B201', 'B203', 'B303', 'B404']
+                ],
+				typeShow:false,
+				typeColumns:[
+					['全部','类型1','类型2']
+				],
+				userShow:false,
+				userColumns:[
+					['全部','人员A','人员B']
+				],
+				list:[
+					{
+						place:'B座13楼1301',
+						type:'安保',
+						person:'张浩',
+						phone:'18799980997',
+						time:'2024-12-28 10:34:22'
+					},
+					{
+						place:'B座13楼1302',
+						type:'安保',
+						person:'张浩',
+						phone:'18799980997',
+						time:'2024-12-28 10:34:22'
+					},
+					{
+						place:'B座13楼1303',
+						type:'安保',
+						person:'张浩',
+						phone:'18799980997',
+						time:'2024-12-28 10:34:22'
+					}
+				]
+			}
+		},
+		methods:{
+            changeHandler(e) {
+                const {
+                    columnIndex,
+                    value,
+                    values, // values为当前变化列的数组内容
+                    index,
+					// 微信小程序无法将picker实例传出来,只能通过ref操作
+                    picker = this.$refs.uPicker
+                } = e
+                // 当第一列值发生变化时,变化第二列(后一列)对应的选项
+                if (columnIndex === 0) {
+                    // picker为选择器this实例,变化第二列对应的选项
+                    picker.setColumnValues(1, this.placeColumnData[index])
+                }
+            },
+			paramsConfirm(e,type){
+				this.placeShow = this.timeShow= this.typeShow = this.userShow = false;
+			}
+		}
+	}
+</script>
+
+<style scoped lang="less">
+	.page{
+		padding-bottom: 20rpx;
+		background: #F4F8FB;
+		box-sizing: border-box;
+		.top{
+			width: 100%;
+			height: 102rpx;
+			background: #198CFF;
+			padding: 0 30rpx;
+			box-sizing: border-box;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			.left{
+				display: flex;
+				align-items: center;
+				image{
+					width: 36rpx;
+					height: 36rpx;
+				}
+				text{
+					font-family: PingFangSC, PingFang SC;
+					font-weight: 400;
+					font-size: 30rpx;
+					color: #FFFFFF;
+					line-height: 42rpx;
+					margin-left: 10rpx;
+				}
+			}
+		}
+		.filtrate{
+			width: 100%;
+			height: 90rpx;
+			background: #FFFFFF;
+			display: flex;
+			.pre{
+				width: calc(100% / 3);
+				height: 100%;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				text{
+					font-family: PingFangSC, PingFang SC;
+					font-weight: 400;
+					font-size: 28rpx;
+					color: #4E5969;
+					line-height: 40rpx;
+					margin-right: 12rpx;
+				}
+			}
+		}
+		
+		.title{
+			font-family: PingFang-SC, PingFang-SC;
+			font-weight: bold;
+			font-size: 32rpx;
+			color: #1D2129;
+			line-height: 32rpx;
+			margin-top: 36rpx;
+			padding-left: 24rpx;
+			span{
+				color: #198CFF;
+				margin: 0 10rpx;
+			}
+		}
+		
+		.boxs{
+			width: 100%;
+			padding: 0 24rpx;
+			box-sizing: border-box;
+			margin-top: 16rpx;
+			overflow: hidden;
+			.box{
+				margin-top: 20rpx;
+				background: #FFFFFF;
+				border-radius: 16rpx;
+				padding: 36rpx 24rpx;
+				.place{
+					font-family: PingFang-SC, PingFang-SC;
+					font-weight: bold;
+					font-size: 32rpx;
+					color: #1D2129;
+					line-height: 36rpx;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+				}
+				.pre{
+					font-family: PingFangSC, PingFang SC;
+					font-weight: 400;
+					font-size: 24rpx;
+					color: #86909C;
+					line-height: 24rpx;
+					margin-top: 26rpx;
+					span{
+						font-family: PingFangSC, PingFang SC;
+						font-weight: 400;
+						font-size: 26rpx;
+						color: #1D2129;
+						line-height: 26rpx;
+						margin-left: 20rpx;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 318 - 0
pagesInspection/waitOrder/detail.vue

@@ -0,0 +1,318 @@
+<template>
+	<view class="page" :style="{'min-height':h+'px', 'padding-top':mt+'px'}">
+		<cus-header title='工单详情'></cus-header>
+		<div class="otitle">报修信息</div>
+		<div class="form">
+			<div class="item">
+				<div class="left">报修时间</div>
+				<div class="right">{{order.time}}</div>
+			</div>
+			<div class="item">
+				<div class="left">报修位置</div>
+				<div class="right">{{order.place}}</div>
+			</div>
+			<div class="item">
+				<div class="left">报修区域</div>
+				<div class="right">{{'公告区域'}}</div>
+			</div>
+			<div class="item">
+				<div class="left">报修类型</div>
+				<div class="right">{{order.typename}}</div>
+			</div>
+			<div class="item">
+				<div class="left">联系人</div>
+				<div class="right">{{'张浩'}}</div>
+			</div>
+			<div class="item">
+				<div class="left">联系电话</div>
+				<div class="right">{{'18799876098'}}</div>
+			</div>
+			<div class="pre">
+				<div class="title">故障描述</div>
+				<div class="desc">{{'水龙头一直滴水关不上,请尽快处理!谢谢~'}}</div>
+			</div>
+		</div>
+		<div class="photos">
+			<div class="title">照片</div>
+			<div class="list">
+				<div class="item" v-for="(item,index) in [1,2,3]" :key="index"></div>
+			</div>
+		</div>
+		<div class="otitle" v-if="order.status!==1">维修信息</div>
+		<div class="form" v-if="order.status!==1">
+			<div class="item">
+				<div class="left">紧急程度</div>
+				<div class="right">{{'非常紧急'}}</div>
+			</div>
+			<div class="item">
+				<div class="left">维修人员</div>
+				<div class="right">{{'张浩'}}</div>
+			</div>
+			<div class="item">
+				<div class="left">联系电话</div>
+				<div class="right">{{'18799876098'}}</div>
+			</div>
+			<div class="item" v-if="order.status==3">
+				<div class="left">维修完成时间</div>
+				<div class="right">{{'2024-01-08 15:13:45'}}</div>
+			</div>
+		</div>
+		<div class="bottom">
+			<div class="btn" v-if="order.status==1" @tap="show = true">指派维修人员</div>
+			<div class="btn" v-else @tap="back">返回</div>
+		</div>
+		<u-popup :show="show" @close="close">
+			<div class="popupbox">
+				<div class="title">
+					指派
+					<div class="close"><u-icon name="close" color="#B9C0C8" size="42"></u-icon></div>
+				</div>
+				<div class="pform">
+					<div class="pitem">
+						<div class="left">维修人员</div>
+						<div class="right" @tap="userShow = true">
+							<text v-if="order.repairPerson">{{order.repairPerson}} ></text>
+							<div class="tip" v-else>请选择 <u-icon name="arrow-right" color="#B9C0C8" size="26"></u-icon></div>
+						</div>
+					</div>
+					<div class="pitem">
+						<div class="left">紧急程度</div>
+						<div class="right" @tap="engreShow = true">
+							<text v-if="order.engreLevel">{{order.engreLevel}} ></text>
+							<div class="tip" v-else>请选择 <u-icon name="arrow-right" color="#B9C0C8" size="26"></u-icon></div>
+						</div>
+					</div>
+				</div>
+				<div class="btn" @tap="submit">提交</div>
+			</div>
+		</u-popup>
+		<u-picker :show="userShow" :columns="userColumns" @cancel="userShow=false" @confirm="e=>orderConfirm(e,'repairPerson')"></u-picker>
+		<u-picker :show="engreShow" :columns="engreColumns" @cancel="engreShow=false" @confirm="e=>orderConfirm(e,'engreLevel')"></u-picker>
+	</view>
+</template>
+
+<script>
+	export default {
+		data(){
+			return {
+				order:{},
+				show:false,
+				userShow:false,
+				userColumns:[
+					['张三','李四','王五']
+				],
+				engreShow:false,
+				engreColumns:[
+					['普通','紧急','非常紧急']
+				],
+			}
+		},
+		onLoad(option) {
+			this.order = JSON.parse(option.order);
+		},
+		methods:{
+			close(){
+				this.show = false;
+			},
+			back(){
+				uni.navigateBack();
+			},
+			orderConfirm(e,type){
+				this.order[type] = e.value[0];
+				this.userShow = this.engreShow = false;
+			},
+			submit(){
+				this.$showToast('提交成功');
+				setTimeout(()=>{
+					uni.redirectTo({
+						url:'/pagesInspection/waitOrder/index?status=2'
+					})
+				},1500)
+			}
+		}
+	}
+</script>
+
+<style scoped lang="less">
+	::v-deep .u-popup__content{
+		border-radius: 40rpx 40rpx 0 0 !important;
+	}
+	.page{
+		padding-bottom: 168rpx;
+		background: #F4F8FB;
+		box-sizing: border-box;
+		
+		.otitle{
+			font-family: PingFang-SC, PingFang-SC;
+			font-weight: bold;
+			font-size: 32rpx;
+			color: #1D2129;
+			line-height: 36rpx;
+			margin-top: 40rpx;
+			padding-left: 24rpx;
+		}
+		
+		.form{
+			width: 100%;
+			background: #FFFFFF;
+			margin-top: 24rpx;
+			.item{
+				height: 98rpx;
+				box-shadow: inset 0rpx -1rpx 0rpx 0rpx #EDF4FF;
+				padding: 0 30rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				.left{
+					font-family: PingFangSC, PingFang SC;
+					font-weight: 400;
+					font-size: 30rpx;
+					color: #1D2129;
+					line-height: 42rpx;
+				}
+				.right{
+					font-family: PingFangSC, PingFang SC;
+					font-weight: 400;
+					font-size: 30rpx;
+					color: #4E5969;
+					line-height: 42rpx;
+					text-align: right;
+				}
+			}
+			.pre{
+				padding: 28rpx 24rpx 56rpx;
+				.title{
+					font-family: PingFangSC, PingFang SC;
+					font-weight: 400;
+					font-size: 30rpx;
+					color: #1D2129;
+					line-height: 42rpx;
+				}
+				.desc{
+					font-family: PingFangSC, PingFang SC;
+					font-weight: 400;
+					font-size: 30rpx;
+					color: #4E5969;
+					line-height: 42rpx;
+					margin-top: 28rpx;
+				}
+			}
+		}
+		
+		.photos{
+			width: 100%;
+			padding: 28rpx 30rpx 36rpx;
+			box-sizing: border-box;
+			margin-top: 20rpx;
+			background: #FFFFFF;
+			.title{
+				font-family: PingFangSC, PingFang SC;
+				font-weight: 400;
+				font-size: 30rpx;
+				color: #1D2129;
+				line-height: 42rpx;
+			}
+			.list{
+				display: flex;
+				flex-wrap: wrap;
+				justify-content: space-between;
+				.item{
+					width: calc(100% / 3 - 30rpx);
+					height: 220rpx;
+					margin-top: 24rpx;
+					background: #D8D8D8;
+				}
+			}
+		}
+		
+		.bottom{
+			width: 100%;
+			height: 148rpx;
+			background: #FFFFFF;
+			padding: 20rpx 48rpx 0;
+			box-sizing: border-box;
+			position: fixed;
+			left: 0;
+			bottom: 0;
+			.btn{
+				width: 100%;
+				height: 88rpx;
+				background: #198CFF;
+				border-radius: 16rpx;
+				font-family: PingFang-SC, PingFang-SC;
+				font-weight: bold;
+				font-size: 32rpx;
+				color: #FFFFFF;
+				line-height: 88rpx;
+				text-align: center;
+				letter-spacing: 2rpx;
+			}
+		}
+	
+		.popupbox{
+			width: 100%;
+			border-radius: 40rpx 40rpx 0 0;
+			padding: 42rpx 24rpx 94rpx;
+			box-sizing: border-box;
+			background: #FFFFFF;
+			.title{
+				font-family: PingFang-SC, PingFang-SC;
+				font-weight: bold;
+				font-size: 32rpx;
+				color: #1D2129;
+				line-height: 36rpx;
+				text-align: center;
+				position: relative;
+				.close{
+					position: absolute;
+					right: 0;
+					top: 0;
+				}
+			}
+			.pform{
+				margin-top: 40rpx;
+				.pitem{
+					height: 90rpx;
+					box-shadow: inset 0rpx -1rpx 0rpx 0rpx #ECECEC;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					.left{
+						font-family: PingFangSC, PingFang SC;
+						font-weight: 400;
+						font-size: 30rpx;
+						color: #1D2129;
+						line-height: 42rpx;
+					}
+					.right{
+						font-family: PingFangSC, PingFang SC;
+						font-weight: 400;
+						font-size: 28rpx;
+						color: #1D2129;
+						line-height: 40rpx;
+						text-align: right;
+						.tip{
+							color: #B9C0C8;
+							display: flex;
+							align-items: center;
+						}
+					}
+				}
+			}
+			.btn{
+				width: calc(100% - 48rpx);
+				height: 88rpx;
+				background: #198CFF;
+				border-radius: 16rpx;
+				margin: 80rpx 24rpx 0;
+				font-family: PingFang-SC, PingFang-SC;
+				font-weight: bold;
+				font-size: 32rpx;
+				color: #FFFFFF;
+				line-height: 88rpx;
+				text-align: center;
+				letter-spacing: 2rpx;
+			}
+		}
+	}
+</style>

+ 191 - 0
pagesInspection/waitOrder/index.vue

@@ -0,0 +1,191 @@
+<template>
+	<view class="page" :style="{'min-height':h+'px', 'padding-top':mt+'px'}">
+		<cus-header title='工单待办'></cus-header>
+		<div class="tab">
+			<div class="pre" :class="{'active':tIdx===0}" @tap="changeType(0)">待指派</div>
+			<div class="pre" :class="{'active':tIdx===1}" @tap="changeType(1)">已指派(待维修)</div>
+			<div class="pre" :class="{'active':tIdx===2}" @tap="changeType(2)">已维修</div>
+		</div>
+		<div class="boxs" v-if="list.length">
+			<div class="box" v-for="(item,index) in list" :key="index" @tap="toDetail(item)">
+				<div class="place">{{item.place}}</div>
+				<div class="pre">报修类型<span>{{item.typename}}</span></div>
+				<div class="pre">报修时间<span>{{item.time}}</span></div>
+				<div class="type" :class="colorCfg[item.type]||'mr'">{{typeCfg[item.type]||'未知'}}</div>
+			</div>
+		</div>
+		<template v-else>
+			<page-empty :height="'calc(100vh - '+(mt+60)+'px)'" marginTop="60px"></page-empty>
+		</template>
+	</view>
+</template>
+
+<script>
+	export default {
+		data(){
+			return {
+				typeCfg:{
+					1:'普通',
+					2:'紧急',
+					3:'非常紧急'
+				},
+				colorCfg:{
+					1:'pt',
+					2:'jj',
+					3:'fcjj'
+				},
+				tIdx:0,
+				source:[
+					{
+						place:'B座13楼1301',
+						typename:'水龙头漏水',
+						time:'2024-12-28 10:32:35',
+						type:3,//1普通 2紧急 3非常紧急
+						status:1//1待指派 2已指派待维修 3已维修
+					},
+					{
+						place:'B座13楼1301',
+						typename:'水龙头漏水',
+						time:'2024-12-28 10:32:35',
+						type:2,//1普通 2紧急 3非常紧急
+						status:2//1待指派 2已指派待维修 3已维修
+					},
+					{
+						place:'B座13楼1301',
+						typename:'水龙头漏水',
+						time:'2024-12-28 10:32:35',
+						type:1,//1普通 2紧急 3非常紧急
+						status:3//1待指派 2已指派待维修 3已维修
+					}
+				],
+				list:[]
+			}
+		},
+		onShow() {
+			let pages = getCurrentPages();
+			let last = pages[pages.length-1];
+			let status = last.options?.status;
+			this.tIdx = status ? (status-1) : 0;
+			this.list = this.source.filter(l=>l.status==(status||1))
+		},
+		methods:{
+			changeType(type){
+				this.tIdx = type;
+				this.list = this.source.filter(l=>l.status===(type+1))
+			},
+			toDetail(item){
+				uni.navigateTo({
+					url:'/pagesInspection/waitOrder/detail?order='+JSON.stringify(item)
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang="less">
+	.page{
+		background: #F4F8FB;
+		padding-bottom: 20rpx;
+		box-sizing: border-box;
+		.tab{
+			width: 100%;
+			height: 102rpx;
+			background: #FFFFFF;
+			display: flex;
+			.pre{
+				width: calc(100% / 3);
+				height: 100%;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				font-family: PingFangSC, PingFang SC;
+				font-weight: 400;
+				font-size: 28rpx;
+				color: #1D2129;
+				line-height: 40rpx;
+				position: relative;
+				&.active{
+					font-weight: bold;
+					font-size: 32rpx;
+					color: #198CFF;
+					line-height: 45rpx;
+					&::after{
+						content: '';
+						width: 36rpx;
+						height: 8rpx;
+						background: #198CFF;
+						border-radius: 4rpx;
+						position: absolute;
+						left: 50%;
+						margin-left: -18rpx;
+						bottom: 8rpx;
+					}
+				}
+			}
+		}
+		
+		.boxs{
+			width: 100%;
+			padding: 0 24rpx;
+			box-sizing: border-box;
+			.box{
+				margin-top: 20rpx;
+				background: #FFFFFF;
+				border-radius: 16rpx;
+				padding: 36rpx 24rpx;
+				position: relative;
+				.place{
+					font-family: PingFang-SC, PingFang-SC;
+					font-weight: bold;
+					font-size: 32rpx;
+					color: #1D2129;
+					line-height: 36rpx;
+					overflow: hidden;
+					white-space: nowrap;
+					text-overflow: ellipsis;
+				}
+				.pre{
+					font-family: PingFangSC, PingFang SC;
+					font-weight: 400;
+					font-size: 24rpx;
+					color: #86909C;
+					line-height: 24rpx;
+					margin-top: 24rpx;
+					span{
+						font-size: 26rpx;
+						color: #1D2129;
+						margin-left: 40rpx;
+					}
+				}
+				.type{
+					height: 48rpx;
+					padding: 0 19rpx;
+					border-radius: 0rpx 16rpx 0rpx 16rpx;
+					font-family: PingFangSC, PingFang SC;
+					font-weight: 400;
+					font-size: 26rpx;
+					line-height: 48rpx;
+					position: absolute;
+					top: 0;
+					right: 0;
+					&.pt{
+						background: rgba(20,204,140,.14);
+						color: #14CC8C;
+					}
+					&.jj{
+						background: rgba(254,164,0,.14);
+						color: #FEA400;
+					}
+					&.fcjj{
+						background: rgba(249,80,80,.14);
+						color: #F95050;
+					}
+					&.mr{
+						background: rgba(153,153,153,.14);
+						color: #999999;
+					}
+				}
+			}
+		}
+	}
+</style>