Bläddra i källkod

📦 自查表审核回退

快乐的梦鱼 1 månad sedan
förälder
incheckning
0cbab3f192

+ 6 - 0
src/api/collect/AssessmentContent.ts

@@ -549,6 +549,10 @@ export interface IchCheckReviewPayload {
   provincePoints?: number;
   /** 0=草稿,1=已自评,2=项目保护单位审核完成,3=县(区)文旅部门审核完成,4=设区市文旅部门/省非遗中心审核完成,5=省文化和旅游厅审核完成 */
   progress: number;
+  /** 退回状态: 0=无,1=自评阶段退回,2=项目保护单位退回,3=县(区)文旅部门退回,4=设区市文旅部门/省非遗中心退回,5=省文化和旅游厅退回 */
+  rejectType?: number;
+  /** 退回原因 */
+  rejectReason?: string;
 }
 
 /** 证明材料修改与新增请求体(POST /ich/check/saveAnnex) */
@@ -771,6 +775,8 @@ export class AssessmentContentApi extends AppServerRequestModule<DataModel> {
       province: payload.province,
       province_points: payload.provincePoints,
       progress: payload.progress,
+      reject_type: payload.rejectType,
+      reject_reason: payload.rejectReason,
     });
   }
 

+ 72 - 0
src/pages/collect/assessment/evaluation-form-review.vue

@@ -60,6 +60,15 @@
               >
                 提交审核
               </Button>
+              <Button
+                type="danger"
+                block
+                :loading="rejectLoading"
+                :touchable="canSubmitReview"
+                @click="submitReject"
+              >
+                回退
+              </Button>
             </FlexCol>
           </FlexCol>
         </template>
@@ -109,6 +118,7 @@ const currentFormCheckItems = ref<SelfAssessmentCheckItemAnswer[]>([]);
 const checkItemList = ref<CheckItemInfo[]>([]);
 
 const submitLoading = ref(false);
+const rejectLoading = ref(false);
 const reviewOpinion = ref<number | null>(null);
 const reviewPoints = ref<number | null>(null);
 
@@ -254,6 +264,68 @@ watch(reviewProgress, () => {
     applyPrefillFromDetail(f as SelfAssessmentDetail);
 });
 
+/** 回退后 progress:退回至上一环节 */
+const rejectTargetProgress = computed(() => Math.max(1, reviewProgress.value - 1));
+
+function promptRejectReason() {
+  return new Promise<string | null>((resolve) => {
+    uni.showModal({
+      title: '回退自查评估表',
+      editable: true,
+      placeholderText: '请输入回退原因(必填)',
+      content: '',
+      confirmText: '确认回退',
+      cancelText: '取消',
+      success: (res) => {
+        if (!res.confirm) {
+          resolve(null);
+          return;
+        }
+        const reason = (res.content ?? '').trim();
+        if (!reason) {
+          toast('请输入回退原因');
+          resolve(null);
+          return;
+        }
+        resolve(reason);
+      },
+      fail: () => resolve(null),
+    });
+  });
+}
+
+async function submitReject() {
+  const f = currentForm.value;
+  if (!f?.id) {
+    toast('缺少自查表 ID');
+    return;
+  }
+  if (!canSubmitReview.value) {
+    toast('当前账号用户组无权回退');
+    return;
+  }
+  const rejectReason = await promptRejectReason();
+  if (rejectReason === null)
+    return;
+  const t = reviewProgress.value;
+  rejectLoading.value = true;
+  try {
+    await AssessmentContentApi.reviewSelfAssessment({
+      id: f.id,
+      progress: rejectTargetProgress.value,
+      rejectType: t,
+      rejectReason,
+    });
+    toast('已回退');
+    await waitTimeOut(400);
+    uni.navigateBack();
+  } catch (e) {
+    alert({ title: '回退失败', content: formatError(e) });
+  } finally {
+    rejectLoading.value = false;
+  }
+}
+
 async function submitReview() {
   const f = currentForm.value;
   if (!f?.id) {