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