Преглед на файлове

运维服务接口联调完成(图片上传除外,接口有问题)

htc преди 1 месец
родител
ревизия
94d5735519

+ 4 - 2
pages/login/wxLogin.vue

@@ -25,8 +25,9 @@
 			decryptPhoneNumber(e){
 				if(uni.getStorageSync('token')){
 					uni.reLaunch({
-						url:'/pagesStorage/home'
+						// url:'/pagesStorage/home'
 						// url:'/pagesClockin/index'
+						url:'/pages/operation/index'
 					})
 					return
 				}
@@ -54,8 +55,9 @@
 								that.$showToast('登录成功');
 								setTimeout(()=>{
 									uni.reLaunch({
-										url:'/pagesStorage/home'
+										// url:'/pagesStorage/home'
 										// url:'/pagesClockin/index'
+										url:'/pages/operation/index'
 									})
 								},1500)
 							}else that.$showToast(res.data.msg)

+ 45 - 9
pages/operation/index.vue

@@ -60,37 +60,73 @@
 					<image :src="imgBase+'operation/arrow_right.png'" mode="widthFix"></image>
 				</div>
 			</div>
-			<div class="boxs">
-				<div class="item" v-for="(item,index) in [1,2]" :key="index">
+			<div class="boxs" v-if="dataList.length">
+				<div class="item" v-for="(item,index) in dataList" :key="index">
 					<div class="left">
-						<div class="name">长鑫科技集团股份有限公司</div>
-						<p>故障类型<span>{{'类型1'}}</span></p>
-						<p>故障描述<span>{{'巡检任务'}}</span></p>
-						<p>故障时间<span>{{'2025-03-28 13:00'}}</span></p>
+						<div class="name">{{item.customer||''}}</div>
+						<p>故障类型<span>{{item.typeName}}</span></p>
+						<p>故障描述<span>{{item.description||''}}</span></p>
+						<p>故障时间<span>{{item.happenDate||''}}</span></p>
 					</div>
 					<div class="right">
-						<div class="top" :class="{'djj':index===0,'yjj':index===1}">{{index===0?'待解决':'已解决'}}</div>
+						<div class="top" :class="{'djj':item.status===0,'yjj':item.status===1}">{{item.status===0?'待解决':'已解决'}}</div>
 						<div class="bottom" @tap="toDetail(item)">查看</div>
 					</div>
 				</div>
 			</div>
+			<template v-else>
+				<page-empty :height="'calc(100vh - 200px)'"></page-empty>
+			</template>
 		</div>
 	</view>
 </template>
 
 <script>
