Bladeren bron

APP工分复评优化,修改理由逻辑修改。工分查看展示修改理由

ouyj 2 maanden geleden
bovenliggende
commit
a07f7de83c
2 gewijzigde bestanden met toevoegingen van 143 en 31 verwijderingen
  1. 25 2
      pages/score/detail/index.uvue
  2. 118 29
      pages/score/detail/reEvaluate.uvue

+ 25 - 2
pages/score/detail/index.uvue

@@ -59,6 +59,14 @@
 					    <text class="info-label">故障描述</text>
 					    <text class="info-value">{{ detailData.faultDesc ?? '' }}</text>
 					</view>
+					<view class="info-item" v-if="detailData.orderType == 2">
+					    <text class="info-label">分项完成系数</text>
+					    <text class="info-value">{{ detailData.itemCompletionFactor ?? '' }}</text>
+					</view>
+					<view class="info-item" v-if="detailData.orderType == 2">
+					    <text class="info-label">分项完成系数和</text>
+					    <text class="info-value">{{ detailData.itemCompletionFactorSum ?? '' }}</text>
+					</view>
                 </view>
             </view>
 
@@ -98,6 +106,18 @@
 			      </view>
 			  </view>
 			
+			<!-- 修改理由 -->
+			<view class="info-section" v-if="detailData.modifyReason != null && detailData.modifyReason != ''">
+			     <view class="section-title">
+			         <text class="section-title-text">修改理由</text>
+			     </view>
+			     <view class="info-card">
+			         <view class="summary-content">
+			             <text class="summary-text">{{ detailData.modifyReason ?? '' }}</text>
+			         </view>
+			     </view>
+			 </view>
+			 
             <!-- 得分明细 -->
             <view class="info-section">
                 <view class="section-title">
@@ -188,6 +208,7 @@
 		faultCode: string | null
 		faultBarcode: string | null
 		faultDesc: string | null
+		modifyReason: string | null     // 修改理由
     }
     
     const detailData = reactive<DetailDataType>({
@@ -210,7 +231,8 @@
         scorePersonList: [],
 		faultCode: null,
 		faultBarcode: null,
-		faultDesc: null
+		faultDesc: null,
+		modifyReason: null     // 修改理由
     })
 
     const loading = ref<boolean>(false) 
@@ -481,7 +503,8 @@
 				detailData.faultCode = data.get('faultCode') as string | null
 				detailData.faultBarcode = data.get('faultBarcode') as string | null
 				detailData.faultDesc = data.get('faultDesc') as string | null
