yusheng 3 часов назад
Родитель
Сommit
f128890b82

+ 3 - 3
manifest.json

@@ -1,8 +1,8 @@
 {
-    "name" : "智慧工厂",
+    "name" : "AiMil工业互联网平台",
     "appid" : "__UNI__45B3907",
     "description" : "",
-    "versionName" : "V1.0.4.24",
+    "versionName" : "V1.0.4.25",
     "versionCode" : "100",
     "transformPx" : false,
     "h5" : {
@@ -13,7 +13,7 @@
                     // "target" : "http://123.249.79.125/api/",
                     // "target" : "http://114.116.248.196:86/api/",
                     // "target": "http://116.63.185.248:80/api",
-                    "target" : "http://192.168.1.102:18086/",
+                    "target" : "http://192.168.1.251:18086/",
                     // "target" : "http://aiot.zoomwin.com.cn:51001/api",
                     "changeOrigin" : true,
                     "secure" : false,

+ 10 - 2
pages.json

@@ -543,7 +543,7 @@
 		{
 			"path": "pages/maintenance/check/index",
 			"style": {
-				"navigationBarTitleText": "保养中",
+				"navigationBarTitleText": "报工中",
 				"navigationStyle": "custom",
 				"navigationBarTextStyle": "white"
 			}
@@ -551,7 +551,15 @@
 		{
 			"path": "pages/maintenance/check/detail",
 			"style": {
-				"navigationBarTitleText": "保养详情",
+				"navigationBarTitleText": "报工详情",
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/maintenance/service/order",
+			"style": {
+				"navigationBarTitleText": "检修工单",
 				"navigationStyle": "custom",
 				"navigationBarTextStyle": "white"
 			}

+ 121 - 81
pages/home/myTicket/myTicket.vue

@@ -13,7 +13,7 @@
 					:key="index">
 					<view @click="handleTabChange(item)" class="badge-c">
 						{{item.name}}
-							<u-badge max="99" :value="item.badge.value" absolute v-show="orderType==1"></u-badge>
+						<u-badge max="99" :value="item.badge.value" absolute v-show="orderType==1"></u-badge>
 					</view>
 
 
@@ -27,7 +27,8 @@
 		</view>
 
 		<view v-if="activeType == 'quality'">
-			<InspectionWorkList pageName="myList" :way="orderType == 1 ? 'todo' : 'done'"  ref="inspectionWorkListRef"></InspectionWorkList>
+			<InspectionWorkList pageName="myList" :way="orderType == 1 ? 'todo' : 'done'" ref="inspectionWorkListRef">
+			</InspectionWorkList>
 		</view>
 
 		<view v-else class="work-list">
@@ -54,8 +55,8 @@
 			<template v-slot:list>
 				<view class="search_list">
 					<u-form labelPosition="left" :model="formData" labelWidth="180" labelAlign="left" class="baseForm">
-						<u-form-item v-if="orderType == 1 && statusRange[activeType].length > 0" label="类型:" class="required-form" borderBottom
-							prop="assetType">
+						<u-form-item v-if="orderType == 1 && statusRange[activeType].length > 0" label="类型:"
+							class="required-form" borderBottom prop="assetType">
 							<u-checkbox-group v-model="searchFrom.orderStatus" placement="row" size="30"
 								@change="statusChange">
 								<u-checkbox v-for="(item, index) in statusRange[activeType]"
@@ -81,13 +82,14 @@
 </template>
 
 <script>
-	
 	import {
 		getByCode
 	} from '@/api/pda/common.js'
 
-	import { workorderMyPage } from '@/api/pda/workOrder'
-	
+	import {
+		workorderMyPage
+	} from '@/api/pda/workOrder'
+
 	import SearchPopup from '@/pages/pda/components/searchPopup.vue'
 	import {
 		getWorkOrderList,
@@ -118,9 +120,7 @@
 		},
 		data() {
 			return {
-				clientEnvironmentId:
-					uni.getStorageSync("userInfo") &&
-					uni.getStorageSync("userInfo").clientEnvironmentId,
+				clientEnvironmentId: uni.getStorageSync("userInfo") &&uni.getStorageSync("userInfo").clientEnvironmentId,
 				groupId: null,
 				formData: {},
 				orderTitle: '',
@@ -168,6 +168,16 @@
 							value: 0
 						}
 					},
+					{
+						name: '检修',
+						type: 'service',
+						workOrderType: 7,
+						index: 1,
+						url: `/pages/maintenance/detail/detail?`,
+						badge: {
+							value: 0
+						}
+					},
 					// {
 					// 	name: '量具送检工单',
 					// 	type: 'quantity',
@@ -288,6 +298,19 @@
 						// 	text: '完成'
 						// }
 					],
+					service: [{
+							value: 0,
+							text: '待接收'
+						},
+						{
+							value: 2,
+							text: '执行中'
+						}
+						// {
+						// 	value: 3,
+						// 	text: '完成'
+						// }
+					],
 					patrol: [{
 							value: 0,
 							text: '待接收'
@@ -301,6 +324,7 @@
 						// 	text: '完成'
 						// }
 					],
+
 					quantity: [{
 							value: 0,
 							text: '待接收'
@@ -354,6 +378,7 @@
 					quality: [],
 					stocktaking: [],
 					production: [],
+					service: [],
 				},
 				searchFrom: {
 					code: '',
@@ -363,11 +388,22 @@
 				isInstall: true, // 是否首次进入页面
 				orderType: 1,
 				codeData: [],
-				groupTabs: [
-					{ label: '全部', groupId: null },
-					{ label: '5号站', groupId: '2008729845612720129' },
-					{ label: '6号站', groupId: '2008729929536548865' },
-					{ label: '7号站', groupId: '2008730320160468994' }
+				groupTabs: [{
+						label: '全部',
+						groupId: null
+					},
+					{
+						label: '5号站',
+						groupId: '2008729845612720129'
+					},
+					{
+						label: '6号站',
+						groupId: '2008729929536548865'
+					},
+					{
+						label: '7号站',
+						groupId: '2008730320160468994'
+					}
 				],
 			}
 		},
@@ -513,9 +549,9 @@
 			handleDetail(item) {
 				let url = this.tabList[this.activeIndex]?.url
 				if (!url) return
-				if(this.activeType == 'stocktaking') {
+				if (this.activeType == 'stocktaking') {
 					url += `id=${item.id}&status=${item.status}`
-				} else if(this.activeType == 'production') {
+				} else if (this.activeType == 'production') {
 					url += `id=${item.id}&title=${item.taskName}&singleReport=${item.singleReport}`
 				} else {
 					// url += `id=${item.id}&workOrderCode=${item.workOrderCode}&BizType=${item.bizType}`
@@ -540,7 +576,7 @@
 				this.page = 1
 				this.reset()
 				this.searchShow = false
-				if(this.activeType == 'quality'){
+				if (this.activeType == 'quality') {
 					this.$nextTick(() => {
 						this.$refs.inspectionWorkListRef.getList()
 					})
@@ -573,6 +609,10 @@
 							case 'check':
 								badgeValue = data.checkNum
 								break
+							case 'service':
+								badgeValue = data.serviceNum
+								break
+
 						}
 						return {
 							...item,
@@ -601,7 +641,7 @@
 				// })
 			},
 			getList() {
-				if(this.activeType == 'quality'){
+				if (this.activeType == 'quality') {
 					return
 				}
 				uni.showLoading({
@@ -613,35 +653,35 @@
 
 				const userInfo = uni.getStorageSync('userInfo')
 
-				if(this.activeType == 'production'){
+				if (this.activeType == 'production') {
 					let statusList = []
-					if(this.orderType == 1){
+					if (this.orderType == 1) {
 						statusList = [4, 5, 7]
 					} else {
 						statusList = [6, 10]
 					}
 					workorderMyPage({
-						pageNum: this.page,
-						size: 10,
-						...this.searchFrom,
-						statusList: statusList,
-						workCenterIds: userInfo.workCenterIds
-					})
-					.then(res => {
-						console.log('workorderMyPage~~~', res)
-						
-						if (res.list?.length > 0) {
-							this.dataList = this.dataList.concat(res.list)
-							isEnd = this.dataList.length >= res.count
-						} else {
-							this.dataList = []
-						}
-						console.log(this.dataList)
-						uni.hideLoading()
-					})
-					
-				} else if(this.activeType == 'stocktaking'){
-					
+							pageNum: this.page,
+							size: 10,
+							...this.searchFrom,
+							statusList: statusList,
+							workCenterIds: userInfo.workCenterIds
+						})
+						.then(res => {
+							console.log('workorderMyPage~~~', res)
+
+							if (res.list?.length > 0) {
+								this.dataList = this.dataList.concat(res.list)
+								isEnd = this.dataList.length >= res.count
+							} else {
+								this.dataList = []
+							}
+							console.log(this.dataList)
+							uni.hideLoading()
+						})
+
+				} else if (this.activeType == 'stocktaking') {
+
 					getPlanOrderList({
 						pageNum: this.page,
 						size: 10,
@@ -669,50 +709,50 @@
 						size: 10,
 						...this.searchFrom,
 					}
-				// 维修
-				if (this.tabList[this.activeIndex].workOrderType == 3) {
-					// let userInfo = uni.getStorageSync('userInfo')
-					// params.executeUserId = userInfo.userId
-					if (this.orderType == 1) {
-						if (!params.orderStatus.includes(3)) {
-							// params.orderStatus.push(3)
-						}
-					}
-				} else {
-					if (this.orderType == 1) {
-						if (params.orderStatus.includes(3)) {
-							let index = params.orderStatus.indexOf(3)
-							params.orderStatus.splice(index, 1)
+					// 维修
+					if (this.tabList[this.activeIndex].workOrderType == 3) {
+						// let userInfo = uni.getStorageSync('userInfo')
+						// params.executeUserId = userInfo.userId
+						if (this.orderType == 1) {
+							if (!params.orderStatus.includes(3)) {
+								// params.orderStatus.push(3)
+							}
 						}
 					} else {
-						params.orderStatus = [3]
+						if (this.orderType == 1) {
+							if (params.orderStatus.includes(3)) {
+								let index = params.orderStatus.indexOf(3)
+								params.orderStatus.splice(index, 1)
+							}
+						} else {
+							params.orderStatus = [3]
+						}
 					}
-				}
 
 
-				if(this.activeType == 'patrol' && this.groupId) {
-					params.teamId = this.groupId
-				}
-				
-				console.log('params~~~', params);
-				getWorkOrderList(params)
-					.then(res => {
-						if (res.list?.length > 0 && params.type === this.tabList[this.activeIndex].workOrderType) {
-							// if (params.page === 1) {
-							// 	this.dataList = []
-							// }
-							// this.dataList.push(...res.data.list.records)
-							this.dataList = this.dataList.concat(res.list)
-							isEnd = this.dataList.length >= res.count
-						} else {
-							this.dataList = []
-						}
-						console.log(this.dataList)
-						uni.hideLoading()
-					})
-					.catch(() => {
-						uni.hideLoading()
-					})
+					if ((this.activeType == 'patrol' || this.activeType == 'service') && this.groupId) {
+						params.teamId = this.groupId
+					}
+
+					console.log('params~~~', params);
+					getWorkOrderList(params)
+						.then(res => {
+							if (res.list?.length > 0 && params.type === this.tabList[this.activeIndex].workOrderType) {
+								// if (params.page === 1) {
+								// 	this.dataList = []
+								// }
+								// this.dataList.push(...res.data.list.records)
+								this.dataList = this.dataList.concat(res.list)
+								isEnd = this.dataList.length >= res.count
+							} else {
+								this.dataList = []
+							}
+							console.log(this.dataList)
+							uni.hideLoading()
+						})
+						.catch(() => {
+							uni.hideLoading()
+						})
 				}
 
 			}

+ 54 - 50
pages/index/index.vue

@@ -150,7 +150,8 @@
 				<CellTip title="生产安全"></CellTip>
 				<view class="nav">
 					<view class="nav-content">
-						<view class="nav-item" v-for="(item, index) in productionSafetyManagement" @click="toNav(item.path)">
+						<view class="nav-item" v-for="(item, index) in productionSafetyManagement"
+							@click="toNav(item.path)">
 							<span :class="'iconfont ' + item.icon"></span>
 							<i class="badge" v-if="item.badge">{{ item.badge }}</i>
 							<label>{{ item.name }}</label>
@@ -171,7 +172,7 @@
 					</view>
 				</view>
 			</view>
-		</view> 
+		</view>
 	</view>
 </template>
 
@@ -210,9 +211,9 @@
 				pcsList: [],
 				// 导航相关
 				moduleNavList: [],
-				energyManagement:[],
+				energyManagement: [],
 				//安全生产
-				productionSafetyManagement:[],
+				productionSafetyManagement: [],
 				scrollIntoViewId: "",
 				currentNavIndex: 0,
 				moduleObserver: null,
@@ -256,26 +257,28 @@
 					})
 					.exec();
 			},
-			getStatistics() {
-				// 获取工单统计数
-				statistics()
-					.then((res) => {
-						this.workOrder = res;
-						this.operationsList.forEach((item) => {
-							if (item.name == "保养工单") item.badge = res.maintenanceNum;
-							if (item.name == "巡点检工单") item.badge = res.patrolInspection;
-							if (item.name == "维修工单") item.badge = res.repairsNum;
-						});
-					})
-					.finally(() => {
-						this.timer = setTimeout(() => {
-							this.getStatistics();
-						}, 12000);
-					});
-				
-			},
+			// getStatistics() {
+			// 	// 获取工单统计数
+			// 	statistics()
+			// 		.then((res) => {
+			// 			this.workOrder = res;
+			// 			this.operationsList.forEach((item) => {
+			// 				if (item.name == "保养工单") item.badge = res.maintenanceNum;
+			// 				if (item.name == "巡点检工单") item.badge = res.patrolInspection;
+			// 				if (item.name == "维修工单") item.badge = res.repairsNum;
+			// 				if (item.name == "检修工单") item.badge = res.serviceNum;
+
+			// 			});
+			// 		})
+			// 		.finally(() => {
+			// 			this.timer = setTimeout(() => {
+			// 				this.getStatistics();
+			// 			}, 12000);
+			// 		});
+
+			// },
 			getBrages() {
-				 qualityTodoByPda().then((res) => {
+				qualityTodoByPda().then((res) => {
 					console.log(2)
 					this.qmsList.forEach((item) => {
 						if (item.name == "质检工单") item.badge = res.workOrderNum;
@@ -287,7 +290,7 @@
 					});
 					// this.qmsList = f.children;
 				});
-				
+
 				statistics()
 					.then((res) => {
 						this.workOrder = res;
@@ -295,6 +298,7 @@
 							if (item.name == "保养工单") item.badge = res.maintenanceNum;
 							if (item.name == "巡点检工单") item.badge = res.patrolInspection;
 							if (item.name == "维修工单") item.badge = res.repairsNum;
+							if (item.name == "检修工单") item.badge = res.serviceNum;
 						});
 					})
 			},
@@ -313,15 +317,15 @@
 							this.productionList = f.children;
 						} else if (f.path == "operationsList") {
 							// const promise = statistics().then((res) => {
-								// console.log(3)
-								// this.workOrder = res;
-								// f.children.forEach((item) => {
-								// 	if (item.name == "保养工单") item.badge = res.maintenanceNum;
-								// 	if (item.name == "巡点检工单")
-								// 		item.badge = res.patrolInspection;
-								// 	if (item.name == "维修工单") item.badge = res.repairsNum;
-								// });
-								this.operationsList = f.children;
+							// console.log(3)
+							// this.workOrder = res;
+							// f.children.forEach((item) => {
+							// 	if (item.name == "保养工单") item.badge = res.maintenanceNum;
+							// 	if (item.name == "巡点检工单")
+							// 		item.badge = res.patrolInspection;
+							// 	if (item.name == "维修工单") item.badge = res.repairsNum;
+							// });
+							this.operationsList = f.children;
 							// });
 							// asyncPromises.push(promise);
 						} else if (f.path == "warehouseManagement") {
@@ -343,16 +347,16 @@
 							this.purchaseManageList = f.children;
 						} else if (f.path == "qualityManage") {
 							// const promise = qualityTodoByPda().then((res) => {
-								// console.log(2)
-								// f.children.forEach((item) => {
-								// 	if (item.name == "质检工单") item.badge = res.workOrderNum;
-								// 	if (item.name == "我的质检工单")
-								// 		item.badge = res.myWorkOrderNum;
-								// 	if (item.name == "我的任务单") item.badge = res.myTaskMonadNum;
-								// 	if (item.name == "我的受托单")
-								// 		item.badge = res.myRequestEntrustNum;
-								// });
-								this.qmsList = f.children;
+							// console.log(2)
+							// f.children.forEach((item) => {
+							// 	if (item.name == "质检工单") item.badge = res.workOrderNum;
+							// 	if (item.name == "我的质检工单")
+							// 		item.badge = res.myWorkOrderNum;
+							// 	if (item.name == "我的任务单") item.badge = res.myTaskMonadNum;
+							// 	if (item.name == "我的受托单")
+							// 		item.badge = res.myRequestEntrustNum;
+							// });
+							this.qmsList = f.children;
 							// });
 							// asyncPromises.push(promise);
 						} else if (f.path == "productionControlManagement") {
@@ -442,7 +446,7 @@
 					.filter(([key]) => this[key]?.length > 0)
 					.map(([, value]) => value);
 
-				
+
 			},
 			// 点击导航跳转 - 使用动态获取的顶部高度进行精确定位
 			goToModule(item, index) {
@@ -511,12 +515,12 @@
 								url: `/pages/traceability/scanCode/index?id=${id}`,
 							});
 							return;
-						} else if(scanResult && scanResult.includes("/pages/warehouse/hwQrcode/index")) {
-              uni.navigateTo({
-                url: `${scanResult}`,
-              });
-              return
-            }
+						} else if (scanResult && scanResult.includes("/pages/warehouse/hwQrcode/index")) {
+							uni.navigateTo({
+								url: `${scanResult}`,
+							});
+							return
+						}
 						_this.scantoRouter(scanResult);
 					},
 				});

+ 1 - 1
pages/maintenance/check/index.vue

@@ -1,6 +1,6 @@
 <template>
 	<view>
-		<uni-nav-bar fixed="true" statusBar="true" left-icon="back" title="保养中" @clickLeft="back">
+		<uni-nav-bar fixed="true" statusBar="true" left-icon="back" title="检查中" @clickLeft="back">
 			<!-- <view class="nav-right" slot="right">
         <view class="text-box" @click="goRegister"> 备件使用登记 </view>
       </view> -->

+ 8 - 66
pages/maintenance/detail/detail.vue

@@ -4,7 +4,7 @@
       fixed="true"
       statusBar="true"
       left-icon="back"
-      title="保养工单详情"
+      title="工单详情"
       @clickLeft="back"
       @clickRight="HandlScanCode"
     ></uni-nav-bar>
@@ -22,7 +22,7 @@
             <text class="kd-content">{{ worksheetInfo.code }}</text>
           </view>
           <view class="kd-cell">
-            <text class="kd-label">保养名称</text>
+            <text class="kd-label">名称</text>
             <text class="kd-content">{{ worksheetInfo.planName }}</text>
           </view>
           <view class="kd-cell">
@@ -30,7 +30,7 @@
             <text class="kd-content">{{ worksheetInfo.categoryName }}</text>
           </view>
           <view class="kd-cell">
-            <text class="kd-label">保养设备总数</text>
+            <text class="kd-label">设备总数</text>
             <text class="kd-content text-warning"
               >{{ worksheetInfo.finishNum }}/{{ worksheetInfo.total }}</text
             >
@@ -211,7 +211,7 @@
                       "
                       @click="checkDetail(item)"
                     >
-                      保养详情
+                      详情
                     </button>
                   </view>
                 </view>
@@ -222,65 +222,7 @@
         <view class="spare-parts" v-if="active == 2">
           <pickCard :list="sparePartsApply" />
         </view>
-        <!-- 	<view class="spare-parts" v-show="active === 2">
-					<Step>
-						<StepItem v-for="(item, index) in repairInfoLogList" :key="index" :active="index == 0" :hideContent="Boolean(item.content)">
-							<template v-slot:header>
-								<view class="step-title">
-									<view class="s1">{{ typeOptions[item.type] }}</view>
-									<view class="s2">
-										{{ item.createTime }}
-									</view>
-								</view>
-							</template>
-							<template v-slot:content v-if="item.content">
-								<view class="list-xs" v-if="item.type == 'CREATE'">
-									<view class="list-xs-item">
-										<view class="label">报修人</view>
-										<view class="value">
-											{{ logs[item.id] ? logs[item.id].content.requestUserName : '' }}
-										</view>
-									</view>
-									<view class="list-xs-item">
-										<view class="label">故障描述</view>
-										<view class="value">
-											{{ logs[item.id] ? logs[item.id].content.remark : '' }}
-										</view>
-									</view>
-								</view>
-								<view class="list-xs" v-else-if="item.type == 'SPARE_PARTS_APPLY'">
-									<view class="list-xs-item">
-										<view class="label">申领清单</view>
-										<view class="value bjsymx" @click="handlbjsymx('备件明细', item.content.infoList)">备件使用明细</view>
-									</view>
-								</view>
-								<view class="list-xs" v-else-if="item.type == 'ACCEPTANCE_CHEK'">
-									<view class="list-xs-item">
-										<view class="label">验收人</view>
-										<view class="value">
-											{{ logs[item.id] ? logs[item.id].content.userName : '' }}
-										</view>
-									</view>
-									<view class="list-xs-item">
-										<view class="label">验收结果</view>
-										<view class="value">
-											{{ logs[item.id] ? (logs[item.id].content.orderStatus == 4 ? '通过' : '驳回') : '' }}
-										</view>
-									</view>
-								</view>
-								<view class="list-xs" v-else-if="item.type == 'WORK_REPORT'">
-									<view class="list-xs-item">
-										<view class="label">处理说明</view>
-										<view class="value">
-											{{ logs[item.id] ? logs[item.id].content.reason : '' }}
-										</view>
-									</view>
-								</view>
-							</template>
-						</StepItem>
-					</Step>
-					<PopSparePart ref="PopSparePart" :workOrderCode="workOrderCode" :noRequest="true"></PopSparePart>
-				</view> -->
+
       </view>
     </view>
     <uni-popup ref="inputDialog" type="dialog">
@@ -343,7 +285,7 @@ export default {
   },
   data() {
     return {
-      tabList: ["基本信息", "保养设备", "备品备件"],
+      tabList: ["基本信息", "设备", "备品备件"],
       typeOptions: {
         CREATE: "生成工单",
         SPARE_PARTS_APPLY: "备品备件申请",
@@ -484,7 +426,7 @@ export default {
       if (this.worksheetInfo.status.code === 0) {
         uni.showModal({
           title: "提示",
-          content: "工单未开启执行,不可进行保养操作,请先点击“开始执行”!",
+          content: "工单未开启执行,不可进行操作,请先点击“开始执行”!",
           confirmText: "开始执行", //这块是确定按钮的文字
           cancelText: "取消", //这块是取消的文字
           success: function (res) {
@@ -601,7 +543,7 @@ export default {
     handleReport() {
       if (this.worksheetInfo.finishNum !== this.worksheetInfo.total) {
         uni.showToast({
-          title: "请完成巡检设备检查",
+          title: "请完成设备检查",
           icon: "none",
         });
         this.active = 1;

+ 4 - 1
pages/maintenance/order/OrderTask.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="content_box">
 		<!-- 站号筛选 -->
-		<view class="group-tab-bar rx-sc">
+		<view class="group-tab-bar rx-sc" v-if="clientEnvironmentId==10">
 			<view class="group-tab-item" v-for="(tab, idx) in groupTabs" :key="idx"
 				:class="{ active: groupId === tab.groupId }" @click="switchGroup(tab.groupId)">
 				{{ tab.label }}
@@ -69,6 +69,9 @@
 		},
 		data() {
 			return {
+				clientEnvironmentId:
+					uni.getStorageSync("userInfo") &&
+					uni.getStorageSync("userInfo").clientEnvironmentId,
 				groupTabs: [
 					{ label: '全部', groupId: null },
 					{ label: '5号站', groupId: '2008729845612720129' },

+ 243 - 0
pages/maintenance/service/OrderTask.vue

@@ -0,0 +1,243 @@
+<template>
+	<view class="content_box">
+		<!-- 站号筛选 -->
+		<view class="group-tab-bar rx-sc"  v-if="clientEnvironmentId == 10">
+			<view class="group-tab-item" v-for="(tab, idx) in groupTabs" :key="idx"
+				:class="{ active: groupId === tab.groupId }" @click="switchGroup(tab.groupId)">
+				{{ tab.label }}
+			</view>
+		</view>
+		<view class="list_box marginTop">
+			<u-list>
+				<u-list-item v-for="(item, index) in list" :key="index">
+					<view class="card_box" @click="goDetail(item)">
+						<view class="item_box flex_between">
+							<view class="rx-sc">
+								<view class="round">{{Number(index)+1}}</view>
+								<view class="orderId">{{item.code}} </view>
+							</view>
+							<view class="state">
+								{{ dict.status[item.orderStatus] }}
+							</view>
+						</view>
+						<view class="item_box rx-bc">
+							<view class="item_one perce50 rx-sc">
+								<view class="lable">设备名称:</view>
+								<view class="deviceName">{{item.deviceName}}</view>
+							</view>
+						</view>
+						<view class="item_box rx-bc">
+							<view class="item_one perce50 rx-sc">
+								<view class="lable">规则名称:</view>
+								<view>{{item.ruleName}}</view>
+							</view>
+						</view>
+						<view class="item_box rx-bc">
+							<view class="item_one perce50 rx-sc">
+								<view class="lable">截止时间:</view>
+								<view>{{item.planFinishTime}}</view>
+							</view>
+						</view>
+					</view>
+				</u-list-item>
+				<u-list-item v-if="list.length === 0">
+					<view style='margin-top: 20vh;'>
+						<u-empty iconSize='150' textSize='32' text='暂无工单'>
+						</u-empty>
+					</view>
+				</u-list-item>
+
+			</u-list>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			type: {
+				type: [String, Number]
+			},
+			list: {
+				type: Array,
+				default: () => []
+			},
+			groupId: {
+				type: [String, Number],
+				default: null
+			}
+		},
+		data() {
+			return {
+				clientEnvironmentId:
+					uni.getStorageSync("userInfo") &&
+					uni.getStorageSync("userInfo").clientEnvironmentId,
+				groupTabs: [
+					{ label: '全部', groupId: null },
+					{ label: '5号站', groupId: '2008729845612720129' },
+					{ label: '6号站', groupId: '2008729929536548865' },
+					{ label: '7号站', groupId: '2008730320160468994' }
+				],
+				dict: {
+					status: {
+						0: '待接收',
+						2: '执行中',
+						3: '已完成'
+					},
+					//紧急程度
+					urgent: {
+						1: '普通',
+						2: '紧急',
+						3: '重要'
+					}
+				}
+			}
+		},
+		methods: {
+			goDetail(item) {
+				uni.navigateTo({
+					url: `/pages/maintenance/detail/detail?id=${item.id}&planId=${item.planId}&code=${item.code}&&orderType=7`
+				})
+			},
+			switchGroup(groupId) {
+				this.$emit('changeGroup', groupId)
+			},
+			isClass() {
+				switch (String(this.type)) {
+					case '0':
+						return 'd1'
+						break
+					case '1':
+						return 'd2'
+						break
+					case '3':
+						return 'd3'
+						break
+					default:
+						break
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.group-tab-bar {
+		background: #fff;
+		padding: 16rpx 32rpx;
+		border-bottom: 2rpx solid #e1e1e1;
+		gap: 16rpx;
+	}
+
+	.group-tab-item {
+		padding: 8rpx 24rpx;
+		font-size: 28rpx;
+		color: #666;
+		border-radius: 32rpx;
+		background: #f5f5f5;
+		white-space: nowrap;
+
+		&.active {
+			background: $theme-color;
+			color: #fff;
+		}
+	}
+
+	.marginTop {
+		border-top: 20rpx solid $page-bg;
+	}
+
+	// .content_box {
+	// 	height: 100vh;
+	// 	overflow: hidden;
+	// 	display: flex;
+	// 	flex-direction: column;
+	// 	background-color: $page-bg;
+	// }
+
+	.list_box {
+		flex: 1;
+		overflow: hidden;
+		padding: 16rpx 0;
+
+		.u-list {
+			height: 100% !important;
+		}
+	}
+
+	.card_box {
+		width: 750rpx;
+		padding: 16rpx 32rpx;
+		box-sizing: border-box;
+		border-bottom: 2rpx solid #E1E1E1;
+
+
+		.item_box {
+			margin-top: 10rpx;
+
+
+
+			.round {
+				width: 40rpx;
+				height: 40rpx;
+				line-height: 40rpx;
+				border-radius: 50%;
+				background: $theme-color;
+				color: #fff;
+				text-align: center;
+				font-size: 20rpx;
+			}
+
+			.orderId {
+				color: #000;
+				font-family: PingFang HK;
+				font-size: 28rpx;
+				font-style: normal;
+				font-weight: 600;
+				margin-left: 16rpx;
+			}
+
+			.item_one {
+				width: 100%;
+				font-size: 26rpx;
+				font-style: normal;
+				font-weight: 400;
+				line-height: 38rpx;
+				word-wrap: break-word;
+				.lable {
+					width: 150rpx;
+				}
+				
+				.deviceName {
+					width: calc(750rpx - 150rpx);
+					display: -webkit-box;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 2;
+					overflow: hidden;
+				}
+			}
+
+			.gylx {
+				color: $theme-color;
+			}
+
+			.perce50 {
+				width: 100%;
+			}
+		}
+
+		.flex_between {
+			display: flex;
+			justify-content: space-between;
+		}
+	}
+
+	.state {
+		font-size: 28rpx;
+		color: #7f7f7f;
+		background: #f1f1f1;
+		display: inline;
+		padding: 2px 5px;
+		border-radius: 10px;
+	}
+</style>

+ 434 - 0
pages/maintenance/service/order.vue

@@ -0,0 +1,434 @@
+<template>
+	<view>
+		<uni-nav-bar fixed="true" statusBar="true" left-icon="back" title="检修工单" @clickLeft="back"></uni-nav-bar>
+
+		<view class="search-box">
+			<uni-section>
+				<uni-easyinput @clear="clearSearch" prefixIcon="search" style="width: 460rpx" v-model="searchForm.code"
+					placeholder="工单编号">
+				</uni-easyinput>
+			</uni-section>
+			<button class="search_btn" @click="doSearch">搜索</button>
+			<!-- <image class="menu_icon" @click="showSearch" src="~@/static/pda/menu.svg"></image> -->
+		</view>
+
+
+		<view v-show="showTab">
+			<view class="top-wrapper">
+				<view class="tab_box rx-sc">
+					<view class="tab_item" v-for="(item,index) in tabList" :key="index"
+						:class="{active: pickTabIndex == index}">
+						<view @click="changeChartsTab(index)" class="badge-c">
+							{{item.label}}
+							<u-badge max="99" :value="item.number" absolute></u-badge>
+
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+        <OrderTask v-for="(item, index) in tabList" :key="index" v-show="index === pickTabIndex" :list="item.list"
+            :type="tabList.value" :groupId="groupId" @changeGroup="onChangeGroup"></OrderTask>
+
+		<u-toast ref="uToast"></u-toast>
+
+		<MySearch :show.sync="searchShow" :formItems="formItems" @search="confirmSearch" ref="mySearchRef"></MySearch>
+	</view>
+</template>
+
+<script>
+	import {
+		isObjectEmpty
+	} from '@/utils/utils.js'
+	import {
+		getWorkOrderList,
+		getRuleList,
+		workPage
+	} from '@/api/myTicket'
+	import OrderTask from './OrderTask.vue'
+	import {
+		post,
+		postJ
+	} from '@/utils/api.js'
+
+	export default {
+		components: {
+			OrderTask
+		},
+		computed: {
+
+		},
+		data() {
+			return {
+				showTab: true,
+				page: 1,
+				size: 10,
+				isEnd: false,
+				tabList: [{
+						value: 0,
+						label: '待接收',
+						list: [],
+						number: 0
+					},
+					{
+						value: 2,
+						label: '执行中',
+						list: [],
+						number: 0
+					},
+					{
+						value: 3,
+						label: '已完成',
+						list: [],
+						number: 0
+					},
+					{
+						value: 4,
+						label: '全部',
+						list: [],
+						isNone: !this.$isAuthorities('eam:maintenance:listAll'),
+						number: 0
+					}
+				].filter(item => !item.isNone),
+
+				pickTabIndex: 0,
+				qrContent: null,
+				barType: 0,
+                searchShow: false,
+                searchForm: {
+                    code: ''
+                },
+                groupId: null,
+				formItems: [{
+						label: '规则名称:',
+						prop: 'ruleId',
+						component: 'MySelect',
+						props: {
+							localdata: [],
+							dataKey: 'name',
+							dataValue: 'id'
+						}
+					},
+					{
+						label: '时间:',
+						prop: 'startEndTime',
+						component: 'MyDateRange',
+						props: {
+							type: 'daterange',
+						}
+					}
+				]
+			}
+		},
+		onLoad() {
+			this.getRuleList()
+		},
+		onShow() {
+			this.getFirstList()
+			this.getStatus()
+		},
+		onReachBottom() {
+			this.getList()
+		},
+		methods: {
+			getStatus() {
+				getWorkOrderList({
+					orderStatus: [0],
+					type: 7,
+					pageNum: 1,
+					size: 1
+				}).then(res => {
+					this.tabList[0].number = res.count
+				})
+				getWorkOrderList({
+					orderStatus: [2],
+					type: 7,
+					pageNum: 1,
+					size: 1
+				}).then(res => {
+					this.tabList[1].number = res.count
+				})
+
+			},
+			getCount() {
+				statistics().then(data => {
+					console.log('onsole.log(data)-----------')
+					console.log(data)
+					this.tabList = this.tabList.map(item => {
+						// switch (item.value) {
+						// 	case '0':
+						// 		return {
+						// 			...item, badge: {
+						// 				value: data.maintenanceNum
+						// 			}
+						// 		}
+						// 	case '2':
+						// 		return {
+						// 			...item, badge: {
+						// 				value: data.patrolInspection
+						// 			}
+						// 		}
+						// 	case '3':
+						// 		return {
+						// 			...item, badge: {
+						// 				value: data.quantityNum
+						// 			}
+						// 		}
+						// 	case '4':
+						// 		return {
+						// 			...item, badge: {
+						// 				value: data.repairsNum
+						// 			}
+						// 		}
+						// }
+					})
+				})
+			},
+			getFirstList: function() {
+				this.page = 1
+				this.isEnd = false
+				this.getList()
+			},
+
+			getList() {
+				if (this.isEnd) {
+					this.$refs.uToast.show({
+						message: "暂无更多数据",
+						duration: 1000
+					})
+					return
+				}
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+                let params = {
+                    orderStatus: [this.tabList[this.pickTabIndex].value],
+                    type: 7,
+                    pageNum: this.page,
+                    size: this.size,
+                    ...this.searchForm
+                }
+                if (this.groupId) {
+                    params.teamId = this.groupId
+                }
+				if (!this.showTab || this.pickTabIndex == 3) {
+					delete params.orderStatus
+				}
+				let api = this.pickTabIndex == 3 ? workPage : getWorkOrderList
+				api(params)
+					.then(res => {
+
+						if (this.page == 1) {
+							this.$set(this.tabList[this.pickTabIndex], 'list', res.list)
+							// this.tabList[this.pickTabIndex].list = res.list
+						} else {
+							this.tabList[this.pickTabIndex].list.push(...res.list);
+						}
+						console.log(this.tabList[this.pickTabIndex])
+						this.page += 1
+						this.isEnd = this.tabList[this.pickTabIndex].list.length >= res.count
+						uni.hideLoading()
+					})
+					.catch(() => {
+						uni.hideLoading()
+					})
+			},
+            changeChartsTab(index) {
+                this.pickTabIndex = index
+                this.groupId = null
+                this.getFirstList()
+            },
+            onChangeGroup(groupId) {
+                this.groupId = groupId
+                this.getFirstList()
+            },
+			async getRuleList() {
+				let params = {
+					status: 1,
+					type: 7,
+					pageNum: 1,
+					size: -1
+				}
+				const res = await getRuleList(params)
+				this.formItems.find(item => item.prop === 'ruleId').props.localdata = res
+			},
+			clearSearch() {
+				this.searchForm.code = ''
+				this.doSearch()
+			},
+			doSearch() {
+				this.isEnd = false;
+				this.page = 1;
+				this.showTab = isObjectEmpty(this.searchForm)
+				this.getList();
+			},
+			showSearch() {
+				this.searchShow = true
+			},
+			confirmSearch(e) {
+				console.log(e);
+				let data = JSON.parse(JSON.stringify(e))
+				this.searchForm = {
+					...this.searchForm,
+					...data
+				}
+				console.log(this.searchForm);
+				this.doSearch()
+			},
+
+
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.top-wrapper {
+		display: flex;
+		align-items: center;
+		background-color: #fff;
+		position: relative;
+
+		.tab_box {
+			width: 100%;
+			height: 68rpx;
+
+
+			.tab_item {
+				height: 68rpx;
+				line-height: 68rpx;
+				padding: 0 20rpx;
+				font-size: 32rpx;
+				// color: #979C9E;
+
+			}
+
+			.active {
+				box-sizing: border-box;
+				border-bottom: 6rpx solid $theme-color;
+				color: $theme-color;
+			}
+
+
+		}
+	}
+
+	.badge-c {
+		position: relative;
+	}
+
+	/deep/.u-badge {
+		top: 0;
+		right: 0;
+		transform: translate(90%, 20%);
+	}
+
+
+	// .tab-title {
+	// 	position: fixed;
+	// 	z-index: 99;
+	// 	width: 100%;
+	// 	padding: 10rpx;
+	// 	// display: flex;
+	// 	// justify-content: space-between;
+	// 	height: $tab-height;
+	// 	line-height: $tab-height;
+	// 	background-color: #ffffff;
+	// 	border-bottom: 1px solid #f2f2f2;
+	// 	// box-sizing: border-box;
+	// 	white-space: nowrap;
+	// 	overflow: auto hidden;
+	// 	display: flex;
+
+	// 	&::-webkit-scrollbar {
+	// 		/*滚动条整体样式*/
+	// 		width: 10px;
+	// 		/*高宽分别对应横竖滚动条的尺寸*/
+	// 		height: 1px;
+	// 	}
+
+	// 	&::-webkit-scrollbar-thumb {
+	// 		/*滚动条里面小方块*/
+	// 		border-radius: 10px;
+	// 		-webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
+	// 		background: #535353;
+	// 	}
+
+	// 	&::-webkit-scrollbar-track {
+	// 		/*滚动条里面轨道*/
+	// 		-webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
+	// 		border-radius: 10px;
+	// 		background: #ededed;
+	// 	}
+
+	// 	.tab-item {
+	// 		flex: 1;
+	// 		text-align: center;
+	// 		display: inline-block;
+	// 		font-size: 32rpx;
+	// 		color: $uni-text-color-grey;
+	// 	}
+
+	// 	.tab-item.active {
+	// 		color: $j-primary-border-green;
+	// 		border-bottom: 1px solid $j-primary-border-green;
+	// 	}
+
+	// 	.title-num {
+	// 		font-size: 26rpx;
+	// 	}
+
+
+	// }
+
+	// .title-red {
+	// 	display: inline-block;
+	// 	font-size: 22rpx;
+	// 	padding: 0 10rpx;
+	// 	border-radius: 50rpx;
+	// 	color: #ffffff;
+	// 	background: red;
+	// 	line-height: 38rpx;
+	// 	position: absolute;
+	// 	top: 10rpx;
+	// 	min-width: 18rpx;
+	// }
+
+	.search-box {
+		background-color: #fff;
+		display: flex;
+		width: 750rpx;
+		height: 88rpx;
+		padding: 16rpx 32rpx;
+		align-items: center;
+		gap: 16rpx;
+		justify-content: space-between;
+
+		/deep/.uni-section {
+			margin-top: 0px;
+		}
+
+		/deep/.uni-section-header {
+			padding: 0px;
+
+		}
+
+		.search_btn {
+			width: 120rpx;
+			height: 70rpx;
+			line-height: 70rpx;
+			padding: 0 24rpx;
+			background: $theme-color;
+			font-size: 32rpx;
+			color: #fff;
+			margin: 0;
+			margin-left: 26rpx;
+		}
+
+		.menu_icon {
+			width: 44rpx;
+			height: 44rpx;
+			margin-left: 14rpx;
+		}
+	}
+</style>

BIN
unpackage/res/icons/1024x1024.png


BIN
unpackage/res/icons/120x120.png


BIN
unpackage/res/icons/144x144.png


BIN
unpackage/res/icons/152x152.png


BIN
unpackage/res/icons/167x167.png


BIN
unpackage/res/icons/180x180.png


BIN
unpackage/res/icons/192x192.png


BIN
unpackage/res/icons/20x20.png


BIN
unpackage/res/icons/29x29.png


BIN
unpackage/res/icons/40x40.png


BIN
unpackage/res/icons/58x58.png


BIN
unpackage/res/icons/60x60.png


BIN
unpackage/res/icons/72x72.png


BIN
unpackage/res/icons/76x76.png


BIN
unpackage/res/icons/80x80.png


BIN
unpackage/res/icons/87x87.png


BIN
unpackage/res/icons/96x96.png