wupengfei
2025-03-27 12cce14bc30a85bbf96b5b30bb1aff1fc354091a
feat: 接口对接
14个文件已修改
1个文件已添加
1519 ■■■■ 已修改文件
src/constants/insuranceClaim.ts 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/InsuranceOrder.ts 242 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/InsureBatchBill.ts 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/index.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/typings.d.ts 385 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home/BatchChange.vue 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home/Home.vue 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home/InsuranceOrderDetail.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home/components/BatchChangeRecordView.vue 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home/components/ChangePersonInfoDialog.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home/components/InsureOrderInfoView.vue 221 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home/components/UploadInsurePersonDialog.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home/components/UploadStampFileDialog.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Home/constants/index.ts 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/InsuranceClaim/components/InsuranceClaimView.vue 81 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/insuranceClaim.ts
@@ -63,11 +63,26 @@
  [InsuranceClaimResultEnum.WithdrawCase]: '撤案',
};
export enum InsurancePolicyStatusEnum {
  /**未生效 */
  WaitEffect = 10,
  /**已生效 */
  Effecting = 20,
  /**已过期 */
  OutTimeEffect = 30,
}
export const InsurancePolicyStatusEnumText = {
  [InsurancePolicyStatusEnum.WaitEffect]: '未生效',
  [InsurancePolicyStatusEnum.Effecting]: '已生效',
  [InsurancePolicyStatusEnum.OutTimeEffect]: '已过期',
};
export const OnJobFlagEnumText = {
  增员: '增员',
  减员: '减员',
};
export const insuranceTypeText = {
  月保: '月保',
  年保: '年保',
  '30D': '月保',
  '360D': '年保',
};
src/services/api/InsuranceOrder.ts
@@ -32,6 +32,39 @@
  });
}
/** 查询批次号状态 GET /api/InsuranceOrder/CheckInrancesSerialNumStatus */
export async function checkInrancesSerialNumStatus(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIcheckInrancesSerialNumStatusParams,
  options?: API.RequestConfig
) {
  return request<API.InsurancePolicyStatusEnum>(
    '/api/InsuranceOrder/CheckInrancesSerialNumStatus',
    {
      method: 'GET',
      params: {
        ...params,
      },
      ...(options || {}),
    }
  );
}
/** 保单详情-情况人员数据 GET /api/InsuranceOrder/ClearInsuranceStaffData */
export async function clearInsuranceStaffData(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIclearInsuranceStaffDataParams,
  options?: API.RequestConfig
) {
  return request<number>('/api/InsuranceOrder/ClearInsuranceStaffData', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** 删除保单材料 POST /api/InsuranceOrder/DeleteInsuranceOrderMaterial */
export async function deleteInsuranceOrderMaterial(body: string, options?: API.RequestConfig) {
  return request<number>('/api/InsuranceOrder/DeleteInsuranceOrderMaterial', {
@@ -80,6 +113,21 @@
  options?: API.RequestConfig
) {
  return request<any>('/api/InsuranceOrder/ExportInsuranceOrderList', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 根据身份证号和报案日期查询在保信息 POST /api/InsuranceOrder/GetEffectingStaffList */
export async function getEffectingStaffList(
  body: API.GetEffectingStaffListInput,
  options?: API.RequestConfig
) {
  return request<API.InsuranceOrderListOutput[]>('/api/InsuranceOrder/GetEffectingStaffList', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
@@ -158,6 +206,155 @@
  );
}
/** 获取投保批次号 GET /api/InsuranceOrder/GetInsuranceOrderSerialNum */
export async function getInsuranceOrderSerialNum(options?: API.RequestConfig) {
  return request<string>('/api/InsuranceOrder/GetInsuranceOrderSerialNum', {
    method: 'GET',
    ...(options || {}),
  });
}
/** 获取投保订单列表 POST /api/InsuranceOrder/GetInsurancePage */
export async function getInsurancePage(
  body: API.GetInsurancePageInput,
  options?: API.RequestConfig
) {
  return request<API.GetInsurancePageOutputPageOutput>('/api/InsuranceOrder/GetInsurancePage', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 导出投保订单 POST /api/InsuranceOrder/GetInsurancePageExport */
export async function getInsurancePageExport(
  body: API.GetInsurancePageInput,
  options?: API.RequestConfig
) {
  return request<any>('/api/InsuranceOrder/GetInsurancePageExport', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 获取投保详情基本信息 GET /api/InsuranceOrder/GetInsurancePolicyHeadDto */
export async function getInsurancePolicyHeadDto(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIgetInsurancePolicyHeadDtoParams,
  options?: API.RequestConfig
) {
  return request<API.GetInsurancePageOutput>('/api/InsuranceOrder/GetInsurancePolicyHeadDto', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** 获取盖章文件 GET /api/InsuranceOrder/GetInsurancePolicyStampFiles */
export async function getInsurancePolicyStampFiles(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIgetInsurancePolicyStampFilesParams,
  options?: API.RequestConfig
) {
  return request<string[]>('/api/InsuranceOrder/GetInsurancePolicyStampFiles', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** 查询保单详情下人员列表 POST /api/InsuranceOrder/GetInsuranceStaffList */
export async function getInsuranceStaffList(
  body: API.GetInsuranceStaffListInput,
  options?: API.RequestConfig
) {
  return request<API.GetInsuranceStaffPageTemplatePageOutput>(
    '/api/InsuranceOrder/GetInsuranceStaffList',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 保单详情-导入人员清单 GET /api/InsuranceOrder/GetInsuranceStaffListExport */
export async function getInsuranceStaffListExport(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIgetInsuranceStaffListExportParams,
  options?: API.RequestConfig
) {
  return request<any>('/api/InsuranceOrder/GetInsuranceStaffListExport', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** 此处后端没有提供注释 POST /api/InsuranceOrder/GetInsuranceStaffPageExport */
export async function getInsuranceStaffPageExport(
  body: API.GetInsurancePageInput,
  options?: API.RequestConfig
) {
  return request<any>('/api/InsuranceOrder/GetInsuranceStaffPageExport', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 投保详情-导入人员 POST /api/InsuranceOrder/ImportInsDetailStaffToList */
export async function importInsDetailStaffToList(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIimportInsDetailStaffToListParams,
  options?: API.RequestConfig
) {
  return request<API.ImportInsStaffAnalysisList[]>(
    '/api/InsuranceOrder/ImportInsDetailStaffToList',
    {
      method: 'POST',
      params: {
        ...params,
      },
      ...(options || {}),
    }
  );
}
/** 新增保单导入 POST /api/InsuranceOrder/ImportInsStaffToList */
export async function importInsStaffToList(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIimportInsStaffToListParams,
  options?: API.RequestConfig
) {
  return request<API.ImportInsStaffAnalysisList[]>('/api/InsuranceOrder/ImportInsStaffToList', {
    method: 'POST',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** 导入保单数据 POST /api/InsuranceOrder/ImportInsuranceOrderData */
export async function importInsuranceOrderData(body: string, options?: API.RequestConfig) {
  return request<any>('/api/InsuranceOrder/ImportInsuranceOrderData', {
@@ -169,3 +366,48 @@
    ...(options || {}),
  });
}
/** 修改保单人员信息 POST /api/InsuranceOrder/UpdateInsuranceStaffInfo */
export async function updateInsuranceStaffInfo(
  body: API.UpdateInsuranceStaffInfoInput,
  options?: API.RequestConfig
) {
  return request<number>('/api/InsuranceOrder/UpdateInsuranceStaffInfo', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 上传保单 POST /api/InsuranceOrder/UplaodInsuranceBillFile */
export async function uplaodInsuranceBillFile(
  body: API.UplaodInsuranceBillFileInput,
  options?: API.RequestConfig
) {
  return request<number>('/api/InsuranceOrder/UplaodInsuranceBillFile', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 上传盖章文件 POST /api/InsuranceOrder/UploadInsuranceStampFiles */
export async function uploadInsuranceStampFiles(
  body: API.UploadInsuranceStampFilesInput,
  options?: API.RequestConfig
) {
  return request<number>('/api/InsuranceOrder/UploadInsuranceStampFiles', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
src/services/api/InsureBatchBill.ts
New file
@@ -0,0 +1,126 @@
/* eslint-disable */
// @ts-ignore
import { request } from '@/utils/request';
/** 用户端-提交 新增,修改,删除 批单 POST /api/InsureBatchBill/AddOrUpdateInsureBatchBill */
export async function addOrUpdateInsureBatchBill(
  body: API.InsureBatchBillInput,
  options?: API.RequestConfig
) {
  return request<number>('/api/InsureBatchBill/AddOrUpdateInsureBatchBill', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 运营端-导出批单人员 GET /api/InsureBatchBill/ExportInsuranceBatchStaff */
export async function exportInsuranceBatchStaff(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIexportInsuranceBatchStaffParams,
  options?: API.RequestConfig
) {
  return request<any>('/api/InsureBatchBill/ExportInsuranceBatchStaff', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** 获取运营端-审核批单-审核详情 GET /api/InsureBatchBill/GetBatchDetailForCheck */
export async function getBatchDetailForCheck(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIgetBatchDetailForCheckParams,
  options?: API.RequestConfig
) {
  return request<API.BatchDetailForCheckDto>('/api/InsureBatchBill/GetBatchDetailForCheck', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** 获取客户端-批单的列表 POST /api/InsureBatchBill/GetInsureBatchBillList */
export async function getInsureBatchBillList(
  body: API.GetInsuranceBatchBillInput,
  options?: API.RequestConfig
) {
  return request<API.InsureBatchBillDtoPageOutput>('/api/InsureBatchBill/GetInsureBatchBillList', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 获取运营端-审核批单的列表 POST /api/InsureBatchBill/GetInsureBatchBillListForCheck */
export async function getInsureBatchBillListForCheck(
  body: API.GetInsuranceBatchBillForCheckInput,
  options?: API.RequestConfig
) {
  return request<API.InsureBatchBillDtoPageOutput>(
    '/api/InsureBatchBill/GetInsureBatchBillListForCheck',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 客户端-批单增员减员保单数据导入 POST /api/InsureBatchBill/ImportBatchAddOrSubOrderData */
export async function importBatchAddOrSubOrderData(
  body: API.ImportBatchAddOrSubOrderInput,
  options?: API.RequestConfig
) {
  return request<any>('/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<any>('/api/InsureBatchBill/ImportBatchUpdateOrderData', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 运营端-设置批量的状态 POST /api/InsureBatchBill/SetInsureBatchBillStatus */
export async function setInsureBatchBillStatus(
  body: API.SetInsureBatchBillStatusInput,
  options?: API.RequestConfig
) {
  return request<number>('/api/InsureBatchBill/SetInsureBatchBillStatus', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    data: body,
    ...(options || {}),
  });
}
src/services/api/index.ts
@@ -12,6 +12,7 @@
import * as IdentityUserLookup from './IdentityUserLookup';
import * as InsuranceClaim from './InsuranceClaim';
import * as InsuranceOrder from './InsuranceOrder';
import * as InsureBatchBill from './InsureBatchBill';
import * as Permissions from './Permissions';
import * as PhoneMessage from './PhoneMessage';
import * as Profile from './Profile';
@@ -29,6 +30,7 @@
  IdentityUserLookup,
  InsuranceClaim,
  InsuranceOrder,
  InsureBatchBill,
  Permissions,
  PhoneMessage,
  Profile,
src/services/api/typings.d.ts
@@ -128,6 +128,14 @@
    includeTypes?: boolean;
  }
  interface APIcheckInrancesSerialNumStatusParams {
    serialNum?: string;
  }
  interface APIclearInsuranceStaffDataParams {
    id?: string;
  }
  interface APIcreateParams {
    systemEmail: string;
    systemPassword: string;
@@ -174,6 +182,10 @@
    id?: string;
  }
  interface APIexportInsuranceBatchStaffParams {
    batchBillId?: string;
  }
  interface APIfindByEmailParams {
    email?: string;
  }
@@ -202,6 +214,10 @@
  interface APIgetAllSubModuleParams {
    moduleId?: string;
  }
  interface APIgetBatchDetailForCheckParams {
    batchBillId?: string;
  }
  interface APIgetCountParams {
@@ -237,6 +253,18 @@
  }
  interface APIgetInsuranceOrderMaterialListParams {
    id?: string;
  }
  interface APIgetInsurancePolicyHeadDtoParams {
    id?: string;
  }
  interface APIgetInsurancePolicyStampFilesParams {
    id?: string;
  }
  interface APIgetInsuranceStaffListExportParams {
    id?: string;
  }
@@ -306,6 +334,16 @@
  interface APIgetVersionSubModuleParams {
    versionId?: string;
  }
  interface APIimportInsDetailStaffToListParams {
    url?: string;
    id?: string;
  }
  interface APIimportInsStaffToListParams {
    url?: string;
    serialNum?: string;
  }
  interface APIsearchParams {
@@ -412,6 +450,28 @@
    objectId?: string;
  }
  type BatchBillCheckStatus = 1 | 2 | 10 | 15 | 20 | 30 | -40 | -30 | -20 | -11 | -10 | -1;
  type BatchChangeTypeEnum = 10 | 20 | 30 | 40;
  interface BatchDetailForCheckDto {
    /** 批单Id */
    insureBatchBillId?: string;
    /** 审核理由 */
    auditNote?: string;
    checkStatus?: BatchBillCheckStatus;
    /** 生效时间 */
    effectTime?: string;
    /** 附件上传 */
    attachmentUrl?: string;
    /** 保单号 */
    insureBillNo?: string;
    /** 投保人 */
    enterpriseName?: string;
    /** 批改人员详情 */
    staffList?: InsureBatchBillDetailDto[];
  }
  interface ChangePasswordInput {
    currentPassword?: string;
    newPassword: string;
@@ -470,6 +530,12 @@
    sendBillExpireMessage?: boolean;
    /** 是否短信提醒 */
    isSendMessage?: boolean;
    /** 是否人员变更提醒 */
    staffChangeMessage?: boolean;
    /** 是否批改提醒 */
    batchUpdateMessage?: boolean;
    /** 企业名称 */
    enterpriseName?: string;
  }
  interface CreateOrUpdateRoleInput {
@@ -636,8 +702,123 @@
    key?: string;
  }
  interface GetEffectingStaffListInput {
    claimDateTime?: string;
    idNumber?: string;
  }
  interface GetFeatureListResultDto {
    groups?: FeatureGroupDto[];
  }
  interface GetInsuranceBatchBillForCheckInput {
    pageModel?: Pagination;
    /** 申请日期开始 */
    creationTimeBegin?: string;
    /** 申请日期结束 */
    creationTimeEnd?: string;
    /** 批单号 */
    batchBillNo?: string;
    checkStatus?: BatchBillCheckStatus;
  }
  interface GetInsuranceBatchBillInput {
    pageModel?: Pagination;
    /** 保单Id */
    insurancePolicyId?: string;
  }
  interface GetInsurancePageInput {
    pageModel?: Pagination;
    importStartDateTime?: string;
    importEndDateTime?: string;
    condition?: string;
    insurancePeriod?: string;
    status?: InsurancePolicyStatusEnum;
  }
  interface GetInsurancePageOutput {
    id?: string;
    userId?: string;
    /** 投保人 */
    insurerName?: string;
    /** 被保险人 */
    policyerName?: string;
    /** 批次号 */
    serialNum?: string;
    status?: InsurancePolicyStatusEnum;
    /** 人员清单状态 */
    listStatus?: string;
    batchStatus?: number;
    checkStatus?: BatchBillCheckStatus;
    /** 保额 */
    sumInsured?: number;
    /** 保费 */
    amount?: number;
    /** 投保人数 */
    insureCount?: number;
    /** 理赔数量 */
    claimCount?: number;
    /** 投保机构 */
    insuranceOrg?: string;
    /** 投保方式 月保:30D  年保: 360D */
    insurancePeriod?: string;
    /** 方案名称 */
    insuranceScheme?: string;
    /** 保单文件 */
    insureBillUrl?: string;
    /** 是否已上传盖章文件 */
    isUploadEffectFile?: boolean;
    /** 盖章文件 */
    effectBillUrl?: string;
    /** 保险单号 */
    insureBillNo?: string;
    /** 导入文件 */
    importFileUrl?: string;
    lastImportTime?: string;
    /** 保单生效时间 */
    effectStartTime?: string;
    /** 保单失效时间 */
    effectEndTime?: string;
    emploerNames?: string[];
    creationTime?: string;
    companyName?: string;
    isClosedOutTime?: boolean;
  }
  interface GetInsurancePageOutputPageOutput {
    pageModel?: Pagination;
    objectData?: any;
    data?: GetInsurancePageOutput[];
  }
  interface GetInsuranceStaffListInput {
    pageModel?: Pagination;
    condition?: string;
    insurancePolicyId?: string;
  }
  interface GetInsuranceStaffPageTemplate {
    id?: string;
    policyId?: string;
    serialNumber?: number;
    name?: string;
    gender?: string;
    certType?: string;
    certNo?: string;
    jobName?: string;
    userEmploer?: string;
    address?: string;
    age?: number;
    birthDay?: string;
    phone?: string;
    creationTime?: string;
  }
  interface GetInsuranceStaffPageTemplatePageOutput {
    pageModel?: Pagination;
    objectData?: any;
    data?: GetInsuranceStaffPageTemplate[];
  }
  interface GetPermissionListResultDto {
@@ -785,6 +966,56 @@
  interface IdentityUserUpdateRolesDto {
    roleNames: string[];
  }
  interface ImportBatchAddOrSubOrderInput {
    /** 导入地址 */
    url?: string;
    /** 投保Id */
    insurePolicyId?: string;
  }
  interface ImportBatchStaffListInput {
    originIdNumber?: string;
    /** 电话号码 */
    phoneNumber?: string;
    id?: number;
    name?: string;
    age?: number;
    gender?: string;
    certType?: string;
    idNumber?: string;
    insuranceScheme?: string;
    workType?: string;
    birthDay?: string;
    remark?: string;
  }
  interface ImportInsStaffAnalysisList {
    id?: string;
    /** 姓名 */
    name?: string;
    /** 性别 */
    sex?: string;
    /** 证件类型 */
    certType?: string;
    /** 身份证号 */
    certNo?: string;
    /** 年龄 */
    age?: number;
    /** 生日 */
    birthDay?: string;
    /** 用工企业 */
    useEmploer?: string;
    /** 雇员工种 */
    jobName?: string;
    /** 用工地点 */
    address?: string;
    phone?: string;
    /** 备注 */
    note?: string;
    /** 1正常 0异常 */
    isNormal?: boolean;
  }
  type InsuranceClaimAttachmentBusinessTypeEnum = 10 | 20 | 30 | 40 | 50;
@@ -975,6 +1206,86 @@
    url?: string;
    /** 材料名称 */
    materialName?: string;
  }
  type InsurancePolicyStatusEnum = 10 | 20 | 30;
  interface InsureBatchBillDetailDto {
    /** 批单Id */
    insureBatchBillId?: string;
    /** 投保Id */
    insurePolicyId?: string;
    insurancePolicyDetailId?: string;
    /** 修改信息 */
    modifyInfo?: string;
    /** 名称 */
    name?: string;
    /** 证件类别 */
    certType?: string;
    /** 身份证号 */
    idNumber?: string;
    /** 性别 */
    gender?: string;
    /** 年龄 */
    age?: number;
    /** 出生日期 */
    birthDay?: string;
    /** 职业名称 */
    workType?: string;
    changeType?: BatchChangeTypeEnum;
  }
  interface InsureBatchBillDto {
    /** 批单Id */
    insureBatchBillId?: string;
    /** 批单编号 */
    batchBillNo?: string;
    /** 保单Id */
    insurancePolicyId?: string;
    changeType?: BatchChangeTypeEnum;
    checkStatus?: BatchBillCheckStatus;
    /** 在保人数 */
    insurePersonNumber?: number;
    /** 原本在保人数 */
    orginInsurePersonNumber?: number;
    /** 新增人数 */
    addPersonNumber?: number;
    /** 申请日期 */
    creationTime?: string;
    /** 减少人数 */
    subPersonNumber?: number;
    /** 审核理由 */
    auditNote?: string;
    /** 审核时间 */
    checkDate?: string;
    /** 审核人 */
    checkUserId?: string;
    /** 生效时间 */
    effectTime?: string;
    /** 附件上传 */
    attachmentUrl?: string;
  }
  interface InsureBatchBillDtoPageOutput {
    pageModel?: Pagination;
    objectData?: any;
    data?: InsureBatchBillDto[];
  }
  interface InsureBatchBillInput {
    /** 投保Id */
    insurancePolicyId?: string;
    /** 批单Id */
    batchBillId?: string;
    /** 期望生效 */
    effectTime?: string;
    changeType?: BatchChangeTypeEnum;
    /** 批增人员列表 */
    addInsStaffList?: ImportBatchStaffListInput[];
    /** 修改人员列表 */
    updateInsStaffList?: ImportBatchStaffListInput[];
    /** 删除人员列表 */
    delInsStaffList?: ImportBatchStaffListInput[];
  }
  interface IStringValueType {
@@ -1343,6 +1654,24 @@
    phoneNumber: string;
  }
  interface SetInsureBatchBillStatusInput {
    /** 批单Id */
    insureBatchBillId?: string;
    /** 批单号 */
    batchBillNo?: string;
    /** 审核理由 */
    auditNote?: string;
    checkStatus?: BatchBillCheckStatus;
    /** 审核时间 */
    checkDate?: string;
    /** 审核人 */
    checkUserId?: string;
    /** 生效时间 */
    effectTime?: string;
    /** 附件上传 */
    attachmentUrl?: string;
  }
  interface SetMyModule {
    moduleId?: string;
    sequence?: number;
@@ -1416,6 +1745,12 @@
    sendClaimMessage?: boolean;
    /** 是否保单到期提醒 */
    sendBillExpireMessage?: boolean;
    /** 是否人员变更提醒 */
    staffChangeMessage?: boolean;
    /** 是否批改提醒 */
    batchUpdateMessage?: boolean;
    /** 公司名 */
    enterpriseName?: string;
    /** 是否短信提醒 */
    isSendMessage?: boolean;
    /** 角色 */
@@ -1490,6 +1825,14 @@
    id?: string;
  }
  interface UpdateInsuranceStaffInfoInput {
    insurancePolicyId?: string;
    id?: string;
    name?: string;
    idNumber?: string;
    phone?: string;
  }
  interface UpdatePassWordInput {
    id?: string;
    passWord?: string;
@@ -1517,6 +1860,36 @@
    name?: string;
    surname?: string;
    phoneNumber?: string;
  }
  interface UplaodInsuranceBillFileInput {
    /** 保单Id */
    insurancePolicyId?: string;
    /** 保单号 */
    insureBillNo?: string;
    /** 保单起期 */
    effectStartTime?: string;
    /** 保单止期 */
    effectEndTime?: string;
    /** 参保机构 */
    insuranceOrg?: string;
    /** 投保方式 月保:30D  年保: 360D */
    insurancePeriod?: string;
    /** 方案名称 */
    insuranceScheme?: string;
    /** 保额 */
    sumInsured?: number;
    /** 保费 */
    amount?: number;
    /** 保单文件 */
    insureBillUrl?: string;
  }
  interface UploadInsuranceStampFilesInput {
    /** 保单Id */
    insurancePolicyId?: string;
    /** 盖章文件 */
    listFiles?: string[];
  }
  interface UserData {
@@ -1563,6 +1936,12 @@
    isSendMessage?: boolean;
    /** 角色 */
    roleNames?: string[];
    /** 是否人员变更提醒 */
    staffChangeMessage?: boolean;
    /** 是否批改提醒 */
    batchUpdateMessage?: boolean;
    /** 企业名称 */
    enterpriseName?: string;
  }
  interface UserListOutput {
@@ -1587,6 +1966,12 @@
    isSendMessage?: boolean;
    /** 角色 */
    roleNames?: string[];
    /** 是否人员变更提醒 */
    staffChangeMessage?: boolean;
    /** 是否批改提醒 */
    batchUpdateMessage?: boolean;
    /** 企业名称 */
    enterpriseName?: string;
  }
  interface UserListOutputPageOutput {
src/views/Home/BatchChange.vue
@@ -34,6 +34,7 @@
                  :limitFileSize="10"
                  accept="xlsx,xls"
                  :showTip="false"
                  :on-success="handleUploadAddOrReduce"
                >
                  <template #default>
                    <el-button type="primary">加减人</el-button>
@@ -54,6 +55,7 @@
                  :limitFileSize="10"
                  accept="xlsx,xls"
                  :showTip="false"
                  :on-success="handleUploadReplace"
                >
                  <template #default>
                    <el-button type="primary">替换人</el-button>
@@ -108,8 +110,11 @@
  UploadUserFile,
} from '@bole-core/components';
import * as insuranceOrderServices from '@/services/api/InsuranceOrder';
import { downloadFileByUrl, OrderInputType } from '@bole-core/core';
import * as insureBatchBillServices from '@/services/api/InsureBatchBill';
import { downloadFileByUrl, Message, OrderInputType } from '@bole-core/core';
import { InsuranceAddOrReduceTempPath, InsuranceChangeTempPath } from '@/constants';
import { useRouteView } from '@/hooks';
import { FormInstance } from 'element-plus';
defineOptions({
  name: 'BatchChange',
@@ -159,6 +164,7 @@
];
const route = useRoute();
const { closeViewPush } = useRouteView();
const id = route.params.id as string;
const BaseState = {
  loading: true,
@@ -203,8 +209,50 @@
  }
);
async function handleUploadAddOrReduce(response: UploadUserFile) {
  try {
    let params: API.ImportBatchAddOrSubOrderInput = {
      url: response.path,
      insurePolicyId: id,
    };
    let res = await insureBatchBillServices.importBatchAddOrSubOrderData(params);
  } catch (error) {}
}
async function handleUploadReplace(response: UploadUserFile) {
  try {
    let params: API.ImportBatchAddOrSubOrderInput = {
      url: response.path,
      insurePolicyId: id,
    };
    let res = await insureBatchBillServices.importBatchUpdateOrderData(params);
  } catch (error) {}
}
function handleClear() {}
function handleSubmit() {}
const formRef = ref<FormInstance>();
function handleSubmit() {
  if (!formRef.value) return;
  formRef.value.validate((valid) => {
    if (valid) {
      addOrUpdateInsureBatchBill();
    } else {
      return;
    }
  });
}
async function addOrUpdateInsureBatchBill() {
  try {
    let params = {};
    let res = await insureBatchBillServices.addOrUpdateInsureBatchBill(params);
    if (res) {
      Message.successMessage('提交成功');
      handleBack();
    }
  } catch (error) {}
}
function DownloadAddOrReducePersonTemplate() {
  downloadFileByUrl(InsuranceAddOrReduceTempPath, '加减人模板');
}
@@ -212,6 +260,12 @@
  downloadFileByUrl(InsuranceChangeTempPath, '替换人模板');
}
function handleBack() {
  closeViewPush(route, {
    name: 'Home',
  });
}
onMounted(async () => {
  await getBatchRefundInfoDetail();
  state.loading = false;
src/views/Home/Home.vue
@@ -17,16 +17,7 @@
          </QueryFilterItem>
          <QueryFilterItem>
            <FieldRadio
              v-model="extraParamState.onJobFlag"
              :value-enum="OnJobFlagEnumText"
              buttonStyle
              showAllBtn
              @change="getList()"
            />
          </QueryFilterItem>
          <QueryFilterItem>
            <FieldRadio
              v-model="extraParamState.insuranceType"
              v-model="extraParamState.insurancePeriod"
              :value-enum="insuranceTypeText"
              buttonStyle
              showAllBtn
@@ -34,8 +25,17 @@
            />
          </QueryFilterItem>
          <QueryFilterItem>
            <FieldRadio
              v-model="extraParamState.status"
              :value-enum="InsurancePolicyStatusEnumText"
              buttonStyle
              showAllBtn
              @change="getList()"
            />
          </QueryFilterItem>
          <QueryFilterItem>
            <SearchInput
              v-model="extraParamState.keyword"
              v-model="extraParamState.condition"
              style="width: 260px"
              placeholder="单位/保单号/参保机构"
              @on-click-search="getList"
@@ -52,8 +52,10 @@
            >导入</el-button
          >
          <el-button @click="downloadInsureOrder()" type="primary" link>导出保单列表</el-button>
          <el-button @click="downloadInsurePerson()" type="primary" link>导出在保人员</el-button>
          <el-button @click="getInsurancePageExport()" type="primary" link>导出保单列表</el-button>
          <el-button @click="getInsuranceStaffPageExport()" type="primary" link
            >导出在保人员</el-button
          >
        </template>
      </ProTableQueryFilterBar>
      <ProTableV2
@@ -87,15 +89,21 @@
  UploadUserFile,
  SearchInput,
  FieldRadio,
  XLSXUtils,
} 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 } from '@/utils';
import { format, downloadFile, setOSSLink, toThousand, convertApi2FormUrl } from '@/utils';
import { ModelValueType } from 'element-plus';
import { InsuranceOrderTempPath, OnJobFlagEnumText, insuranceTypeText } from '@/constants';
import {
  InsuranceOrderTempPath,
  insuranceTypeText,
  InsurancePolicyStatusEnumText,
  InsurancePolicyStatusEnum,
} from '@/constants';
import dayjs from 'dayjs';
import _ from 'lodash';
@@ -121,9 +129,9 @@
    emits: {
      onClick: (role) => handleBatch(role),
    },
    // extraProps: {
    //   hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile,
    // },
    extraProps: {
      hide: (row: API.GetInsurancePageOutput) => row.status !== InsurancePolicyStatusEnum.Effecting,
    },
  },
  {
    data: {
@@ -133,9 +141,10 @@
    emits: {
      onClick: (role) => handleUploadStampFile(role),
    },
    // extraProps: {
    //   hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile,
    // },
    extraProps: {
      hide: (row: API.GetInsurancePageOutput) =>
        row.status !== InsurancePolicyStatusEnum.WaitEffect,
    },
  },
  {
    data: {
@@ -143,10 +152,11 @@
      name: '保单下载',
    },
    emits: {
      onClick: (role) => handleDownloadOrderNo(role),
      onClick: (role) => handleDownloadInsureFile(role),
    },
    extraProps: {
      hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile,
      hide: (row: API.GetInsurancePageOutput) =>
        row.status === InsurancePolicyStatusEnum.WaitEffect,
    },
  },
]).filter(Boolean);
@@ -172,7 +182,7 @@
  async ({ pageIndex, pageSize }, extraParamState) => {
    try {
      let params = createParams(pageIndex, pageSize);
      let res = await insuranceOrderServices.getInsuranceOrderPage(params, {
      let res = await insuranceOrderServices.getInsurancePage(params, {
        showLoading: !state.loading,
      });
      return res;
@@ -180,84 +190,123 @@
  },
  {
    defaultExtraParams: {
      orderInput: [{ property: 'createTime', order: OrderInputType.Desc }],
      orderInput: [{ property: 'id', order: OrderInputType.Desc }],
      creationDate: [] as unknown as ModelValueType,
      keyword: '',
      onJobFlag: '',
      insuranceType: '',
      condition: '',
      status: '' as any as InsurancePolicyStatusEnum,
      insurancePeriod: '',
    },
    columnsRenderProps: {
      createTime: {
        type: 'date',
        format: 'YYYY/MM/DD',
      status: { type: 'enum', valueEnum: InsurancePolicyStatusEnumText },
      insurancePeriod: { type: 'enum', valueEnum: insuranceTypeText },
      creationTime: { type: 'date', format: 'YYYY-MM-DD' },
      effectStartTime: { type: 'date', format: 'YYYY-MM-DD' },
      effectEndTime: { type: 'date', format: 'YYYY-MM-DD' },
      sumInsured: {
        type: 'money',
        formatter: (row: API.GetInsurancePageOutput) =>
          row.sumInsured == null ? '' : toThousand(row.sumInsured),
      },
      insuranceBeginTime: {
        type: 'date',
        format: 'YYYY/MM/DD',
      },
      insuranceEndTime: {
        type: 'date',
        format: 'YYYY/MM/DD',
      amount: {
        type: 'money',
        formatter: (row: API.GetInsurancePageOutput) =>
          row.amount == null ? '' : toThousand(row.amount),
      },
    },
  }
);
function createParams(pageIndex: number, pageSize: number) {
  let params: API.QueryInsuranceOrderPageInput = {
  let params: API.GetInsurancePageInput = {
    pageModel: {
      rows: pageSize,
      page: pageIndex,
      orderInput: extraParamState.orderInput,
    },
    beginCreationTime: format(extraParamState.creationDate?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
    endCreationTime: format(extraParamState.creationDate?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
    condition: extraParamState.keyword,
    onJobFlag: extraParamState.onJobFlag,
    insuranceType: extraParamState.insuranceType,
    importStartDateTime: format(extraParamState.creationDate?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
    importEndDateTime: format(extraParamState.creationDate?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
    condition: extraParamState.condition,
    insurancePeriod: extraParamState.insurancePeriod,
    status: extraParamState.status,
  };
  return params;
}
const { dialogProps, handleAdd, editForm } = useFormDialog({
  onConfirm: uploadInsurePerson,
const { dialogProps, handleAdd, editForm, dialogState } = useFormDialog({
  onConfirm: checkInrancesSerialNumStatus,
  defaultFormParams: {
    orderNo: '',
    serialNum: '',
    url: [] as UploadUserFile[],
  },
  closeAfterConfirm: false,
});
async function checkInrancesSerialNumStatus() {
  try {
    let params: API.APIimportInsStaffToListParams = {
      serialNum: editForm.serialNum,
      url: editForm.url?.[0]?.path,
    };
    let res = await insuranceOrderServices.checkInrancesSerialNumStatus(params);
    if (res === InsurancePolicyStatusEnum.Effecting) {
      await Message.tipMessage('该批次保单已生效,请修改批次号后重新导入');
    } else if (res === InsurancePolicyStatusEnum.OutTimeEffect) {
      await Message.tipMessage('该批次保单已失效,请修改批次号后重新导入');
    } else if (res === InsurancePolicyStatusEnum.WaitEffect) {
      await Message.tipMessage('存在相同的批次号,是否覆盖?');
      importInsStaffToList();
    } else {
      importInsStaffToList();
    }
  } catch (error) {}
}
async function importInsStaffToList() {
  try {
    let params: API.APIimportInsStaffToListParams = {
      serialNum: editForm.serialNum,
      url: editForm.url?.[0]?.path,
    };
    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: '备注',
        },
      });
    }
    dialogState.dialogVisible = false;
    getList(paginationState.pageIndex);
  } catch (error) {}
}
function handleUpload() {
  handleAdd({
    orderNo: '',
    serialNum: `${dayjs().format('YYYYMMDD')}${_.random(0, 9999).toString().padStart(4, '0')}`,
    url: [] as UploadUserFile[],
  });
}
async function uploadInsurePerson() {
  try {
    let params = {
      orderNo: editForm.orderNo,
      url: editForm.url?.[0]?.path,
    };
    // let res = await insuranceOrderServices.uploadStampFile(params);
    // if (res) {
    //   Message.successMessage('上传成功');
    //   getList(paginationState.pageIndex);
    // }
  } catch (error) {}
}
const router = useRouter();
async function handleExport() {
async function getInsurancePageExport() {
  try {
    if (paginationState.total === 0) {
      Message.warnMessage('没有数据可以导出哦~');
      return;
    }
    let params = createParams(paginationState.pageIndex, paginationState.pageSize);
    let res = await insuranceOrderServices.exportInsuranceOrderList(params, {
    let res = await insuranceOrderServices.getInsurancePageExport(params, {
      responseType: 'blob',
      getResponse: true,
    });
@@ -267,14 +316,31 @@
  } catch (error) {}
}
async function getInsuranceStaffPageExport() {
  try {
    if (paginationState.total === 0) {
      Message.warnMessage('没有数据可以导出哦~');
      return;
    }
    let params = createParams(paginationState.pageIndex, paginationState.pageSize);
    let res = await insuranceOrderServices.getInsuranceStaffPageExport(params, {
      responseType: 'blob',
      getResponse: true,
    });
    if (res) {
      downloadFile(res.data, `在保人员导出`, 'xlsx');
    }
  } catch (error) {}
}
function handleDownload() {
  downloadFileByUrl(InsuranceOrderTempPath, '保单导入模板');
}
function handleRowStyle(data: { row: API.InsuranceOrderListOutput }) {
function handleRowStyle(data: { row: API.GetInsurancePageOutput }) {
  if (
    dayjs(dayjs(data.row?.insuranceEndTime).format('YYYY-MM-DD')).diff(dayjs(), 'day') >= 0 &&
    dayjs(dayjs(data.row?.insuranceEndTime).format('YYYY-MM-DD')).diff(dayjs(), 'day') < 6
    dayjs(dayjs(data.row?.effectEndTime).format('YYYY-MM-DD')).diff(dayjs(), 'day') >= 0 &&
    dayjs(dayjs(data.row?.effectEndTime).format('YYYY-MM-DD')).diff(dayjs(), 'day') < 6
  ) {
    return {
      color: '#ff0000',
@@ -287,39 +353,48 @@
  handleEdit: handleStampFileEdit,
  editForm: stampFileForm,
} = useFormDialog({
  onConfirm: uploadStampFile,
  onConfirm: uploadInsuranceStampFiles,
  defaultFormParams: {
    id: '',
    url: [] as UploadUserFile[],
  },
});
function handleUploadStampFile(row: API.InsuranceOrderListOutput) {
  handleStampFileEdit({
    id: row.id,
    url: [] as UploadUserFile[],
  });
}
async function uploadStampFile() {
async function handleUploadStampFile(row: API.GetInsurancePageOutput) {
  try {
    let params = {
      id: stampFileForm.id,
      url: stampFileForm.url?.[0]?.path,
    };
    // let res = await insuranceOrderServices.uploadStampFile(params);
    // if (res) {
    //   Message.successMessage('上传成功');
    //   getList(paginationState.pageIndex);
    // }
    const url = await getInsurancePolicyStampFiles(row.id);
    handleStampFileEdit({
      id: row.id,
      url: url.map((x) => convertApi2FormUrl(x)) ?? [],
    });
  } catch (error) {}
}
function handleDownloadOrderNo(row: API.InsuranceOrderListOutput) {
  downloadFileByUrl(setOSSLink(row.orderBillFile));
async function uploadInsuranceStampFiles() {
  try {
    let params: API.UploadInsuranceStampFilesInput = {
      insurancePolicyId: stampFileForm.id,
      listFiles: stampFileForm.url?.map((x) => x.path) ?? [],
    };
    let res = await insuranceOrderServices.uploadInsuranceStampFiles(params);
    if (res) {
      Message.successMessage('上传成功');
      getList(paginationState.pageIndex);
    }
  } catch (error) {}
}
function handleDetail(row: API.InsuranceOrderListOutput) {
async function getInsurancePolicyStampFiles(id: string) {
  try {
    return await insuranceOrderServices.getInsurancePolicyStampFiles({ id: id });
  } catch (error) {}
}
function handleDownloadInsureFile(row: API.GetInsurancePageOutput) {
  downloadFileByUrl(setOSSLink(row.insureBillUrl));
}
function handleDetail(row: API.GetInsurancePageOutput) {
  router.push({
    name: 'InsuranceOrderDetail',
    params: {
@@ -327,7 +402,7 @@
    },
  });
}
function handleBatch(row: API.InsuranceOrderListOutput) {
function handleBatch(row: API.GetInsurancePageOutput) {
  router.push({
    name: 'BatchChange',
    params: {
@@ -335,6 +410,4 @@
    },
  });
}
function downloadInsureOrder() {}
function downloadInsurePerson() {}
</script>
src/views/Home/InsuranceOrderDetail.vue
@@ -5,7 +5,12 @@
        <ProTabPane lazy label="保单信息" :name="InsureOrderTabType.InsureOrderInfo">
          <InsureOrderInfoView />
        </ProTabPane>
        <ProTabPane lazy label="批改记录" :name="InsureOrderTabType.BatchOrder">
        <ProTabPane
          v-if="detail.status !== InsurancePolicyStatusEnum.WaitEffect"
          lazy
          label="批改记录"
          :name="InsureOrderTabType.BatchOrder"
        >
          <BatchChangeRecordView />
        </ProTabPane>
      </ProTabs>
@@ -19,6 +24,7 @@
import BatchChangeRecordView from './components/BatchChangeRecordView.vue';
import * as insuranceOrderServices from '@/services/api/InsuranceOrder';
import { useQuery } from '@tanstack/vue-query';
import { InsurancePolicyStatusEnum } from '@/constants';
defineOptions({
  name: 'InsuranceOrderDetail',
@@ -37,11 +43,11 @@
const id = route.params.id as string;
const { data: detail, isLoading } = useQuery({
  queryKey: ['insuranceOrderServices/getInsuranceOrderDetail', id],
  queryKey: ['insuranceOrderServices/getInsurancePolicyHeadDto', id],
  queryFn: async () => {
    return await insuranceOrderServices.getInsuranceOrderDetail({ id: id });
    return await insuranceOrderServices.getInsurancePolicyHeadDto({ id: id });
  },
  placeholderData: () => ({} as API.InsuranceOrderListOutput),
  placeholderData: () => ({} as API.GetInsurancePageOutput),
  enabled: !!id,
});
</script>
src/views/Home/components/BatchChangeRecordView.vue
@@ -24,7 +24,7 @@
  defineOperationBtns,
  useFormDialog,
} from '@bole-core/components';
import * as insuranceOrderServices from '@/services/api/InsuranceOrder';
import * as insureBatchBillServices from '@/services/api/InsureBatchBill';
import { OrderInputType } from '@bole-core/core';
import BatchChangeRecordDetailDialog from './BatchChangeRecordDetailDialog.vue';
@@ -90,7 +90,19 @@
      onClick: (role) => handleDetail(role),
    },
    // extraProps: {
    //   hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile,
    //   hide: (row: API.InsureBatchBillDto) => !row.orderBillFile,
    // },
  },
  {
    data: {
      enCode: 'downloadBtn',
      name: '下载批单',
    },
    emits: {
      onClick: (role) => handleDownload(role),
    },
    // extraProps: {
    //   hide: (row: API.InsureBatchBillDto) => !row.orderBillFile,
    // },
  },
]);
@@ -112,16 +124,15 @@
} = useTable(
  async ({ pageIndex, pageSize }, extraParamState) => {
    try {
      let params: API.QueryInsuranceOrderPageInput = {
      let params: API.GetInsuranceBatchBillInput = {
        pageModel: {
          rows: pageSize,
          page: pageIndex,
          orderInput: extraParamState.orderInput,
        },
        condition: extraParamState.keyWord,
        // insurePolicyOperateHistoryId: id,
        insurancePolicyId: id,
      };
      let res = await insuranceOrderServices.getInsuranceOrderPage(params, {
      let res = await insureBatchBillServices.getInsureBatchBillList(params, {
        showLoading: !state.loading,
      });
      return res;
@@ -142,12 +153,14 @@
  },
});
function handleDetail(row: API.InsuranceOrderListOutput) {
function handleDetail(row: API.InsureBatchBillDto) {
  handleEdit({
    id: row.id,
    id: row.insureBatchBillId,
  });
}
function handleDownload(row: API.InsureBatchBillDto) {}
onMounted(async () => {
  await getBatchRefundInfoDetail();
  state.loading = false;
src/views/Home/components/ChangePersonInfoDialog.vue
@@ -27,12 +27,12 @@
        <ProFormColItem :span="16">
          <ProFormItemV2
            label="身份证号:"
            prop="name"
            :check-rules="[{ message: '请输入身份证号' }]"
            prop="idNumber"
            :check-rules="[{ message: '请输入身份证号', type: 'idCard' }]"
          >
            <ProFormText
              placeholder="请输入身份证号"
              v-model.trim="innerForm.name"
              v-model.trim="innerForm.idNumber"
              :maxlength="30"
            ></ProFormText>
          </ProFormItemV2>
@@ -40,11 +40,12 @@
      </ProFormCol>
      <ProFormCol>
        <ProFormColItem :span="16">
          <ProFormItemV2 label="手机号:" prop="name" :check-rules="[{ message: '请输入手机号' }]">
          <ProFormItemV2 label="手机号:" prop="phone">
            <ProFormText
              placeholder="请输入手机号"
              v-model.trim="innerForm.name"
              v-model.trim="innerForm.phone"
              :maxlength="30"
              disabled
            ></ProFormText>
          </ProFormItemV2>
        </ProFormColItem>
@@ -77,7 +78,10 @@
type Props = {
  modelValue: boolean;
  form?: {
    id: string;
    name: string;
    idNumber: string;
    phone: string;
  };
};
src/views/Home/components/InsureOrderInfoView.vue
@@ -5,40 +5,37 @@
        <ProForm :model="detail" ref="formRef" label-width="120px" :is-read="true">
          <ProFormCol>
            <ProFormColItem :span="8">
              <ProFormItemV2 label="保单号:" prop="orderNo">
                <ProFormText v-model.trim="detail.orderNo" />
              <ProFormItemV2 label="保单号:" prop="insureBillNo">
                <ProFormText v-model.trim="detail.insureBillNo" />
              </ProFormItemV2>
            </ProFormColItem>
            <ProFormColItem :span="8">
              <ProFormItemV2 label="生效状态:" prop="insuranceTypeCode">
                <ProFormRadio v-model="detail.insuranceType" :value-enum="insuranceTypeText" />
              <ProFormItemV2 label="生效状态:" prop="status">
                <ProFormRadio v-model="detail.status" :value-enum="InsurancePolicyStatusEnumText" />
              </ProFormItemV2>
            </ProFormColItem>
          </ProFormCol>
          <ProFormCol>
            <ProFormColItem :span="8">
              <ProFormItemV2 label="保险起期:" prop="applyTime">
                <ProFormDatePicker v-model.trim="detail.createTime" format="YYYY-MM-DD HH:mm" />
              <ProFormItemV2 label="保险起期:" prop="effectStartTime">
                <ProFormDatePicker v-model.trim="detail.effectStartTime" format="YYYY-MM-DD" />
              </ProFormItemV2>
            </ProFormColItem>
            <ProFormColItem :span="8">
              <ProFormItemV2 label="保险止期:" prop="insuranceTypeCode">
                <ProFormDatePicker v-model.trim="detail.createTime" format="YYYY-MM-DD HH:mm" />
              <ProFormItemV2 label="保险止期:" prop="effectEndTime">
                <ProFormDatePicker v-model.trim="detail.effectEndTime" format="YYYY-MM-DD" />
              </ProFormItemV2>
            </ProFormColItem>
            <ProFormColItem :span="8">
              <ProFormItemV2 label="投保方式:" prop="insureWay">
                <ProFormRadio v-model="detail.insuranceType" :value-enum="insuranceTypeText" />
              <ProFormItemV2 label="投保方式:" prop="insurancePeriod">
                <ProFormRadio v-model="detail.insurancePeriod" :value-enum="insuranceTypeText" />
              </ProFormItemV2>
            </ProFormColItem>
          </ProFormCol>
          <ProFormCol>
            <ProFormColItem :span="8">
              <ProFormItemV2 label="参保机构:" prop="insuredInstitution">
                <ProFormRadio
                  v-model="detail.insuredInstitution"
                  :value-enum="InsuredInstitutionEnum"
                />
              <ProFormItemV2 label="参保机构:" prop="insuranceOrg">
                <ProFormRadio v-model="detail.insuranceOrg" :value-enum="InsuredInstitutionEnum" />
              </ProFormItemV2>
            </ProFormColItem>
            <ProFormColItem :span="8">
@@ -47,27 +44,27 @@
              </ProFormItemV2>
            </ProFormColItem>
            <ProFormColItem :span="8">
              <ProFormItemV2 label="投保人数:" prop="numberOfFailed">
                <ProFormInputNumber v-model.trim="detail.incDecAmount" unit="人" />
              <ProFormItemV2 label="投保人数:" prop="insureCount">
                <ProFormInputNumber v-model.trim="detail.insureCount" unit="人" />
              </ProFormItemV2>
            </ProFormColItem>
          </ProFormCol>
          <ProFormCol>
            <ProFormColItem :span="8">
              <ProFormItemV2 label="投保人:" prop="companyName">
                <ProFormText v-model.trim="detail.orderNo" />
              <ProFormItemV2 label="投保人:" prop="insurerName">
                <ProFormText v-model.trim="detail.insurerName" />
              </ProFormItemV2>
            </ProFormColItem>
            <ProFormColItem :span="8">
              <ProFormItemV2 label="被保人:" prop="insuranceTypeCode">
                <ProFormText v-model.trim="detail.orderNo" />
              <ProFormItemV2 label="被保人:" prop="policyerName">
                <ProFormText v-model.trim="detail.policyerName" />
              </ProFormItemV2>
            </ProFormColItem>
          </ProFormCol>
        </ProForm>
      </ChunkCell>
      <ChunkCell title="人员信息">
        <template #titleRight>
        <template #titleRight v-if="detail.status !== InsurancePolicyStatusEnum.WaitEffect">
          <el-button type="primary" @click="handleBatchChange">批改申请</el-button>
        </template>
        <ProTableQueryFilterBar @on-reset="reset">
@@ -77,17 +74,32 @@
                v-model="extraParamState.keyWord"
                style="width: 300px"
                placeholder="姓名/身份证号/手机号"
                @on-click-search="getBatchRefundInfoDetail"
                @on-click-search="getInsuranceStaffList"
              >
              </SearchInput>
            </QueryFilterItem>
          </template>
          <template #btn>
            <el-button @click="handleTemplateDownload()" link type="primary">模板下载</el-button>
            <el-button @click="handleImport()" type="primary">导入</el-button>
            <el-button @click="handleClear()" type="primary">清空数据</el-button>
            <el-button @click="handleDownloadPerson()" type="primary">人员清单下载</el-button>
            <el-button @click="handleDownloadOrder()" type="primary">保单下载</el-button>
            <template v-if="detail.status === InsurancePolicyStatusEnum.WaitEffect">
              <el-button @click="handleTemplateDownload()" link type="primary">模板下载</el-button>
              <BlFileUpload
                :limitFileSize="10"
                accept="xls,xlsx"
                :showTip="false"
                :show-file-list="false"
                :on-success="handleUploadSuccess"
                style="margin-right: 10px; margin-left: 10px"
              >
                <template #default>
                  <el-button icon="Plus" type="primary">导入</el-button>
                </template>
              </BlFileUpload>
              <el-button @click="handleClear()" type="primary">清空数据</el-button>
            </template>
            <template v-else>
              <el-button @click="handleDownloadPerson()" type="primary">下载人员清单</el-button>
              <el-button @click="handleDownloadOrder()" type="primary">下载保单</el-button>
            </template>
          </template>
        </ProTableQueryFilterBar>
        <ProTableV2
@@ -127,17 +139,22 @@
  ProFormRadio,
  defineOperationBtns,
  useFormDialog,
  BlFileUpload,
  UploadUserFile,
} from '@bole-core/components';
import {
  InsuranceOrderTempPath,
  insuranceTypeText,
  InsuredInstitutionEnum,
  InsuranceSchemeEnum,
  InsurancePolicyStatusEnum,
  InsurancePolicyStatusEnumText,
} from '@/constants';
import ChangePersonInfoDialog from './ChangePersonInfoDialog.vue';
import * as insuranceOrderServices from '@/services/api/InsuranceOrder';
import { useQuery, useQueryClient } from '@tanstack/vue-query';
import { downloadFileByUrl, OrderInputType } from '@bole-core/core';
import { downloadFile, downloadFileByUrl, Message, OrderInputType } from '@bole-core/core';
import { setOSSLink } from '@/utils';
defineOptions({
  name: 'InsureOrderInfoView',
@@ -151,53 +168,60 @@
  },
  {
    id: '2',
    enCode: 'name',
    enCode: 'gender',
    name: '性别',
    width: 80,
  },
  {
    id: '3',
    enCode: 'name',
    enCode: 'certType',
    name: '证件类型',
    width: 100,
  },
  {
    id: '4',
    enCode: 'idNumber',
    enCode: 'certNo',
    name: '证件号码',
    width: 180,
  },
  {
    id: '5',
    enCode: 'idNumber',
    enCode: 'jobName',
    name: '雇员工种',
  },
  {
    id: '6',
    enCode: 'idNumber',
    enCode: 'userEmploer',
    name: '用工单位',
  },
  {
    id: '7',
    enCode: 'idNumber',
    enCode: 'address',
    name: '用工地点',
  },
  {
    id: '8',
    enCode: 'idNumber',
    enCode: 'age',
    name: '年龄',
    width: 80,
  },
  {
    id: '9',
    enCode: 'idNumber',
    enCode: 'birthDay',
    name: '出生日期',
    width: 120,
  },
  {
    id: '10',
    enCode: 'idNumber',
    enCode: 'phone',
    name: '手机号码',
    width: 140,
  },
  {
    id: '11',
    enCode: 'idNumber',
    enCode: 'serialNumber',
    name: '理赔',
    width: 100,
  },
];
@@ -210,9 +234,10 @@
    emits: {
      onClick: (role) => handleChangeInfo(role),
    },
    // extraProps: {
    //   hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile,
    // },
    extraProps: {
      hide: (row: API.GetInsuranceStaffPageTemplate) =>
        detail.value?.status !== InsurancePolicyStatusEnum.WaitEffect,
    },
  },
  {
    data: {
@@ -222,9 +247,10 @@
    emits: {
      onClick: (role) => handleInsureClaimDetail(role),
    },
    // extraProps: {
    //   hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile,
    // },
    extraProps: {
      hide: (row: API.GetInsuranceStaffPageTemplate) =>
        !(row.serialNumber && detail.value?.status !== InsurancePolicyStatusEnum.WaitEffect),
    },
  },
]);
@@ -238,16 +264,16 @@
const state = reactive({ ...BaseState });
const { data: detail, isLoading } = useQuery({
  queryKey: ['insuranceOrderServices/getInsuranceOrderDetail', id],
  queryKey: ['insuranceOrderServices/getInsurancePolicyHeadDto', id],
  queryFn: async () => {
    return await insuranceOrderServices.getInsuranceOrderDetail(
    return await insuranceOrderServices.getInsurancePolicyHeadDto(
      { id: id },
      {
        showLoading: !state.loading,
      }
    );
  },
  placeholderData: () => ({} as API.InsuranceOrderListOutput),
  placeholderData: () => ({} as API.GetInsurancePageOutput),
  enabled: !!id,
});
@@ -255,14 +281,14 @@
onMounted(async () => {
  await queryClient.ensureQueryData({
    queryKey: ['insuranceOrderServices/getInsuranceOrderDetail', id],
    queryKey: ['insuranceOrderServices/getInsurancePolicyHeadDto', id],
  });
  await getBatchRefundInfoDetail();
  await getInsuranceStaffList();
  state.loading = false;
});
const {
  getDataSource: getBatchRefundInfoDetail,
  getDataSource: getInsuranceStaffList,
  proTableProps,
  paginationState,
  extraParamState,
@@ -270,16 +296,16 @@
} = useTable(
  async ({ pageIndex, pageSize }, extraParamState) => {
    try {
      let params: API.QueryInsuranceOrderPageInput = {
      let params: API.GetInsuranceStaffListInput = {
        pageModel: {
          rows: pageSize,
          page: pageIndex,
          orderInput: extraParamState.orderInput,
        },
        condition: extraParamState.keyWord,
        // insurePolicyOperateHistoryId: id,
        insurancePolicyId: id,
      };
      let res = await insuranceOrderServices.getInsuranceOrderPage(params, {
      let res = await insuranceOrderServices.getInsuranceStaffList(params, {
        showLoading: !state.loading,
      });
      return res;
@@ -297,11 +323,57 @@
function handleTemplateDownload() {
  downloadFileByUrl(InsuranceOrderTempPath, '人员信息模板');
}
function handleClear() {}
function handleImport() {}
async function handleClear() {
  try {
    await Message.tipMessage('是否清空人员信息');
    let res = await insuranceOrderServices.clearInsuranceStaffData({
      id: id,
    });
    if (res) {
      Message.successMessage('操作成功');
      getInsuranceStaffList(paginationState.pageIndex);
    }
  } catch (error) {}
}
async function handleUploadSuccess(response: UploadUserFile) {
  try {
    // let res = await insuranceOrderServices.importInsuranceOrderData(response.url, {
    //   getResponse: true,
    //   responseType: 'blob',
    // });
    // if (res?.data?.size) {
    //   await Message.tipMessage('存在错误数据,是否导出?');
    //   downloadFile(res.data, `错误人员名单`, 'xlsx');
    // }
    // queryClient.invalidateQueries({
    //   queryKey: ['insuranceOrderServices/getInsuranceStaffList'],
    // });
    // getInsuranceStaffList();
  } catch (error) {}
}
function handleDownloadPerson() {}
function handleDownloadOrder() {}
async function handleDownloadPerson() {
  try {
    if (paginationState.total === 0) {
      Message.warnMessage('没有数据可以导出哦~');
      return;
    }
    let res = await insuranceOrderServices.getInsuranceStaffListExport(
      { id: id },
      {
        responseType: 'blob',
        getResponse: true,
      }
    );
    if (res) {
      downloadFile(res.data, `人员清单`, 'xlsx');
    }
  } catch (error) {}
}
function handleDownloadOrder() {
  downloadFileByUrl(setOSSLink(detail.value?.insureBillUrl));
}
function handleBatchChange() {
  router.push({
    name: 'BatchChange',
@@ -311,22 +383,45 @@
  });
}
const { dialogProps, handleEdit, editForm } = useFormDialog({
  onConfirm: changeInfo,
const { dialogProps, handleEdit, editForm, dialogState } = useFormDialog({
  onConfirm: updateInsuranceStaffInfo,
  defaultFormParams: {
    id: '',
    name: '',
    idNumber: '',
    phone: '',
  },
  closeAfterConfirm: false,
});
function handleChangeInfo(row: API.InsuranceOrderListOutput) {
function handleChangeInfo(row: API.GetInsuranceStaffPageTemplate) {
  handleEdit({
    id: row.id,
    name: row.name,
    idNumber: row.certNo,
    phone: row.phone,
  });
}
async function changeInfo() {}
async function updateInsuranceStaffInfo() {
  try {
    let params: API.UpdateInsuranceStaffInfoInput = {
      insurancePolicyId: id,
      id: editForm.id,
      name: editForm.name,
      idNumber: editForm.idNumber,
      phone: editForm.phone,
    };
    let res = await insuranceOrderServices.updateInsuranceStaffInfo(params);
    if (res) {
      Message.successMessage('修改成功');
      dialogState.dialogVisible = false;
      getInsuranceStaffList(paginationState.pageIndex);
    }
  } catch (error) {}
}
function handleInsureClaimDetail(row: API.InsuranceOrderListOutput) {
function handleInsureClaimDetail(row: API.GetInsuranceStaffPageTemplate) {
  router.push({
    name: 'InsuranceClaimDetail',
    params: {
src/views/Home/components/UploadInsurePersonDialog.vue
@@ -3,20 +3,18 @@
    title="上传投保人员清单"
    v-model="innerVisible"
    destroy-on-close
    :close-on-click-modal="false"
    :close-on-press-escape="false"
    draggable
    bodyNoPaddingBottom
    @close="onDialogClose"
    width="600px"
  >
    <ProForm :model="innerForm" ref="dialogForm" label-width="100px">
      <ProFormItemV2
        label="批次号:"
        prop="materialName"
        :check-rules="[{ message: '请输入批次号' }]"
      >
      <ProFormItemV2 label="批次号:" prop="serialNum" :check-rules="[{ message: '请输入批次号' }]">
        <ProFormText
          placeholder="请输入批次号"
          v-model.trim="innerForm.orderNo"
          v-model.trim="innerForm.serialNum"
          :maxlength="30"
        ></ProFormText>
      </ProFormItemV2>
@@ -57,6 +55,7 @@
  ProFormUpload,
} from '@bole-core/components';
import { FormInstance } from 'element-plus';
import _ from 'lodash';
defineOptions({
  name: 'UploadInsurePersonDialog',
@@ -65,7 +64,7 @@
type Props = {
  modelValue: boolean;
  form?: {
    orderNo: string;
    serialNum: string;
    url: UploadUserFile[];
  };
};
src/views/Home/components/UploadStampFileDialog.vue
@@ -14,7 +14,7 @@
        prop="url"
        :check-rules="[{ message: '请上传文件', type: 'upload' }]"
      >
        <ProFormUpload v-model:file-url="innerForm.url" accept="pdf,jpg,jpeg,png">
        <ProFormUpload v-model:file-url="innerForm.url" accept="pdf,jpg/jpeg,png">
          <template #tip>
            <div>
              <el-text type="danger">支持pdf、jpg、jepg、png图片</el-text>
src/views/Home/constants/index.ts
@@ -2,92 +2,92 @@
export const columns = defineColumns([
  {
    id: '2',
    enCode: 'channel',
    id: '1',
    enCode: 'serialNum',
    name: '批次号',
    width: 160,
  },
  {
    id: '3',
    enCode: 'orderNo',
    id: '2',
    enCode: 'insureBillNo',
    name: '保单号',
    width: 160,
  },
  {
    id: '4',
    enCode: 'orderNo',
    id: '3',
    enCode: 'insurerName',
    name: '投保人',
    width: 160,
  },
  {
    id: '5',
    enCode: 'orderNo',
    id: '4',
    enCode: 'policyerName',
    name: '被保人',
    width: 160,
  },
  {
    id: '6',
    enCode: 'insuranceBeginTime',
    id: '5',
    enCode: 'effectStartTime',
    name: '保险起期',
    width: 160,
  },
  {
    id: '7',
    enCode: 'insuranceEndTime',
    id: '6',
    enCode: 'effectEndTime',
    name: '保险止期',
    width: 160,
  },
  {
    id: '8',
    enCode: 'insuredInstitution',
    id: '7',
    enCode: 'insuranceOrg',
    name: '参保机构',
    width: 160,
  },
  {
    id: '9',
    id: '8',
    enCode: 'insuranceScheme',
    name: '投保方案',
    width: 160,
  },
  {
    id: '10',
    enCode: 'insuranceType',
    id: '9',
    enCode: 'insurancePeriod',
    name: '投保方式',
    width: 160,
  },
  {
    id: '11',
    enCode: 'insuranceType',
    id: '10',
    enCode: 'insureCount',
    name: '投保人数',
    width: 160,
  },
  {
    id: '12',
    enCode: 'insuranceType',
    id: '11',
    enCode: 'sumInsured',
    name: '总保额(元)',
    width: 200,
  },
  {
    id: '13',
    enCode: 'insuranceType',
    id: '12',
    enCode: 'amount',
    name: '总保费(元)',
    width: 160,
  },
  {
    id: '14',
    enCode: 'createTime',
    id: '13',
    enCode: 'creationTime',
    name: '最近导入日期',
    width: 160,
  },
  {
    id: '15',
    enCode: 'insuranceType',
    id: '14',
    enCode: 'status',
    name: '投保状态',
    width: 160,
  },
  {
    id: '16',
    enCode: 'insuranceType',
    id: '15',
    enCode: 'claimCount',
    name: '理赔数量',
    width: 160,
  },
src/views/InsuranceClaim/components/InsuranceClaimView.vue
@@ -289,51 +289,50 @@
            </div>
            <ClaimPicDemoView />
          </div>
          <div class="chuck-add-or-edit-actions">
          <div class="chuck-add-or-edit-actions" v-if="!isDetail">
            <el-button @click="handleBack">关闭</el-button>
            <el-button v-if="!isDetail" type="primary" @click="handleSubmit">提交</el-button>
            <el-button type="primary" @click="handleSubmit">提交</el-button>
          </div>
        </ProForm>
      </ChunkCell>
      <!-- <ChunkCell title="理赔结果">
          <ProForm :model="form" ref="claimFormRef" label-width="120px">
            <ProFormCol>
              <ProFormColItem :span="6">
                <ProFormItemV2 label="理赔结果:" prop="claimResult">
                  <ProFormSelect
                    placeholder="请选择理赔结果"
                    :value-enum="InsuranceClaimResultEnumText"
                    clearable
                    v-model="form.claimResult"
                  ></ProFormSelect>
                </ProFormItemV2>
              </ProFormColItem>
              <ProFormColItem :span="6">
                <ProFormItemV2 label="结/撤案时间:" prop="claimResultTime">
                  <ProFormDatePicker
                    v-model="form.claimResultTime"
                    type="datetime"
                    format="YYYY-MM-DD"
                    value-format="YYYY-MM-DD"
                    placeholder="请选择结/撤案时间"
                  ></ProFormDatePicker>
                </ProFormItemV2>
              </ProFormColItem>
            </ProFormCol>
            <ProFormItemV2 label="下款金额:" prop="downPaymentAmount">
              <ProFormInputNumber
                v-model="form.downPaymentAmount"
                :controls="false"
                :min="0"
                :precision="2"
              ></ProFormInputNumber>
            </ProFormItemV2>
            <div class="chuck-add-or-edit-actions">
              <el-button @click="handleBack">关闭</el-button>
              <el-button type="primary" @click="handleSubmit">提交</el-button>
            </div>
          </ProForm>
        </ChunkCell> -->
      <ChunkCell title="理赔结果" v-if="isDetail">
        <ProForm :model="form" ref="claimFormRef" label-width="120px" :is-read="isDetail">
          <ProFormCol>
            <ProFormColItem :span="6">
              <ProFormItemV2 label="理赔结果:" prop="claimResult">
                <ProFormSelect
                  placeholder="请选择理赔结果"
                  :value-enum="InsuranceClaimResultEnumText"
                  clearable
                  v-model="form.claimResult"
                ></ProFormSelect>
              </ProFormItemV2>
            </ProFormColItem>
            <ProFormColItem :span="6">
              <ProFormItemV2 label="结/撤案时间:" prop="claimResultTime">
                <ProFormDatePicker
                  v-model="form.claimResultTime"
                  type="datetime"
                  format="YYYY-MM-DD"
                  value-format="YYYY-MM-DD"
                  placeholder="请选择结/撤案时间"
                ></ProFormDatePicker>
              </ProFormItemV2>
            </ProFormColItem>
          </ProFormCol>
          <ProFormItemV2 label="下款金额:" prop="downPaymentAmount">
            <ProFormInputNumber
              v-model="form.downPaymentAmount"
              :controls="false"
              :min="0"
              :precision="2"
            ></ProFormInputNumber>
          </ProFormItemV2>
          <div class="chuck-add-or-edit-actions">
            <el-button @click="handleBack">关闭</el-button>
          </div>
        </ProForm>
      </ChunkCell>
    </AppScrollContainer>
    <SelectOrderDialog v-bind="dialogProps" />
  </LoadingLayout>