zhengyiming
1 天以前 c88ae82ec2267a77bd19d08ed91f7bf84ad11f87
src/views/Home/Home.vue
@@ -27,7 +27,7 @@
          <QueryFilterItem>
            <FieldRadio
              v-model="extraParamState.auditStatus"
              :value-enum="InsurancePolicyAuditStatusEnumText"
              :value-enum="InsurancePolicyAuditStatusEnumTextForFilter"
              buttonStyle
              showAllBtn
              @change="getList()"
@@ -53,10 +53,18 @@
          </QueryFilterItem>
        </template>
        <template #btn>
          <el-button
            @click="handleDownloadOccupationType()"
            type="primary"
            style="margin-right: 10px"
            link
            v-if="isSjbAccount"
            >职业类型对照表</el-button
          >
          <el-button @click="handleDownload()" type="primary" style="margin-right: 10px" link
            >模板下载</el-button
          >
          <el-button @click="handleUpload()" type="primary" style="margin-right: 10px"
          <el-button @click="handleOpenInstructions()" type="primary" style="margin-right: 10px"
            >导入投保人员</el-button
          >
          <!-- <el-button
@@ -87,7 +95,7 @@
            class="box-item"
            effect="dark"
            :content="row.auditRemark"
            placement="top-start"
            placement="top"
            v-if="row.auditStatus === InsurancePolicyAuditStatusEnum.Reject && row.auditRemark"
            popper-class="max-width-popper"
          >
@@ -104,6 +112,7 @@
    </AppContainer>
    <UploadInsurePersonDialog v-bind="dialogProps" />
    <UploadStampFileDialog v-bind="dialogStampFileProps" />
    <InsureInstructionsDialog v-bind="dialogInstructionsProps" />
  </LoadingLayout>
</template>
@@ -122,13 +131,21 @@
  SearchInput,
  FieldRadio,
  XLSXUtils,
  useDialog,
} from '@bole-core/components';
import * as insuranceOrderServices from '@/services/api/InsuranceOrder';
import { Message, OrderInputType, downloadFileByUrl } from '@bole-core/core';
import { columns } from './constants';
import UploadInsurePersonDialog from './components/UploadInsurePersonDialog.vue';
import UploadStampFileDialog from './components/UploadStampFileDialog.vue';
import { format, downloadFile, setOSSLink, toThousand, convertApi2FormUrl } from '@/utils';
import {
  format,
  downloadFile,
  setOSSLink,
  toThousand,
  convertApi2FormUrl,
  convertFormUrl2Api,
} from '@/utils';
import { ModelValueType } from 'element-plus';
import {
  InsuranceOrderTempPath,
@@ -137,13 +154,18 @@
  InsurancePolicyStatusEnum,
  AppType,
  InsurancePolicyAuditStatusEnumText,
  InsurancePolicyAuditStatusEnumTextForFilter,
  InsurancePolicyAuditStatusEnum,
  InsurancePolicyProductIdNumberEnum,
  InsurancePolicyListPayStatusEnum,
  InsurancePolicyListPayStatusEnumText,
  InsuranceOccupationTypeTempPath,
} from '@/constants';
import dayjs from 'dayjs';
import _ from 'lodash';
import InsureInstructionsDialog from './components/InsureInstructionsDialog.vue';
import { useUserInsureProductSetting } from '@/hooks';
// import { Recorder } from '@/utils/record';
defineOptions({
  name: 'Home',
@@ -182,7 +204,6 @@
    },
    extraProps: {
      hide: (row: API.GetInsurancePageOutput) =>
        row.auditStatus !== InsurancePolicyAuditStatusEnum.Pass ||
        row.status !== InsurancePolicyStatusEnum.WaitEffect,
    },
  },
