wupengfei
9 天以前 aea28d0ad246cc8d6ce0744b8f101dd7c8fd474f
src/views/Reward/RewardGrant.vue
@@ -14,7 +14,18 @@
              @change="getList()"
            ></FieldDatePicker>
          </QueryFilterItem>
          <QueryFilterItem tip-content="发放日期">
          <QueryFilterItem tip-content="拨付日期">
            <FieldDatePicker
              v-model="extraParamState.financeTime"
              type="daterange"
              range-separator="~"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
              clearable
              @change="getList()"
            ></FieldDatePicker>
          </QueryFilterItem>
          <QueryFilterItem tip-content="充值日期">
            <FieldDatePicker
              v-model="extraParamState.settleTime"
              type="daterange"
@@ -25,10 +36,19 @@
              @change="getList()"
            ></FieldDatePicker>
          </QueryFilterItem>
          <QueryFilterItem>
          <QueryFilterItem tip-content="财政拨付状态">
            <FieldRadio
              v-model="extraParamState.financeStatus"
              :value-enum="FinanceStatusEnumTextV2Query"
              buttonStyle
              showAllBtn
              @change="getList()"
            />
          </QueryFilterItem>
          <QueryFilterItem tip-content="平台充值状态">
            <FieldRadio
              v-model="extraParamState.settleStatus"
              :value-enum="SettleStatusEnumText"
              :value-enum="SettleStatusEnumTextV2Query"
              buttonStyle
              showAllBtn
              @change="getList()"
@@ -48,17 +68,19 @@
      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
      </ProTableV2>
      <FourStreamsMaterialFileDialog
      <FourStreamsMaterialFileDialogV2
        v-bind="dialogMaterialFileProps"
        :show-upload-btn="false"
        :show-delete-btn="false"
        :show-check-btn="false"
        downloadBtnText="查看"
        title="查看凭证"
        :BusinessTypeEnumText="ApplyTransferFileBusinessTypeEnumText"
        :BusinessTypeEnumText="TransferFileEnumInRewardGrandText"
      />
      <FinancialDialog v-bind="dialogFinancialProps"></FinancialDialog>
      <PlateformDialog v-bind="dialogPlateformProps"></PlateformDialog>
      <RegisterDialog v-bind="dialogRegisterProps"></RegisterDialog>
      <UploadCertRewardDialog v-bind="dialogCertRewardProps"></UploadCertRewardDialog>
      <!-- <FinancialDialog v-bind="dialogFinancialProps"></FinancialDialog>
      <PlateformDialog v-bind="dialogPlateformProps"></PlateformDialog> -->
    </AppContainer>
  </LoadingLayout>
