From e3ae5da789eb35217a4a377cab0ff3241ceaf72a Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期一, 11 八月 2025 13:42:07 +0800
Subject: [PATCH] feat: 接口对接

---
 apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue     |   21 +++
 apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue |   35 ++---
 packages/components/src/Input/ChooseInputWithAreaPicker.vue                |    9 
 packages/hooks/area.ts                                                     |    5 
 apps/cMiniApp/src/hooks/user.ts                                            |    3 
 apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue        |  119 +++++++++++--------
 packages/services/apiV2/typings.d.ts                                       |   22 ++-
 apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue    |   71 ++++++-----
 apps/cMiniApp/src/stores/modules/user.ts                                   |   30 ++--
 apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue      |   14 +-
 10 files changed, 192 insertions(+), 137 deletions(-)

diff --git a/apps/cMiniApp/src/hooks/user.ts b/apps/cMiniApp/src/hooks/user.ts
index 1f9b943..d81560c 100644
--- a/apps/cMiniApp/src/hooks/user.ts
+++ b/apps/cMiniApp/src/hooks/user.ts
@@ -10,7 +10,7 @@
 export function useUser() {
   const userStore = useUserStore();
 
-  const { userDetail, userInfo, locationCity } = storeToRefs(userStore);
+  const { userDetail, userInfo, locationCity, userId } = storeToRefs(userStore);
 
   function updateUserInfo() {
     return userStore.getCurrentUserInfo();
@@ -43,6 +43,7 @@
     isCompanyAudited,
     isCertified,
     locationCity,
+    userId,
   };
 }
 
diff --git a/apps/cMiniApp/src/stores/modules/user.ts b/apps/cMiniApp/src/stores/modules/user.ts
index d49e137..21cf5ab 100644
--- a/apps/cMiniApp/src/stores/modules/user.ts
+++ b/apps/cMiniApp/src/stores/modules/user.ts
@@ -87,6 +87,10 @@
     accountInfo(): Partial<AccountInfo> {
       return getAccountInfoFromAccessToken(this.userInfo?.accessToken);
     },
