Преглед изворни кода

结单人员验证、其他优化

HD_wangm пре 2 месеци
родитељ
комит
998cf35ca7

+ 4 - 8
api/user/list.uts

@@ -7,16 +7,12 @@ import type { UserInfo } from '../../types/user'
 /**
  * 获取用户列表
  */
-export const getUserList = (deptId?: any): Promise<any> => {
-	let url = `/system/user/listNoPermi?status=0`
-	if (deptId != null ) {
-	    // 支持工单编码和风机编号查询
-	    url += `&deptId=${deptId}`
-	}
-
+export const getUserList = (query: UTSJSONObject | null): Promise<any> => {
+	let url = `/system/user/listData`
     return request({
         url: url,
-        method: 'GET'
+        method: 'GET',
+		data: query
     })
 }
 

+ 1 - 1
pages/order/detail/resetIndex.uvue

@@ -89,7 +89,7 @@
         </scroll-view>
 
         <!-- 接单按钮 -->
-            <view class="accept-button-container" v-if="checkPermi(orderType == '2' ? ['gxt:maintenance:order:suspend'] : ['gxt:repairOrder:suspend'])">
+            <view class="accept-button-container" v-if="checkPermi(orderType == '2' ? ['gxt:maintenance:order:complete'] : ['gxt:repairOrder:finalize'])">
             <button class="accept-button" @click="handleSuspendOrder">{{ isDealing ? '复启中...' : '复 启' }}</button>
         </view>
 

+ 7 - 7
pages/order/detail/restartIndex.uvue

@@ -39,7 +39,7 @@
 						<view class="info-label">
 							<text class="form-label required">恢复运行时间<text style="color: red;">*</text></text>
 						</view>
-						
+
 						<view class="info-value">
 						    <view class="form-picker" @click="showshutdownTimePicker = true">
 								<input
@@ -55,7 +55,7 @@
 						<view class="info-label">
 							<text class="form-label required">损失电量(kWh)<text style="color: red;">*</text></text>
 						</view>
-						
+
 						<view class="info-value">
 								<input
 								    class="input-field"
@@ -69,7 +69,7 @@
 					</view>
 			    </view>
 			</view>
-			
+
 			<!-- 时间选择器弹窗 -->
 			<!-- Start Date Picker -->
 			<l-popup v-model="showshutdownTimePicker" position="bottom">
@@ -87,7 +87,7 @@
         </scroll-view>
 
         <!-- 接单按钮 -->
-        <view class="accept-button-container" v-if="checkPermi(orderType == '2' ? ['gxt:maintenance:order:suspend'] : ['gxt:repairOrder:suspend'])">
+        <view class="accept-button-container" v-if="checkPermi(orderType == '2' ? ['gxt:maintenance:order:restart'] : ['gxt:repairOrder:restart'])">
             <button class="accept-button" @click="handleRestartOrderr">{{ isDealing ? '复运中...' : '复 运' }}</button>
         </view>
 
@@ -114,7 +114,7 @@
 	const dictLoaded = ref<boolean>(false)
 	const restartTime = ref<string>("")
 	const lostPower = ref<string>("")
-	
+
 	// 工单信息
 	const orderId = ref<string>('')
 	const workOrderProjectNo = ref<string>('')
@@ -128,7 +128,7 @@
 	const assignTime = ref<string>('')
 
 	const showshutdownTimePicker = ref<boolean>(false)
-	
+
 	// 输入过滤方法,只允许数字和小数点,并确保值大于0
 	const handleLostPowerInput = () => {
 	  let value = lostPower.value;
@@ -151,7 +151,7 @@
       // 更新值
       lostPower.value = value;
 	};
-	
+
 	// 验证损失电量是否大于0
 	const validateLostPower = () => {
 		if (lostPower.value.trim() !== '') {

+ 26 - 25
pages/order/detail/wbBackfillFinalize.uvue

@@ -58,12 +58,13 @@
                             <text class="form-label required">开始时间<text style="color: red;">*</text></text>
                         </view>
                         <view class="info-value">
-                            <view class="form-picker" @click="showStartTimePicker = true">
+                            <view class="form-picker" @click="infoEntry == '1' ? showStartTimePicker = false : showStartTimePicker = true">
 								<input
 								    class="input-field"
 								    placeholder="请选择开始时间"
 								    v-model="realStartTime"
 									type="none"
+									style="pointer-events: none;"
 								/>
                             </view>
                         </view>
@@ -75,17 +76,18 @@
                             <text class="form-label required">结束时间<text style="color: red;">*</text></text>
                         </view>
                         <view class="info-value">
-                            <view class="form-picker" @click="showEndTimePicker = true">
+                            <view class="form-picker" @click="infoEntry == '1' ? showEndTimePicker = false : showEndTimePicker = true">
 								<input
 								    class="input-field"
 								    placeholder="请选择结束时间"
 								    v-model="realEndTime"
 									type="none"
+									style="pointer-events: none;"
 								/>
                             </view>
                         </view>
                     </view>
-					
+
 					<!-- 挂起结束时间 -->
 					<view class="info-item" v-if="resumeInfo != null && resumeShow">
 					    <view class="info-label">
@@ -234,7 +236,7 @@
 					@cancel="showEndTimePicker = false">
 				</l-date-time-picker>
 			</l-popup>
-			
+
 			<l-popup v-model="showResumeTimePicker" position="bottom" :safe-area-inset-bottom="true" :z-index="10000">
 				<l-date-time-picker
 					title="选择挂起结束时间"
@@ -353,7 +355,7 @@
     const startTimeTime = ref<string>('')
     const endTimeDate = ref<string>('')
     const endTimeTime = ref<string>('')
-    
+
     // 搜索关键词
 	const userKeyword = ref<string>('')
     // 人员选择相关变量
@@ -363,7 +365,7 @@
 
     // 信息录入选项
 	const selectedMisInfoIndex = ref<number>(-1)
-	
+
 	//挂起结束时间
 	const suspendReason = ref<string>('') // 挂起原因
 	const flowList = ref<UTSJSONObject[]>([]) //流转过程
@@ -372,7 +374,7 @@
 	const resumeShow = ref<boolean>(false)
 	const resumeTime = ref<string>('') // 挂起结束时间
 	const showResumeTimePicker = ref<boolean>(false)
-	
+
 	// 监听开始时间和结束时间变化
 	watch(realStartTime, (value: string) => {
 	    console.log('开始时间变化:', value)
@@ -406,7 +408,7 @@
 	        }
 	    }
 	})
-	
+
 	watch(realEndTime, (value: string) => {
 	    console.log('结束时间变化:', value)
 	    // 在这里添加结束时间变化时的处理逻辑
@@ -420,7 +422,7 @@
 		      } else {
 		        resumeShow.value = false
 		      }
-		
+
 		    } else if(suspendTime != '' && realStartTime.value != '' && new Date(suspendTime).getTime() >= new Date(realStartTime.value).getTime()) { // 作业中挂起
 		      if (realStartTime.value != '' && resumeTime.value != '' && new Date(resumeTime.value).getTime() < new Date(realStartTime.value).getTime()) {
 		        resumeShow.value = true
@@ -523,14 +525,14 @@
 	  realEndTime.value = value
 	  showEndTimePicker.value = false
 	}
-	
+
 	function onResumeTimeConfirm(value: string) {
 	  // 检查新的结束时间是否小于开始时间
 	  if (resumeTime.value != '' && new Date(realStartTime.value as string) > new Date(value)) {
 	    uni.showToast({ title: '结束时间不能小于开始时间', icon: 'none' })
 	    return
 	  }
-	
+
 	  resumeTime.value = value
 	  showResumeTimePicker.value = false
 	}
@@ -618,10 +620,10 @@
         // 清空选中的用户数组
         selectedUsers.value = [];
         selectedUserIds.value = [];
-        
+
         // 清空显示的用户名
         workGroupMemberName.value = '';
-        
+
         // 清空工作班成员列表
         workOrderPersonList.value = [];
     };
@@ -659,7 +661,7 @@
             });
             return false;
         }
