wupengfei
2025-03-28 acaec313ab0e3c9381060e36bf3ce4abc606dc9a
feat: 接口对接
11个文件已修改
1个文件已添加
615 ■■■■ 已修改文件
pnpm-lock.yaml 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/insureBatchBill.ts 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/InsureBatchBill.ts 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/typings.d.ts 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home/BatchChange.vue 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home/Home.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home/components/BatchChangeRecordDetailDialog.vue 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home/components/BatchChangeRecordView.vue 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home/components/InsureOrderInfoView.vue 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/InsuranceClaim/components/InsuranceClaimView.vue 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/InsuranceClaim/hooks/index.ts 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pnpm-lock.yaml
@@ -1,5 +1,9 @@
lockfileVersion: '6.0'
settings:
  autoInstallPeers: true
  excludeLinksFromLockfile: false
overrides:
  vue: 3.5.11
@@ -17,7 +21,7 @@
    version: 1.0.3(@bole-12333/chat-kit@1.0.1)(@tiptap/core@2.1.13)(@tiptap/extension-document@2.1.13)(@tiptap/extension-image@2.1.13)(@tiptap/extension-mention@2.1.13)(@tiptap/extension-paragraph@2.1.13)(@tiptap/extension-placeholder@2.1.13)(@tiptap/extension-text@2.1.13)(@tiptap/pm@2.1.13)(@tiptap/suggestion@2.1.13)(dayjs@1.11.6)(vue@3.5.11)
  '@bole-core/components':
    specifier: latest
    version: 1.3.2(@bole-core/core@1.0.2)(@bole-core/sass-utils@0.0.1)(@element-plus/icons-vue@2.3.1)(@tanstack/vue-query@4.37.1)(@videojs-player/vue@1.0.0)(@vueuse/core@11.1.0)(@vueuse/shared@11.1.0)(dayjs@1.11.6)(element-plus@2.9.1)(lodash@4.17.21)(mitt@3.0.0)(senin-help@1.0.5)(senin-vue@1.0.4)(video.js@7.20.3)(vue-component-type-helpers@2.1.6)(vue@3.5.11)
    version: link:../BoleWebCore/packages/components
  '@bole-core/core':
    specifier: latest
    version: 1.0.2(@ywwlmm/openapi@0.0.3)(ali-oss@6.21.0)(axios@1.7.7)(dayjs@1.11.6)(element-plus@2.9.1)(file-saver@2.0.5)(jszip@3.10.1)(lodash@4.17.21)(senior-request@1.0.1)(vue-router@4.4.5)(vue@3.5.11)(xlsx-style@0.8.13)(xlsx@0.18.5)
@@ -2152,44 +2156,6 @@
      '@tiptap/suggestion': 2.1.13(@tiptap/core@2.1.13)(@tiptap/pm@2.1.13)
      dayjs: 1.11.6
      vue: 3.5.11(typescript@4.8.4)
    dev: false
  /@bole-core/components@1.3.2(@bole-core/core@1.0.2)(@bole-core/sass-utils@0.0.1)(@element-plus/icons-vue@2.3.1)(@tanstack/vue-query@4.37.1)(@videojs-player/vue@1.0.0)(@vueuse/core@11.1.0)(@vueuse/shared@11.1.0)(dayjs@1.11.6)(element-plus@2.9.1)(lodash@4.17.21)(mitt@3.0.0)(senin-help@1.0.5)(senin-vue@1.0.4)(video.js@7.20.3)(vue-component-type-helpers@2.1.6)(vue@3.5.11):
    resolution: {integrity: sha512-sMCgoaKtJi3nPP3MrMx5cs0IjI0Tbes3YJF1AHN3TItR549aYc+vb+mkU34MjWh7EzqTE40htPxJueAGT6tMWg==}
    peerDependencies:
      '@bole-core/core': '*'
      '@bole-core/sass-utils': '*'
      '@element-plus/icons-vue': '*'
      '@tanstack/vue-query': '*'
      '@videojs-player/vue': '*'
      '@vueuse/core': '*'
      '@vueuse/shared': '*'
      dayjs: ^1.11.7
      element-plus: '*'
      lodash: '*'
      mitt: '*'
      senin-help: '*'
      senin-vue: '*'
      video.js: '*'
      vue: '*'
      vue-component-type-helpers: ^2.1.6
    dependencies:
      '@bole-core/core': 1.0.2(@ywwlmm/openapi@0.0.3)(ali-oss@6.21.0)(axios@1.7.7)(dayjs@1.11.6)(element-plus@2.9.1)(file-saver@2.0.5)(jszip@3.10.1)(lodash@4.17.21)(senior-request@1.0.1)(vue-router@4.4.5)(vue@3.5.11)(xlsx-style@0.8.13)(xlsx@0.18.5)
      '@bole-core/sass-utils': 0.0.1(element-plus@2.9.1)
      '@element-plus/icons-vue': 2.3.1(vue@3.5.11)
      '@tanstack/vue-query': 4.37.1(vue@3.5.11)
      '@videojs-player/vue': 1.0.0(@types/video.js@7.3.49)(video.js@7.20.3)(vue@3.5.11)
      '@vueuse/core': 11.1.0(vue@3.5.11)
      '@vueuse/shared': 11.1.0(vue@3.5.11)
      dayjs: 1.11.6
      element-plus: 2.9.1(vue@3.5.11)
      lodash: 4.17.21
      mitt: 3.0.0
      senin-help: 1.0.5(@tanstack/vue-query@4.37.1)(axios@1.7.7)(dayjs@1.11.6)(element-plus@2.9.1)(file-saver@2.0.5)(lodash@4.17.21)(semver@7.6.3)(vue@3.5.11)(xlsx-style@0.8.13)(xlsx@0.18.5)
      senin-vue: 1.0.4(@tanstack/vue-query@4.37.1)(axios@1.7.7)(dayjs@1.11.6)(element-plus@2.9.1)(file-saver@2.0.5)(lodash@4.17.21)(mitt@3.0.0)(semver@7.6.3)(senin-help@1.0.5)(vue@3.5.11)
      video.js: 7.20.3
      vue: 3.5.11(typescript@4.8.4)
      vue-component-type-helpers: 2.1.6
    dev: false
  /@bole-core/core@1.0.2(@ywwlmm/openapi@0.0.3)(ali-oss@6.21.0)(axios@1.7.7)(dayjs@1.11.6)(element-plus@2.9.1)(file-saver@2.0.5)(jszip@3.10.1)(lodash@4.17.21)(senior-request@1.0.1)(vue-router@4.4.5)(vue@3.5.11)(xlsx-style@0.8.13)(xlsx@0.18.5):
