wupengfei
2025-04-21 524b1febe13e9305e9a27c870e09819e0e363bbd
feat: 接口
12个文件已修改
2个文件已添加
468 ■■■■■ 已修改文件
src/components/commonView/DetailView.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/FourStreamsBatchMaterialFileDialog.vue 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/FourStreamsMaterialFileDialog.vue 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/FourStreamsMaterialFileTable.vue 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/MaterialInfoView.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/types.ts 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/utils/index.ts 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/ParkBountyApply.ts 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/typings.d.ts 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EnterpriseInfo/components/RewardGrantRecordView.vue 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/MaterialReview/MaterialReviewAudit.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/MaterialReview/MaterialReviewDetail.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Reward/RewardDeclareDetail.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Reward/RewardGrant.vue 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/DetailView.vue
@@ -36,6 +36,7 @@
    enterpriseOperateFileUrl: UploadUserFile[];
    bountyAssignFileUlr: UploadUserFile[];
    bountyCollectFileUrl: UploadUserFile[];
    enterpriseRelateFileUrl: UploadUserFile[];
  };
};
src/components/commonView/FourStreamsBatchMaterialFileDialog.vue
New file
@@ -0,0 +1,169 @@
<template>
  <ProDialog
    title="文件列表"
    v-model="visible"
    destroy-on-close
    draggable
    width="35%"
    :close-on-click-modal="false"
    :close-on-press-escape="false"
    :top="'22vh'"
  >
    <ProDialogTableWrapper :height="400">
      <ProTableQueryFilterBar :show-reset-btn="false">
        <template #query>
          <QueryFilterItem>
            <span class="query-label">{{ name }}</span>
          </QueryFilterItem>
        </template>
        <template #btn>
          <el-button type="primary" @click="handleBatchDownload">批量下载</el-button>
        </template>
      </ProTableQueryFilterBar>
      <ProTableV2
        :tableData="fileList"
        :columns="columns"
        :operationBtns="operationBtns"
        show-column-check
        ref="proTable"
      >
        <template #extension="{ row }">
          <img :src="getExtensionIconByUrl(row.url)" alt="" style="margin: 0 auto" />
        </template>
        <template #size="{ row }">
          {{ formatFileSize(row.size) }}
        </template>
      </ProTableV2>
    </ProDialogTableWrapper>
  </ProDialog>
</template>
<script setup lang="ts">
import {
  ProDialog,
  ProTableQueryFilterBar,
  QueryFilterItem,
  UploadUserFile,
  ProDialogTableWrapper,
  ProTableV2,
  defineColumns,
  defineOperationBtns,
  bolePreview,
  getExtensionIconByUrl,
} from '@bole-core/components';
import { format, downloadFileByUrl, formatFileSize } from '@/utils';
import { downloadWithZip, Message, isFileCanPreview } from '@bole-core/core';
defineOptions({
  name: 'FourStreamsBatchMaterialFileDialog',
});
type Props = {
  name?: string;
  zipName?: string;
  showDeleteBtn?: boolean;
};
const props = withDefaults(defineProps<Props>(), {
  showDeleteBtn: true,
});
const visible = defineModel<boolean>('visible');
const fileList = defineModel<UploadUserFile[]>('fileList');
const proTable = ref<InstanceType<typeof ProTableV2>>();
const columns = defineColumns([
  {
    id: '1',
    enCode: 'extension',
    name: '文件类型',
  },
  {
    id: '2',
    enCode: 'name',
    name: '文件名称',
  },
]);
const operationBtns = defineOperationBtns([
  // {
  //   data: {
  //     enCode: 'detailBtn',
  //     name: '查看',
  //   },
  //   emits: {
  //     onClick: (row) => handlePreview(row),
  //   },
  //   extraProps: {
  //     hide: (row: UploadUserFile) => !isFileCanPreview(row.path),
  //   },
  // },
  {
    data: {
      enCode: 'downloadBtn',
      name: '查看',
    },
    emits: {
      onClick: (row) => handleDownload(row),
    },
  },
  {
    data: {
      enCode: 'delBtn',
      name: '删除',
    },
    props: {
      type: 'danger',
    },
    emits: {
      onClick: (row) => handleDelete(row),
    },
    extraProps: {
      hide: (row) => !props.showDeleteBtn,
    },
  },
]);
async function handleDelete(row: UploadUserFile) {
  try {
    await Message.deleteMessage();
    fileList.value = fileList.value.filter((item) => item.uid !== row.uid);
  } catch (error) {}
}
function handleDownload(row: UploadUserFile) {
  downloadFileByUrl(row.url);
}
function handlePreview(row: UploadUserFile) {
  bolePreview({
    fileUrl: row.url,
  });
}
function handleBatchDownload() {
  if (fileList.value.length) {
    const res: UploadUserFile[] = proTable.value.innerTableRef.getSelectionRows();
    if (res.length > 0) {
      downloadWithZip(
        res.map((item) => ({ data: item.url })),
        props.zipName
      );
    } else {
      Message.errorMessage('未选择数据');
    }
  } else {
    Message.errorMessage('暂无数据');
  }
}
</script>
<style lang="scss" scoped>
@use '@/style/common.scss' as *;
.query-label {
  font-size: 16px;
  line-height: 40px;
}
</style>
src/components/commonView/FourStreamsMaterialFileDialog.vue
New file
@@ -0,0 +1,49 @@
<template>
  <ProDialog :title="title" v-model="visible" destroy-on-close draggable width="800px">
    <FourStreamsMaterialFileTable v-model:list="form.list" v-bind="props" />
    <template #footer>
      <span class="dialog-footer">
        <el-button type="primary" @click="handleConfirm">确 定</el-button>
      </span>
    </template>
  </ProDialog>
