|
|
@@ -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>
|