From 368c72d678ec6a1f5b60f109911d190e9c2a2809 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期五, 31 十月 2025 17:30:24 +0800
Subject: [PATCH] fix: 四流

---
 src/views/MaterialReview/components/materialReviewAudit.ts      |    9 
 src/views/MaterialReview/MaterialReReviewList.vue               |   54 +++-
 src/constants/reward.ts                                         |    8 
 src/services/api/typings.d.ts                                   |   15 +
 src/router/index.ts                                             |   12 +
 src/views/MaterialReview/MaterialReviewDetail.vue               |   44 +++-
 src/views/MaterialReview/MaterialReReviewAudit.vue              |   50 +++++
 src/views/MaterialReview/MaterialReviewAudit.vue                |  183 -----------------
 src/views/MaterialReview/components/MaterialReviewAuditView.vue |  197 +++++++++++++++++++
 9 files changed, 370 insertions(+), 202 deletions(-)

diff --git a/src/constants/reward.ts b/src/constants/reward.ts
index 5535c7a..d637c28 100644
--- a/src/constants/reward.ts
+++ b/src/constants/reward.ts
@@ -1,6 +1,8 @@
 import { Colors } from './enum';
 
 export enum BountyCheckStatusEnum {
+  /**宸叉挙鍥� */
+  Redoed = -20,
   /**
    * 鏈彁浜�
    */
@@ -24,6 +26,12 @@
   [BountyCheckStatusEnum.CheckPassed]: '瀹℃牳閫氳繃',
   [BountyCheckStatusEnum.CheckReject]: '瀹℃牳鏈�氳繃',
 };
+
+export const BountyCheckStatusEnumTextForDisplay = {
+  [BountyCheckStatusEnum.Redoed]: '宸叉挙鍥�',
+  ...BountyCheckStatusEnumText,
+};
+
 export const BountyCheckStatusEnumTextForAudit = {
   [BountyCheckStatusEnum.CheckPassed]: '瀹℃牳閫氳繃',
   [BountyCheckStatusEnum.CheckReject]: '椹冲洖',
diff --git a/src/router/index.ts b/src/router/index.ts
index 6a610e0..89c9087 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -195,6 +195,18 @@
           icon: 'home',
         },
       },
+      {
+        path: '/MaterialReReviewAudit/:id',
+        name: 'MaterialReReviewAudit',
+        hidden: true,
+        component: () => import('@/views/MaterialReview/MaterialReReviewAudit.vue'),
+        meta: {
+          rank: 10021,
+          title: '澶嶅',
+          // rootMenu: true,
+          icon: 'home',
+        },
+      },
     ],
   },
 
diff --git a/src/services/api/typings.d.ts b/src/services/api/typings.d.ts
index 54b580e..b284341 100644
--- a/src/services/api/typings.d.ts
+++ b/src/services/api/typings.d.ts
@@ -2925,7 +2925,7 @@
     userId?: string;
   }
 
