<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"
|
:showFinanceStatus="true"
|
>
|
<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" 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 {
|
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 { convertFormUrl2ApiBySeparator, 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,
|
financeSumAmount: 0,
|
settleSumAmount: 0,
|
parkCollectFileList: [] as CustomerApplyFileTypeListItem[],
|
calculationFileList: [] as CustomerApplyFileTypeListItem[],
|
|
suportPlatRecharge: 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),
|
},
|
extraProps: {
|
hide: (row: API.ParkBountyApplyTransferDetailInfo) =>
|
!(
|
row.settleStatus === SettleStatusEnum.WaitForSettle ||
|
row.financeStatus === FinanceStatusEnum.WaitForIncome
|
),
|
},
|
},
|
{
|
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.financeSumAmount = data.financeSumAmount;
|
form.settleSumAmount = data.settleSumAmount;
|
form.parkCollectFileList = EnterpriseApplyFileUtils.convertApiFileToParkCollectFileList(
|
data.listFiles
|
);
|
form.calculationFileList = EnterpriseApplyFileUtils.convertApiFileToParkCollectFileList(
|
data.collectCountListFiles
|
);
|
form.suportPlatRecharge = data.suportPlatRecharge;
|
|
getList();
|
},
|
});
|
|
const { dialogProps: dialogMaterialFileProps, handleAdd: handleMaterialFileAdd } = useFormDialog({
|
defaultFormParams: {
|
list: [] as TransferFileEnumInRewardGrandTableItem[],
|
},
|
});
|
|
function openMaterialFileDialog(row: API.ParkBountyApplyTransferDetailInfo) {
|
handleMaterialFileAdd({
|
list: FourStreamsMaterialUtils.initApplyRewardGrandFileList(row),
|
});
|
}
|
|
const {
|
dialogProps: dialogRegisterGrantProps,
|
handleEdit: handleRegisterGrantEdit,
|
editForm: editRegisterForm,
|
} = useFormDialog({
|
onConfirm: handleRegisterGrant,
|
defaultFormParams: {
|
incomeType: '' as any as IncomeTypeEnum,
|
parkBountyApplyId: '',
|
parkBountyApplyDetailId: '',
|
fileUrl: [] as UploadUserFile[],
|
amount: 0,
|
showSuportPlatRecharge: false,
|
showSuportFiscalRecharge: false,
|
},
|
});
|
|
function openRegisterGrantDialog(row?: API.ParkBountyApplyTransferDetailInfo) {
|
handleRegisterGrantEdit({
|
incomeType: '' as any as IncomeTypeEnum,
|
fileUrl: [] as UploadUserFile[],
|
showSuportPlatRecharge: row.settleStatus === SettleStatusEnum.WaitForSettle,
|
showSuportFiscalRecharge: row.financeStatus === FinanceStatusEnum.WaitForIncome,
|
parkBountyApplyId: row.parkBountyApplyId,
|
parkBountyApplyDetailId: row.parkBountyApplyDetailId,
|
amount: 0,
|
});
|
}
|
|
async function handleRegisterGrant() {
|
if (editRegisterForm.incomeType === IncomeTypeEnum.Fiscal) {
|
await parkBountyApplyFinanceReg();
|
} else {
|
await parkBountyApplyTransferReg();
|
}
|
}
|
|
async function parkBountyApplyFinanceReg() {
|
try {
|
let params: API.ParkBountyApplyRechargeInput = {
|
parkBountyApplyDetailId: editRegisterForm.parkBountyApplyDetailId,
|
bountyAmount: editRegisterForm.amount,
|
parkBountyApplyId: editRegisterForm.parkBountyApplyId,
|
financeToFileUrl: convertFormUrl2ApiBySeparator(editRegisterForm.fileUrl),
|
};
|
let res = await parkBountyApplyServices.parkBountyApplyFinanceReg(params);
|
if (res) {
|
Message.successMessage('操作成功');
|
getList(paginationState.pageIndex);
|
}
|
} catch (error) {}
|
}
|
async function parkBountyApplyTransferReg() {
|
try {
|
let params: API.ParkBountyApplyTransferInput = {
|
parkBountyApplyDetailId: editRegisterForm.parkBountyApplyDetailId,
|
transferToAmount: editRegisterForm.amount,
|
parkBountyApplyId: editRegisterForm.parkBountyApplyId,
|
transferToFileUrl: convertFormUrl2ApiBySeparator(editRegisterForm.fileUrl),
|
};
|
let res = await parkBountyApplyServices.parkBountyApplyTransferReg(params);
|
if (res) {
|
Message.successMessage('操作成功');
|
getList(paginationState.pageIndex);
|
}
|
} catch (error) {}
|
}
|
|
const {
|
dialogProps: dialogUploadFileProps,
|
handleAdd: handleUploadFileAdd,
|
editForm: uploadFileForm,
|
} = useFormDialog({
|
onConfirm: handleImportParkBountyData,
|
defaultFormParams: {
|
parkBountyApplyId: '',
|
url: [] as UploadUserFile[],
|
financeToFileUrl: [] as UploadUserFile[],
|
transferToFileUrl: [] as UploadUserFile[],
|
},
|
});
|
|
async function handleImportParkBountyData() {
|
try {
|
let params: API.ImportBountyApplyDataInput = {
|
parkBountyApplyId: uploadFileForm.parkBountyApplyId,
|
url: uploadFileForm.url?.[0]?.path ?? '',
|
financeToFileUrl: convertFormUrl2ApiBySeparator(uploadFileForm.financeToFileUrl),
|
transferToFileUrl: convertFormUrl2ApiBySeparator(uploadFileForm.transferToFileUrl),
|
};
|
let res = await parkBountyApplyServices.importParkBountyDataReg(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[],
|
financeToFileUrl: [] as UploadUserFile[],
|
transferToFileUrl: [] as UploadUserFile[],
|
});
|
}
|
|
async function openBatchRegisterDialog() {
|
try {
|
handleBatchRegisterAdd({
|
parkBountyApplyId: id,
|
showSuportPlatRecharge: form.suportPlatRecharge,
|
});
|
} 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,
|
|
fileUrl: [] as UploadUserFile[],
|
},
|
});
|
|
async function handleBatchRegister() {
|
if (batchRegisterEditForm.incomeType === IncomeTypeEnum.Fiscal) {
|
await parkBountyApplyBatchFinanceReg();
|
} else {
|
await parkBountyApplyBatchTransferReg();
|
}
|
}
|
|
async function parkBountyApplyBatchFinanceReg() {
|
try {
|
let params: API.ParkBountyApplyBatchFinanceInput = {
|
parkBountyApplyDetailId: batchRegisterEditForm.parkBountyApplyDetailIds,
|
financeToAmount: batchRegisterEditForm.amount,
|
parkBountyApplyId: id,
|
financeToFileUrl: convertFormUrl2ApiBySeparator(batchRegisterEditForm.fileUrl),
|
};
|
let res = await parkBountyApplyServices.parkBountyApplyBatchFinanceReg(params);
|
if (res) {
|
Message.successMessage('操作成功');
|
getList(paginationState.pageIndex);
|
}
|
} catch (error) {}
|
}
|
|
async function parkBountyApplyBatchTransferReg() {
|
try {
|
let params: API.ParkBountyApplyBatchTransferInput = {
|
parkBountyApplyDetailId: batchRegisterEditForm.parkBountyApplyDetailIds,
|
transferToAmount: batchRegisterEditForm.amount,
|
parkBountyApplyId: id,
|
transferToFileUrl: convertFormUrl2ApiBySeparator(batchRegisterEditForm.fileUrl),
|
};
|
let res = await parkBountyApplyServices.parkBountyApplyBatchTransferReg(params);
|
if (res) {
|
Message.successMessage('操作成功');
|
getList(paginationState.pageIndex);
|
}
|
} catch (error) {}
|
}
|
|
function downloadTemp() {
|
downloadFileByUrl(BountyBatchApplyTransferTemp, '登记模板');
|
}
|
|
function handleBack() {
|
closeViewPush(route, {
|
name: 'RewardGrant',
|
});
|
}
|
</script>
|
|
<style lang="scss" scoped>
|
@use '@/style/common.scss' as *;
|
</style>
|