-                
+                detailData.modifyReason = data.get('modifyReason') as string | null
+				
                 if (scorePersonList != null) {
                     const processedList: ScorePersonItem[] = []
                     for (let i = 0; i < scorePersonList.length; i++) {

+ 118 - 29
pages/score/detail/reEvaluate.uvue

@@ -225,6 +225,9 @@ const hasExtraWorkFlag = ref<boolean>(false)
 const showReturnReason = ref<boolean>(false)
 // 显示修改理由
 const showModifyReason = ref<boolean>(false)
+
+// 检查是否存在复评分数与自评分数不同的情况
+const hasDifferentReviewAndSelfScore = ref<boolean>(false)
 // 显示反馈理由
 const showFeedbackReason = ref<boolean>(false)
 
@@ -325,6 +328,48 @@ watch(reEvaluationForm, (newForm: ReEvaluationFormData) => {
   hasReturnReason.value = newForm.scoreReturnReason != null && !isWhitespaceOnly(newForm.scoreReturnReason as string);
 }, { deep: true })
 
+// 检查是否存在复评分数与自评分数不同的情况
+function checkDifferentReviewAndSelfScore(): boolean {
+  const scorePersonList = reEvaluationForm.value.scorePersonList as UTSJSONObject[]
+  if (scorePersonList == null || scorePersonList.length == 0) {
+    return false;
+  }
+
+  for (let i = 0; i < scorePersonList.length; i++) {
+    const person = scorePersonList[i]
+    const reviewScore = person.get('reviewScore')
+    const selfScore = person.get('selfScore')
+    
+    // 如果复评分数或自评分数为空,则跳过比较
+    if (reviewScore == null || selfScore == null || reviewScore == '' || selfScore == '') {
+      continue;
+    }
+    
+    // 统一转换为数值进行比较
+    let reviewScoreNum = 0;
+    let selfScoreNum = 0;
+    
+    if (typeof reviewScore == 'number') {
+      reviewScoreNum = reviewScore as number;
+    } else {
+      reviewScoreNum = parseFloat(reviewScore as string);
+    }
+    
+    if (typeof selfScore == 'number') {
+      selfScoreNum = selfScore as number;
+    } else {
+      selfScoreNum = parseFloat(selfScore as string);
+    }
+    
+    // 比较数值是否不同(考虑浮点数精度问题)
+    if (Math.abs(reviewScoreNum - selfScoreNum) > 0.001) {
+      return true;
+    }
+  }
+  
+  return false;
+}
+
 // 获取已复评总分
 function getReEvaluatedTotalScore(): number {
   const scorePersonList = reEvaluationForm.value.scorePersonList as UTSJSONObject[]
@@ -952,26 +997,35 @@ function validateForm(): any {
       result.set('message', '修改了分项完成系数,请填写修改理由');
       return result;
   }
+  
+  // 检查是否存在复评分数与自评分数不同但未填写修改理由的情况
+  if (checkDifferentReviewAndSelfScore() && 
+      (reEvaluationForm.value.modifyReason == null || isWhitespaceOnly(reEvaluationForm.value.modifyReason as string))) {
+      const result = new UTSJSONObject();
+      result.set('valid', false);
+      result.set('message', '复评分数与自评分数不同,请填写修改理由');
+      return result;
+  }
 
   // 验证评分规则
   let scoringValidation: UTSJSONObject;
-  try {
-    scoringValidation = validateScoringRules() as UTSJSONObject;
-  } catch (error: any) {
-    console.error('评分规则验证过程中出现异常:', error);
-    const result = new UTSJSONObject();
-    result.set('valid', false);
-    result.set('message', '评分规则验证失败');
-    return result;
-  }
-  if (!(scoringValidation.get('valid') as boolean)) {
-    const result = new UTSJSONObject();
-    result.set('valid', false);
-    result.set('message', scoringValidation.get('message') as string);
-    return result;
-  }
-  
-  const result = new UTSJSONObject();
+	try {
+	  scoringValidation = validateScoringRules() as UTSJSONObject;
+	} catch (error: any) {
+	  console.error('评分规则验证过程中出现异常:', error);
+	  const result = new UTSJSONObject();
+	  result.set('valid', false);
+	  result.set('message', '评分规则验证失败');
+	  return result;
+	}
+	if (!(scoringValidation.get('valid') as boolean)) {
+	  const result = new UTSJSONObject();
+	  result.set('valid', false);
+	  result.set('message', scoringValidation.get('message') as string);
+	  return result;
+	}
+
+	const result = new UTSJSONObject();
   result.set('valid', true);
   result.set('message', '');
   return result;
@@ -1173,17 +1227,23 @@ async function loadOrderDetail() {
       // 根据工单类型和数据设置显示控制
       // 如果工单有反馈理由,则显示反馈理由区域
      showFeedbackReason.value = formData.feedbackReason != null && !isWhitespaceOnly(formData.feedbackReason as string);
+
+      // 检查是否存在复评分数与自评分数不同的情况
+      hasDifferentReviewAndSelfScore.value = checkDifferentReviewAndSelfScore();
       
-      // 如果工单的初始值与当前值不同,显示修改理由区域
-      if (orderType.value == '1' && formData.maintenanceType != formData.initialMaintenanceType) {
-        showModifyReason.value = true;
-      } else if (orderType.value == '2' && formData.itemCompletionFactor != formData.initialItemCompletionFactor) {
+      // 如果存在复评分数与自评分数不同,或者工单的初始值与当前值不同,显示修改理由区域
+      // 只有两个条件都不存在时才隐藏修改理由
+      if (hasDifferentReviewAndSelfScore.value ||
+          (orderType.value == '1' && reEvaluationForm.value.maintenanceType != reEvaluationForm.value.initialMaintenanceType) ||
+          (orderType.value == '2' && reEvaluationForm.value.itemCompletionFactor != reEvaluationForm.value.initialItemCompletionFactor)) {
         showModifyReason.value = true;
+      } else {
+        showModifyReason.value = false;
       }
       
       // 如果工单已经有退回理由(来自后端),则显示退回理由区域
       showReturnReason.value = formData.scoreReturnReason != null && !isWhitespaceOnly(formData.scoreReturnReason as string);
-      
+
       // 初始化已复评总分
       updateReEvaluatedTotalScore()
     } else {
@@ -1257,7 +1317,11 @@ function onReturnReasonInput(e: UniInputEvent) {
 
 // 修改理由输入处理
 function onModifyReasonInput(e: UniInputEvent) {
-  const value = e.detail?.value as string
+  let value = e.detail?.value as string
+  // 限制输入长度在200以内
+  if (value != null && value.length > 200) {
+    value = value.substring(0, 200)
+  }
   reEvaluationForm.value.modifyReason = value
   
   // 当用户输入修改理由时,更新显示控制
@@ -1316,8 +1380,14 @@ function formatItemCompletionFactor() {
     tempItemCompletionFactorInput.value = '';
   }
   
-  // 检查是否需要显示修改理由
-  if (finalValue != reEvaluationForm.value.initialItemCompletionFactor) {
+  // 检查是否存在复评分数与自评分数不同的情况
+  hasDifferentReviewAndSelfScore.value = checkDifferentReviewAndSelfScore();
+  
+  // 如果存在复评分数与自评分数不同,或者修改了分项完成系数,显示修改理由
+  // 只有两个条件都不存在时才隐藏修改理由
+  if (hasDifferentReviewAndSelfScore.value || 
+      (reEvaluationForm.value.orderType == '2' && 
+       reEvaluationForm.value.itemCompletionFactor != reEvaluationForm.value.initialItemCompletionFactor)) {
     showModifyReason.value = true;
   } else {
     showModifyReason.value = false;
@@ -1351,11 +1421,16 @@ function onItemCompletionFactorInput(e: UniInputEvent) {
         reEvaluationForm.value.itemCompletionFactor = numValue > 1 ? 1 : 0;
       } 
       
-      // 检查是否修改了分项完成系数
-      if (reEvaluationForm.value.itemCompletionFactor != reEvaluationForm.value.initialItemCompletionFactor) {
+      // 检查是否存在复评分数与自评分数不同的情况
+      hasDifferentReviewAndSelfScore.value = checkDifferentReviewAndSelfScore();
+      
+      // 如果存在复评分数与自评分数不同,或者修改了分项完成系数,显示修改理由
+      // 只有两个条件都不存在时才隐藏修改理由
+      if (hasDifferentReviewAndSelfScore.value || 
+          (reEvaluationForm.value.orderType == '2' && 
+           reEvaluationForm.value.itemCompletionFactor != reEvaluationForm.value.initialItemCompletionFactor)) {
         showModifyReason.value = true;
       } else {
-        // 如果值等于初始值,则隐藏修改理由
         showModifyReason.value = false;
       } 
       
@@ -1483,6 +1558,20 @@ function formatScoreInput(index: number, field: string) {
 function onScoreChange() {
   updateTotalScores()
   updateReEvaluatedTotalScore() // 更新已复评总分显示
+  
+  // 检查是否需要显示修改理由
+  // 检查是否存在复评分数与自评分数不同的情况
+  hasDifferentReviewAndSelfScore.value = checkDifferentReviewAndSelfScore();
+  
+  // 如果存在复评分数与自评分数不同,或者修改了分项完成系数,显示修改理由
+  // 只有两个条件都不存在时才隐藏修改理由
+  if (hasDifferentReviewAndSelfScore.value || 
+      (reEvaluationForm.value.orderType == '2' && 
+       reEvaluationForm.value.itemCompletionFactor != reEvaluationForm.value.initialItemCompletionFactor)) {
+    showModifyReason.value = true;
+  } else {
+    showModifyReason.value = false;
+  }
 }
 
 // 返回按钮事件
@@ -2070,4 +2159,4 @@ async function submitReEvaluationForm(): Promise<void> {
   font-weight: bold;
   color: #333;
 }
-</style>
+</style>