-		
+
 		if(resumeShow.value) {
 			if(resumeTime.value == '') {
 				uni.showToast({
@@ -700,7 +702,7 @@
 				}
 			}
 		}
-		
+
 		// if (infoEntry.value == '2' && (workGroupMemberName.value == '' || selectedUsers.value.length == 0)) {
 		//     uni.showToast({
 		//         title: '请选择工作班成员',
@@ -726,7 +728,7 @@
 			isDealing.value = true
 	        // 确保附件URLs是最新的逗号分隔格式
 	        attachmentUrls.value = uploadedFiles.value.map(file => file.fileName).join(',');
-			
+
 			flowList.value = []
 			if (resumeTime.value != '' && resumeInfo.value != null && resumeTime.value != (resumeInfo.value['actionTime'] as string | null)) { //存入新的挂起结束时间
 				resumeInfo.value['actionTime'] = resumeTime.value
@@ -779,10 +781,9 @@
 	                icon: 'none'
 	            });
 	        }
-	    } catch (error: any) {
-	        console.error('结单失败:', error);
+	    } catch (error: Error) {
 	        uni.showToast({
-	            title: '结单失败',
+	            title: error.message,
 	            icon: 'none'
 	        });
 	    } finally {
@@ -831,7 +832,7 @@
 				misNo.value = (data['misNo'] as string | null) ?? ''
 				workPermitNum.value = (data['workPermitNum'] as string | null) ?? ''
 				suspendReason.value = (data['suspendReason'] as string | null) ?? ''
-				
+
 				const queryParams = {
 					misNo: misNo.value,
 				} as UTSJSONObject;
@@ -865,7 +866,7 @@
 							}
 						})
 					}