@@ -252,11 +273,22 @@
};
const state = reactive({ ...BaseState });
// const recorder = ref(new Recorder());
onMounted(async () => {
  await getList();
  state.loading = false;
  // handleOpenInstructions();
  // setTimeout(() => {
  //   // recorder.value.init();
  //   recorder.value.replaySession('9cb24e5a-0423-4dcd-abd5-fa7a4117cadc');
  // }, 3000);
});
// onUnmounted(() => {
//   recorder.value.stopRecordingAndSave();
// });
const {
  getDataSource: getList,
@@ -328,15 +360,16 @@
    url: [] as UploadUserFile[],
    productIdNumber: '',
    productSchemeIdNumber: '',
    effectStartTime: dayjs().add(1, 'day').format('YYYY-MM-DD'),
  },
  closeAfterConfirm: false,
});
async function checkInrancesSerialNumStatus() {
  try {
    let params: API.APIimportInsStaffToListParams = {
    let params: API.APIcheckInrancesSerialNumStatusParams = {
      serialNum: editForm.serialNum,
      url: editForm.url?.[0]?.path,
      // url: editForm.url?.[0]?.path,
    };
    let res = await insuranceOrderServices.checkInrancesSerialNumStatus(params);
    if (res === InsurancePolicyStatusEnum.Effecting) {
@@ -344,8 +377,12 @@
    } else if (res === InsurancePolicyStatusEnum.OutTimeEffect) {
      await Message.tipMessage('该批次保单已失效,请修改批次号后重新导入');
    } else if (res === InsurancePolicyStatusEnum.WaitEffect) {
      await Message.tipMessage('存在相同的批次号,是否覆盖?');
      importInsStaffToList();
      if (isSjbAccount.value) {
        await Message.tipMessage('存在相同的批次号,请修改批次号后重新导入');
      } else {
        await Message.tipMessage('存在相同的批次号,是否覆盖?');
        importInsStaffToList();
      }
    } else {
      importInsStaffToList();
    }
@@ -354,36 +391,79 @@
async function importInsStaffToList() {
  try {
    let params: API.APIimportInsStaffToListParams = {
    let params: API.ImportInsStaffToListFrontInput = {
      serialNum: editForm.serialNum,
      url: editForm.url?.[0]?.path,
      productIdNumber: editForm.productIdNumber,
      productSchemeIdNumber: editForm.productSchemeIdNumber,
      effectStartTime: editForm.effectStartTime,
    };
    let res = await insuranceOrderServices.importInsStaffToList(params);
    if (res.length > 0) {
      await Message.tipMessage('存在错误数据,是否导出?');
      XLSXUtils.exportToXLSX({
        workbookDataList: res,
        fileName: '错误人员名单',
        workbookHeaderMap: {
          name: '雇员姓名',
          sex: '性别',
          certType: '证件类型',
          certNo: '证件号码',
          jobName: '雇员工种',
          useEmploer: '用工单位',
          address: '用工地点',
          note: '备注',
        },
      });
    let res = await insuranceOrderServices.importInsStaffToList(params, {
      timeout: 60 * 1000 * 10,
      customErrorHandler(error) {
        if (error?.response?.data?.error?.code === '10001') {
          Message.tipMessage(error.response.data?.error?.message, {
            showCancelButton: false,
          });
          return true;
        }
        return false;
      },
    });
    if (res) {
      // await Message.tipMessage('存在错误数据,是否导出?');
      try {
        if (res.errorList.length > 0) {
          await Message.tipMessage(
            `总投保人数${res.importAllCount}人,投保成功${res.successCount}人,投保失败${res.errorList.length}人是否导出投保失败人员清单?`,
            {
              confirmButtonText: '导出',
            }
          );
          XLSXUtils.exportToXLSX({
            workbookDataList: res.errorList,
            fileName: '错误人员名单',
            workbookHeaderMap: {
              name: '雇员姓名',
              sex: '性别',
              certType: '证件类型',
              certNo: '证件号码',
              jobName: '雇员工种',
              useEmploer: '用工单位',
              address: '用工地点',
              note: '备注',
            },
          });
        } else {
          await Message.tipMessage(
            `总投保人数${res.importAllCount}人,投保成功${res.successCount}人`,
            {
              showCancelButton: false,
            }
          );
        }
      } catch (error) {}
      dialogState.dialogVisible = false;
      getList(paginationState.pageIndex);
    }
    dialogState.dialogVisible = false;
    getList(paginationState.pageIndex);
  } catch (error) {}
}
function handleUpload() {
const { dialogProps: dialogInstructionsProps, dialogState: dialogInstructionsState } = useDialog({
  onConfirm: handleUpload,
});
const { isSjbAccount } = useUserInsureProductSetting();
function handleOpenInstructions() {
  if (isSjbAccount.value) {
    dialogInstructionsState.dialogVisible = true;
  } else {
    handleUpload();
  }
}
async function handleUpload() {
  handleAdd({
    serialNum: `${dayjs().format('YYYYMMDD')}${_.random(0, 9999).toString().padStart(4, '0')}`,
    url: [] as UploadUserFile[],
@@ -424,6 +504,10 @@
      downloadFile(res.data, `在保人员导出`, 'xlsx');
    }
  } catch (error) {}
}
function handleDownloadOccupationType() {
  downloadFileByUrl(InsuranceOccupationTypeTempPath, '职业类型对照表');
}
function handleDownload() {
@@ -467,7 +551,7 @@
  try {
    let params: API.UploadInsuranceStampFilesInput = {
      insurancePolicyId: stampFileForm.id,
      listFiles: stampFileForm.url?.map((x) => x.path) ?? [],
      listFiles: convertFormUrl2Api(stampFileForm.url),
    };
    let res = await insuranceOrderServices.uploadInsuranceStampFiles(params);
    if (res) {
@@ -550,12 +634,15 @@
  });
}
function handleGoDownloadInvoice(row: API.GetInsurancePageOutput) {
  router.push({
    name: 'InsureDownloadInvoice',
    params: {
      id: row.id,
    },
  });
async function handleGoDownloadInvoice(row: API.GetInsurancePageOutput) {
  try {
    await insuranceOrderServices.getInvoiceId({ id: row.id });
    router.push({
      name: 'InsureDownloadInvoice',
      params: {
        id: row.id,
      },
    });
  } catch (error) {}
}
</script>