| | |
| | | <template> |
| | | <LoadingLayout :loading="state.loading"> |
| | | <AppScrollContainer> |
| | | <AppContainer> |
| | | <ChunkCell title=""> |
| | | <ProForm :model="detail" ref="formRef" label-width="120px" :is-read="true"> |
| | | <ProFormCol> |
| | |
| | | <ProFormCol> |
| | | <ProFormColItem :span="8"> |
| | | <ProFormItemV2 label="参保机构:" prop="insuranceOrg"> |
| | | <ProFormRadio v-model="detail.insuranceOrg" :value-enum="InsuredInstitutionEnum" /> |
| | | <!-- <ProFormRadio v-model="detail.insuranceOrg" :value-enum="InsuredInstitutionEnum" /> --> |
| | | <ProFormText v-model.trim="detail.insuranceOrg" /> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="8"> |
| | | <ProFormItemV2 label="投保方案:" prop="insuranceScheme"> |
| | | <ProFormRadio v-model="detail.insuranceScheme" :value-enum="InsuranceSchemeEnum" /> |
| | | <!-- <ProFormRadio v-model="detail.insuranceScheme" :value-enum="InsuranceSchemeEnum" /> --> |
| | | <ProFormText v-model.trim="detail.insuranceScheme" /> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="8"> |
| | |
| | | </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> |
| | | </AppScrollContainer> |
| | | <InsureClaimDetailDialog v-bind="dialogInsureClaimProps"></InsureClaimDetailDialog> |
| | | </AppContainer> |
| | | </LoadingLayout> |
| | | </template> |
| | | |
| | |
| | | useFormDialog, |
| | | BlFileUpload, |
| | | UploadUserFile, |
| | | XLSXUtils, |
| | | } from '@bole-core/components'; |
| | | import { |
| | | InsuranceOrderTempPath, |
| | | insuranceTypeText, |
| | | InsuredInstitutionEnum, |
| | | InsuranceSchemeEnum, |
| | | InsurancePolicyStatusEnum, |
| | | InsurancePolicyStatusEnumText, |
| | | } from '@/constants'; |
| | | 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, |
| | | }, |
| | |
| | | name: '理赔详情', |
| | | }, |
| | | emits: { |
| | | onClick: (role) => handleInsureClaimDetail(role), |
| | | onClick: (role) => handleDetail(role), |
| | | }, |
| | | 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.importInsuranceOrderData(response.url, { |
| | | // getResponse: true, |
| | | // responseType: 'blob', |
| | | // }); |
| | | // 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: { |
| | | id: id, |
| | | }, |
| | | query: { |
| | | insurerName: detail.value?.insurerName ?? '', |
| | | insureBillNo: detail.value?.insureBillNo ?? '', |
| | | effectEndTime: detail.value?.effectEndTime ?? '', |
| | | }, |
| | | }); |
| | | } |
| | |
| | | } catch (error) {} |
| | | } |
| | | |
| | | function handleInsureClaimDetail(row: API.GetInsuranceStaffPageTemplate) { |
| | | router.push({ |
| | | name: 'InsuranceClaimDetail', |
| | | params: { |
| | | const { dialogProps: dialogInsureClaimProps, handleEdit: handleInsureClaimEdit } = useFormDialog({ |
| | | defaultFormParams: { |
| | | id: '', |
| | | routeId: '', |
| | | staffList: [] as API.InsuranceClaimDetailOutput[], |
| | | }, |
| | | }); |
| | | |
| | | async function getInsuranceClaimDetailList(id: string) { |
| | | try { |
| | | return await insuranceClaimServices.getInsuranceClaimDetailList({ id: id }); |
| | | } catch (error) {} |
| | | } |
| | | |
| | | async function handleDetail(row: API.GetInsuranceStaffPageTemplate) { |
| | | try { |
| | | const res = await getInsuranceClaimDetailList(row.id); |
| | | handleInsureClaimEdit({ |
| | | id: row.id, |
| | | }, |
| | | query: { |
| | | fromRoute: 'InsuranceOrderDetail', |
| | | }, |
| | | }); |
| | | staffList: res, |
| | | routeId: id, |
| | | }); |
| | | } 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> |