| | |
| | | import { Message, setOSSLink } from '@12333/utils'; |
| | | import dayjs from 'dayjs'; |
| | | import { goBack } from '@/utils'; |
| | | import { useCheckReceiveTaskUserSubmit } from '@12333/hooks'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | const id = router.params?.id ?? ''; |
| | | const date = router.params?.date ?? ''; |
| | | |
| | | const { |
| | | isLoading, |
| | | isError, |
| | | data: detail, |
| | | refetch, |
| | | } = useQuery({ |
| | | queryKey: ['taskCheckReceiveServices/getCheckReceiveTaskUserSubmit', id, date], |
| | | queryFn: async () => { |
| | | return await taskCheckReceiveServices.getCheckReceiveTaskUserSubmit( |
| | | { taskInfoUserId: id, date: dayjs(date).format('YYYY-MM-DD') }, |
| | | { |
| | | showLoading: false, |
| | | } |
| | | ); |
| | | const { isLoading, isError, detail, refetch } = useCheckReceiveTaskUserSubmit({ |
| | | params: { |
| | | taskInfoUserId: id, |
| | | date: dayjs(date).format('YYYY-MM-DD'), |
| | | }, |
| | | placeholderData: () => ({} as API.GetCheckReceiveTaskUserSubmitQueryResult), |
| | | }); |
| | | |
| | | async function checkReceiveTask(checkReceiveStatus: EnumTaskUserSubmitCheckReceiveStatus) { |
| | |
| | | "miniprogram": { |
| | | "list": [ |
| | | { |
| | | "name": "验收详情", |
| | | "pathName": "subpackages/task/taskCheckDetail/taskCheckDetail", |
| | | "query": "id=b0e79981-56d5-4730-83e7-08de1d1fb9dd", |
| | | "scene": null, |
| | | "launchMode": "default" |
| | | }, |
| | | { |
| | | "name": "提交验收", |
| | | "pathName": "subpackages/task/taskSubmitCheck/taskSubmitCheck", |
| | | "query": "id=b0e79981-56d5-4730-83e7-08de1d1fb9dd&date=2025-11-07", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "任务", |
| | | "pathName": "pages/task/task", |
| | | "query": "", |
| | |
| | | :begin-time="item.beginTime" |
| | | :end-time="item.endTime" |
| | | :showActions=" |
| | | item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn && |
| | | OrderUtils.isContainCheckIn(item.checkReceiveMethods) && |
| | | queryState.checkReceiveStatus === EnumTaskCheckReceiveStatus.Completed |
| | | " |
| | | @click="goSubmitTaskDetail(item)" |
| | |
| | | import Taro from '@tarojs/taro'; |
| | | import { useCheckReceiveTasks, useTaskList } from '@12333/hooks'; |
| | | import { EnumTaskCheckReceiveStatus, EnumTaskCheckReceiveMethod } from '@12333/constants'; |
| | | import { OrderUtils } from '@12333/utils'; |
| | | import dayjs from 'dayjs'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | const { queryState, infiniteLoadingProps } = useCheckReceiveTasks(); |
| | | |
| | | function goSubmitTaskDetail(item: API.GetCheckReceiveTasksQueryResultItem) { |
| | | const _date = dayjs(queryState.date).format('YYYY-MM-DD'); |
| | | if (Number(queryState.checkReceiveStatus) === EnumTaskCheckReceiveStatus.WaitSubmit) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.taskSubmitCheck}?id=${item.id}&date=${queryState.date}`, |
| | | url: `${RouterPath.taskSubmitCheck}?id=${item.id}&date=${_date}`, |
| | | }); |
| | | } else { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.taskCheckDetail}?id=${item.id}`, |
| | | }); |
| | | } |
| | | if (item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn) { |
| | | if (Number(queryState.checkReceiveStatus) === EnumTaskCheckReceiveStatus.Completed) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.taskUserSubmitCheckHistories}?id=${item.id}&date=${queryState.date}`, |
| | | }); |
| | | } |
| | | } else { |
| | | if ( |
| | | Number(queryState.checkReceiveStatus) === EnumTaskCheckReceiveStatus.WaitCheckReceive || |
| | | Number(queryState.checkReceiveStatus) === EnumTaskCheckReceiveStatus.Completed |
| | | ) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.taskCheckDetail}?id=${item.id}`, |
| | | }); |
| | | } |
| | | } |
| | | // if (item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn) { |
| | | // if (Number(queryState.checkReceiveStatus) === EnumTaskCheckReceiveStatus.Completed) { |
| | | // Taro.navigateTo({ |
| | | // url: `${RouterPath.taskUserSubmitCheckHistories}?id=${item.id}&date=${_date}`, |
| | | // }); |
| | | // } |
| | | // } else { |
| | | // if ( |
| | | // Number(queryState.checkReceiveStatus) === EnumTaskCheckReceiveStatus.WaitCheckReceive || |
| | | // Number(queryState.checkReceiveStatus) === EnumTaskCheckReceiveStatus.Completed |
| | | // ) { |
| | | // Taro.navigateTo({ |
| | | // url: `${RouterPath.taskCheckDetail}?id=${item.id}`, |
| | | // }); |
| | | // } |
| | | // } |
| | | } |
| | | </script> |
| | | |
| | |
| | | ></MyTaskCard> |
| | | <div class="taskCheckFileCard-status-title">验收照片</div> |
| | | <InfiniteLoading |
| | | scrollViewClassName="common-infinite-scroll-list task-list" |
| | | scrollViewClassName="common-infinite-scroll-list-no-padding task-list" |
| | | v-bind="infiniteLoadingProps" |
| | | > |
| | | <template #renderItem="{ item }"> |
| | | <TaskCheckFileCard |
| | | :created-time="item?.createdTime" |
| | | :userCheckInTime="item?.userCheckInTime" |
| | | :userCheckOutTime="item?.userCheckOutTime" |
| | | :checkReceiveStatus="item?.checkReceiveStatus" |
| | | :checkReceiveMethods="item?.checkReceiveMethods" |
| | | :files="item?.files?.map((x) => setOSSLink(x))" |
| | | ></TaskCheckFileCard> |
| | | </template> |
| | |
| | | v-if=" |
| | | from === 'hire' && |
| | | !( |
| | | detail?.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn && |
| | | isContainCheckIn && |
| | | detail?.hireButton === GetTaskInfoQueryResultHireButton.ApplyCheckReceive |
| | | ) |
| | | " |
| | |
| | | EnumTaskCheckReceiveMethod, |
| | | } from '@12333/constants'; |
| | | import { useAccessLogin } from '@/hooks'; |
| | | import { useTaskInfo } from '@12333/hooks'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | const id = router.params?.id ?? ''; |
| | | const from = router.params?.from ?? ''; |
| | | |
| | | const { |
| | | isLoading, |
| | | isError, |
| | | data: detail, |
| | | refetch, |
| | | } = useQuery({ |
| | | queryKey: ['taskServices/getTaskInfo', id], |
| | | queryFn: async () => { |
| | | return await taskServices.getTaskInfo( |
| | | { id: id }, |
| | | { |
| | | showLoading: false, |
| | | } |
| | | ); |
| | | }, |
| | | placeholderData: () => ({} as API.GetTaskInfoQueryResult), |
| | | onSuccess(data) { |
| | | // if (data.isExistTradeChatRecord) setTrue(); |
| | | }, |
| | | }); |
| | | const { isLoading, isError, detail, refetch, isContainCheckIn } = useTaskInfo({ id }); |
| | | |
| | | const { isCollapse, setTrue } = useToggle(); |
| | | |
| | |
| | | <template> |
| | | <ContentScrollView :paddingH="false"> |
| | | <nut-form :model-value="form" ref="formRef" :rules="rules"> |
| | | <nut-form-item label="上传照片:" class="bole-form-item alignTop" prop="files" required> |
| | | <Uploader |
| | | v-model:file-list="form.files" |
| | | :maximum="9" |
| | | :limitFileSize="10" |
| | | class="bole-uploader nopaddingtop" |
| | | :sourceType="['camera']" |
| | | <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> |
| | | <ContentScrollView :paddingH="false"> |
| | | <nut-form :model-value="form" ref="formRef" :rules="rules"> |
| | | <nut-form-item label="上传照片:" class="bole-form-item alignTop" prop="files" required> |
| | | <Uploader |
| | | v-model:file-list="form.files" |
| | | :maximum="9" |
| | | :limitFileSize="10" |
| | | class="bole-uploader nopaddingtop" |
| | | :sourceType="['camera']" |
| | | > |
| | | </Uploader> |
| | | </nut-form-item> |
| | | </nut-form> |
| | | </ContentScrollView> |
| | | <PageFooter :isOnlyAction="false"> |
| | | <template v-if="isContainCheckIn"> |
| | | <PageFooterBtn type="primary" v-if="!detail.userCheckHistoryType" @click="handleCheckIn()" |
| | | >签到</PageFooterBtn |
| | | > |
| | | </Uploader> |
| | | </nut-form-item> |
| | | </nut-form> |
| | | </ContentScrollView> |
| | | <PageFooter :isOnlyAction="false"> |
| | | <PageFooterBtn type="primary" @click="handleSubmit()">提交</PageFooterBtn> |
| | | </PageFooter> |
| | | <PageFooterBtn |
| | | v-else-if="detail.userCheckHistoryType === EnumTaskUserSubmitCheckHistoryType.CheckIn" |
| | | type="primary" |
| | | @click="handleCheckOut()" |
| | | >签出</PageFooterBtn |
| | | > |
| | | </template> |
| | | <PageFooterBtn v-else type="primary" @click="handleSubmit()">提交</PageFooterBtn> |
| | | </PageFooter> |
| | | </LoadingLayout> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; |
| | | import { FileItem } from '@nutui/nutui-taro/dist/types/__VUE/uploader/type'; |
| | | import { FormValidator, Message } from '@12333/utils'; |
| | | import { FormValidator, Message, OrderUtils, convertApiPath2Url } from '@12333/utils'; |
| | | import * as taskCheckReceiveServices from '@12333/services/apiV2/taskCheckReceive'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { goBack } from '@/utils'; |
| | | import { useQueryClient } from '@tanstack/vue-query'; |
| | | import dayjs from 'dayjs'; |
| | | import { useCheckReceiveTaskUserSubmit } from '@12333/hooks'; |
| | | import { EnumTaskUserSubmitCheckHistoryType } from '@12333/constants'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | const date = route.params?.date as string; |
| | | const queryClient = useQueryClient(); |
| | | |
| | | const { isLoading, isError, detail, refetch, isContainCheckIn } = useCheckReceiveTaskUserSubmit({ |
| | | params: { |
| | | taskInfoId: id, |
| | | date: dayjs(date).format('YYYY-MM-DD'), |
| | | }, |
| | | onSuccess(data) { |
| | | if (data.files?.length > 0) { |
| | | form.files = data.files.map(convertApiPath2Url); |
| | | } |
| | | }, |
| | | }); |
| | | |
| | | const form = reactive({ |
| | | files: [] as FileItem[], |
| | | }); |
| | |
| | | |
| | | const formRef = ref<any>(null); |
| | | |
| | | function handleCheckIn() { |
| | | if (!formRef.value) return; |
| | | formRef.value.validate().then(({ valid, errors }: any) => { |
| | | if (valid) { |
| | | submitCheckReceiveTask(EnumTaskUserSubmitCheckHistoryType.CheckIn); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | function handleCheckOut() { |
| | | if (!formRef.value) return; |
| | | formRef.value.validate().then(({ valid, errors }: any) => { |
| | | if (valid) { |
| | | submitCheckReceiveTask(EnumTaskUserSubmitCheckHistoryType.CheckOut); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | function handleSubmit() { |
| | | if (!formRef.value) return; |
| | | formRef.value.validate().then(({ valid, errors }: any) => { |
| | |
| | | }); |
| | | } |
| | | |
| | | async function submitCheckReceiveTask() { |
| | | async function submitCheckReceiveTask(userCheckHistoryType?: EnumTaskUserSubmitCheckHistoryType) { |
| | | try { |
| | | let params: API.SubmitCheckReceiveTaskCommand = { |
| | | taskInfoId: id, |
| | | date: dayjs(date).format('YYYY-MM-DD'), |
| | | files: form.files.map((x) => x.path), |
| | | userCheckHistoryType, |
| | | }; |
| | | let res = await taskCheckReceiveServices.submitCheckReceiveTask(params); |
| | | if (res) { |
| | |
| | | } catch (error) {} |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | </style> |
| | |
| | | import { Message, setOSSLink } from '@12333/utils'; |
| | | import dayjs from 'dayjs'; |
| | | import { goBack } from '@/utils'; |
| | | import { useCheckReceiveTaskUserSubmit } from '@12333/hooks'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | const id = router.params?.id ?? ''; |
| | | const date = router.params?.date ?? ''; |
| | | |
| | | const { |
| | | isLoading, |
| | | isError, |
| | | data: detail, |
| | | refetch, |
| | | } = useQuery({ |
| | | queryKey: ['taskCheckReceiveServices/getCheckReceiveTaskUserSubmit', id, date], |
| | | queryFn: async () => { |
| | | return await taskCheckReceiveServices.getCheckReceiveTaskUserSubmit( |
| | | { taskInfoUserId: id, date: dayjs(date).format('YYYY-MM-DD') }, |
| | | { |
| | | showLoading: false, |
| | | } |
| | | ); |
| | | const { isLoading, isError, detail, refetch } = useCheckReceiveTaskUserSubmit({ |
| | | params: { |
| | | taskInfoUserId: id, |
| | | date: dayjs(date).format('YYYY-MM-DD'), |
| | | }, |
| | | placeholderData: () => ({} as API.GetCheckReceiveTaskUserSubmitQueryResult), |
| | | }); |
| | | |
| | | async function checkReceiveTask(checkReceiveStatus: EnumTaskUserSubmitCheckReceiveStatus) { |
| | |
| | | <template> |
| | | <div class="taskCheckFileCard-wrapper"> |
| | | <div class="taskCheckFileCard-status-wrapper"> |
| | | <div class="taskCheckFileCard-time"> |
| | | {{ props.createdTime ? dayjs(props.createdTime).format('YYYY-MM-DD HH:mm:ss') : '' }} |
| | | <div class="taskCheckFileCard-time-wrapper"> |
| | | <template v-if="OrderUtils.isContainCheckIn(checkReceiveMethods)"> |
| | | <div class="taskCheckFileCard-time"> |
| | | 签到时间:{{ |
| | | props.userCheckInTime |
| | | ? dayjs(props.userCheckInTime).format('YYYY-MM-DD HH:mm:ss') |
| | | : '' |
| | | }} |
| | | </div> |
| | | <div class="taskCheckFileCard-time"> |
| | | 签出时间:{{ |
| | | props.userCheckOutTime |
| | | ? dayjs(props.userCheckOutTime).format('YYYY-MM-DD HH:mm:ss') |
| | | : '' |
| | | }} |
| | | </div> |
| | | </template> |
| | | <div class="taskCheckFileCard-time" v-else> |
| | | {{ props.createdTime ? dayjs(props.createdTime).format('YYYY-MM-DD HH:mm:ss') : '' }} |
| | | </div> |
| | | </div> |
| | | <div |
| | | class="taskCheckFileCard-status" |
| | |
| | | Colors, |
| | | EnumTaskUserSubmitCheckReceiveStatus, |
| | | EnumTaskUserSubmitCheckReceiveStatusText, |
| | | EnumTaskCheckReceiveMethod, |
| | | } from '@12333/constants'; |
| | | import { setOSSLink } from '@12333/utils'; |
| | | import { setOSSLink, OrderUtils } from '@12333/utils'; |
| | | import dayjs from 'dayjs'; |
| | | |
| | | defineOptions({ |
| | |
| | | files?: string[]; |
| | | |
| | | showCheckReceiveStatus?: boolean; |
| | | |
| | | /** 用户签到时间 */ |
| | | userCheckInTime?: string; |
| | | /** 用户签出时间 */ |
| | | userCheckOutTime?: string; |
| | | |
| | | /** 验收方式 */ |
| | | checkReceiveMethods?: EnumTaskCheckReceiveMethod[]; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), { |
| | |
| | | .taskCheckFileCard-wrapper { |
| | | .taskCheckFileCard-status-wrapper { |
| | | display: flex; |
| | | align-items: center; |
| | | align-items: flex-start; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | |
| | | font-weight: 400; |
| | | font-size: 24px; |
| | | color: boleGetCssVar('text-color', 'regular'); |
| | | line-height: 32px; |
| | | line-height: 44px; |
| | | } |
| | | |
| | | .taskCheckFileCard-img-grid { |
| | |
| | | EnumTaskUserApplyStatus, |
| | | } from '@12333/constants'; |
| | | import _ from 'lodash'; |
| | | import { trim } from '@12333/utils'; |
| | | import { OrderUtils, trim } from '@12333/utils'; |
| | | import { computed, MaybeRef, reactive, Ref, ref, unref } from 'vue'; |
| | | import * as taskServices from '@12333/services/apiV2/task'; |
| | | import * as enterpriseWalletServices from '@12333/services/apiV2/enterpriseWallet'; |
| | |
| | | |
| | | return { settlementAccessList }; |
| | | } |
| | | |
| | | type UseTaskInfoOptions = { |
| | | id: MaybeRef<string>; |
| | | onSuccess?: (data: API.GetTaskInfoQueryResult) => any; |
| | | }; |
| | | |
| | | export function useTaskInfo({ id, onSuccess }: UseTaskInfoOptions) { |
| | | const { |
| | | isLoading, |
| | | isError, |
| | | data: detail, |
| | | refetch, |
| | | } = useQuery({ |
| | | queryKey: ['taskServices/getTaskInfo', id], |
| | | queryFn: async () => { |
| | | return await taskServices.getTaskInfo( |
| | | { id: unref(id) }, |
| | | { |
| | | showLoading: false, |
| | | } |
| | | ); |
| | | }, |
| | | placeholderData: () => ({} as API.GetTaskInfoQueryResult), |
| | | onSuccess(data) { |
| | | onSuccess?.(data); |
| | | }, |
| | | }); |
| | | |
| | | const isContainCheckIn = computed(() => |
| | | OrderUtils.isContainCheckIn(detail.value?.checkReceiveMethods) |
| | | ); |
| | | |
| | | return { detail, isLoading, isError, refetch, isContainCheckIn }; |
| | | } |
| | | |
| | | type UseCheckReceiveTaskUserSubmitOptions = { |
| | | params: MaybeRef<API.APIgetCheckReceiveTaskUserSubmitParams>; |
| | | onSuccess?: (data: API.GetCheckReceiveTaskUserSubmitQueryResult) => any; |
| | | }; |
| | | |
| | | export function useCheckReceiveTaskUserSubmit({ |
| | | params, |
| | | onSuccess, |
| | | }: UseCheckReceiveTaskUserSubmitOptions) { |
| | | const { |
| | | isLoading, |
| | | isError, |
| | | data: detail, |
| | | refetch, |
| | | } = useQuery({ |
| | | queryKey: ['taskCheckReceiveServices/getCheckReceiveTaskUserSubmit', params], |
| | | queryFn: async () => { |
| | | const _params = unref(params); |
| | | return await taskCheckReceiveServices.getCheckReceiveTaskUserSubmit( |
| | | // { ..._params, date: dayjs(_params.date).format('YYYY-MM-DD') }, |
| | | _params, |
| | | { |
| | | showLoading: false, |
| | | } |
| | | ); |
| | | }, |
| | | placeholderData: () => ({} as API.GetCheckReceiveTaskUserSubmitQueryResult), |
| | | onSuccess(data) { |
| | | onSuccess?.(data); |
| | | }, |
| | | }); |
| | | |
| | | const isContainCheckIn = computed(() => |
| | | OrderUtils.isContainCheckIn(detail.value?.checkReceiveMethods) |
| | | ); |
| | | |
| | | return { detail, isLoading, isError, refetch, isContainCheckIn }; |
| | | } |
| | |
| | | }); |
| | | } |
| | | |
| | | /** 计算任务总服务费 POST /api/flexjob/task/calcTaskTotalServiceFee */ |
| | | export async function calcTaskTotalServiceFee( |
| | | body: API.CalcTaskTotalServiceFeeCommand, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<API.CalcTaskTotalServiceFeeCommandResult>( |
| | | '/api/flexjob/task/calcTaskTotalServiceFee', |
| | | { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json-patch+json', |
| | | }, |
| | | data: body, |
| | | ...(options || {}), |
| | | } |
| | | ); |
| | | } |
| | | |
| | | /** 删除任务 DELETE /api/flexjob/task/deleteTaskInfo */ |
| | | export async function deleteTaskInfo(body: API.DeleteTaskInfoCommand, options?: API.RequestConfig) { |
| | | return request<number>('/api/flexjob/task/deleteTaskInfo', { |
| | |
| | | timeoutFee?: number; |
| | | } |
| | | |
| | | interface CalcTaskTotalServiceFeeCommand { |
| | | billingMethod?: EnumBillingMethod; |
| | | /** 服务费 */ |
| | | serviceFee?: number; |
| | | /** 核定工时 */ |
| | | verifyWorkHours?: number; |
| | | /** 总件数 */ |
| | | totalPieceQuantity?: number; |
| | | /** 需求人数 */ |
| | | needPeopleNumber?: number; |
| | | /** 任务开始时间 */ |
| | | beginTime?: string; |
| | | /** 任务结束时间 */ |
| | | endTime?: string; |
| | | } |
| | | |
| | | interface CalcTaskTotalServiceFeeCommandResult { |
| | | /** 服务费 */ |
| | | totalServiceFee?: number; |
| | | } |
| | | |
| | | interface ChangePhoneNumberCommand { |
| | | /** 手机号码 */ |
| | | phoneNumber: string; |
| | |
| | | remark?: string; |
| | | /** 结算金额 */ |
| | | settlementAmount?: number; |
| | | /** 签到时间 */ |
| | | checkInTime?: string; |
| | | /** 签出时间 */ |
| | | checkOutTime?: string; |
| | | checkHistoryType?: EnumTaskUserSubmitCheckHistoryType; |
| | | checkReceiveStatus?: EnumTaskUserSubmitCheckReceiveStatus; |
| | | } |
| | |
| | | timestamp?: number; |
| | | } |
| | | |
| | | interface FriendlyResultCalcTaskTotalServiceFeeCommandResult { |
| | | /** 跟踪Id */ |
| | | traceId?: string; |
| | | /** 状态码 */ |
| | | code?: number; |
| | | /** 错误码 */ |
| | | errorCode?: string; |
| | | data?: CalcTaskTotalServiceFeeCommandResult; |
| | | /** 执行成功 */ |
| | | success?: boolean; |
| | | /** 错误信息 */ |
| | | msg?: any; |
| | | /** 附加数据 */ |
| | | extras?: any; |
| | | /** 时间戳 */ |
| | | timestamp?: number; |
| | | } |
| | | |
| | | interface FriendlyResultEnterpriseUserElectronSignCommandResult { |
| | | /** 跟踪Id */ |
| | | traceId?: string; |
| | |
| | | checkHistoryType?: EnumTaskUserSubmitCheckHistoryType; |
| | | /** 验收照片 */ |
| | | files?: string[]; |
| | | /** 验收方式 */ |
| | | checkReceiveMethods?: EnumTaskCheckReceiveMethod[]; |
| | | } |
| | | |
| | | interface GetCheckReceiveTaskUserSubmitsQuery { |
| | |
| | | checkReceiveStatus?: EnumTaskUserSubmitCheckReceiveStatus; |
| | | /** 验收时间 */ |
| | | checkReceiveTime?: string; |
| | | /** 验收方式 */ |
| | | checkReceiveMethods?: EnumTaskCheckReceiveMethod[]; |
| | | } |
| | | |
| | | interface GetCheckReceiveTaskUserSubmitsQueryResultObjectData { |
| | |
| | | endTime?: string; |
| | | /** 任务地点名称 */ |
| | | addressName?: string; |
| | | /** 验收方式 */ |
| | | checkReceiveMethods?: EnumTaskCheckReceiveMethod[]; |
| | | } |
| | | |
| | | interface GetCodeUrlQueryResult { |
| | |
| | | taskInfoId?: string; |
| | | /** 日期 */ |
| | | date?: string; |
| | | /** 用户签到时间 */ |
| | | userCheckInTime?: string; |
| | | /** 用户签出时间 */ |
| | | userCheckOutTime?: string; |
| | | userCheckHistoryType?: EnumTaskUserSubmitCheckHistoryType; |
| | | /** 附件 */ |
| | | files?: string[]; |
| | |
| | | import { EnumBillingMethod, BillingMethodEnumUnit } from '@12333/constants'; |
| | | import { |
| | | EnumBillingMethod, |
| | | BillingMethodEnumUnit, |
| | | EnumTaskCheckReceiveMethod, |
| | | } from '@12333/constants'; |
| | | |
| | | export class OrderUtils { |
| | | static getServiceFeeText(serviceFee: number, billingMethod: EnumBillingMethod) { |
| | |
| | | } |
| | | return `${serviceFee ?? 0}${BillingMethodEnumUnit[billingMethod]}`; |
| | | } |
| | | |
| | | static isContainCheckIn(checkReceiveMethods: EnumTaskCheckReceiveMethod[]) { |
| | | if (!checkReceiveMethods) return false; |
| | | return checkReceiveMethods.includes(EnumTaskCheckReceiveMethod.CheckIn); |
| | | } |
| | | } |