|  |  | 
 |  |  | <template> | 
 |  |  |   <LoadingLayout :loading="state.loading"> | 
 |  |  |     <AppScrollContainer> | 
 |  |  |     <AppContainer> | 
 |  |  |       <ChunkCell title=""> | 
 |  |  |         <ProForm :model="detail" ref="formRef" label-width="120px" :is-read="true"> | 
 |  |  |           <ProFormCol> | 
 |  |  | 
 |  |  |           </ProFormCol> | 
 |  |  |         </ProForm> | 
 |  |  |       </ChunkCell> | 
 |  |  |       <ChunkCell title="人员信息"> | 
 |  |  |       <ChunkCell title="人员信息" class="full-table-chunk"> | 
 |  |  |         <template #titleRight v-if="detail.status !== InsurancePolicyStatusEnum.WaitEffect"> | 
 |  |  |           <el-button type="primary" @click="handleBatchChange">批改申请</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> | 
 |  |  |     </AppContainer> | 
 |  |  |   </LoadingLayout> | 
 |  |  | </template> | 
 |  |  |  | 
 |  |  | 
 |  |  |   useFormDialog, | 
 |  |  |   BlFileUpload, | 
 |  |  |   UploadUserFile, | 
 |  |  |   XLSXUtils, | 
 |  |  | } from '@bole-core/components'; | 
 |  |  | import { | 
 |  |  |   InsuranceOrderTempPath, | 
 |  |  | 
 |  |  | import ChangePersonInfoDialog from './ChangePersonInfoDialog.vue'; | 
 |  |  | import InsureClaimDetailDialog from './InsureClaimDetailDialog.vue'; | 
 |  |  | import * as insuranceOrderServices from '@/services/api/InsuranceOrder'; | 
 |  |  | import * as insuranceClaimServices from '@/services/api/InsuranceClaim'; | 
 |  |  | import { useQuery, useQueryClient } from '@tanstack/vue-query'; | 
 |  |  | import { downloadFile, downloadFileByUrl, Message, OrderInputType } from '@bole-core/core'; | 
 |  |  | import { setOSSLink } from '@/utils'; | 
 |  |  | import dayjs from 'dayjs'; | 
 |  |  |  | 
 |  |  | defineOptions({ | 
 |  |  |   name: 'InsureOrderInfoView', | 
 |  |  | 
 |  |  |   }, | 
 |  |  |   { | 
 |  |  |     id: '11', | 
 |  |  |     enCode: 'serialNumber', | 
 |  |  |     enCode: 'claimCount', | 
 |  |  |     name: '理赔', | 
 |  |  |     width: 100, | 
 |  |  |   }, | 
 |  |  | 
 |  |  |     }, | 
 |  |  |     extraProps: { | 
 |  |  |       hide: (row: API.GetInsuranceStaffPageTemplate) => | 
 |  |  |         !(row.serialNumber && detail.value?.status !== InsurancePolicyStatusEnum.WaitEffect), | 
 |  |  |         !(row.claimCount && detail.value?.status !== InsurancePolicyStatusEnum.WaitEffect), | 
 |  |  |     }, | 
 |  |  |   }, | 
 |  |  | ]); | 
 |  |  | 
 |  |  | } | 
 |  |  | async function handleClear() { | 
 |  |  |   try { | 
 |  |  |     if (paginationState.total === 0) { | 
 |  |  |       Message.warnMessage('没有需要清空的数据~'); | 
 |  |  |       return; | 
 |  |  |     } | 
 |  |  |     await Message.tipMessage('是否清空人员信息'); | 
 |  |  |     let res = await insuranceOrderServices.clearInsuranceStaffData({ | 
 |  |  |       id: id, | 
 |  |  | 
 |  |  | } | 
 |  |  | async function handleUploadSuccess(response: UploadUserFile) { | 
 |  |  |   try { | 
 |  |  |     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'); | 
 |  |  |     // } | 
 |  |  |     // queryClient.invalidateQueries({ | 
 |  |  |     //   queryKey: ['insuranceOrderServices/getInsuranceStaffList'], | 
 |  |  |     // }); | 
 |  |  |     // getInsuranceStaffList(); | 
 |  |  |     let res = await insuranceOrderServices.importInsDetailStaffToList({ | 
 |  |  |       id: id, | 
 |  |  |       url: response.url, | 
 |  |  |     }); | 
 |  |  |     if (res?.length > 0) { | 
 |  |  |       await Message.tipMessage('存在错误数据,是否导出?'); | 
 |  |  |       XLSXUtils.exportToXLSX({ | 
 |  |  |         workbookDataList: res, | 
 |  |  |         fileName: '错误人员名单', | 
 |  |  |         workbookHeaderMap: { | 
 |  |  |           name: '雇员姓名', | 
 |  |  |           sex: '性别', | 
 |  |  |           certType: '证件类型', | 
 |  |  |           certNo: '证件号码', | 
 |  |  |           jobName: '雇员工种', | 
 |  |  |           useEmploer: '用工单位', | 
 |  |  |           address: '用工地点', | 
 |  |  |           note: '备注', | 
 |  |  |         }, | 
 |  |  |       }); | 
 |  |  |     } | 
 |  |  |     queryClient.invalidateQueries({ | 
 |  |  |       queryKey: ['insuranceOrderServices/getInsuranceStaffList'], | 
 |  |  |     }); | 
 |  |  |     getInsuranceStaffList(); | 
 |  |  |   } catch (error) {} | 
 |  |  | } | 
 |  |  |  | 
 |  |  | 
 |  |  | } | 
 |  |  |  | 
 |  |  | function handleBatchChange() { | 
 |  |  |   if ( | 
 |  |  |     dayjs(detail.value?.effectEndTime).isBefore(dayjs()) || | 
 |  |  |     dayjs(detail.value?.effectEndTime).isSame(dayjs(), 'day') | 
 |  |  |   ) { | 
 |  |  |     Message.errorMessage('保险今天到期,无法批改'); | 
 |  |  |     return; | 
 |  |  |   } | 
 |  |  |   router.push({ | 
 |  |  |     name: 'BatchChange', | 
 |  |  |     params: { | 
 |  |  | 
 |  |  |     query: { | 
 |  |  |       insurerName: detail.value?.insurerName ?? '', | 
 |  |  |       insureBillNo: detail.value?.insureBillNo ?? '', | 
 |  |  |       effectEndTime: detail.value?.effectEndTime ?? '', | 
 |  |  |     }, | 
 |  |  |   }); | 
 |  |  | } | 
 |  |  | 
 |  |  | const { dialogProps: dialogInsureClaimProps, handleEdit: handleInsureClaimEdit } = useFormDialog({ | 
 |  |  |   defaultFormParams: { | 
 |  |  |     id: '', | 
 |  |  |     staffList: [] as API.InsureBatchBillDetailDto[], | 
 |  |  |     routeId: '', | 
 |  |  |     staffList: [] as API.InsuranceClaimDetailOutput[], | 
 |  |  |   }, | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | async function handleDetail(row: API.InsureBatchBillDto) { | 
 |  |  | async function getInsuranceClaimDetailList(id: string) { | 
 |  |  |   try { | 
 |  |  |     // const res = await getInsureBatchDetail(row.insureBatchBillId); | 
 |  |  |     return await insuranceClaimServices.getInsuranceClaimDetailList({ id: id }); | 
 |  |  |   } catch (error) {} | 
 |  |  | } | 
 |  |  |  | 
 |  |  | async function handleDetail(row: API.GetInsuranceStaffPageTemplate) { | 
 |  |  |   try { | 
 |  |  |     const res = await getInsuranceClaimDetailList(row.id); | 
 |  |  |     handleInsureClaimEdit({ | 
 |  |  |       id: row.insureBatchBillId, | 
 |  |  |       staffList: [], | 
 |  |  |       id: row.id, | 
 |  |  |       staffList: res, | 
 |  |  |       routeId: id, | 
 |  |  |     }); | 
 |  |  |   } catch (error) {} | 
 |  |  | } | 
 |  |  | 
 |  |  |  | 
 |  |  | <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> |