From 85f7bdb64b1f8b0fdaf58355a4f3fc389ec26ad0 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期二, 18 十一月 2025 16:00:00 +0800
Subject: [PATCH] feat: 新增审核撤回日志

---
 src/views/MaterialReview/MaterialReview.vue |  186 +++++++++++++++++++++++++++-------------------
 1 files changed, 110 insertions(+), 76 deletions(-)

diff --git a/src/views/MaterialReview/MaterialReview.vue b/src/views/MaterialReview/MaterialReview.vue
index c3e7ca4..7eb8ee8 100644
--- a/src/views/MaterialReview/MaterialReview.vue
+++ b/src/views/MaterialReview/MaterialReview.vue
@@ -3,9 +3,20 @@
     <AppContainer>
       <ProTableQueryFilterBar @on-reset="reset">
         <template #query>
-          <QueryFilterItem tip-content="鏈�杩戠敵鎶ユ棩鏈�">
+          <QueryFilterItem>
+            <FieldSelect
+              v-model="extraParamState.industrialParkId"
+              placeholder="璇烽�夋嫨鍥尯"
+              :value-enum="fourStreamsIndustrialParkList"
+              enumLabelKey="parkName"
+              enum-value-key="id"
+              clearable
+              @change="getList()"
+            />
+          </QueryFilterItem>
+          <QueryFilterItem tip-content="鐢虫姤鏃ユ湡">
             <FieldDatePicker
-              v-model="extraParamState.date"
+              v-model="extraParamState.creationTime"
               type="daterange"
               range-separator="~"
               start-placeholder="寮�濮嬫棩鏈�"
@@ -14,9 +25,9 @@
               @change="getList()"
             ></FieldDatePicker>
           </QueryFilterItem>
-          <QueryFilterItem tip-content="鏈�杩戝彂鏀炬棩鏈�">
+          <QueryFilterItem tip-content="瀹℃牳鏃ユ湡">
             <FieldDatePicker
-              v-model="extraParamState.date"
+              v-model="extraParamState.outCheckTime"
               type="daterange"
               range-separator="~"
               start-placeholder="寮�濮嬫棩鏈�"
@@ -27,8 +38,8 @@
           </QueryFilterItem>
           <QueryFilterItem>
             <FieldRadio
-              v-model="extraParamState.showStatus"
-              :value-enum="DataRangeEnumText"
+              v-model="extraParamState.outCheckStatus"
+              :value-enum="BountyCheckStatusEnumText"
               buttonStyle
               showAllBtn
               @change="getList()"
@@ -36,7 +47,7 @@
           </QueryFilterItem>
           <QueryFilterItem>
             <SearchInput
-              v-model="extraParamState.keyword"
+              v-model="extraParamState.batchNo"
               style="width: 200px"
               placeholder="鎵规鍙�"
               @on-click-search="getList"
@@ -48,7 +59,9 @@
 
       <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
       </ProTableV2>
+      <ParkBountyApplyRedoDialog v-bind="dialogProps" />
     </AppContainer>
+    <OperateHistoryLogDialog v-bind="logDialogProps" />
   </LoadingLayout>
 </template>
 
@@ -64,87 +77,64 @@
   FieldRadio,
   QueryFilterItem,
   FieldDatePicker,
+  FieldSelect,
+  useFormDialog,
 } from '@bole-core/components';
-import { OrderInputType } from '@bole-core/core';
+import { Message, OrderInputType } from '@bole-core/core';
 import { format } from '@/utils';
-import { DataRangeEnum, DataRangeEnumText } from '@/constants';
-import * as informationServices from '@/services/api/Information';
+import { BountyCheckStatusEnum, BountyCheckStatusEnumText, DataRangeEnumText } from '@/constants';
+import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
 import _ from 'lodash';
 import { ModelValueType } from 'element-plus';
-import { useGlobalEventContext } from '@/hooks';
+import {
+  useAccess,
+  useGlobalEventContext,
+  useIndustrialParkDropDownList,
+  useOpenLogDialog,
+} from '@/hooks';
+import ParkBountyApplyRedoDialog from './components/ParkBountyApplyRedoDialog.vue';
 
 defineOptions({
-  name: 'MaterialReview',
+  name: 'MaterialReviewList',
 });
 