-					
+
 					flowList.value = data['workOrderFlowList'] as UTSJSONObject[]
 					if (suspendReason.value != '' && flowList.value.length > 0) {
 					  // 获取最后一个 actionType 等于 'resume' 的项
@@ -875,7 +876,7 @@
 						// 直接给 resumeTime 赋值,无需 formData
 						resumeTime.value = (lastResumeItem['actionTime'] as string | null) ?? ''
 					  }
-								
+
 					  const lastSuspendItem = flowList.value.findLast(item => (item['actionType'] as string | null) === 'to_approve') as UTSJSONObject | null
 					  if (lastSuspendItem != null) {
 						suspendInfo.value = lastSuspendItem
@@ -889,7 +890,7 @@
 					icon: 'none'
 				})
 			}
-				
+
 		} catch (e) {
 			uni.showToast({
 				title: (e as Error).message ?? '加载失败',
@@ -1007,13 +1008,13 @@
                         border-radius: 8rpx;
                         padding: 10rpx;
                     }
-					
+
 					.input-with-clear {
 						position: relative;
 						display: flex;
 						align-items: center;
 					}
-					
+
 					.select-clear {
 						position: absolute;
 						right: 20rpx;

+ 30 - 6
pages/order/detail/wbFinalize.uvue

@@ -106,12 +106,13 @@
                             <text class="form-label required">开始时间<text style="color: red;">*</text></text>
                         </view>
                         <view class="info-value">
-                            <view class="form-picker" @click="showStartTimePicker = true">
+                            <view class="form-picker" @click="infoEntry == '1' ? showStartTimePicker = false : showStartTimePicker = true">
 								<input
 								    class="input-field"
 								    placeholder="请选择开始时间"
 								    v-model="realStartTime"
 									type="none"
+									style="pointer-events: none;"
 								/>
                             </view>
                         </view>
@@ -123,12 +124,13 @@
                             <text class="form-label required">结束时间<text style="color: red;">*</text></text>
                         </view>
                         <view class="info-value">
-                            <view class="form-picker" @click="showEndTimePicker = true">
+                            <view class="form-picker" @click="infoEntry == '1' ? showEndTimePicker = false : showEndTimePicker = true">
 								<input
 								    class="input-field"
 								    placeholder="请选择结束时间"
 								    v-model="realEndTime"
 									type="none"
+									style="pointer-events: none;"
 								/>
                             </view>
                         </view>
@@ -1209,10 +1211,9 @@
 	                icon: 'none'
 	            });
 	        }