</template>
<script setup lang="ts" generic="T">
import { ProDialog } from '@bole-core/components';
import FourStreamsMaterialFileTable from './FourStreamsMaterialFileTable.vue';
import { FourStreamsMaterialFileTableProps, BaseMaterialFileTableItem } from './types';
defineOptions({
  name: 'FourStreamsMaterialFileDialog',
});
type Props = FourStreamsMaterialFileTableProps & {
  title?: string;
};
const props = withDefaults(defineProps<Props>(), {
  showUploadBtn: true,
  showCheckBtn: true,
  showDownloadBtn: true,
  showDeleteBtn: true,
  title: '材料详情',
});
const visible = defineModel({ type: Boolean });
type Form = {
  list: BaseMaterialFileTableItem<T>[];
};
const form = defineModel<Form>('form');
const emit = defineEmits<{
  (e: 'onConfirm'): void;
  (e: 'onCancel'): void;
}>();
function handleConfirm() {
  emit('onConfirm');
}
</script>
src/components/commonView/FourStreamsMaterialFileTable.vue
@@ -9,7 +9,7 @@
      :showTableColumnSetting="false"
    >
      <template #fileBusinessType="{ row }">
        {{ FourStreamsMaterialFileBusinessTypeEnumText[row.fileBusinessType] }}
        {{ BusinessTypeEnumText[row.fileBusinessType] }}
      </template>
      <template #operationBtn-uploadBtn="{ data, row }">
        <BlFileUpload
@@ -25,22 +25,31 @@
        </BlFileUpload>
      </template>
    </ProTableV2>
    <FourStreamsBatchMaterialFileDialog
      v-bind="dialogProps"
      :name="''"
      :zipName="`${BusinessTypeEnumText[currentFourStreamsMaterialFileTableItem.fileBusinessType as any]}`"
      v-model:fileList="currentFourStreamsMaterialFileTableItem.fileList"
      :showDeleteBtn="showDeleteBtn"
    />
  </div>
