782da0949237a872d285368f2e93f0bcd5aa64ef..6bac509f8e6efc205d9f37a84c9b019ec828467a
2025-05-07 wupengfei
feat: 接口
6bac50 对比 | 目录
2025-05-06 wupengfei
feat: 接口
e9dda9 对比 | 目录
2025-04-30 wupengfei
feat: 接口
b3fda4 对比 | 目录
2025-04-28 wupengfei
feat: 接口
35a917 对比 | 目录
2025-04-25 wupengfei
feat: 页面
e446ab 对比 | 目录
21个文件已修改
4个文件已添加
1601 ■■■■ 已修改文件
src/components/commonView/DetailView.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/FourStreamsMaterialFileDialogV2.vue 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/FourStreamsMaterialFileTable.vue 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/FourStreamsMaterialFileTableV2.vue 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/MateriaDetailDialog.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/MaterialInfoView.vue 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/SettlementMaterialInfoView.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/types.ts 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/utils/index.ts 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/fourStreams.ts 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/reward.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.ts 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/EnterpriseApplyFile.ts 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/IndustrialPark.ts 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/ParkBountyApply.ts 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/SearchSetting.ts 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/index.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/typings.d.ts 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/common/file.ts 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EnterpriseInfo/components/RewardGrantRecordView.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/MaterialReview/MaterialReviewAudit.vue 80 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/MaterialReview/MaterialReviewDetail.vue 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Reward/RewardDeclareDetail.vue 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Reward/RewardGrant.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/commonView/DetailView.vue
@@ -1,6 +1,6 @@
<template>
  <ProForm :model="form" label-width="160px" label-position="left" is-read>
    <ChunkCellV2 title="材料审核" style="margin-bottom: 0">
    <ChunkCellV2 title="批次信息" style="margin-bottom: 0">
      <BatchInfoView :form="form"></BatchInfoView>
    </ChunkCellV2>
    <ChunkCellV2 title="汇总材料" style="margin-bottom: 0">
@@ -19,6 +19,7 @@
import BatchInfoView from './BatchInfoView.vue';
import MaterialInfoView from './MaterialInfoView.vue';
import SettlementMaterialInfoView from './SettlementMaterialInfoView.vue';
import { CustomerApplyFileTypeListItem } from './utils';
defineOptions({
  name: 'DetailView',
@@ -32,11 +33,13 @@
    parkTypeName: string;
    applyMonth: string;
    applySumAmount: number;
    enterpriseTaxSubFileUrl: UploadUserFile[];
    enterpriseOperateFileUrl: UploadUserFile[];
    /** 奖励金分配表 */
    bountyAssignFileUlr: UploadUserFile[];
    /** 奖励金汇总表 */
    bountyCollectFileUrl: UploadUserFile[];
    enterpriseRelateFileUrl: UploadUserFile[];
    parkCollectFileList: CustomerApplyFileTypeListItem[];
    /** 是否支持平台充值 */
    suportPlatRecharge?: boolean;
  };
};
src/components/commonView/FourStreamsMaterialFileDialogV2.vue
New file
@@ -0,0 +1,50 @@
<template>
  <ProDialog :title="title" v-model="visible" destroy-on-close draggable width="800px">
    <FourStreamsMaterialFileTableV2 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 FourStreamsMaterialFileTableV2 from './FourStreamsMaterialFileTableV2.vue';
