| | |
| | | <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> |
| | | <JobDetailContent :isCollapse="true"> |
| | | <template #footer> |
| | | <PageFooterBtn |
| | | type="primary" |
| | | plain |
| | | @click="taskWorkerHireRefuse(FlexTaskWorkerHireEnum.Refused)" |
| | | >谢绝</PageFooterBtn |
| | | > |
| | | <PageFooterBtn type="primary" @click="taskWorkerHireRefuse(FlexTaskWorkerHireEnum.Hired)" |
| | | >录用</PageFooterBtn |
| | | > |
| | | <PageFooterBtn type="primary" plain @click="taskWorkerHireRefuse(10)">谢绝</PageFooterBtn> |
| | | <PageFooterBtn type="primary" @click="taskWorkerHireRefuse(20)">录用</PageFooterBtn> |
| | | </template> |
| | | </JobDetailContent> |
| | | </LoadingLayout> |
| | |
| | | <script setup lang="ts"> |
| | | import Taro from '@tarojs/taro'; |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | import * as flexWorkerServices from '@12333/services/api/FlexWorker'; |
| | | import * as taskUserServices from '@12333/services/apiV2/taskUser'; |
| | | import { Message } from '@12333/utils'; |
| | | import { FlexTaskWorkerHireEnum } from '@12333/constants/task'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const router = Taro.useRouter(); |
| | | const taskId = router.params?.id ?? ''; |
| | | const id = router.params?.id ?? ''; |
| | | |
| | | const { |
| | | isLoading, |
| | |
| | | data: detail, |
| | | refetch, |
| | | } = useQuery({ |
| | | queryKey: ['flexWorkerServices/getFlexTaskDto', taskId], |
| | | queryKey: ['taskServices/getTaskInfo', id], |
| | | queryFn: async () => { |
| | | return await flexWorkerServices.getFlexTaskDto( |
| | | { id: taskId }, |
| | | return await taskServices.getTaskInfo( |
| | | { id: id }, |
| | | { |
| | | showLoading: false, |
| | | } |
| | | ); |
| | | }, |
| | | placeholderData: () => ({} as API.GetFlexTaskDtoOutput), |
| | | placeholderData: () => ({} as API.GetTaskInfoQueryResult), |
| | | }); |
| | | |
| | | async function taskWorkerHireRefuse(hireStatus: FlexTaskWorkerHireEnum) { |
| | | try { |
| | | let params: API.TaskWorkerHireRefuseInput = { |
| | | flexTaskId: taskId, |
| | | flexWorkerId: detail.value?.taskId, |
| | | let params: API.SetTaskUserHireCommand = { |
| | | id: id, |
| | | hireStatus: hireStatus, |
| | | }; |
| | | let res = await flexWorkerServices.taskWorkerHireRefuse(params); |
| | | let res = await taskUserServices.setTaskUserHire(params); |
| | | if (res) { |
| | | Message.success('操作成功'); |
| | | refetch({ |
| | |
| | | <template #renderItem="{ item }"> |
| | | <FlexJobCard |
| | | :name="item.name" |
| | | :genderType="item.genderType" |
| | | :gender="item.gender" |
| | | :age="item.age" |
| | | :educationalLevel="item.educationalLevel" |
| | | :arrangeCount="item.arrangeCount" |
| | | :educationalBackgroundContent="item.educationalBackgroundContent" |
| | | :taskCount="item.taskCount" |
| | | :showFooterLeft="false" |
| | | > |
| | | <template #footerRight> |
| | |
| | | <script setup lang="ts"> |
| | | import Taro from '@tarojs/taro'; |
| | | import { useInfiniteLoading } from '@12333/hooks'; |
| | | import { OrderInputType } from '@12333/constants'; |
| | | import * as flexWorkerServices from '@12333/services/api/FlexWorker'; |
| | | import { EnumTaskUserArrangeStatus, EnumPagedListOrder } from '@12333/constants'; |
| | | import * as taskUserServices from '@12333/services/apiV2/taskUser'; |
| | | import _ from 'lodash'; |
| | | import { Message, trim } from '@12333/utils'; |
| | | import { FlexJobCard } from '@12333/components'; |
| | |
| | | |
| | | const searchValue = ref(''); |
| | | const router = Taro.useRouter(); |
| | | const taskId = router.params?.taskId ?? ''; |
| | | const id = router.params?.id ?? ''; |
| | | const status = router.params?.status ?? ''; |
| | | const queryState = reactive({ |
| | | searchValueTrim: '', |
| | | keywords: '', |
| | | }); |
| | | |
| | | const showQueryState = computed(() => { |
| | |
| | | }); |
| | | |
| | | const handleSearch = _.debounce(function () { |
| | | queryState.searchValueTrim = trim(searchValue.value); |
| | | queryState.keywords = trim(searchValue.value); |
| | | }, 300); |
| | | |
| | | const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading( |
| | | ({ pageParam }) => { |
| | | let params: API.GetFlexTaskWorkerArrangeListInput = { |
| | | searchKeys: queryState.searchValueTrim, |
| | | flexTaskId: taskId, |
| | | let params: API.GetArrangeTaskUsersQuery = { |
| | | keywords: queryState.keywords, |
| | | arrangeStatus: EnumTaskUserArrangeStatus.Wait, |
| | | id: id, |
| | | pageModel: { |
| | | rows: 20, |
| | | page: pageParam, |
| | | orderInput: [{ property: 'lastShelfTime', order: OrderInputType.Desc }], |
| | | orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], |
| | | }, |
| | | }; |
| | | |
| | | return flexWorkerServices.getFlexTaskWorkerArrangeList(params, { |
| | | return taskUserServices.getArrangeTaskUsers(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | { |
| | | queryKey: ['flexWorkerServices/getFlexTaskWorkerArrangeList', queryState], |
| | | queryKey: ['taskUserServices/getArrangeTaskUsers', queryState], |
| | | } |
| | | ); |
| | | |
| | | async function handleArrange(item: API.GetNewestWorkerListOutput) { |
| | | async function handleArrange(item: API.GetArrangeTaskUsersQueryResultItem) { |
| | | try { |
| | | let params: API.TaskWorkerArrangeInput = { |
| | | flexTaskId: taskId, |
| | | flexWorkerId: item.userId, |
| | | arrange: true, |
| | | let params: API.SetTaskUserArrangeCommand = { |
| | | id: item.id, |
| | | arrangeStatus: EnumTaskUserArrangeStatus.Complete, |
| | | }; |
| | | let res = await flexWorkerServices.taskWorkerArrange(params); |
| | | let res = await taskUserServices.setTaskUserArrange(params); |
| | | if (res) { |
| | | Message.success('已安排'); |
| | | invalidateQueries(); |
| | |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const { queryMenuState, infiniteLoadingProps } = useTaskList(); |
| | | const { queryMenuState, infiniteLoadingProps } = useTaskList({ |
| | | defaultQueryMenuState: { |
| | | status: EnumTaskStatus.Wait, |
| | | }, |
| | | }); |
| | | |
| | | const completedAssignCount = computed(() => { |
| | | return infiniteLoadingProps.value?.listData?.pages?.[0]?.objectData?.completedAssignCount ?? 0; |
| | |
| | | } |
| | | |
| | | function goBatchTaskList(item: API.GetTaskInfosQueryResultItem, status: string) { |
| | | console.log('status: ', status); |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.batchTaskList}?taskId=${item.id}&detail=${status}`, |
| | | url: `${RouterPath.batchTaskList}?id=${item.id}&status=${status}`, |
| | | }); |
| | | } |
| | | </script> |
| | |
| | | :disabled="detail?.hireStatus === EnumTaskUserHireStatus.Wait" |
| | | >{{ `报名(${detail?.applyCount ?? 0}人已报名)` }}</PageFooterBtn |
| | | > |
| | | <PageFooterBtn v-if="detail.hireStatus === EnumTaskUserHireStatus.Wait" color="#999999" |
| | | >已停止</PageFooterBtn |
| | | > |
| | | <PageFooterBtn v-if="detail.releaseStatus === EnumTaskReleaseStatus.Stopped" color="#999999" |
| | | >已停止</PageFooterBtn |
| | | > |