-  type BountyCheckStatusEnum = 10 | 20 | 30 | -10;
+  type BountyCheckStatusEnum = 10 | 20 | 30 | -20 | -10;
 
   interface BuildRewardStatisticsInput {
     /** 寮�濮嬬粺璁℃湀浠� */
@@ -9119,6 +9119,11 @@
     settleStatus?: SettleStatusEnum;
     incomeStatus?: IncomeStatusEnum;
     financeStatus?: FinanceStatusEnum;
+    /** 澶栭儴澶嶅鏍歌捣濮嬫棩鏈� */
+    outReCheckTimeBegin?: string;
+    /** 澶栭儴澶嶅鏍哥粨鏉熸棩鏈� */
+    outReCheckTimeEnd?: string;
+    outReCheckStatus?: BountyCheckStatusEnum;
   }
 
   interface GetParkBountyApplyListOutput {
@@ -9180,10 +9185,15 @@
     inCheckAuditOperator?: string;
     /** 澶栭儴瀹℃牳浜� */
     outCheckAuditOperator?: string;
+    /** 澶栭儴澶嶅鏍镐汉 */
+    outReCheckAuditOperator?: string;
     /** 骞冲彴鎷ㄤ粯鍏ヨ处璺熻储鏀挎嫧浠樺叆璐︽搷浣滀汉 */
     incomeAndFinanceIncomeOperator?: string;
     /** 骞冲彴鎷ㄤ粯鐧昏璺熻储鏀挎嫧浠樼櫥璁版搷浣滀汉 */
     settleAndFinanceOperator?: string;
+    outReCheckStatus?: BountyCheckStatusEnum;
+    /** 鏀垮姟绔瀹℃椂闂� */
+    outReCheckTime?: string;
   }
 
   interface GetParkBountyApplyListOutputPageOutput {
@@ -16410,6 +16420,9 @@
     collectCountListFiles?: CustomerUploadMonthApplyFileTypeDto[];
     /** 鎬荤殑棰濆琛ュ厖鏉愭枡 */
     extraListFiles?: CustomerUploadMonthApplyFileTypeDto[];
+    outReCheckStatus?: BountyCheckStatusEnum;
+    /** 鏀垮姟绔瀹″娉� */
+    outReCheckRemark?: string;
   }
 
   interface OutcheckParkBountyApplyInput {
diff --git a/src/views/MaterialReview/MaterialReReviewAudit.vue b/src/views/MaterialReview/MaterialReReviewAudit.vue
new file mode 100644
index 0000000..fa7a81c
--- /dev/null
+++ b/src/views/MaterialReview/MaterialReReviewAudit.vue
@@ -0,0 +1,50 @@
+<template>
+  <MaterialReviewAuditView :confirm="confirm"></MaterialReviewAuditView>
+</template>
+
+<script setup lang="ts">
+import { useQuery, useQueryClient } from '@tanstack/vue-query';
+import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
+import { useGlobalEventContext, useRouteView } from '@/hooks';
+import { Message } from '@bole-core/core';
+import { EnterpriseApplyFileUtils } from '@/components/commonView/utils';
+import MaterialReviewAuditView from './components/MaterialReviewAuditView.vue';
+import { Form } from './components/materialReviewAudit';
+
+defineOptions({
+  name: 'MaterialReReviewAudit',
+});
+
+const route = useRoute();
+const eventContext = useGlobalEventContext();
+const { closeViewPush } = useRouteView();
+const id = route.params?.id as string;
+
+function handleBack() {
+  closeViewPush(route, {
+    name: 'MaterialReReviewList',
+  });
+}
+
+const queryClient = useQueryClient();
+
+async function confirm(form: Form) {
+  try {
+    let params: API.OutReCheckParkBountyApplyInput = {
+      parkBountyApplyId: id,
+      outReCheckStatus: form.status,
+      remark: form.remark,
+      extraListFiles: EnterpriseApplyFileUtils.convertFileTableListToApiBatch(form.extraListFiles),
+    };
+    let res = await parkBountyApplyServices.outReCheckParkBountyApply(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      eventContext.emit('materialReviewAudit:audit');
+      queryClient.invalidateQueries({
+        queryKey: ['parkBountyApplyServices/getGoverDataBoard'],
+      });
+      handleBack();
+    }
+  } catch (error) {}
+}
+</script>
diff --git a/src/views/MaterialReview/MaterialReReviewList.vue b/src/views/MaterialReview/MaterialReReviewList.vue
index d9283cc..bb422f0 100644
--- a/src/views/MaterialReview/MaterialReReviewList.vue
+++ b/src/views/MaterialReview/MaterialReReviewList.vue
@@ -16,7 +16,7 @@
           </QueryFilterItem>
           <QueryFilterItem tip-content="瀹℃牳鏃ユ湡">
             <FieldDatePicker
-              v-model="extraParamState.outCheckTime"
+              v-model="extraParamState.outReCheckTime"
               type="daterange"
               range-separator="~"
               start-placeholder="寮�濮嬫棩鏈�"
@@ -27,7 +27,7 @@
           </QueryFilterItem>
           <QueryFilterItem>
             <FieldRadio
-              v-model="extraParamState.outCheckStatus"
+              v-model="extraParamState.outReCheckStatus"
               :value-enum="BountyCheckStatusEnumText"
               buttonStyle
               showAllBtn
@@ -109,19 +109,34 @@
     name: '鐢虫姤鏃ユ湡',
   },
   {
-    id: '7',
+    id: '6-1',
     enCode: 'outCheckAuditOperator',
-    name: '瀹℃牳浜�',
+    name: '鍒濆浜�',
+  },
+  {
+    id: '6-2',
+    enCode: 'outCheckTime',
+    name: '鍒濆鏃ユ湡',
+  },
+  {
+    id: '6-3',
+    enCode: 'outCheckStatus',
+    name: '鍒濆鐘舵��',
+  },
+  {
+    id: '7',
+    enCode: 'outReCheckAuditOperator',
+    name: '澶嶅浜�',
   },
   {
     id: '8',
-    enCode: 'outCheckTime',
-    name: '瀹℃牳鏃ユ湡',
+    enCode: 'outReCheckTime',
+    name: '澶嶅鏃ユ湡',
   },
   {
     id: '9',
-    enCode: 'outCheckStatus',
-    name: '瀹℃牳鐘舵��',
+    enCode: 'outReCheckStatus',
+    name: '澶嶅鐘舵��',
   },
 ];
 
