24个文件已修改
1个文件已添加
1 文件已重命名
| | |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | import * as flexWorkerServices from '@12333/services/api/FlexWorker'; |
| | | import { Message } from '@12333/utils'; |
| | | import { FlexTaskWorkerHireEnum } from '@/constants/task'; |
| | | import { FlexTaskWorkerHireEnum } from '@12333/constants/task'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | import { useInfiniteLoading } from '@12333/hooks'; |
| | | import { OrderInputType } from '@12333/constants'; |
| | | import * as flexWorkerServices from '@12333/services/api/FlexWorker'; |
| | | import { FlexWorkerEleSignEnum } from '@/constants/task'; |
| | | import { FlexWorkerEleSignEnum } from '@12333/constants/task'; |
| | | import Taro from '@tarojs/taro'; |
| | | |
| | | defineOptions({ |
| | |
| | | import * as flexWorkerServices from '@12333/services/api/FlexWorker'; |
| | | import IconLocaltion from '@/assets/flexJob/icon-localtion.png'; |
| | | import { TaskPrice, TaskDetailWelfareItem } from '@12333/components'; |
| | | import { SalaryTimeTypeEnumUnit, FlexTaskSettleTypeEnumText } from '@/constants/task'; |
| | | import { SalaryTimeTypeEnumUnit, FlexTaskSettleTypeEnumText } from '@12333/constants/task'; |
| | | import dayjs from 'dayjs'; |
| | | import { setOSSLink } from '@12333/utils'; |
| | | import { RectRight } from '@nutui/icons-vue-taro'; |
| | |
| | | <script setup lang="ts"> |
| | | import { OrderInputType } from '@12333/constants'; |
| | | import { RouterPath } from '@/constants'; |
| | | import { FlexTaskWorkerHireEnum } from '@/constants/task'; |
| | | import { FlexTaskWorkerHireEnum } from '@12333/constants/task'; |
| | | import { useInfiniteLoading } from '@12333/hooks'; |
| | | import * as flexWorkerServices from '@12333/services/api/FlexWorker'; |
| | | import { FlexJobCard } from '@12333/components'; |
| | |
| | | FlexTaskReleaseStatusEnum, |
| | | FlexTaskReleaseStatusEnumText, |
| | | SalaryTimeTypeEnumUnit, |
| | | } from '@/constants/task'; |
| | | } from '@12333/constants/task'; |
| | | import * as flexWorkerServices from '@12333/services/api/FlexWorker'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { Message } from '@12333/utils'; |
| | |
| | | <script setup lang="ts"> |
| | | import TaskCheckPersonalView from './TaskCheckPersonalView.vue'; |
| | | import { Colors, Gender } from '@12333/constants'; |
| | | import { FlexTaskCheckAcceptStatusEnum, FlexTaskCheckAcceptStatusEnumText } from '@/constants/task'; |
| | | import { |
| | | FlexTaskCheckAcceptStatusEnum, |
| | | FlexTaskCheckAcceptStatusEnumText, |
| | | } from '@12333/constants/task'; |
| | | |
| | | defineOptions({ |
| | | name: 'TaskCheckCard', |
| | |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { useUser } from '@/hooks'; |
| | | import { |
| | | FlexTaskSettleTypeEnum, |
| | | FlexTaskSettleTypeEnumText, |
| | | FlexTaskFeeTypeEnum, |
| | | FlexTaskFeeTypeEnumText, |
| | | SalaryTimeTypeEnumUnit, |
| | | } from '@/constants/task'; |
| | | import { useUser } from '@/hooks'; |
| | | } from '@12333/constants'; |
| | | import { |
| | | ChooseInputWithPicker, |
| | | ChooseInputWithDatePicker, |
| | |
| | | import { useInfiniteLoading } from '@12333/hooks'; |
| | | import { OrderInputType, Colors } from '@12333/constants'; |
| | | import * as flexWorkerServices from '@12333/services/api/FlexWorker'; |
| | | import { SalaryTimeTypeEnumUnit } from '@/constants/task'; |
| | | import { SalaryTimeTypeEnumUnit } from '@12333/constants/task'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | "./types/**/*.d.ts", |
| | | "./components.d.ts", |
| | | "./auto-imports.d.ts", |
| | | "../../types/api.d.ts" |
| | | "../../types/api.d.ts", |
| | | "../../packages/constants/task.ts" |
| | | ], |
| | | "exclude": ["node_modules", "dist"], |
| | | "references": [ |
| | |
| | | "query": "", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "", |
| | | "pathName": "subpackages/mine/mineCertificateAddOrEdit/mineCertificateAddOrEdit", |
| | | "query": "", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | } |
| | | ] |
| | | } |
| | |
| | | <QueryMenuView @close="handleReset" @confirm="emit('close')" cancelText="重置"> |
| | | <div class="home-query-menu-view"> |
| | | <QueryMenuItem title="结算方式"> |
| | | <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio> |
| | | <ProRadio |
| | | v-model="query.gender" |
| | | :value-enum="FlexTaskSettleTypeEnumText" |
| | | show-all-btn |
| | | ></ProRadio> |
| | | </QueryMenuItem> |
| | | <QueryMenuItem title="员工福利"> |
| | | <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio> |
| | | <ProRadio v-model="query.gender" :value-enum="WelfareList" show-all-btn></ProRadio> |
| | | </QueryMenuItem> |
| | | <QueryMenuItem title="性别要求"> |
| | | <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio> |
| | |
| | | |
| | | <script setup lang="ts"> |
| | | import { QueryMenuView, QueryMenuItem, ProRadio } from '@12333/components'; |
| | | import { GenderText } from '@12333/constants'; |
| | | import { GenderText, SearchType, FlexTaskSettleTypeEnumText } from '@12333/constants'; |
| | | import { useSearchSettingType } from '@12333/hooks'; |
| | | |
| | | defineOptions({ |
| | | name: 'HomeQueryMenuView', |
| | |
| | | |
| | | // const props = withDefaults(defineProps<Props>(), {}); |
| | | |
| | | const { searchSettingTypeList: WelfareList } = useSearchSettingType({ |
| | | searchType: SearchType.Welfare, |
| | | }); |
| | | |
| | | const emit = defineEmits<{ |
| | | (e: 'reset'): void; |
| | | (e: 'close'): void; |
| | |
| | | <nut-form-item label="姓名:" class="bole-form-item" prop="name"> |
| | | <nut-input v-model.trim="form.name" placeholder="请输入企业名称" /> |
| | | </nut-form-item> |
| | | <nut-form-item label="手机号:" class="bole-form-item" prop="phone" required> |
| | | <nut-input v-model.trim="form.phone" placeholder="请输入手机号" type="text" /> |
| | | <nut-form-item label="手机号:" class="bole-form-item" prop="phoneNumber" required> |
| | | <nut-input v-model.trim="form.phoneNumber" placeholder="请输入手机号" type="text" /> |
| | | </nut-form-item> |
| | | <nut-form-item label="身份:" class="bole-form-item" prop="socialIdentity"> |
| | | <ChooseInputWithPicker |
| | |
| | | :value-enum="EducationTypeList" |
| | | /> |
| | | </nut-form-item> |
| | | <nut-form-item label="常驻城市:" class="bole-form-item" prop="gender"> |
| | | <ChooseInputWithPicker |
| | | v-model="form.gender" |
| | | <nut-form-item label="常驻城市:" class="bole-form-item" prop="areaList"> |
| | | <ChooseInputWithAreaPicker |
| | | :columns="cityAreaTree" |
| | | v-model="form.areaList" |
| | | placeholder="请选择常驻城市" |
| | | :value-enum="TaskStatusText" |
| | | /> |
| | | ></ChooseInputWithAreaPicker> |
| | | </nut-form-item> |
| | | </nut-form> |
| | | </ContentScrollView> |
| | |
| | | |
| | | <script setup lang="ts"> |
| | | import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; |
| | | import { ChooseInputWithPicker } from '@12333/components'; |
| | | import { TaskStatusText, TaskStatus } from '@/constants'; |
| | | import { convertApi2FormUrlOnlyOne } from '@12333/utils'; |
| | | import { useUser } from '@/hooks'; |
| | | import { useSearchSettingType } from '@12333/hooks'; |
| | | import { SearchType } from '@12333/constants'; |
| | | 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 Taro from '@tarojs/taro'; |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | searchType: SearchType.Identity, |
| | | }); |
| | | |
| | | const { findAreaNameFromCode, cityAreaTree } = useAllAreaList(); |
| | | |
| | | const form = reactive({ |
| | | // avatarUrl: convertApi2FormUrlOnlyOne(userDetail.value?.originalAvatarUrl), |
| | | avatarUrl: [], |
| | | name: '', |
| | | phone: '', |
| | | gender: TaskStatus.All, |
| | | phoneNumber: '', |
| | | gender: Gender.Male, |
| | | socialIdentity: '', |
| | | educationalLevel: '', |
| | | areaList: [] as number[], |
| | | }); |
| | | |
| | | const { |
| | | isLoading, |
| | | isError, |
| | | data: detail, |
| | | refetch, |
| | | } = useQuery({ |
| | | queryKey: ['userResumeServices/getUserResumeBaseInfo'], |
| | | queryFn: async () => { |
| | | return await userResumeServices.getUserResumeBaseInfo({ |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | placeholderData: () => ({} as API.UserResumeBaseInfoOutput), |
| | | onSuccess(data) { |
| | | form.avatarUrl = convertApi2FormUrlOnlyOne(setOSSLink(data.avatarUrl)); |
| | | 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]; |
| | | }, |
| | | }); |
| | | |
| | | const rules = reactive<FormRules>({ |
| | | phone: [{ required: true, message: '请输入手机号' }], |
| | | phoneNumber: [{ required: true, message: '请输入手机号' }], |
| | | socialIdentity: [{ required: true, message: '请选择身份' }], |
| | | educationalLevel: [{ required: true, message: '请选择学历' }], |
| | | areaList: [{ required: true, message: '请选择常驻城市' }], |
| | |
| | | }); |
| | | } |
| | | |
| | | function confirm() {} |
| | | async function confirm() { |
| | | try { |
| | | let params: API.SaveUserResumeBaseInfoInput = { |
| | | 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]), |
| | | }; |
| | | let res = await userResumeServices.saveUserResumeBaseInfo(params); |
| | | if (res) { |
| | | Message.success('保存成功', { |
| | | onClosed() { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.mineCurriculumVitae}`, |
| | | success: function (res) { |
| | | res.eventChannel.emit('updateResume', { content: true }); |
| | | }, |
| | | }); |
| | | }, |
| | | }); |
| | | } |
| | | } catch (error) {} |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | |
| | | </ContentView> |
| | | <PageFooter> |
| | | <div class="expect-position-page-footer"> |
| | | <div class="expect-position-select-wrapper" v-if="positionList.length > 0"> |
| | | <div class="expect-position-select-item" v-for="(item, index) in positionList" :key="index"> |
| | | <div class="expect-position-select-item-text">{{ item }}</div> |
| | | <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-icon-wrapper"> |
| | | <Close :size="8" class="expect-position-select-item-icon" /> |
| | | <Close |
| | | :size="8" |
| | | class="expect-position-select-item-icon" |
| | | @click="handleDelete(item.id)" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <PageFooterBtn type="primary">保存</PageFooterBtn> |
| | | <PageFooterBtn type="primary" @click="handleConfirm">保存</PageFooterBtn> |
| | | </div> |
| | | </PageFooter> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { PositionSelectView } from '@12333/components'; |
| | | import { SearchType } from '@12333/constants'; |
| | | import { useSearchSettingType } from '@12333/hooks'; |
| | | import { Close } from '@nutui/icons-vue-taro'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { size } from 'lodash'; |
| | | import { useEvent, useEventChannel } from 'senin-mini/hooks'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const eventChannel = useEventChannel(); |
| | | |
| | | useEvent('updatePosition', function (data: { content: string[] }) { |
| | | if (data.content.length) { |
| | | positionList.value = [...data.content]; |
| | | } |
| | | }); |
| | | |
| | | const positionList = ref([]); |
| | | |
| | | const { searchSettingTypeList: position } = useSearchSettingType({ |
| | | searchType: SearchType.Position, |
| | | }); |
| | | |
| | | const checkdList = computed(() => { |
| | | if (!positionList.value.length) return []; |
| | | return position.value.filter((x) => positionList.value.includes(x.id)); |
| | | }); |
| | | |
| | | function handleDelete(id: string) { |
| | | positionList.value = positionList.value.filter((x) => x !== id); |
| | | } |
| | | |
| | | function handleConfirm() { |
| | | eventChannel.emit('addPosition', { |
| | | content: positionList.value, |
| | | }); |
| | | Taro.navigateBack({ delta: 1 }); |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | |
| | | class="mine-curriculum-noticebar" |
| | | /> |
| | | <div class="mine-curriculum-info-wrapper"> |
| | | <UserAvatar :size="60" class="mine-curriculum-avatar" /> |
| | | <Avatar |
| | | :size="60" |
| | | class="mine-curriculum-avatar" |
| | | :src="setOSSLink(detail?.resumeBaseInfo?.avatarUrl ?? '')" |
| | | ></Avatar> |
| | | <div class="mine-curriculum-info-content"> |
| | | <div class="mine-curriculum-info-item"> |
| | | <div class="mine-curriculum-info-item-left"> |
| | | <div class="mine-curriculum-info-item-name"> |
| | | {{ userStore.userDetail?.userName ?? '' }} |
| | | {{ detail?.resumeBaseInfo?.name ?? '' }} |
| | | </div> |
| | | <div class="mine-curriculum-info-item-gender"> |
| | | <div class="mine-curriculum-info-item-gender-dot">·</div> |
| | | <img v-if="1" :src="IconMale" class="mine-curriculum-info-item-gender-icon" /> |
| | | <img |
| | | v-if="detail?.resumeBaseInfo?.genderType === Gender.Male" |
| | | :src="IconMale" |
| | | class="mine-curriculum-info-item-gender-icon" |
| | | /> |
| | | <img v-else :src="IconFemale" class="mine-curriculum-info-item-gender-icon" /> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="mine-curriculum-info-item-left"> |
| | | <img :src="IconPhone" class="mine-curriculum-info-item-phone-icon" /> |
| | | <div class="mine-curriculum-info-item-phone"> |
| | | {{ userStore.userDetail?.phoneNumber ?? '' }} |
| | | {{ detail?.resumeBaseInfo?.phoneNumber ?? '' }} |
| | | </div> |
| | | </div> |
| | | <div class="mine-curriculum-info-item-detail"> |
| | | {{ '26岁 | 非学生 | 本科' }} |
| | | {{ |
| | | `${detail?.resumeBaseInfo?.age}岁 | ${detail?.resumeBaseInfo?.socialIdentityName} | ${detail?.resumeBaseInfo?.educationalLevelName}` |
| | | }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | <MineAgreementSignDetailItem label="期望岗位" class="mine-curriculum-intention-job"> |
| | | <template #detail> |
| | | <JobTagList /> |
| | | <JobTagList :jobTagList="jobTag" /> |
| | | </template> |
| | | </MineAgreementSignDetailItem> |
| | | <MineAgreementSignDetailItem label="空闲时间"> |
| | | <template #detail> |
| | | <div class="mine-curriculum-intention-bold">不限</div> |
| | | <div class="mine-curriculum-intention-bold"> |
| | | {{ UserResumeFreeTimeEnumText[detail?.resumeExpectationJob?.freeTime] }} |
| | | </div> |
| | | </template> |
| | | </MineAgreementSignDetailItem> |
| | | <MineAgreementSignDetailItem label="求职状态"> |
| | | <template #detail> |
| | | <div class="mine-curriculum-intention-bold">积极找工作</div> |
| | | <div class="mine-curriculum-intention-bold"> |
| | | {{ |
| | | UserResumeJobSeekingStatusEnumText[detail?.resumeExpectationJob?.jobSeekingStatus] |
| | | }} |
| | | </div> |
| | | </template> |
| | | </MineAgreementSignDetailItem> |
| | | </div> |
| | |
| | | import { useUserStore } from '@/stores/modules/user'; |
| | | import { useIsLogin } from '@/hooks'; |
| | | import MineAgreementSignDetailItem from '../../mine/mineAgreementSignDetail/MineAgreementSignDetailItem.vue'; |
| | | import { List, ListItem, JobTagList } from '@12333/components'; |
| | | import { List, ListItem, JobTagList, Avatar } from '@12333/components'; |
| | | import { |
| | | Gender, |
| | | UserResumeFreeTimeEnumText, |
| | | UserResumeJobSeekingStatusEnumText, |
| | | } from '@12333/constants'; |
| | | import { RouterPath } from '@/constants'; |
| | | import * as userResumeServices from '@12333/services/api/userResume'; |
| | | import IconArrow from '@/assets/setting/icon-arrow.png'; |
| | |
| | | import IconPhone from '@/assets/mine/icon-phone.png'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | import { setOSSLink } from '@12333/utils'; |
| | | import { useEvent, useEventChannel } from 'senin-mini/hooks'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | |
| | | const taskId = router.params?.taskId; |
| | | |
| | | const eventChannel = useEventChannel(); |
| | | |
| | | useEvent('updateResume', function (data: { content: boolean }) { |
| | | if (data.content) { |
| | | refetch({ |
| | | type: 'inactive', |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | const jobTag = computed( |
| | | () => detail?.value?.resumeExpectationJob?.jobIdList?.map((x) => x.name) ?? [] |
| | | ); |
| | | |
| | | const { |
| | | isLoading, |
| | | isError, |
| | |
| | | <template> |
| | | <ContentScrollView :paddingH="false"> |
| | | <nut-form :model-value="form" ref="formRef" :rules="rules"> |
| | | <nut-form-item label="期望岗位:" class="bole-form-item" prop="job" label-position="top"> |
| | | <!-- <ChooseInputWithPicker |
| | | v-model="form.job" |
| | | placeholder="请选择期望岗位" |
| | | :value-enum="TaskStatusText" |
| | | /> --> |
| | | <nut-form-item label="期望岗位:" class="bole-form-item" prop="jobIdList" label-position="top"> |
| | | <CommonInputField class="job-common-input-field" @click="goExpectPosition"> |
| | | <JobTagList /> |
| | | <JobTagList :jobTagList="jobTagList" /> |
| | | </CommonInputField> |
| | | </nut-form-item> |
| | | <nut-form-item label="空闲时间:" class="bole-form-item" prop="job"> |
| | | <nut-form-item label="空闲时间:" class="bole-form-item" prop="freeTime"> |
| | | <ChooseInputWithPicker |
| | | v-model="form.job" |
| | | v-model="form.freeTime" |
| | | placeholder="请选择空闲时间" |
| | | :value-enum="TaskStatusText" |
| | | :value-enum="UserResumeFreeTimeEnumText" |
| | | /> |
| | | </nut-form-item> |
| | | <nut-form-item label="求职状态:" class="bole-form-item" prop="job"> |
| | | <nut-form-item label="求职状态:" class="bole-form-item" prop="jobSeekingStatus"> |
| | | <ChooseInputWithPicker |
| | | v-model="form.job" |
| | | v-model="form.jobSeekingStatus" |
| | | placeholder="请选择求职状态" |
| | | :value-enum="TaskStatusText" |
| | | :value-enum="UserResumeJobSeekingStatusEnumText" |
| | | /> |
| | | </nut-form-item> |
| | | </nut-form> |
| | |
| | | <script setup lang="ts"> |
| | | import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; |
| | | import { ChooseInputWithPicker, JobTagList, CommonInputField } from '@12333/components'; |
| | | import { TaskStatusText, TaskStatus } from '@/constants'; |
| | | import { useUser } from '@/hooks'; |
| | | import { |
| | | UserResumeFreeTimeEnumText, |
| | | UserResumeJobSeekingStatusEnumText, |
| | | UserResumeFreeTimeEnum, |
| | | UserResumeJobSeekingStatusEnum, |
| | | SearchType, |
| | | } from '@12333/constants'; |
| | | import Taro from '@tarojs/taro'; |
| | | import * as userResumeServices from '@12333/services/api/userResume'; |
| | | import { useSearchSettingType } from '@12333/hooks'; |
| | | import { Message } from '@12333/utils'; |
| | | import { goBack } from '@/utils'; |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const { userDetail } = useUser(); |
| | | const { searchSettingTypeList: positionList } = useSearchSettingType({ |
| | | searchType: SearchType.Position, |
| | | }); |
| | | |
| | | const jobTagList = computed(() => { |
| | | return positionList.value?.filter((x) => form.jobIdList.includes(x.id)).map((x) => x.name) || []; |
| | | }); |
| | | |
| | | const form = reactive({ |
| | | job: TaskStatus.All, |
| | | jobIdList: [] as string[], |
| | | freeTime: UserResumeFreeTimeEnum.NoLimit, |
| | | jobSeekingStatus: UserResumeJobSeekingStatusEnum.Activing, |
| | | }); |
| | | |
| | | const { |
| | | isLoading, |
| | | isError, |
| | | data: detail, |
| | | refetch, |
| | | } = useQuery({ |
| | | queryKey: ['userResumeServices/getResumeExpectationJob'], |
| | | queryFn: async () => { |
| | | return await userResumeServices.getResumeExpectationJob({ |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | placeholderData: () => ({} as API.UserResumeExpectationJobOutput), |
| | | onSuccess(data) { |
| | | form.jobIdList = data.jobIdList.map((x) => x.id); |
| | | form.freeTime = data.freeTime; |
| | | form.jobSeekingStatus = data.jobSeekingStatus; |
| | | }, |
| | | }); |
| | | |
| | | const rules = reactive<FormRules>({ |
| | | job: [{ required: true, message: '请选择' }], |
| | | jobIdList: [ |
| | | { |
| | | required: true, |
| | | validator() { |
| | | if (form.jobIdList.length) return Promise.resolve(true); |
| | | return Promise.reject('请选择期望岗位'); |
| | | }, |
| | | }, |
| | | ], |
| | | freeTime: [{ required: true, message: '请选择空闲时间' }], |
| | | jobSeekingStatus: [{ required: true, message: '请选择求职状态' }], |
| | | }); |
| | | const formRef = ref<any>(null); |
| | | function handleConfirm() { |
| | |
| | | }); |
| | | } |
| | | |
| | | function confirm() {} |
| | | async function confirm() { |
| | | try { |
| | | let params: API.SaveUserResumeExpectationJobInput = { |
| | | jobIdList: form.jobIdList, |
| | | freeTime: form.freeTime, |
| | | jobSeekingStatus: form.jobSeekingStatus, |
| | | }; |
| | | let res = await userResumeServices.saveUserResumeExpectationJob(params); |
| | | if (res) { |
| | | Message.success('保存成功', { |
| | | onClosed() { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.mineCurriculumVitae}`, |
| | | success: function (res) { |
| | | res.eventChannel.emit('updateResume', { content: true }); |
| | | }, |
| | | }); |
| | | }, |
| | | }); |
| | | } |
| | | } catch (error) {} |
| | | } |
| | | |
| | | function goExpectPosition() { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.expectPosition}`, |
| | | events: { |
| | | addPosition: function (data: { content: string[] }) { |
| | | form.jobIdList = data.content?.length ? data.content : []; |
| | | }, |
| | | }, |
| | | success: function (res) { |
| | | res.eventChannel.emit('updatePosition', { content: form.jobIdList }); |
| | | }, |
| | | }); |
| | | } |
| | | </script> |
| | |
| | | <div class="nut-category-pane__cateListRight"> |
| | | <div v-for="(item, index) in categoryChild" :key="index"> |
| | | <div class="nut-category-pane__childItemList"> |
| | | <div class="bole-category-pane__childItem" @click="onChange(item.value)"> |
| | | <div class="bole-category-pane__childItem" @click="onChange(item.id)"> |
| | | <div |
| | | class="bole-category-pane-item-wrapper" |
| | | :class="{ active: modelValue.includes(item.value) }" |
| | | :class="{ active: modelValue.includes(item.id) }" |
| | | > |
| | | <div class="bole-category-pane-item-name">{{ item.name }}</div> |
| | | <Check :size="16" class="bole-category-pane-item-icon" /> |
| | |
| | | |
| | | type ChildType = { |
| | | name?: string; |
| | | value?: string | number; |
| | | id?: string | number; |
| | | [key: string]: any; |
| | | }; |
| | | |
| | |
| | | <template> |
| | | <Category :category="provinceList" @change="change" class="position-select-view"> |
| | | <Category :category="industryList" @change="change" class="position-select-view"> |
| | | <CategoryPane :max="max" :categoryChild="categoryChild" :multiple="multiple" v-model="model"> |
| | | </CategoryPane> |
| | | </Category> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { useAllAreaList } from '@12333/hooks'; |
| | | import { useAllSearchSettingList, useSearchSettingType } from '@12333/hooks'; |
| | | import Category from './Category.vue'; |
| | | import CategoryPane from './CategoryPane.vue'; |
| | | import { reactive, computed, watch } from 'vue'; |
| | | import { SearchType } from '@12333/constants'; |
| | | |
| | | defineOptions({ |
| | | name: 'PositionSelectView', |
| | |
| | | multiple: true, |
| | | }); |
| | | |
| | | const model = defineModel<number[]>(); |
| | | const model = defineModel<string[]>(); |
| | | |
| | | const state = reactive({ |
| | | provinceIndex: 0, |
| | | }); |
| | | |
| | | const { areaTreeList } = useAllAreaList(); |
| | | |
| | | const provinceList = computed(() => areaTreeList.value.map((x) => ({ ...x, name: x.areaName }))); |
| | | const { allSearchSettingList: positionList } = useAllSearchSettingList({ |
| | | searchType: SearchType.Position, |
| | | }); |
| | | const { searchSettingTypeList: industryList } = useSearchSettingType({ |
| | | searchType: SearchType.IndustryCategory, |
| | | }); |
| | | |
| | | const categoryChild = computed(() => { |
| | | if (!provinceList.value.length) { |
| | | if (!industryList.value.length) { |
| | | return []; |
| | | } |
| | | return provinceList.value[state.provinceIndex].children.map((x) => ({ |
| | | ...x, |
| | | name: x.areaName, |
| | | value: x.areaCode, |
| | | })); |
| | | return positionList.value?.filter( |
| | | (x) => x.parentName === industryList.value[state.provinceIndex].name |
| | | ); |
| | | }); |
| | | |
| | | const change = (index: number) => { |
| | |
| | | <template> |
| | | <div class="mine-curriculum-intention-job-content"> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div class="mine-curriculum-intention-job-item">客房服务员</div> |
| | | <div v-for="item in jobTagList" :key="item" class="mine-curriculum-intention-job-item"> |
| | | {{ item }} |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | name: 'JobTagList', |
| | | }); |
| | | |
| | | // type Props = {}; |
| | | type Props = { |
| | | jobTagList?: string[]; |
| | | }; |
| | | |
| | | // const props = withDefaults(defineProps<Props>(), {}); |
| | | const props = withDefaults(defineProps<Props>(), {}); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | |
| | | export * from './oss'; |
| | | export * from './authenticationV2'; |
| | | export * from './parkOrHR'; |
| | | export * from './task'; |
File was renamed from apps/bMiniApp/src/constants/task.ts |
| | |
| | | [FlexWorkerEleSignEnum.HasSign]: '已签约', |
| | | [FlexWorkerEleSignEnum.CancelSign]: '已解约', |
| | | }; |
| | | |
| | | export enum UserResumeFreeTimeEnum { |
| | | /** |
| | | * 不限 |
| | | */ |
| | | NoLimit = 1, |
| | | /** |
| | | * 寒暑假 |
| | | */ |
| | | WinterAndSummerVacation = 2, |
| | | /** |
| | | * 节假日 |
| | | */ |
| | | Holiday = 3, |
| | | /** |
| | | * 周六日 |
| | | */ |
| | | Weekend = 4, |
| | | /** |
| | | * 工作日 |
| | | */ |
| | | Weekday = 5, |
| | | } |
| | | |
| | | export const UserResumeFreeTimeEnumText = { |
| | | [UserResumeFreeTimeEnum.NoLimit]: '不限', |
| | | [UserResumeFreeTimeEnum.WinterAndSummerVacation]: '寒暑假', |
| | | [UserResumeFreeTimeEnum.Holiday]: '节假日', |
| | | [UserResumeFreeTimeEnum.Weekend]: '周六日', |
| | | [UserResumeFreeTimeEnum.Weekday]: '工作日', |
| | | }; |
| | | |
| | | export enum UserResumeJobSeekingStatusEnum { |
| | | /** |
| | | * 积极找工作 |
| | | */ |
| | | Activing = 1, |
| | | /** |
| | | * 随便看看 |
| | | */ |
| | | JustLook = 2, |
| | | /** |
| | | * 暂时不找工作 |
| | | */ |
| | | NotLook = 3, |
| | | } |
| | | |
| | | export const UserResumeJobSeekingStatusEnumText = { |
| | | [UserResumeJobSeekingStatusEnum.Activing]: '积极找工作', |
| | | [UserResumeJobSeekingStatusEnum.JustLook]: '随便看看', |
| | | [UserResumeJobSeekingStatusEnum.NotLook]: '暂时不找工作', |
| | | }; |
| | |
| | | return { |
| | | completeAreaList: computed(() => areaStore.value.completeAreaList), |
| | | completeAreaTree: computed(() => areaStore.value.completeAreaTree), |
| | | // cityAreaTree: computed(() => areaStore.value.cityAreaTree), |
| | | cityAreaTree: computed(() => |
| | | areaStore.value.completeAreaTree.map((x) => ({ |
| | | ...x, |
| | | children: x.children.map((y) => ({ |
| | | ...y, |
| | | children: undefined, |
| | | })), |
| | | })) |
| | | ), |
| | | provinceList: computed(() => areaStore.value.provinceList), |
| | | areaItemMap: computed(() => areaStore.value.areaItemMap), |
| | | getAreaFromCompleteAreaList, |
| | |
| | | } |
| | | |
| | | export function useAllAreaList() { |
| | | const { completeAreaTree, provinceList, completeAreaList } = useArea(); |
| | | const { completeAreaTree, provinceList, completeAreaList, cityAreaTree } = useArea(); |
| | | |
| | | const findAreaCodeFromName = (areaName: string) => { |
| | | const areaItem = completeAreaList.value.find((x) => x.areaName === areaName); |
| | |
| | | findAreaItemFromCode, |
| | | areaTreeList: completeAreaTree, |
| | | provinceList, |
| | | cityAreaTree, |
| | | }; |
| | | } |
| | | |
New file |
| | |
| | | /* eslint-disable */ |
| | | // @ts-ignore |
| | | import { request } from '@/utils/request'; |
| | | |
| | | /** C端人员管理列表 POST /api/FlexEnterpriseWoker/GetUserClientList */ |
| | | export async function getUserClientList( |
| | | body: API.GetUserClientForBackInput, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<API.GetUserClientForBackOutputPageOutput>( |
| | | '/api/FlexEnterpriseWoker/GetUserClientList', |
| | | { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | | }, |
| | | data: body, |
| | | ...(options || {}), |
| | | } |
| | | ); |
| | | } |
| | | |
| | | /** C端人员管理--签约详情 POST /api/FlexEnterpriseWoker/GetUserClientSignList */ |
| | | export async function getUserClientSignList( |
| | | body: API.GetUserClientSignListInput, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<API.UserClientSignListOutputPageOutput>( |
| | | '/api/FlexEnterpriseWoker/GetUserClientSignList', |
| | | { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | | }, |
| | | data: body, |
| | | ...(options || {}), |
| | | } |
| | | ); |
| | | } |
| | | |
| | | /** C端人员管理--获取人员详情 GET /api/FlexEnterpriseWoker/GetUserDetailForBack */ |
| | | export async function getUserDetailForBack( |
| | | // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) |
| | | params: API.APIgetUserDetailForBackParams, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<API.GetUserDetailForBackOutput>('/api/FlexEnterpriseWoker/GetUserDetailForBack', { |
| | | method: 'GET', |
| | | params: { |
| | | ...params, |
| | | }, |
| | | ...(options || {}), |
| | | }); |
| | | } |
| | |
| | | // @ts-ignore |
| | | import { request } from '@/utils/request'; |
| | | |
| | | /** 根据用户获取期待的工作 GET /api/UserResume/GetResumeExpectationJob */ |
| | | export async function getResumeExpectationJob(options?: API.RequestConfig) { |
| | | return request<API.UserResumeExpectationJobOutput>('/api/UserResume/GetResumeExpectationJob', { |
| | | method: 'GET', |
| | | ...(options || {}), |
| | | }); |
| | | } |
| | | |
| | | /** 根据用户获取简历 GET /api/UserResume/GetUserResume */ |
| | | export async function getUserResume(options?: API.RequestConfig) { |
| | | return request<API.MyResumeOutput>('/api/UserResume/GetUserResume', { |
| | |
| | | }); |
| | | } |
| | | |
| | | /** 根据用户获取简历基础信息 GET /api/UserResume/GetUserResumeBaseInfo */ |
| | | export async function getUserResumeBaseInfo(options?: API.RequestConfig) { |
| | | return request<API.UserResumeBaseInfoOutput>('/api/UserResume/GetUserResumeBaseInfo', { |
| | | method: 'GET', |
| | | ...(options || {}), |
| | | }); |
| | | } |
| | | |
| | | /** 根据认证id获取认证详情 GET /api/UserResume/GetUserResumeCertificateDetailById */ |
| | | export async function getUserResumeCertificateDetailById( |
| | | // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) |
| | |
| | | import * as Common from './Common'; |
| | | import * as Features from './Features'; |
| | | import * as FlexEnterprise from './FlexEnterprise'; |
| | | import * as FlexEnterpriseWoker from './FlexEnterpriseWoker'; |
| | | import * as FlexTask from './FlexTask'; |
| | | import * as FlexWorker from './FlexWorker'; |
| | | import * as IdentityRole from './IdentityRole'; |
| | |
| | | Common, |
| | | Features, |
| | | FlexEnterprise, |
| | | FlexEnterpriseWoker, |
| | | FlexTask, |
| | | FlexWorker, |
| | | IdentityRole, |
| | |
| | | id: string; |
| | | } |
| | | |
| | | interface APIgetUserDetailForBackParams { |
| | | userId?: string; |
| | | } |
| | | |
| | | interface APIgetUserListByPhoneNumberParams { |
| | | phoneNumber?: string; |
| | | clientId?: string; |
| | |
| | | belongType?: number; |
| | | } |
| | | |
| | | interface GetUserClientForBackInput { |
| | | pageModel?: Pagination; |
| | | /** 姓名/手机/身份证号/客户 */ |
| | | searchKeys?: string; |
| | | /** 最近录用时间--开始 */ |
| | | nearlyHireDateTimeBegin?: string; |
| | | /** 最近录用时间--结束 */ |
| | | nearlyHireDateTimeEnd?: string; |
| | | /** 最近签约时间--开始 */ |
| | | nearlySignDateTimeBegin?: string; |
| | | /** 最近签约时间--结束 */ |
| | | nearlySignDateTimeEnd?: string; |
| | | /** 实名状态 */ |
| | | realVerifyStatus?: boolean; |
| | | } |
| | | |
| | | interface GetUserClientForBackOutput { |
| | | userId?: string; |
| | | userResumeId?: string; |
| | | /** 姓名 */ |
| | | name?: string; |
| | | /** 身份证号 */ |
| | | idNumber?: string; |
| | | /** 手机号 */ |
| | | contactPhone?: string; |
| | | /** 年龄 */ |
| | | age?: number; |
| | | genderType?: GenderTypeEnum; |
| | | /** 常驻省份Code */ |
| | | residentProvinceCode?: number; |
| | | /** 常驻城市code */ |
| | | residentCityCode?: number; |
| | | /** 常驻省份名称 */ |
| | | residentProvinceName?: string; |
| | | /** 常驻城市名称 */ |
| | | residentCityName?: string; |
| | | /** 实名状态 */ |
| | | realVerifyStatus?: boolean; |
| | | /** 实名时间 */ |
| | | realVerifyTime?: string; |
| | | nearlyWorkRecord?: NearlyFlexWorkerRecord; |
| | | } |
| | | |
| | | interface GetUserClientForBackOutputPageOutput { |
| | | pageModel?: Pagination; |
| | | objectData?: any; |
| | | data?: GetUserClientForBackOutput[]; |
| | | } |
| | | |
| | | interface GetUserClientSignListInput { |
| | | pageModel?: Pagination; |
| | | userId?: string; |
| | | } |
| | | |
| | | interface GetUserDetailForBackOutput { |
| | | userId?: string; |
| | | userResumeId?: string; |
| | | /** 姓名 */ |
| | | name?: string; |
| | | /** 身份证号 */ |
| | | idNumber?: string; |
| | | /** 手机号 */ |
| | | contactPhone?: string; |
| | | /** 年龄 */ |
| | | age?: number; |
| | | /** 身份证正面 */ |
| | | certificateFrontImgUrl?: string; |
| | | /** 身份证反面 */ |
| | | certificateBackImgUrl?: string; |
| | | } |
| | | |
| | | interface GetWorkerListForBackOutput { |
| | | userId?: string; |
| | | /** 姓名 */ |
| | |
| | | value?: string; |
| | | } |
| | | |
| | | interface NearlyFlexWorkerRecord { |
| | | taskId?: string; |
| | | /** 最近录用时间 */ |
| | | nearlyHireDateTime?: string; |
| | | /** 最近签约时间 */ |
| | | nearlySignDateTime?: string; |
| | | /** 所属商户 */ |
| | | enterpirseName?: string; |
| | | } |
| | | |
| | | interface ObjectExtensionsDto { |
| | | modules?: Record<string, any>; |
| | | enums?: Record<string, any>; |
| | |
| | | residentCityCode?: number; |
| | | residentProvinceName?: string; |
| | | residentCityName?: string; |
| | | /** 联系电话 */ |
| | | phoneNumber?: string; |
| | | /** 头像 */ |
| | | avatarUrl?: string; |
| | | } |
| | | |
| | | interface SaveUserResumeCertificateInput { |
| | |
| | | releaseStatus?: FlexTaskReleaseStatusEnum; |
| | | } |
| | | |
| | | interface UserClientSignListOutput { |
| | | /** 所属商户 */ |
| | | enterpirseName?: string; |
| | | /** 报名时间 */ |
| | | applyTime?: string; |
| | | enterSignStatus?: FlexWorkerEleSignEnum; |
| | | /** 企业签约时间 */ |
| | | enterSignTime?: string; |
| | | hireStatus?: FlexTaskWorkerHireEnum; |
| | | /** 录用时间 */ |
| | | hireDateTime?: string; |
| | | userSignStatus?: FlexWorkerEleSignEnum; |
| | | /** 灵工签约时间 */ |
| | | userSignTime?: string; |
| | | /** 电子合同 */ |
| | | contractUrl?: string; |
| | | } |
| | | |
| | | interface UserClientSignListOutputPageOutput { |
| | | pageModel?: Pagination; |
| | | objectData?: any; |
| | | data?: UserClientSignListOutput[]; |
| | | } |
| | | |
| | | interface UserData { |
| | | id?: string; |
| | | tenantId?: string; |
| | |
| | | /** 简历认证详情Id */ |
| | | id?: string; |
| | | /** 用户简历Id */ |
| | | userResumeId?: string; |
| | | userId?: string; |
| | | /** 认证类别Id */ |
| | | certificateTypeId?: string; |
| | | /** 认证证件号默认身份证 */ |
| | |
| | | import { AreaType } from '@12333/constants'; |
| | | |
| | | export interface AreaTreeNode extends API.AreaInfo { |
| | | export interface AreaTreeNode extends API.AreaDto { |
| | | children?: AreaTreeNode[]; |
| | | } |
| | | |
| | | export function formatAreaListToTree( |
| | | areaDataList: API.AreaInfo[], |
| | | areaDataList: API.AreaDto[], |
| | | parentId: number, |
| | | maxLayer = AreaType.Area |
| | | ) { |
| | |
| | | return treeNodeList; |
| | | } |
| | | |
| | | export function flattenAreaTree(tree: API.AreaInfo[]) { |
| | | let result = [] as API.AreaInfo[]; |
| | | export function flattenAreaTree(tree: API.AreaDto[]) { |
| | | let result = [] as API.AreaDto[]; |
| | | |
| | | // 递归函数,用于遍历子节点 |
| | | function flatten(node: API.AreaInfo) { |
| | | function flatten(node: API.AreaDto) { |
| | | result.push(node); |
| | | |
| | | if (node.children && node.children.length > 0) { |