|  |  | 
 |  |  | <template> | 
 |  |  |   <LoadingLayout :loading="state.loading"> | 
 |  |  |     <AppScrollContainer> | 
 |  |  |     <AppContainer> | 
 |  |  |       <ChunkCell title=""> | 
 |  |  |         <ProForm :model="detail" ref="formRef" label-width="120px" :is-read="true"> | 
 |  |  |           <ProFormCol> | 
 |  |  |             <ProFormColItem :span="8"> | 
 |  |  |               <ProFormItemV2 label="保单号:" prop="insureBillNo"> | 
 |  |  |                 <ProFormText v-model.trim="detail.insureBillNo" /> | 
 |  |  |                 <div class="pro-from-item-read-content-wrapper" v-if="!!detail.insureBillNo"> | 
 |  |  |                   {{ detail.insureBillNo }} | 
 |  |  |                   <el-button | 
 |  |  |                     type="primary" | 
 |  |  |                     link | 
 |  |  |                     @click="handleGoStampFiles(id)" | 
 |  |  |                     v-if="detail.productOnline && detail.anyPayComplete" | 
 |  |  |                     >详情</el-button | 
 |  |  |                   > | 
 |  |  |                 </div> | 
 |  |  |               </ProFormItemV2> | 
 |  |  |             </ProFormColItem> | 
 |  |  |             <ProFormColItem :span="8"> | 
 |  |  | 
 |  |  |               </ProFormItemV2> | 
 |  |  |             </ProFormColItem> | 
 |  |  |           </ProFormCol> | 
 |  |  |           <ProFormCol v-if="detail.productOnline"> | 
 |  |  |             <ProFormColItem :span="8"> | 
 |  |  |               <ProFormItemV2 label="总保费:" prop="amount"> | 
 |  |  |                 <ProFormInputNumber v-model="detail.amount" unit="元" formatValue="money" /> | 
 |  |  |               </ProFormItemV2> | 
 |  |  |             </ProFormColItem> | 
 |  |  |             <ProFormColItem :span="8"> | 
 |  |  |               <ProFormItemV2 label="总保额:" prop="sumInsured"> | 
 |  |  |                 <ProFormInputNumber | 
 |  |  |                   v-model.trim="detail.sumInsured" | 
 |  |  |                   unit="元" | 
 |  |  |                   formatValue="money" | 
 |  |  |                 /> | 
 |  |  |               </ProFormItemV2> | 
 |  |  |             </ProFormColItem> | 
 |  |  |           </ProFormCol> | 
 |  |  |           <ProFormCol> | 
 |  |  |             <ProFormColItem :span="8"> | 
 |  |  |               <ProFormItemV2 label="投保人:" prop="insurerName"> | 
 |  |  | 
 |  |  |           </ProFormCol> | 
 |  |  |         </ProForm> | 
 |  |  |       </ChunkCell> | 
 |  |  |       <ChunkCell title="人员信息"> | 
 |  |  |         <template #titleRight v-if="detail.status !== InsurancePolicyStatusEnum.WaitEffect"> | 
 |  |  |       <ChunkCell title="人员信息" class="full-table-chunk"> | 
 |  |  |         <template | 
 |  |  |           #titleRight | 
 |  |  |           v-if="detail.status !== InsurancePolicyStatusEnum.WaitEffect && !detail.productOnline" | 
 |  |  |         > | 
 |  |  |           <el-button type="primary" @click="handleBatchChange">批改申请</el-button> | 
 |  |  |         </template> | 
 |  |  |         <ProTableQueryFilterBar @on-reset="reset"> | 
 |  |  | 
 |  |  |             </QueryFilterItem> | 
 |  |  |           </template> | 
 |  |  |           <template #btn> | 
 |  |  |             <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 v-if="detail.productOnline"> | 
 |  |  |               <el-button | 
 |  |  |                 v-if="detail.auditStatus === InsurancePolicyAuditStatusEnum.Pass" | 
 |  |  |                 @click="handleSupplySubmit()" | 
 |  |  |                 type="primary" | 
 |  |  |                 >补提</el-button | 
 |  |  |               > | 
 |  |  |                 <template #default> | 
 |  |  |                   <el-button icon="Plus" type="primary">导入</el-button> | 
 |  |  |                 </template> | 
 |  |  |               </BlFileUpload> | 
 |  |  |               <el-button @click="handleClear()" type="primary">清空数据</el-button> | 
 |  |  |               <el-button @click="handleExport(InsuranceDetailStatusEnum.Effecting)" type="primary" | 
 |  |  |                 >导出在保人员</el-button | 
 |  |  |               > | 
 |  |  |               <el-button @click="handleExport(InsuranceDetailStatusEnum.Fail)" type="primary" | 
 |  |  |                 >导出错误人员</el-button | 
 |  |  |               > | 
 |  |  |               <template v-if="detail.auditStatus === InsurancePolicyAuditStatusEnum.WaitAdd"> | 
 |  |  |                 <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-if="detail.status !== InsurancePolicyStatusEnum.WaitEffect"> | 
 |  |  |                 <el-button @click="handleGoStampFiles(id)" type="primary">下载保单</el-button> | 
 |  |  |                 <el-button @click="handleGoDownloadInvoice(id)" type="primary">下载发票</el-button> | 
 |  |  |               </template> | 
 |  |  |             </template> | 
 |  |  |             <template v-else> | 
 |  |  |               <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 | 
 |  |  |                   v-if="detail.auditStatus !== InsurancePolicyAuditStatusEnum.Pass" | 
 |  |  |                   :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="handleExport(null)" type="primary">下载人员清单</el-button> | 
 |  |  |                 <el-button @click="handleDownloadOrder()" type="primary">下载保单</el-button> | 
 |  |  |               </template> | 
 |  |  |             </template> | 
 |  |  |           </template> | 
 |  |  |         </ProTableQueryFilterBar> | 
 |  |  |         <ProTableV2 | 
 |  |  |           v-bind="proTableProps" | 
 |  |  |           :columns="column" | 
 |  |  |           :operationBtns="operationBtns" | 
 |  |  |           :auto-height="false" | 
 |  |  |           ref="proTable" | 
 |  |  |           :tableProps="{ | 
 |  |  |             maxHeight: '400px', | 
 |  |  |           }" | 
 |  |  |         > | 
 |  |  |         </ProTableV2> | 
 |  |  |         <div class="full-table-chunk-table"> | 
 |  |  |           <ProTableV2 | 
 |  |  |             v-bind="proTableProps" | 
 |  |  |             :columns="column" | 
 |  |  |             :operationBtns="operationBtns" | 
 |  |  |             ref="proTable" | 
 |  |  |           > | 
 |  |  |           </ProTableV2> | 
 |  |  |         </div> | 
 |  |  |       </ChunkCell> | 
 |  |  |       <ChangePersonInfoDialog v-bind="dialogProps"></ChangePersonInfoDialog> | 
 |  |  |       <InsureClaimDetailDialog v-bind="dialogInsureClaimProps"></InsureClaimDetailDialog> | 
 |  |  |     </AppScrollContainer> | 
 |  |  |       <UploadInsurePersonDialog v-bind="dialogSupplyProps" isSupply /> | 
 |  |  |     </AppContainer> | 
 |  |  |   </LoadingLayout> | 
 |  |  | </template> | 
 |  |  |  | 
 |  |  | 
 |  |  |   insuranceTypeText, | 
 |  |  |   InsurancePolicyStatusEnum, | 
 |  |  |   InsurancePolicyStatusEnumText, | 
 |  |  |   InsurancePolicyAuditStatusEnum, | 
 |  |  |   InsuranceDetailStatusEnumText, | 
 |  |  |   InsuranceDetailStatusEnum, | 
 |  |  | } from '@/constants'; | 
 |  |  | import ChangePersonInfoDialog from './ChangePersonInfoDialog.vue'; | 
 |  |  | import InsureClaimDetailDialog from './InsureClaimDetailDialog.vue'; | 
 |  |  | 
 |  |  | import { downloadFile, downloadFileByUrl, Message, OrderInputType } from '@bole-core/core'; | 
 |  |  | import { setOSSLink } from '@/utils'; | 
 |  |  | import dayjs from 'dayjs'; | 
 |  |  | import { | 
 |  |  |   useInsureActions, | 
 |  |  |   useInsureProductSchemeAllList, | 
 |  |  |   useUserInsureProductSetting, | 
 |  |  | } from '@/hooks'; | 
 |  |  | import UploadInsurePersonDialog from './UploadInsurePersonDialog.vue'; | 
 |  |  |  | 
 |  |  | defineOptions({ | 
 |  |  |   name: 'InsureOrderInfoView', | 
 |  |  | 
 |  |  |     name: '雇员工种', | 
 |  |  |   }, | 
 |  |  |   { | 
 |  |  |     id: '51', | 
 |  |  |     enCode: 'occupationType', | 
 |  |  |     name: '职业类型', | 
 |  |  |   }, | 
 |  |  |   { | 
 |  |  |     id: '52', | 
 |  |  |     enCode: 'occupationCode', | 
 |  |  |     name: '职业码值', | 
 |  |  |   }, | 
 |  |  |   { | 
 |  |  |     id: '6', | 
 |  |  |     enCode: 'userEmploer', | 
 |  |  |     name: '用工单位', | 
 |  |  | 
 |  |  |     width: 140, | 
 |  |  |   }, | 
 |  |  |   { | 
 |  |  |     id: '101', | 
 |  |  |     enCode: 'payOrder', | 
 |  |  |     name: '批次号', | 
 |  |  |     width: 140, | 
 |  |  |   }, | 
 |  |  |   { | 
 |  |  |     id: '102', | 
 |  |  |     enCode: 'status', | 
 |  |  |     name: '投保状态', | 
 |  |  |     width: 140, | 
 |  |  |   }, | 
 |  |  |   { | 
 |  |  |     id: '103', | 
 |  |  |     enCode: 'auditRemark', | 
 |  |  |     name: '备注', | 
 |  |  |     width: 140, | 
 |  |  |   }, | 
 |  |  |   { | 
 |  |  |     id: '11', | 
 |  |  |     enCode: 'claimCount', | 
 |  |  |     name: '理赔', | 
 |  |  | 
 |  |  |       onClick: (role) => handleChangeInfo(role), | 
 |  |  |     }, | 
 |  |  |     extraProps: { | 
 |  |  |       hide: (row: API.GetInsuranceStaffPageTemplate) => | 
 |  |  |         detail.value?.status !== InsurancePolicyStatusEnum.WaitEffect, | 
 |  |  |       hide: (row: API.GetInsuranceStaffPageTemplate) => { | 
 |  |  |         if (detail.value?.productOnline) { | 
 |  |  |           return detail.value?.auditStatus !== InsurancePolicyAuditStatusEnum.WaitAdd; | 
 |  |  |         } else { | 
 |  |  |           return ( | 
 |  |  |             detail.value?.status !== InsurancePolicyStatusEnum.WaitEffect || | 
 |  |  |             detail.value?.auditStatus === InsurancePolicyAuditStatusEnum.Pass | 
 |  |  |           ); | 
 |  |  |         } | 
 |  |  |       }, | 
 |  |  |     }, | 
 |  |  |   }, | 
 |  |  |   { | 
 |  |  | 
 |  |  |       let res = await insuranceOrderServices.getInsuranceStaffList(params, { | 
 |  |  |         showLoading: !state.loading, | 
 |  |  |       }); | 
 |  |  |       console.log('res: ', res); | 
 |  |  |       return res; | 
 |  |  |     } catch (error) {} | 
 |  |  |   }, | 
 |  |  | 
 |  |  |       keyWord: '', | 
 |  |  |       orderInput: [{ property: 'id', order: OrderInputType.Asc }], | 
 |  |  |     }, | 
 |  |  |     columnsRenderProps: {}, | 
 |  |  |     columnsRenderProps: { | 
 |  |  |       status: { | 
 |  |  |         type: 'enum', | 
 |  |  |         valueEnum: InsuranceDetailStatusEnumText, | 
 |  |  |       }, | 
 |  |  |     }, | 
 |  |  |   } | 
 |  |  | ); | 
 |  |  |  | 
 |  |  | 
 |  |  |       url: response.url, | 
 |  |  |     }); | 
 |  |  |     if (res?.length > 0) { | 
 |  |  |       await Message.tipMessage('存在错误数据,是否导出?'); | 
 |  |  |       XLSXUtils.exportToXLSX({ | 
 |  |  |         workbookDataList: res, | 
 |  |  |         fileName: '错误人员名单', | 
 |  |  |         workbookHeaderMap: { | 
 |  |  |           name: '雇员姓名', | 
 |  |  |           sex: '性别', | 
 |  |  |           certType: '证件类型', | 
 |  |  |           certNo: '证件号码', | 
 |  |  |           jobName: '雇员工种', | 
 |  |  |           useEmploer: '用工单位', | 
 |  |  |           address: '用工地点', | 
 |  |  |           note: '备注', | 
 |  |  |         }, | 
 |  |  |       }); | 
 |  |  |       try { | 
 |  |  |         await Message.tipMessage('存在错误数据,是否导出?'); | 
 |  |  |         XLSXUtils.exportToXLSX({ | 
 |  |  |           workbookDataList: res, | 
 |  |  |           fileName: '错误人员名单', | 
 |  |  |           workbookHeaderMap: { | 
 |  |  |             name: '雇员姓名', | 
 |  |  |             sex: '性别', | 
 |  |  |             certType: '证件类型', | 
 |  |  |             certNo: '证件号码', | 
 |  |  |             jobName: '雇员工种', | 
 |  |  |             useEmploer: '用工单位', | 
 |  |  |             address: '用工地点', | 
 |  |  |             note: '备注', | 
 |  |  |           }, | 
 |  |  |         }); | 
 |  |  |       } catch (error) {} | 
 |  |  |     } | 
 |  |  |     queryClient.invalidateQueries({ | 
 |  |  |       queryKey: ['insuranceOrderServices/getInsuranceStaffList'], | 
 |  |  | 
 |  |  |   } catch (error) {} | 
 |  |  | } | 
 |  |  |  | 
 |  |  | 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)); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | const { handleGoDownloadInvoice, handleGoStampFiles } = useInsureActions(); | 
 |  |  |  | 
 |  |  | function handleBatchChange() { | 
 |  |  |   if ( | 
 |  |  | 
 |  |  |     }); | 
 |  |  |   } catch (error) {} | 
 |  |  | } | 
 |  |  |  | 
 |  |  | async function handleExport(status: InsuranceDetailStatusEnum) { | 
 |  |  |   try { | 
 |  |  |     if (paginationState.total === 0) { | 
 |  |  |       Message.warnMessage('没有数据可以导出哦~'); | 
 |  |  |       return; | 
 |  |  |     } | 
 |  |  |     let res = await insuranceOrderServices.getInsuranceStaffListExport( | 
 |  |  |       { insurancePolicyId: id, status: status }, | 
 |  |  |       { | 
 |  |  |         responseType: 'blob', | 
 |  |  |         getResponse: true, | 
 |  |  |       } | 
 |  |  |     ); | 
 |  |  |     if (res) { | 
 |  |  |       downloadFile(res.data, `人员清单`, 'xlsx'); | 
 |  |  |     } | 
 |  |  |   } catch (error) {} | 
 |  |  | } | 
 |  |  |  | 
 |  |  | const { getInsureProductIdByIdNumber } = useUserInsureProductSetting(); | 
 |  |  | const { getInsureProductSchemeByCode } = useInsureProductSchemeAllList({ | 
 |  |  |   insureProductId: computed(() => getInsureProductIdByIdNumber(detail.value.productIdNumber)), | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | function handleSupplySubmit() { | 
 |  |  |   handleSupplyAdd({ | 
 |  |  |     serialNum: detail.value.serialNum, | 
 |  |  |     productIdNumber: detail.value.productIdNumber, | 
 |  |  |     productSchemeIdNumber: getInsureProductSchemeByCode(detail.value.productSchemeCode)?.idNumber, | 
 |  |  |     effectStartTime: detail.value.effectStartTime, | 
 |  |  |     effectEndTime: detail.value.effectEndTime, | 
 |  |  |   }); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | const { | 
 |  |  |   dialogProps: dialogSupplyProps, | 
 |  |  |   handleAdd: handleSupplyAdd, | 
 |  |  |   editForm: supplyForm, | 
 |  |  |   dialogState: dialogSupplyState, | 
 |  |  | } = useFormDialog({ | 
 |  |  |   onConfirm: supplySubmit, | 
 |  |  |   defaultFormParams: { | 
 |  |  |     serialNum: '', | 
 |  |  |     url: [] as UploadUserFile[], | 
 |  |  |     productIdNumber: '', | 
 |  |  |     productSchemeIdNumber: '', | 
 |  |  |     effectStartTime: dayjs().add(1, 'day').format('YYYY-MM-DD'), | 
 |  |  |     effectEndTime: '', | 
 |  |  |   }, | 
 |  |  |   closeAfterConfirm: false, | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | async function supplySubmit() { | 
 |  |  |   try { | 
 |  |  |     let params: API.FillInsStaffToListFrontInput = { | 
 |  |  |       insurancePolicyId: id, | 
 |  |  |       url: supplyForm.url?.[0]?.path, | 
 |  |  |     }; | 
 |  |  |     let res = await insuranceOrderServices.fillInsStaffToList(params, { | 
 |  |  |       timeout: 60 * 1000 * 10, | 
 |  |  |     }); | 
 |  |  |     if (res) { | 
 |  |  |       // await Message.tipMessage('存在错误数据,是否导出?'); | 
 |  |  |       try { | 
 |  |  |         if (res.errorList.length > 0) { | 
 |  |  |           await Message.tipMessage( | 
 |  |  |             `总投保人数${res.importAllCount}人,投保成功${res.successCount}人,投保失败${res.errorList.length}人是否导出投保失败人员清单?`, | 
 |  |  |             { | 
 |  |  |               confirmButtonText: '导出', | 
 |  |  |             } | 
 |  |  |           ); | 
 |  |  |           XLSXUtils.exportToXLSX({ | 
 |  |  |             workbookDataList: res.errorList, | 
 |  |  |             fileName: '错误人员名单', | 
 |  |  |             workbookHeaderMap: { | 
 |  |  |               name: '雇员姓名', | 
 |  |  |               sex: '性别', | 
 |  |  |               certType: '证件类型', | 
 |  |  |               certNo: '证件号码', | 
 |  |  |               jobName: '雇员工种', | 
 |  |  |               useEmploer: '用工单位', | 
 |  |  |               address: '用工地点', | 
 |  |  |               note: '备注', | 
 |  |  |             }, | 
 |  |  |           }); | 
 |  |  |         } else { | 
 |  |  |           await Message.tipMessage( | 
 |  |  |             `总投保人数${res.importAllCount}人,投保成功${res.successCount}人`, | 
 |  |  |             { | 
 |  |  |               showCancelButton: false, | 
 |  |  |             } | 
 |  |  |           ); | 
 |  |  |         } | 
 |  |  |       } catch (error) {} | 
 |  |  |       dialogSupplyState.dialogVisible = false; | 
 |  |  |       getInsuranceStaffList(paginationState.pageIndex); | 
 |  |  |     } | 
 |  |  |   } catch (error) {} | 
 |  |  | } | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <style lang="scss" scoped> | 
 |  |  | @use '@/style/common.scss' as *; | 
 |  |  |  | 
 |  |  | .full-table-chunk { | 
 |  |  |   display: flex; | 
 |  |  |   min-height: 0; | 
 |  |  |   flex: 1; | 
 |  |  |   flex-direction: column; | 
 |  |  |  | 
 |  |  |   :deep() { | 
 |  |  |     .chunk-cell-content { | 
 |  |  |       display: flex; | 
 |  |  |       flex-direction: column; | 
 |  |  |       flex: 1; | 
 |  |  |       min-height: 0; | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   .full-table-chunk-table { | 
 |  |  |     display: flex; | 
 |  |  |     flex-direction: column; | 
 |  |  |     flex: 1; | 
 |  |  |     min-height: 0; | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | </style> |