zhengyiming
6 天以前 34e523d5ed7f25a0bc20532577ccde90386352aa
src/views/Home/Home.vue
@@ -18,7 +18,7 @@
          <QueryFilterItem>
            <FieldRadio
              v-model="extraParamState.insurancePeriod"
              :value-enum="insuranceTypeText"
              :value-enum="insuranceTypeTextForFilter"
              buttonStyle
              showAllBtn
              @change="getList()"
@@ -27,7 +27,7 @@
          <QueryFilterItem>
            <FieldRadio
              v-model="extraParamState.auditStatus"
              :value-enum="InsurancePolicyAuditStatusEnumText"
              :value-enum="InsurancePolicyAuditStatusEnumTextForFilter"
              buttonStyle
              showAllBtn
              @change="getList()"
@@ -58,6 +58,7 @@
            type="primary"
            style="margin-right: 10px"
            link
            v-if="isSjbAccount"
            >职业类型对照表</el-button
          >
          <el-button @click="handleDownload()" type="primary" style="margin-right: 10px" link
@@ -112,6 +113,8 @@
    <UploadInsurePersonDialog v-bind="dialogProps" />
    <UploadStampFileDialog v-bind="dialogStampFileProps" />
    <InsureInstructionsDialog v-bind="dialogInstructionsProps" />
    <InsureLineModeSelectDialog v-bind="dialogLineModeSelectProps" />
    <DisbursementDialog v-bind="dialogDisbursementProps" />
  </LoadingLayout>
</template>
@@ -133,8 +136,9 @@
  useDialog,
} from '@bole-core/components';
import * as insuranceOrderServices from '@/services/api/InsuranceOrder';
import * as parkBountyApplyServices from '@/services/api/ParkBountyApply';
import { Message, OrderInputType, downloadFileByUrl } from '@bole-core/core';
import { columns } from './constants';
import { columns, InsureLineMode } from './constants';
import UploadInsurePersonDialog from './components/UploadInsurePersonDialog.vue';
import UploadStampFileDialog from './components/UploadStampFileDialog.vue';
import {
@@ -153,15 +157,21 @@
  InsurancePolicyStatusEnum,
  AppType,
  InsurancePolicyAuditStatusEnumText,
  InsurancePolicyAuditStatusEnumTextForFilter,
  InsurancePolicyAuditStatusEnum,
  InsurancePolicyProductIdNumberEnum,
  InsurancePolicyListPayStatusEnum,
  InsurancePolicyListPayStatusEnumText,
  InsuranceOccupationTypeTempPath,
  InsurancePeriodEnum,
  insuranceTypeTextForFilter,
} from '@/constants';
import dayjs from 'dayjs';
import _ from 'lodash';
import InsureInstructionsDialog from './components/InsureInstructionsDialog.vue';
import InsureLineModeSelectDialog from './components/InsureLineModeSelectDialog.vue';
import DisbursementDialog from './components/DisbursementDialog.vue';
import { useInsureProductSchemeAllList, useUserInsureProductSetting } from '@/hooks';
// import { Recorder } from '@/utils/record';
defineOptions({
@@ -187,8 +197,7 @@
      onClick: (role) => handleBatch(role),
    },
    extraProps: {
      hide: (row: API.GetInsurancePageOutput) =>
        row.productOnline || row.status !== InsurancePolicyStatusEnum.Effecting,
      hide: (row: API.GetInsurancePageOutput) => row.status !== InsurancePolicyStatusEnum.Effecting,
    },
  },
  {
@@ -200,8 +209,16 @@
      onClick: (role) => handleUploadStampFile(role),
    },
    extraProps: {
      hide: (row: API.GetInsurancePageOutput) =>
        row.status !== InsurancePolicyStatusEnum.WaitEffect,
      hide: (row: API.GetInsurancePageOutput) => {
        if (row.productOnline) {
          return (
            row.auditStatus !== InsurancePolicyAuditStatusEnum.WaitAdd &&
            row.auditStatus !== InsurancePolicyAuditStatusEnum.WaitAudit
          );
        } else {
          return row.status !== InsurancePolicyStatusEnum.WaitEffect;
        }
      },
    },
  },
  {
@@ -216,19 +233,19 @@
      hide: (row: API.GetInsurancePageOutput) => row.productOnline || !row.insureBillUrl,
    },
  },
  {
    data: {
      enCode: 'payBtn',
      name: '支付',
    },
    emits: {
      onClick: (role) => handlePay(role),
    },
    extraProps: {
      hide: (row: API.GetInsurancePageOutput) =>
        row.payStatus != InsurancePolicyListPayStatusEnum.WaitPay,
    },
  },
  // {
  //   data: {
  //     enCode: 'payBtn',
  //     name: '支付',
  //   },
  //   emits: {
  //     onClick: (role) => handlePay(role),
  //   },
  //   extraProps: {
  //     hide: (row: API.GetInsurancePageOutput) =>
  //       row.payStatus != InsurancePolicyListPayStatusEnum.WaitPay,
  //   },
  // },
  {
    data: {
      enCode: 'stampFilesBtn',
@@ -263,6 +280,31 @@
  //     onClick: (role) => handleStandarEndo(role),
  //   },
  // },
  {
    data: {
      enCode: 'submitAuditBtn',
      name: '提交审核',
    },
    emits: {
      onClick: (role) => handleSubmitAuditBtn(role),
    },
    extraProps: {
      hide: (row: API.GetInsurancePageOutput) =>
        row.auditStatus != InsurancePolicyAuditStatusEnum.WaitAdd,
    },
  },
  {
    data: {
      enCode: 'applyTradeBySelfBtn',
      name: '出账申请',
    },
    emits: {
      onClick: (role) => handleParkBountyApplyTradeBySelf(role),
    },
    extraProps: {
      hide: (row: API.GetInsurancePageOutput) => row.productOnline,
    },
  },
]).filter(Boolean);
const BaseState = {
@@ -358,6 +400,8 @@
    productIdNumber: '',
    productSchemeIdNumber: '',
    effectStartTime: dayjs().add(1, 'day').format('YYYY-MM-DD'),
    effectEndTime: '',
    isOnLineInsurance: false,
  },
  closeAfterConfirm: false,
});
@@ -374,13 +418,23 @@
    } 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();
    }
  } catch (error) {}
}
const { isSjbAccount, getInsureProductIdByIdNumber } = useUserInsureProductSetting();
const { getInsureProductSchemeByIdNumber } = useInsureProductSchemeAllList({
  insureProductId: computed(() => getInsureProductIdByIdNumber(editForm.productIdNumber)),
});
async function importInsStaffToList() {
  try {
@@ -391,8 +445,23 @@
      productSchemeIdNumber: editForm.productSchemeIdNumber,
      effectStartTime: editForm.effectStartTime,
    };
    const currentInsureProductScheme = getInsureProductSchemeByIdNumber(
      editForm.productSchemeIdNumber
    );
    if (currentInsureProductScheme?.period === InsurancePeriodEnum['1-29D']) {
      params.effectEndTime = editForm.effectEndTime;
    }
    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('存在错误数据,是否导出?');
@@ -433,18 +502,39 @@
  } catch (error) {}
}
const { dialogProps: dialogLineModeSelectProps, dialogState: dialogLineModeSelectState } =
  useDialog({
    onConfirm: handleLineModeSelect,
  });