-	    } catch (error: any) {
-	        console.error('结单失败:', error);
+	    } catch (error: Error) {
 	        uni.showToast({
-	            title: '结单失败',
+	            title: error.message,
 	            icon: 'none'
 	        });
 	    } finally {
@@ -1323,7 +1324,7 @@
 									realEndTime.value = (misInfo[0]['realEndTime'] as string | null) ?? ''
 									workPermitNum.value = (misInfo[0]['workPermitNum'] as string | null) ?? ''
 									// 查询相关工作班成员
-									await listWorkPerson(misNo.value).then(response => {
+									listWorkPerson(misNo.value).then(response => {
 										const responseObj = response as UTSJSONObject
 										const rows = responseObj['rows'] as UTSJSONObject[] | null
 										workOrderPersonList.value = rows ?? []
@@ -1342,6 +1343,29 @@
 												.map(person => (person.nickName as string | null) ?? '')
 												.join(',');
 											workGroupMemberName.value = nickNames;
+											
+											workOrderPersonList.value.map(person => {
+												// 构造查询参数:username 和 nickName
+												const queryParams = {
+												  userName: person.userName, // 假设person对象有username字段
+												  nickName: person.nickName  // 假设person对象有nickName字段
+												};
+												getUserList(queryParams).then(response => {
+													const responseObj = response as UTSJSONObject
+													const rows = responseObj['rows'] as UTSJSONObject[] | null
+													if (rows == null || rows.length == 0) {
+														let msg = "已匹配到MIS工单,但工作班成员'" + person.nickName + "'在系统中不存在,系统无法自动结单,请检查"
+														if (person.isLeader == 1) {
+														  msg = "已匹配到MIS工单,但工作负责人'" + person.nickName + "'在系统中不存在,系统无法自动结单,请检查"
+														}
+														uni.showToast({
+															title: msg,
+															icon: 'none',
+															duration: 2000 // 自定义显示时间,单位ms
+														});
+													}
+												});
+											})
 										}
 									})
 								}

+ 40 - 17
pages/order/detail/wxFinalize.uvue

@@ -118,7 +118,7 @@
                             <text class="form-label required">开始时间<text style="color: red;">*</text></text>
                         </view>
                         <view class="info-value">
-                            <view class="form-picker" @click="showStartTimePicker = true">
+                            <view class="form-picker" @click="infoEntry == '1' ? showStartTimePicker = false : showStartTimePicker = true">
 								<input
 								    class="input-field"
 								    placeholder="请选择开始时间"
@@ -136,13 +136,13 @@
                             <text class="form-label required">结束时间<text style="color: red;">*</text></text>
                         </view>
                         <view class="info-value">
-                            <view class="form-picker" @click="showEndTimePicker = true">
+                            <view class="form-picker" @click="infoEntry == '1' ? showEndTimePicker = false : showEndTimePicker = true">
 								<input
 								    class="input-field"
 								    placeholder="请选择结束时间"
 								    v-model="realEndTime"
 									type="none"
-
+									style="pointer-events: none;"
 								/>
 								<!-- <text class="input-field">
 									{{ realEndTime != '' ? realEndTime : '请选择结束时间' }}
@@ -1348,17 +1348,16 @@
 	            setTimeout(() => {
 	                uni.navigateBack();
 	            }, 800);
-	        } else {
-	            const msg = resultObj['msg'] as string;
-	            uni.showToast({
-	                title: msg.length > 0 ? msg : '结单失败',
-	                icon: 'none'
-	            });
-	        }
-	    } catch (error: any) {
-	        console.error('结单失败:', error);
-	        uni.showToast({
-	            title: '结单失败',
+          } else {
+              const msg = resultObj['msg'] as string;
+              uni.showToast({
+                  title: msg.length > 0 ? msg : '结单失败',
+                  icon: 'none'
+              });
+          }
+		} catch (error: Error) {
+			uni.showToast({
+	            title: error.message,
 	            icon: 'none'
 	        });
 	    } finally {
@@ -1430,7 +1429,7 @@
 					}
 					uploadedFiles.value = fileArr
 				}