@@ -145,7 +160,7 @@
     },
     extraProps: {
       hide: (row: API.GetParkBountyApplyListOutput) =>
-        row.outCheckStatus !== BountyCheckStatusEnum.WaitCheck,
+        row.outReCheckStatus !== BountyCheckStatusEnum.WaitCheck,
     },
   },
 ]);
@@ -184,11 +199,15 @@
           orderInput: extraParamState.orderInput,
         },
         batchNo: extraParamState.batchNo,
-        outCheckStatus: extraParamState.outCheckStatus,
+        outCheckStatus: BountyCheckStatusEnum.CheckPassed,
+        outReCheckStatus: extraParamState.outReCheckStatus,
         creationTimeBegin: format(extraParamState.creationTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
         creationTimeEnd: format(extraParamState.creationTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
-        outCheckTimeBegin: format(extraParamState.outCheckTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
-        outCheckTimeEnd: format(extraParamState.outCheckTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
+        outReCheckTimeBegin: format(
+          extraParamState.outReCheckTime?.[0] ?? '',
+          'YYYY-MM-DD 00:00:00'
+        ),
+        outReCheckTimeEnd: format(extraParamState.outReCheckTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
       };
       let res = await parkBountyApplyServices.getOutcheckParkBountyList(params, {
         showLoading: !state.loading,
@@ -199,17 +218,19 @@
   {
     defaultExtraParams: {
       batchNo: '',
-      outCheckStatus: '' as any as BountyCheckStatusEnum,
+      outReCheckStatus: '' as any as BountyCheckStatusEnum,
       creationTime: [] as unknown as ModelValueType,
-      outCheckTime: [] as unknown as ModelValueType,
+      outReCheckTime: [] as unknown as ModelValueType,
       orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
     },
     columnsRenderProps: {
       applyMonth: { type: 'date', format: 'YYYY骞碝M鏈�' },
       creationTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' },
       outCheckTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' },
+      outReCheckTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' },
       applySumAmount: { type: 'money', precision: 2 },
       outCheckStatus: { type: 'enum', valueEnum: BountyCheckStatusEnumText },
+      outReCheckStatus: { type: 'enum', valueEnum: BountyCheckStatusEnumText },
     },
   }
 );
@@ -220,11 +241,14 @@
     params: {
       id: row.id,
     },
+    query: {
+      type: 'reReview',
+    },
   });
 }
 function goAudit(row: API.GetParkBountyApplyListOutput) {
   router.push({
-    name: 'MaterialReviewAudit',
+    name: 'MaterialReReviewAudit',
     params: {
       id: row.id,
     },
diff --git a/src/views/MaterialReview/MaterialReviewAudit.vue b/src/views/MaterialReview/MaterialReviewAudit.vue
index b31b81e..698fbc7 100644
--- a/src/views/MaterialReview/MaterialReviewAudit.vue
+++ b/src/views/MaterialReview/MaterialReviewAudit.vue
@@ -1,101 +1,15 @@
 <template>
-  <LoadingLayout>
-    <AppContainer>
-      <PageFormLayout title="鐢虫姤瀹℃牳">
-        <DetailView :form="form" :has-form="true" :isEdit="false">
-          <ChunkCellV2 title="鐢虫姤浼佷笟鍚嶅崟" class="chunk-cell-table">
-            <DeclareEnterpriseTableView
-              :getList="getList"
-              :extra-param-state="extraParamState"
-              :pro-table-props="proTableProps"
-              :reset="reset"
-              :column="addRewardApplyStep3Columns"
-              :operationBtns="operationBtns"
-            ></DeclareEnterpriseTableView>
-            <MateriaDetailDialog
-              v-bind="dialogProps"
-              :show-upload-btn="false"
-              :show-delete-btn="false"
-              showMaterialExtraFileUploadBtn
-              showMaterialExtraFileDeleteBtn
-            />
-          </ChunkCellV2>
-          <ChunkCell>
-            <ProForm :model="form" ref="formRef" label-width="120px">
-              <ProFormCol>
-                <ProFormColItem :span="12">
-                  <ProFormItemV2
-                    label="鐢虫姤瀹℃牳:"
-                    prop="status"
-                    :check-rules="[{ message: '璇烽�夋嫨瀹℃牳鐘舵��' }]"
-                  >
-                    <ProFormRadio
-                      v-model="form.status"
-                      :value-enum="BountyCheckStatusEnumTextForAudit"
-                    />
-                  </ProFormItemV2>
-                </ProFormColItem>
-              </ProFormCol>
-              <ProFormCol v-if="form.status === BountyCheckStatusEnum.CheckReject">
-                <ProFormColItem>
-                  <ProFormItemV2
-                    label="椹冲洖鍘熷洜:"
-                    prop="remark"
-                    :check-rules="[{ message: '璇疯緭鍏ラ┏鍥炲師鍥�' }]"
-                  >
-                    <ProFormTextArea
-                      v-model="form.remark"
-                      placeholder="璇疯緭鍏�"
-                      show-word-limit
-                      :maxlength="200"
-                    ></ProFormTextArea>
-                  </ProFormItemV2>
-                </ProFormColItem>
-              </ProFormCol>
-            </ProForm>
-          </ChunkCell>
-        </DetailView>
-        <template #footer>
-          <el-button @click="handleBack">鍏抽棴</el-button>
-          <el-button type="primary" @click="handleConfirm()">鎻愪氦</el-button>
-        </template>
-      </PageFormLayout>
-    </AppContainer>
-  </LoadingLayout>
+  <MaterialReviewAuditView :confirm="confirm"></MaterialReviewAuditView>
 </template>
 
 <script setup lang="ts">
-import {
-  AppContainer,
-  ProForm,
-  ChunkCell,
-  ProFormCol,
-  ProFormColItem,
-  ProFormItemV2,
-  ProFormTextArea,
-  ProFormRadio,
-  LoadingLayout,
-  PageFormLayout,
-} from '@bole-core/components';
-import {
-  BountyCheckStatusEnum,
-  BountyCheckStatusEnumTextForAudit,
-  useAddRewardApplyStep3Columns,
-} from '@/constants';
-import ChunkCellV2 from '@/components/Layout/ChunkCellV2.vue';
-import DetailView from '@/components/commonView/DetailView.vue';
-import DeclareEnterpriseTableView from '@/components/commonView/DeclareEnterpriseTableView.vue';
-import MateriaDetailDialog from '@/components/commonView/MateriaDetailDialog.vue';
 import { useQuery, useQueryClient } from '@tanstack/vue-query';
 import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
-import { useDeclareEnterpriseTable, useGlobalEventContext, useRouteView } from '@/hooks';
-import { FormInstance } from 'element-plus';
+import { useGlobalEventContext, useRouteView } from '@/hooks';
 import { Message } from '@bole-core/core';
-import { useIndustrialParkDropDownList } from '@/hooks/industrialPark';
-import {
-  CustomerApplyFileTypeListItem,
-  EnterpriseApplyFileUtils,
-} from '@/components/commonView/utils';
+import { EnterpriseApplyFileUtils } from '@/components/commonView/utils';
+import MaterialReviewAuditView from './components/MaterialReviewAuditView.vue';
+import { Form } from './components/materialReviewAudit';
 
 defineOptions({
   name: 'MaterialReviewAudit',
@@ -105,72 +19,6 @@
 const eventContext = useGlobalEventContext();
 const { closeViewPush } = useRouteView();
 const id = route.params?.id as string;
-const form = reactive({
-  batchNo: '',
-  parkName: '',
-  parkTypeName: '',
-  applyMonth: '',
-  applySumAmount: 0,
-  financeSumAmount: 0,
-  settleSumAmount: 0,
-  parkCollectFileList: [] as CustomerApplyFileTypeListItem[],
-  calculationFileList: [] as CustomerApplyFileTypeListItem[],
-  extraListFiles: [] as CustomerApplyFileTypeListItem[],
-
-  status: '' as any as BountyCheckStatusEnum,
-  remark: '',
-
-  suportPlatRecharge: false,
-  suportFinance: false,
-});
-
-const { addRewardApplyStep3Columns } = useAddRewardApplyStep3Columns({
-  suportPlatRecharge: toRef(form, 'suportPlatRecharge'),
-  suportFinance: toRef(form, 'suportFinance'),
-});
-
-const { extraParamState, getList, reset, proTableProps, operationBtns, dialogProps } =
-  useDeclareEnterpriseTable({
-    id: ref(id),
-    applyMonth: toRef(form, 'applyMonth'),
-    enableUploadExtraFiles: true,
-  });
-
-const { data: detail, isLoading } = useQuery({
-  queryKey: ['parkBountyApplyServices/getOutCheckParkBountyApplyDetailBaseInfo', id],
-  queryFn: async () => {
-    return await parkBountyApplyServices.getOutCheckParkBountyApplyDetailBaseInfo(
-      { parkBountyApplyId: id },
-      {
-        showLoading: false,
-      }
-    );
-  },
-  placeholderData: () => ({} as API.OutCheckParkBountyApplyBaseInfo),
-  onSuccess(data) {
-    form.batchNo = data.batchNo;
-    form.parkName = data.parkName;
-    form.parkTypeName = data.parkTypeName;
-    form.applyMonth = data.applyMonth;
-    form.applySumAmount = data.applySumAmount;
-    form.financeSumAmount = data.financeSumAmount;
-    form.settleSumAmount = data.settleSumAmount;
-    form.parkCollectFileList = EnterpriseApplyFileUtils.convertApiFileToParkCollectFileList(
-      data.listFiles
-    );
-    form.calculationFileList = EnterpriseApplyFileUtils.convertApiFileToParkCollectFileList(
-      data.collectCountListFiles
-    );
-    form.extraListFiles = EnterpriseApplyFileUtils.convertApiFileToExtraListFiles(
-      data.extraListFiles
-    );
-
-    form.suportPlatRecharge = data.suportPlatRecharge;
-    form.suportFinance = data.suportFinance;
-
-    getList();
-  },
-});
 
 function handleBack() {
   closeViewPush(route, {
@@ -178,20 +26,9 @@
   });
 }
 
-const formRef = ref<FormInstance>();
-function handleConfirm() {
-  if (!formRef.value) return;
-  formRef.value.validate((valid) => {
-    if (valid) {
-      confirm();
-    } else {
-      return;
-    }
-  });
-}
-
 const queryClient = useQueryClient();
-async function confirm() {
+
+async function confirm(form: Form) {
   try {
     let params: API.OutcheckParkBountyApplyInput = {
       parkBountyApplyId: id,
@@ -210,10 +47,4 @@
     }
   } catch (error) {}
 }
-
-const { getIndustrialParkTypeNameById } = useIndustrialParkDropDownList();
 </script>
-
-<style lang="scss" scoped>
-@use '@/style/common.scss' as *;
-</style>
diff --git a/src/views/MaterialReview/MaterialReviewDetail.vue b/src/views/MaterialReview/MaterialReviewDetail.vue
index 1b3d8e9..cfcbac6 100644
--- a/src/views/MaterialReview/MaterialReviewDetail.vue
+++ b/src/views/MaterialReview/MaterialReviewDetail.vue
@@ -5,16 +5,32 @@
         <template #title>
           <div class="page-form-layout-title">
             鐢虫姤璇︽儏
-            <span class="page-form-layout-title-item status">
-              瀹℃牳鐘舵��:<span :style="{ color: BountyCheckStatusEnumColor[form.outCheckStatus] }">{{
-                BountyCheckStatusEnumText[form.outCheckStatus]
-              }}</span>
-            </span>
-            <span class="page-form-layout-title-item remark">
-              <TextOverTooltip v-if="form.outCheckStatus === BountyCheckStatusEnum.CheckReject">
-                {{ `瀹℃牳鏈�氳繃鍘熷洜:${form.outCheckRemark ?? ''}` }}
-              </TextOverTooltip>
-            </span>
+            <template v-if="isReReview">
+              <span class="page-form-layout-title-item status">
+                澶嶅鐘舵��:<span
+                  :style="{ color: BountyCheckStatusEnumColor[form.outReCheckStatus] }"
+                  >{{ BountyCheckStatusEnumText[form.outCheckStatus] }}</span
+                >
+              </span>
+              <span class="page-form-layout-title-item remark">
+                <TextOverTooltip v-if="form.outCheckStatus === BountyCheckStatusEnum.CheckReject">
+                  {{ `澶嶅鏈�氳繃鍘熷洜:${form.outCheckRemark ?? ''}` }}
+                </TextOverTooltip>
+              </span>
+            </template>
+            <template v-else>
+              <span class="page-form-layout-title-item status">
+                瀹℃牳鐘舵��:<span
+                  :style="{ color: BountyCheckStatusEnumColor[form.outCheckStatus] }"
+                  >{{ BountyCheckStatusEnumText[form.outCheckStatus] }}</span
+                >
+              </span>
+              <span class="page-form-layout-title-item remark">
+                <TextOverTooltip v-if="form.outCheckStatus === BountyCheckStatusEnum.CheckReject">
+                  {{ `瀹℃牳鏈�氳繃鍘熷洜:${form.outCheckRemark ?? ''}` }}
+                </TextOverTooltip>
+              </span>
+            </template>
           </div>
         </template>
         <DetailView :form="form">
@@ -75,6 +91,9 @@
 const route = useRoute();
 const { closeViewPush } = useRouteView();
 const id = route.params?.id as string;
+const type = route.query?.type as string;
+//鏄惁澶嶅
+const isReReview = type === 'reReview';
 const form = reactive({
   batchNo: '',
   parkName: '',
@@ -90,6 +109,9 @@
 
   outCheckStatus: '' as any as BountyCheckStatusEnum,
   outCheckRemark: '',
+
+  outReCheckStatus: '' as any as BountyCheckStatusEnum,
+  outReCheckRemark: '',
 
   suportPlatRecharge: false,
   suportFinance: false,
@@ -129,6 +151,8 @@
     form.settleSumAmount = data.settleSumAmount;
     form.outCheckStatus = data.outCheckStatus;
     form.outCheckRemark = data.outCheckRemark;
+    form.outReCheckStatus = data.outReCheckStatus;
+    form.outReCheckRemark = data.outReCheckRemark;
     form.parkCollectFileList = EnterpriseApplyFileUtils.convertApiFileToParkCollectFileList(
       data.listFiles
     );
diff --git a/src/views/MaterialReview/components/MaterialReviewAuditView.vue b/src/views/MaterialReview/components/MaterialReviewAuditView.vue
new file mode 100644
index 0000000..b60976d
--- /dev/null
+++ b/src/views/MaterialReview/components/MaterialReviewAuditView.vue
@@ -0,0 +1,197 @@
+<template>
+  <LoadingLayout>
+    <AppContainer>
+      <PageFormLayout title="鐢虫姤瀹℃牳">
+        <DetailView :form="form" :has-form="true" :isEdit="false">
+          <ChunkCellV2 title="鐢虫姤浼佷笟鍚嶅崟" class="chunk-cell-table">
+            <DeclareEnterpriseTableView
+              :getList="getList"
+              :extra-param-state="extraParamState"
+              :pro-table-props="proTableProps"
+              :reset="reset"
+              :column="addRewardApplyStep3Columns"
+              :operationBtns="operationBtns"
+            ></DeclareEnterpriseTableView>
+            <MateriaDetailDialog
+              v-bind="dialogProps"
+              :show-upload-btn="false"
+              :show-delete-btn="false"
+              showMaterialExtraFileUploadBtn
+              showMaterialExtraFileDeleteBtn
+            />
+          </ChunkCellV2>
+          <ChunkCell>
+            <ProForm :model="form" ref="formRef" label-width="120px">
+              <ProFormCol>
+                <ProFormColItem :span="12">
+                  <ProFormItemV2
+                    label="鐢虫姤瀹℃牳:"
+                    prop="status"
+                    :check-rules="[{ message: '璇烽�夋嫨瀹℃牳鐘舵��' }]"
+                  >
+                    <ProFormRadio
+                      v-model="form.status"
+                      :value-enum="BountyCheckStatusEnumTextForAudit"
+                    />
+                  </ProFormItemV2>
+                </ProFormColItem>
+              </ProFormCol>
+              <ProFormCol v-if="form.status === BountyCheckStatusEnum.CheckReject">
+                <ProFormColItem>
+                  <ProFormItemV2
+                    label="椹冲洖鍘熷洜:"
+                    prop="remark"
+                    :check-rules="[{ message: '璇疯緭鍏ラ┏鍥炲師鍥�' }]"
+                  >
+                    <ProFormTextArea
+                      v-model="form.remark"
+                      placeholder="璇疯緭鍏�"
+                      show-word-limit
+                      :maxlength="200"
+                    ></ProFormTextArea>
+                  </ProFormItemV2>
+                </ProFormColItem>
+              </ProFormCol>
+            </ProForm>
+          </ChunkCell>
+        </DetailView>
+        <template #footer>
+          <el-button @click="handleBack">鍏抽棴</el-button>
+          <el-button type="primary" @click="handleConfirm()">鎻愪氦</el-button>
+        </template>
+      </PageFormLayout>
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  AppContainer,
+  ProForm,
+  ChunkCell,
+  ProFormCol,
+  ProFormColItem,
+  ProFormItemV2,
+  ProFormTextArea,
+  ProFormRadio,
+  LoadingLayout,
+  PageFormLayout,
+} from '@bole-core/components';
+import {
+  BountyCheckStatusEnum,
+  BountyCheckStatusEnumTextForAudit,
+  useAddRewardApplyStep3Columns,
+} from '@/constants';
+import ChunkCellV2 from '@/components/Layout/ChunkCellV2.vue';
+import DetailView from '@/components/commonView/DetailView.vue';
+import DeclareEnterpriseTableView from '@/components/commonView/DeclareEnterpriseTableView.vue';
+import MateriaDetailDialog from '@/components/commonView/MateriaDetailDialog.vue';
+import { useQuery, useQueryClient } from '@tanstack/vue-query';
+import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
+import { useDeclareEnterpriseTable, useGlobalEventContext, useRouteView } from '@/hooks';
+import { FormInstance } from 'element-plus';
+import {
+  CustomerApplyFileTypeListItem,
+  EnterpriseApplyFileUtils,
+} from '@/components/commonView/utils';
+import { Form } from './materialReviewAudit';
+
+defineOptions({
+  name: 'MaterialReviewAuditView',
+});
+
+type Props = {
+  confirm?: (form: Form) => Promise<void>;
+  handleBack?: () => any;
+};
+
+const props = withDefaults(defineProps<Props>(), {});
+
+const route = useRoute();
+const id = route.params?.id as string;
+const form = reactive({
+  batchNo: '',
+  parkName: '',
+  parkTypeName: '',
+  applyMonth: '',
+  applySumAmount: 0,
+  financeSumAmount: 0,
+  settleSumAmount: 0,
+  parkCollectFileList: [] as CustomerApplyFileTypeListItem[],
+  calculationFileList: [] as CustomerApplyFileTypeListItem[],
+  extraListFiles: [] as CustomerApplyFileTypeListItem[],
+
+  status: '' as any as BountyCheckStatusEnum,
+  remark: '',
+
+  suportPlatRecharge: false,
+  suportFinance: false,
+});
+
+const { addRewardApplyStep3Columns } = useAddRewardApplyStep3Columns({
+  suportPlatRecharge: toRef(form, 'suportPlatRecharge'),
+  suportFinance: toRef(form, 'suportFinance'),
+});
+
+const { extraParamState, getList, reset, proTableProps, operationBtns, dialogProps } =
+  useDeclareEnterpriseTable({
+    id: ref(id),
+    applyMonth: toRef(form, 'applyMonth'),
+    enableUploadExtraFiles: true,
+  });
+
+const { data: detail, isLoading } = useQuery({
+  queryKey: ['parkBountyApplyServices/getOutCheckParkBountyApplyDetailBaseInfo', id],
+  queryFn: async () => {
+    return await parkBountyApplyServices.getOutCheckParkBountyApplyDetailBaseInfo(
+      { parkBountyApplyId: id },
+      {
+        showLoading: false,
+      }
+    );
+  },
+  placeholderData: () => ({} as API.OutCheckParkBountyApplyBaseInfo),
+  onSuccess(data) {
+    form.batchNo = data.batchNo;
+    form.parkName = data.parkName;
+    form.parkTypeName = data.parkTypeName;
+    form.applyMonth = data.applyMonth;
+    form.applySumAmount = data.applySumAmount;
+    form.financeSumAmount = data.financeSumAmount;
+    form.settleSumAmount = data.settleSumAmount;
+    form.parkCollectFileList = EnterpriseApplyFileUtils.convertApiFileToParkCollectFileList(
+      data.listFiles
+    );
+    form.calculationFileList = EnterpriseApplyFileUtils.convertApiFileToParkCollectFileList(
+      data.collectCountListFiles
+    );
+    form.extraListFiles = EnterpriseApplyFileUtils.convertApiFileToExtraListFiles(
+      data.extraListFiles
+    );
+
+    form.suportPlatRecharge = data.suportPlatRecharge;
+    form.suportFinance = data.suportFinance;
+
+    getList();
+  },
+});
+
+function handleBack() {
+  props.handleBack?.();
+  // closeViewPush(route, {
+  //   name: props.backRouteName,
+  // });
+}
+
+const formRef = ref<FormInstance>();
+function handleConfirm() {
+  if (!formRef.value) return;
+  formRef.value.validate((valid) => {
+    if (valid) {
+      props.confirm?.(form);
+    } else {
+      return;
+    }
+  });
+}
+</script>
diff --git a/src/views/MaterialReview/components/materialReviewAudit.ts b/src/views/MaterialReview/components/materialReviewAudit.ts
new file mode 100644
index 0000000..054cd67
--- /dev/null
+++ b/src/views/MaterialReview/components/materialReviewAudit.ts
@@ -0,0 +1,9 @@
+import { BountyCheckStatusEnum } from '@/constants';
+import { CustomerApplyFileTypeListItem } from '@/components/commonView/utils';
+
+export type Form = {
+  extraListFiles: CustomerApplyFileTypeListItem[];
+
+  status: BountyCheckStatusEnum;
+  remark: string;
+};

--
Gitblit v1.9.1