+	import pageEmpty from '../../components/pageEmpty/index.vue'
 	export default {
+		components:{
+			pageEmpty
+		},
 		data(){
 			return {
-				
-				
+				isOver:false,
+				params:{
+					page:1,
+					limit:2
+				},
+				dataList:[],
+				typeList:[],
 			}
 		},
+		onShow() {
+			this.getTypeList();
+		},
 		methods:{
 			turnPage(url){
 				if(!url) return
 				uni.navigateTo({ url })
 			},
+			getTypeList(){
+				this.$api.get('/sys/dict/data/getListByType/wms_operation_category').then(res=>{
+					if(res.data.code===0){
+						this.typeList = res.data.data;
+						this.getDataList();
+					}else this.$showToast(res.data.msg)
+				})
+			},
+			getDataList(){
+				this.$api.get('/wms/order/operation/page',{page:1,limit:2}).then(res=>{
+					if(res.data.code===0){
+						if(this.dataList.length<res.data.data.total){
+							this.params.page++;
+							this.dataList = [...this.dataList,...res.data.data.list];
+							this.dataList.forEach(d=>{
+								d.typeName = this.typeList.find(t=>t.dictValue==d.optCategory)?.dictLabel;
+							})
+						}else this.isOver = true
+					}else this.$showModal(res.data.msg)
+				});
+			},
 			toDetail(item){
 				uni.navigateTo({
 					url:'/pagesOperation/workorder/detail?id='+item?.id

+ 68 - 38
pagesOperation/record/add.vue

@@ -6,7 +6,7 @@
 				<div class="box_item">
 					<div class="left">项目订单号</div>
 					<div class="right select" @tap="handleSelect(1)">
-						<text>{{orderNo}}</text>
+						<text>{{orderNoText}}</text>
 						<image :src="imgBase+'operation/arrow_right.png'" mode="widthFix"></image>
 					</div>
 				</div>
@@ -20,13 +20,13 @@
 				<div class="box_item">
 					<div class="left">巡检任务</div>
 					<div class="right">
-						<input type="text" placeholder="请输入巡检任务"  placeholder-class="inp_ph" v-model="dto.ccc">
+						<input type="text" placeholder="请输入巡检任务"  placeholder-class="inp_ph" v-model="dto.inspectionTask">
 					</div>
 				</div>
 				<div class="box_item">
 					<div class="left">巡检负责人</div>
 					<div class="right">
-						<input type="text" placeholder="请输入巡检负责人"  placeholder-class="inp_ph" v-model="dto.ddd">
+						<input type="text" placeholder="请输入巡检负责人"  placeholder-class="inp_ph" v-model="dto.inspector">
 					</div>
 				</div>
 				<div class="box_item">
@@ -41,16 +41,16 @@
 				<div class="box_item">
 					<div class="left">巡检结果</div>
 					<div class="right">
-						<u-radio-group v-model="dto.fff" :size="30" :iconSize="30">
-							<u-radio :labelSize="30" label="正常"></u-radio>
-							<u-radio :labelSize="30" label="有异常"></u-radio>
+						<u-radio-group v-model="dto.status" :size="30" :iconSize="30">
+							<u-radio :labelSize="30" :label="0" :name="0">正常</u-radio>
+							<u-radio :labelSize="30" :label="1" :name="1">有异常</u-radio>
 						</u-radio-group>
 					</div>
 				</div>
 				<div class="box_item2">
 					<div class="top">备注</div>
 					<div class="bottom">
-						<u--textarea v-model="dto.ggg" placeholder="请输入备注" placeholder-class="inp_ph2" border="none" height="110"></u--textarea>
+						<u--textarea v-model="dto.remark" placeholder="请输入备注" placeholder-class="inp_ph2" border="none" height="110"></u--textarea>
 					</div>
 				</div>
 			</div>
@@ -72,71 +72,90 @@
 		<div class="bottom_btn">
 			<div class="btn" @tap="submit">提交</div>
 		</div>
-		<u-picker :itemHeight="88" :show="show1" :columns="columns1" keyName="label" title="项目订单号"
+		<u-picker :itemHeight="88" :show="show1" :columns="columns1" keyName="orderNo" title="项目订单号"
 			@cancel="show1=false" @confirm="e=>confirm(e,1)" :immediateChange="true"></u-picker>
-		<u-picker :itemHeight="88" :show="show2" :columns="columns3" keyName="label" title="巡检地点"
+		<u-picker :itemHeight="88" :show="show2" :columns="columns2" keyName="customerName" title="巡检地点"
 			@cancel="show2=false" @confirm="e=>confirm(e,2)" :immediateChange="true"></u-picker>
-		<u-datetime-picker :itemHeight="88" :show="show3" v-model="dto.eee" mode="date" title="巡检时间"
+		<u-datetime-picker :itemHeight="88" :show="show3" v-model="dto.startDate" mode="date" title="巡检时间"
 			@cancel="show3=false" @confirm="e=>confirm(e,3)" :immediateChange="true" :minDate="minDate" :maxDate="maxDate"></u-datetime-picker>
 	</view>
 </template>
 
 <script>
+	const baseApi = require('@/http/baseApi.js')
 	export default {
 		data(){
 			return {
 				dto:{
-					aaa:'',
-					bbb:'',
-					ccc:'',
-					ddd:'',
-					eee:'',
-					fff:'',
-					ggg:'',
-					hhh:''
+					orderId:'',
+					inspectionSite:'',
+					inspectionTask:'',
+					inspector:'',
+					startDate:'',
+					status:0,
+					remark:'',
+					inspectionFile:''
 				},
 				fileList:[],
-				orderNo:'请选择项目订单号',
+				orderNoText:'请选择项目订单号',
 				placeText:'请选择巡检地点',
 				dateText:'请选择巡检时间',
 				show1:false,
 				show2:false,
 				show3:false,
-				columns1:[[
-					{value:1,label:'PO20250408001'},
-					{value:2,label:'PO20250408002'}
-				]],
-				columns3:[[
-					{value:1,label:'长鑫科技集团股份有限公司'},
-					{value:2,label:'峻凌电子(合肥)有限公司'}
-				]],
+				columns1:[],
+				columns2:[],
 				minDate:'',
 				maxDate:'',
+				rules:[
+					{key:'orderId',tip:'请选择项目订单号'},
+					{key:'inspectionSite',tip:'请选择巡检地点'},
+					{key:'inspectionTask',tip:'请输入巡检任务'},
+					{key:'inspector',tip:'请输入巡检负责人'},
+					{key:'startDate',tip:'请选择巡检时间'},
+					// {key:'status',tip:'请选择巡检结果'},
+					{key:'remark',tip:'请输入备注'},
+					// {key:'inspectionFile',tip:'请选择巡检打卡图片'}
+				]
 			}
 		},
 		onLoad() {
 			let d = new Date();
-			this.minDate = new Date(d.getFullYear()-3,d.getMonth()+1,d.getDate()).getTime();
+			this.minDate = new Date(d.getFullYear()-1,d.getMonth()+1,d.getDate()).getTime();
 			this.maxDate = new Date().getTime();
+			this.getOrderList();
+			this.getCustomerList();
 		},
 		methods:{
+			getOrderList(){
+				this.$api.get('/wms/project/getOrderPage',{page:1,limit:-1}).then(res=>{
+					if(res.data.code===0){
+						this.columns1 = [res.data.data.list];
+					}else this.$showToast(res.data.msg)
+				})
+			},
+			getCustomerList(){
+				this.$api.get('/wms/project/getCustomerList',{page:1,limit:-1}).then(res=>{
+					if(res.data.code!==0) return this.$showToast(res.data.msg)
+					let list = res.data.data.map(d=>{return {id:d,customerName:d}})
+					this.columns2 = [list]
+				})
+			},
 			handleSelect(type){
-				if(type==1) this.show1 = true;
-				else if(type==2) this.show2 = true;
-				else if(type==3) this.show3 = true;
+				this['show'+type] = true;
 			},
 			confirm(e,type){
 				if(type==1){
-					this.orderNo = e.value[0].label;
-					this.dto.aaa = e.value[0].value;
+					this.orderNoText = e.value[0].orderNo;
+					this.dto.orderId = e.value[0].id;
 					this.show1 = false;
 				}else if(type==2){
-					this.placeText = e.value[0].label;
-					this.dto.bbb = e.value[0].value;
+					this.placeText = e.value[0].customerName;
+					this.dto.inspectionSite = e.value[0].id;
 					this.show2 = false;
 				}else if(type==3){
 					this.dateText = new Date(e.value).Format('yyyy-MM-dd');
-					this.dto.eee = JSON.parse(JSON.stringify(this.dateText));
+					this.dto.startDate = new Date(e.value).Format('yyyy-MM-dd hh:mm:ss');
 					this.show3 = false;
 				}
 			},
@@ -174,7 +193,7 @@
 			uploadFilePromise(url) {
 				return new Promise((resolve, reject) => {
 				  let a = uni.uploadFile({
-					url: "http://192.168.2.21:7001/upload", // 仅为示例,非真实的接口地址
+					url: baseApi.BaseApi + '/uploadFile',
 					filePath: url,
 					name: "file",
 					formData: {
@@ -189,7 +208,18 @@
 				});
 			},
 			submit(){
-				uni.navigateBack()
+				let idx = this.rules.findIndex(r=>!this.dto[r.key]==true);
+				if(idx>-1) return this.$showToast(this.rules[idx].tip)
+				
+				let dto = JSON.parse(JSON.stringify(this.dto))
+				this.dto.startDate = new Date(dto.startDate).Format('yyyy-MM-dd hh:mm:ss');
+				this.$api.post('/wms/order/inspection',this.dto).then(res=>{
+					if(res.data.code!==0) return this.$showToast(res.data.msg)
+					this.$showToast('操作成功')
+					setTimeout(()=>{
+						uni.navigateBack()
+					},1500)
+				})
 			}
 		}
 	}

+ 53 - 9
pagesOperation/record/detail.vue

@@ -5,39 +5,43 @@
 			<div class="box">
 				<div class="box_item">
 					<div class="left">项目订单号</div>
-					<div class="right">{{'PO0098877666'}}</div>
+					<div class="right">{{dto.orderNo2||''}}</div>
 				</div>
 				<div class="box_item">
 					<div class="left">巡检地点</div>
-					<div class="right">{{'长鑫科技集团股份有限公司'}}</div>
+					<div class="right">{{dto.inspectionSite||''}}</div>
 				</div>
 				<div class="box_item">
 					<div class="left">巡检任务</div>
-					<div class="right">{{'日常巡检'}}</div>
+					<div class="right">{{dto.inspectionTask||''}}</div>
 				</div>
 				<div class="box_item">
 					<div class="left">巡检负责人</div>
-					<div class="right">{{'王安宇'}}</div>
+					<div class="right">{{dto.inspector||''}}</div>
 				</div>
 				<div class="box_item">
 					<div class="left">巡检时间</div>
-					<div class="right">{{'2025-03-28'}}</div>
+					<div class="right">{{dto.startDate2||''}}</div>
 				</div>
 			</div>
 			<div class="box">
 				<div class="box_item">
 					<div class="left">巡检结果</div>
-					<div class="right">{{'正常'}}</div>
+					<div class="right">{{dto.status===0?'正常':'异常'}}</div>
 				</div>
 				<div class="box_item2">
 					<div class="top">备注</div>
-					<div class="bottom">{{''}}</div>
+					<div class="bottom">{{dto.remark||''}}</div>
 				</div>
 			</div>
 			<div class="box">
 				<div class="box_item2">
 					<div class="top">巡检打卡</div>
-					<div class="bottom">{{''}}</div>
+					<div class="bottom">
+						<div class="imgs" v-if="imgList.length">
+							<image :src="img" v-for="(img,idx) in imgList" :key="idx"></image>
+						</div>
+					</div>
 				</div>
 			</div>
 		</div>
@@ -51,10 +55,38 @@
 	export default {
 		data(){
 			return {
-				
+				id:'',
+				dto:{},
+				projectList:[],
+				typeList:[],
+				imgList:[],
 			}
 		},
+		async onLoad(option) {
+			this.id = option.id;
+			await this.getOrderList();
+			this.getDetail();
+		},
 		methods:{
+			getOrderList(){
+				return new Promise((resolve,reject)=>{
+					this.$api.get('/wms/project/getOrderPage',{page:1,limit:-1}).then(res=>{
+						if(res.data.code===0){
+							this.projectList = res.data.data.list;
+							resolve();
+						}else this.$showToast(res.data.msg)
+					})
+				})
+			},
+			getDetail(){
+				this.$api.get('/wms/order/inspection/'+this.id).then(res=>{
+					if(res.data.code!==0) return this.$showToast(res.data.msg)
+					this.dto = res.data.data;
+					this.dto.startDate2 = new Date(this.dto.startDate).Format('yyyy-MM-dd');
+					this.dto.orderNo2 = this.projectList.find(p=>p.id==this.dto.orderId)?.orderNo||'';
+					this.imgList = this.dto.inspectionFile.split(',');
+				})
+			},
 			back(){
 				uni.navigateBack()
 			}
@@ -117,6 +149,18 @@
 			}
 		}
 		
+		.imgs{
+			display: flex;
+			justify-content: space-evenly;
+			flex-wrap: wrap;
+			margin-top: -20rpx;
+			image{
+				width: 180rpx;
+				height: 180rpx;
+				margin-top: 20rpx;
+			}
+		}
+		
 		.bottom{
 			width: 100%;
 			height: 148rpx;

+ 59 - 26
pagesOperation/record/index.vue

@@ -15,22 +15,22 @@
 				<u-icon name="arrow-down-fill" color="#C0C4CC" size="20rpx"></u-icon>
 			</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="boxs" v-if="dataList.length">
+			<div class="box" v-for="(item,index) in dataList" :key="index" @tap="toDetail(item)">
 				<div class="top">
-					<div class="left">{{'长鑫科技集团股份有限公司'}}</div>
+					<div class="left">{{item.inspectionSite||''}}</div>
 					<div class="right">
-						<div class="status" :class="{'zc':index===0,'yc':index===1}">{{index===0?'正常':'异常'}}</div>
+						<div class="status" :class="{'zc':item.status===0,'yc':item.status===1}">{{item.status===0?'正常':'异常'}}</div>
 						<image :src="imgBase+'operation/arrow_right.png'" mode="widthFix"></image>
 					</div>
 				</div>
 				<div class="text">
 					<div class="left">巡检时间</div>
-					<p>{{'2025-03-28'}}</p>
+					<p>{{item.startDate2||''}}</p>
 				</div>
 				<div class="text">
 					<div class="left">巡检负责人</div>
-					<p>{{'王安宇'}}</p>
+					<p>{{item.inspector||''}}</p>
 				</div>
 			</div>
 		</div>
@@ -44,7 +44,7 @@
 			@cancel="show1=false" @confirm="e=>confirm(e,1)" :immediateChange="true"></u-picker>
 		<u-datetime-picker :itemHeight="88" :show="show2" v-model="queryParams.month" mode="year-month" title="巡检时间"
 			@cancel="show2=false" @confirm="e=>confirm(e,2)" :immediateChange="true" :minDate="minDate" :maxDate="maxDate"></u-datetime-picker>
-		<u-picker :itemHeight="88" :show="show3" :columns="columns3" keyName="label" title="巡检地点"
+		<u-picker :itemHeight="88" :show="show3" :columns="columns3" keyName="customerName" title="巡检地点"
 			@cancel="show3=false" @confirm="e=>confirm(e,3)" :immediateChange="true"></u-picker>
 	</view>
 </template>
@@ -61,9 +61,12 @@
 				timeText:'巡检时间',
 				placeText:'巡检地点',
 				queryParams:{
+					page:1,
+					limit:10,
 					status:'',
-					month:'',
-					place:''
+					startDate:'',
+					endDate:'',
+					inspectionSite:''
 				},
 				show1:false,
 				show2:false,
@@ -72,51 +75,81 @@
 					{value:0,label:'正常'},
 					{value:1,label:'异常'}
 				]],
-				columns3:[[
-					{value:1,label:'长鑫科技集团股份有限公司'},
-					{value:2,label:'峻凌电子(合肥)有限公司'}
-				]],
+				columns3:[],
 				minDate:'',
 				maxDate:'',
-				page:1,
-				limit:10,
 				isOver:false,
-				list:[]
+				dataList:[]
 			}
 		},
 		onReachBottom() {
 			if(this.isOver) return
 			this.getList();
 		},
-		onLoad() {
+		onShow() {
 			let d = new Date();
 			this.minDate = new Date(d.getFullYear()-3,d.getMonth()+1,d.getDate()).getTime();
 			this.maxDate = new Date().getTime();
+			this.init();
+			this.getCustomerList();
 			this.getList();
 		},
 		methods:{
+			getCustomerList(){
+				this.$api.get('/wms/project/getCustomerList',{page:1,limit:-1}).then(res=>{
+					if(res.data.code!==0) return this.$showToast(res.data.msg)
+					let list = res.data.data.map(d=>{return {id:d,customerName:d}})
+					this.columns3 = [list]
+				})
+			},
 			getList(){
-				this.list = [1,2]
+				this.$api.get('/wms/order/inspection/page',this.queryParams).then(res=>{
+					if(res.data.code===0){
+						if(this.dataList.length<res.data.data.total){
+							this.queryParams.page++;
+							this.dataList = [...this.dataList,...res.data.data.list];
+							this.dataList.forEach(d=>{
+								d.startDate2 = new Date(d.startDate).Format('yyyy-MM-dd');
+							})
+						}else this.isOver = true
+					}else this.$showModal(res.data.msg)
+				});
+			},
+			init(){
+				this.statusText = '巡检状态';
+				this.timeText = '巡检时间';
+				this.placeText = '巡检地点';
+				this.queryParams = {
+					page:1,
+					limit:10,
+					status:'',
+					startDate:'',
+					endDate:'',
+					inspectionSite:''
+				};
+				this.isOver = false;
+				this.dataList = [];
 			},
 			selectQuery(type){
-				if(type==1) this.show1 = true;
-				else if(type==2) this.show2 = true;
-				else if(type==3) this.show3 = true;
+				this['show'+type] = true;
 			},
 			confirm(e,type){
+				this.init();
 				if(type==1){
 					this.statusText = e.value[0].label;
 					this.queryParams.status = e.value[0].value;
 					this.show1 = false;
 				}else if(type==2){
-					this.timeText = new Date(e.value).Format('yyyy-MM');
-					this.queryParams.month = new Date(e.value).Format('yyyy-MM');
+					this.timeText = new Date(e.value).Format('yyyy-MM-dd');
+					this.queryParams.startDate = new Date(e.value).Format('yyyy-MM-dd');
+					this.queryParams.endDate = new Date(new Date().setDate(new Date(this.queryParams.startDate).getDate()+1)).Format('yyyy-MM-dd');
 					this.show2 = false;
 				}else if(type==3){
-					this.placeText = e.value[0].label;
-					this.queryParams.place = e.value[0].value;
+					this.placeText = e.value[0].customerName;
+					this.queryParams.inspectionSite = e.value[0].id;
 					this.show3 = false;
 				}
+				this.getList();
 			},
 			addRecord(){
 				uni.navigateTo({
@@ -125,7 +158,7 @@
 			},
 			toDetail(item){
 				uni.navigateTo({
-					url:'/pagesOperation/record/detail'
+					url:'/pagesOperation/record/detail?id='+item.id
 				})
 			}
 		}

+ 103 - 51
pagesOperation/repair/index.vue

@@ -6,7 +6,7 @@
 				<div class="box_item">
 					<div class="left">项目订单号</div>
 					<div class="right select" @tap="handleSelect(1)">
-						<text>{{orderNo}}</text>
+						<text>{{orderNoText}}</text>
 						<image :src="imgBase+'operation/arrow_right.png'" mode="widthFix"></image>
 					</div>
 				</div>
@@ -27,7 +27,7 @@
 				<div class="box_item">
 					<div class="left">产品编号</div>
 					<div class="right select" @tap="handleSelect(4)">
-						<text>{{productNo}}</text>
+						<text>{{productNoText}}</text>
 						<image :src="imgBase+'operation/arrow_right.png'" mode="widthFix"></image>
 					</div>
 				</div>
@@ -50,13 +50,13 @@
 				<div class="box_item">
 					<div class="left">报修人员</div>
 					<div class="right">
-						<input type="text" placeholder="请输入报修人员"  placeholder-class="inp_ph" v-model="dto.ggg">
+						<input type="text" placeholder="请输入报修人员"  placeholder-class="inp_ph" v-model="dto.maintainer">
 					</div>
 				</div>
 				<div class="box_item2">
 					<div class="top">故障描述</div>
 					<div class="bottom">
-						<u--textarea v-model="dto.hhh" placeholder="故障描述" placeholder-class="inp_ph2" border="none" height="110"></u--textarea>
+						<u--textarea v-model="dto.description" placeholder="故障描述" placeholder-class="inp_ph2" border="none" height="110"></u--textarea>
 					</div>
 				</div>
 			</div>
@@ -78,40 +78,43 @@
 		<div class="bottom_btn">
 			<div class="btn" @tap="submit">提交</div>
 		</div>
-		<u-picker :itemHeight="88" :show="show1" :columns="columns1" keyName="label" title="项目订单号"
-			@cancel="show1=false" @confirm="e=>confirm(e,1,'orderNo','aaa')" :immediateChange="true"></u-picker>
-		<u-picker :itemHeight="88" :show="show2" :columns="columns2" keyName="label" title="报修地点"
-			@cancel="show2=false" @confirm="e=>confirm(e,2,'placeText','bbb')" :immediateChange="true"></u-picker>
-		<u-picker :itemHeight="88" :show="show3" :columns="columns3" keyName="label" title="产品名称"
-			@cancel="show3=false" @confirm="e=>confirm(e,3,'productText','ccc')" :immediateChange="true"></u-picker>
-		<u-picker :itemHeight="88" :show="show4" :columns="columns4" keyName="label" title="产品编号"
-			@cancel="show4=false" @confirm="e=>confirm(e,4,'productNo','ddd')" :immediateChange="true"></u-picker>
-		<u-datetime-picker :itemHeight="88" :show="show5" v-model="dto.eee" mode="date" title="故障发生时间"
+		<u-picker :itemHeight="88" :show="show1" :columns="columns1" keyName="orderNo" title="项目订单号"
+			@cancel="show1=false" @confirm="e=>confirm(e,1,'orderNoText','orderId','orderNo')" :immediateChange="true"></u-picker>
+		<u-picker :itemHeight="88" :show="show2" :columns="columns2" keyName="customerName" title="报修地点"
+			@cancel="show2=false" @confirm="e=>confirm(e,2,'placeText','customer','customerName')" :immediateChange="true"></u-picker>
+		<u-picker :itemHeight="88" :show="show3" :columns="columns3" keyName="itemName" title="产品名称"
+			@cancel="show3=false" @confirm="e=>confirm(e,3,'productText','skuId','itemName')" :immediateChange="true"></u-picker>
+		<u-picker :itemHeight="88" :show="show4" :columns="columns4" keyName="productNo" title="产品编号"
+			@cancel="show4=false" @confirm="e=>confirm(e,4,'productNoText','serialnumber','productNo')" :immediateChange="true"></u-picker>
+		<u-datetime-picker :itemHeight="88" :show="show5" v-model="dto.happenDate" mode="date" title="故障发生时间"
 			@cancel="show5=false" @confirm="e=>confirm(e,5)" :immediateChange="true" :minDate="minDate" :maxDate="maxDate"></u-datetime-picker>
-		<u-picker :itemHeight="88" :show="show6" :columns="columns6" keyName="label" title="故障类型"
-			@cancel="show6=false" @confirm="e=>confirm(e,6,'typeText','fff')" :immediateChange="true"></u-picker>
+		<u-picker :itemHeight="88" :show="show6" :columns="columns6" keyName="typeName" title="故障类型"
+			@cancel="show6=false" @confirm="e=>confirm(e,6,'typeText','optCategory','typeName')" :immediateChange="true"></u-picker>
 	</view>
 </template>
 
 <script>
+	const baseApi = require('@/http/baseApi.js')
 	export default {
 		data(){
 			return {
 				dto:{
-					aaa:'',
-					bbb:'',
-					ccc:'',
-					ddd:'',
-					eee:'',
-					fff:'',
-					ggg:'',
-					hhh:''
+					orderId:'',
+					customer:'',
+					skuId:'',
+					itemName:'',
+					serialnumber:'',
+					happenDate:'',
+					optCategory:'',
+					maintainer:'',
+					description:'',
+					faultFile:''
 				},
 				fileList:[],
-				orderNo:'请选择项目订单号',
+				orderNoText:'请选择项目订单号',
 				placeText:'请选择报修地点',
 				productText:'请选择产品名称',
-				productNo:'请选择产品编号',
+				productNoText:'请选择产品编号',
 				dateText:'请选择故障发生时间',
 				typeText:'请选择故障类型',
 				show1:false,
@@ -120,46 +123,84 @@
 				show4:false,
 				show5:false,
 				show6:false,
-				columns1:[[
-					{value:1,label:'PO20250408001'},
-					{value:2,label:'PO20250408002'}
-				]],
-				columns2:[[
-					{value:1,label:'长鑫科技集团股份有限公司'},
-					{value:2,label:'峻凌电子(合肥)有限公司'}
-				]],
-				columns3:[[
-					{value:1,label:'产品名称A'},
-					{value:2,label:'产品名称B'},
-				]],
-				columns4:[[
-					{value:1,label:'P20250408001'},
-					{value:2,label:'P20250408002'},
-				]],
-				columns6:[[
-					{value:1,label:'类型A'},
-					{value:2,label:'类型B'},
-				]],
+				columns1:[],
+				columns2:[],
+				columns3:[],
+				columns4:[],
+				columns6:[],
 				minDate:'',
 				maxDate:'',
+				productList:[],
+				productNoList:[],
+				rules:[
+					{key:'orderId',tip:'请选择项目订单号'},
+					{key:'customer',tip:'请选择报修地点'},
+					{key:'skuId',tip:'请选择产品名称'},
+					{key:'serialnumber',tip:'请选择产品编号'},
+					{key:'happenDate',tip:'请选择故障发生时间'},
+					{key:'optCategory',tip:'请选择故障类型'},
+					{key:'maintainer',tip:'请输入报修人员'},
+					{key:'description',tip:'请输入故障描述'}
+				]
 			}
 		},
 		onLoad() {
 			let d = new Date();
 			this.minDate = new Date(d.getFullYear()-3,d.getMonth()+1,d.getDate()).getTime();
 			this.maxDate = new Date().getTime();
+			this.getOrderList();
+			this.getCustomerList();
+			this.getTypeList();
 		},
 		methods:{
+			getOrderList(){
+				this.$api.get('/wms/project/getOrderPage',{page:1,limit:-1}).then(res=>{
+					if(res.data.code===0){
+						this.columns1 = [res.data.data.list];
+					}else this.$showToast(res.data.msg)
+				})
+			},
+			getCustomerList(){
+				this.$api.get('/wms/project/getCustomerList',{page:1,limit:-1}).then(res=>{
+					if(res.data.code!==0) return this.$showToast(res.data.msg)
+					let list = res.data.data.map(d=>{return {id:d,customerName:d}})
+					this.columns2 = [list]
+				})
+			},
+			getTypeList(){
+				this.$api.get('/sys/dict/data/getListByType/wms_operation_category').then(res=>{
+					if(res.data.code===0){
+						let list = res.data.data.map(d=>{return {id:d.dictValue,typeName:d.dictLabel}})
+						this.columns6 = [list];
+					}else this.$showToast(res.data.msg)
+				})
+			},
 			handleSelect(type){
+				if(type==3&&!this.dto.orderId) return this.$showToast('请先选择项目订单号')
+				if(type==4&&!this.dto.itemName) return this.$showToast('请先选择产品名称')
 				this['show'+type] = true;
 			},
-			confirm(e,type,param,key){
+			confirm(e,type,param,key,key2){
 				if(type!=5){
-					this[param] = e.value[0].label;
-					this.dto[key] = e.value[0].value;
+					this[param] = e.value[0][key2];
+					this.dto[key] = e.value[0].id;
+					if(type==3) this.dto.itemName = e.value[0][key2]
 				}else{
 					this.dateText = new Date(e.value).Format('yyyy-MM-dd');
-					this.dto.eee = JSON.parse(JSON.stringify(this.dateText));
+					this.dto.happenDate = JSON.parse(JSON.stringify(this.dateText));
+				}
+				if(type==1){
+					this.$api.get('/wms/shipmentOrder/getShipmentByProjectId/'+this.dto.orderId).then(res=>{
+						if(res.data.code!==0) return this.$showToast(res.data.msg)
+						this.productList = res.data.data;
+						let list = res.data.data.map(d=>{return {id:d.skuId,itemName:d.itemName}})
+						this.columns3 = [list]
+					})
+				}
+				if(type==3){
+					this.productNoList = this.productList.find(p => p.skuId === this.dto.skuId)?.serialnumbers||[];
+					let list = this.productNoList.map(d=>{return {id:d,productNo:d}});
+					this.columns4 = [list];
 				}
 				this['show'+type] = false;
 			},
@@ -197,7 +238,7 @@
 			uploadFilePromise(url) {
 				return new Promise((resolve, reject) => {
 				  let a = uni.uploadFile({
-					url: "http://192.168.2.21:7001/upload", // 仅为示例,非真实的接口地址
+					url: baseApi.BaseApi + '/uploadFile',
 					filePath: url,
 					name: "file",
 					formData: {
@@ -212,7 +253,18 @@
 				});
 			},
 			submit(){
-				uni.navigateBack()
+				let idx = this.rules.findIndex(r=>!this.dto[r.key]==true);
+				if(idx>-1) return this.$showToast(this.rules[idx].tip)
+				
+				let dto = JSON.parse(JSON.stringify(this.dto))
+				this.dto.happenDate = new Date(dto.happenDate).Format('yyyy-MM-dd');
+				this.$api.post('/wms/order/operation',this.dto).then(res=>{
+					if(res.data.code!==0) return this.$showToast(res.data.msg)
+					this.$showToast('报修成功')
+					setTimeout(()=>{
+						uni.navigateBack()
+					},1500)
+				})
 			}
 		}
 	}

+ 144 - 47
pagesOperation/workorder/detail.vue

@@ -4,55 +4,62 @@
 		<div class="box">
 			<div class="b_title">
 				故障信息
-				<div class="b_status" :class="{'djj':dto.status===1,'yjj':dto.status===0}">{{dto.status===0?'已解决':'未解决'}}</div>
+				<div class="b_status" :class="{'djj':dto.status===0,'yjj':dto.status===1}">{{dto.status===1?'已解决':'未解决'}}</div>
 			</div>
 			<div class="bs_item">
 				<div class="left">项目订单号</div>
-				<div class="right">{{'PO0098877666'}}</div>
+				<div class="right">{{dto.orderNo2||''}}</div>
 			</div>
 			<div class="bs_item">
 				<div class="left">报修地点</div>
-				<div class="right">{{'长鑫科技集团股份有限公司'}}</div>
+				<div class="right">{{dto.customer||''}}</div>
 			</div>
 			<div class="bs_item">
 				<div class="left">产品名称</div>
-				<div class="right">{{'高温罩'}}</div>
+				<div class="right">{{dto.itemName||''}}</div>
 			</div>
 			<div class="bs_item">
 				<div class="left">产品编号</div>
-				<div class="right">{{'GRT9988811'}}</div>
+				<div class="right">{{dto.serialnumber||''}}</div>
 			</div>
 			<div class="bs_item">
 				<div class="left">故障发生时间</div>
-				<div class="right">{{'2025-03-11 13:00'}}</div>
+				<div class="right">{{dto.happenDate||''}}</div>
 			</div>
 			<div class="bs_item">
 				<div class="left">故障类型</div>
-				<div class="right">{{'类型A'}}</div>
+				<div class="right">{{dto.typeName||''}}</div>
 			</div>
 			<div class="bs_item">
 				<div class="left">报修人员</div>
-				<div class="right">{{'王安宇'}}</div>
+				<div class="right">{{dto.maintainer||''}}</div>
 			</div>
 			<div class="bs_item">
 				<div class="left">报修时间</div>
-				<div class="right">{{'2025-03-12 13:00'}}</div>
+				<div class="right">{{dto.createDate||''}}</div>
 			</div>
 			<div class="bs_item">
 				<div class="left">故障描述</div>
-				<div class="right">{{'故障描述故障描述'}}</div>
+				<div class="right">{{dto.description||''}}</div>
 			</div>
 		</div>
 		<div class="box">
 			<div class="b_title">故障照片</div>
 			<div style="padding-top: 24rpx;">
-				<u-upload width="180" height="180"
-					:fileList="fileList"
-					@afterRead="afterRead"
-					@delete="deletePic"
-					multiple
-					:maxCount="5"
-				></u-upload>
+				<template v-if="yjj">
+					<div class="imgs">
+						<image :src="img" v-for="(img,idx) in imgList" :key="idx"></image>
+					</div>
+				</template>
+				<template v-else>
+					<u-upload width="180" height="180"
+						:fileList="fileList"
+						@afterRead="afterRead"
+						@delete="deletePic"
+						multiple
+						:maxCount="5"
+					></u-upload>
+				</template>
 			</div>
 		</div>
 		<div class="box">
@@ -60,28 +67,44 @@
 			<div class="b_item">
 				<div class="left">问题状态</div>
 				<div class="right">
-					<u-radio-group v-model="params.aaa" :size="30" :iconSize="30">
-						<u-radio :labelSize="26" :label="0">已解决</u-radio>
-						<u-radio :labelSize="26" :label="1">未解决</u-radio>
-					</u-radio-group>
+					<template v-if="yjj">
+						已解决
+					</template>
+					<template v-else>
+						<u-radio-group v-model="dto.status" :size="30" :iconSize="30">
+							<u-radio :labelSize="26" :label="1" :name="1">已解决</u-radio>
+							<u-radio :labelSize="26" :label="0" :name="0">未解决</u-radio>
+						</u-radio-group>
+					</template>
 				</div>
 			</div>
 			<div class="b_item">
 				<div class="left">故障原因</div>
 				<div class="right">
-					<input type="text" placeholder="请输入故障原因"  placeholder-class="inp_ph" v-model="params.bbb">
+					<template v-if="yjj">
+						{{dto.faultCause||""}}
+					</template>
+					<template v-else>
+						<input type="text" placeholder="请输入故障原因"  placeholder-class="inp_ph" v-model="dto.faultCause">
+					</template>
 				</div>
 			</div>
 			<div class="b_item">
 				<div class="left">维修开始时间</div>
-				<div class="right select" @tap="handleSelect(1)">
+				<div class="right" v-if="yjj">
+					{{dto.repairStartTime||''}}
+				</div>
+				<div class="right select" @tap="handleSelect(1)" v-else>
 					<text>{{startDateText}}</text>
 					<image :src="imgBase+'operation/arrow_right.png'" mode="widthFix"></image>
 				</div>
 			</div>
 			<div class="b_item">
 				<div class="left">维修结束时间</div>
-				<div class="right select" @tap="handleSelect(2)">
+				<div class="right" v-if="yjj">
+					{{dto.repairEndTime||''}}
+				</div>
+				<div class="right select" @tap="handleSelect(2)" v-else>
 					<text>{{endDateText}}</text>
 					<image :src="imgBase+'operation/arrow_right.png'" mode="widthFix"></image>
 				</div>
@@ -89,24 +112,34 @@
 			<div class="b_item">
 				<div class="left">维修人员</div>
 				<div class="right">
-					<input type="text" placeholder="请输入维修人员"  placeholder-class="inp_ph" v-model="params.eee">
+					<template v-if="yjj">
+						{{dto.optUser||""}}
+					</template>
+					<template v-else>
+						<input type="text" placeholder="请输入维修人员"  placeholder-class="inp_ph" v-model="dto.optUser">
+					</template>
 				</div>
 			</div>
 			<div class="b_item2">
 				<div class="top">维修描述</div>
 				<div class="bottom">
-					<u--textarea v-model="dto.fff" placeholder="请输入维修描述" placeholder-class="inp_ph2" border="none" height="110"></u--textarea>
+					<template v-if="yjj">
+						{{dto.remark||""}}
+					</template>
+					<template v-else>
+						<u--textarea v-model="dto.remark" placeholder="请输入维修描述" placeholder-class="inp_ph2" border="none" height="110"></u--textarea>
+					</template>
 				</div>
 			</div>
 		</div>
 		<div class="bottom_btn">
-			<div class="btn" @tap="submit">提交</div>
-			<!-- <div class="btn" @tap="back">返回</div> -->
+			<div class="btn" @tap="submit" v-if="!yjj">提交</div>
+			<div class="btn" @tap="back" v-else>返回</div>
 		</div>
-		<u-datetime-picker :itemHeight="88" :show="show1" v-model="dto.ccc" mode="date" title="维修开始时间"
-			@cancel="show1=false" @confirm="e=>confirm(e,1,'ccc','startDateText')" :immediateChange="true" :minDate="minDate" :maxDate="maxDate"></u-datetime-picker>
-		<u-datetime-picker :itemHeight="88" :show="show2" v-model="dto.ccc" mode="date" title="维修结束时间"
-			@cancel="show2=false" @confirm="e=>confirm(e,2,'ddd','endDateText')" :immediateChange="true" :minDate="minDate" :maxDate="maxDate"></u-datetime-picker>
+		<u-datetime-picker :itemHeight="88" :show="show1" v-model="dto.repairStartTime" mode="datetime" title="维修开始时间"
+			@cancel="show1=false" @confirm="e=>confirm(e,1,'repairStartTime','startDateText')" :immediateChange="true" :minDate="minDate" :maxDate="maxDate"></u-datetime-picker>
+		<u-datetime-picker :itemHeight="88" :show="show2" v-model="dto.repairEndTime" mode="datetime" title="维修结束时间"
+			@cancel="show2=false" @confirm="e=>confirm(e,2,'repairEndTime','endDateText')" :immediateChange="true" :minDate="minDate" :maxDate="maxDate"></u-datetime-picker>
 	</view>
 </template>
 
@@ -114,17 +147,8 @@
 	export default {
 		data(){
 			return {
-				dto:{
-					status:1
-				},
-				params:{
-					aaa:'',
-					bbb:'',
-					ccc:'',
-					ddd:'',
-					eee:'',
-					fff:''
-				},
+				id:'',
+				dto:{},
 				fileList:[],
 				show1:false,
 				show2:false,
@@ -132,24 +156,84 @@
 				endDateText:'请输入维修结束时间',
 				minDate:'',
 				maxDate:'',
+				projectList:[],
+				typeList:[],
+				imgList:[],
+				yjj:false,
+				rules:[
+					{key:'status',tip:'请选择状态'},
+					{key:'faultCause',tip:'请输入故障原因'},
+					{key:'repairStartTime',tip:'请选择维修开始时间'},
+					{key:'repairEndTime',tip:'请选择维修结束时间'},
+					{key:'optUser',tip:'请输入维修人员'},
+					{key:'remark',tip:'请输入维修描述'}
+				]
 			}
 		},
 		mounted() {
 			let d = new Date();
-			this.minDate = new Date(d.getFullYear()-3,d.getMonth()+1,d.getDate()).getTime();
+			this.minDate = new Date(d.getFullYear()-1,d.getMonth()+1,d.getDate()).getTime();
 			this.maxDate = new Date().getTime();
 		},
+		async onLoad(option) {
+			this.id = option.id;
+			await this.getOrderList();
+			await this.getTypeList();
+			this.getDetail();
+		},
 		methods:{
+			getOrderList(){
+				return new Promise((resolve,reject)=>{
+					this.$api.get('/wms/project/getOrderPage',{page:1,limit:-1}).then(res=>{
+						if(res.data.code===0){
+							this.projectList = res.data.data.list;
+							resolve();
+						}else this.$showToast(res.data.msg)
+					})
+				})
+			},
+			getTypeList(){
+				return new Promise((resolve,reject)=>{
+					this.$api.get('/sys/dict/data/getListByType/wms_operation_category').then(res=>{
+						if(res.data.code===0){
+							this.typeList = res.data.data;
+							resolve();
+						}else this.$showToast(res.data.msg)
+					})
+				})
+			},
+			getDetail(){
+				this.$api.get('/wms/order/operation/'+this.id).then(res=>{
+					if(res.data.code!==0) return this.$showToast(res.data.msg)
+					this.dto = res.data.data;
+					this.dto.orderNo2 = this.projectList.find(p=>p.id==this.dto.orderId)?.orderNo||'';
+					this.dto.typeName = this.typeList.find(t=>t.dictValue==this.dto.optCategory)?.dictLabel||'';
+					this.imgList = this.dto.faultFile.split(',');
+					this.yjj = this.dto.status==1?true:false;
+				})
+			},
 			handleSelect(type){
 				this['show'+type] = true;
 			},
 			confirm(e,type,key,param){
-				this[param] = new Date(e.value).Format('yyyy-MM-dd');
-				this.params[key] = new Date(e.value).Format('yyyy-MM-dd');
+				this[param] = new Date(e.value).Format('yyyy-MM-dd hh:mm:ss');
+				this.dto[key] = new Date(e.value).Format('yyyy-MM-dd hh:mm:ss');
 				this['show'+type] = false;
 			},
 			submit(){
-				uni.navigateBack()
+				let idx = this.rules.findIndex(r=>!this.dto[r.key]==true);
+				if(idx>-1) return this.$showToast(this.rules[idx].tip)
+				
+				let dto = JSON.parse(JSON.stringify(this.dto))
+				this.dto.repairStartTime = new Date(dto.repairStartTime).Format('yyyy-MM-dd hh:mm:ss');
+				this.dto.repairEndTime = new Date(dto.repairEndTime).Format('yyyy-MM-dd hh:mm:ss');
+				this.$api.put('/wms/order/operation',this.dto).then(res=>{
+					if(res.data.code!==0) return this.$showToast(res.data.msg)
+					this.$showToast('处理成功')
+					setTimeout(()=>{
+						uni.navigateBack()
+					},1500)
+				})
 			},
 			back(){
 				uni.navigateBack()
@@ -282,6 +366,18 @@
 					}
 				}
 			}
+			
+			.imgs{
+				display: flex;
+				justify-content: space-evenly;
+				flex-wrap: wrap;
+				margin-top: -20rpx;
+				image{
+					width: 180rpx;
+					height: 180rpx;
+					margin-top: 20rpx;
+				}
+			}
 		
 			.bs_item{
 				display: flex;
@@ -304,6 +400,7 @@
 					color: #1D2129;
 					line-height: 26rpx;
 					text-align: right;
+					word-wrap: break-word;
 				}
 			}
 			

+ 79 - 35
pagesOperation/workorder/index.vue

@@ -3,14 +3,14 @@
 		<cus-header title='故障工单'></cus-header>
 		<div class="status">
 			<div class="pre" :class="{'active':sidx===0}" @tap="changeStatus('',0)">全部</div>
-			<div class="pre" :class="{'active':sidx===1}" @tap="changeStatus(1,1)">待解决</div>
-			<div class="pre" :class="{'active':sidx===2}" @tap="changeStatus(0,2)">已解决</div>
+			<div class="pre" :class="{'active':sidx===1}" @tap="changeStatus(0,1)">待解决</div>
+			<div class="pre" :class="{'active':sidx===2}" @tap="changeStatus(1,2)">已解决</div>
 		</div>
 		<div class="query">
-			<div class="pre" @tap="selectQuery(1)">
+			<!-- <div class="pre" @tap="selectQuery(1)">
 				<span>{{typeText}}</span>
 				<u-icon name="arrow-down-fill" color="#C0C4CC" size="20rpx"></u-icon>
-			</div>
+			</div> -->
 			<div class="pre" @tap="selectQuery(2)">
 				<span>{{timeText}}</span>
 				<u-icon name="arrow-down-fill" color="#C0C4CC" size="20rpx"></u-icon>
@@ -20,16 +20,16 @@
 				<u-icon name="arrow-down-fill" color="#C0C4CC" size="20rpx"></u-icon>
 			</div>
 		</div>
-		<div class="boxs" v-if="list.length">
-			<div class="item" v-for="(item,index) in [1,2]" :key="index">
+		<div class="boxs" v-if="dataList.length">
+			<div class="item" v-for="(item,index) in dataList" :key="index">
 				<div class="left">
-					<div class="name">长鑫科技集团股份有限公司</div>
-					<p>故障类型<span>{{'类型1'}}</span></p>
-					<p>故障描述<span>{{'巡检任务'}}</span></p>
-					<p>故障时间<span>{{'2025-03-28 13:00'}}</span></p>
+					<div class="name">{{item.customer||''}}</div>
+					<p>故障类型<span>{{item.typeName}}</span></p>
+					<p>故障描述<span>{{item.description||''}}</span></p>
+					<p>故障时间<span>{{item.happenDate||''}}</span></p>
 				</div>
 				<div class="right">
-					<div class="top" :class="{'djj':index===0,'yjj':index===1}">{{index===0?'待解决':'已解决'}}</div>
+					<div class="top" :class="{'djj':item.status===0,'yjj':item.status===1}">{{item.status===0?'待解决':'已解决'}}</div>
 					<div class="bottom" @tap="toDetail(item)">查看</div>
 				</div>
 			</div>
@@ -39,9 +39,9 @@
 		</template>
 		<u-picker :itemHeight="88" :show="show1" :columns="columns1" keyName="label" title="故障类型"
 			@cancel="show1=false" @confirm="e=>confirm(e,1)" :immediateChange="true"></u-picker>
-		<u-datetime-picker :itemHeight="88" :show="show2" v-model="queryParams.month" mode="year-month" title="巡检时间"
+		<u-datetime-picker :itemHeight="88" :show="show2" v-model="queryParams.month" mode="date" title="巡检时间"
 			@cancel="show2=false" @confirm="e=>confirm(e,2)" :immediateChange="true" :minDate="minDate" :maxDate="maxDate"></u-datetime-picker>
-		<u-picker :itemHeight="88" :show="show3" :columns="columns3" keyName="label" title="巡检地点"
+		<u-picker :itemHeight="88" :show="show3" :columns="columns3" title="巡检地点"
 			@cancel="show3=false" @confirm="e=>confirm(e,3)" :immediateChange="true"></u-picker>
 	</view>
 </template>
@@ -59,9 +59,11 @@
 				timeText:'巡检时间',
 				placeText:'巡检地点',
 				queryParams:{
-					type:'',
-					month:'',
-					place:'',
+					page:1,
+					limit:10,
+					createStartDate:'',
+					createEndDate:'',
+					customer:'',
 					status:''
 				},
 				show1:false,
@@ -71,41 +73,80 @@
 					{value:0,label:'类型1'},
 					{value:1,label:'类型2'}
 				]],
-				columns3:[[
-					{value:1,label:'长鑫科技集团股份有限公司'},
-					{value:2,label:'峻凌电子(合肥)有限公司'}
-				]],
+				columns3:[],
 				minDate:'',
 				maxDate:'',
-				page:1,
-				limit:10,
 				isOver:false,
-				list:[]
+				dataList:[]
 			}
 		},
 		onReachBottom() {
 			if(this.isOver) return
 			this.getList();
 		},
-		onLoad() {
+		async onShow() {
+			this.init()
+			this.getCustomerList();
+			await this.getTypeList();
+			this.getList();
 			let d = new Date();
 			this.minDate = new Date(d.getFullYear()-3,d.getMonth()+1,d.getDate()).getTime();
 			this.maxDate = new Date().getTime();
-			this.getList();
 		},
 		methods:{
+			getTypeList(){
+				return new Promise((resolve,reject)=>{
+					this.$api.get('/sys/dict/data/getListByType/wms_operation_category').then(res=>{
+						if(res.data.code===0){
+							this.typeList = res.data.data;
+							resolve()
+						}else this.$showToast(res.data.msg)
+					})
+				})
+			},
+			getCustomerList(){
+				this.$api.get('/wms/project/getCustomerList',{page:1,limit:-1}).then(res=>{
+					if(res.data.code!==0) return this.$showToast(res.data.msg)
+					this.columns3 = [res.data.data]
+				})
+			},
+			init(){
+				this.sidx = 0;
+				this.typeText = '故障类型';
+				this.timeText = '巡检时间';
+				this.placeText = '巡检地点';
+				this.queryParams = {
+					page:1,
+					limit:10,
+					createStartDate:'',
+					createEndDate:'',
+					customer:'',
+					status:''
+				};
+				this.isOver = false;
+				this.dataList = [];
+			},
 			changeStatus(status,idx){
-				this.queryParams.status = status;
+				this.init();
 				this.sidx = idx;
+				this.queryParams.status = status;
 				this.getList();
 			},
 			getList(){
-				this.list = [1,2]
+				this.$api.get('/wms/order/operation/page',this.queryParams).then(res=>{
+					if(res.data.code===0){
+						if(this.dataList.length<res.data.data.total){
+							this.queryParams.page++;
+							this.dataList = [...this.dataList,...res.data.data.list];
+							this.dataList.forEach(d=>{
+								d.typeName = this.typeList.find(t=>t.dictValue==d.optCategory)?.dictLabel;
+							})
+						}else this.isOver = true
+					}else this.$showModal(res.data.msg)
+				});
 			},
 			selectQuery(type){
-				if(type==1) this.show1 = true;
-				else if(type==2) this.show2 = true;
-				else if(type==3) this.show3 = true;
+				this['show'+type] = true;
 			},
 			toDetail(item){
 				uni.navigateTo({
@@ -113,19 +154,22 @@
 				})
 			},
 			confirm(e,type){
+				this.init();
 				if(type==1){
 					this.typeText = e.value[0].label;
 					this.queryParams.type = e.value[0].value;
 					this.show1 = false;
 				}else if(type==2){
-					this.timeText = new Date(e.value).Format('yyyy-MM');
-					this.queryParams.month = new Date(e.value).Format('yyyy-MM');
+					this.timeText = new Date(e.value).Format('yyyy-MM-dd');
+					this.queryParams.createStartDate = new Date(e.value).Format('yyyy-MM-dd');
+					this.queryParams.createEndDate = new Date(new Date().setDate(new Date(this.queryParams.createStartDate).getDate()+1)).Format('yyyy-MM-dd');
 					this.show2 = false;
 				}else if(type==3){
-					this.placeText = e.value[0].label;
-					this.queryParams.place = e.value[0].value;
+					this.placeText = e.value[0];
+					this.queryParams.customer = e.value[0];
 					this.show3 = false;
 				}
+				this.getList();
 			}
 		}
 	}
@@ -176,7 +220,7 @@
 			background: #FFFFFF;
 			display: flex;
 			.pre{
-				width: calc(100% / 3);
+				width: calc(100% / 2);
 				height: 88rpx;
 				display: flex;
 				align-items: center;