-				pauseTime.value = (data['pauseTime'] as string | null) ?? ''
+				pauseTime.value = (data['occurTime'] as string | null) ?? ''
 				restartTime.value = (data['restartTime'] as string | null) ?? ''
 
 				if(pauseTime.value != '' && restartTime.value != '') {
@@ -1451,7 +1450,7 @@
 							// 有工作票号提示
 							const workPermitNum2 = misInfo[0]['workPermitNum'] as string | null
 							const misNo2 = misInfo[0]['misNo'] as string | null
-
+							
 							if (workPermitNum2 != null && workPermitNum2.length > 0) {
 
 								const response = await getOrderList(1, 10, misNo2 ?? '', '')
@@ -1471,7 +1470,7 @@
 									realEndTime.value = (misInfo[0]['realEndTime'] as string | null) ?? ''
 									workPermitNum.value = (misInfo[0]['workPermitNum'] as string | null) ?? ''
 									// 查询相关工作班成员
-									await listWorkPerson(misNo.value).then(response => {
+									listWorkPerson(misNo.value).then(response => {
 										const responseObj = response as UTSJSONObject
 										const rows = responseObj['rows'] as UTSJSONObject[] | null
 										repairOrderPersonList.value = rows ?? []
@@ -1490,6 +1489,30 @@
 												.map(person => (person.nickName as string | null) ?? '')
 												.join(',');
 											workGroupMemberName.value = nickNames;
+											
+											repairOrderPersonList.value.map(person => {
+												// 构造查询参数:username 和 nickName
+												const queryParams = {
+												  userName: person.userName, // 假设person对象有username字段
+												  nickName: person.nickName  // 假设person对象有nickName字段
+												};
+												getUserList(queryParams).then(response => {
+													const responseObj = response as UTSJSONObject
+													const rows = responseObj['rows'] as UTSJSONObject[] | null
+													if (rows == null || rows.length == 0) {
+														let msg = "已匹配到MIS工单,但工作班成员'" + person.nickName + "'在系统中不存在,系统无法自动结单,请检查"
+														if (person.isLeader == 1) {
+														  msg = "已匹配到MIS工单,但工作负责人'" + person.nickName + "'在系统中不存在,系统无法自动结单,请检查"
+														}
+														uni.showToast({
+															title: msg,
+															icon: 'none',
+															duration: 2000 // 自定义显示时间,单位ms
+														});
+													}
+												});
+											})
+											
 										}
 									})
 								}

+ 2 - 2
pages/order/index.uvue

@@ -643,13 +643,13 @@ const canHandleOrder = (item: any | null, buttonType: string | ''): boolean => {
 			permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:restart'] : ['gxt:repairOrder:restart']
 		}
 	} else if(orderItem.workOrderStatus == 'to_finish') {
-		if(buttonType != '' && buttonType == "suspend" && (orderItem.teamLeaderId == parseInt(userId.value) || roles.value.includes("管理员"))) {
+		if(buttonType != '' && buttonType == "suspend" ) {
 			// 挂起
 			permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:suspend'] : ['gxt:repairOrder:suspend']
 		} else if(buttonType != '' && buttonType == "return" && orderItem.orderType == 1 && (orderItem.teamLeaderId == parseInt(userId.value) || roles.value.includes("管理员"))) {
 			// 退回
 			permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:return'] : ['gxt:repairOrder:return']
-		} else if(buttonType != '' && buttonType == "finalize" && orderItem.orderType == 1 && (orderItem.teamLeaderId == parseInt(userId.value) || roles.value.includes("管理员"))) {
+		} else if(buttonType != '' && buttonType == "finalize" && orderItem.orderType == 1) {
 			// 复启
 			permit = orderItem.orderType == 2 ? ['gxt:maintenance:order:complete'] : ['gxt:repairOrder:finalize']
 		  // } else if(buttonType != '' && buttonType == "complete" && (orderItem.teamLeaderId == parseInt(userId.value) || roles.value.includes("管理员"))) {