| <template> | 
|   <LoadingLayout :loading="state.loading"> | 
|     <AppContainer> | 
|       <ProTableQueryFilterBar @on-reset="reset"> | 
|         <template #query> | 
|           <QueryFilterItem tip-content="录用状态"> | 
|             <FieldRadio | 
|               v-model="extraParamState.hireStatus" | 
|               :value-enum="EnumTaskUserHireStatusText" | 
|               buttonStyle | 
|               showAllBtn | 
|               @change="getList()" | 
|             /> | 
|           </QueryFilterItem> | 
|           <QueryFilterItem> | 
|             <SearchInput | 
|               v-model="extraParamState.searchWord" | 
|               style="width: 250px" | 
|               placeholder="姓名/身份证号/电话" | 
|               @on-click-search="getList" | 
|               @keyup.enter="getList()" | 
|             > | 
|             </SearchInput> | 
|           </QueryFilterItem> | 
|         </template> | 
|       </ProTableQueryFilterBar> | 
|       <ProTableV2 | 
|         v-bind="proTableProps" | 
|         :columns="EmploymentSignColumns" | 
|         :operationBtns="operationBtns" | 
|       > | 
|       </ProTableV2> | 
|     </AppContainer> | 
|     <StaffInfoDialog v-bind="dialogStaffInfoProps" /> | 
|   </LoadingLayout> | 
| </template> | 
|   | 
| <script setup lang="ts"> | 
| import { | 
|   ProTableQueryFilterBar, | 
|   ProTableV2, | 
|   SearchInput, | 
|   LoadingLayout, | 
|   AppContainer, | 
|   QueryFilterItem, | 
|   useTable, | 
|   FieldRadio, | 
|   defineOperationBtns, | 
|   useFormDialog, | 
|   UploadUserFile, | 
| } from '@bole-core/components'; | 
| import { EmploymentSignColumns } from './constants/columns'; | 
| import { Message } from '@bole-core/core'; | 
| import { EnumUserGender, EnumTaskUserHireStatusText } from '@/constants'; | 
| import StaffInfoDialog from '@/views/FlexJobManage/components/StaffInfoDialog.vue'; | 
| import { convertApi2FormUrlOnlyOne } from '@/utils'; | 
| import * as taskUserServices from '@/services/api/taskUser'; | 
| import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee'; | 
|   | 
| defineOptions({ | 
|   name: 'EmploymentSignList', | 
| }); | 
|   | 
| const operationBtns = defineOperationBtns([ | 
|   { | 
|     data: { | 
|       enCode: 'detailBtn', | 
|       name: '详情', | 
|     }, | 
|     emits: { | 
|       onClick: (role) => openDialog(role), | 
|     }, | 
|   }, | 
|   { | 
|     data: { | 
|       enCode: 'recruitBtn', | 
|       name: '录用', | 
|     }, | 
|     emits: { | 
|       onClick: (role) => setTaskUserHire(role, EnumTaskUserHireStatus.Pass), | 
|     }, | 
|     extraProps: { | 
|       hide: (row: API.GetTaskUsersQueryResultItem) => | 
|         row.hireStatus === EnumTaskUserHireStatus.Pass, | 
|     }, | 
|   }, | 
|   { | 
|     data: { | 
|       enCode: 'refuseBtn', | 
|       name: '谢绝', | 
|     }, | 
|     emits: { | 
|       onClick: (role) => setTaskUserHire(role, EnumTaskUserHireStatus.Refuse), | 
|     }, | 
|     extraProps: { | 
|       hide: (row: API.GetTaskUsersQueryResultItem) => | 
|         row.hireStatus !== EnumTaskUserHireStatus.Wait, | 
|     }, | 
|   }, | 
| ]); | 
|   | 
| const router = useRouter(); | 
| const route = useRoute(); | 
| const id = route.params.id as string; | 
| const BaseState = { | 
|   loading: true, | 
| }; | 
|   | 
| const state = reactive({ ...BaseState }); | 
|   | 
| onMounted(async () => { | 
|   await getList(); | 
|   state.loading = false; | 
| }); | 
|   | 
| const { | 
|   getDataSource: getList, | 
|   proTableProps, | 
|   paginationState, | 
|   extraParamState, | 
|   reset, | 
| } = useTable( | 
|   async ({ pageIndex, pageSize }, extraParamState) => { | 
|     try { | 
|       let params: API.GetTaskUsersQuery = { | 
|         pageModel: { | 
|           rows: pageSize, | 
|           page: pageIndex, | 
|           orderInput: extraParamState.orderInput, | 
|         }, | 
|         id: id, | 
|         keywords: extraParamState.searchWord, | 
|         hireStatus: extraParamState.hireStatus, | 
|       }; | 
|   | 
|       let res = await taskUserServices.getTaskUsers(params, { | 
|         showLoading: !state.loading, | 
|       }); | 
|       return res; | 
|     } catch (error) { | 
|       console.log('error: ', error); | 
|     } | 
|   }, | 
|   { | 
|     defaultExtraParams: { | 
|       searchWord: '', | 
|       orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], | 
|       hireStatus: '' as any as EnumTaskUserHireStatus, | 
|     }, | 
|     queryKey: ['taskUserServices/getTaskUsers'], | 
|     columnsRenderProps: { | 
|       gender: { type: 'enum', valueEnum: EnumUserGenderTextForPerson }, | 
|       hireStatus: { type: 'enum', valueEnum: EnumTaskUserHireStatusText }, | 
|     }, | 
|   } | 
| ); | 
|   | 
| const { | 
|   dialogProps: dialogStaffInfoProps, | 
|   handleEdit: handleStaffInfoEdit, | 
|   editForm: staffInfoEditForm, | 
| } = useFormDialog({ | 
|   defaultFormParams: { | 
|     id: '', | 
|     name: '', | 
|     identity: '', | 
|     contactPhoneNumber: '', | 
|     gender: EnumUserGender.Male, | 
|     age: null as any as number, | 
|     identityImg: [] as UploadUserFile[], | 
|     identityBackImg: [] as UploadUserFile[], | 
|     contractUrl: [] as UploadUserFile[], | 
|     regiterTime: '', | 
|     userRealTime: '', | 
|     userSignContractTime: '', | 
|     isDetail: false, | 
|   }, | 
| }); | 
|   | 
| async function openDialog(row: API.GetTaskUsersQueryResultItem) { | 
|   try { | 
|     let detail = await enterpriseEmployeeServices.getEnterpriseEmployee({ | 
|       id: row.enterpriseEmployeeId, | 
|     }); | 
|     handleStaffInfoEdit({ | 
|       id: row.id, | 
|       name: row.name, | 
|       identity: row.identity, | 
|       contactPhoneNumber: row.contactPhoneNumber, | 
|       gender: detail.gender, | 
|       age: detail.age ?? null, | 
|       identityImg: convertApi2FormUrlOnlyOne(detail.identityImg), | 
|       identityBackImg: convertApi2FormUrlOnlyOne(detail.identityBackImg), | 
|       contractUrl: convertApi2FormUrlOnlyOne(detail.contractUrl, { | 
|         fileName: detail.contractUrl ? detail.contractUrl.split('/').pop() : '合同', | 
|       }), | 
|       regiterTime: detail.applyTime ?? '', | 
|       userRealTime: detail.userRealTime ?? '', | 
|       userSignContractTime: detail.userSignContractTime ?? '', | 
|       isDetail: true, | 
|     }); | 
|   } catch (error) {} | 
| } | 
|   | 
| async function setTaskUserHire( | 
|   row: API.GetTaskUsersQueryResultItem, | 
|   hireStatus: EnumTaskUserHireStatus | 
| ) { | 
|   try { | 
|     await Message.tipMessage( | 
|       `确认要${hireStatus === EnumTaskUserHireStatus.Pass ? '录用' : '谢绝'}吗?` | 
|     ); | 
|     let params: API.SetTaskUserHireCommand = { | 
|       id: row.id, | 
|       hireStatus: hireStatus, | 
|     }; | 
|     let res = await taskUserServices.setTaskUserHire(params); | 
|     if (res) { | 
|       Message.successMessage('操作成功'); | 
|       getList(paginationState.pageIndex); | 
|     } | 
|   } catch (error) {} | 
| } | 
| </script> |