</template>
<script setup lang="ts">
<script setup lang="ts" generic="T">
import {
  FourStreamsMaterialFileTableProps,
  FourStreamsMaterialFileTableItem,
  FourStreamsMaterialFileBusinessTypeEnumText,
  BaseMaterialFileTableItem,
} from './types';
import {
  ProTableV2,
  defineColumns,
  defineOperationBtns,
  BlFileUpload,
  bolePreview,
  useDialog,
} from '@bole-core/components';
import FourStreamsBatchMaterialFileDialog from './FourStreamsBatchMaterialFileDialog.vue';
import { downloadFileByUrl } from '@/utils';
import { Message, isFileCanPreview } from '@bole-core/core';
import { useDefineColumns } from '@/hooks';
@@ -55,9 +64,10 @@
  showDownloadBtn: true,
  showDeleteBtn: true,
  downloadBtnText: '下载',
  BusinessTypeEnumText: () => FourStreamsMaterialFileBusinessTypeEnumText,
});
const list = defineModel<FourStreamsMaterialFileTableItem[]>('list');
const list = defineModel<BaseMaterialFileTableItem<T>[]>('list');
const columns = defineColumns([
  {
@@ -152,6 +162,12 @@
  } catch (error) {}
}
const currentFourStreamsMaterialFileTableItem = ref<BaseMaterialFileTableItem<T>>({
  fileBusinessType: 0 as any,
  fileList: [],
});
const { dialogProps, dialogState } = useDialog();
async function handlePreview(row: FourStreamsMaterialFileTableItem) {
  if (row.fileList.length > 1) {
    // currentEnterpriseMaterialFileTableItem.value = row;
src/components/commonView/MaterialInfoView.vue
@@ -23,8 +23,8 @@
  </ProFormCol>
  <ProFormCol>
    <ProFormColItem :span="12">
      <ProFormItemV2 label="入驻情况关联说明:" prop="enterpriseOperateFileUrl">
        <ProFormUpload v-model:file-url="form.enterpriseOperateFileUrl"></ProFormUpload>
      <ProFormItemV2 label="入驻情况关联说明:" prop="enterpriseRelateFileUrl">
        <ProFormUpload v-model:file-url="form.enterpriseRelateFileUrl"></ProFormUpload>
      </ProFormItemV2>
    </ProFormColItem>
  </ProFormCol>
@@ -47,6 +47,7 @@
  form: {
    enterpriseTaxSubFileUrl: UploadUserFile[];
    enterpriseOperateFileUrl: UploadUserFile[];
    enterpriseRelateFileUrl: UploadUserFile[];
  };
};
src/components/commonView/types.ts
@@ -1,4 +1,3 @@
import { EnterpriseMaterialFileBusinessTypeEnum } from '@/constants';
import { UploadUserFile } from '@bole-core/components';
export type FourStreamsMaterialFileTableProps = {
@@ -7,12 +6,19 @@
  showDownloadBtn?: boolean;
  showDeleteBtn?: boolean;
  downloadBtnText?: string;
  BusinessTypeEnumText?: { [key: number]: string };
};
export type FourStreamsMaterialFileTableItem = {
  fileBusinessType: FourStreamsMaterialFileBusinessTypeEnum;
export type BaseMaterialFileTableItem<T> = {
  fileBusinessType: T;
  fileList: UploadUserFile[];
};
export type FourStreamsMaterialFileTableItem =
  BaseMaterialFileTableItem<FourStreamsMaterialFileBusinessTypeEnum>;
export type ApplyTransferMaterialFileTableItem =
  BaseMaterialFileTableItem<ApplyTransferFileBusinessTypeEnum>;
export enum EnterpriseTypeEnum {
  /**
@@ -49,18 +55,25 @@
  TaxSubFileUrl = 30,
  /** 企业营收利润表 */
  OperateProfitesUrl = 40,
  /** 入驻关联说明 */
  /**
   * 入驻关联说明
   * @deprecated 已经不用了
   */
  EnterRelateUrl = 50,
  /** C端个税完税情况说明 */
  /** C端个税完税说明 */
  PersonTaxRatePayUrl = 60,
  /** C端个税完税说明 */
  PersonTaxInstructUrl = 70,
}
export const FourStreamsMaterialFileBusinessTypeEnumText = {
  [FourStreamsMaterialFileBusinessTypeEnum.ParkEnterPactUrl]: '园区入驻协议',
  [FourStreamsMaterialFileBusinessTypeEnum.RatePaymentFileUrl]: '企业完税证明(盖章)',
  [FourStreamsMaterialFileBusinessTypeEnum.TaxSubFileUrl]: '企业缴税明细汇总表(盖章)',
  [FourStreamsMaterialFileBusinessTypeEnum.OperateProfitesUrl]: '企业营收利润表',
  [FourStreamsMaterialFileBusinessTypeEnum.EnterRelateUrl]: '入驻关联说明',
  [FourStreamsMaterialFileBusinessTypeEnum.PersonTaxRatePayUrl]: 'C端个税完税情况说明',
  [FourStreamsMaterialFileBusinessTypeEnum.PersonTaxRatePayUrl]: 'C端个税完税说明',
  [FourStreamsMaterialFileBusinessTypeEnum.PersonTaxInstructUrl]: 'C端完税情况说明',
};
export const FourStreamsMaterialFileBusinessTypeEnumKey = {
@@ -70,4 +83,22 @@
  [FourStreamsMaterialFileBusinessTypeEnum.OperateProfitesUrl]: 'operateProfitesUrl',
  [FourStreamsMaterialFileBusinessTypeEnum.EnterRelateUrl]: 'enterRelateUrl',
  [FourStreamsMaterialFileBusinessTypeEnum.PersonTaxRatePayUrl]: 'personTaxRatePayUrl',
  [FourStreamsMaterialFileBusinessTypeEnum.PersonTaxInstructUrl]: 'personTaxInstructUrl',
} as const;
export enum ApplyTransferFileBusinessTypeEnum {
  /** 拨付凭证*/
  FinanceToFileUrl = 100,
  /** 充值凭证*/
  TransferToFileUrl = 110,
}
export const ApplyTransferFileBusinessTypeEnumText = {
  [ApplyTransferFileBusinessTypeEnum.FinanceToFileUrl]: '拨付凭证',
  [ApplyTransferFileBusinessTypeEnum.TransferToFileUrl]: '充值凭证',
};
export const ApplyTransferFileBusinessTypeEnumKey = {
  [ApplyTransferFileBusinessTypeEnum.FinanceToFileUrl]: 'financeToFileUrl',
  [ApplyTransferFileBusinessTypeEnum.TransferToFileUrl]: 'transferToFileUrl',
} as const;
src/components/commonView/utils/index.ts
@@ -1,5 +1,8 @@
import { convertApi2FormUrlOnlyOne } from '@/utils';
import { convertApi2FormUrl, convertApi2FormUrlOnlyOne } from '@/utils';
import {
  ApplyTransferFileBusinessTypeEnum,
  ApplyTransferFileBusinessTypeEnumKey,
  ApplyTransferMaterialFileTableItem,
  FourStreamsMaterialFileBusinessTypeEnum,
  FourStreamsMaterialFileBusinessTypeEnumKey,
  FourStreamsMaterialFileTableItem,
@@ -22,6 +25,12 @@
    FourStreamsMaterialFileBusinessTypeEnum.TaxSubFileUrl,
    FourStreamsMaterialFileBusinessTypeEnum.OperateProfitesUrl,
    FourStreamsMaterialFileBusinessTypeEnum.PersonTaxRatePayUrl,
  ];
  /**财政拨付和平台充值凭证 */
  static ApplyTransferMaterialFile = [
    ApplyTransferFileBusinessTypeEnum.FinanceToFileUrl,
    ApplyTransferFileBusinessTypeEnum.TransferToFileUrl,
  ];
  static isFourStreamsParkType(parkTypeName) {
@@ -55,6 +64,20 @@
      ])
    );
  }
  static initApplyTransferMaterialFileList<
    T extends { financeToFileUrl?: string; transferToFileUrl?: string }
  >(data: T) {
    return this.ApplyTransferMaterialFile.map((item) => {
      const filePathList = data[ApplyTransferFileBusinessTypeEnumKey[item]]
        ? data[ApplyTransferFileBusinessTypeEnumKey[item]].split('|')
        : [];
      return {
        fileBusinessType: item,
        fileList: filePathList.map(convertApi2FormUrl),
      } as ApplyTransferMaterialFileTableItem;
    });
  }
}
export class ParkTypeUtils {
src/services/api/ParkBountyApply.ts
@@ -95,6 +95,21 @@
  );
}
/** 获取企业最后一次上传的园区入驻协议文件 GET /api/ParkBountyApply/GetEnterpriseLastUploadEnterPactFile */
export async function getEnterpriseLastUploadEnterPactFile(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIgetEnterpriseLastUploadEnterPactFileParams,
  options?: API.RequestConfig
) {
  return request<string>('/api/ParkBountyApply/GetEnterpriseLastUploadEnterPactFile', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** 获取企业充值审核列表 POST /api/ParkBountyApply/GetEnterprisePreChargeCheckList */
export async function getEnterprisePreChargeCheckList(
  body: API.GetEnterprisePreChargeCheckListInput,
@@ -247,6 +262,24 @@
  );
}
/** 获取批量入账中未财政拨付的企业 GET /api/ParkBountyApply/GetParkBountyApplyBatchFinanceEnterprise */
export async function getParkBountyApplyBatchFinanceEnterprise(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIgetParkBountyApplyBatchFinanceEnterpriseParams,
  options?: API.RequestConfig
) {
  return request<API.GetNotTransferCompanyNameListOutput[]>(
    '/api/ParkBountyApply/GetParkBountyApplyBatchFinanceEnterprise',
    {
      method: 'GET',
      params: {
        ...params,
      },
      ...(options || {}),
    }
  );
}
/** 运营端-奖励金发放-入账-获取批量入账中未入账的企业 GET /api/ParkBountyApply/GetParkBountyApplyBatchTransferEnterprise */
export async function getParkBountyApplyBatchTransferEnterprise(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
src/services/api/typings.d.ts
@@ -1326,6 +1326,10 @@
    transactionDetailId?: string;
  }
  interface APIgetEnterpriseLastUploadEnterPactFileParams {
    companyId?: string;
  }
  interface APIgetEnterpriseMaterialIdByUserIdParams {
    userId?: string;
    materialType?: EnterpriseMaterialTypeEnum;
@@ -1558,6 +1562,10 @@
  interface APIgetParams {
    id?: string;
  }
  interface APIgetParkBountyApplyBatchFinanceEnterpriseParams {
    parkBountyApplyId?: string;
  }
  interface APIgetParkBountyApplyBatchTransferEnterpriseParams {
@@ -6693,6 +6701,8 @@
    userName?: string;
    /** 银行账户 */
    outBankNum?: string;
    /** 企业名称 */
    enterpriseName?: string;
    /** 出款企业账户名称 */
    outEnterpriseName?: string;
    /** 充值金额 */
@@ -6730,7 +6740,11 @@
    outBankResumeName?: string;
    /** 出账回单 */
    outReceiptFileUrl?: string;
    /** 审核备注 */
    checkRemark?: string;
    checkStatus?: EnterpriseRechargeStatusEnum;
    /** 提交日期 */
    creationTime?: string;
  }
  interface GetFeatureListResultDto {
@@ -14314,6 +14328,10 @@
    /** 内部审核原因 */
    inCheckRemark?: string;
    inCheckStatus?: BountyCheckStatusEnum;
    /** 财政拨付总额 */
    financeSumAmount?: number;
    /** 平台充值总额 */
    settleSumAmount?: number;
  }
  interface OutcheckParkBountyApplyInput {
@@ -14377,6 +14395,14 @@
    bountyCollectFileUrl?: string;
    /** 入驻关联说明 */
    enterpriseRelateFileUrl?: string;
    /** 发放凭证 */
    settleFileUrl?: string;
    /** 财政发放凭证 */
    financeFileUrl?: string;
    /** 充值金额 */
    settleSumAmount?: number;
    /** 财政发放金额 */
    financeSumAmount?: number;
  }
  interface ParkBountyApplyBatchFinanceInput {
@@ -14498,6 +14524,15 @@
    parkBountyApplyDetailId?: string;
    /** 入账凭证 */
    transferToFileUrl?: string;
    financeToStatus?: FinanceStatusEnum;
    /** 财政入账金额 */
    financeToAmount?: number;
    /** 财政入账时间 */
    financeToTime?: string;
    /** 财政入账凭证 */
    financeToFileUrl?: string;
    /** 财政入账操作用户 */
    financeToUserId?: string;
  }
  interface ParkBountyApplyTransferDetailInfoPageOutput {
src/views/EnterpriseInfo/components/RewardGrantRecordView.vue
@@ -2,14 +2,16 @@
  <LoadingLayout :loading="state.loading">
    <AppContainer>
      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
        <template #operationBtn-checkBtn="{ data, row }">
          <PreviewBtnV2
            class="pro-table-operation-btn"
            :url="convertApi2FormUrlBySeparator(row.transferToFileUrl ?? '')"
            preview-btn-text="查看凭证"
          />
        </template>
      </ProTableV2>
      <FourStreamsMaterialFileDialog
        v-bind="dialogMaterialFileProps"
        :show-upload-btn="false"
        :show-delete-btn="false"
        :show-check-btn="false"
        downloadBtnText="查看"
        title="查看凭证"
        :BusinessTypeEnumText="ApplyTransferFileBusinessTypeEnumText"
      />
    </AppContainer>
  </LoadingLayout>
</template>
@@ -20,12 +22,14 @@
  useTable,
  ProTableV2,
  defineOperationBtns,
  PreviewBtnV2,
  useFormDialog,
} from '@bole-core/components';
import { convertApi2FormUrlBySeparator } from '@/utils';
import { OrderInputType } from '@bole-core/core';
import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
import { IncomeStatusEnumText } from '@/constants';
import { ApplyTransferFileBusinessTypeEnumText } from '@/components/commonView/types';
import { FourStreamsMaterialUtils } from '@/components/commonView/utils';
import { ApplyTransferMaterialFileTableItem } from '@/components/commonView/types';
defineOptions({
  name: 'RewardGrantRecordView',
@@ -69,6 +73,9 @@
    data: {
      enCode: 'checkBtn',
      name: '查看凭证',
    },
    emits: {
      onClick: (row) => openMaterialFileDialog(row),
    },
  },
]);
@@ -118,7 +125,17 @@
  }
);
function handlePreview(row: API.InsureBatchBillDto) {}
function openMaterialFileDialog(row: API.ParkBountyApplyTransferDetailInfo) {
  handleMaterialFileAdd({
    list: FourStreamsMaterialUtils.initApplyTransferMaterialFileList(row),
  });
}
const { dialogProps: dialogMaterialFileProps, handleAdd: handleMaterialFileAdd } = useFormDialog({
  defaultFormParams: {
    list: [] as ApplyTransferMaterialFileTableItem[],
  },
});
onMounted(async () => {
  await getList();
src/views/MaterialReview/MaterialReviewAudit.vue
@@ -116,6 +116,7 @@
  enterpriseOperateFileUrl: [] as UploadUserFile[],
  bountyAssignFileUlr: [] as UploadUserFile[],
  bountyCollectFileUrl: [] as UploadUserFile[],
  enterpriseRelateFileUrl: [] as UploadUserFile[],
  status: '' as any as BountyCheckStatusEnum,
  remark: '',
@@ -142,6 +143,7 @@
    form.enterpriseOperateFileUrl = convertApi2FormUrlOnlyOne(data?.enterpriseOperateFileUrl);
    form.bountyAssignFileUlr = convertApi2FormUrlOnlyOne(data?.bountyAssignFileUlr);
    form.bountyCollectFileUrl = convertApi2FormUrlOnlyOne(data?.bountyCollectFileUrl);
    form.enterpriseRelateFileUrl = convertApi2FormUrlOnlyOne(data?.enterpriseRelateFileUrl);
    getList();
  },
src/views/MaterialReview/MaterialReviewDetail.vue
@@ -89,6 +89,7 @@
  enterpriseOperateFileUrl: [] as UploadUserFile[],
  bountyAssignFileUlr: [] as UploadUserFile[],
  bountyCollectFileUrl: [] as UploadUserFile[],
  enterpriseRelateFileUrl: [] as UploadUserFile[],
  outCheckStatus: '' as any as BountyCheckStatusEnum,
  outCheckRemark: '',
@@ -119,6 +120,7 @@
    form.enterpriseOperateFileUrl = convertApi2FormUrlOnlyOne(data?.enterpriseOperateFileUrl);
    form.bountyAssignFileUlr = convertApi2FormUrlOnlyOne(data?.bountyAssignFileUlr);
    form.bountyCollectFileUrl = convertApi2FormUrlOnlyOne(data?.bountyCollectFileUrl);
    form.enterpriseRelateFileUrl = convertApi2FormUrlOnlyOne(data?.enterpriseRelateFileUrl);
    getList();
  },