+
+    userId: (state) => {
+      return state.userInfo?.id ?? '';
+    },
   },
   actions: {
     // 鎵嬫満鍙锋巿鏉僀ode鐧诲綍
@@ -188,19 +192,19 @@
     },
 
     async getCurrentUserInfo() {
-      try {
-        let res = await userServices.getUserInfo({ showLoading: false });
-        if (res) {
-          // res.frontStatus = getUserCertificationFrontStatusAdapter(
-          //   res.userCertificationStatus,
-          //   res.userCertificationAuditStatus
-          // );
-          // res.originalAvatarUrl = res.avatarUrl;
-          // res.avatarUrl = res.avatarUrl ? setOSSLink(res.avatarUrl) : DefaultAvatar;
-          // this.setUserDetail(res);
-          // this.firstGetUserDetail = false;
-        }
-      } catch (error) {}
+      // try {
+      //   let res = await userServices.getUserInfo({ showLoading: false });
+      //   if (res) {
+      //     res.frontStatus = getUserCertificationFrontStatusAdapter(
+      //       res.userCertificationStatus,
+      //       res.userCertificationAuditStatus
+      //     );
+      //     res.originalAvatarUrl = res.avatarUrl;
+      //     res.avatarUrl = res.avatarUrl ? setOSSLink(res.avatarUrl) : DefaultAvatar;
+      //     this.setUserDetail(res);
+      //     this.firstGetUserDetail = false;
+      //   }
+      // } catch (error) {}
     },
 
     setTokenAction(tokenInfo: API.LoginCommandCallback) {
diff --git a/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue
index 9bf9b84..61ef2e5 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue
@@ -1,32 +1,32 @@
 <template>
   <ContentScrollView :paddingH="false">
     <nut-form :model-value="form" ref="formRef" :rules="rules">
-      <nut-form-item label="澶村儚:" class="bole-form-item" prop="avatarUrl">
-        <Uploader v-model:file-list="form.avatarUrl" :maximum="1" class="bole-uploader"> </Uploader>
+      <nut-form-item label="澶村儚:" class="bole-form-item" prop="avatar">
+        <Uploader v-model:file-list="form.avatar" :maximum="1" class="bole-uploader"> </Uploader>
       </nut-form-item>
       <nut-form-item label="濮撳悕:" class="bole-form-item" prop="name">
-        <nut-input v-model.trim="form.name" placeholder="璇疯緭鍏ヤ紒涓氬悕绉�" />
+        <nut-input v-model.trim="form.name" placeholder="璇疯緭鍏ュ鍚�" />
       </nut-form-item>
-      <nut-form-item label="鎵嬫満鍙�:" class="bole-form-item" prop="phoneNumber" required>
-        <nut-input v-model.trim="form.phoneNumber" placeholder="璇疯緭鍏ユ墜鏈哄彿" type="text" />
+      <nut-form-item label="鎵嬫満鍙�:" class="bole-form-item" prop="contactPhoneNumber" required>
+        <nut-input v-model.trim="form.contactPhoneNumber" placeholder="璇疯緭鍏ユ墜鏈哄彿" type="text" />
       </nut-form-item>
-      <nut-form-item label="韬唤:" class="bole-form-item" prop="socialIdentity">
+      <nut-form-item label="韬唤:" class="bole-form-item" prop="personalIdentityCode">
         <ChooseInputWithPicker
-          v-model="form.socialIdentity"
+          v-model="form.personalIdentityCode"
           placeholder="璇烽�夋嫨韬唤"
-          :value-enum="IdentityTypeList"
+          :value-enum="identityList"
         />
       </nut-form-item>
-      <nut-form-item label="瀛﹀巻:" class="bole-form-item" prop="educationalLevel">
+      <nut-form-item label="瀛﹀巻:" class="bole-form-item" prop="educationalBackgroundCode">
         <ChooseInputWithPicker
-          v-model="form.educationalLevel"
+          v-model="form.educationalBackgroundCode"
           placeholder="璇烽�夋嫨瀛﹀巻"
-          :value-enum="EducationTypeList"
+          :value-enum="educationList"
         />
       </nut-form-item>
       <nut-form-item label="甯搁┗鍩庡競:" class="bole-form-item" prop="areaList">
         <ChooseInputWithAreaPicker
-          :columns="cityAreaTree"
+          :columns="completeAreaTree"
           v-model="form.areaList"
           placeholder="璇烽�夋嫨甯搁┗鍩庡競"
         ></ChooseInputWithAreaPicker>
@@ -41,11 +41,10 @@
 <script setup lang="ts">
 import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
 import { ChooseInputWithPicker, ChooseInputWithAreaPicker } from '@12333/components';
-import { TaskStatusText } from '@/constants';
 import { convertApi2FormUrlOnlyOne, Message, setOSSLink } from '@12333/utils';
-import { useAllAreaList, useArea, useSearchSettingType } from '@12333/hooks';
-import { Gender, SearchType } from '@12333/constants';
-import * as userResumeServices from '@12333/services/api/userResume';
+import { useArea, useDictionaryDataSelect } from '@12333/hooks';
+import { CategoryCode } from '@12333/constants';
+import * as userResumeServices from '@12333/services/apiV2/userResume';
 import Taro from '@tarojs/taro';
 import { useQuery } from '@tanstack/vue-query';
 
@@ -53,23 +52,24 @@
   name: 'InnerPage',
 });
 