</template>
@@ -80,18 +102,27 @@
} from '@bole-core/components';
import { Message, OrderInputType } from '@bole-core/core';
import { format } from '@/utils';
import { SettleStatusEnum, SettleStatusEnumText } from '@/constants';
import {
  SettleStatusEnum,
  FinanceStatusEnum,
  TransferFileEnumInRewardGrandText,
  FinanceStatusEnumTextV2,
  FinanceStatusEnumTextV2Query,
  SettleStatusEnumTextV2,
  SettleStatusEnumTextV2Query,
  IncomeTypeEnum,
  BillStatusEnum,
} from '@/constants';
import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
import RegisterDialog from './components/RegisterDialog.vue';
import UploadCertRewardDialog from './components/UploadCertRewardDialog.vue';
import FinancialDialog from './components/FinancialDialog.vue';
import PlateformDialog from './components/PlateformDialog.vue';
import _ from 'lodash';
import { ModelValueType } from 'element-plus';
import { useQueryClient } from '@tanstack/vue-query';
import { TransferFileEnumInRewardGrandTableItem } from '@/components/commonView/types';
import { FourStreamsMaterialUtils } from '@/components/commonView/utils';
import {
  ApplyTransferMaterialFileTableItem,
  ApplyTransferFileBusinessTypeEnumText,
} from '@/components/commonView/types';
defineOptions({
  name: 'RewardGrant',
@@ -102,51 +133,61 @@
    id: '1',
    enCode: 'batchNo',
    name: '申请批次号',
    width: 160,
  },
  {
    id: '2',
    enCode: 'parkName',
    name: '申请园区',
    width: 250,
  },
  {
    id: '3',
    enCode: 'parkTypeName',
    name: '园区类型',
    width: 160,
  },
  {
    id: '4',
    enCode: 'applyMonth',
    name: '申请平台奖励月份',
    width: 160,
  },
  {
    id: '5',
    enCode: 'applySumAmount',
    name: '平台奖励汇总金额(元)',
    width: 180,
  },
  {
    id: '6',
    enCode: 'creationTime',
    name: '申报日期',
    width: 180,
  },
  {
    id: '7',
    enCode: 'settleStatus',
    name: '财政拨付状态',
    enCode: 'financeStatus',
    name: '财政拨付登记状态',
    width: 160,
  },
  {
    id: '8',
    enCode: 'settleTime',
    name: '拨付日期',
    enCode: 'financeTime',
    name: '登记拨付日期',
    width: 180,
  },
  {
    id: '9',
    enCode: 'settleStatus',
    name: '平台充值状态',
    name: '平台充值登记状态',
    width: 160,
  },
  {
    id: '10',
    enCode: 'settleTime',
    name: '充值日期',
    name: '登记充值日期',
    width: 180,
  },
];
@@ -160,30 +201,62 @@
      onClick: (role) => goDetail(role),
    },
  },
  // {
  //   data: {
  //     enCode: 'financialBtn',
  //     name: '财政拨付',
  //   },
  //   emits: {
  //     onClick: (role) => openFinancialDialog(role),
  //   },
  //   extraProps: {
  //     hide: (row: API.GetParkBountyApplyListOutput) =>
  //       row.financeStatus === FinanceStatusEnum.HasIncome,
  //   },
  // },
  // {
  //   data: {
  //     enCode: 'plateformBtn',
  //     name: '平台充值',
  //   },
  //   emits: {
  //     onClick: (role) => openPlateformDialog(role),
  //   },
  //   extraProps: {
  //     hide: (row: API.GetParkBountyApplyListOutput) =>
  //       row.settleStatus !== SettleStatusEnum.WaitForSettle,
  //   },
  // },
  {
    data: {
      enCode: 'financialBtn',
      name: '财政拨付',
      enCode: 'registerBtn',
      name: '登记',
    },
    emits: {
      onClick: (role) => openFinancialDialog(role),
      onClick: (role) => openRegisterDialog(role),
    },
    extraProps: {
      hide: (row: API.GetParkBountyApplyListOutput) =>
        row.settleStatus === SettleStatusEnum.HasSettle,
        !(
          row.settleStatus === SettleStatusEnum.WaitForSettle ||
          row.financeStatus === FinanceStatusEnum.WaitForIncome
        ),
    },
  },
  {
    data: {
      enCode: 'plateformBtn',
      name: '平台充值',
      enCode: 'uploadCertBtn',
      name: '上传凭证',
    },
    emits: {
      onClick: (role) => openPlateformDialog(role),
      onClick: (role) => openCertRewardDialog(role),
    },
    extraProps: {
      hide: (row: API.GetParkBountyApplyListOutput) =>
        row.settleStatus === SettleStatusEnum.HasSettle,
        !(
          row.settleStatus === SettleStatusEnum.HasSettle ||
          row.financeStatus === FinanceStatusEnum.HasIncome
        ),
    },
  },
  {
@@ -196,7 +269,10 @@
    },
    extraProps: {
      hide: (row: API.GetParkBountyApplyListOutput) =>
        row.settleStatus === SettleStatusEnum.WaitForSettle,
        !(
          row.settleStatus === SettleStatusEnum.HasBill ||
          row.financeStatus === FinanceStatusEnum.HasBill
        ),
    },
  },
]);
@@ -230,10 +306,13 @@
        },
        batchNo: extraParamState.batchNo,
        settleStatus: extraParamState.settleStatus,
        financeStatus: extraParamState.financeStatus,
        creationTimeBegin: format(extraParamState.creationTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
        creationTimeEnd: format(extraParamState.creationTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
        settleTimeBegin: format(extraParamState.settleTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
        settleTimeEnd: format(extraParamState.settleTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
        financeTimeBegin: format(extraParamState.financeTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
        financeTimeEnd: format(extraParamState.financeTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
      };
      let res = await parkBountyApplyServices.getParkBountyApplyList(params, {
        showLoading: !state.loading,
@@ -245,21 +324,25 @@
    defaultExtraParams: {
      batchNo: '',
      settleStatus: '' as any as SettleStatusEnum,
      financeStatus: '' as any as FinanceStatusEnum,
      creationTime: [] as unknown as ModelValueType,
      settleTime: [] as unknown as ModelValueType,
      financeTime: [] as unknown as ModelValueType,
      orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
    },
    columnsRenderProps: {
      applyMonth: { type: 'date', format: 'YYYY年MM月' },
      creationTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' },
      settleTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' },
      financeTime: { type: 'date', format: 'YYYY-MM-DD HH:mm:ss' },
      applySumAmount: { type: 'money' },
      settleStatus: { type: 'enum', valueEnum: SettleStatusEnumText },
      settleStatus: { type: 'enum', valueEnum: SettleStatusEnumTextV2 },
      financeStatus: { type: 'enum', valueEnum: FinanceStatusEnumTextV2 },
    },
  }
);
function goDetail(row: any) {
function goDetail(row: API.GetParkBountyApplyListOutput) {
  router.push({
    name: 'RewardDeclareDetail',
    params: {
@@ -268,46 +351,97 @@
  });
}
function openMaterialFileDialog(row: API.ParkBountyApplyTransferDetailInfo) {
function openMaterialFileDialog(row: API.GetParkBountyApplyListOutput) {
  handleMaterialFileAdd({
    list: FourStreamsMaterialUtils.initApplyTransferMaterialFileList(row),
    list: FourStreamsMaterialUtils.initApplyRewardGrandFileList(row),
  });
}
const { dialogProps: dialogMaterialFileProps, handleAdd: handleMaterialFileAdd } = useFormDialog({
  defaultFormParams: {
    list: [] as ApplyTransferMaterialFileTableItem[],
    list: [] as TransferFileEnumInRewardGrandTableItem[],
  },
});
const queryClient = useQueryClient();
// const {
//   dialogProps: dialogFinancialProps,
//   handleEdit: handleFinancialEdit,
//   editForm: editFinancialForm,
// } = useFormDialog({
//   onConfirm: handleFinancial,
//   defaultFormParams: {
//     parkBountyApplyId: '',
//     financeSumAmount: 0,
//     financeFileUrl: [] as UploadUserFile[],
//   },
// });
// function openFinancialDialog(row?: API.GetParkBountyApplyListOutput) {
//   handleFinancialEdit({
//     parkBountyApplyId: row.id,
//     financeSumAmount: 0,
//     financeFileUrl: [] as UploadUserFile[],
//   });
// }
// async function handleFinancial() {
//   try {
//     let params: API.ParkBountyApplyFinanceFileInput = {
//       parkBountyApplyId: editFinancialForm.parkBountyApplyId,
//       financeSumAmount: editFinancialForm.financeSumAmount,
//       financeFileUrl: editFinancialForm.financeFileUrl.map((x) => x.path).join('|'),
//     };
//     let res = await parkBountyApplyServices.parkBountyApplyFinanceBill(params);
//     if (res) {
//       Message.successMessage('操作成功');
//       getList(paginationState.pageIndex);
//       queryClient.invalidateQueries({
//         queryKey: ['parkBountyApplyServices/getGoverDataBoard'],
//       });
//     }
//   } catch (error) {}
// }
const {
  dialogProps: dialogFinancialProps,
  handleEdit: handleFinancialEdit,
  editForm: editFinancialForm,
  dialogProps: dialogRegisterProps,
  handleEdit: handleRegisterEdit,
  editForm: editRegisterForm,
} = useFormDialog({
  onConfirm: handleFinancial,
  onConfirm: handleRegister,
  defaultFormParams: {
    incomeType: '' as any as IncomeTypeEnum,
    parkBountyApplyId: '',
    amount: 0,
    settleFileUrl: [] as UploadUserFile[],
    financeSumAmount: 0,
    showSuportPlatRecharge: false,
    showSuportFiscalRecharge: false,
  },
});
function openFinancialDialog(row?: API.GetParkBountyApplyListOutput) {
  handleFinancialEdit({
function openRegisterDialog(row?: API.GetParkBountyApplyListOutput) {
  handleRegisterEdit({
    incomeType: '' as any as IncomeTypeEnum,
    showSuportPlatRecharge: row.settleStatus === SettleStatusEnum.WaitForSettle,
    showSuportFiscalRecharge: row.financeStatus === FinanceStatusEnum.WaitForIncome,
    parkBountyApplyId: row.id,
    amount: 0,
    settleFileUrl: [] as UploadUserFile[],
    financeSumAmount: 0,
  });
}
async function handleFinancial() {
async function handleRegister() {
  try {
    let params: API.ParkBountyApplySettleInput = {
      parkBountyApplyId: editFinancialForm.parkBountyApplyId,
      settleFileUrl: editFinancialForm.settleFileUrl.map((x) => x.path).join('|'),
    let params = {
      parkBountyApplyId: editRegisterForm.parkBountyApplyId,
    };
    let res = await parkBountyApplyServices.parkBountyApplySettle(params);
    let res;
    if (editRegisterForm.incomeType === IncomeTypeEnum.Fiscal) {
      (params as API.ParkBountyApplyFinanceFileInput).financeSumAmount =
        editRegisterForm.financeSumAmount;
      res = await parkBountyApplyServices.parkBountyApplyFinanceBillAmount(params);
    }
    if (editRegisterForm.incomeType === IncomeTypeEnum.Platform) {
      (params as API.ParkBountyApplySettleInput).settleSumAmount =
        editRegisterForm.financeSumAmount;
      res = await parkBountyApplyServices.parkBountyApplySettleAmount(params);
    }
    if (res) {
      Message.successMessage('操作成功');
      getList(paginationState.pageIndex);
@@ -318,28 +452,96 @@
  } catch (error) {}
}
// const {
//   dialogProps: dialogPlateformProps,
//   handleEdit: handlePlateformEdit,
//   editForm: editPlateformForm,
// } = useFormDialog({
//   onConfirm: handlePlateform,
//   defaultFormParams: {
//     parkBountyApplyId: '',
//     settleSumAmount: 0,
//     settleFileUrl: [] as UploadUserFile[],
//   },
// });
// function openPlateformDialog(row?: API.GetParkBountyApplyListOutput) {
//   handlePlateformEdit({
//     parkBountyApplyId: row.id,
//     settleSumAmount: 0,
//     settleFileUrl: [] as UploadUserFile[],
//   });
// }
// async function handlePlateform() {
//   try {
//     let params: API.ParkBountyApplySettleInput = {
//       parkBountyApplyId: editPlateformForm.parkBountyApplyId,
//       settleSumAmount: editPlateformForm.settleSumAmount,
//       settleFileUrl: editPlateformForm.settleFileUrl.map((x) => x.path).join('|'),
//     };
//     let res = await parkBountyApplyServices.parkBountyApplySettle(params);
//     if (res) {
//       Message.successMessage('操作成功');
//       getList(paginationState.pageIndex);
//       queryClient.invalidateQueries({
//         queryKey: ['parkBountyApplyServices/getGoverDataBoard'],
//       });
//     }
//   } catch (error) {}
// }
const {
  dialogProps: dialogPlateformProps,
  handleEdit: handlePlateformEdit,
  editForm: editPlateformForm,
  dialogProps: dialogCertRewardProps,
  handleEdit: handleCertRewardEdit,
  editForm: editCertRewardForm,
} = useFormDialog({
  onConfirm: handlePlateform,
  onConfirm: handleCertReward,
  defaultFormParams: {
    incomeType: '' as any as IncomeTypeEnum,
    parkBountyApplyId: '',
    amount: 0,
    settleFileUrl: [] as UploadUserFile[],
    fileUrl: [] as UploadUserFile[],
    showSuportPlatRecharge: false,
    showSuportFiscalRecharge: false,
  },
});
function openPlateformDialog(row?: API.GetParkBountyApplyListOutput) {
  handlePlateformEdit({
function openCertRewardDialog(row?: API.GetParkBountyApplyListOutput) {
  handleCertRewardEdit({
    incomeType: '' as any as IncomeTypeEnum,
    showSuportPlatRecharge: row.settleStatus === SettleStatusEnum.HasSettle,
    showSuportFiscalRecharge: row.financeStatus === FinanceStatusEnum.HasIncome,
    parkBountyApplyId: row.id,
    amount: 0,
    settleFileUrl: [] as UploadUserFile[],
    fileUrl: [] as UploadUserFile[],
  });
}
async function handlePlateform() {}
async function handleCertReward() {
  try {
    let params: API.ParkBountyApplyFinanceFileInput = {
      parkBountyApplyId: editCertRewardForm.parkBountyApplyId,
    };
    let res;
    if (editCertRewardForm.incomeType === IncomeTypeEnum.Fiscal) {
      (params as API.ParkBountyApplyFinanceFileInput).financeFileUrl = editCertRewardForm.fileUrl
        .map((x) => x.path)
        .join('|');
      res = await parkBountyApplyServices.parkBountyApplyFinanceBill(params);
    }
    if (editCertRewardForm.incomeType === IncomeTypeEnum.Platform) {
      (params as API.ParkBountyApplySettleInput).settleFileUrl = editCertRewardForm.fileUrl
        .map((x) => x.path)
        .join('|');
      res = await parkBountyApplyServices.parkBountyApplySettle(params);
    }
    if (res) {
      Message.successMessage('操作成功');
      getList(paginationState.pageIndex);
      queryClient.invalidateQueries({
        queryKey: ['parkBountyApplyServices/getGoverDataBoard'],
      });
    }
  } catch (error) {}
}
</script>
<style lang="scss" scoped>