src/views/Reward/RewardDeclareDetail.vue
@@ -68,6 +68,7 @@
  enterpriseOperateFileUrl: [] as UploadUserFile[],
  bountyAssignFileUlr: [] as UploadUserFile[],
  bountyCollectFileUrl: [] as UploadUserFile[],
  enterpriseRelateFileUrl: [] as UploadUserFile[],
});
const { data: detail, isLoading } = useQuery({
@@ -80,7 +81,7 @@
      }
    );
  },
  placeholderData: () => ({} as API.ParkBountyApplyBaseInfo),
  placeholderData: () => ({} as API.OutCheckParkBountyApplyBaseInfo),
  onSuccess(data) {
    form.batchNo = data.batchNo;
    form.parkName = data.parkName;
@@ -91,6 +92,7 @@
    form.enterpriseOperateFileUrl = convertApi2FormUrlOnlyOne(data?.enterpriseOperateFileUrl);
    form.bountyAssignFileUlr = convertApi2FormUrlOnlyOne(data?.bountyAssignFileUlr);
    form.bountyCollectFileUrl = convertApi2FormUrlOnlyOne(data?.bountyCollectFileUrl);
    form.enterpriseRelateFileUrl = convertApi2FormUrlOnlyOne(data?.enterpriseRelateFileUrl);
    getList();
  },