-const column: API.CustomModuleColumnDto[] = [
-  {
-    id: '1',
-    enCode: 'changeFlag',
-    name: '鐢宠鎵规鍙�',
-  },
-  {
-    id: '2',
-    enCode: 'name',
-    name: '鐢宠鍥尯',
-  },
-  {
-    id: '3',
-    enCode: 'idNumber',
-    name: '鍥尯绫诲瀷',
-  },
-  {
-    id: '4',
-    enCode: 'workType',
-    name: '鐢宠濂栧姳閲戞湀浠�',
-  },
-  {
-    id: '5',
-    enCode: 'gender',
-    name: '濂栧姳閲戞眹鎬婚噾棰濓紙鍏冿級',
-  },
-  {
-    id: '6',
-    enCode: 'age',
-    name: '鐢虫姤鏃ユ湡',
-  },
-  {
-    id: '7',
-    enCode: 'birthDay',
-    name: '瀹℃牳鏃ユ湡',
-  },
-  {
-    id: '8',
-    enCode: 'phoneNumber',
-    name: '瀹℃牳鐘舵��',
-  },
-];
-
-const operationBtns = defineOperationBtns([
-  {
-    data: {
-      enCode: 'detailBtn',
-      name: '璇︽儏',
-    },
+const operationBtnMap: Record<string, OperationBtnType> = {
+  detailBtn: {
     emits: {
       onClick: (role) => goDetail(role),
     },
   },
-  {
-    data: {
-      enCode: 'auditBtn',
-      name: '瀹℃牳',
-    },
+  auditBtn: {
     emits: {
       onClick: (role) => goAudit(role),
     },
+    extraProps: {
+      hide: (row: API.GetParkBountyApplyListOutput) =>
+        row.outCheckStatus !== BountyCheckStatusEnum.WaitCheck,
+    },
   },
-]);
+  redoBtn: {
+    emits: {
+      onClick: (role) => openDialog(role),
+    },
+    extraProps: {
+      hide: (row: API.GetParkBountyApplyListOutput) =>
+        row.outCheckStatus !== BountyCheckStatusEnum.CheckPassed,
+    },
+  },
+  logBtn: { emits: { onClick: (role) => openLogDialog(role.id) } },
+};
+
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
+  operationBtnMap,
+});
 
 const router = useRouter();
 const BaseState = {
   loading: true,
 };
+
+const { fourStreamsIndustrialParkList } = useIndustrialParkDropDownList();
 
 const state = reactive({ ...BaseState });
 
@@ -168,16 +158,21 @@
 } = useTable(
   async ({ pageIndex, pageSize }, extraParamState) => {
     try {
-      let params: API.GetInformationForManageInput = {
+      let params: API.GetParkBountyApplyListInput = {
         pageModel: {
           rows: pageSize,
           page: pageIndex,
           orderInput: extraParamState.orderInput,
         },
-        publishStartDate: format(extraParamState.date?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
-        publishEndDate: format(extraParamState.date?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
+        batchNo: extraParamState.batchNo,
+        outCheckStatus: extraParamState.outCheckStatus,
+        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'),
+        industrialParkId: extraParamState.industrialParkId,
       };
-      let res = await informationServices.getInformationForManage(params, {
+      let res = await parkBountyApplyServices.getOutcheckParkBountyList(params, {
         showLoading: !state.loading,
       });
       return res;
@@ -185,15 +180,24 @@
   },
   {
     defaultExtraParams: {
-      keyword: '',
-      showStatus: '' as any as DataRangeEnum,
-      date: [] as unknown as ModelValueType,
+      batchNo: '',
+      outCheckStatus: '' as any as BountyCheckStatusEnum,
+      creationTime: [] as unknown as ModelValueType,
+      outCheckTime: [] as unknown as ModelValueType,
       orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
+      industrialParkId: '',
+    },
+    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' },
+      applySumAmount: { type: 'money', precision: 2 },
+      outCheckStatus: { type: 'enum', valueEnum: BountyCheckStatusEnumText },
     },
   }
 );
 
-function goDetail(row: any) {
+function goDetail(row: API.GetParkBountyApplyListOutput) {
   router.push({
     name: 'MaterialReviewDetail',
     params: {
@@ -201,7 +205,7 @@
     },
   });
 }
-function goAudit(row: any) {
+function goAudit(row: API.GetParkBountyApplyListOutput) {
   router.push({
     name: 'MaterialReviewAudit',
     params: {
@@ -209,6 +213,36 @@
     },
   });
 }
+
+function openDialog(row: API.GetParkBountyApplyListOutput) {
+  handleAdd({
+    parkBountyApplyId: row.id,
+  });
+}
+
+const { dialogProps, handleAdd, editForm } = useFormDialog({
+  onConfirm: outcheckParkBountyApplyRedoed,
+  defaultFormParams: {
+    reasonForWithdrawal: '',
+    parkBountyApplyId: '',
+  },
+});
+
+async function outcheckParkBountyApplyRedoed() {
+  try {
+    let params: API.OutcheckParkBountyApplyRedoedInput = {
+      parkBountyApplyId: editForm.parkBountyApplyId,
+      reasonForWithdrawal: editForm.reasonForWithdrawal,
+    };
+    let res = await parkBountyApplyServices.outcheckParkBountyApplyRedoed(params);
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      getList(paginationState.pageIndex);
+    }
+  } catch (error) {}
+}
+
+const { openLogDialog, logDialogProps } = useOpenLogDialog();
 </script>
 
 <style lang="scss" scoped>

--
Gitblit v1.9.1