From 2174f758e8a963964198e092f0d528ef1ae9b81e Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期二, 22 七月 2025 09:59:05 +0800
Subject: [PATCH] feat: 页面

---
 src/views/Reward/RewardGrantRegister.vue |  282 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 282 insertions(+), 0 deletions(-)

diff --git a/src/views/Reward/RewardGrantRegister.vue b/src/views/Reward/RewardGrantRegister.vue
new file mode 100644
index 0000000..c096eb3
--- /dev/null
+++ b/src/views/Reward/RewardGrantRegister.vue
@@ -0,0 +1,282 @@
+<template>
+  <LoadingLayout>
+    <AppContainer>
+      <PageFormLayout title="濂栧姳閲戠櫥璁�">
+        <DetailView :form="form">
+          <ChunkCellV2 title="鐢虫姤浼佷笟鍚嶅崟">
+            <DeclareEnterpriseTableView
+              :getList="getList"
+              :extra-param-state="extraParamState"
+              :pro-table-props="proTableProps"
+              :reset="reset"
+              :operationBtns="registerOperationBtns"
+              :column="rewardGrantRegisterColumns"
+            >
+              <template #btn>
+                <el-button type="primary" link @click="downloadTemp()">涓嬭浇妯℃澘</el-button>
+                <el-button icon="Upload" type="primary" @click="openUploadFileDialog()"
+                  >瀵煎叆</el-button
+                >
+                <el-button icon="Plus" type="primary" @click="openBatchRegisterDialog()"
+                  >鎵归噺鐧昏</el-button
+                >
+              </template>
+            </DeclareEnterpriseTableView>
+            <FourStreamsMaterialFileDialogV2
+              v-bind="dialogMaterialFileProps"
+              :show-upload-btn="false"
+              :show-delete-btn="false"
+              :show-check-btn="false"
+              downloadBtnText="鏌ョ湅"
+              title="鏌ョ湅鍑瘉"
+              :BusinessTypeEnumText="TransferFileEnumInRewardGrandText"
+            />
+          </ChunkCellV2>
+        </DetailView>
+        <template #footer>
+          <el-button @click="handleBack">鍙栨秷</el-button>
+          <el-button @click="handleBack" type="primary">纭</el-button>
+        </template>
+      </PageFormLayout>
+    </AppContainer>
+    <RegisterGrantDialog v-bind="dialogRegisterGrantProps" />
+    <UploadFileDialog v-bind="dialogUploadFileProps" />
+    <BatchRegisterDialog v-bind="dialogBatchRegisterProps" />
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  AppContainer,
+  defineOperationBtns,
+  LoadingLayout,
+  PageFormLayout,
+  UploadUserFile,
+  useFormDialog,
+  XLSXUtils,
+} from '@bole-core/components';
+import DetailView from '@/components/commonView/DetailView.vue';
+import ChunkCellV2 from '@/components/Layout/ChunkCellV2.vue';
+import DeclareEnterpriseTableView from '@/components/commonView/DeclareEnterpriseTableView.vue';
+import { useQuery } from '@tanstack/vue-query';
+import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
+import { useRouteView } from '@/hooks';
+import { useIndustrialParkDropDownList } from '@/hooks/industrialPark';
+import {
+  CustomerApplyFileTypeListItem,
+  EnterpriseApplyFileUtils,
+  FourStreamsMaterialUtils,
+} from '@/components/commonView/utils';
+import {
+  BountyBatchApplyTransferTemp,
+  FinanceStatusEnum,
+  IncomeTypeEnum,
+  SettleStatusEnum,
+  TransferFileEnumInRewardGrandText,
+} from '@/constants';
+import { useDeclareEnterpriseTable, rewardGrantRegisterColumns } from '@/hooks';
+import { TransferFileEnumInRewardGrandTableItem } from '@/components/commonView/types';
+import RegisterGrantDialog from './components/RegisterGrantDialog.vue';
+import BatchRegisterDialog from './components/BatchRegisterDialog.vue';
+import UploadFileDialog from './components/UploadFileDialog.vue';
+import { downloadFileByUrl } from '@/utils';
+import { Message } from '@bole-core/core';
+import { ImportParkBountyDataHeaderMap } from './constants';
+
+defineOptions({
+  name: 'RewardGrantRegister',
+});
+
+const route = useRoute();
+const { closeViewPush } = useRouteView();
+const id = route.params?.id as string;
+const form = reactive({
+  batchNo: '',
+  parkName: '',
+  parkTypeName: '',
+  applyMonth: '',
+  applySumAmount: 0,
+  parkCollectFileList: [] as CustomerApplyFileTypeListItem[],
+  calculationFileList: [] as CustomerApplyFileTypeListItem[],
+  suportEnterpriseUpload: false,
+});
+
+const { extraParamState, paginationState, getList, reset, proTableProps } =
+  useDeclareEnterpriseTable({
+    id: ref(id),
+    applyMonth: toRef(form, 'applyMonth'),
+  });
+
+const registerOperationBtns = defineOperationBtns([
+  {
+    data: {
+      enCode: 'registerGrantBtn',
+      name: '鐧昏',
+    },
+    emits: {
+      onClick: (row) => openRegisterGrantDialog(row),
+    },
+  },
+  {
+    data: {
+      enCode: 'checkBtn',
+      name: '鏌ョ湅鍑瘉',
+    },
+    emits: {
+      onClick: (row) => openMaterialFileDialog(row),
+    },
+  },
+]);
+
+const { data: detail, isLoading } = useQuery({
+  queryKey: ['parkBountyApplyServices/getParkBountyApplyDetailBaseInfo', id],
+  queryFn: async () => {
+    return await parkBountyApplyServices.getParkBountyApplyDetailBaseInfo(
+      { parkBountyApplyId: id },
+      {
+        showLoading: false,
+      }
+    );
+  },
+  placeholderData: () => ({} as API.ParkBountyApplyBaseInfo),
+  onSuccess(data) {
+    form.batchNo = data.batchNo;
+    form.parkName = data.parkName;
+    form.parkTypeName = data.parkTypeName;
+    form.applyMonth = data.applyMonth;
+    form.applySumAmount = data.applySumAmount;
+    form.parkCollectFileList = EnterpriseApplyFileUtils.convertApiFileToParkCollectFileList(
+      data.listFiles
+    );
+    form.calculationFileList = EnterpriseApplyFileUtils.convertApiFileToParkCollectFileList(
+      data.collectCountListFiles
+    );
+    form.suportEnterpriseUpload = data.suportEnterpriseUpload;
+
+    getList();
+  },
+});
+
+const { getIndustrialParkTypeNameById } = useIndustrialParkDropDownList();
+
+const { dialogProps: dialogMaterialFileProps, handleAdd: handleMaterialFileAdd } = useFormDialog({
+  defaultFormParams: {
+    list: [] as TransferFileEnumInRewardGrandTableItem[],
+  },
+});
+function openMaterialFileDialog(row: API.GetParkBountyApplyListOutput) {
+  handleMaterialFileAdd({
+    list: FourStreamsMaterialUtils.initApplyRewardGrandFileList(row),
+  });
+}
+
+const {
+  dialogProps: dialogRegisterGrantProps,
+  handleEdit: handleRegisterGrantEdit,
+  editForm: editRegisterForm,
+} = useFormDialog({
+  onConfirm: handleRegisterGrant,
+  defaultFormParams: {
+    incomeType: '' as any as IncomeTypeEnum,
+    parkBountyApplyId: '',
+    fileUrl: [] as UploadUserFile[],
+    financeSumAmount: 0,
+    showSuportPlatRecharge: false,
+    showSuportFiscalRecharge: false,
+  },
+});
+
+function openRegisterGrantDialog(row?: API.GetParkBountyApplyListOutput) {
+  handleRegisterGrantEdit({
+    incomeType: '' as any as IncomeTypeEnum,
+    fileUrl: [] as UploadUserFile[],
+    showSuportPlatRecharge: row.settleStatus === SettleStatusEnum.WaitForSettle,
+    showSuportFiscalRecharge: row.financeStatus === FinanceStatusEnum.WaitForIncome,
+    parkBountyApplyId: row.id,
+    financeSumAmount: 0,
+  });
+}
+
+async function handleRegisterGrant() {}
+
+const { dialogProps: dialogUploadFileProps, handleAdd: handleUploadFileAdd } = useFormDialog({
+  onConfirm: handleImportParkBountyData,
+  defaultFormParams: {
+    parkBountyApplyId: '',
+    url: [] as UploadUserFile[],
+    certificateUrl: [] as UploadUserFile[],
+  },
+});
+
+async function handleImportParkBountyData(response: UploadUserFile) {
+  try {
+    let params: API.ImportBountyApplyDataInput = {
+      parkBountyApplyId: id,
+      url: response.url,
+    };
+    let res = await parkBountyApplyServices.importParkBountyData(params, {
+      timeout: 100000000,
+    });
+    if (res.error.length > 0) {
+      await Message.tipMessage('瀛樺湪閿欒鏁版嵁,鏄惁瀵煎嚭');
+      XLSXUtils.exportToXLSX({
+        workbookDataList: res.error,
+        fileName: '鎵归噺瀵煎叆鍏ヨ处-閿欒鏁版嵁',
+        workbookHeaderMap: ImportParkBountyDataHeaderMap,
+      });
+    }
+    getList(paginationState.pageIndex);
+  } catch (error) {}
+}
+
+function openUploadFileDialog() {
+  handleUploadFileAdd({
+    parkBountyApplyId: id,
+    url: [] as UploadUserFile[],
+    certificateUrl: [] as UploadUserFile[],
+  });
+}
+
+async function openBatchRegisterDialog() {
+  try {
+    handleBatchRegisterAdd({
+      parkBountyApplyId: id,
+      showSuportPlatRecharge: false,
+    });
+  } catch (error) {}
+}
+
+const {
+  dialogProps: dialogBatchRegisterProps,
+  handleAdd: handleBatchRegisterAdd,
+  editForm: batchRegisterEditForm,
+} = useFormDialog({
+  onConfirm: handleBatchRegister,
+  defaultFormParams: {
+    parkBountyApplyDetailIds: [] as string[],
+    amount: 0,
+    companyList: [] as API.GetNotTransferCompanyNameListOutput[],
+    incomeType: IncomeTypeEnum.Fiscal,
+    parkBountyApplyId: '',
+    showSuportPlatRecharge: false,
+
+    certificateUrl: [] as UploadUserFile[],
+  },
+});
+
+async function handleBatchRegister() {}
+
+function downloadTemp() {
+  downloadFileByUrl(BountyBatchApplyTransferTemp, '鐧昏妯℃澘');
+}
+
+function handleBack() {
+  closeViewPush(route, {
+    name: 'RewardGrant',
+  });
+}
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+</style>

--
Gitblit v1.9.1