async function handleLineModeSelect(mode: InsureLineMode) {
  if (mode === InsureLineMode.OnLine) {
    dialogInstructionsState.dialogVisible = true;
  } else {
    handleUpload();
  }
}
const { dialogProps: dialogInstructionsProps, dialogState: dialogInstructionsState } = useDialog({
  onConfirm: handleUpload,
  onConfirm: () => {
    return handleUpload(true);
  },
});
function handleOpenInstructions() {
  dialogInstructionsState.dialogVisible = true;
  if (isSjbAccount.value) {
    // dialogInstructionsState.dialogVisible = true;
    dialogLineModeSelectState.dialogVisible = true;
  } else {
    handleUpload();
  }
}
async function handleUpload() {
async function handleUpload(isOnLineInsurance = false) {
  handleAdd({
    serialNum: `${dayjs().format('YYYYMMDD')}${_.random(0, 9999).toString().padStart(4, '0')}`,
    url: [] as UploadUserFile[],
    isOnLineInsurance,
  });
}
@@ -614,7 +704,12 @@
async function handleGoDownloadInvoice(row: API.GetInsurancePageOutput) {
  try {
    await insuranceOrderServices.getInvoiceId({ id: row.id });
    await insuranceOrderServices.getInvoiceId(
      { id: row.id },
      {
        timeout: 60 * 1000 * 30,
      }
    );
    router.push({
      name: 'InsureDownloadInvoice',
      params: {
@@ -623,4 +718,63 @@
    });
  } catch (error) {}
}
async function handleSubmitAuditBtn(row: API.GetInsurancePageOutput) {
  try {
    let params: API.InsurancePolicyAuditInput = {
      insurancePolicyId: row.id,
    };
    let res = await insuranceOrderServices.insurancePolicyAddAudit(params);
    if (res) {
      Message.successMessage('上传成功');
      getList(paginationState.pageIndex);
    }
  } catch (error) {}
}
function handleParkBountyApplyTradeBySelf(row: API.GetInsurancePageOutput) {
  handleDisbursementAdd({
    remianAmount: row.remianAmount,
  });
}
const {
  dialogProps: dialogDisbursementProps,
  handleAdd: handleDisbursementAdd,
  editForm: editDisbursementForm,
} = useFormDialog({
  onConfirm: parkBountyApplyTradeBySelf,
  defaultFormParams: {
    payRemark: '',
    tradeAmount: 0,
    remianAmount: 0,
    payFileUrl: [] as UploadUserFile[],
    incomeCompanyName: '',
    insureBillNo: '',
    incomeBankAccount: '',
    incomeBankCardNumber: '',
    incomeBankName: '',
  },
});
async function parkBountyApplyTradeBySelf() {
  try {
    let params: API.CreateParkBountyTradeInput = {
      tradeAmount: editDisbursementForm.tradeAmount,
      payFileUrl: editDisbursementForm.payFileUrl.map((item) => item.url).join('|'),
      payRemark: editDisbursementForm.payRemark,
      incomeCompanyName: editDisbursementForm.incomeCompanyName,
      insureBillNo: editDisbursementForm.insureBillNo,
      incomeBankAccount: editDisbursementForm.incomeBankAccount,
      incomeBankCardNumber: editDisbursementForm.incomeBankCardNumber,
      incomeBankName: editDisbursementForm.incomeBankName,
    };
    let res = await parkBountyApplyServices.parkBountyApplyTradeBySelf(params);
    if (res) {
      Message.successMessage('操作成功');
      getList(paginationState.pageIndex);
    }
  } catch (error) {}
}
</script>