| <template> | 
|   <LoadingLayout :loading="state.loading"> | 
|     <AppContainer> | 
|       <ProTableQueryFilterBar @on-reset="reset"> | 
|         <template #query> | 
|           <QueryFilterItem tip-content="实名状态"> | 
|             <FieldRadio | 
|               v-model="extraParamState.isReal" | 
|               :value-enum="[ | 
|                 { label: '已实名', value: true }, | 
|                 { label: '未实名', value: false }, | 
|               ]" | 
|               buttonStyle | 
|               showAllBtn | 
|               :all-btn-value="null" | 
|               @change="getList()" | 
|             /> | 
|           </QueryFilterItem> | 
|           <QueryFilterItem tip-content="最近录用时间"> | 
|             <FieldDatePicker | 
|               v-model="extraParamState.hireTime" | 
|               type="daterange" | 
|               range-separator="~" | 
|               start-placeholder="开始时间" | 
|               end-placeholder="结束时间" | 
|               clearable | 
|               @change="getList()" | 
|             ></FieldDatePicker> | 
|           </QueryFilterItem> | 
|           <QueryFilterItem tip-content="最近签约时间"> | 
|             <FieldDatePicker | 
|               v-model="extraParamState.signContractTime" | 
|               type="daterange" | 
|               range-separator="~" | 
|               start-placeholder="开始时间" | 
|               end-placeholder="结束时间" | 
|               clearable | 
|               @change="getList()" | 
|             ></FieldDatePicker> | 
|           </QueryFilterItem> | 
|           <QueryFilterItem> | 
|             <SearchInput | 
|               v-model="extraParamState.keywords" | 
|               style="width: 300px" | 
|               placeholder="姓名/手机/身份证号/客户" | 
|               @on-click-search="getList" | 
|               @keyup.enter="getList()" | 
|             > | 
|             </SearchInput> | 
|           </QueryFilterItem> | 
|         </template> | 
|       </ProTableQueryFilterBar> | 
|       <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns"> | 
|       </ProTableV2> | 
|     </AppContainer> | 
|     <CPersonDetailDialog v-bind="dialogProps"></CPersonDetailDialog> | 
|   </LoadingLayout> | 
| </template> | 
|   | 
| <script setup lang="ts"> | 
| import { | 
|   ProTableQueryFilterBar, | 
|   OperationBtnType, | 
|   ProTableV2, | 
|   SearchInput, | 
|   LoadingLayout, | 
|   AppContainer, | 
|   QueryFilterItem, | 
|   useTable, | 
|   useFormDialog, | 
|   FieldRadio, | 
|   FieldDatePicker, | 
|   UploadUserFile, | 
| } from '@bole-core/components'; | 
| import { useAccess, useGlobalEventContext } from '@/hooks'; | 
| import CPersonDetailDialog from './components/CPersonDetailDialog.vue'; | 
| import { convertApi2FormUrlOnlyOne, format } from '@/utils'; | 
| import { ModelValueType } from 'element-plus'; | 
| import * as userServices from '@/services/api/user'; | 
|   | 
| defineOptions({ | 
|   name: 'CPersonManageList', | 
| }); | 
|   | 
| const operationBtnMap: Record<string, OperationBtnType> = { | 
|   detailBtn: { emits: { onClick: (role) => openDialog(role) } }, | 
| }; | 
|   | 
| const { checkSubModuleItemShow, column, operationBtns } = useAccess({ | 
|   operationBtnMap, | 
| }); | 
|   | 
| const eventContext = useGlobalEventContext(); | 
|   | 
| eventContext.addEvent('enterprise:add', () => { | 
|   getList(); | 
| }); | 
|   | 
| eventContext.addEvent('enterprise:edit', () => { | 
|   getList(paginationState.pageIndex); | 
| }); | 
|   | 
| const router = useRouter(); | 
|   | 
| 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.GetPersonalUserInfosQuery = { | 
|         pageModel: { | 
|           rows: pageSize, | 
|           page: pageIndex, | 
|           orderInput: extraParamState.orderInput, | 
|         }, | 
|         keywords: extraParamState.keywords, | 
|         hireTimeBegin: format(extraParamState.hireTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'), | 
|         hireTimeEnd: format(extraParamState.hireTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'), | 
|         signContractBegin: format( | 
|           extraParamState.signContractTime?.[0] ?? '', | 
|           'YYYY-MM-DD 00:00:00' | 
|         ), | 
|         signContractEnd: format(extraParamState.signContractTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'), | 
|         isReal: extraParamState.isReal, | 
|       }; | 
|   | 
|       let res = await userServices.getPersonalUserInfos(params, { | 
|         showLoading: !state.loading, | 
|       }); | 
|       return res; | 
|     } catch (error) { | 
|       console.log('error: ', error); | 
|     } | 
|   }, | 
|   { | 
|     defaultExtraParams: { | 
|       keywords: '', | 
|       orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], | 
|       hireTime: [] as unknown as ModelValueType, | 
|       signContractTime: [] as unknown as ModelValueType, | 
|       isReal: null as any as boolean, | 
|     }, | 
|     queryKey: ['userServices/getPersonalUserInfos'], | 
|     columnsRenderProps: { | 
|       gender: { type: 'enum', valueEnum: EnumUserGenderTextForPerson }, | 
|       isReal: { | 
|         formatter: (row: API.GetPersonalUserInfosQueryResultItem) => { | 
|           return row.isReal ? '已实名' : '未实名'; | 
|         }, | 
|       }, | 
|       hireTime: { type: 'date' }, | 
|       realTime: { type: 'date' }, | 
|       signContractTime: { type: 'date' }, | 
|       enterprises: { | 
|         formatter: (row: API.GetPersonalUserInfosQueryResultItem) => { | 
|           return row.enterprises ? row.enterprises.map((x) => x).join(',') : ''; | 
|         }, | 
|       }, | 
|     }, | 
|   } | 
| ); | 
|   | 
| async function openDialog(row?: API.GetPersonalUserInfosQueryResultItem) { | 
|   handleEdit({ | 
|     id: row.id ?? '', | 
|     name: row.name ?? '', | 
|     identity: row.identity ?? '', | 
|     contactPhoneNumber: row.contactPhoneNumber, | 
|     age: row.age ?? ('' as any as number), | 
|     identityImg: row.identityImg ? convertApi2FormUrlOnlyOne(row.identityImg) : [], | 
|     identityBackImg: row.identityBackImg ? convertApi2FormUrlOnlyOne(row.identityBackImg) : [], | 
|     userRealTime: row.realTime ?? '', | 
|   | 
|     gender: row.gender, | 
|     tabType: 'user', | 
|   }); | 
| } | 
|   | 
| const { dialogProps, handleEdit } = useFormDialog({ | 
|   defaultFormParams: { | 
|     id: '', | 
|     name: '', | 
|     identity: '', | 
|     contactPhoneNumber: '', | 
|     age: 0, | 
|     gender: '' as any as EnumUserGender, | 
|     identityImg: [] as UploadUserFile[], | 
|     identityBackImg: [] as UploadUserFile[], | 
|     userRealTime: '', | 
|   | 
|     tabType: '', | 
|   }, | 
| }); | 
| </script> |