-const { searchSettingTypeList: EducationTypeList } = useSearchSettingType({
-  searchType: SearchType.Education,
-});
-const { searchSettingTypeList: IdentityTypeList } = useSearchSettingType({
-  searchType: SearchType.Identity,
+const { dictionaryDataList: identityList } = useDictionaryDataSelect({
+  categoryCode: CategoryCode.Identity,
 });
 
-const { findAreaNameFromCode, cityAreaTree } = useAllAreaList();
+const { dictionaryDataList: educationList } = useDictionaryDataSelect({
+  categoryCode: CategoryCode.Education,
+});
+
+const { completeAreaTree } = useArea();
 
 const form = reactive({
-  avatarUrl: [],
+  avatar: [],
   name: '',
-  phoneNumber: '',
-  gender: Gender.Male,
-  socialIdentity: '',
-  educationalLevel: '',
-  areaList: [] as number[],
+  identity: '',
+  contactPhoneNumber: '',
+  personalIdentityCode: '',
+  educationalBackgroundCode: '',
+  areaList: [] as string[],
 });
 
 const {
@@ -78,29 +78,43 @@
   data: detail,
   refetch,
 } = useQuery({
-  queryKey: ['userResumeServices/getUserResumeBaseInfo'],
+  queryKey: ['userResumeServices/getUserResumePersonal'],
   queryFn: async () => {
-    return await userResumeServices.getUserResumeBaseInfo({
-      showLoading: false,
-    });
+    return await userResumeServices.getUserResumePersonal(
+      {},
+      {
+        showLoading: false,
+      }
+    );
   },
-  placeholderData: () => ({} as API.UserResumeBaseInfoOutput),
+  placeholderData: () => ({} as API.GetUserResumePersonalQueryResult),
   onSuccess(data) {
-    form.avatarUrl = convertApi2FormUrlOnlyOne(setOSSLink(data.avatarUrl));
+    form.avatar = convertApi2FormUrlOnlyOne(setOSSLink(data.avatar));
     form.name = data.name;
-    form.phoneNumber = data.phoneNumber;
-    form.gender = data.genderType;
-    form.socialIdentity = data.socialIdentity;
-    form.educationalLevel = data.educationalLevel;
-    form.areaList = [data.residentProvinceCode, data.residentCityCode];
+    form.identity = data.identity;
+    form.contactPhoneNumber = data.contactPhoneNumber;
+    form.personalIdentityCode = data.personalIdentityCode ?? '';
+    form.educationalBackgroundCode = data.educationalBackgroundCode ?? '';
+    form.areaList =
+      data.provinceCode && data.cityCode ? [data.provinceCode, data.cityCode] : ['', ''];
   },
 });
 
 const rules = reactive<FormRules>({
-  phoneNumber: [{ required: true, message: '璇疯緭鍏ユ墜鏈哄彿' }],
-  socialIdentity: [{ required: true, message: '璇烽�夋嫨韬唤' }],
-  educationalLevel: [{ required: true, message: '璇烽�夋嫨瀛﹀巻' }],
-  areaList: [{ required: true, message: '璇烽�夋嫨甯搁┗鍩庡競' }],
+  contactPhoneNumber: [{ required: true, message: '璇疯緭鍏ユ墜鏈哄彿' }],
+  personalIdentityCode: [{ required: true, message: '璇烽�夋嫨韬唤' }],
+  educationalBackgroundCode: [{ required: true, message: '璇烽�夋嫨瀛﹀巻' }],
+  areaList: [
+    {
+      required: true,
+      validator: () => {
+        if (!form.areaList.length) {
+          return Promise.reject('璇烽�夋嫨甯搁┗鍩庡競');
+        }
+        return Promise.resolve();
+      },
+    },
+  ],
 });
 const formRef = ref<any>(null);
 function handleConfirm() {
@@ -114,18 +128,17 @@
 
 async function confirm() {
   try {
-    let params: API.SaveUserResumeBaseInfoInput = {
+    let params: API.SaveUserResumePersonalCommand = {
       name: form.name,
-      avatarUrl: form.avatarUrl[0]?.path,
-      phoneNumber: form.phoneNumber,
-      educationalLevel: form.educationalLevel,
-      socialIdentity: form.socialIdentity,
-      residentProvinceCode: form.areaList[0],
-      residentProvinceName: findAreaNameFromCode(form.areaList[0]),
-      residentCityCode: form.areaList[1],
-      residentCityName: findAreaNameFromCode(form.areaList[1]),
+      identity: form.identity,
+      avatar: form.avatar[0]?.path,
+      contactPhoneNumber: form.contactPhoneNumber,
+      educationalBackgroundCode: form.educationalBackgroundCode,
+      personalIdentityCode: form.personalIdentityCode,
+      provinceCode: form.areaList[0],
+      cityCode: form.areaList[1],
     };
-    let res = await userResumeServices.saveUserResumeBaseInfo(params);
+    let res = await userResumeServices.saveUserResumePersonal(params);
     if (res) {
       Message.success('淇濆瓨鎴愬姛', {
         onClosed() {
diff --git a/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue
index 71a124b..5ca5b03 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue
@@ -6,12 +6,12 @@
     <div class="expect-position-page-footer">
       <div class="expect-position-select-wrapper" v-if="checkdList.length > 0">
         <div class="expect-position-select-item" v-for="(item, index) in checkdList" :key="index">
-          <div class="expect-position-select-item-text">{{ item.name }}</div>
+          <div class="expect-position-select-item-text">{{ item.label }}</div>
           <div class="expect-position-select-item-icon-wrapper">
             <Close
               :size="8"
               class="expect-position-select-item-icon"
-              @click="handleDelete(item.id)"
+              @click="handleDelete(item.value)"
             />
           </div>
         </div>
@@ -23,8 +23,8 @@
 
 <script setup lang="ts">
 import { PositionSelectView } from '@12333/components';
-import { SearchType } from '@12333/constants';
-import { useSearchSettingType } from '@12333/hooks';
+import { CategoryCode } from '@12333/constants';
+import { useDictionaryDataSelect } from '@12333/hooks';
 import { Close } from '@nutui/icons-vue-taro';
 import Taro from '@tarojs/taro';
 import { size } from 'lodash';
@@ -44,13 +44,13 @@
 
 const positionList = ref([]);
 
-const { searchSettingTypeList: position } = useSearchSettingType({
-  searchType: SearchType.Position,
+const { dictionaryDataList: position } = useDictionaryDataSelect({
+  categoryCode: CategoryCode.Position,
 });
 
 const checkdList = computed(() => {
   if (!positionList.value.length) return [];
-  return position.value.filter((x) => positionList.value.includes(x.id));
+  return position.value.filter((x) => positionList.value.includes(x.value));
 });
 
 function handleDelete(id: string) {
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue
index 9109faa..d8dc7b3 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue
@@ -19,6 +19,8 @@
 import { List, ListItem } from '@12333/components';
 import Taro from '@tarojs/taro';
 import { RouterPath } from '@/constants';
+import * as userResumeServices from '@12333/services/apiV2/userResume';
+import { useQuery } from '@tanstack/vue-query';
 
 defineOptions({
   name: 'InnerPage',
@@ -30,6 +32,25 @@
   workYear: '',
 });
 
+const {
+  isLoading,
+  isError,
+  data: detail,
+  refetch,
+} = useQuery({
+  queryKey: ['userResumeServices/getUserResumeCredentials'],
+  queryFn: async () => {
+    return await userResumeServices.getUserResumeCredentials(
+      {},
+      {
+        showLoading: false,
+      }
+    );
+  },
+  placeholderData: () => [] as API.GetUserResumeCredentialsQueryResultItem[],
+  onSuccess(data) {},
+});
+
 function handleAdd() {
   Taro.navigateTo({
     url: RouterPath.mineCertificateAddOrEdit,
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue
index 4526023..6faed82 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue
@@ -1,7 +1,7 @@
 <template>
   <ContentView>
     <nut-noticebar
-      text="涓汉绠�鍘嗗凡瀹屽杽50%锛屽畬鍠勭畝鍘嗗彲鎻愬崌褰曠敤鐜�"
+      :text="`涓汉绠�鍘嗗凡瀹屽杽${detail?.completeRate ?? 0}锛屽畬鍠勭畝鍘嗗彲鎻愬崌褰曠敤鐜嘸"
       :left-icon="false"
       background="transparent"
       close-mode
@@ -35,14 +35,18 @@
           <div class="mine-curriculum-info-item-left">
             <img :src="IconPhone" class="mine-curriculum-info-item-phone-icon" />
             <div class="mine-curriculum-info-item-phone">
-              {{ detail?.phoneNumber ?? '' }}
+              {{ detail?.contactPhoneNumber ?? '' }}
             </div>
           </div>
           <div class="mine-curriculum-info-item-detail">
             {{
-              `${detail?.age ?? ''}宀� | ${detail?.personalIdentityContent} | ${
-                detail?.educationalBackgroundContent
-              }`
+              `${detail?.age ? `${detail?.age}宀乣 : ''} 
+              ${detail?.personalIdentityContent ? `| ${detail?.personalIdentityContent}` : ''}
+                ${
+                  detail?.educationalBackgroundContent
+                    ? `| ${detail?.educationalBackgroundContent}`
+                    : ''
+                }`
             }}
           </div>
         </div>
@@ -103,7 +107,6 @@
 
 <script setup lang="ts">
 import { useUserStore } from '@/stores/modules/user';
-import { useIsLogin } from '@/hooks';
 import MineAgreementSignDetailItem from '../../mine/mineAgreementSignDetail/MineAgreementSignDetailItem.vue';
 import { List, ListItem, JobTagList, Avatar } from '@12333/components';
 import {
@@ -121,19 +124,13 @@
 import Taro from '@tarojs/taro';
 import { useQuery } from '@tanstack/vue-query';
 import { setOSSLink } from '@12333/utils';
-import { useEvent, useEventChannel } from 'senin-mini/hooks';
+import { useEvent } from 'senin-mini/hooks';
 
 defineOptions({
   name: 'InnerPage',
 });
 
-const { userDetail } = useUserStore();
-const isLogin = useIsLogin();
-const router = Taro.useRouter();
-
-const usrId = computed(() => userDetail?.userId ?? '');
-
-const eventChannel = useEventChannel();
+const { userId } = useUser();
 
 useEvent('updateResume', function (data: { content: boolean }) {
   if (data.content) {
@@ -143,9 +140,7 @@
   }
 });
 
-const jobTag = computed(
-  () => detail?.value?.userExpectJobs?.map((x) => x.personalIdentityContent) ?? []
-);
+const jobTag = computed(() => detail?.value?.userExpectJobs?.map((x) => x.expectJobContent) ?? []);
 
 const {
   isLoading,
@@ -153,17 +148,17 @@
   data: detail,
   refetch,
 } = useQuery({
-  queryKey: ['userResumeServices/getUserResume', usrId],
+  queryKey: ['userResumeServices/getUserResume', userId],
   queryFn: async () => {
     return await userResumeServices.getUserResume(
-      { userId: usrId.value },
+      { userId: userId.value },
       {
         showLoading: false,
       }
     );
   },
   placeholderData: () => ({} as API.GetUserResumeQueryResult),
-  enabled: !!usrId.value,
+  enabled: computed(() => !!userId.value),
 });
 
 function goPage(routeName: string) {
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue
index d40cd5c..4439660 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue
@@ -1,7 +1,12 @@
 <template>
   <ContentScrollView :paddingH="false">
     <nut-form :model-value="form" ref="formRef" :rules="rules">
-      <nut-form-item label="鏈熸湜宀椾綅:" class="bole-form-item" prop="jobIdList" label-position="top">
+      <nut-form-item
+        label="鏈熸湜宀椾綅:"
+        class="bole-form-item"
+        prop="userExpectJobs"
+        label-position="top"
+      >
         <CommonInputField class="job-common-input-field" @click="goExpectPosition">
           <JobTagList :jobTagList="jobTagList" />
         </CommonInputField>
@@ -10,14 +15,14 @@
         <ChooseInputWithPicker
           v-model="form.freeTime"
           placeholder="璇烽�夋嫨绌洪棽鏃堕棿"
-          :value-enum="UserResumeFreeTimeEnumText"
+          :value-enum="EnumPersonalFreeTimeText"
         />
       </nut-form-item>
       <nut-form-item label="姹傝亴鐘舵��:" class="bole-form-item" prop="jobSeekingStatus">
         <ChooseInputWithPicker
           v-model="form.jobSeekingStatus"
           placeholder="璇烽�夋嫨姹傝亴鐘舵��"
-          :value-enum="UserResumeJobSeekingStatusEnumText"
+          :value-enum="EnumPersonalJobSeekingStatusText"
         />
       </nut-form-item>
     </nut-form>
@@ -31,35 +36,37 @@
 import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
 import { ChooseInputWithPicker, JobTagList, CommonInputField } from '@12333/components';
 import {
-  UserResumeFreeTimeEnumText,
-  UserResumeJobSeekingStatusEnumText,
-  UserResumeFreeTimeEnum,
-  UserResumeJobSeekingStatusEnum,
-  SearchType,
+  CategoryCode,
+  EnumPersonalFreeTime,
+  EnumPersonalJobSeekingStatus,
+  EnumPersonalFreeTimeText,
+  EnumPersonalJobSeekingStatusText,
 } from '@12333/constants';
 import Taro from '@tarojs/taro';
-import * as userResumeServices from '@12333/services/api/userResume';
-import { useSearchSettingType } from '@12333/hooks';
+import * as userResumeServices from '@12333/services/apiV2/userResume';
+import { useDictionaryDataSelect } from '@12333/hooks';
 import { Message } from '@12333/utils';
-import { goBack } from '@/utils';
 import { useQuery } from '@tanstack/vue-query';
 
 defineOptions({
   name: 'InnerPage',
 });
 
-const { searchSettingTypeList: positionList } = useSearchSettingType({
-  searchType: SearchType.Position,
+const { dictionaryDataList: positionList } = useDictionaryDataSelect({
+  categoryCode: CategoryCode.Position,
 });
 
 const jobTagList = computed(() => {
-  return positionList.value?.filter((x) => form.jobIdList.includes(x.id)).map((x) => x.name) || [];
+  return (
+    positionList.value?.filter((x) => form.userExpectJobs.includes(x.value)).map((x) => x.label) ||
+    []
+  );
 });
 
 const form = reactive({
-  jobIdList: [] as string[],
-  freeTime: UserResumeFreeTimeEnum.NoLimit,
-  jobSeekingStatus: UserResumeJobSeekingStatusEnum.Activing,
+  userExpectJobs: [] as string[],
+  freeTime: EnumPersonalFreeTime.NoLimit,
+  jobSeekingStatus: EnumPersonalJobSeekingStatus.Active,
 });
 
 const {
@@ -68,26 +75,29 @@
   data: detail,
   refetch,
 } = useQuery({
-  queryKey: ['userResumeServices/getResumeExpectationJob'],
+  queryKey: ['userResumeServices/getUserResumeJobSeeking'],
   queryFn: async () => {
-    return await userResumeServices.getResumeExpectationJob({
-      showLoading: false,
-    });
+    return await userResumeServices.getUserResumeJobSeeking(
+      {},
+      {
+        showLoading: false,
+      }
+    );
   },
-  placeholderData: () => ({} as API.UserResumeExpectationJobOutput),
+  placeholderData: () => ({} as API.GetUserResumeJobSeekingQueryResult),
   onSuccess(data) {
-    form.jobIdList = data.jobIdList.map((x) => x.id);
+    form.userExpectJobs = data.userExpectJobs.map((x) => x.expectJobCode);
     form.freeTime = data.freeTime;
     form.jobSeekingStatus = data.jobSeekingStatus;
   },
 });
 
 const rules = reactive<FormRules>({
-  jobIdList: [
+  userExpectJobs: [
     {
       required: true,
       validator() {
-        if (form.jobIdList.length) return Promise.resolve(true);
+        if (form.userExpectJobs.length) return Promise.resolve(true);
         return Promise.reject('璇烽�夋嫨鏈熸湜宀椾綅');
       },
     },
@@ -107,12 +117,12 @@
 
 async function confirm() {
   try {
-    let params: API.SaveUserResumeExpectationJobInput = {
-      jobIdList: form.jobIdList,
+    let params: API.SaveUserResumeJobSeekingCommand = {
+      userExpectJobsExpectJobCode: form.userExpectJobs,
       freeTime: form.freeTime,
       jobSeekingStatus: form.jobSeekingStatus,
     };
-    let res = await userResumeServices.saveUserResumeExpectationJob(params);
+    let res = await userResumeServices.saveUserResumeJobSeeking(params);
     if (res) {
       Message.success('淇濆瓨鎴愬姛', {
         onClosed() {
@@ -133,11 +143,12 @@
     url: `${RouterPath.expectPosition}`,
     events: {
       addPosition: function (data: { content: string[] }) {
-        form.jobIdList = data.content?.length ? data.content : [];
+        form.userExpectJobs = data.content?.length ? data.content : [];
       },
     },
     success: function (res) {
-      res.eventChannel.emit('updatePosition', { content: form.jobIdList });
+      console.log('res: ', res);
+      res.eventChannel.emit('updatePosition', { content: form.userExpectJobs });
     },
   });
 }
diff --git a/packages/components/src/Input/ChooseInputWithAreaPicker.vue b/packages/components/src/Input/ChooseInputWithAreaPicker.vue
index 62b687f..b0cd598 100644
--- a/packages/components/src/Input/ChooseInputWithAreaPicker.vue
+++ b/packages/components/src/Input/ChooseInputWithAreaPicker.vue
@@ -18,7 +18,7 @@
 type Props = {
   fieldNames?: object;
   columns: API.AreaTreeNode[];
-  modelValue: Array<string | number>;
+  modelValue: Array<string>;
   title?: string;
 };
 
@@ -30,12 +30,11 @@
     children: 'children',
   }),
 });
-const inputValue = computed(() =>
-  props.modelValue.map((x) => findAreaNameFromCode(Number(x))).join(',')
-);
+console.log('props: ', props);
+const inputValue = computed(() => props.modelValue.map((x) => findAreaNameFromCode(x)).join(','));
 
 const emit = defineEmits<{
-  (e: 'update:modelValue', val: Array<string | number>): void;
+  (e: 'update:modelValue', val: Array<string>): void;
 }>();
 
 function handleOpen() {
diff --git a/packages/hooks/area.ts b/packages/hooks/area.ts
index ec57c26..f8bd597 100644
--- a/packages/hooks/area.ts
+++ b/packages/hooks/area.ts
@@ -12,10 +12,11 @@
     categoryCode: CategoryCode.Area,
     staleTime: Infinity,
     all: true,
-    maxDeep: AreaType.Area,
+    maxDeep: AreaType.City,
   });
 
   const areaList = computed(() => dictionaryDataList.value.map(convertDictionaryToAreaTreeNode));
+  console.log('areaList: ', areaList);
 
   const areaTree = computed(() => formatAreaListToTree(areaList.value));
 
@@ -43,7 +44,7 @@
   return {
     children: [],
     areaCode: item.data?.code,
-    parentCode: '',
+    parentCode: item.data?.field1,
     areaName: item.label,
     layer: Number(item.data?.field4),
     quickQuery: item.data?.field2,
diff --git a/packages/services/apiV2/typings.d.ts b/packages/services/apiV2/typings.d.ts
index 656be26..8f283be 100644
--- a/packages/services/apiV2/typings.d.ts
+++ b/packages/services/apiV2/typings.d.ts
@@ -1543,7 +1543,7 @@
     /** 浣撻噸 */
     weight?: number;
     /** 鐢熸椿鐓� */
-    photos?: string[];
+    photoImgs?: string[];
   }
 
   type GetUserResumeJobSeekingQuery = Record<string, any>;
@@ -1571,6 +1571,8 @@
     avatar?: string;
     /** 濮撳悕 */
     name?: string;
+    /** 鎵嬫満鍙� */
+    contactPhoneNumber?: string;
     /** 韬唤璇佸彿 */
     identity?: string;
     /** 韬唤缂栧彿 */
@@ -1594,12 +1596,14 @@
   interface GetUserResumeQueryResult {
     /** 鐢ㄦ埛Id */
     id?: string;
+    /** 瀹屽杽搴� */
+    completeRate?: number;
     /** 澶村儚 */
     avatar?: string;
     /** 濮撳悕 */
     name?: string;
     /** 鎵嬫満鍙� */
-    phoneNumber?: string;
+    contactPhoneNumber?: string;
     /** 韬唤璇佸彿 */
     identity?: string;
     gender?: EnumUserGender;
@@ -1665,10 +1669,12 @@
   }
 
   interface GetUserResumeQueryResultExpectJob {
+    /** 鏈熸湜宀椾綅涓婄骇缂栧彿 */
+    expectJobParentCode?: string;
     /** 鏈熸湜宀椾綅缂栧彿 */
-    personalIdentityCode?: string;
+    expectJobCode?: string;
     /** 鏈熸湜宀椾綅 */
-    personalIdentityContent?: string;
+    expectJobContent?: string;
   }
 
   type GetUserResumeWorkExperienceQuery = Record<string, any>;
@@ -1681,6 +1687,8 @@
   }
 
   interface LoginCommandCallback {
+    /** 鐢ㄦ埛Id */
+    id?: string;
     /** 鐢ㄦ埛璁块棶浠ょ墝 */
     accessToken?: string;
     /** 鍒锋柊浠ょ墝 */
@@ -2040,12 +2048,12 @@
     /** 浣撻噸 */
     weight?: number;
     /** 鐢熸椿鐓� */
-    photos?: string[];
+    photosImg?: string[];
   }
 
   interface SaveUserResumeJobSeekingCommand {
     /** 鐢ㄦ埛淇℃伅鏈熸湜宀椾綅 */
-    userExpectJobs: string[];
+    userExpectJobsExpectJobCode: string[];
     freeTime: EnumPersonalFreeTime;
     jobSeekingStatus: EnumPersonalJobSeekingStatus;
   }
@@ -2055,6 +2063,8 @@
     avatar?: string;
     /** 濮撳悕 */
     name?: string;
+    /** 鎵嬫満鍙� */
+    contactPhoneNumber?: string;
     /** 韬唤璇佸彿 */
     identity: string;
     /** 韬唤缂栧彿 */

--
Gitblit v1.9.1