From 4f0a665d8b0078defa95c6557ed46c681ca29fc6 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期四, 11 九月 2025 17:38:04 +0800
Subject: [PATCH] feat: 页面

---
 src/views/CPersonManage/components/CPersonDetailDialog.vue |  180 -----------------
 src/views/CPersonManage/components/SignDetailView.vue      |  127 ++++++++++++
 src/constants/task.ts                                      |   14 +
 .eslintrc-auto-import.json                                 |    2 
 auto-imports.d.ts                                          |    4 
 src/views/CPersonManage/components/StaffResumeView.vue     |  124 ++++++++++++
 src/views/CPersonManage/components/StaffDetailInfoView.vue |  112 +++++++++++
 7 files changed, 392 insertions(+), 171 deletions(-)

diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json
index 8db6b7f..74eb8be 100644
--- a/.eslintrc-auto-import.json
+++ b/.eslintrc-auto-import.json
@@ -56,7 +56,9 @@
     "EnumPagedListOrder": true,
     "EnumPayAccess": true,
     "EnumPersonalFreeTime": true,
+    "EnumPersonalFreeTimeText": true,
     "EnumPersonalJobSeekingStatus": true,
+    "EnumPersonalJobSeekingStatusText": true,
     "EnumPersonalRealMethod": true,
     "EnumPersonalUserRealStatus": true,
     "EnumRealAccess": true,
diff --git a/auto-imports.d.ts b/auto-imports.d.ts
index 7318f0d..69e51a1 100644
--- a/auto-imports.d.ts
+++ b/auto-imports.d.ts
@@ -58,7 +58,9 @@
   const EnumPagedListOrder: typeof import('./src/constants/apiEnum')['EnumPagedListOrder']
   const EnumPayAccess: typeof import('./src/constants/apiEnum')['EnumPayAccess']
   const EnumPersonalFreeTime: typeof import('./src/constants/apiEnum')['EnumPersonalFreeTime']
+  const EnumPersonalFreeTimeText: typeof import('./src/constants/task')['EnumPersonalFreeTimeText']
   const EnumPersonalJobSeekingStatus: typeof import('./src/constants/apiEnum')['EnumPersonalJobSeekingStatus']
+  const EnumPersonalJobSeekingStatusText: typeof import('./src/constants/task')['EnumPersonalJobSeekingStatusText']
   const EnumPersonalRealMethod: typeof import('./src/constants/apiEnum')['EnumPersonalRealMethod']
   const EnumPersonalUserRealStatus: typeof import('./src/constants/apiEnum')['EnumPersonalUserRealStatus']
   const EnumRealAccess: typeof import('./src/constants/apiEnum')['EnumRealAccess']
@@ -351,7 +353,9 @@
     readonly EnumPagedListOrder: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPagedListOrder']>
     readonly EnumPayAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPayAccess']>
     readonly EnumPersonalFreeTime: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPersonalFreeTime']>
+    readonly EnumPersonalFreeTimeText: UnwrapRef<typeof import('./src/constants/task')['EnumPersonalFreeTimeText']>
     readonly EnumPersonalJobSeekingStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPersonalJobSeekingStatus']>
+    readonly EnumPersonalJobSeekingStatusText: UnwrapRef<typeof import('./src/constants/task')['EnumPersonalJobSeekingStatusText']>
     readonly EnumPersonalRealMethod: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPersonalRealMethod']>
     readonly EnumPersonalUserRealStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumPersonalUserRealStatus']>
     readonly EnumRealAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumRealAccess']>
diff --git a/src/constants/task.ts b/src/constants/task.ts
index c5bad05..1025579 100644
--- a/src/constants/task.ts
+++ b/src/constants/task.ts
@@ -53,3 +53,17 @@
   [EnumTaskCheckReceiveStatus.WaitSubmit]: '寰呴獙鏀�',
   [EnumTaskCheckReceiveStatus.Completed]: '宸查獙鏀�',
 };