@@ -18086,7 +18052,3 @@
  /zwitch@1.0.5:
    resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==}
    dev: false
settings:
  autoInstallPeers: true
  excludeLinksFromLockfile: false
src/constants/index.ts
@@ -10,3 +10,4 @@
export * from './insuranceClaim';
export * from './app';
export * from './temp';
export * from './insureBatchBill';
src/constants/insureBatchBill.ts
New file
@@ -0,0 +1,59 @@
export enum BatchBillCheckStatus {
  /**批单待审核 */
  WaitCheck = 1,
  /**批单审核中 */
  Checking = 2,
  /**已生效 */
  InValidate = 10,
  /**批单待支付 */
  WaitPay = 15,
  /**超期未支付 */
  ExpirePay = 20,
  /**支付成功 */
  PaySuccess = 30,
  /**审核不通过 */
  CheckTurnDown = -1,
  /**待退费 */
  WaitForRefund = -10,
  /**已退费 */
  HasRefund = -11,
  /**已撤回 */
  HasReverse = -20,
  /**已删除 */
  HasDeleted = -30,
  /**下发修改 */
  WaitForModify = -40,
}
export const BatchBillCheckStatusText = {
  [BatchBillCheckStatus.WaitCheck]: '待审核',
  [BatchBillCheckStatus.Checking]: '审核中',
  [BatchBillCheckStatus.InValidate]: '已生效',
  [BatchBillCheckStatus.WaitPay]: '待支付',
  [BatchBillCheckStatus.ExpirePay]: '超期未支付',
  // [BatchBillCheckStatus.PaySuccess]: '支付成功',
  [BatchBillCheckStatus.CheckTurnDown]: '不通过',
  [BatchBillCheckStatus.WaitForRefund]: '待退费',
  [BatchBillCheckStatus.HasRefund]: '已退费',
  [BatchBillCheckStatus.HasReverse]: '已撤回',
  [BatchBillCheckStatus.HasDeleted]: '已删除',
  [BatchBillCheckStatus.WaitForModify]: '下发修改',
};
export enum BatchChangeTypeEnum {
  /**批增 */
  Add = 10,
  /**批减 */
  Delete = 20,
  /**替换 */
  Update = 30,
  /**加减人 */
  AddAndSub = 40,
}
export const BatchChangeTypeEnumText = {
  [BatchChangeTypeEnum.Add]: '批增',
  [BatchChangeTypeEnum.Delete]: '批减',
  [BatchChangeTypeEnum.Update]: '替换',
  [BatchChangeTypeEnum.AddAndSub]: '加减人',
};
src/services/api/InsureBatchBill.ts
@@ -80,12 +80,63 @@
  );
}
/** 客户端-批改详情 GET /api/InsureBatchBill/GetInsureBatchDetail */
export async function getInsureBatchDetail(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIgetInsureBatchDetailParams,
  options?: API.RequestConfig
) {
  return request<API.InsureBatchDetailDto>('/api/InsureBatchBill/GetInsureBatchDetail', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** 客户端-批单增员减员保单数据导入 POST /api/InsureBatchBill/ImportBatchAddOrSubOrderData */
export async function importBatchAddOrSubOrderData(
  body: API.ImportBatchAddOrSubOrderInput,
  options?: API.RequestConfig
) {
  return request<any>('/api/InsureBatchBill/ImportBatchAddOrSubOrderData', {
  return request<API.CheckImportBatchAddOrSubOrderDataOutput>(
    '/api/InsureBatchBill/ImportBatchAddOrSubOrderData',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 客户端-批单替换数据导入 POST /api/InsureBatchBill/ImportBatchUpdateOrderData */
export async function importBatchUpdateOrderData(
  body: API.ImportBatchAddOrSubOrderInput,
  options?: API.RequestConfig
) {
  return request<API.CheckImportBatchUpdateOrderDataOutput>(
    '/api/InsureBatchBill/ImportBatchUpdateOrderData',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 客户端-检查批单增员减员保单数据导入 POST /api/InsureBatchBill/ImportCheckBatchAddOrSubOrderData */
export async function importCheckBatchAddOrSubOrderData(
  body: API.ImportBatchAddOrSubOrderInput,
  options?: API.RequestConfig
) {
  return request<any>('/api/InsureBatchBill/ImportCheckBatchAddOrSubOrderData', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
@@ -95,12 +146,12 @@
  });
}
/** 客户端-批单替换数据导入 POST /api/InsureBatchBill/ImportBatchUpdateOrderData */
export async function importBatchUpdateOrderData(
/** 客户端-检查批单替换数据导入 POST /api/InsureBatchBill/ImportCheckBatchUpdateOrderData */
export async function importCheckBatchUpdateOrderData(
  body: API.ImportBatchAddOrSubOrderInput,
  options?: API.RequestConfig
) {
  return request<any>('/api/InsureBatchBill/ImportBatchUpdateOrderData', {
  return request<any>('/api/InsureBatchBill/ImportCheckBatchUpdateOrderData', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
src/services/api/typings.d.ts
@@ -268,6 +268,10 @@
    id?: string;
  }
  interface APIgetInsureBatchDetailParams {
    batchBillId?: string;
  }
  interface APIgetListParams {
    filter?: string;
    clientId?: string;
@@ -459,6 +463,8 @@
    insureBatchBillId?: string;
    /** 审核理由 */
    auditNote?: string;
    /** 批单编号 */
    batchBillNo?: string;
    checkStatus?: BatchBillCheckStatus;
    /** 生效时间 */
    effectTime?: string;
@@ -483,6 +489,20 @@
    id2?: string;
    sortCode2?: number;
    type?: number;
  }
  interface CheckImportBatchAddOrSubOrderDataOutput {
    /** 错误数据列表 */
    error?: ImportBatchAddOrSubOrderDataInput[];
    /** 新增数据列表 */
    addOrSub?: ImportBatchAddOrSubOrderDataInput[];
  }
  interface CheckImportBatchUpdateOrderDataOutput {
    /** 错误数据列表 */
    error?: ImportBatchUpdateOrderDataInput[];
    /** 替换数据列表 */
    update?: ImportBatchUpdateOrderDataInput[];
  }
  interface CheckLoginVerificationCodeInput {
@@ -968,6 +988,31 @@
    roleNames: string[];
  }
  interface ImportBatchAddOrSubOrderDataInput {
    /** 批改标志 */
    changeFlag: string;
    /** 方案代码 */
    insuranceScheme: string;
    /** 姓名 */
    name: string;
    /** 证件类型 */
    certType: string;
    /** 证件号码 */
    idNumber: string;
    /** 年龄 */
    age?: number;
    /** 电话号码 */
    phoneNumber?: string;
    /** 职业/工种 */
    workType: string;
    /** 性别 */
    gender?: string;
    /** 出生日期 */
    birthDay?: string;
    /** 备注 */
    remark?: string;
  }
  interface ImportBatchAddOrSubOrderInput {
    /** 导入地址 */
    url?: string;
@@ -989,6 +1034,32 @@
    workType?: string;
    birthDay?: string;
    remark?: string;
  }
  interface ImportBatchUpdateOrderDataInput {
    /** 原被保人姓名 */
    orginName: string;
    /** 原被保人证件号码 */
    orginIdNumber: string;
    /** 姓名 */
    name: string;
    /** 证件类型 */
    certType: string;
    /** 证件号码 */
    idNumber: string;
    /** 电话号码 */
    phoneNumber?: string;
    /** 职业/工种 */
    workType: string;
    /** 性别 */
    gender?: string;
    /** 年龄 */
    age?: number;
    /** 出生日期 */
    birthDay?: string;
    /** 备注 */
    remark?: string;
    changeFlag?: string;
  }
  interface ImportInsStaffAnalysisList {
@@ -1192,6 +1263,10 @@
    orderRelevanceStr?: string;
    /** 保单文件 */
    orderBillFile?: string;
    /** 投保人和被投保人 */
    enterpriseName?: string;
    phone?: string;
    insuranceOrg?: string;
  }
  interface InsuranceOrderListOutputPageOutput {
@@ -1226,6 +1301,8 @@
    idNumber?: string;
    /** 性别 */
    gender?: string;
    /** 手机号码 */
    phoneNumber?: string;
    /** 年龄 */
    age?: number;
    /** 出生日期 */
@@ -1288,6 +1365,17 @@
    delInsStaffList?: ImportBatchStaffListInput[];
  }
  interface InsureBatchDetailDto {
    /** 批改人员详情 */
    staffList?: InsureBatchBillDetailDto[];
    /** 生效时间 */
    effectTime?: string;
    /** 保单号 */
    insureBillNo?: string;
    /** 投保人 */
    enterpriseName?: string;
  }
  interface IStringValueType {
    name?: string;
    properties?: Record<string, any>;
src/views/Home/BatchChange.vue
@@ -1,11 +1,11 @@
<template>
  <LoadingLayout :loading="state.loading">
  <LoadingLayout>
    <AppScrollContainer>
      <ChunkCell title="1">
        <template #title>
          <div class="batch-change-title">
            <el-text style="margin-right: 20px">{{ `保单号:${'958585860689'}` }}</el-text>
            <el-text>{{ `投保人:${'人力无忧'}` }}</el-text>
            <el-text style="margin-right: 20px">{{ `保单号:${insureBillNo ?? ''}` }}</el-text>
            <el-text>{{ `投保人:${insurerName ?? ''}` }}</el-text>
          </div>
        </template>
        <ProForm :model="state.form" ref="formRef" label-width="120px">
@@ -29,15 +29,16 @@
            <ProFormColItem :span="8">
              <ProFormItemV2 label="" prop="url" label-width="0">
                <ProFormUpload
                  v-model:file-url="state.form.url"
                  v-model:file-url="state.form.addOrReduceUrl"
                  :limit="1"
                  :limitFileSize="10"
                  accept="xlsx,xls"
                  accept="xlsx"
                  :showTip="false"
                  :on-success="handleUploadAddOrReduce"
                  :disabled="urlDisabled"
                >
                  <template #default>
                    <el-button type="primary">加减人</el-button>
                    <el-button type="primary" :disabled="urlDisabled">加减人</el-button>
                    <el-button link type="primary" @click.stop="DownloadAddOrReducePersonTemplate"
                      >下载模板</el-button
                    >
@@ -50,15 +51,16 @@
            <ProFormColItem :span="8">
              <ProFormItemV2 label="" prop="url" label-width="0">
                <ProFormUpload
                  v-model:file-url="state.form.url"
                  v-model:file-url="state.form.replaceUrl"
                  :limit="1"
                  :limitFileSize="10"
                  accept="xlsx,xls"
                  accept="xlsx"
                  :showTip="false"
                  :on-success="handleUploadReplace"
                  :disabled="urlDisabled"
                >
                  <template #default>
                    <el-button type="primary">替换人</el-button>
                    <el-button type="primary" :disabled="urlDisabled">替换人</el-button>
                    <el-button link type="primary" @click.stop="downloadReplacePersonTemplate"
                      >下载模板</el-button
                    >
@@ -111,10 +113,12 @@
} from '@bole-core/components';
import * as insuranceOrderServices from '@/services/api/InsuranceOrder';
import * as insureBatchBillServices from '@/services/api/InsureBatchBill';
import { downloadFileByUrl, Message, OrderInputType } from '@bole-core/core';
import { downloadFile, downloadFileByUrl, Message, OrderInputType } from '@bole-core/core';
import { InsuranceAddOrReduceTempPath, InsuranceChangeTempPath } from '@/constants';
import { useRouteView } from '@/hooks';
import { FormInstance } from 'element-plus';
import { useQuery, useQueryClient } from '@tanstack/vue-query';
import { paginateList } from '@/utils';
defineOptions({
  name: 'BatchChange',
@@ -123,7 +127,7 @@
const column: API.CustomModuleColumnDto[] = [
  {
    id: '1',
    enCode: 'name',
    enCode: 'changeFlag',
    name: '批改类型',
  },
  {
@@ -133,32 +137,32 @@
  },
  {
    id: '3',
    enCode: 'name',
    enCode: 'idNumber',
    name: '身份证号',
  },
  {
    id: '4',
    enCode: 'idNumber',
    enCode: 'workType',
    name: '雇员工种',
  },
  {
    id: '5',
    enCode: 'idNumber',
    enCode: 'gender',
    name: '性别',
  },
  {
    id: '6',
    enCode: 'idNumber',
    enCode: 'age',
    name: '年龄',
  },
  {
    id: '7',
    enCode: 'idNumber',
    enCode: 'birthDay',
    name: '出生日期',
  },
  {
    id: '8',
    enCode: 'idNumber',
    enCode: 'phoneNumber',
    name: '手机号码',
  },
];
@@ -166,48 +170,36 @@
const route = useRoute();
const { closeViewPush } = useRouteView();
const id = route.params.id as string;
const insurerName = route.query.insurerName as string;
const insureBillNo = route.query.insureBillNo as string;
const BaseState = {
  loading: true,
  form: {
    time: '',
    url: [] as UploadUserFile[],
    addOrReduceUrl: [] as UploadUserFile[],
    replaceUrl: [] as UploadUserFile[],
  },
  staffList: [] as any[],
};
const state = reactive({ ...BaseState });
const {
  getDataSource: getBatchRefundInfoDetail,
  proTableProps,
  paginationState,
  extraParamState,
  reset,
} = useTable(
  async ({ pageIndex, pageSize }, extraParamState) => {
const urlDisabled = computed(() => {
  return state.form.addOrReduceUrl.length > 0 || state.form.replaceUrl.length > 0;
});
const { getDataSource: getList, proTableProps } = useTable(({ pageIndex, pageSize }) => {
    try {
      let params: API.QueryInsuranceOrderPageInput = {
    return Promise.resolve({
        pageModel: {
          rows: pageSize,
          page: pageIndex,
          orderInput: extraParamState.orderInput,
        totalCount: state.staffList.length,
        },
        condition: extraParamState.keyWord,
        // insurePolicyOperateHistoryId: id,
      };
      let res = await insuranceOrderServices.getInsuranceOrderPage(params, {
        showLoading: !state.loading,
      data: paginateList(state.staffList, pageIndex, pageSize),
      });
      return res;
    } catch (error) {}
  },
  {
    defaultExtraParams: {
      keyWord: '',
      orderInput: [{ property: 'id', order: OrderInputType.Asc }],
    },
    columnsRenderProps: {},
  }
);
});
async function handleUploadAddOrReduce(response: UploadUserFile) {
  try {
@@ -215,7 +207,25 @@
      url: response.path,
      insurePolicyId: id,
    };
    let checkRes = await insureBatchBillServices.importCheckBatchAddOrSubOrderData(params, {
      getResponse: true,
      responseType: 'blob',
    });
    if (checkRes?.data?.size) {
      Message.tipMessage('存在错误数据,是否导出?')
        .then(() => {
          downloadFile(checkRes.data, `错误人员名单`, 'xlsx');
        })
        .catch(() => {
          // getList(paginationState.pageIndex);
        });
    } else {
    let res = await insureBatchBillServices.importBatchAddOrSubOrderData(params);
      if (res?.addOrSub?.length) {
        state.staffList = res.addOrSub;
        getList();
      }
    }
  } catch (error) {}
}
async function handleUploadReplace(response: UploadUserFile) {
@@ -224,11 +234,36 @@
      url: response.path,
      insurePolicyId: id,
    };
    let checkRes = await insureBatchBillServices.importCheckBatchUpdateOrderData(params, {
      getResponse: true,
      responseType: 'blob',
    });
    if (checkRes?.data?.size) {
      Message.tipMessage('存在错误数据,是否导出?')
        .then(() => {
          downloadFile(checkRes.data, `错误人员名单`, 'xlsx');
        })
        .catch(() => {
          // getList(paginationState.pageIndex);
        });
    } else {
    let res = await insureBatchBillServices.importBatchUpdateOrderData(params);
      if (res?.update?.length) {
        state.staffList = res.update;
        getList();
      }
    }
  } catch (error) {}
}
function handleClear() {}
function handleClear() {
  if (!state.staffList.length) {
    Message.errorMessage('没有数据可以清除哦');
    return;
  }
  state.staffList = [] as any[];
  getList();
}
const formRef = ref<FormInstance>();
function handleSubmit() {
@@ -244,7 +279,17 @@
async function addOrUpdateInsureBatchBill() {
  try {
    let params = {};
    if (state.staffList.length === 0) {
      Message.errorMessage('请先上传人员名单');
      return;
    }
    let params: API.InsureBatchBillInput = {
      insurancePolicyId: id,
      effectTime: state.form.time,
      addInsStaffList: state.staffList.filter((x) => x.changeFlag.includes('增加')),
      updateInsStaffList: state.staffList.filter((x) => x.changeFlag.includes('替换')),
      delInsStaffList: state.staffList.filter((x) => x.changeFlag.includes('删除')),
    };
    let res = await insureBatchBillServices.addOrUpdateInsureBatchBill(params);
    if (res) {
      Message.successMessage('提交成功');
@@ -266,8 +311,10 @@
  });
}
const queryClient = useQueryClient();
onMounted(async () => {
  await getBatchRefundInfoDetail();
  await getList();
  state.loading = false;
});
</script>
src/views/Home/Home.vue
@@ -408,6 +408,10 @@
    params: {
      id: row.id,
    },
    query: {
      insurerName: row.insurerName ?? '',
      insureBillNo: row.insureBillNo ?? '',
    },
  });
}
</script>
src/views/Home/components/BatchChangeRecordDetailDialog.vue
@@ -6,6 +6,7 @@
        :columns="column"
        :show-operation-column="false"
      >
        <template #changeType="{ row }"> {{ BatchChangeTypeEnumText[row.changeType] }}</template>
      </ProTableV2>
    </ProDialogTableWrapper>
  </ProDialog>
@@ -13,8 +14,9 @@
<script setup lang="ts">
import { ProDialog, ProTableV2, ProDialogTableWrapper, useTable } from '@bole-core/components';
import * as insuranceOrderServices from '@/services/api/InsuranceOrder';
import { OrderInputType } from '@bole-core/core';
import { paginateList } from '@/utils';
import { BatchChangeTypeEnumText } from '@/constants';
defineOptions({
  name: 'BatchChangeRecordDetailDialog',
@@ -24,6 +26,7 @@
  modelValue: boolean;
  form?: {
    id: string;
    staffList: API.InsureBatchBillDetailDto[];
  };
};
@@ -39,57 +42,48 @@
const column: API.CustomModuleColumnDto[] = [
  {
    id: '1',
    enCode: 'name',
    enCode: 'changeType',
    name: '批改类型',
    width: 120,
  },
  {
    id: '2',
    enCode: 'name',
    name: '姓名',
    width: 120,
  },
  {
    id: '3',
    enCode: 'name',
    enCode: 'idNumber',
    name: '身份证号',
    width: 120,
  },
  {
    id: '4',
    enCode: 'name',
    enCode: 'workType',
    name: '雇员工种',
    width: 120,
  },
  {
    id: '5',
    enCode: 'name',
    enCode: 'gender',
    name: '性别',
    width: 120,
  },
  {
    id: '6',
    enCode: 'name',
    enCode: 'age',
    name: '年龄',
    width: 120,
  },
  {
    id: '7',
    enCode: 'name',
    enCode: 'birthDay',
    name: '出生日期',
    width: 120,
  },
  {
    id: '8',
    enCode: 'name',
    enCode: 'phoneNumber',
    name: '电话号码',
    width: 120,
  },
  {
    id: '9',
    enCode: 'name',
    enCode: 'modifyInfo',
    name: '修改内容',
    width: 120,
  },
];
@@ -106,7 +100,7 @@
  () => props.modelValue,
  (val) => {
    if (val) {
      getBatchRefundInfoDetail();
      getList();
    }
  },
  {
@@ -115,7 +109,7 @@
);
const {
  getDataSource: getBatchRefundInfoDetail,
  getDataSource: getList,
  proTableProps,
  paginationState,
  extraParamState,
@@ -123,17 +117,14 @@
} = useTable(
  async ({ pageIndex, pageSize }, extraParamState) => {
    try {
      let params: API.QueryInsuranceOrderPageInput = {
      return Promise.resolve({
        pageModel: {
          rows: pageSize,
          page: pageIndex,
          orderInput: extraParamState.orderInput,
          totalCount: props.form.staffList.length,
        },
        condition: extraParamState.keyWord,
        // insurePolicyOperateHistoryId: id,
      };
      let res = await insuranceOrderServices.getInsuranceOrderPage(params);
      return res;
        data: paginateList(props.form.staffList, pageIndex, pageSize),
      });
    } catch (error) {}
  },
  {
@@ -141,7 +132,6 @@
      keyWord: '',
      orderInput: [{ property: 'id', order: OrderInputType.Asc }],
    },
    columnsRenderProps: {},
  }
);
</script>
src/views/Home/components/BatchChangeRecordView.vue
@@ -10,6 +10,23 @@
          maxHeight: '400px',
        }"
      >
        <template #checkStatus="{ row }">
          <el-tooltip
            class="box-item"
            effect="dark"
            :content="row.auditNote"
            placement="top-start"
            v-if="row.checkStatus === BatchBillCheckStatus.CheckTurnDown"
          >
            <div style="display: inline-flex; align-items: center">
              {{ BatchBillCheckStatusText[row.checkStatus] }}
              <el-icon size="16" color="#3a71ff"><QuestionFilled /></el-icon>
            </div>
          </el-tooltip>
          <el-text v-else>
            {{ BatchBillCheckStatusText[row.checkStatus] }}
          </el-text>
        </template>
      </ProTableV2>
      <BatchChangeRecordDetailDialog v-bind="dialogProps"></BatchChangeRecordDetailDialog>
    </AppContainer>
@@ -25,8 +42,14 @@
  useFormDialog,
} from '@bole-core/components';
import * as insureBatchBillServices from '@/services/api/InsureBatchBill';
import { OrderInputType } from '@bole-core/core';
import { downloadFileByUrl, OrderInputType } from '@bole-core/core';
import BatchChangeRecordDetailDialog from './BatchChangeRecordDetailDialog.vue';
import {
  BatchBillCheckStatus,
  BatchBillCheckStatusText,
  BatchChangeTypeEnumText,
} from '@/constants';
import { setOSSLink } from '@/utils';
defineOptions({
  name: 'BatchChangeRecordView',
@@ -35,47 +58,47 @@
const column: API.CustomModuleColumnDto[] = [
  {
    id: '1',
    enCode: 'name',
    enCode: 'batchBillNo',
    name: '批单号',
  },
  {
    id: '2',
    enCode: 'name',
    enCode: 'changeType',
    name: '批改类型',
  },
  {
    id: '3',
    enCode: 'name',
    enCode: 'creationTime',
    name: '申请日期',
  },
  {
    id: '4',
    enCode: 'idNumber',
    enCode: 'effectTime',
    name: '批改生效日期',
  },
  {
    id: '5',
    enCode: 'idNumber',
    enCode: 'insurePersonNumber',
    name: '在保人数',
  },
  {
    id: '6',
    enCode: 'idNumber',
    enCode: 'orginInsurePersonNumber',
    name: '原在保人数',
  },
  {
    id: '7',
    enCode: 'idNumber',
    enCode: 'addPersonNumber',
    name: '新增',
  },
  {
    id: '8',
    enCode: 'idNumber',
    enCode: 'subPersonNumber',
    name: '减少',
  },
  {
    id: '9',
    enCode: 'idNumber',
    enCode: 'checkStatus',
    name: '批单状态',
  },
];
@@ -89,9 +112,9 @@
    emits: {
      onClick: (role) => handleDetail(role),
    },
    // extraProps: {
    //   hide: (row: API.InsureBatchBillDto) => !row.orderBillFile,
    // },
    extraProps: {
      hide: (row: API.InsureBatchBillDto) => row.checkStatus !== BatchBillCheckStatus.InValidate,
    },
  },
  {
    data: {
@@ -101,9 +124,9 @@
    emits: {
      onClick: (role) => handleDownload(role),
    },
    // extraProps: {
    //   hide: (row: API.InsureBatchBillDto) => !row.orderBillFile,
    // },
    extraProps: {
      hide: (row: API.InsureBatchBillDto) => row.checkStatus !== BatchBillCheckStatus.InValidate,
    },
  },
]);
@@ -141,25 +164,51 @@
  {
    defaultExtraParams: {
      keyWord: '',
      orderInput: [{ property: 'id', order: OrderInputType.Asc }],
      orderInput: [{ property: 'insureBatchBillId', order: OrderInputType.Asc }],
    },
    columnsRenderProps: {},
    columnsRenderProps: {
      creationTime: {
        type: 'date',
        format: 'YYYY-MM-DD',
      },
      effectTime: {
        type: 'date',
        format: 'YYYY-MM-DD',
      },
      changeType: {
        type: 'enum',
        valueEnum: BatchChangeTypeEnumText,
      },
    },
  }
);
async function getInsureBatchDetail(id: string) {
  try {
    return await insureBatchBillServices.getInsureBatchDetail({ batchBillId: id });
  } catch (error) {}
}
const { dialogProps, handleEdit } = useFormDialog({
  defaultFormParams: {
    id: '',
    staffList: [] as API.InsureBatchBillDetailDto[],
  },
});
function handleDetail(row: API.InsureBatchBillDto) {
async function handleDetail(row: API.InsureBatchBillDto) {
  try {
    const res = await getInsureBatchDetail(row.insureBatchBillId);
  handleEdit({
    id: row.insureBatchBillId,
      staffList: res.staffList,
  });
  } catch (error) {}
}
function handleDownload(row: API.InsureBatchBillDto) {}
function handleDownload(row: API.InsureBatchBillDto) {
  downloadFileByUrl(setOSSLink(row.attachmentUrl));
}
onMounted(async () => {
  await getBatchRefundInfoDetail();
src/views/Home/components/InsureOrderInfoView.vue
@@ -35,12 +35,14 @@
          <ProFormCol>
            <ProFormColItem :span="8">
              <ProFormItemV2 label="参保机构:" prop="insuranceOrg">
                <ProFormRadio v-model="detail.insuranceOrg" :value-enum="InsuredInstitutionEnum" />
                <!-- <ProFormRadio v-model="detail.insuranceOrg" :value-enum="InsuredInstitutionEnum" /> -->
                <ProFormText v-model.trim="detail.insuranceOrg" />
              </ProFormItemV2>
            </ProFormColItem>
            <ProFormColItem :span="8">
              <ProFormItemV2 label="投保方案:" prop="insuranceScheme">
                <ProFormRadio v-model="detail.insuranceScheme" :value-enum="InsuranceSchemeEnum" />
                <!-- <ProFormRadio v-model="detail.insuranceScheme" :value-enum="InsuranceSchemeEnum" /> -->
                <ProFormText v-model.trim="detail.insuranceScheme" />
              </ProFormItemV2>
            </ProFormColItem>
            <ProFormColItem :span="8">
@@ -337,10 +339,17 @@
}
async function handleUploadSuccess(response: UploadUserFile) {
  try {
    // let res = await insuranceOrderServices.importInsuranceOrderData(response.url, {
    //   getResponse: true,
    //   responseType: 'blob',
    // });
    let res = await insuranceOrderServices.importInsDetailStaffToList(
      {
        id: id,
        url: response.url,
      },
      {
        getResponse: true,
        responseType: 'blob',
      }
    );
    console.log('res: ', res);
    // if (res?.data?.size) {
    //   await Message.tipMessage('存在错误数据,是否导出?');
    //   downloadFile(res.data, `错误人员名单`, 'xlsx');
@@ -380,6 +389,10 @@
    params: {
      id: id,
    },
    query: {
      insurerName: detail.value?.insurerName ?? '',
      insureBillNo: detail.value?.insureBillNo ?? '',
    },
  });
}
src/views/InsuranceClaim/components/InsuranceClaimView.vue
@@ -64,10 +64,14 @@
            <ProFormColItem :span="6">
              <ProFormItemV2
                label="保单号:"
                prop="name"
                prop="orderNo"
                :check-rules="[{ message: '请输入保单号' }]"
              >
                <ProFormText v-model.trim="form.name" placeholder="请输入保单号" :maxlength="30" />
                <ProFormText
                  v-model.trim="form.orderNo"
                  placeholder="请输入保单号"
                  :maxlength="30"
                />
              </ProFormItemV2>
            </ProFormColItem>
          </ProFormCol>
@@ -79,29 +83,39 @@
            <ProFormColItem :span="6">
              <ProFormItemV2
                label="参保机构:"
                prop="insuredInstitution"
                :check-rules="[{ message: '请选择参保机构' }]"
                prop="insuranceOrg"
                :check-rules="[{ message: '请输入参保机构' }]"
              >
                <ProFormSelect
                <!-- <ProFormSelect
                  placeholder="请选择参保机构"
                  :value-enum="InsuredInstitutionEnum"
                  clearable
                  v-model="form.insuredInstitution"
                ></ProFormSelect>
                ></ProFormSelect> -->
                <ProFormText
                  v-model.trim="form.insuranceOrg"
                  :maxlength="30"
                  placeholder="请输入参保机构"
                />
              </ProFormItemV2>
            </ProFormColItem>
            <ProFormColItem :span="6">
              <ProFormItemV2
                label="投保方案:"
                prop="insuranceScheme"
                :check-rules="[{ message: '请选择投保方案' }]"
                :check-rules="[{ message: '请输入投保方案' }]"
              >
                <ProFormSelect
                <!-- <ProFormSelect
                  placeholder="请选择投保方案"
                  :value-enum="InsuranceSchemeEnum"
                  clearable
                  v-model="form.insuranceScheme"
                ></ProFormSelect>
                ></ProFormSelect> -->
                <ProFormText
                  v-model.trim="form.insuranceScheme"
                  :maxlength="30"
                  placeholder="请输入投保方案"
                />
              </ProFormItemV2>
            </ProFormColItem>
          </ProFormCol>
@@ -118,11 +132,8 @@
                </ProFormItemV2>
              </ProFormColItem>
              <ProFormColItem :span="6">
                <ProFormItemV2 label="投保人:" prop="laborContractEnterprise" mode="read">
                  <ProFormText
                    v-model.trim="form.laborContractEnterprise"
                    placeholder="请输入投保人"
                  />
                <ProFormItemV2 label="投保人:" prop="enterpriseName" mode="read">
                  <ProFormText v-model.trim="form.enterpriseName" placeholder="请输入投保人" />
                </ProFormItemV2>
              </ProFormColItem>
              <ProFormColItem :span="6">
@@ -145,8 +156,8 @@
                </ProFormItemV2>
              </ProFormColItem>
              <ProFormColItem :span="6">
                <ProFormItemV2 label="被保人:" prop="workEnterprise" mode="read">
                  <ProFormText v-model.trim="form.workEnterprise" placeholder="请输入被保人" />
                <ProFormItemV2 label="被保人:" prop="enterpriseName" mode="read">
                  <ProFormText v-model.trim="form.enterpriseName" placeholder="请输入被保人" />
                </ProFormItemV2>
              </ProFormColItem>
            </ProFormCol>
@@ -510,11 +521,11 @@
      name: form.name,
      idNumber: form.idNumber,
      workType: form.workType,
      laborContractEnterprise: form.laborContractEnterprise,
      workEnterprise: form.workEnterprise,
      laborContractEnterprise: form.enterpriseName,
      workEnterprise: form.enterpriseName,
      insuranceBeginTime: format(form.insuranceBeginTime),
      insuranceEndTime: format(form.insuranceEndTime),
      insuredInstitution: form.insuredInstitution,
      insuredInstitution: form.insuranceOrg,
      insuranceScheme: form.insuranceScheme,
      onJobFlag: form.onJobFlag,
      gender: form.gender,
src/views/InsuranceClaim/hooks/index.ts
@@ -20,11 +20,13 @@
    name: '',
    idNumber: '',
    workType: '',
    orderNo: '',
    laborContractEnterprise: '',
    workEnterprise: '',
    enterpriseName: '',
    insuranceBeginTime: '',
    insuranceEndTime: '',
    insuredInstitution: '',
    insuranceOrg: '',
    insuranceScheme: '',
    contactNumber: '',
    bakContactNumber: '',
@@ -174,15 +176,17 @@
    form.idNumber = data.idNumber;
    form.insuranceBeginTime = data.insuranceBeginTime;
    form.insuranceEndTime = data.insuranceEndTime;
    form.insuredInstitution = data.insuredInstitution;
    form.insuranceOrg = data.insuranceOrg;
    form.insuranceScheme = data.insuranceScheme;
    form.laborContractEnterprise = data.laborContractEnterprise;
    form.enterpriseName = data.enterpriseName;
    form.workEnterprise = data.workEnterprise;
    form.workType = data.workType;
    form.channel = data.channel;
    form.onJobFlag = data.onJobFlag;
    form.gender = data.gender;
    form.age = data.age;
    form.orderNo = data.orderNo;
    form.premiumAmount = data.premiumAmount;
    form.incDecAmount = data.incDecAmount;
  }