import { FourStreamsMaterialFileTableProps, BaseMaterialFileTableItem } from './types';
defineOptions({
  name: 'FourStreamsMaterialFileDialogV2',
});
type Props = FourStreamsMaterialFileTableProps & {
  title?: string;
  BusinessTypeEnumText: { [key: number]: 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
@@ -8,14 +8,11 @@
      :operationColumnWidth="240"
      :showTableColumnSetting="false"
    >
      <template #fileBusinessType="{ row }">
        {{ BusinessTypeEnumText[row.fileBusinessType] }}
      </template>
      <template #operationBtn-uploadBtn="{ data, row }">
        <BlFileUpload
          v-model:file-url="row.fileList"
          v-model:file-url="row.listFiles"
          multiple
          :limit="1"
          :limit="99"
          ref="uploadRef"
          :showTip="false"
          :show-file-list="false"
@@ -28,19 +25,17 @@
    <FourStreamsBatchMaterialFileDialog
      v-bind="dialogProps"
      :name="''"
      :zipName="`${BusinessTypeEnumText[currentFourStreamsMaterialFileTableItem.fileBusinessType as any]}`"
      v-model:fileList="currentFourStreamsMaterialFileTableItem.fileList"
      :zipName="currentFourStreamsMaterialFileTableItem.fileTypeName"
      v-model:fileList="currentFourStreamsMaterialFileTableItem.listFiles"
      :showDeleteBtn="showDeleteBtn"
      :yearMonth="date"
      :onDelete="(file) => handleDialogDelete(currentFourStreamsMaterialFileTableItem, file)"
    />
  </div>
</template>
<script setup lang="ts" generic="T">
import {
  FourStreamsMaterialFileTableProps,
  BaseMaterialFileTableItem,
  FourStreamsMaterialFileBusinessTypeEnumText,
} from './types';
import { FourStreamsMaterialFileTableProps } from './types';
import {
  ProTableV2,
  defineColumns,
@@ -48,11 +43,13 @@
  BlFileUpload,
  bolePreview,
  useDialog,
  UploadUserFile,
} from '@bole-core/components';
import { downloadFileByUrl } from '@/utils';
import { Message, isFileCanPreview, downloadWithZip } from '@bole-core/core';
import { useDefineColumns } from '@/hooks';
import FourStreamsBatchMaterialFileDialog from './FourStreamsBatchMaterialFileDialog.vue';
import { CustomerApplyFileTypeListItem } from './utils';
defineOptions({
  name: 'FourStreamsMaterialFileTable',
@@ -64,15 +61,14 @@
  showDownloadBtn: true,
  showDeleteBtn: true,
  downloadBtnText: '下载',
  BusinessTypeEnumText: () => FourStreamsMaterialFileBusinessTypeEnumText,
});
const list = defineModel<BaseMaterialFileTableItem<T>[]>('list');
const list = defineModel<CustomerApplyFileTypeListItem[]>('list');
const columns = defineColumns([
  {
    id: '1',
    enCode: 'fileBusinessType',
    enCode: 'fileTypeName',
    name: '材料名称',
  },
]);
@@ -85,10 +81,11 @@
        name: '上传',
      },
      extraProps: {
        hide: (row: BaseMaterialFileTableItem<T>) => {
          if (!props.showUploadBtn) return true;
          let fileList = row?.fileList?.filter?.((item) => item.status === 'success');
          return fileList?.length > 0;
        hide: (row: CustomerApplyFileTypeListItem) => {
          return !props.showUploadBtn;
          // if (!props.showUploadBtn) return true;
          // let fileList = row?.fileList?.filter?.((item) => item.status === 'success');
          // return fileList?.length > 0;
        },
      },
    },
@@ -101,9 +98,9 @@
        onClick: (row) => handlePreview(row),
      },
      extraProps: {
        hide: (row: BaseMaterialFileTableItem<T>) => {
        hide: (row: CustomerApplyFileTypeListItem) => {
          if (!props.showCheckBtn) return true;
          let fileList = row?.fileList?.filter?.((item) => item.status === 'success');
          let fileList = row?.listFiles?.filter?.((item) => item.status === 'success');
          if (!fileList?.length) {
            return true;
          } else {
@@ -125,10 +122,10 @@
        onClick: (row) => handleBatchDownload(row),
      },
      extraProps: {
        hide: (row: BaseMaterialFileTableItem<T>) => {
        hide: (row: CustomerApplyFileTypeListItem) => {
          return (
            !props.showDownloadBtn ||
            !row?.fileList?.filter?.((item) => item.status === 'success')?.length
            !row?.listFiles?.filter?.((item) => item.status === 'success')?.length
          );
        },
      },
@@ -145,9 +142,9 @@
        onClick: (row) => handleDelete(row),
      },
      extraProps: {
        hide: (row: BaseMaterialFileTableItem<T>) => {
        hide: (row: CustomerApplyFileTypeListItem) => {
          if (!props.showDeleteBtn) return true;
          let fileList = row?.fileList?.filter?.((item) => item.status === 'success');
          let fileList = row?.listFiles?.filter?.((item) => item.status === 'success');
          return !fileList?.length;
        },
      },
@@ -155,33 +152,53 @@
  ],
});
async function handleDelete(row: BaseMaterialFileTableItem<T>) {
async function handleDelete(row: CustomerApplyFileTypeListItem) {
  try {
    await Message.deleteMessage();
    row.fileList = [];
    if (row.listFiles.length > 1) {
      currentFourStreamsMaterialFileTableItem.value = row;
      await nextTick();
      dialogState.dialogVisible = true;
    } else {
      await Message.deleteMessage();
      if (props.onDelete) {
        await props.onDelete(row, row.listFiles[0].id);
      }
      row.listFiles = [];
    }
  } catch (error) {}
}
const currentFourStreamsMaterialFileTableItem = ref<BaseMaterialFileTableItem<T>>({
  fileBusinessType: 0 as any,
  fileList: [],
async function handleDialogDelete(
  row: CustomerApplyFileTypeListItem,
  listFile: API.CustomerUploadMonthApplyFileTypeDto & UploadUserFile
) {
  if (props.onDelete) {
    await props.onDelete(row, listFile.id);
  }
}
const currentFourStreamsMaterialFileTableItem = ref<CustomerApplyFileTypeListItem>({
  fileSearchTypeId: '',
  fileTypeName: '',
  lastUpdateTime: '',
  listFiles: [],
});
const { dialogProps, dialogState } = useDialog();
async function handlePreview(row: BaseMaterialFileTableItem<T>) {
  if (row.fileList.length > 1) {
async function handlePreview(row: CustomerApplyFileTypeListItem) {
  if (row.listFiles.length > 1) {
    currentFourStreamsMaterialFileTableItem.value = row;
    await nextTick();
    dialogState.dialogVisible = true;
  } else {
    bolePreview({
      fileUrl: row.fileList[0].url,
      fileUrl: row.listFiles[0].url,
    });
  }
}
async function handleBatchDownload(row: BaseMaterialFileTableItem<T>) {
  const successFileList = row.fileList.filter((item) => item.status === 'success');
async function handleBatchDownload(row: CustomerApplyFileTypeListItem) {
  const successFileList = row.listFiles.filter((item) => item.status === 'success');
  if (successFileList.length === 0) {
    Message.errorMessage('没有可下载的文件');
    return;
src/components/commonView/FourStreamsMaterialFileTableV2.vue
New file
@@ -0,0 +1,206 @@
<template>
  <div>
    <ProTableV2
      :tableData="list"
      :columns="columns"
      :autoHeight="false"
      :operationBtns="columnsProps.operationBtns"
      :operationColumnWidth="240"
      :showTableColumnSetting="false"
    >
      <template #fileBusinessType="{ row }">
        {{ BusinessTypeEnumText[row.fileBusinessType] }}
      </template>
      <template #operationBtn-uploadBtn="{ data, row }">
        <BlFileUpload
          v-model:file-url="row.fileList"
          multiple
          :limit="1"
          ref="uploadRef"
          :showTip="false"
          :show-file-list="false"
          class="pro-table-operation-btn upload-style-btn"
        >
          <el-button text type="primary" class="pro-table-operation-btn">上传</el-button>
        </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" generic="T">
import { FourStreamsMaterialFileTableProps, BaseMaterialFileTableItem } from './types';
import {
  ProTableV2,
  defineColumns,
  defineOperationBtns,
  BlFileUpload,
  bolePreview,
  useDialog,
} from '@bole-core/components';
import { downloadFileByUrl } from '@/utils';
import { Message, isFileCanPreview, downloadWithZip } from '@bole-core/core';
import { useDefineColumns } from '@/hooks';
import FourStreamsBatchMaterialFileDialog from './FourStreamsBatchMaterialFileDialog.vue';
import { FourStreamsMaterialFileBusinessTypeEnumText } from '@/constants';
defineOptions({
  name: 'FourStreamsMaterialFileTableV2',
});
type Props = FourStreamsMaterialFileTableProps & {
  BusinessTypeEnumText: { [key: number]: string };
};
const props = withDefaults(defineProps<Props>(), {
  showUploadBtn: true,
  showCheckBtn: true,
  showDownloadBtn: true,
  showDeleteBtn: true,
  downloadBtnText: '下载',
  BusinessTypeEnumText: () => FourStreamsMaterialFileBusinessTypeEnumText,
});
const list = defineModel<BaseMaterialFileTableItem<T>[]>('list');
const columns = defineColumns([
  {
    id: '1',
    enCode: 'fileBusinessType',
    name: '材料名称',
  },
]);
const columnsProps = useDefineColumns({
  operationBtns: [
    {
      data: {
        enCode: 'uploadBtn',
        name: '上传',
      },
      extraProps: {
        hide: (row: BaseMaterialFileTableItem<T>) => {
          if (!props.showUploadBtn) return true;
          let fileList = row?.fileList?.filter?.((item) => item.status === 'success');
          return fileList?.length > 0;
        },
      },
    },
    {
      data: {
        enCode: 'detailBtn',
        name: '查看',
      },
      emits: {
        onClick: (row) => handlePreview(row),
      },
      extraProps: {
        hide: (row: BaseMaterialFileTableItem<T>) => {
          if (!props.showCheckBtn) return true;
          let fileList = row?.fileList?.filter?.((item) => item.status === 'success');
          if (!fileList?.length) {
            return true;
          } else {
            if (fileList.length > 1) {
              return false;
            } else {
              return !isFileCanPreview(fileList[0].path);
            }
          }
        },
      },
    },
    {
      data: {
        enCode: 'downloadBtn',
        name: props.downloadBtnText,
      },
      emits: {
        onClick: (row) => handleBatchDownload(row),
      },
      extraProps: {
        hide: (row: BaseMaterialFileTableItem<T>) => {
          return (
            !props.showDownloadBtn ||
            !row?.fileList?.filter?.((item) => item.status === 'success')?.length
          );
        },
      },
    },
    {
      data: {
        enCode: 'delBtn',
        name: '删除',
      },
      props: {
        type: 'danger',
      },
      emits: {
        onClick: (row) => handleDelete(row),
      },
      extraProps: {
        hide: (row: BaseMaterialFileTableItem<T>) => {
          if (!props.showDeleteBtn) return true;
          let fileList = row?.fileList?.filter?.((item) => item.status === 'success');
          return !fileList?.length;
        },
      },
    },
  ],
});
async function handleDelete(row: BaseMaterialFileTableItem<T>) {
  try {
    await Message.deleteMessage();
    row.fileList = [];
  } catch (error) {}
}
const currentFourStreamsMaterialFileTableItem = ref<BaseMaterialFileTableItem<T>>({
  fileBusinessType: 0 as any,
  fileList: [],
});
const { dialogProps, dialogState } = useDialog();
async function handlePreview(row: BaseMaterialFileTableItem<T>) {
  if (row.fileList.length > 1) {
    currentFourStreamsMaterialFileTableItem.value = row;
    await nextTick();
    dialogState.dialogVisible = true;
  } else {
    bolePreview({
      fileUrl: row.fileList[0].url,
    });
  }
}
async function handleBatchDownload(row: BaseMaterialFileTableItem<T>) {
  const successFileList = row.fileList.filter((item) => item.status === 'success');
  if (successFileList.length === 0) {
    Message.errorMessage('没有可下载的文件');
    return;
  }
  if (successFileList.length === 1) {
    downloadFileByUrl(successFileList[0].url);
  } else {
    // downloadWithZip(
    //   successFileList.map((item) => ({ data: item.url })),
    //   `${props.BusinessTypeEnumText[row.fileBusinessType as any]}`
    // );
    currentFourStreamsMaterialFileTableItem.value = row;
    await nextTick();
    dialogState.dialogVisible = true;
  }
}
</script>
<style lang="scss" scoped>
@use '@/style/common.scss' as *;
</style>
src/components/commonView/MateriaDetailDialog.vue
@@ -12,7 +12,8 @@
<script setup lang="ts">
import { ProDialog } from '@bole-core/components';
import FourStreamsMaterialFileTable from './FourStreamsMaterialFileTable.vue';
import { FourStreamsMaterialFileTableProps, FourStreamsMaterialFileTableItem } from './types';
import { FourStreamsMaterialFileTableProps } from './types';
import { CustomerApplyFileTypeListItem } from './utils';
defineOptions({
  name: 'MateriaDetailDialog',
@@ -30,7 +31,7 @@
const visible = defineModel({ type: Boolean });
type Form = {
  list: FourStreamsMaterialFileTableItem[];
  list: CustomerApplyFileTypeListItem[];
};
const form = defineModel<Form>('form');
src/components/commonView/MaterialInfoView.vue
@@ -1,33 +1,25 @@
<template>
  <ProFormCol>
    <ProFormColItem :span="12">
      <ProFormItemV2
        label="企业缴税明细汇总表:"
        prop="enterpriseTaxSubFileUrl"
        style="margin-bottom: 22px"
      >
        <ProFormUpload v-model:file-url="form.enterpriseTaxSubFileUrl"></ProFormUpload>
      </ProFormItemV2>
    </ProFormColItem>
  </ProFormCol>
  <ProFormCol>
    <ProFormColItem :span="12">
      <ProFormItemV2
        label="企业营收汇总表:"
        prop="enterpriseOperateFileUrl"
        style="margin-bottom: 22px"
      >
        <ProFormUpload v-model:file-url="form.enterpriseOperateFileUrl"></ProFormUpload>
      </ProFormItemV2>
    </ProFormColItem>
  </ProFormCol>
  <ProFormCol>
    <ProFormColItem :span="12">
      <ProFormItemV2 label="入驻情况关联说明:" prop="enterpriseRelateFileUrl">
        <ProFormUpload v-model:file-url="form.enterpriseRelateFileUrl"></ProFormUpload>
      </ProFormItemV2>
    </ProFormColItem>
  </ProFormCol>
  <!-- <ProFormCol>
    <ProFormColItem :span="12"> -->
  <ProFormItemV2
    :label="`${item.fileTypeName}:`"
    :prop="`parkCollectFileList.${index}.listFiles`"
    :check-rules="[{ message: `请上传${item.fileTypeName}`, type: 'upload' }]"
    :label-width="160"
    :style="{ marginBottom: index === form.parkCollectFileList.length - 1 ? 0 : '22px' }"
    v-for="(item, index) in form.parkCollectFileList"
    :key="item.fileSearchTypeId"
  >
    <ProFormUpload
      v-model:file-url="item.listFiles"
      :limitFileSize="50"
      :showTip="false"
      :limitShowViewMoreBtnCount="4"
      accept="doc,docx,pdf,xls,xlsx,jpg/jpeg,png"
    ></ProFormUpload>
  </ProFormItemV2>
  <!-- </ProFormColItem>
  </ProFormCol> -->
</template>
<script setup lang="ts">
@@ -38,6 +30,7 @@
  ProFormUpload,
  UploadUserFile,
} from '@bole-core/components';
import { CustomerApplyFileTypeListItem } from './utils';
defineOptions({
  name: 'MaterialInfoView',
@@ -45,9 +38,7 @@
type Props = {
  form: {
    enterpriseTaxSubFileUrl: UploadUserFile[];
    enterpriseOperateFileUrl: UploadUserFile[];
    enterpriseRelateFileUrl: UploadUserFile[];
    parkCollectFileList: CustomerApplyFileTypeListItem[];
  };
};
src/components/commonView/SettlementMaterialInfoView.vue
@@ -13,14 +13,20 @@
        prop="bountyAssignFileUlr"
        style="margin-bottom: 22px"
      >
        <ProFormUpload v-model:file-url="form.bountyAssignFileUlr"></ProFormUpload>
        <ProFormUpload
          v-model:file-url="form.bountyAssignFileUlr"
          :limitShowViewMoreBtnCount="4"
        ></ProFormUpload>
      </ProFormItemV2>
    </ProFormColItem>
  </ProFormCol>
  <ProFormCol>
    <ProFormColItem :span="12">
      <ProFormItemV2 label="奖励金汇总表:" prop="bountyCollectFileUrl">
        <ProFormUpload v-model:file-url="form.bountyCollectFileUrl"></ProFormUpload>
        <ProFormUpload
          v-model:file-url="form.bountyCollectFileUrl"
          :limitShowViewMoreBtnCount="4"
        ></ProFormUpload>
      </ProFormItemV2>
    </ProFormColItem>
  </ProFormCol>
src/components/commonView/types.ts
@@ -1,12 +1,20 @@
import { UploadUserFile } from '@bole-core/components';
import { CustomerApplyFileTypeListItem } from './utils';
import {
  ApplyTransferFileBusinessTypeEnum,
  FourStreamsMaterialFileBusinessTypeEnum,
  TransferFileEnumInRewardGrand,
} from '@/constants';
export type FourStreamsMaterialFileTableProps = {
  date?: string;
  showUploadBtn?: boolean;
  showCheckBtn?: boolean;
  showDownloadBtn?: boolean;
  showDeleteBtn?: boolean;
  downloadBtnText?: string;
  BusinessTypeEnumText?: { [key: number]: string };
  onDelete?: (row: CustomerApplyFileTypeListItem, fileId: string) => Promise<any>;
  onUpload?: (row: CustomerApplyFileTypeListItem, userFile: UploadUserFile) => Promise<any>;
};
export type BaseMaterialFileTableItem<T> = {
@@ -48,77 +56,3 @@
  [EnterpriseTypeEnum.IndustryMating]: '行业配套',
  [EnterpriseTypeEnum.IndustryBody]: '行业机构',
};
export enum FourStreamsMaterialFileBusinessTypeEnum {
  /** 园区入驻协议 */
  ParkEnterPactUrl = 10,
  /** 企业完税证明(盖章) */
  RatePaymentFileUrl = 20,
  /** 企业缴税明细汇总表(盖章) */
  TaxSubFileUrl = 30,
  /** 企业营收利润表 */
  OperateProfitesUrl = 40,
  /**
   * 入驻关联说明
   * @deprecated 已经不用了
   */
  EnterRelateUrl = 50,
  /** C端个税完税证明 */
  PersonTaxRatePayUrl = 60,
  /** C端完税说明 */
  PersonTaxInstructUrl = 70,
}
export const FourStreamsMaterialFileBusinessTypeEnumText = {
  [FourStreamsMaterialFileBusinessTypeEnum.ParkEnterPactUrl]: '园区入驻协议',
  [FourStreamsMaterialFileBusinessTypeEnum.RatePaymentFileUrl]: '企业完税证明(盖章)',
  [FourStreamsMaterialFileBusinessTypeEnum.TaxSubFileUrl]: '企业缴税明细汇总表(盖章)',
  [FourStreamsMaterialFileBusinessTypeEnum.OperateProfitesUrl]: '企业营收利润表',
  [FourStreamsMaterialFileBusinessTypeEnum.EnterRelateUrl]: '入驻关联说明',
  [FourStreamsMaterialFileBusinessTypeEnum.PersonTaxRatePayUrl]: 'C端个税完税证明',
  [FourStreamsMaterialFileBusinessTypeEnum.PersonTaxInstructUrl]: 'C端完税情况说明',
};
export const FourStreamsMaterialFileBusinessTypeEnumKey = {
  [FourStreamsMaterialFileBusinessTypeEnum.ParkEnterPactUrl]: 'parkEnterPactUrl',
  [FourStreamsMaterialFileBusinessTypeEnum.RatePaymentFileUrl]: 'ratePaymentFileUrl',
  [FourStreamsMaterialFileBusinessTypeEnum.TaxSubFileUrl]: 'taxSubFileUrl',
  [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;
export enum TransferFileEnumInRewardGrand {
  /** 拨付凭证*/
  FinanceFileUrl = 200,
  /** 充值凭证*/
  SettleFileUrl = 210,
}
export const TransferFileEnumInRewardGrandText = {
  [TransferFileEnumInRewardGrand.FinanceFileUrl]: '拨付凭证',
  [TransferFileEnumInRewardGrand.SettleFileUrl]: '充值凭证',
};
export const TransferFileEnumInRewardGrandKey = {
  [TransferFileEnumInRewardGrand.FinanceFileUrl]: 'financeFileUrl',
  [TransferFileEnumInRewardGrand.SettleFileUrl]: 'settleFileUrl',
} as const;
src/components/commonView/utils/index.ts
@@ -1,15 +1,19 @@
import { convertApi2FormUrl, convertApi2FormUrlOnlyOne } from '@/utils';
import {
  ApplyTransferFileBusinessTypeEnum,
  ApplyTransferFileBusinessTypeEnumKey,
  ApplyTransferMaterialFileTableItem,
  FourStreamsMaterialFileBusinessTypeEnum,
  FourStreamsMaterialFileBusinessTypeEnumKey,
  FourStreamsMaterialFileTableItem,
  TransferFileEnumInRewardGrand,
  TransferFileEnumInRewardGrandKey,
  TransferFileEnumInRewardGrandTableItem,
} from '../types';
import { UploadUserFile } from '@bole-core/components';
import _ from 'lodash';
import {
  ApplyTransferFileBusinessTypeEnum,
  ApplyTransferFileBusinessTypeEnumKey,
  FourStreamsMaterialFileBusinessTypeEnum,
  FourStreamsMaterialFileBusinessTypeEnumKey,
  TransferFileEnumInRewardGrand,
  TransferFileEnumInRewardGrandKey,
} from '@/constants';
export class FourStreamsMaterialUtils {
  /**实体产业园材料 */
@@ -112,3 +116,118 @@
    return parkTypeName === '数字经济园';
  }
}
export type CustomerApplyFileTypeListItem = {
  id?: string;
  fileSearchTypeId?: string;
  fileTypeName?: string;
  lastUpdateTime?: string;
  listFiles?: (API.CustomerUploadMonthApplyFileTypeDto & UploadUserFile)[];
};
export class EnterpriseApplyFileUtils {
  static convertApiFileToParkCollectFileList(listFiles: API.CustomerUploadMonthApplyFileTypeDto[]) {
    const group = _.groupBy(listFiles, 'fileSearchTypeId');
    return Object.keys(group).map(
      (x) =>
        ({
          fileSearchTypeId: x,
          fileTypeName: group[x][0].fileSearchTypeName,
          listFiles: group[x]
            .filter((x) => !!x.fileUrl)
            .map((a) => ({
              ...a,
              ...convertApi2FormUrl(a.fileUrl),
            })),
        } as CustomerApplyFileTypeListItem)
    );
  }
  static initParkCollectFileList(parkCollectFileTypeList: API.GetCustomerUploadApplyFilesOutput[]) {
    return parkCollectFileTypeList.map(
      (x) =>
        ({
          fileSearchTypeId: x.fileSearchTypeId,
          fileTypeName: x.fileTypeName,
          listFiles: [],
        } as CustomerApplyFileTypeListItem)
    );
  }
  static initParkCollectFileListApplyFiles(
    applyUploadFiles: API.GetEnterpriseParkApplyUploadFileOutput[],
    applyFiles: API.GetCustomerUploadApplyFilesOutput[],
    lastUploadEnterPactFile: API.CustomerUploadMonthApplyFileTypeDto[]
  ) {
    return applyUploadFiles.map((x) => {
      const applyFile = applyFiles.find((a) => a.fileSearchTypeId === x.fileSearchTypeId);
      let listFiles: API.CustomerUploadMonthApplyFileTypeDto[];
      if (x.fileSearchTypeName === '园区入驻协议') {
        listFiles = !x.listFiles.length ? lastUploadEnterPactFile : x.listFiles;
      } else {
        listFiles =
          !x.listFiles.length && applyFile?.listFiles?.length > 0
            ? applyFile.listFiles
            : x.listFiles;
      }
      return {
        fileSearchTypeId: x.fileSearchTypeId,
        fileTypeName: x.fileSearchTypeName,
        listFiles: listFiles.map((a) => ({ ...a, ...convertApi2FormUrl(a.fileUrl) })),
      } as CustomerApplyFileTypeListItem;
    });
  }
  static convertFileTableListToApi(fileTableList: CustomerApplyFileTypeListItem[]) {
    return fileTableList.map(
      (x) =>
        ({
          fileSearchTypeId: x.fileSearchTypeId,
          listFiles: x.listFiles.map((a) => ({
            fileSearchTypeId: x.fileSearchTypeId,
            fileSearchTypeName: x.fileTypeName,
            fileSize: a.fileSize || a.size,
            fileUrl: a.path,
          })),
        } as API.CustomerUploadMonthApplyFileType)
    );
  }
  static convertFileTableListToApplyCompanyFile(fileTableList: CustomerApplyFileTypeListItem[]) {
    return fileTableList.map(
      (x) =>
        ({
          fileSearchTypeId: x.fileSearchTypeId,
          fileSearchTypeName: x.fileTypeName,
          listFiles: x.listFiles.map((a) => ({
            fileSearchTypeId: x.fileSearchTypeId,
            fileSearchTypeName: x.fileTypeName,
            fileSize: a.fileSize || a.size,
            fileUrl: a.path,
          })),
        } as API.UploadParkApplyCustomerFileTypes)
    );
  }
  static convertFileTableListToApiBatch(fileTableList: CustomerApplyFileTypeListItem[]) {
    const applyFileTypeList = this.convertFileTableListToApi(fileTableList);
    return _.flatMap(applyFileTypeList, (x) => x.listFiles);
  }
  static isFileTableListAllUploaded(fileTableList: CustomerApplyFileTypeListItem[]) {
    return fileTableList.every((fileTableListItem) => {
      return fileTableListItem.listFiles.every((fileItem) => {
        return fileItem.status === 'success';
      });
    });
  }
  static isFileTableListExist(fileTableList: CustomerApplyFileTypeListItem[]) {
    return fileTableList.some((fileTableListItem) => {
      return fileTableListItem.listFiles.some((fileItem) => {
        return fileItem.status === 'success';
      });
    });
  }
}
src/constants/fourStreams.ts
New file
@@ -0,0 +1,73 @@
export enum FourStreamsMaterialFileBusinessTypeEnum {
  /** 园区入驻协议 */
  ParkEnterPactUrl = 10,
  /** 企业完税证明(盖章) */
  RatePaymentFileUrl = 20,
  /** 企业缴税明细汇总表(盖章) */
  TaxSubFileUrl = 30,
  /** 企业营收利润表 */
  OperateProfitesUrl = 40,
  /**
   * 入驻关联说明
   * @deprecated 已经不用了
   */
  EnterRelateUrl = 50,
  /** C端个税完税证明 */
  PersonTaxRatePayUrl = 60,
  /** C端完税说明 */
  PersonTaxInstructUrl = 70,
}
export const FourStreamsMaterialFileBusinessTypeEnumText = {
  [FourStreamsMaterialFileBusinessTypeEnum.ParkEnterPactUrl]: '园区入驻协议',
  [FourStreamsMaterialFileBusinessTypeEnum.RatePaymentFileUrl]: '企业完税证明(盖章)',
  [FourStreamsMaterialFileBusinessTypeEnum.TaxSubFileUrl]: '企业缴税明细汇总表(盖章)',
  [FourStreamsMaterialFileBusinessTypeEnum.OperateProfitesUrl]: '企业营收利润表',
  [FourStreamsMaterialFileBusinessTypeEnum.EnterRelateUrl]: '入驻关联说明',
  [FourStreamsMaterialFileBusinessTypeEnum.PersonTaxRatePayUrl]: 'C端个税完税证明',
  [FourStreamsMaterialFileBusinessTypeEnum.PersonTaxInstructUrl]: 'C端完税情况说明',
};
export const FourStreamsMaterialFileBusinessTypeEnumKey = {
  [FourStreamsMaterialFileBusinessTypeEnum.ParkEnterPactUrl]: 'parkEnterPactUrl',
  [FourStreamsMaterialFileBusinessTypeEnum.RatePaymentFileUrl]: 'ratePaymentFileUrl',
  [FourStreamsMaterialFileBusinessTypeEnum.TaxSubFileUrl]: 'taxSubFileUrl',
  [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;
export enum TransferFileEnumInRewardGrand {
  /** 拨付凭证*/
  FinanceFileUrl = 200,
  /** 充值凭证*/
  SettleFileUrl = 210,
}
export const TransferFileEnumInRewardGrandText = {
  [TransferFileEnumInRewardGrand.FinanceFileUrl]: '拨付凭证',
  [TransferFileEnumInRewardGrand.SettleFileUrl]: '充值凭证',
};
export const TransferFileEnumInRewardGrandKey = {
  [TransferFileEnumInRewardGrand.FinanceFileUrl]: 'financeFileUrl',
  [TransferFileEnumInRewardGrand.SettleFileUrl]: 'settleFileUrl',
} as const;
src/constants/index.ts
@@ -12,3 +12,4 @@
export * from './dic';
export * from './enterpriseMaterial';
export * from './reward';
export * from './fourStreams';
src/constants/reward.ts
@@ -45,11 +45,16 @@
   * 已充值
   */
  HasSettle = 2,
  /**
   * 无需充值
   */
  NoNeed = -1,
}
export const SettleStatusEnumText = {
  [SettleStatusEnum.WaitForSettle]: '待充值',
  [SettleStatusEnum.HasSettle]: '已充值',
  [SettleStatusEnum.NoNeed]: '无需充值',
};
export enum FinanceStatusEnum {
src/router/index.ts
@@ -223,34 +223,34 @@
      },
    ],
  },
  {
    path: '/Syatem',
    redirect: 'noRedirect',
    component: Layout,
    hidden: false,
    alwaysShow: true,
    meta: {
      rank: 10030,
      title: '系统配置',
      rootMenu: true,
      icon: 'home',
    },
    children: [
      {
        path: '/Account',
        name: 'Account',
        hidden: false,
        alwaysShow: true,
        component: () => import('@/views/Account/AccountManageList.vue'),
        meta: {
          rank: 10031,
          title: '账号管理',
          // rootMenu: true,
          icon: 'home',
        },
      },
    ],
  },
  // {
  //   path: '/Syatem',
  //   redirect: 'noRedirect',
  //   component: Layout,
  //   hidden: true,
  //   alwaysShow: false,
  //   meta: {
  //     rank: 10030,
  //     title: '系统配置',
  //     rootMenu: true,
  //     icon: 'home',
  //   },
  //   children: [
  //     {
  //       path: '/Account',
  //       name: 'Account',
  //       hidden: true,
  //       alwaysShow: true,
  //       component: () => import('@/views/Account/AccountManageList.vue'),
  //       meta: {
  //         rank: 10031,
  //         title: '账号管理',
  //         // rootMenu: true,
  //         icon: 'home',
  //       },
  //     },
  //   ],
  // },
  {
    path: '/Login',
src/services/api/EnterpriseApplyFile.ts
New file
@@ -0,0 +1,156 @@
/* eslint-disable */
// @ts-ignore
import { request } from '@/utils/request';
/** 确认提交材料上传 POST /api/EnterpriseApplyFile/CustomerUploadMonthApplyFile */
export async function customerUploadMonthApplyFile(
  body: API.CustomerUploadMonthApplyFileInput,
  options?: API.RequestConfig
) {
  return request<number>('/api/EnterpriseApplyFile/CustomerUploadMonthApplyFile', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 客户端删除按月上传单个文件 DELETE /api/EnterpriseApplyFile/DeleteMonthApplySingleFile */
export async function deleteMonthApplySingleFile(
  body: API.DeleteMonthApplySingleFileInput,
  options?: API.RequestConfig
) {
  return request<number>('/api/EnterpriseApplyFile/DeleteMonthApplySingleFile', {
    method: 'DELETE',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 查询该客户需要上传文件类型类别 GET /api/EnterpriseApplyFile/GetCustomerFileTypeHead */
export async function getCustomerFileTypeHead(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIgetCustomerFileTypeHeadParams,
  options?: API.RequestConfig
) {
  return request<API.GetCustomerUploadApplyFilesOutput[]>(
    '/api/EnterpriseApplyFile/GetCustomerFileTypeHead',
    {
      method: 'GET',
      params: {
        ...params,
      },
      ...(options || {}),
    }
  );
}
/** 获取月份上传文件详情 POST /api/EnterpriseApplyFile/GetCustomerUploadApplyFiles */
export async function getCustomerUploadApplyFiles(
  body: API.GetCustomerUploadApplyFilesInput,
  options?: API.RequestConfig
) {
  return request<API.GetCustomerUploadApplyFilesOutput[]>(
    '/api/EnterpriseApplyFile/GetCustomerUploadApplyFiles',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 获取月份上传文件按类型查询文件列表 POST /api/EnterpriseApplyFile/GetCustomerUploadApplyFilesByType */
export async function getCustomerUploadApplyFilesByType(
  body: API.GetCustomerUploadApplyFilesByTypeInput,
  options?: API.RequestConfig
) {
  return request<API.GetCustomerUploadApplyFilesByTypeOutput[]>(
    '/api/EnterpriseApplyFile/GetCustomerUploadApplyFilesByType',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 根据月份查询是否存在提交记录 GET /api/EnterpriseApplyFile/GetCustomerUploadFileRecord */
export async function getCustomerUploadFileRecord(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIgetCustomerUploadFileRecordParams,
  options?: API.RequestConfig
) {
  return request<API.GetCustomerUploadFileRecordOutput>(
    '/api/EnterpriseApplyFile/GetCustomerUploadFileRecord',
    {
      method: 'GET',
      params: {
        ...params,
      },
      ...(options || {}),
    }
  );
}
/** 按月份查询企业上传材料列表 POST /api/EnterpriseApplyFile/GetEnterpriseApplyUploadFile */
export async function getEnterpriseApplyUploadFile(
  body: API.PageInput,
  options?: API.RequestConfig
) {
  return request<API.GetEnterpriseMonthApplyFileOutputPageOutput>(
    '/api/EnterpriseApplyFile/GetEnterpriseApplyUploadFile',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 获取园区汇总材料类型 POST /api/EnterpriseApplyFile/GetParkCollectFileTypeList */
export async function getParkCollectFileTypeList(
  body: API.GetParkCollectFileTypeListInput,
  options?: API.RequestConfig
) {
  return request<API.GetCustomerUploadApplyFilesOutput[]>(
    '/api/EnterpriseApplyFile/GetParkCollectFileTypeList',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 上传材料详情-编辑-上传文件 POST /api/EnterpriseApplyFile/UploadMonthApplySingleFiles */
export async function uploadMonthApplySingleFiles(
  body: API.UploadMonthApplySingleFilesInput,
  options?: API.RequestConfig
) {
  return request<number>('/api/EnterpriseApplyFile/UploadMonthApplySingleFiles', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
src/services/api/IndustrialPark.ts
@@ -61,6 +61,21 @@
  );
}
/** 设置奖励金申报状态 POST /api/IndustrialPark/SetIndustrialParkRewardEnable */
export async function setIndustrialParkRewardEnable(
  body: API.SetIndustrialParkRewardEnableInput,
  options?: API.RequestConfig
) {
  return request<number>('/api/IndustrialPark/SetIndustrialParkRewardEnable', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 设置产业园区状态 POST /api/IndustrialPark/SetIndustrialParkStatus */
export async function setIndustrialParkStatus(
  body: API.SetIndustrialParkStatusInput,
src/services/api/ParkBountyApply.ts
@@ -47,6 +47,21 @@
  });
}
/** 此处后端没有提供注释 GET /api/ParkBountyApply/DeleteParkEnterpriseApplyFile */
export async function deleteParkEnterpriseApplyFile(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIdeleteParkEnterpriseApplyFileParams,
  options?: API.RequestConfig
) {
  return request<number>('/api/ParkBountyApply/DeleteParkEnterpriseApplyFile', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** 继续申报 POST /api/ParkBountyApply/EditParkBountyApply */
export async function editParkBountyApply(
  body: API.EditParkBountyApplyStepOneInput,
@@ -108,6 +123,42 @@
    },
    ...(options || {}),
  });
}
/** 获取企业最后一次上传的园区入驻协议文件 GET /api/ParkBountyApply/GetEnterpriseLastUploadEnterPactFileNew */
export async function getEnterpriseLastUploadEnterPactFileNew(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIgetEnterpriseLastUploadEnterPactFileNewParams,
  options?: API.RequestConfig
) {
  return request<API.CustomerUploadMonthApplyFileTypeDto[]>(
    '/api/ParkBountyApply/GetEnterpriseLastUploadEnterPactFileNew',
    {
      method: 'GET',
      params: {
        ...params,
      },
      ...(options || {}),
    }
  );
}
/** 获取申报下企业上传的文件 POST /api/ParkBountyApply/GetEnterpriseParkApplyUploadFiles */
export async function getEnterpriseParkApplyUploadFiles(
  body: API.GetEnterpriseParkApplyUploadFilesInput,
  options?: API.RequestConfig
) {
  return request<API.GetEnterpriseParkApplyUploadFileOutput[]>(
    '/api/ParkBountyApply/GetEnterpriseParkApplyUploadFiles',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 获取企业充值审核列表 POST /api/ParkBountyApply/GetEnterprisePreChargeCheckList */
@@ -721,6 +772,24 @@
  );
}
/** 上传企业材料 POST /api/ParkBountyApply/UploadParkBountyApplyCompanyFileNew */
export async function uploadParkBountyApplyCompanyFileNew(
  body: API.UploadParkApplyCustomerFilesInput,
  options?: API.RequestConfig
) {
  return request<API.UploadParkBountyApplyCompanyFileOutput>(
    '/api/ParkBountyApply/UploadParkBountyApplyCompanyFileNew',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 用户充值 POST /api/ParkBountyApply/UserEnterpiseRecharge */
export async function userEnterpiseRecharge(
  body: API.UserEnterpiseRechargeInput,
src/services/api/SearchSetting.ts
@@ -2,6 +2,21 @@
// @ts-ignore
import { request } from '@/utils/request';
/** 材料类型点击数+1 POST /api/SearchSetting/AddSearchSettingClickCount */
export async function addSearchSettingClickCount(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIaddSearchSettingClickCountParams,
  options?: API.RequestConfig
) {
  return request<number>('/api/SearchSetting/AddSearchSettingClickCount', {
    method: 'POST',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** 搜索管理--新建编辑 POST /api/SearchSetting/CreateOrEditSearchSetting */
export async function createOrEditSearchSetting(
  body: API.CreateOrEditSearchInput,
src/services/api/index.ts
@@ -22,6 +22,7 @@
import * as Consult from './Consult';
import * as CooperationApply from './CooperationApply';
import * as Customer from './Customer';
import * as EnterpriseApplyFile from './EnterpriseApplyFile';
import * as EnterpriseMaterial from './EnterpriseMaterial';
import * as Features from './Features';
import * as FirstPartyCompany from './FirstPartyCompany';
@@ -108,6 +109,7 @@
  Consult,
  CooperationApply,
  Customer,
  EnterpriseApplyFile,
  EnterpriseMaterial,
  Features,
  FirstPartyCompany,
src/services/api/typings.d.ts
@@ -221,10 +221,22 @@
    leaderMobile?: string;
    /** 园区类型 */
    parkTypeId?: string;
    /** 注册地址 */
    registerAddress: string;
    /** 备注 */
    remark?: string;
    /** 是否已经启用奖励金申报 */
    rewardEnable?: boolean;
    /** 奖励金模板是否配置 */
    rewardTemplateSetting?: boolean;
    /** 维护的公司 */
    companyOrgId?: string;
    /** 维护的部门 */
    departmentOrgId?: string;
    /** 是否支持企业自主上传 */
    suportEnterpriseUpload?: boolean;
    /** 是否支持平台充值 */
    suportPlatRecharge?: boolean;
    /** 文件 */
    industrialParkApplyFileFile?: IndustrialParkApplyFileFile[];
  }
  interface AddIndustryBodyAuditInput {
@@ -886,6 +898,10 @@
    isCache?: boolean;
  }
  interface APIaddSearchSettingClickCountParams {
    id?: string;
  }
  interface APIadvertiseOffShelfParams {
    /** 资讯广告Id */
    id?: string;
@@ -1099,6 +1115,10 @@
    id?: string;
  }
  interface APIdeleteParkEnterpriseApplyFileParams {
    parkEnterpriseDetaiFileId?: string;
  }
  interface APIdeleteParkRewardApplyParams {
    id?: string;
  }
@@ -1306,6 +1326,10 @@
    moduleId?: string;
  }
  interface APIgetCustomerFileTypeHeadParams {
    enterpriseId?: string;
  }
  interface APIgetCustomerTemplateDetailParams {
    id?: string;
  }
@@ -1318,12 +1342,20 @@
    templateId?: string;
  }
  interface APIgetCustomerUploadFileRecordParams {
    withMonth?: string;
  }
  interface APIgetDefaultConnectionStringParams {
    id?: string;
  }
  interface APIgetElecBillInfoParams {
    transactionDetailId?: string;
  }
  interface APIgetEnterpriseLastUploadEnterPactFileNewParams {
    companyId?: string;
  }
  interface APIgetEnterpriseLastUploadEnterPactFileParams {
@@ -3046,6 +3078,8 @@
  interface CheckUserEnterpriseRechargeInput {
    id?: string;
    checkStatus?: EnterpriseRechargeStatusEnum;
    /** 充值凭证 */
    rechargeVoucherFileUrl?: string;
    remark?: string;
  }
@@ -3918,6 +3952,10 @@
    remark?: string;
    /** 手机号 */
    phoneNumber?: string;
    /** 用户端Id */
    clientId?: string;
    /** 园区Ids */
    industrialParkIds?: string[];
    /** 角色 */
    roleNames?: string[];
    /** 密码 */
@@ -5301,6 +5339,15 @@
    endTime?: string;
  }
  interface CustomerApplyFileDetailDto {
    id?: string;
    fileType?: string;
    fileSize?: number;
    fileUrl?: string;
    fileSearchTypeId?: string;
    monthApplyId?: string;
  }
  interface CustomerManageListOutput {
    id?: string;
    /** 企业名称 */
@@ -5371,6 +5418,27 @@
    templateParamExtraData?: string;
  }
  interface CustomerUploadMonthApplyFileInput {
    withMonth?: string;
    fileTypes?: CustomerUploadMonthApplyFileType[];
  }
  interface CustomerUploadMonthApplyFileType {
    fileSearchTypeId?: string;
    listFiles?: CustomerUploadMonthApplyFileTypeDto[];
  }
  interface CustomerUploadMonthApplyFileTypeDto {
    fileSearchTypeId?: string;
    id?: string;
    fileSearchTypeName?: string;
    fileType?: string;
    fileSize?: number;
    fileUrl?: string;
    sort?: number;
    creationTime?: string;
  }
  interface DataprepareCreateExtInfo {
    contextParams?: string;
    shortUrl?: string;
@@ -5404,6 +5472,12 @@
  }
  type DecimalDecimalValueTuple = true;
  interface DeleteMonthApplySingleFileInput {
    monthApplyId?: string;
    fileSearchTypeId?: string;
    detaiFileId?: string;
  }
  interface DistTemplateCreateContractInput {
    /** 订单签约Id */
@@ -5661,6 +5735,10 @@
  }
  type EnterpriseMaterialTypeEnum = 10 | 11 | 20;
  type EnterpriseMonthApplyStatusEnum = 10 | 20;
  type EnterpriseMonthUploadStatusEnum = 10 | 20 | 30;
  type EnterpriseRechargeStatusEnum = 10 | 20 | 30;
@@ -6666,6 +6744,44 @@
    operator?: string;
  }
  interface GetCustomerUploadApplyFilesByTypeInput {
    fileSearchTypeId?: string;
    monthApplyId?: string;
  }
  interface GetCustomerUploadApplyFilesByTypeOutput {
    id?: string;
    fileType?: string;
    fileSize?: number;
    fileUrl?: string;
  }
  interface GetCustomerUploadApplyFilesInput {
    id?: string;
    enterpriseId?: string;
    withMonth?: string;
  }
  interface GetCustomerUploadApplyFilesOutput {
    id?: string;
    fileSearchTypeId?: string;
    fileCount?: number;
    isUpload?: boolean;
    lastUpdateTime?: string;
    monthApplyId?: string;
    withMonth?: string;
    searchType?: number;
    enterpriseName?: string;
    parkName?: string;
    fileTypeName?: string;
    sort?: number;
    listFiles?: CustomerApplyFileDetailDto[];
  }
  interface GetCustomerUploadFileRecordOutput {
    id?: string;
  }
  interface GetEnterpriseBuntyTradeDto {
    id?: string;
    payDateTime?: string;
@@ -6705,6 +6821,34 @@
    errmsg?: string;
    cost?: string;
    data?: GetEnterpriseCredentialDataResponse;
  }
  interface GetEnterpriseMonthApplyFileOutput {
    id?: string;
    enterpriseId?: string;
    withMonth?: string;
    creationTime?: string;
    uploadStatus?: EnterpriseMonthUploadStatusEnum;
    applyStatus?: EnterpriseMonthApplyStatusEnum;
  }
  interface GetEnterpriseMonthApplyFileOutputPageOutput {
    pageModel?: Pagination;
    objectData?: any;
    data?: GetEnterpriseMonthApplyFileOutput[];
  }
  interface GetEnterpriseParkApplyUploadFileOutput {
    fileSearchTypeId?: string;
    fileSearchTypeName?: string;
    fileCount?: number;
    sort?: number;
    listFiles?: CustomerUploadMonthApplyFileTypeDto[];
  }
  interface GetEnterpriseParkApplyUploadFilesInput {
    parkBountyApplyId?: string;
    companyId?: string;
  }
  interface GetEnterprisePreChargeCheckListInput {
@@ -6760,6 +6904,8 @@
    outBankResumeName?: string;
    /** 出账回单 */
    outReceiptFileUrl?: string;
    /** 充值凭证 */
    rechargeVoucherFileUrl?: string;
    /** 审核备注 */
    checkRemark?: string;
    checkStatus?: EnterpriseRechargeStatusEnum;
@@ -8036,6 +8182,9 @@
    settleTime?: string;
    incomeStatus?: IncomeStatusEnum;
    inCheckStatus?: BountyCheckStatusEnum;
    /** 财政入账时间 */
    financeIncomeTime?: string;
    financeIncomeStatus?: IncomeStatusEnum;
    /** 内部审核日期 */
    inCheckTime?: string;
    outCheckStatus?: BountyCheckStatusEnum;
@@ -8052,6 +8201,14 @@
    settleSumAmount?: number;
    /** 财政发放金额 */
    financeSumAmount?: number;
    /** 是否已经启用奖励金申报 */
    rewardEnable?: boolean;
    /** 奖励金模板是否配置 */
    rewardTemplateSetting?: boolean;
    /** 是否支持企业自主上传 */
    suportEnterpriseUpload?: boolean;
    /** 是否支持平台充值 */
    suportPlatRecharge?: boolean;
  }
  interface GetParkBountyApplyListOutputPageOutput {
@@ -8148,6 +8305,11 @@
    data?: GetParkBountyTradeOutput[];
  }
  interface GetParkCollectFileTypeListInput {
    parkId?: string;
    searchType?: number;
  }
  interface GetParkCustomerBountyApplyOutput {
    id?: string;
    /** 申请批次号 */
@@ -8193,6 +8355,8 @@
    id?: string;
    /** 申请批次号 */
    batchNo?: string;
    /** 申报月份 */
    applyMonth?: string;
    /** 申报总额 */
    applySumAmount?: number;
    /** 平台充值入账时间 */
@@ -8391,6 +8555,7 @@
    bankName?: string;
    bankBranchName?: string;
    bankAccountName?: string;
    incomeCompany?: string;
  }
  interface GetProductAdvertiseByCategoryInput {
@@ -9766,6 +9931,13 @@
  type IncomeStatusEnum = 1 | 2;
  interface IndustrialParkApplyFileFile {
    /** 210 企业材料 220 汇总材料 */
    applyFileType?: number;
    /** 园区材料 */
    industrialParkFileTypeSetting?: string[];
  }
  interface IndustrialParkDetailOutput {
    id?: string;
    /** 园区名称 */
@@ -9777,10 +9949,25 @@
    /** 园区类型 */
    parkTypeId?: string;
    status?: IndustrialParkStatusEnum;
    /** 是否已经启用奖励金申报 */
    rewardEnable?: boolean;
    /** 奖励金模板是否配置 */
    rewardTemplateSetting?: boolean;
    /** 维护的公司 */
    companyOrgId?: string;
    /** 维护的公司 */
    companyOrgName?: string;
    /** 维护的部门 */
    departmentOrgId?: string;
    /** 是否支持企业自主上传 */
    suportEnterpriseUpload?: boolean;
    /** 是否支持平台充值 */
    suportPlatRecharge?: boolean;
    /** 注册地址 */
    registerAddress?: string;
    /** 备注 */
    remark?: string;
    industrialParkFileTypeList?: IndustrialParkFileTypeOutput[];
  }
  interface IndustrialParkDropDownOutput {
@@ -9791,6 +9978,13 @@
    parkTypeId?: string;
    /** 园区类型名称 */
    parkTypeName?: string;
  }
  interface IndustrialParkFileTypeOutput {
    /** 210 企业材料 220 汇总材料 */
    applyFileType?: number;
    /** 园区材料 */
    fileSearchTypeId?: string;
  }
  interface IndustrialParkListOutput {
@@ -9804,6 +9998,20 @@
    /** 园区类型 */
    parkTypeId?: string;
    status?: IndustrialParkStatusEnum;
    /** 是否已经启用奖励金申报 */
    rewardEnable?: boolean;
    /** 奖励金模板是否配置 */
    rewardTemplateSetting?: boolean;
    /** 维护的公司 */
    companyOrgId?: string;
    /** 维护的公司 */
    companyOrgName?: string;
    /** 维护的部门 */
    departmentOrgId?: string;
    /** 是否支持企业自主上传 */
    suportEnterpriseUpload?: boolean;
    /** 是否支持平台充值 */
    suportPlatRecharge?: boolean;
  }
  interface IndustrialParkListOutputPageOutput {
@@ -14390,6 +14598,11 @@
    settleFileUrl?: string;
    /** 财政发放凭证 */
    financeFileUrl?: string;
    /** 是否支持企业上传 */
    suportEnterpriseUpload?: boolean;
    /** 是否支持平台充值 */
    suportPlatRecharge?: boolean;
    listFiles?: CustomerUploadMonthApplyFileTypeDto[];
  }
  interface OutcheckParkBountyApplyInput {
@@ -14461,6 +14674,7 @@
    settleSumAmount?: number;
    /** 财政发放金额 */
    financeSumAmount?: number;
    listFiles?: CustomerUploadMonthApplyFileTypeDto[];
  }
  interface ParkBountyApplyBatchFinanceInput {
@@ -17897,12 +18111,7 @@
  interface SaveParkBountyApplyGatherFileInput {
    parkBountyApplyId?: string;
    /** 企业营收汇总表 */
    enterpriseOperateFileUrl?: string;
    /** 企业缴税明细表 */
    enterpriseTaxSubFileUrl?: string;
    /** 入驻关联说明 */
    enterpriseRelateFileUrl?: string;
    listFiles?: CustomerUploadMonthApplyFileTypeDto[];
  }
  interface SaveWalletPayChannelFeeSettingInput {
@@ -18159,6 +18368,11 @@
    auditNote?: string;
  }
  interface SetIndustrialParkRewardEnableInput {
    id?: string;
    rewardEnable?: boolean;
  }
  interface SetIndustrialParkStatusInput {
    id?: string;
    opStatus?: IndustrialParkStatusEnum;
@@ -18290,7 +18504,7 @@
    type?: number;
  }
  type SettleStatusEnum = 1 | 2;
  type SettleStatusEnum = 1 | 2 | -1;
  interface SetUserCertificationAuditStatusInput {
    /** 审核Id */
@@ -19477,6 +19691,10 @@
    remark?: string;
    /** 手机号 */
    phoneNumber?: string;
    /** 用户端Id */
    clientId?: string;
    /** 园区Ids */
    industrialParkIds?: string[];
    /** 角色 */
    roleNames?: string[];
    /** 密码 */
@@ -19494,10 +19712,22 @@
    leaderMobile?: string;
    /** 园区类型 */
    parkTypeId?: string;
    /** 注册地址 */
    registerAddress: string;
    /** 备注 */
    remark?: string;
    /** 是否已经启用奖励金申报 */
    rewardEnable?: boolean;
    /** 奖励金模板是否配置 */
    rewardTemplateSetting?: boolean;
    /** 维护的公司 */
    companyOrgId?: string;
    /** 维护的部门 */
    departmentOrgId?: string;
    /** 是否支持企业自主上传 */
    suportEnterpriseUpload?: boolean;
    /** 是否支持平台充值 */
    suportPlatRecharge?: boolean;
    /** 文件 */
    industrialParkApplyFileFile?: IndustrialParkApplyFileFile[];
    id?: string;
  }
@@ -20102,6 +20332,26 @@
    insurePolicyId?: string;
    /** 投保单 */
    insureBillUrl?: string;
  }
  interface UploadMonthApplySingleFilesInput {
    monthApplyId?: string;
    fileSearchTypeId?: string;
    listFiles?: CustomerUploadMonthApplyFileTypeDto[];
  }
  interface UploadParkApplyCustomerFilesInput {
    parkBountyApplyId?: string;
    companyId?: string;
    fileTypes?: UploadParkApplyCustomerFileTypes[];
  }
  interface UploadParkApplyCustomerFileTypes {
    fileSearchTypeId?: string;
    fileSearchTypeName?: string;
    fileCount?: number;
    sort?: number;
    listFiles?: CustomerUploadMonthApplyFileTypeDto[];
  }
  interface UploadParkBountyApplyCompanyFileInput {
@@ -20748,6 +20998,8 @@
    companyOrgId?: string;
    /** 组织架构部门id */
    departmentOrgId?: string;
    /** 园区Ids */
    industrialParkIds?: string[];
  }
  interface UserDtoPageOutput {
@@ -21034,6 +21286,9 @@
    /** 电子签印章图片生成状态 0未生成 1已生成 */
    signatureImageStatus?: number;
    certificationChannel?: UserCertificationChannelEnum;
    industrialParkId?: string;
    suportEnterpriseUpload?: boolean;
    suportPlatRecharge?: boolean;
  }
  interface UserMessageInfo {
src/utils/common/file.ts
@@ -26,7 +26,11 @@
}
export function convertApi2FormUrlBySeparator(path: string, separator = '|') {
  return path.split(separator).map((x) => setOSSLink(x));
  return path ? path.split(separator).map((x) => setOSSLink(x)) : [];
}
export function convertApi2FormUrlObjectBySeparator(path: string, separator = '|') {
  return path ? path.split(separator).map(convertApi2FormUrl) : [];
}
/**
src/views/EnterpriseInfo/components/RewardGrantRecordView.vue
@@ -3,7 +3,7 @@
    <AppContainer>
      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
      </ProTableV2>
      <FourStreamsMaterialFileDialog
      <FourStreamsMaterialFileDialogV2
        v-bind="dialogMaterialFileProps"
        :show-upload-btn="false"
        :show-delete-btn="false"
@@ -26,8 +26,7 @@
} from '@bole-core/components';
import { OrderInputType } from '@bole-core/core';
import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
import { IncomeStatusEnumText } from '@/constants';
import { ApplyTransferFileBusinessTypeEnumText } from '@/components/commonView/types';
import { ApplyTransferFileBusinessTypeEnumText } from '@/constants';
import { FourStreamsMaterialUtils } from '@/components/commonView/utils';
import { ApplyTransferMaterialFileTableItem } from '@/components/commonView/types';
src/views/MaterialReview/MaterialReviewAudit.vue
@@ -16,7 +16,6 @@
              :show-upload-btn="false"
              :show-delete-btn="false"
              :show-check-btn="false"
              downloadBtnText="查看"
            />
          </ChunkCellV2>
          <ChunkCell>
@@ -90,13 +89,18 @@
import MateriaDetailDialog from '@/components/commonView/MateriaDetailDialog.vue';
import { useQuery, useQueryClient } from '@tanstack/vue-query';
import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
import { convertApi2FormUrlOnlyOne, setOSSLink } from '@/utils';
import * as enterpriseApplyFileServices from '@/services/api/EnterpriseApplyFile';
import { convertApi2FormUrlObjectBySeparator, setOSSLink } from '@/utils';
import { useGlobalEventContext, useRouteView } from '@/hooks';
import { FormInstance } from 'element-plus';
import { Message, OrderInputType } from '@bole-core/core';
import { FourStreamsMaterialFileTableItem } from '@/components/commonView/types';
import { useIndustrialParkDropDownList } from '@/hooks/industrialPark';
import { FourStreamsMaterialUtils } from '@/components/commonView/utils';
import {
  CustomerApplyFileTypeListItem,
  EnterpriseApplyFileUtils,
  FourStreamsMaterialUtils,
} from '@/components/commonView/utils';
defineOptions({
  name: 'MaterialReviewAudit',
@@ -114,9 +118,10 @@
  applySumAmount: 0,
  enterpriseTaxSubFileUrl: [] as UploadUserFile[],
  enterpriseOperateFileUrl: [] as UploadUserFile[],
  enterpriseRelateFileUrl: [] as UploadUserFile[],
  parkCollectFileList: [] as CustomerApplyFileTypeListItem[],
  bountyAssignFileUlr: [] as UploadUserFile[],
  bountyCollectFileUrl: [] as UploadUserFile[],
  enterpriseRelateFileUrl: [] as UploadUserFile[],
  status: '' as any as BountyCheckStatusEnum,
  remark: '',
@@ -139,11 +144,20 @@
    form.parkTypeName = data.parkTypeName;
    form.applyMonth = data.applyMonth;
    form.applySumAmount = data.applySumAmount;
    form.enterpriseTaxSubFileUrl = convertApi2FormUrlOnlyOne(data?.enterpriseTaxSubFileUrl);
    form.enterpriseOperateFileUrl = convertApi2FormUrlOnlyOne(data?.enterpriseOperateFileUrl);
    form.bountyAssignFileUlr = convertApi2FormUrlOnlyOne(data?.bountyAssignFileUlr);
    form.bountyCollectFileUrl = convertApi2FormUrlOnlyOne(data?.bountyCollectFileUrl);
    form.enterpriseRelateFileUrl = convertApi2FormUrlOnlyOne(data?.enterpriseRelateFileUrl);
    form.enterpriseTaxSubFileUrl = convertApi2FormUrlObjectBySeparator(
      data?.enterpriseTaxSubFileUrl
    );
    form.enterpriseOperateFileUrl = convertApi2FormUrlObjectBySeparator(
      data?.enterpriseOperateFileUrl
    );
    form.bountyAssignFileUlr = convertApi2FormUrlObjectBySeparator(data?.bountyAssignFileUlr);
    form.bountyCollectFileUrl = convertApi2FormUrlObjectBySeparator(data?.bountyCollectFileUrl);
    form.enterpriseRelateFileUrl = convertApi2FormUrlObjectBySeparator(
      data?.enterpriseRelateFileUrl
    );
    form.parkCollectFileList = EnterpriseApplyFileUtils.convertApiFileToParkCollectFileList(
      data.listFiles
    );
    getList();
  },
@@ -226,19 +240,49 @@
const { dialogProps, handleAdd, editForm } = useFormDialog({
  defaultFormParams: {
    list: [] as FourStreamsMaterialFileTableItem[],
    list: [] as CustomerApplyFileTypeListItem[],
    companyId: '',
  },
});
const { getIndustrialParkTypeNameById } = useIndustrialParkDropDownList();
function openDialog(row: API.ParkBountyApplyDetailInfo) {
  handleAdd({
    list: FourStreamsMaterialUtils.initFourStreamsMaterialFileList(
      row,
      getIndustrialParkTypeNameById(detail.value?.parkId)
    ),
    companyId: row.enterpriseId,
  });
async function openDialog(row: API.ParkBountyApplyDetailInfo) {
  try {
    const applyFiles = await queryClient.ensureQueryData({
      queryKey: [
        'enterpriseApplyFileServices/getCustomerUploadApplyFiles',
        row.enterpriseId,
        form.applyMonth,
      ],
      queryFn: async () => {
        return await enterpriseApplyFileServices.getCustomerUploadApplyFiles({
          enterpriseId: row.enterpriseId,
          withMonth: form.applyMonth,
        });
      },
    });
    const lastUploadEnterPactFile = await queryClient.ensureQueryData({
      queryKey: ['enterpriseApplyFileServices/getCustomerUploadApplyFiles', row.enterpriseId],
      queryFn: async () => {
        return await parkBountyApplyServices.getEnterpriseLastUploadEnterPactFileNew({
          companyId: row.enterpriseId,
        });
      },
    });
    const applyUploadFiles = await parkBountyApplyServices.getEnterpriseParkApplyUploadFiles({
      companyId: row.enterpriseId,
      parkBountyApplyId: id,
    });
    handleAdd({
      list: EnterpriseApplyFileUtils.initParkCollectFileListApplyFiles(
        applyUploadFiles,
        applyFiles,
        lastUploadEnterPactFile
      ),
      companyId: row.enterpriseId,
    });
  } catch (error) {}
}
</script>
src/views/MaterialReview/MaterialReviewDetail.vue
@@ -31,7 +31,6 @@
              :show-upload-btn="false"
              :show-delete-btn="false"
              :show-check-btn="false"
              downloadBtnText="查看"
            />
          </ChunkCellV2>
        </DetailView>
@@ -57,9 +56,10 @@
import DetailView from '@/components/commonView/DetailView.vue';
import MateriaDetailDialog from '@/components/commonView/MateriaDetailDialog.vue';
import DeclareEnterpriseTableView from '@/components/commonView/DeclareEnterpriseTableView.vue';
import { useQuery } from '@tanstack/vue-query';
import { useQuery, useQueryClient } from '@tanstack/vue-query';
import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
import { convertApi2FormUrlOnlyOne, setOSSLink } from '@/utils';
import * as enterpriseApplyFileServices from '@/services/api/EnterpriseApplyFile';
import { convertApi2FormUrlObjectBySeparator, setOSSLink } from '@/utils';
import { useRouteView } from '@/hooks';
import { OrderInputType } from '@bole-core/core';
import {
@@ -69,7 +69,11 @@
  BountyCheckStatusEnumColor,
} from '@/constants';
import { FourStreamsMaterialFileTableItem } from '@/components/commonView/types';
import { FourStreamsMaterialUtils } from '@/components/commonView/utils';
import {
  CustomerApplyFileTypeListItem,
  EnterpriseApplyFileUtils,
  FourStreamsMaterialUtils,
} from '@/components/commonView/utils';
import { useIndustrialParkDropDownList } from '@/hooks/industrialPark';
defineOptions({
@@ -87,9 +91,10 @@
  applySumAmount: 0,
  enterpriseTaxSubFileUrl: [] as UploadUserFile[],
  enterpriseOperateFileUrl: [] as UploadUserFile[],
  enterpriseRelateFileUrl: [] as UploadUserFile[],
  parkCollectFileList: [] as CustomerApplyFileTypeListItem[],
  bountyAssignFileUlr: [] as UploadUserFile[],
  bountyCollectFileUrl: [] as UploadUserFile[],
  enterpriseRelateFileUrl: [] as UploadUserFile[],
  outCheckStatus: '' as any as BountyCheckStatusEnum,
  outCheckRemark: '',
@@ -116,11 +121,20 @@
    form.applySumAmount = data.applySumAmount;
    form.outCheckStatus = data.outCheckStatus;
    form.outCheckRemark = data.outCheckRemark;
    form.enterpriseTaxSubFileUrl = convertApi2FormUrlOnlyOne(data?.enterpriseTaxSubFileUrl);
    form.enterpriseOperateFileUrl = convertApi2FormUrlOnlyOne(data?.enterpriseOperateFileUrl);
    form.bountyAssignFileUlr = convertApi2FormUrlOnlyOne(data?.bountyAssignFileUlr);
    form.bountyCollectFileUrl = convertApi2FormUrlOnlyOne(data?.bountyCollectFileUrl);
    form.enterpriseRelateFileUrl = convertApi2FormUrlOnlyOne(data?.enterpriseRelateFileUrl);
    form.enterpriseTaxSubFileUrl = convertApi2FormUrlObjectBySeparator(
      data?.enterpriseTaxSubFileUrl
    );
    form.enterpriseOperateFileUrl = convertApi2FormUrlObjectBySeparator(
      data?.enterpriseOperateFileUrl
    );
    form.bountyAssignFileUlr = convertApi2FormUrlObjectBySeparator(data?.bountyAssignFileUlr);
    form.bountyCollectFileUrl = convertApi2FormUrlObjectBySeparator(data?.bountyCollectFileUrl);
    form.enterpriseRelateFileUrl = convertApi2FormUrlObjectBySeparator(
      data?.enterpriseRelateFileUrl
    );
    form.parkCollectFileList = EnterpriseApplyFileUtils.convertApiFileToParkCollectFileList(
      data.listFiles
    );
    getList();
  },
@@ -161,21 +175,57 @@
const { dialogProps, handleAdd, editForm } = useFormDialog({
  defaultFormParams: {
    list: [] as FourStreamsMaterialFileTableItem[],
    list: [] as CustomerApplyFileTypeListItem[],
    companyId: '',
  },
});
const { getIndustrialParkTypeNameById } = useIndustrialParkDropDownList();
const queryClient = useQueryClient();
async function openDialog(row: API.ParkBountyApplyDetailInfo) {
  try {
    const applyFiles = await queryClient.ensureQueryData({
      queryKey: [
        'enterpriseApplyFileServices/getCustomerUploadApplyFiles',
        row.enterpriseId,
        form.applyMonth,
      ],
      queryFn: async () => {
        return await enterpriseApplyFileServices.getCustomerUploadApplyFiles({
          enterpriseId: row.enterpriseId,
          withMonth: form.applyMonth,
        });
      },
    });
    const lastUploadEnterPactFile = await queryClient.ensureQueryData({
      queryKey: ['enterpriseApplyFileServices/getCustomerUploadApplyFiles', row.enterpriseId],
      queryFn: async () => {
        return await parkBountyApplyServices.getEnterpriseLastUploadEnterPactFileNew({
          companyId: row.enterpriseId,
        });
      },
    });
function openDialog(row: API.ParkBountyApplyDetailInfo) {
  handleAdd({
    list: FourStreamsMaterialUtils.initFourStreamsMaterialFileList(
      row,
      getIndustrialParkTypeNameById(detail.value?.parkId)
    ),
    companyId: row.enterpriseId,
  });
    const applyUploadFiles = await parkBountyApplyServices.getEnterpriseParkApplyUploadFiles({
      companyId: row.enterpriseId,
      parkBountyApplyId: id,
    });
    handleAdd({
      list: EnterpriseApplyFileUtils.initParkCollectFileListApplyFiles(
        applyUploadFiles,
        applyFiles,
        lastUploadEnterPactFile
      ),
      companyId: row.enterpriseId,
    });
  } catch (error) {}
  // handleAdd({
  //   list: FourStreamsMaterialUtils.initFourStreamsMaterialFileList(
  //     row,
  //     getIndustrialParkTypeNameById(detail.value?.parkId)
  //   ),
  //   companyId: row.enterpriseId,
  // });
}
function handleBack() {
src/views/Reward/RewardDeclareDetail.vue
@@ -16,7 +16,6 @@
              :show-upload-btn="false"
              :show-delete-btn="false"
              :show-check-btn="false"
              downloadBtnText="查看"
            />
          </ChunkCellV2>
        </DetailView>
@@ -41,15 +40,20 @@
import ChunkCellV2 from '@/components/Layout/ChunkCellV2.vue';
import MateriaDetailDialog from '@/components/commonView/MateriaDetailDialog.vue';
import DeclareEnterpriseTableView from '@/components/commonView/DeclareEnterpriseTableView.vue';
import { useQuery } from '@tanstack/vue-query';
import { useQuery, useQueryClient } from '@tanstack/vue-query';
import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
import { convertApi2FormUrlOnlyOne, setOSSLink } from '@/utils';
import * as enterpriseApplyFileServices from '@/services/api/EnterpriseApplyFile';
import { convertApi2FormUrlObjectBySeparator, setOSSLink } from '@/utils';
import { useRouteView } from '@/hooks';
import { OrderInputType } from '@bole-core/core';
import { EnterpriseTypeText } from '@/constants';
import { FourStreamsMaterialFileTableItem } from '@/components/commonView/types';
import { useIndustrialParkDropDownList } from '@/hooks/industrialPark';
import { FourStreamsMaterialUtils } from '@/components/commonView/utils';
import {
  CustomerApplyFileTypeListItem,
  EnterpriseApplyFileUtils,
  FourStreamsMaterialUtils,
} from '@/components/commonView/utils';
defineOptions({
  name: 'RewardDeclareDetail',
@@ -66,9 +70,10 @@
  applySumAmount: 0,
  enterpriseTaxSubFileUrl: [] as UploadUserFile[],
  enterpriseOperateFileUrl: [] as UploadUserFile[],
  enterpriseRelateFileUrl: [] as UploadUserFile[],
  parkCollectFileList: [] as CustomerApplyFileTypeListItem[],
  bountyAssignFileUlr: [] as UploadUserFile[],
  bountyCollectFileUrl: [] as UploadUserFile[],
  enterpriseRelateFileUrl: [] as UploadUserFile[],
});
const { data: detail, isLoading } = useQuery({
@@ -88,11 +93,20 @@
    form.parkTypeName = data.parkTypeName;
    form.applyMonth = data.applyMonth;
    form.applySumAmount = data.applySumAmount;
    form.enterpriseTaxSubFileUrl = convertApi2FormUrlOnlyOne(data?.enterpriseTaxSubFileUrl);
    form.enterpriseOperateFileUrl = convertApi2FormUrlOnlyOne(data?.enterpriseOperateFileUrl);
    form.bountyAssignFileUlr = convertApi2FormUrlOnlyOne(data?.bountyAssignFileUlr);
    form.bountyCollectFileUrl = convertApi2FormUrlOnlyOne(data?.bountyCollectFileUrl);
    form.enterpriseRelateFileUrl = convertApi2FormUrlOnlyOne(data?.enterpriseRelateFileUrl);
    form.enterpriseTaxSubFileUrl = convertApi2FormUrlObjectBySeparator(
      data?.enterpriseTaxSubFileUrl
    );
    form.enterpriseOperateFileUrl = convertApi2FormUrlObjectBySeparator(
      data?.enterpriseOperateFileUrl
    );
    form.parkCollectFileList = EnterpriseApplyFileUtils.convertApiFileToParkCollectFileList(
      data.listFiles
    );
    form.bountyAssignFileUlr = convertApi2FormUrlObjectBySeparator(data?.bountyAssignFileUlr);
    form.bountyCollectFileUrl = convertApi2FormUrlObjectBySeparator(data?.bountyCollectFileUrl);
    form.enterpriseRelateFileUrl = convertApi2FormUrlObjectBySeparator(
      data?.enterpriseRelateFileUrl
    );
    getList();
  },
@@ -135,23 +149,59 @@
  }
);
const { dialogProps, handleEdit, editForm } = useFormDialog({
const { dialogProps, handleAdd, editForm } = useFormDialog({
  defaultFormParams: {
    list: [] as FourStreamsMaterialFileTableItem[],
    list: [] as CustomerApplyFileTypeListItem[],
    companyId: '',
  },
});
const { getIndustrialParkTypeNameById } = useIndustrialParkDropDownList();
const queryClient = useQueryClient();
async function openDialog(row: API.ParkBountyApplyDetailInfo) {
  try {
    const applyFiles = await queryClient.ensureQueryData({
      queryKey: [
        'enterpriseApplyFileServices/getCustomerUploadApplyFiles',
        row.enterpriseId,
        form.applyMonth,
      ],
      queryFn: async () => {
        return await enterpriseApplyFileServices.getCustomerUploadApplyFiles({
          enterpriseId: row.enterpriseId,
          withMonth: form.applyMonth,
        });
      },
    });
    const lastUploadEnterPactFile = await queryClient.ensureQueryData({
      queryKey: ['enterpriseApplyFileServices/getCustomerUploadApplyFiles', row.enterpriseId],
      queryFn: async () => {
        return await parkBountyApplyServices.getEnterpriseLastUploadEnterPactFileNew({
          companyId: row.enterpriseId,
        });
      },
    });
function openDialog(row: API.ParkBountyApplyDetailInfo) {
  handleEdit({
    list: FourStreamsMaterialUtils.initFourStreamsMaterialFileList(
      row,
      getIndustrialParkTypeNameById(detail.value?.parkId)
    ),
    companyId: row.enterpriseId,
  });
    const applyUploadFiles = await parkBountyApplyServices.getEnterpriseParkApplyUploadFiles({
      companyId: row.enterpriseId,
      parkBountyApplyId: id,
    });
    handleAdd({
      list: EnterpriseApplyFileUtils.initParkCollectFileListApplyFiles(
        applyUploadFiles,
        applyFiles,
        lastUploadEnterPactFile
      ),
      companyId: row.enterpriseId,
    });
  } catch (error) {}
  // handleEdit({
  //   list: FourStreamsMaterialUtils.initFourStreamsMaterialFileList(
  //     row,
  //     getIndustrialParkTypeNameById(detail.value?.parkId)
  //   ),
  //   companyId: row.enterpriseId,
  // });
}
function handleBack() {
src/views/Reward/RewardGrant.vue
@@ -68,7 +68,7 @@
      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
      </ProTableV2>
      <FourStreamsMaterialFileDialog
      <FourStreamsMaterialFileDialogV2
        v-bind="dialogMaterialFileProps"
        :show-upload-btn="false"
        :show-delete-btn="false"
@@ -105,6 +105,7 @@
  SettleStatusEnumText,
  FinanceStatusEnum,
  FinanceStatusEnumText,
  TransferFileEnumInRewardGrandText,
} from '@/constants';
import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
import FinancialDialog from './components/FinancialDialog.vue';
@@ -112,11 +113,8 @@
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 {
  TransferFileEnumInRewardGrandText,
  TransferFileEnumInRewardGrandTableItem,
} from '@/components/commonView/types';
defineOptions({
  name: 'RewardGrant',
@@ -127,51 +125,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: 'financeStatus',
    name: '财政拨付状态',
    width: 160,
  },
  {
    id: '8',
    enCode: 'financeTime',
    name: '拨付日期',
    width: 180,
  },
  {
    id: '9',
    enCode: 'settleStatus',
    name: '平台充值状态',
    width: 160,
  },
  {
    id: '10',
    enCode: 'settleTime',
    name: '充值日期',
    width: 180,
  },
];
@@ -208,7 +216,7 @@
    },
    extraProps: {
      hide: (row: API.GetParkBountyApplyListOutput) =>
        row.settleStatus === SettleStatusEnum.HasSettle,
        row.settleStatus !== SettleStatusEnum.WaitForSettle,
    },
  },
  {
@@ -221,7 +229,7 @@
    },
    extraProps: {
      hide: (row: API.GetParkBountyApplyListOutput) =>
        row.settleStatus === SettleStatusEnum.WaitForSettle &&
        row.settleStatus !== SettleStatusEnum.HasSettle &&
        row.financeStatus === FinanceStatusEnum.WaitForIncome,
    },
  },