+
+export const EnumPersonalFreeTimeText = {
+  [EnumPersonalFreeTime.NoLimit]: '涓嶉檺',
+  [EnumPersonalFreeTime.WinterSummerVacations]: '瀵掓殤鍋�',
+  [EnumPersonalFreeTime.FestivalAndHoliday]: '鑺傚亣鏃�',
+  [EnumPersonalFreeTime.Weekend]: '鍛ㄥ叚鏃�',
+  [EnumPersonalFreeTime.Weekday]: '宸ヤ綔鏃�',
+};
+
+export const EnumPersonalJobSeekingStatusText = {
+  [EnumPersonalJobSeekingStatus.Active]: '绉瀬鎵句换鍔�',
+  [EnumPersonalJobSeekingStatus.Whatever]: '闅忎究鐪嬬湅',
+  [EnumPersonalJobSeekingStatus.Not]: '鏆傛椂涓嶆壘浠诲姟',
+};
diff --git a/src/views/CPersonManage/components/CPersonDetailDialog.vue b/src/views/CPersonManage/components/CPersonDetailDialog.vue
index cd5cb06..9c2baf9 100644
--- a/src/views/CPersonManage/components/CPersonDetailDialog.vue
+++ b/src/views/CPersonManage/components/CPersonDetailDialog.vue
@@ -2,49 +2,13 @@
   <ProDialog title="鐢宠璇︽儏" v-model="visible" width="1200px" destroy-on-close>
     <ProTabs v-model="form.tabType" hasBorder>
       <ProTabPane lazy label="浜哄憳璇︽儏" name="user">
-        <ProForm :model="form" ref="dialogForm" label-width="120px" is-read>
-          <ProFormItemV2 label="濮撳悕:" prop="name">
-            <ProFormText v-model.trim="form.name" />
-          </ProFormItemV2>
-          <ProFormItemV2 label="韬唤璇佸彿:" prop="identity">
-            <ProFormText v-model.trim="form.identity" />
-          </ProFormItemV2>
-          <ProFormItemV2 label="鎵嬫満鍙�:" prop="contactPhoneNumber">
-            <ProFormText v-model.trim="form.contactPhoneNumber" />
-          </ProFormItemV2>
-          <ProFormItemV2 label="鎬у埆:" prop="gender">
-            <ProFormRadio
-              v-model="form.gender"
-              :value-enum="EnumUserGenderTextForPerson"
-            ></ProFormRadio>
-          </ProFormItemV2>
-          <ProFormItemV2 label="骞撮緞:" prop="age">
-            <ProFormInputNumber v-model="form.age" unit="宀�"></ProFormInputNumber>
-          </ProFormItemV2>
-          <ProFormItemV2 label="韬唤璇佹闈�:" prop="identityImg">
-            <ProFormImageUpload v-model:file-url="form.identityImg" />
-          </ProFormItemV2>
-          <ProFormItemV2 label="韬唤璇佸弽闈�:" prop="identityBackImg">
-            <ProFormImageUpload v-model:file-url="form.identityBackImg" />
-          </ProFormItemV2>
-        </ProForm>
+        <!-- <StaffDetailInfoView :form="form" /> -->
+      </ProTabPane>
+      <ProTabPane lazy label="浜哄憳绠�鍘�" name="resume">
+        <!-- <StaffResumeView :form="form" /> -->
       </ProTabPane>
       <ProTabPane lazy label="绛剧害璇︽儏" name="sign">
-        <ProDialogTableWrapper :height="400">
-          <ProTableV2 v-bind="proTableProps" :columns="column" :show-operation-column="false">
-            <template #contractUrl="{ row }">
-              <PreviewBtn
-                v-if="
-                  row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
-                  row.contractUrl
-                "
-                :show-download-btn="false"
-                :url="setOSSLink(row.contractUrl)"
-              >
-              </PreviewBtn>
-            </template>
-          </ProTableV2>
-        </ProDialogTableWrapper>
+        <SignDetailView :form="form" />
       </ProTabPane>
     </ProTabs>
     <template #footer>
@@ -56,33 +20,11 @@
 </template>
 
 <script setup lang="ts">
-import {
-  ProDialog,
-  ProTableV2,
-  ProDialogTableWrapper,
-  ProTabs,
-  ProTabPane,
-  useTable,
-  ProForm,
-  ProFormItemV2,
-  ProFormText,
-  UploadUserFile,
-  ProFormImageUpload,
-  ProFormRadio,
-  ProFormInputNumber,
-  defineColumns,
-  PreviewBtn,
-} from '@bole-core/components';
+import { ProDialog, ProTabs, ProTabPane } from '@bole-core/components';
 import _ from 'lodash';
