Browse Source

提前选人工单修改

HD_wangm 1 week ago
parent
commit
3796b2ea78

+ 4 - 1
pages/order/detail/acceptIndex.uvue

@@ -107,7 +107,7 @@
 			</view>
 
 			<!-- 自定义选择器弹窗 -->
-			<view v-if="showLeaderPicker" class="picker-modal">
+			<view v-if="showLeaderPicker && overStopStatus != 2" class="picker-modal">
 			    <view class="modal-mask" @click="showLeaderPicker = false"></view>
 			    <view class="modal-content">
 			        <view class="modal-header">
@@ -224,6 +224,7 @@
 	const showLeaderPicker = ref<boolean>(false)
 	const teamLeaderList = ref<UserInfo[]>([])
 	const teamAllLeaderList = ref<UserInfo[]>([])
+	const overStopStatus = ref<Number | null>(null)
 
 	// 获取负责人列表(使用用户列表接口)
 	const loadTeamLeaderList = async (): Promise<void> => {
@@ -484,6 +485,8 @@
                 }
                 detailData.value = orderDtail
 				faultDesc.value = (data['faultDesc'] as string | null) ?? ''
+				selectedTeamLeaderName.value = (data['teamLeaderName'] as string | null) ?? ''
+				overStopStatus.value = (data['overStopStatus'] as Number | null) ?? null
 
 				// 如果工单数据中已有负责人信息,设置到输入框中
 				if (orderDtail.teamLeaderName != null && orderDtail.teamLeaderName.length > 0) {

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

@@ -85,7 +85,7 @@
 			        </view>
 					<view class="info-item">
 						<view class="info-label">
-							<text class="form-label required">损失电量(kWh)<text style="color: red;" v-if="orderType == '1'">*</text></text>
+							<text class="form-label required">损失电量(kWh)<!-- <text style="color: red;" v-if="orderType == '1'">*</text> --></text>
 						</view>
 
 						<view class="info-value">
@@ -374,7 +374,7 @@
 			if (realStartTimeStamp > 0) { // 开工时间戳>0表示非空且有效
 				if (pauseTimeStamp < realStartTimeStamp) {
 					uni.showToast({
-						title: '停机不能早于开始时间',
+						title: '停机时间不能早于开始时间',
 						icon: 'none'
 					});
 					return;
@@ -393,13 +393,13 @@
 			}
 		}
 
-		if (orderType.value == '1' && lostPower.value.trim() === '') {
-			uni.showToast({
-				title: '请输入损失电量',
-				icon: 'none'
-			})
-			return
-		}
+		// if (orderType.value == '1' && lostPower.value.trim() === '') {
+		// 	uni.showToast({
+		// 		title: '请输入损失电量',
+		// 		icon: 'none'
+		// 	})
+		// 	return
+		// }
 		
 		if(lostPower.value.trim() != '') {
 			// 验证损失电量必须大于0

+ 106 - 11
pages/order/detail/wxFinalize.uvue

@@ -238,7 +238,7 @@
 							        placeholder="请选择工作负责人"
 							        v-model="teamLeaderName"
 							        @click="showLeaderPicker = true"
-									:disabled="infoEntry == '1'"
+									:disabled="infoEntry == '1' || overStopStatus == 2"
 							    />
 							</view>
                         </view>
@@ -256,7 +256,7 @@
                                     placeholder="请选择工作班成员"
                                     v-model="workGroupMemberName"
                                     @click="showUserSelect = true"
-                                    :disabled="infoEntry == '1'"
+                                    :disabled="infoEntry == '1' || overStopStatus == 2"
                                 />
                                 <!-- <text class="select-users-count" v-if="selectedUserIds.length > 0" :style="{ marginRight: selectedUserIds.length > 0 ? '60rpx' : '0' }">({{ selectedUserIds.length }}人)</text> -->
                                 <text class="select-clear" v-if="selectedUserIds.length > 0" @click="clearSelectedUsers">×</text>
@@ -341,7 +341,7 @@
 			</l-popup>
 
             <!-- 人员选择弹窗 -->
-            <view v-if="showUserSelect" class="picker-modal">
+            <view v-if="showUserSelect && overStopStatus != 2" class="picker-modal">
                 <view class="modal-mask" @click="showUserSelect = false"></view>
                 <view class="modal-content">
                     <view class="modal-header">
@@ -440,7 +440,7 @@
             </view>
 
 			<!-- 工作负责人弹窗 -->
-			<view v-if="showLeaderPicker" class="picker-modal">
+			<view v-if="showLeaderPicker && overStopStatus != 2" class="picker-modal">
 			    <view class="modal-mask" @click="showLeaderPicker = false"></view>
 			    <view class="modal-content">
 			        <view class="modal-header">
@@ -535,6 +535,10 @@
 	const resumeShow = ref<boolean>(false)
 	const resumeTime = ref<string>('') // 挂起结束时间
 	const showResumeTimePicker = ref<boolean>(false)
+	const oldWorkGroupMemberName = ref<string>('') // 旧工作班成员
+	const oldRepairOrderPersonList = ref<UTSJSONObject[]>([]) // 旧工作班成员数组
+	const overStopStatus = ref<Number | null>(null)
+	const oldTeamLeaderName = ref<string>('')
 
 	// 添加字典加载状态
 	const dictLoaded = ref<boolean>(false)
@@ -818,7 +822,7 @@
         // 兼容 radio-group 事件:detail 可能不存在,直接取 e.value
         const val = e.detail?.value as string | null
 		infoEntry.value = val ?? ''
-        if (infoEntry.value == '1') {
+        if (infoEntry.value == '1' && overStopStatus.value !=2) {
             // 当选择MIS工单时,清空手工录入的字段
             workPermitNum.value = '';
             realStartTime.value = '';
@@ -932,7 +936,42 @@
 			const responseObj = response as UTSJSONObject
 			const rows = responseObj['rows'] as UTSJSONObject[] | null
 			repairOrderPersonList.value = rows ?? []
-			if (rows != null && rows.length > 0) {
+			if (rows != null && overStopStatus.value ==2) {
+				let hasDifference = false
+				const newPersonList = rows
+				if (oldRepairOrderPersonList.value.length === 0) {
+				  // 旧列表为空,新列表不为空,存在差异
+				  hasDifference = true
+				} else if (newPersonList.length !== oldRepairOrderPersonList.value.length) {
+				  // 列表长度不一致,存在差异
+				  hasDifference = true
+				} else {
+				  // 比较每个人员的 nickName
+				  for (let newPerson of newPersonList) {
+					const found = oldRepairOrderPersonList.value.some(oldPerson =>
+						newPerson.nickName === oldPerson.nickName
+					)
+					if (!found) {
+					  hasDifference = true
+					  break
+					}
+				  }
+				}
+	
+				// 如果存在差异,提醒用户但不改变当前 repairOrderPersonList
+				if (hasDifference) {
+				  uni.showModal({
+				    title: '提示',
+				    content: 'MIS 工单人员列表与当前工单人员列表不一致!',
+				    showCancel: false, // 只显示确定按钮
+				    confirmText: '确定',
+				    confirmColor: '#007aff', // 自定义按钮颜色,匹配你的UI风格
+				    success: (res) => {
+				    }
+				  });
+				}
+			}
+			if (rows != null && rows.length > 0 && overStopStatus.value != 2) {
 				// 查找 isLeader 等于 1 的负责人(优先获取第一个符合条件的,贴合常规单负责人场景)
 				const leaderPerson = rows.find(person => person.isLeader == 1);
 				if(leaderPerson != null) {
@@ -1485,6 +1524,12 @@
 				faultBarcode.value = (data['faultBarcode'] as string | null) ?? ''
 				faultDesc.value = (data['faultDesc'] as string | null) ?? ''
 				suspendReason.value = (data['suspendReason'] as string | null) ?? ''
+				workGroupMemberName.value = (data['workGroupMemberName'] as string | null) ?? ''
+				oldWorkGroupMemberName.value = (data['workGroupMemberName'] as string | null) ?? '' // 旧工作班成员
+				oldRepairOrderPersonList.value = (data['repairOrderPersonList'] as UTSJSONObject[] | null) ?? [] // 旧工作班成员数组
+				overStopStatus.value = (data['overStopStatus'] as Number | null) ?? null
+				oldTeamLeaderName.value = (data['teamLeaderName'] as string | null) ?? ''
+				
 				// 初始化附件数据
 				const attachmentUrlsFromServer = (data['attachmentUrls'] as string | null) ?? ''
 				if (attachmentUrlsFromServer.length > 0) {
@@ -1559,13 +1604,62 @@
 										if (rows != null && rows.length > 0) {
 											// 查询负责人信息并回填
 											for (const person of repairOrderPersonList.value) {
-											  // 严格判断isLeader为1(兼容数字/字符串类型)
-											  if (person.isLeader == 1) {
-												teamLeaderName.value = (person.nickName as string | null) ?? '';
-												teamLeaderId.value = (person.userId as Number | null) ?? null;
-												break; // 找到后立即停止循环
+												// 严格判断isLeader为1(兼容数字/字符串类型)
+												if (person.isLeader == 1) {
+													if(overStopStatus.value == 2 && oldTeamLeaderName.value != person.nickName) {
+														uni.showModal({
+														  title: '提示',
+														  content: 'MIS工单工作负责人与手动选择的工作负责人不一致',
+														  showCancel: false, // 只显示确定按钮
+														  confirmText: '确定',
+														  confirmColor: '#007aff',
+														  success: (res) => {
+														  }
+														});
+														break;
+													} else {
+														teamLeaderName.value = (person.nickName as string | null) ?? '';
+														teamLeaderId.value = (person.userId as Number | null) ?? null;
+														break; // 找到后立即停止循环
+													}
 											  }
 											}
+											 // 当 overStopStatus == 2 时,比对旧的 repairOrderPersonList 和新的 MIS 工单获取的 repairOrderPersonList
+											if (overStopStatus.value == 2) {
+												let hasDifference = false
+												const newPersonList = repairOrderPersonList.value
+												if (oldRepairOrderPersonList.value.length === 0) {
+												  // 旧列表为空,新列表不为空,存在差异
+												  hasDifference = true
+												} else if (newPersonList.length !== oldRepairOrderPersonList.value.length) {
+												  // 列表长度不一致,存在差异
+												  hasDifference = true
+												} else {
+												// 比较每个人员的 nickName
+												for (let newPerson of newPersonList) {
+													const found = oldRepairOrderPersonList.value.some(oldPerson =>
+														newPerson.nickName === oldPerson.nickName
+													)
+													if (!found) {
+													  hasDifference = true
+													  break
+													}
+												}
+											}
+						
+											// 如果存在差异,提醒用户但不改变当前 repairOrderPersonList
+											if (hasDifference) {
+												uni.showModal({
+												  title: '提示',
+												  content: 'MIS工单人员列表与当前工单人员列表不一致!',
+												  showCancel: false, // 只显示确定按钮
+												  confirmText: '确定',
+												  confirmColor: '#007aff',
+												  success: (res) => {
+												  }
+												});
+											}
+										} else {
 											const nickNames = rows
 												.filter(person => person.isLeader != 1)
 												.map(person => (person.nickName as string | null) ?? '')
@@ -1605,6 +1699,7 @@
 											})
 
 										}
+										}
 									})
 								}