| | |
| | | export function useUser() { |
| | | const userStore = useUserStore(); |
| | | |
| | | const { userDetail, userInfo, locationCity } = storeToRefs(userStore); |
| | | const { userDetail, userInfo, locationCity, userId } = storeToRefs(userStore); |
| | | |
| | | function updateUserInfo() { |
| | | return userStore.getCurrentUserInfo(); |
| | |
| | | isCompanyAudited, |
| | | isCertified, |
| | | locationCity, |
| | | userId, |
| | | }; |
| | | } |
| | | |
| | |
| | | accountInfo(): Partial<AccountInfo> { |
| | | return getAccountInfoFromAccessToken(this.userInfo?.accessToken); |
| | | }, |
| | | |
| | | userId: (state) => { |
| | | return state.userInfo?.id ?? ''; |
| | | }, |
| | | }, |
| | | actions: { |
| | | // 手机号授权Code登录 |
| | |
| | | }, |
| | | |
| | | 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) { |
| | |
| | | <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> |
| | |
| | | <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'; |
| | | |
| | |
| | | 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 { |
| | |
| | | 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() { |
| | |
| | | |
| | | 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() { |
| | |
| | | <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> |
| | |
| | | |
| | | <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'; |
| | |
| | | |
| | | 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) { |
| | |
| | | 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', |
| | |
| | | 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, |
| | |
| | | <template> |
| | | <ContentView> |
| | | <nut-noticebar |
| | | text="个人简历已完善50%,完善简历可提升录用率" |
| | | :text="`个人简历已完善${detail?.completeRate ?? 0},完善简历可提升录用率`" |
| | | :left-icon="false" |
| | | background="transparent" |
| | | close-mode |
| | |
| | | <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> |
| | |
| | | |
| | | <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 { |
| | |
| | | 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) { |
| | |
| | | } |
| | | }); |
| | | |
| | | const jobTag = computed( |
| | | () => detail?.value?.userExpectJobs?.map((x) => x.personalIdentityContent) ?? [] |
| | | ); |
| | | const jobTag = computed(() => detail?.value?.userExpectJobs?.map((x) => x.expectJobContent) ?? []); |
| | | |
| | | const { |
| | | isLoading, |
| | |
| | | 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) { |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | 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 { |
| | |
| | | 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('请选择期望岗位'); |
| | | }, |
| | | }, |
| | |
| | | |
| | | 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() { |
| | |
| | | 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 }); |
| | | }, |
| | | }); |
| | | } |
| | |
| | | type Props = { |
| | | fieldNames?: object; |
| | | columns: API.AreaTreeNode[]; |
| | | modelValue: Array<string | number>; |
| | | modelValue: Array<string>; |
| | | title?: string; |
| | | }; |
| | | |
| | |
| | | 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() { |
| | |
| | | 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)); |
| | | |
| | |
| | | return { |
| | | children: [], |
| | | areaCode: item.data?.code, |
| | | parentCode: '', |
| | | parentCode: item.data?.field1, |
| | | areaName: item.label, |
| | | layer: Number(item.data?.field4), |
| | | quickQuery: item.data?.field2, |
| | |
| | | /** 体重 */ |
| | | weight?: number; |
| | | /** 生活照 */ |
| | | photos?: string[]; |
| | | photoImgs?: string[]; |
| | | } |
| | | |
| | | type GetUserResumeJobSeekingQuery = Record<string, any>; |
| | |
| | | avatar?: string; |
| | | /** 姓名 */ |
| | | name?: string; |
| | | /** 手机号 */ |
| | | contactPhoneNumber?: string; |
| | | /** 身份证号 */ |
| | | identity?: string; |
| | | /** 身份编号 */ |
| | |
| | | interface GetUserResumeQueryResult { |
| | | /** 用户Id */ |
| | | id?: string; |
| | | /** 完善度 */ |
| | | completeRate?: number; |
| | | /** 头像 */ |
| | | avatar?: string; |
| | | /** 姓名 */ |
| | | name?: string; |
| | | /** 手机号 */ |
| | | phoneNumber?: string; |
| | | contactPhoneNumber?: string; |
| | | /** 身份证号 */ |
| | | identity?: string; |
| | | gender?: EnumUserGender; |
| | |
| | | } |
| | | |
| | | interface GetUserResumeQueryResultExpectJob { |
| | | /** 期望岗位上级编号 */ |
| | | expectJobParentCode?: string; |
| | | /** 期望岗位编号 */ |
| | | personalIdentityCode?: string; |
| | | expectJobCode?: string; |
| | | /** 期望岗位 */ |
| | | personalIdentityContent?: string; |
| | | expectJobContent?: string; |
| | | } |
| | | |
| | | type GetUserResumeWorkExperienceQuery = Record<string, any>; |
| | |
| | | } |
| | | |
| | | interface LoginCommandCallback { |
| | | /** 用户Id */ |
| | | id?: string; |
| | | /** 用户访问令牌 */ |
| | | accessToken?: string; |
| | | /** 刷新令牌 */ |
| | |
| | | /** 体重 */ |
| | | weight?: number; |
| | | /** 生活照 */ |
| | | photos?: string[]; |
| | | photosImg?: string[]; |
| | | } |
| | | |
| | | interface SaveUserResumeJobSeekingCommand { |
| | | /** 用户信息期望岗位 */ |
| | | userExpectJobs: string[]; |
| | | userExpectJobsExpectJobCode: string[]; |
| | | freeTime: EnumPersonalFreeTime; |
| | | jobSeekingStatus: EnumPersonalJobSeekingStatus; |
| | | } |
| | |
| | | avatar?: string; |
| | | /** 姓名 */ |
| | | name?: string; |
| | | /** 手机号 */ |
| | | contactPhoneNumber?: string; |
| | | /** 身份证号 */ |
| | | identity: string; |
| | | /** 身份编号 */ |