-import * as userServices from '@/services/api/user';
-import {
-  EnumUserGender,
-  EnumUserGenderTextForPerson,
-  EnumTaskUserHireStatusText,
-  EnumTaskUserSignContractStatusText,
-  EnumTaskUserSignContractStatus,
-} from '@/constants';
-import { setOSSLink } from '@/utils';
+import StaffDetailInfoView from './StaffDetailInfoView.vue';
+import StaffResumeView from './StaffResumeView.vue';
+import SignDetailView from './SignDetailView.vue';
 
 defineOptions({
   name: 'CPersonDetailDialog',
@@ -91,13 +33,6 @@
 type Form = {
   tabType: string;
   id: string;
-  name: string;
-  identity: string;
-  contactPhoneNumber: string;
-  age: number;
-  gender: EnumUserGender;
-  identityImg: UploadUserFile[];
-  identityBackImg: UploadUserFile[];
 };
 
 const form = defineModel<Form>('form');
@@ -106,103 +41,6 @@
 const emit = defineEmits<{
   (e: 'onCancel'): void;
 }>();
-
-const column = defineColumns([
-  {
-    id: '1',
-    enCode: 'enterpriseName',
-    name: '鎵�灞炲鎴�',
-  },
-  {
-    id: '2',
-    enCode: 'applyTime',
-    name: '鎶ュ悕鏃堕棿',
-  },
-  {
-    id: '3',
-    enCode: 'hireStatus',
-    name: '褰曠敤鐘舵��',
-  },
-  {
-    id: '4',
-    enCode: 'hireTime',
-    name: '褰曠敤鏃堕棿',
-  },
-  {
-    id: '5',
-    enCode: 'userSignContractStatus',
-    name: '绛剧害鐘舵��',
-  },
-  {
-    id: '6',
-    enCode: 'enterpriseSignContractStatus',
-    name: '浼佷笟绛剧害鐘舵��',
-  },
-  {
-    id: '7',
-    enCode: 'enterpriseSignContractTime',
-    name: '浼佷笟绛剧害鏃堕棿',
-  },
-  {
-    id: '8',
-    enCode: 'contractUrl',
-    name: '鐢靛瓙鍚堝悓',
-  },
-]);
-
-watch(
-  visible,
-  (val) => {
-    console.log('val: ', val);
-    if (val) {
-      getList();
-    }
-  },
-  {
-    immediate: true,
-  }
-);
-
-const {
-  getDataSource: getList,
-  proTableProps,
-  paginationState,
-  extraParamState,
-} = useTable(
-  async ({ pageIndex, pageSize }, extraParamState) => {
-    try {
-      let params: API.GetPersonalUserInfoSignContractsQuery = {
-        pageModel: {
-          rows: pageSize,
-          page: pageIndex,
-          orderInput: extraParamState.orderInput,
-        },
-        id: form.value.id,
-      };
-      let res = await userServices.getPersonalUserInfoSignContracts(params);
-      return res;
-    } catch (error) {}
-  },
-  {
-    defaultExtraParams: {
-      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
-    },
-    columnsRenderProps: {
-      applyTime: { type: 'date' },
-      hireTime: { type: 'date' },
-      enterpriseSignContractTime: { type: 'date' },
-      hireStatus: { type: 'enum', valueEnum: EnumTaskUserHireStatusText },
-      userSignContractStatus: { type: 'enum', valueEnum: EnumTaskUserSignContractStatusText },
-      enterpriseSignContractStatus: { type: 'enum', valueEnum: EnumTaskUserSignContractStatusText },
-      // contractUrl: {
-      //   type: 'url',
-      //   showDownloadBtn: false,
-      //   formatter: (row: API.GetPersonalUserInfoSignContractsQueryResultItem) =>
-      //     setOSSLink(row.contractUrl),
-      // },
-    },
-  }
-);
 </script>
 
 <style lang="scss" scoped>
diff --git a/src/views/CPersonManage/components/SignDetailView.vue b/src/views/CPersonManage/components/SignDetailView.vue
new file mode 100644
index 0000000..a4d2ddd
--- /dev/null
+++ b/src/views/CPersonManage/components/SignDetailView.vue
@@ -0,0 +1,127 @@
+<template>
+  <ProTableV2
+    v-bind="proTableProps"
+    :columns="column"
+    :show-operation-column="false"
+    :auto-height="false"
+    :table-props="{
+      height: '400px',
+    }"
+  >
+    <template #contractUrl="{ row }">
+      <PreviewBtn
+        v-if="row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass && row.contractUrl"
+        :show-download-btn="false"
+        :url="setOSSLink(row.contractUrl)"
+      >
+      </PreviewBtn>
+    </template>
+  </ProTableV2>
+</template>
+
+<script setup lang="ts">
+import { useTable, ProTableV2, defineColumns } from '@bole-core/components';
+import { setOSSLink } from '@/utils';
+import {
+  EnumTaskUserSignContractStatus,
+  EnumTaskUserHireStatusText,
+  EnumTaskUserSignContractStatusText,
+} from '@/constants';
+import * as userServices from '@/services/api/user';
+
+defineOptions({
+  name: 'SignDetailView',
+});
+
+type Form = {
+  id: string;
+};
+
+const form = defineModel<Form>('form');
+
+const isLoading = ref(false);
+
+const column = defineColumns([
+  {
+    id: '1',
+    enCode: 'enterpriseName',
+    name: '鎵�灞炲鎴�',
+  },
+  {
+    id: '2',
+    enCode: 'applyTime',
+    name: '鎶ュ悕鏃堕棿',
+  },
+  {
+    id: '3',
+    enCode: 'hireStatus',
+    name: '褰曠敤鐘舵��',
+  },
+  {
+    id: '4',
+    enCode: 'hireTime',
+    name: '褰曠敤鏃堕棿',
+  },
+  {
+    id: '5',
+    enCode: 'userSignContractStatus',
+    name: '绛剧害鐘舵��',
+  },
+  {
+    id: '6',
+    enCode: 'enterpriseSignContractStatus',
+    name: '浼佷笟绛剧害鐘舵��',
+  },
+  {
+    id: '7',
+    enCode: 'enterpriseSignContractTime',
+    name: '浼佷笟绛剧害鏃堕棿',
+  },
+  {
+    id: '8',
+    enCode: 'contractUrl',
+    name: '鐢靛瓙鍚堝悓',
+  },
+]);
+
+const {
+  getDataSource: getList,
+  proTableProps,
+  paginationState,
+  extraParamState,
+} = useTable(
+  async ({ pageIndex, pageSize }, extraParamState) => {
+    try {
+      let params: API.GetPersonalUserInfoSignContractsQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        id: form.value.id,
+      };
+      let res = await userServices.getPersonalUserInfoSignContracts(params);
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+    },
+    columnsRenderProps: {
+      applyTime: { type: 'date' },
+      hireTime: { type: 'date' },
+      enterpriseSignContractTime: { type: 'date' },
+      hireStatus: { type: 'enum', valueEnum: EnumTaskUserHireStatusText },
+      userSignContractStatus: { type: 'enum', valueEnum: EnumTaskUserSignContractStatusText },
+      enterpriseSignContractStatus: { type: 'enum', valueEnum: EnumTaskUserSignContractStatusText },
+    },
+  }
+);
+
+onMounted(async () => {
+  isLoading.value = true;
+  await getList();
+  isLoading.value = false;
+});
+</script>
diff --git a/src/views/CPersonManage/components/StaffDetailInfoView.vue b/src/views/CPersonManage/components/StaffDetailInfoView.vue
new file mode 100644
index 0000000..5dbe708
--- /dev/null
+++ b/src/views/CPersonManage/components/StaffDetailInfoView.vue
@@ -0,0 +1,112 @@
+<template>
+  <ProForm :model="detail" ref="dialogForm" label-width="120px" is-read>
+    <ProFormCol>
+      <ProFormColItem :span="12">
+        <ProFormItemV2 label="濮撳悕锛�" prop="name">
+          <ProFormText v-model.trim="detail.name"></ProFormText>
+        </ProFormItemV2>
+      </ProFormColItem>
+      <ProFormColItem :span="12">
+        <ProFormItemV2 label="瀹炲悕鏃堕棿锛�" prop="userRealTime">
+          <div>{{ format(detail.userRealTime, 'YYYY-MM-DD HH:mm') }}</div>
+        </ProFormItemV2>
+      </ProFormColItem>
+    </ProFormCol>
+    <ProFormCol>
+      <ProFormColItem :span="12">
+        <ProFormItemV2 label="韬唤璇佸彿锛�" prop="identity">
+          <ProFormText v-model.trim="detail.identity"></ProFormText>
+        </ProFormItemV2>
+      </ProFormColItem>
+    </ProFormCol>
+    <ProFormCol>
+      <ProFormColItem :span="12">
+        <ProFormItemV2 label="鎵嬫満鍙凤細" prop="contactPhoneNumber">
+          <ProFormText v-model.trim="detail.contactPhoneNumber"></ProFormText>
+        </ProFormItemV2>
+      </ProFormColItem>
+    </ProFormCol>
+    <ProFormCol>
+      <ProFormColItem :span="12">
+        <ProFormItemV2 label="鎬у埆锛�" prop="gender">
+          <ProFormRadio
+            v-model="detail.gender"
+            :value-enum="EnumUserGenderTextForPerson"
+          ></ProFormRadio>
+        </ProFormItemV2>
+      </ProFormColItem>
+    </ProFormCol>
+    <ProFormCol>
+      <ProFormColItem :span="12">
+        <ProFormItemV2 label="骞撮緞锛�" prop="age">
+          <ProFormInputNumber v-model="detail.age"> </ProFormInputNumber>
+        </ProFormItemV2>
+      </ProFormColItem>
+    </ProFormCol>
+    <ProFormItemV2 label="韬唤璇佹闈細" prop="identityImg">
+      <ProFormImageUpload v-model:file-url="detail.identityImg"> </ProFormImageUpload>
+    </ProFormItemV2>
+    <ProFormItemV2 label="韬唤璇佸弽闈細" prop="identityBackImg">
+      <ProFormImageUpload v-model:file-url="detail.identityBackImg"> </ProFormImageUpload>
+    </ProFormItemV2>
+  </ProForm>
+</template>
+
+<script setup lang="ts">
+import {
+  ProForm,
+  ProFormCol,
+  ProFormColItem,
+  ProFormItemV2,
+  ProFormText,
+  ProFormInputNumber,
+  ProFormImageUpload,
+  ProFormRadio,
+  UploadUserFile,
+} from '@bole-core/components';
+import { convertApi2FormUrlOnlyOne, format } from '@/utils';
+import { useQuery } from '@tanstack/vue-query';
+import { EnumUserGender, EnumUserGenderTextForPerson } from '@/constants';
+import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
+
+defineOptions({
+  name: 'StaffDetailInfoView',
+});
+
+type Form = {
+  id: string;
+};
+
+const form = defineModel<Form>('form');
+
+const detail = reactive({
+  name: '',
+  identity: '',
+  contactPhoneNumber: '',
+  gender: EnumUserGender.Male,
+  age: 0,
+  identityImg: [] as UploadUserFile[],
+  identityBackImg: [] as UploadUserFile[],
+  userRealTime: '',
+});
+
+const { isLoading } = useQuery({
+  queryKey: ['enterpriseEmployeeServices/getEnterpriseEmployee', form.value.id],
+  queryFn: async () => {
+    return await enterpriseEmployeeServices.getEnterpriseEmployee({ id: form.value.id });
+  },
+  onSuccess(data) {
+    detail.name = data.name;
+    detail.identity = data.identity;
+    detail.contactPhoneNumber = data.contactPhoneNumber;
+    detail.gender = data.gender;
+    detail.age = data.age ?? 0;
+    detail.identityImg = data.identityImg ? convertApi2FormUrlOnlyOne(data.identityImg) : [];
+    detail.identityBackImg = data.identityBackImg
+      ? convertApi2FormUrlOnlyOne(data.identityBackImg)
+      : [];
+    detail.userRealTime = data.userRealTime ?? '';
+  },
+  enabled: computed(() => !!form.value.id),
+});
+</script>
diff --git a/src/views/CPersonManage/components/StaffResumeView.vue b/src/views/CPersonManage/components/StaffResumeView.vue
new file mode 100644
index 0000000..e5658c3
--- /dev/null
+++ b/src/views/CPersonManage/components/StaffResumeView.vue
@@ -0,0 +1,124 @@
+<template>
+  <ProForm :model="detail" ref="dialogForm" label-width="120px" is-read>
+    <ProFormCol>
+      <ProFormColItem :span="12">
+        <ProFormItemV2 label="鏈熸湜宀椾綅锛�" prop="name">
+          <div>{{ detail.userExpectJobs }}</div>
+        </ProFormItemV2>
+      </ProFormColItem>
+    </ProFormCol>
+    <ProFormCol>
+      <ProFormColItem :span="12">
+        <ProFormItemV2 label="绌洪棽鏃堕棿锛�" prop="freeTime">
+          <ProFormRadio
+            v-model="detail.freeTime"
+            :value-enum="EnumPersonalFreeTimeText"
+          ></ProFormRadio>
+        </ProFormItemV2>
+      </ProFormColItem>
+    </ProFormCol>
+    <ProFormCol>
+      <ProFormColItem :span="12">
+        <ProFormItemV2 label="姹傝亴鐘舵�侊細" prop="jobSeekingStatus">
+          <ProFormRadio
+            v-model="detail.jobSeekingStatus"
+            :value-enum="EnumPersonalJobSeekingStatusText"
+          ></ProFormRadio>
+        </ProFormItemV2>
+      </ProFormColItem>
+    </ProFormCol>
+    <ProFormCol>
+      <ProFormColItem :span="12">
+        <ProFormItemV2 label="宸ヤ綔骞撮檺锛�" prop="workSeniority">
+          <ProFormText v-model="detail.workSeniority"></ProFormText>
+        </ProFormItemV2>
+      </ProFormColItem>
+    </ProFormCol>
+    <ProFormCol>
+      <ProFormColItem :span="12">
+        <ProFormItemV2 label="宸ヤ綔缁忛獙锛�" prop="workExperience">
+          <ProFormText v-model="detail.workExperience"></ProFormText>
+        </ProFormItemV2>
+      </ProFormColItem>
+    </ProFormCol>
+    <ProFormCol>
+      <ProFormColItem :span="12">
+        <ProFormItemV2 label="韬珮锛�" prop="height">
+          <ProFormInputNumber v-model="detail.height"></ProFormInputNumber>
+        </ProFormItemV2>
+      </ProFormColItem>
+    </ProFormCol>
+    <ProFormCol>
+      <ProFormColItem :span="12">
+        <ProFormItemV2 label="浣撻噸锛�" prop="weight">
+          <ProFormInputNumber v-model="detail.weight"></ProFormInputNumber>
+        </ProFormItemV2>
+      </ProFormColItem>
+    </ProFormCol>
+    <ProFormItemV2 label="涓汉鐓х墖锛�" prop="photos">
+      <ProFormImageUpload v-model:file-url="detail.photos"> </ProFormImageUpload>
+    </ProFormItemV2>
+  </ProForm>
+</template>
+
+<script setup lang="ts">
+import {
+  ProForm,
+  ProFormCol,
+  ProFormColItem,
+  ProFormItemV2,
+  ProFormText,
+  ProFormInputNumber,
+  ProFormRadio,
+  UploadUserFile,
+  ProFormImageUpload,
+} from '@bole-core/components';
+import { EnumPersonalFreeTimeText, EnumPersonalJobSeekingStatusText } from '@/constants';
+import { useQuery } from '@tanstack/vue-query';
+import * as userResumeServices from '@/services/api/userResume';
+import { convertApi2FormUrl } from '@/utils';
+
+defineOptions({
+  name: 'StaffResumeView',
+});
+
+type Form = {
+  id: string;
+};
+
+const form = defineModel<Form>('form');
+
+const detail = reactive({
+  userExpectJobs: '',
+  freeTime: '' as any as EnumPersonalFreeTime,
+  jobSeekingStatus: '' as any as EnumPersonalJobSeekingStatus,
+  workSeniority: '',
+  workExperience: '',
+  height: 0,
+  weight: 0,
+  photos: [] as UploadUserFile[],
+});
+
+const { isLoading } = useQuery({
+  queryKey: ['userResumeServices/getUserResume', form.value.id],
+  queryFn: async () => {
+    return await userResumeServices.getUserResume({ enterpriseEmployeeId: form.value.id });
+  },
+  onSuccess(data) {
+    detail.userExpectJobs =
+      data.userExpectJobs?.length > 0
+        ? data.userExpectJobs.map((x) => x.expectJobContent).join(',')
+        : '';
+    detail.freeTime = data.freeTime;
+    detail.jobSeekingStatus = data.jobSeekingStatus;
+    detail.workSeniority = data.workSeniority;
+    detail.workExperience = data.workExperience;
+    detail.height = data.height ?? 0;
+    detail.weight = data.weight ?? 0;
+    detail.photos = data.photos
+      ? data.photos.map((x) => convertApi2FormUrl(x))
+      : ([] as UploadUserFile[]);
+  },
+  enabled: computed(() => !!form.value.id),
+});
+</script>

--
Gitblit v1.9.1