| | |
| | | "useSwitchTab": true, |
| | | "useTaskList": true, |
| | | "useUser": true, |
| | | "useUserResume": true |
| | | "useUserResume": true, |
| | | "useUpdateResume": true |
| | | } |
| | | } |
| | |
| | | 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']> |
| | |
| | | "description": "", |
| | | "setting": { |
| | | "urlCheck": false, |
| | | "es6": true, |
| | | "enhance": true, |
| | | "es6": false, |
| | | "enhance": false, |
| | | "postcss": false, |
| | | "preloadBackgroundData": false, |
| | | "minified": false, |
| | |
| | | "query": "", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "", |
| | | "pathName": "subpackages/task/taskDetail/taskDetail", |
| | | "query": "id=04c75425-e783-4dbf-0f16-08ddd626b756", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "", |
| | | "pathName": "subpackages/curriculum/mineCurriculumVitae/mineCurriculumVitae", |
| | | "query": "", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | } |
| | | ] |
| | | } |
| | |
| | | import Taro from '@tarojs/taro'; |
| | | import { object2query, LocationUtils } from '@12333/utils'; |
| | | import { ParkOrHRStatus, UserCertificationFrontStatus } from '@12333/constants'; |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | import { useQuery, useQueryClient } from '@tanstack/vue-query'; |
| | | import { MaybeRef } from 'vue'; |
| | | import { useRefeshDidShow } from '@12333/hooks/infiniteLoading'; |
| | | import * as userResumeServices from '@12333/services/apiV2/userResume'; |
| | |
| | | refetch, |
| | | }; |
| | | } |
| | | |
| | | export function useUpdateResume() { |
| | | const queryClient = useQueryClient(); |
| | | |
| | | const updateUserResumeCredentials = () => { |
| | | return queryClient.invalidateQueries(['userResumeServices/getUserResumeCredentials']); |
| | | }; |
| | | |
| | | const updateUserResume = () => { |
| | | return queryClient.invalidateQueries(['userResumeServices/getUserResume']); |
| | | }; |
| | | |
| | | return { |
| | | updateUserResumeCredentials, |
| | | updateUserResume, |
| | | }; |
| | | } |
| | |
| | | :key="queryState.orderType" |
| | | > |
| | | <template #renderItem="{ item }"> |
| | | <TaskCard @click="goTaskDetail(item)" v-bind="item" @apply="goTaskApply(item)" /> |
| | | <TaskCard @click="goTaskDetail(item)" v-bind="item" /> |
| | | </template> |
| | | </InfiniteLoading> |
| | | </PageLayoutWithBg> |
| | |
| | | |
| | | <script setup lang="ts"> |
| | | import { useUser } from '@/hooks'; |
| | | import { useUserStore } from '@/stores/modules/user'; |
| | | import { RectDown, Location2 } from '@nutui/icons-vue-taro'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { setLocationCity } from '@/utils'; |
| | | import _ from 'lodash'; |
| | |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const { updateUserResume } = useUpdateResume(); |
| | | |
| | | const eventChannel = useEventChannel(); |
| | | |
| | | const { dictionaryDataList: identityList } = useDictionaryDataSelect({ |
| | |
| | | Message.success('保存成功', { |
| | | onClosed() { |
| | | goBack(); |
| | | eventChannel.emit('updateResume', { content: true }); |
| | | updateUserResume(); |
| | | }, |
| | | }); |
| | | } |
| | |
| | | import { RouterPath } from '@/constants'; |
| | | import * as userResumeServices from '@12333/services/apiV2/userResume'; |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | import { useEvent } from 'senin-mini/hooks'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | useEvent('updateResume', function (data: { content: boolean }) { |
| | | if (data.content) { |
| | | refetch({ |
| | | type: 'inactive', |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | const { |
| | |
| | | const router = Taro.useRouter(); |
| | | const id = router.params?.id as string; |
| | | const isEdit = computed(() => !!id); |
| | | const queryClient = useQueryClient(); |
| | | const { updateUserResumeCredentials } = useUpdateResume(); |
| | | |
| | | const { dictionaryDataList: certificateTypeList } = useDictionaryDataSelect({ |
| | | categoryCode: CategoryCode.CertificateType, |
| | |
| | | Message.success(isEdit.value ? '编辑成功' : '添加成功', { |
| | | onClosed() { |
| | | goBack(); |
| | | queryClient.invalidateQueries(['userResumeServices/getUserResumeCredentials']); |
| | | updateUserResumeCredentials(); |
| | | }, |
| | | }); |
| | | } |
| | |
| | | import IconPhone from '@/assets/mine/icon-phone.png'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { setOSSLink } from '@12333/utils'; |
| | | import { useEvent } from 'senin-mini/hooks'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | function goPage(routeName: string) { |
| | | Taro.navigateTo({ |
| | | url: routeName, |
| | | events: { |
| | | updateResume(data: { content: boolean }) { |
| | | console.log('content: ', data.content); |
| | | if (data.content) { |
| | | refetch({ |
| | | type: 'inactive', |
| | | }); |
| | | } |
| | | }, |
| | | }, |
| | | // events: { |
| | | // updateResume(data: { content: boolean }) { |
| | | // if (data.content) { |
| | | // refetch({ |
| | | // type: 'inactive', |
| | | // }); |
| | | // } |
| | | // }, |
| | | // }, |
| | | }); |
| | | } |
| | | function goEditMineInfo() { |
| | |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const { refetch: userResumeRefetch } = useUserResume(); |
| | | const { updateUserResume } = useUpdateResume(); |
| | | |
| | | const { |
| | | isLoading, |
| | |
| | | Message.success('保存成功', { |
| | | onClosed() { |
| | | goBack(); |
| | | userResumeRefetch({ type: 'inactive' }); |
| | | updateUserResume(); |
| | | }, |
| | | }); |
| | | } |
| | |
| | | import { Message } from '@12333/utils'; |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | import { goBack } from '@/utils'; |
| | | import { useEventChannel } from 'senin-mini/hooks'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const eventChannel = useEventChannel(); |
| | | const { updateUserResume } = useUpdateResume(); |
| | | |
| | | const { dictionaryDataList: positionList } = useDictionaryDataSelect({ |
| | | categoryCode: CategoryCode.Position, |
| | |
| | | Message.success('保存成功', { |
| | | onClosed() { |
| | | goBack(); |
| | | eventChannel.emit('updateResume', { content: true }); |
| | | updateUserResume(); |
| | | }, |
| | | }); |
| | | } |
| | |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const { refetch: userResumeRefetch } = useUserResume(); |
| | | const { updateUserResume } = useUpdateResume(); |
| | | |
| | | const form = reactive({ |
| | | workSeniority: '', |
| | |
| | | Message.success('保存成功', { |
| | | onClosed() { |
| | | goBack(); |
| | | userResumeRefetch({ type: 'inactive' }); |
| | | updateUserResume(); |
| | | }, |
| | | }); |
| | | } |
| | |
| | | <script setup lang="ts"> |
| | | import { TaskCard } from '@12333/components'; |
| | | import { useUserStore } from '@/stores/modules/user'; |
| | | import { useInfiniteLoading } from '@12333/hooks'; |
| | | import { OrderInputType } from '@12333/constants'; |
| | | import * as flexWorkerServices from '@12333/services/api/FlexWorker'; |
| | | import { useTaskList } from '@12333/hooks'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const userStore = useUserStore(); |
| | | |
| | | const { infiniteLoadingProps } = useInfiniteLoading( |
| | | ({ pageParam }) => { |
| | | let params: API.GetFlexTaskListInput = { |
| | | pageModel: { |
| | | rows: 20, |
| | | page: pageParam, |
| | | orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }], |
| | | }, |
| | | }; |
| | | |
| | | return flexWorkerServices.getFlexTaskByArrange(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | { |
| | | queryKey: ['flexWorkerServices/getFlexTaskByArrange'], |
| | | } |
| | | ); |
| | | const { infiniteLoadingProps } = useTaskList({ |
| | | defaultQueryMenuState: {}, |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | |
| | | <img |
| | | :src="detail.isCollected ? IconAttentioActive : IconAttention" |
| | | class="taskDetail-attention-icon" |
| | | @click="handleAttention" |
| | | /> |
| | | </template> |
| | | <div class="taskDetail-time"> |
| | |
| | | :isFlex="false" |
| | | openType="share" |
| | | ></PageFooterAction> |
| | | <PageFooterAction :icon="IconPhone" text="手机" :isFlex="false"></PageFooterAction> |
| | | <PageFooterBtn v-if="detail.releaseStatus === EnumTaskReleaseStatus.InProcess" type="primary" |
| | | >报名(5人已报名)</PageFooterBtn |
| | | <PageFooterAction |
| | | :icon="IconPhone" |
| | | text="手机" |
| | | :isFlex="false" |
| | | @click="handleCall" |
| | | ></PageFooterAction> |
| | | <PageFooterBtn |
| | | v-if="detail.releaseStatus === EnumTaskReleaseStatus.InProcess" |
| | | type="primary" |
| | | @click="handleApply" |
| | | >{{ `报名(${detail?.applyCount ?? 0}人已报名)` }}</PageFooterBtn |
| | | > |
| | | <PageFooterBtn v-if="detail.releaseStatus === EnumTaskReleaseStatus.Stopped" color="#999999" |
| | | >已停止</PageFooterBtn |
| | |
| | | import Taro from '@tarojs/taro'; |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | import * as taskServices from '@12333/services/apiV2/task'; |
| | | import * as taskUserServices from '@12333/services/apiV2/taskUser'; |
| | | import { useToggle } from 'senin-mini/hooks'; |
| | | import { TaskPrice, TaskDetailWelfareItem } from '@12333/components'; |
| | | import IconAttention from '@/assets/task/icon-attention.png'; |
| | |
| | | import './taskDetail.scss'; |
| | | import CompanyDesc from '../components/CompanyDesc.vue'; |
| | | import dayjs from 'dayjs'; |
| | | import { TaskUtils, toThousand, setOSSLink } from '@12333/utils'; |
| | | import { TaskUtils, toThousand, setOSSLink, Message } from '@12333/utils'; |
| | | import { |
| | | EnumSettlementCycleText, |
| | | BillingMethodEnumUnit, |
| | |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | const handleApply = useAccessLogin(async () => { |
| | | try { |
| | | let params: API.ApplyTaskCommand = { |
| | | ids: [taskId], |
| | | }; |
| | | let res = await taskUserServices.applyTask(params); |
| | | if (res) { |
| | | Message.success('报名成功', { |
| | | onClosed() { |
| | | refetch({ type: 'inactive' }); |
| | | }, |
| | | }); |
| | | } |
| | | } catch (error) {} |
| | | }); |
| | | |
| | | const handleAttention = useAccessLogin(async () => { |
| | | try { |
| | | await Message.confirm({ |
| | | message: `确定${detail.value?.isCollected ? '取消收藏' : '收藏'}吗?`, |
| | | }); |
| | | let params: API.CollectTaskCommand = { |
| | | ids: [taskId], |
| | | isCollect: !detail.value?.isCollected, |
| | | }; |
| | | let res = await taskUserServices.collectTask(params); |
| | | if (res) { |
| | | Message.success('操作成功', { |
| | | onClosed() { |
| | | refetch({ type: 'inactive' }); |
| | | }, |
| | | }); |
| | | } |
| | | } catch (error) {} |
| | | }); |
| | | |
| | | const handleCall = useAccessLogin(() => { |
| | | if (detail.value.contactPhoneNumber) { |
| | | Taro.makePhoneCall({ |
| | | phoneNumber: detail.value.contactPhoneNumber, |
| | | }); |
| | | } |
| | | }); |
| | | </script> |
| | |
| | | </div> |
| | | <div class="task-card-actions" v-if="showActions"> |
| | | <slot name="actions"> |
| | | <nut-button |
| | | v-if="releaseStatus === EnumTaskReleaseStatus.InProcess" |
| | | type="primary" |
| | | @click.stop="emit('apply', id)" |
| | | <nut-button v-if="releaseStatus === EnumTaskReleaseStatus.InProcess" type="primary" |
| | | >报名</nut-button |
| | | > |
| | | </slot> |