| | |
| | | ></ProRadio> |
| | | </QueryMenuItem> |
| | | <QueryMenuItem title="身份"> |
| | | <ProRadio v-model="query.identity" :value-enum="identityList" show-all-btn></ProRadio> |
| | | <ProRadio |
| | | v-model="query.personalIdentityCode" |
| | | :value-enum="identityList" |
| | | show-all-btn |
| | | ></ProRadio> |
| | | </QueryMenuItem> |
| | | <QueryMenuItem> |
| | | <template #title> |
| | |
| | | const query = defineModel<{ |
| | | genderLimit: number | string; |
| | | age: number[]; |
| | | identity: string; |
| | | personalIdentityCode: string; |
| | | certificateType: string; |
| | | }>('query'); |
| | | |
| | |
| | | <template> |
| | | <QueryMenuView @close="handleReset" @confirm="emit('close')" cancelText="重置"> |
| | | <div class="home-query-position-menu-view"> |
| | | <PositionSelectView v-model="query.position" /> |
| | | <PositionSelectView v-model="query.userExpectJobs" /> |
| | | </div> |
| | | </QueryMenuView> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { QueryMenuView, QueryMenuItem, PositionSelectView } from '@12333/components'; |
| | | import { GenderText } from '@12333/constants'; |
| | | |
| | | defineOptions({ |
| | | name: 'HomeQueryPositionMenuView', |
| | |
| | | }>(); |
| | | |
| | | const query = defineModel<{ |
| | | position: string[]; |
| | | userExpectJobs: string[]; |
| | | }>('query'); |
| | | |
| | | const DefaultQuery = { |
| | | ...query.value, |
| | | userExpectJobs: [...query.value.userExpectJobs], |
| | | }; |
| | | |
| | | function handleReset() { |
| | |
| | | title-gutter="8" |
| | | title-scroll |
| | | > |
| | | <ProTabPane :title="`推荐`" :pane-key="HomeOrderType.Recommend"></ProTabPane> |
| | | <ProTabPane :title="`最新`" :pane-key="HomeOrderType.LastShelfTime"></ProTabPane> |
| | | <template #right> |
| | | <Menu> |
| | |
| | | :key="queryState.orderType" |
| | | > |
| | | <template #renderItem="{ item }"> |
| | | <FlexJobCard @click="goFlexJobDetail(item)" :showFooterLeft="false" /> |
| | | <FlexJobCard |
| | | :name="item.name" |
| | | :gender="item.gender" |
| | | :age="item.age" |
| | | :isReal="item.isReal" |
| | | :personalIdentityContent="item.personalIdentityContent" |
| | | :educationalBackgroundContent="item.educationalBackgroundContent" |
| | | :taskCount="item.taskCount" |
| | | :avatar="item.avatar" |
| | | :workExperience="item.workExperience" |
| | | :workSeniority="item.workSeniority" |
| | | @click="goFlexJobDetail(item)" |
| | | :showFooterLeft="false" |
| | | /> |
| | | </template> |
| | | </InfiniteLoading> |
| | | </PageLayoutWithBg> |
| | |
| | | EnumTaskReleaseStatus, |
| | | EnumUserGender, |
| | | } from '@12333/constants'; |
| | | import * as taskServices from '@12333/services/apiV2/task'; |
| | | import _ from 'lodash'; |
| | | import HomeQueryMenuView from './HomeQueryMenuView.vue'; |
| | | import HomeQueryPositionMenuView from './HomeQueryPositionMenuView.vue'; |
| | | import IconLocaltion from '@/assets/home/icon-localtion.png'; |
| | | import { setLocationCity } from '@/utils'; |
| | | import * as userResumeServices from '@12333/services/apiV2/userResume'; |
| | | |
| | | const { locationCity } = useUser(); |
| | | |
| | |
| | | const queryMenuState = reactive({ |
| | | genderLimit: '' as any as EnumUserGender, |
| | | age: [15, 65], |
| | | identity: '', |
| | | personalIdentityCode: '', |
| | | certificateType: '', |
| | | }); |
| | | |
| | | const queryPositionState = reactive({ |
| | | position: [] as string[], |
| | | userExpectJobs: [] as string[], |
| | | }); |
| | | |
| | | const queryState = reactive({ |
| | |
| | | |
| | | const { infiniteLoadingProps } = useInfiniteLoading( |
| | | ({ pageParam }) => { |
| | | let params: API.GetTaskInfosQuery = { |
| | | let params: API.GetUserResumesQuery = { |
| | | pageModel: { |
| | | rows: 20, |
| | | page: pageParam, |
| | | orderInput: [ |
| | | queryState.orderType === HomeOrderType.Recommend |
| | | ? { property: 'recommendStatus', order: EnumPagedListOrder.Desc } |
| | | : { property: 'createdTime', order: EnumPagedListOrder.Desc }, |
| | | ], |
| | | orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], |
| | | }, |
| | | // keywords: 'string', |
| | | // time: '2025-08-08T02:58:58.756Z', |
| | | // cityCode: 'string', |
| | | // settlementCycle: 10, |
| | | // benefitCodes: ['string'], |
| | | genderLimit: queryMenuState.genderLimit, |
| | | // status: 10, |
| | | releaseStatus: EnumTaskReleaseStatus.InProcess, |
| | | userExpectJobs: queryPositionState.userExpectJobs, |
| | | gender: queryMenuState.genderLimit, |
| | | personalIdentityCode: queryMenuState.personalIdentityCode, |
| | | // ageMin: queryMenuState.age[0], |
| | | // ageMax: queryMenuState.age[1], |
| | | userCredentials: queryMenuState.certificateType ? [queryMenuState.certificateType] : null, |
| | | }; |
| | | |
| | | return taskServices.getTaskInfos(params, { |
| | | return userResumeServices.getUserResumes(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | { |
| | | queryKey: ['taskServices/getTaskInfos', queryState, queryMenuState, queryPositionState], |
| | | queryKey: ['userResumeServices/getUserResumes', queryState, queryMenuState, queryPositionState], |
| | | } |
| | | ); |
| | | |
| | |
| | | selectPositionItem.value?.toggle?.(); |
| | | } |
| | | |
| | | function goFlexJobDetail(item: API.GetTaskInfosQueryResultItem) { |
| | | function goFlexJobDetail(item: API.GetUserResumesQueryResultItem) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.flexJobDetail}?id=${item.id}`, |
| | | }); |
| | |
| | | const router = Taro.useRouter(); |
| | | const taskId = router.params?.id ?? ''; |
| | | |
| | | const { |
| | | isLoading, |
| | | isError, |
| | | data: detail, |
| | | refetch, |
| | | } = useQuery({ |
| | | queryKey: ['flexWorkerServices/getOrdeForDetail', taskId], |
| | | queryFn: async () => { |
| | | return await flexWorkerServices.getOrdeForDetail( |
| | | { id: taskId }, |
| | | { |
| | | showLoading: false, |
| | | } |
| | | ); |
| | | }, |
| | | placeholderData: () => ({} as API.OrderInfoDto), |
| | | }); |
| | | const { isLoading, isError, data: detail, refetch } = useUserResume(); |
| | | |
| | | const { isCollapse, toggle } = useToggle(); |
| | | |
| | |
| | | import { MyTaskCard, ProTabs, ProTabPane, Calendar } from '@12333/components'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { EnumTaskCheckReceiveStatus } from '@12333/constants'; |
| | | import { useInfiniteLoading, useTaskList } from '@12333/hooks'; |
| | | import * as taskCheckReceiveServices from '@12333/services/apiV2/taskCheckReceive'; |
| | | import dayjs from 'dayjs'; |
| | | import { useCheckReceiveTasks } from '@12333/hooks'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const queryState = reactive({ |
| | | date: dayjs().toDate(), |
| | | checkReceiveStatus: EnumTaskCheckReceiveStatus.WaitSubmit, |
| | | }); |
| | | |
| | | const { infiniteLoadingProps } = useInfiniteLoading( |
| | | ({ pageParam }) => { |
| | | let params: API.GetCheckReceiveTasksQuery = { |
| | | pageModel: { |
| | | rows: 20, |
| | | page: pageParam, |
| | | }, |
| | | date: dayjs(queryState.date).format('YYYY-MM-DD'), |
| | | checkReceiveStatus: queryState.checkReceiveStatus, |
| | | }; |
| | | |
| | | return taskCheckReceiveServices.getCheckReceiveTasks(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | { |
| | | queryKey: ['taskCheckReceiveServices/getCheckReceiveTasks', queryState], |
| | | } |
| | | ); |
| | | const { infiniteLoadingProps, queryState } = useCheckReceiveTasks(); |
| | | |
| | | function goSubmitTaskDetail(item: API.GetCheckReceiveTasksQueryResultItem) { |
| | | Taro.navigateTo({ |
| | |
| | | const useSlots: typeof import('vue')['useSlots'] |
| | | const useSwitchTab: typeof import('./src/hooks/router')['useSwitchTab'] |
| | | const useTemplateRef: typeof import('vue')['useTemplateRef'] |
| | | const useUpdateResume: typeof import('./src/hooks/user')['useUpdateResume'] |
| | | const useUser: typeof import('./src/hooks/user')['useUser'] |
| | | const useUserResume: typeof import('./src/hooks/user')['useUserResume'] |
| | | const watch: typeof import('vue')['watch'] |
| | |
| | | readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']> |
| | | readonly useSwitchTab: UnwrapRef<typeof import('./src/hooks/router')['useSwitchTab']> |
| | | readonly useTemplateRef: UnwrapRef<typeof import('vue')['useTemplateRef']> |
| | | readonly useUpdateResume: UnwrapRef<typeof import('./src/hooks/user')['useUpdateResume']> |
| | | readonly useUser: UnwrapRef<typeof import('./src/hooks/user')['useUser']> |
| | | readonly useUserResume: UnwrapRef<typeof import('./src/hooks/user')['useUserResume']> |
| | | readonly watch: UnwrapRef<typeof import('vue')['watch']> |
| | |
| | | import { MaybeRef } from 'vue'; |
| | | import { useRefeshDidShow } from '@12333/hooks/infiniteLoading'; |
| | | import * as userResumeServices from '@12333/services/apiV2/userResume'; |
| | | import { useUserResume as useUserResumeHook } from '@12333/hooks'; |
| | | |
| | | export function useUser() { |
| | | const userStore = useUserStore(); |
| | |
| | | |
| | | export function useUserResume() { |
| | | const { userId } = useUser(); |
| | | |
| | | const { data, refetch } = useQuery({ |
| | | queryKey: ['userResumeServices/getUserResume', userId], |
| | | queryFn: async () => { |
| | | return await userResumeServices.getUserResume( |
| | | { userId: userId.value }, |
| | | { |
| | | showLoading: false, |
| | | } |
| | | ); |
| | | }, |
| | | placeholderData: () => ({} as API.GetUserResumeQueryResult), |
| | | enabled: computed(() => !!userId.value), |
| | | }); |
| | | |
| | | return { |
| | | userResumeInfo: data, |
| | | refetch, |
| | | }; |
| | | } |
| | | |
| | | export function useUpdateResume() { |
| | | const queryClient = useQueryClient(); |
| | | |
| | | const updateUserResumeCredentials = () => { |
| | | return queryClient.invalidateQueries({ |
| | | queryKey: ['userResumeServices/getUserResumeCredentials'], |
| | | }); |
| | | }; |
| | | |
| | | const updateUserResume = () => { |
| | | return queryClient.invalidateQueries({ |
| | | queryKey: ['userResumeServices/getUserResume'], |
| | | }); |
| | | }; |
| | | |
| | | return { |
| | | updateUserResumeCredentials, |
| | | updateUserResume, |
| | | }; |
| | | return useUserResumeHook({ userId }); |
| | | } |
| | |
| | | import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; |
| | | import { ChooseInputWithPicker, ChooseInputWithAreaPicker } from '@12333/components'; |
| | | import { convertApi2FormUrlOnlyOne, Message, setOSSLink } from '@12333/utils'; |
| | | import { useAreaTree, useDictionaryDataSelect } from '@12333/hooks'; |
| | | import { useAreaTree, useDictionaryDataSelect, useUpdateResume } from '@12333/hooks'; |
| | | import { AreaType, CategoryCode } from '@12333/constants'; |
| | | import * as userResumeServices from '@12333/services/apiV2/userResume'; |
| | | import Taro from '@tarojs/taro'; |
| | |
| | | import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; |
| | | import { useQuery, useQueryClient } from '@tanstack/vue-query'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { useDictionaryDataSelect } from '@12333/hooks'; |
| | | import { useDictionaryDataSelect, useUpdateResume } from '@12333/hooks'; |
| | | import { CategoryCode } from '@12333/constants'; |
| | | import { convertApi2FormUrlOnlyOne, Message, setOSSLink, FormValidator } from '@12333/utils'; |
| | | import dayjs from 'dayjs'; |
| | |
| | | <script setup lang="ts"> |
| | | import { goBack } from '@/utils'; |
| | | import { NumberInput } from '@12333/components'; |
| | | import { useUpdateResume } from '@12333/hooks'; |
| | | import * as userResumeServices from '@12333/services/apiV2/userResume'; |
| | | import { convertApiPath2Url, Message } from '@12333/utils'; |
| | | import { FileItem } from '@nutui/nutui-taro/dist/types/__VUE/uploader/type'; |
| | |
| | | } from '@12333/constants'; |
| | | import Taro from '@tarojs/taro'; |
| | | import * as userResumeServices from '@12333/services/apiV2/userResume'; |
| | | import { useDictionaryDataSelect } from '@12333/hooks'; |
| | | import { useDictionaryDataSelect, useUpdateResume } from '@12333/hooks'; |
| | | import { Message } from '@12333/utils'; |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | import { goBack } from '@/utils'; |
| | |
| | | |
| | | <script setup lang="ts"> |
| | | import { goBack } from '@/utils'; |
| | | import { useUpdateResume } from '@12333/hooks'; |
| | | import * as userResumeServices from '@12333/services/apiV2/userResume'; |
| | | import { Message } from '@12333/utils'; |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | |
| | | export * from './enterprise'; |
| | | export * from './task'; |
| | | export * from './taskUser'; |
| | | export * from './user'; |
New file |
| | |
| | | import { MaybeRef, computed, unref } from 'vue'; |
| | | import * as userResumeServices from '@12333/services/apiV2/userResume'; |
| | | import { useQuery, useQueryClient } from '@tanstack/vue-query'; |
| | | |
| | | type UseUserResumeOptions = { |
| | | userId: MaybeRef<string>; |
| | | }; |
| | | |
| | | export function useUserResume({ userId }: UseUserResumeOptions) { |
| | | const { data, refetch, isLoading, isError } = useQuery({ |
| | | queryKey: ['userResumeServices/getUserResume', userId], |
| | | queryFn: async () => { |
| | | return await userResumeServices.getUserResume( |
| | | { userId: unref(userId) }, |
| | | { |
| | | showLoading: false, |
| | | } |
| | | ); |
| | | }, |
| | | placeholderData: () => ({} as API.GetUserResumeQueryResult), |
| | | enabled: computed(() => !!unref(userId)), |
| | | }); |
| | | |
| | | return { |
| | | userResumeInfo: data, |
| | | refetch, |
| | | isLoading, |
| | | isError, |
| | | }; |
| | | } |
| | | |
| | | export function useUpdateResume() { |
| | | const queryClient = useQueryClient(); |
| | | |
| | | const updateUserResumeCredentials = () => { |
| | | return queryClient.invalidateQueries({ |
| | | queryKey: ['userResumeServices/getUserResumeCredentials'], |
| | | }); |
| | | }; |
| | | |
| | | const updateUserResume = () => { |
| | | return queryClient.invalidateQueries({ |
| | | queryKey: ['userResumeServices/getUserResume'], |
| | | }); |
| | | }; |
| | | |
| | | return { |
| | | updateUserResumeCredentials, |
| | | updateUserResume, |
| | | }; |
| | | } |
| | |
| | | }); |
| | | } |
| | | |
| | | /** 查询企业用户登录信息 GET /api/user/auth/getEnterpriseLoginInfo */ |
| | | export async function getEnterpriseLoginInfo( |
| | | // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) |
| | | params: API.APIgetEnterpriseLoginInfoParams, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<API.GetEnterpriseLoginInfoQueryResult>('/api/user/auth/getEnterpriseLoginInfo', { |
| | | method: 'GET', |
| | | params: { |
| | | ...params, |
| | | request: undefined, |
| | | ...params['request'], |
| | | }, |
| | | ...(options || {}), |
| | | }); |
| | | } |
| | | |
| | | /** 查询个人用户登录信息 GET /api/user/auth/getPersonalLoginInfo */ |
| | | export async function getPersonalLoginInfo( |
| | | // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) |
| | |
| | | import * as user from './user'; |
| | | import * as userResume from './userResume'; |
| | | import * as auth from './auth'; |
| | | import * as taskCheckReceive from './taskCheckReceive'; |
| | | import * as resource from './resource'; |
| | | import * as taskUser from './taskUser'; |
| | | import * as taskCheckReceive from './taskCheckReceive'; |
| | | import * as menu from './menu'; |
| | | export default { |
| | | enterpriseEmployee, |
| | |
| | | user, |
| | | userResume, |
| | | auth, |
| | | taskCheckReceive, |
| | | resource, |
| | | taskUser, |
| | | taskCheckReceive, |
| | | menu, |
| | | }; |
| | |
| | | } |
| | | |
| | | interface APIgetCheckReceiveTaskUserSubmitParams { |
| | | /** 提交Id */ |
| | | id?: string; |
| | | /** 提交Id(用于B端客户端) */ |
| | | submitId?: string; |
| | | /** 任务Id(用于C端小程序编辑提交 和日期一起传) */ |
| | | taskInfoId?: string; |
| | | /** 任务人员Id(用于B端小程序验收 和日期一起传) */ |
| | | taskInfoUserId?: string; |
| | | /** 日期(用于两个小程序 跟某一个Id一起传) */ |
| | | date?: string; |
| | | } |
| | | |
| | | interface APIgetCurrentLogierMenuParams { |
| | |
| | | id?: string; |
| | | /** 任务Id */ |
| | | taskInfoId?: string; |
| | | } |
| | | |
| | | interface APIgetEnterpriseLoginInfoParams { |
| | | /** 查询企业用户登录信息 */ |
| | | request?: GetEnterpriseLoginInfoQuery; |
| | | } |
| | | |
| | | interface APIgetEnterpriseParams { |
| | |
| | | ids?: string[]; |
| | | /** 是否收藏 */ |
| | | isCollect?: boolean; |
| | | } |
| | | |
| | | interface CollectUserResumeCommand { |
| | | /** 用户Id */ |
| | | id?: string; |
| | | /** 是否已收藏 */ |
| | | isCollected?: boolean; |
| | | } |
| | | |
| | | interface ContactUserResumeCommand { |
| | | /** 用户Id */ |
| | | id?: string; |
| | | } |
| | | |
| | | interface DeleteDictionaryCategoryCommand { |
| | |
| | | /** 错误码 */ |
| | | errorCode?: string; |
| | | data?: GetEnterpriseEmployeesQueryResult; |
| | | /** 执行成功 */ |
| | | success?: boolean; |
| | | /** 错误信息 */ |
| | | msg?: any; |
| | | /** 附加数据 */ |
| | | extras?: any; |
| | | /** 时间戳 */ |
| | | timestamp?: number; |
| | | } |
| | | |
| | | interface FriendlyResultGetEnterpriseLoginInfoQueryResult { |
| | | /** 跟踪Id */ |
| | | traceId?: string; |
| | | /** 状态码 */ |
| | | code?: number; |
| | | /** 错误码 */ |
| | | errorCode?: string; |
| | | data?: GetEnterpriseLoginInfoQueryResult; |
| | | /** 执行成功 */ |
| | | success?: boolean; |
| | | /** 错误信息 */ |
| | |
| | | interface GetCheckReceiveTasksQuery { |
| | | /** 日期(小程序-验收管理专用) */ |
| | | date?: string; |
| | | /** 关键字(姓名/手机/身份证号) */ |
| | | keywords?: string; |
| | | /** 验收日期-最早时间(B端客户端-验收管理专用) */ |
| | | checkReceiveTimeBegin?: string; |
| | | /** 验收日期-最晚时间(B端客户端-验收管理专用) */ |
| | |
| | | /** 服务费 */ |
| | | serviceFee?: number; |
| | | settlementCycle?: EnumSettlementCycle; |
| | | /** 发布时间 */ |
| | | createdTime?: string; |
| | | /** 任务开始时间 */ |
| | | beginTime?: string; |
| | | /** 任务结束时间 */ |
| | |
| | | } |
| | | |
| | | interface GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser { |
| | | /** 用户Id */ |
| | | id?: string; |
| | | /** 头像 */ |
| | | avatar?: string; |
| | | /** 姓名 */ |
| | |
| | | /** 是否实名 */ |
| | | isReal?: boolean; |
| | | realMethod?: EnumUserRealMethod; |
| | | /** 是否绑定银行卡 */ |
| | | isBindBankCard?: boolean; |
| | | } |
| | | |
| | | interface GetCheckReceiveTaskUserSubmitsQueryResultObjectDataTaskInfo { |
| | |
| | | enterpriseSignContractStatus?: EnumTaskUserSignContractStatus; |
| | | /** 企业签约时间 */ |
| | | enterpriseSignContractTime?: string; |
| | | } |
| | | |
| | | type GetEnterpriseLoginInfoQuery = Record<string, any>; |
| | | |
| | | interface GetEnterpriseLoginInfoQueryResult { |
| | | /** Id */ |
| | | id?: string; |
| | | /** 头像 */ |
| | | avatar?: string; |
| | | /** 姓名 */ |
| | | name?: string; |
| | | /** 企业全称 */ |
| | | enterpriseName?: string; |
| | | /** 角色 */ |
| | | roles?: string[]; |
| | | /** 是否实名 */ |
| | | isReal?: boolean; |
| | | /** 我的收藏 */ |
| | | collectUsers?: number; |
| | | /** 联系记录 */ |
| | | contactRecords?: number; |
| | | } |
| | | |
| | | interface GetEnterpriseQueryResult { |
| | |
| | | applyCount?: number; |
| | | /** 任务名称 */ |
| | | name?: string; |
| | | /** 任务单号 */ |
| | | code?: string; |
| | | billingMethod?: EnumBillingMethod; |
| | | /** 服务费 */ |
| | | serviceFee?: number; |
| | |
| | | checkReceiveStatus?: EnumTaskCheckReceiveStatus; |
| | | settlementStatus?: EnumTaskSettlementStatus; |
| | | recommendStatus?: EnumTaskRecommendStatus; |
| | | /** 创建时间 */ |
| | | /** 发布时间 */ |
| | | createdTime?: string; |
| | | } |
| | | |
| | |
| | | // @ts-ignore |
| | | import { request } from '@/utils/request'; |
| | | |
| | | /** 收藏灵工 POST /api/user/userResume/collectUserResume */ |
| | | export async function collectUserResume( |
| | | body: API.CollectUserResumeCommand, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<string>('/api/user/userResume/collectUserResume', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json-patch+json', |
| | | }, |
| | | data: body, |
| | | ...(options || {}), |
| | | }); |
| | | } |
| | | |
| | | /** 联系灵工 POST /api/user/userResume/contactUserResume */ |
| | | export async function contactUserResume( |
| | | body: API.ContactUserResumeCommand, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<string>('/api/user/userResume/contactUserResume', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json-patch+json', |
| | | }, |
| | | data: body, |
| | | ...(options || {}), |
| | | }); |
| | | } |
| | | |
| | | /** 删除用户简历-资格证书 DELETE /api/user/userResume/deleteUserResumeCredential */ |
| | | export async function deleteUserResumeCredential( |
| | | body: API.DeleteUserResumeCredentialCommand, |