zhengyiming
2025-11-07 fbb9fdb5b11cd5ecd3ff19f41738bbd3b0afb82c
fix: s
已修改12个文件
406 ■■■■ 文件已修改
apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/project.private.config.json 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/pages/task/InnerPage.vue 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/task/taskSubmitCheck/InnerPage.vue 86 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/underTakeMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Card/TaskCheckFileCard.vue 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/hooks/task.ts 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/task.ts 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/typings.d.ts 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/utils/orderUtils.ts 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue
@@ -41,6 +41,7 @@
import { Message, setOSSLink } from '@12333/utils';
import dayjs from 'dayjs';
import { goBack } from '@/utils';
import { useCheckReceiveTaskUserSubmit } from '@12333/hooks';
defineOptions({
  name: 'InnerPage',
@@ -50,22 +51,11 @@
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) {
apps/cMiniApp/project.private.config.json
@@ -23,6 +23,20 @@
        "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": "",
apps/cMiniApp/src/pages/task/InnerPage.vue
@@ -29,7 +29,7 @@
          :begin-time="item.beginTime"
          :end-time="item.endTime"
          :showActions="
            item.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn &&
            OrderUtils.isContainCheckIn(item.checkReceiveMethods) &&
            queryState.checkReceiveStatus === EnumTaskCheckReceiveStatus.Completed
          "
          @click="goSubmitTaskDetail(item)"
@@ -44,6 +44,8 @@
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',
@@ -52,27 +54,32 @@
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>
apps/cMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
@@ -11,13 +11,16 @@
    ></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>
apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
@@ -75,7 +75,7 @@
        v-if="
          from === 'hire' &&
          !(
            detail?.checkReceiveMethod === EnumTaskCheckReceiveMethod.CheckIn &&
            isContainCheckIn &&
            detail?.hireButton === GetTaskInfoQueryResultHireButton.ApplyCheckReceive
          )
        "
@@ -128,6 +128,7 @@
  EnumTaskCheckReceiveMethod,
} from '@12333/constants';
import { useAccessLogin } from '@/hooks';
import { useTaskInfo } from '@12333/hooks';
defineOptions({
  name: 'InnerPage',
@@ -141,26 +142,7 @@
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();
apps/cMiniApp/src/subpackages/task/taskSubmitCheck/InnerPage.vue
@@ -1,32 +1,47 @@
<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',
@@ -37,6 +52,18 @@
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[],
});
@@ -47,6 +74,24 @@
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) => {
@@ -56,12 +101,13 @@
  });
}
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) {
@@ -75,7 +121,3 @@
  } catch (error) {}
}
</script>
<style lang="scss">
@import '@/styles/common.scss';
</style>
apps/underTakeMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue
@@ -41,6 +41,7 @@
import { Message, setOSSLink } from '@12333/utils';
import dayjs from 'dayjs';
import { goBack } from '@/utils';
import { useCheckReceiveTaskUserSubmit } from '@12333/hooks';
defineOptions({
  name: 'InnerPage',
@@ -50,22 +51,11 @@
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) {
packages/components/src/Card/TaskCheckFileCard.vue
@@ -1,8 +1,26 @@
<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"
@@ -45,8 +63,9 @@
  Colors,
  EnumTaskUserSubmitCheckReceiveStatus,
  EnumTaskUserSubmitCheckReceiveStatusText,
  EnumTaskCheckReceiveMethod,
} from '@12333/constants';
import { setOSSLink } from '@12333/utils';
import { setOSSLink, OrderUtils } from '@12333/utils';
import dayjs from 'dayjs';
defineOptions({
@@ -59,6 +78,14 @@
  files?: string[];
  showCheckReceiveStatus?: boolean;
  /** 用户签到时间 */
  userCheckInTime?: string;
  /** 用户签出时间 */
  userCheckOutTime?: string;
  /** 验收方式 */
  checkReceiveMethods?: EnumTaskCheckReceiveMethod[];
};
const props = withDefaults(defineProps<Props>(), {
@@ -72,7 +99,7 @@
.taskCheckFileCard-wrapper {
  .taskCheckFileCard-status-wrapper {
    display: flex;
    align-items: center;
    align-items: flex-start;
    justify-content: space-between;
  }
@@ -80,7 +107,7 @@
    font-weight: 400;
    font-size: 24px;
    color: boleGetCssVar('text-color', 'regular');
    line-height: 32px;
    line-height: 44px;
  }
  .taskCheckFileCard-img-grid {
packages/hooks/task.ts
@@ -12,7 +12,7 @@
  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';
@@ -225,3 +225,76 @@
  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 };
}
packages/services/apiV2/task.ts
@@ -32,6 +32,24 @@
  });
}
/** 计算任务总服务费 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', {
packages/services/apiV2/typings.d.ts
@@ -519,6 +519,27 @@
    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;
@@ -569,10 +590,6 @@
    remark?: string;
    /** 结算金额 */
    settlementAmount?: number;
    /** 签到时间 */
    checkInTime?: string;
    /** 签出时间 */
    checkOutTime?: string;
    checkHistoryType?: EnumTaskUserSubmitCheckHistoryType;
    checkReceiveStatus?: EnumTaskUserSubmitCheckReceiveStatus;
  }
@@ -1643,6 +1660,24 @@
    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;
@@ -4101,6 +4136,8 @@
    checkHistoryType?: EnumTaskUserSubmitCheckHistoryType;
    /** 验收照片 */
    files?: string[];
    /** 验收方式 */
    checkReceiveMethods?: EnumTaskCheckReceiveMethod[];
  }
  interface GetCheckReceiveTaskUserSubmitsQuery {
@@ -4142,6 +4179,8 @@
    checkReceiveStatus?: EnumTaskUserSubmitCheckReceiveStatus;
    /** 验收时间 */
    checkReceiveTime?: string;
    /** 验收方式 */
    checkReceiveMethods?: EnumTaskCheckReceiveMethod[];
  }
  interface GetCheckReceiveTaskUserSubmitsQueryResultObjectData {
@@ -4179,6 +4218,8 @@
    endTime?: string;
    /** 任务地点名称 */
    addressName?: string;
    /** 验收方式 */
    checkReceiveMethods?: EnumTaskCheckReceiveMethod[];
  }
  interface GetCodeUrlQueryResult {
@@ -8644,10 +8685,6 @@
    taskInfoId?: string;
    /** 日期 */
    date?: string;
    /** 用户签到时间 */
    userCheckInTime?: string;
    /** 用户签出时间 */
    userCheckOutTime?: string;
    userCheckHistoryType?: EnumTaskUserSubmitCheckHistoryType;
    /** 附件 */
    files?: string[];
packages/utils/orderUtils.ts
@@ -1,4 +1,8 @@
import { EnumBillingMethod, BillingMethodEnumUnit } from '@12333/constants';
import {
  EnumBillingMethod,
  BillingMethodEnumUnit,
  EnumTaskCheckReceiveMethod,
} from '@12333/constants';
export class OrderUtils {
  static getServiceFeeText(serviceFee: number, billingMethod: EnumBillingMethod) {
@@ -7,4 +11,9 @@
    }
    return `${serviceFee ?? 0}${BillingMethodEnumUnit[billingMethod]}`;
  }
  static isContainCheckIn(checkReceiveMethods: EnumTaskCheckReceiveMethod[]) {
    if (!checkReceiveMethods) return false;
    return checkReceiveMethods.includes(EnumTaskCheckReceiveMethod.CheckIn);
  }
}