src/views/Reward/RewardGrant.vue
@@ -47,14 +47,16 @@
      </ProTableQueryFilterBar>
      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
        <template #operationBtn-checkBtn="{ data, row }">
          <PreviewBtnV2
            class="pro-table-operation-btn"
            :url="convertApi2FormUrlBySeparator(row.settleFileUrl ?? '')"
            preview-btn-text="查看凭证"
          />
        </template>
      </ProTableV2>
      <FourStreamsMaterialFileDialog
        v-bind="dialogMaterialFileProps"
        :show-upload-btn="false"
        :show-delete-btn="false"
        :show-check-btn="false"
        downloadBtnText="查看"
        title="查看凭证"
        :BusinessTypeEnumText="ApplyTransferFileBusinessTypeEnumText"
      />
      <FinancialDialog v-bind="dialogFinancialProps"></FinancialDialog>
      <PlateformDialog v-bind="dialogPlateformProps"></PlateformDialog>
    </AppContainer>
@@ -75,10 +77,9 @@
  FieldDatePicker,
  useFormDialog,
  UploadUserFile,
  PreviewBtnV2,
} from '@bole-core/components';
import { Message, OrderInputType } from '@bole-core/core';
import { convertApi2FormUrlBySeparator, format } from '@/utils';
import { format } from '@/utils';
import { SettleStatusEnum, SettleStatusEnumText } from '@/constants';
import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
import FinancialDialog from './components/FinancialDialog.vue';
@@ -86,6 +87,11 @@
import _ from 'lodash';
import { ModelValueType } from 'element-plus';
import { useQueryClient } from '@tanstack/vue-query';
import { FourStreamsMaterialUtils } from '@/components/commonView/utils';
import {
  ApplyTransferMaterialFileTableItem,
  ApplyTransferFileBusinessTypeEnumText,
} from '@/components/commonView/types';
defineOptions({
  name: 'RewardGrant',
@@ -185,6 +191,9 @@
      enCode: 'checkBtn',
      name: '查看凭证',
    },
    emits: {
      onClick: (row) => openMaterialFileDialog(row),
    },
    extraProps: {
      hide: (row: API.GetParkBountyApplyListOutput) =>
        row.settleStatus === SettleStatusEnum.WaitForSettle,
@@ -259,6 +268,18 @@
  });
}
function openMaterialFileDialog(row: API.ParkBountyApplyTransferDetailInfo) {
  handleMaterialFileAdd({
    list: FourStreamsMaterialUtils.initApplyTransferMaterialFileList(row),
  });
}
const { dialogProps: dialogMaterialFileProps, handleAdd: handleMaterialFileAdd } = useFormDialog({
  defaultFormParams: {
    list: [] as ApplyTransferMaterialFileTableItem[],
  },
});
const queryClient = useQueryClient();
const {
  dialogProps: dialogFinancialProps,