zhengyiming
4 天以前 acd6c55ea7b11e06130c20bcd5ffd98c8e880a1f
apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue
@@ -1,23 +1,32 @@
<template>
  <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
    <ContentScrollView style="background-color: transparent">
      <Cell :title="'客房服务员'" titleSize="large">
        <div class="taskDetail-time">2025年2月5日 至 2025年3月5日</div>
      <Cell :title="detail.name" titleSize="large">
        <div class="taskDetail-time">
          {{
            `${dayjs(detail.beginTime).format('YYYY年MM月DD日')}至${dayjs(detail.endTime).format(
              'YYYY年MM月DD日'
            )}`
          }}
        </div>
        <div class="task-card-welfare-wrapper">
          <div class="task-card-welfare-list">
            <div class="task-card-welfare-list-item">日结</div>
            <div class="task-card-welfare-list-item">男女不限</div>
            <div class="task-card-welfare-list-item">包三餐</div>
            <div class="task-card-welfare-list-item">
              {{ EnumSettlementCycleText[detail.settlementCycle] }}
            </div>
          </div>
          <TaskPrice :value="212" />
          <TaskPrice
            :value="toThousand(detail.serviceFee ?? 0)"
            :unit="BillingMethodEnumUnit[detail.billingMethod]"
          />
        </div>
        <div class="taskDetail-address-wrapper">
          <div class="taskDetail-address-title-wrapper">
            <img :src="IconLocaltion" class="taskDetail-address-title-icon" />
            <div class="taskDetail-address-title">宁波柏悦酒店</div>
            <div class="taskDetail-address-title">{{ detail?.addressName ?? '' }}</div>
          </div>
          <div class="taskDetail-address-info-wrapper">
            <div class="taskDetail-address-info">宁波市鄞州区东钱湖大堰路188号宁波柏悦酒店</div>
            <div class="taskDetail-address-info">{{ detail?.addressDetail ?? '' }}</div>
            <RectRight :size="8" class="taskDetail-address-info-icon" />
          </div>
        </div>
@@ -25,11 +34,12 @@
      <Cell :show-title="false">
        <CellChunk title="福利信息">
          <div class="taskDetail-welfare-list">
            <TaskDetailWelfareItem :icon="IconLocaltion" text="高温补贴" />
            <TaskDetailWelfareItem :icon="IconLocaltion" text="高温补贴" />
            <TaskDetailWelfareItem :icon="IconLocaltion" text="高温补贴" />
            <TaskDetailWelfareItem :icon="IconLocaltion" text="高温补贴" />
            <TaskDetailWelfareItem :icon="IconLocaltion" text="高温补贴" />
            <TaskDetailWelfareItem
              v-for="benefit in detail.benefits"
              :key="benefit.benefitCode"
              :icon="setOSSLink(benefit.benefitField2)"
              :text="benefit.benefitContent"
            />
          </div>
        </CellChunk>
      </Cell>
@@ -40,9 +50,13 @@
<script setup lang="ts">
import { useQuery } from '@tanstack/vue-query';
import Taro from '@tarojs/taro';
import * as orderServices from '@12333/services/api/Order';
import * as taskServices from '@12333/services/apiV2/task';
import IconLocaltion from '@/assets/flexJob/icon-localtion.png';
import { TaskPrice, TaskDetailWelfareItem } from '@12333/components';
import dayjs from 'dayjs';
import { setOSSLink, toThousand } from '@12333/utils';
import { RectRight } from '@nutui/icons-vue-taro';
import { BillingMethodEnumUnit, EnumSettlementCycleText } from '@12333/constants';
defineOptions({
  name: 'JobDetail',
@@ -53,7 +67,7 @@
// const props = withDefaults(defineProps<Props>(), {});
const router = Taro.useRouter();
const taskId = router.params?.id ?? '';
const id = router.params?.id;
const {
  isLoading,
@@ -61,20 +75,106 @@
  data: detail,
  refetch,
} = useQuery({
  queryKey: ['orderServices/getOrdeForDetail', taskId],
  queryKey: ['taskServices/getTaskInfo', id],
  queryFn: async () => {
    return await orderServices.getOrdeForDetail(
      { id: taskId },
    return await taskServices.getTaskInfo(
      { id: id },
      {
        showLoading: false,
      }
    );
  },
  placeholderData: () => ({} as API.OrderInfoDto),
  onSuccess(data) {},
  placeholderData: () => ({} as API.GetTaskInfoQueryResult),
});
</script>
<style lang="scss">
@import '@/styles/common.scss';
.jobApplicationDetail-page-wrapper {
  .taskDetail-time {
    font-size: 24px;
    color: boleGetCssVar('text-color', 'regular');
    line-height: 36px;
    margin-bottom: 16px;
  }
  .task-card-welfare-wrapper {
    display: flex;
    align-items: flex-start;
    padding-bottom: 48px;
    border-bottom: 1px solid #d9d9d9;
    margin-bottom: 12px;
    .task-card-welfare-list {
      flex: 1;
      display: flex;
      min-width: 0;
      flex-wrap: wrap;
      min-height: 40px;
      row-gap: 6px;
      column-gap: 18px;
      margin-right: 10px;
      .task-card-welfare-list-item {
        font-size: 24px;
        color: #ff7d00;
        line-height: 36px;
      }
    }
  }
  .taskDetail-address-wrapper {
    padding: 28px 32px 14px;
    background: #f9fbff;
    border-radius: 8px;
    .taskDetail-address-title-wrapper {
      display: flex;
      align-items: center;
      margin-bottom: 22px;
      .taskDetail-address-title-icon {
        width: 40px;
        height: 40px;
        margin-right: 8px;
      }
      .taskDetail-address-title {
        flex: 1;
        min-width: 0;
        @include ellipsis;
        font-size: 28px;
        color: boleGetCssVar('text-color', 'primary');
        line-height: 42px;
      }
    }
    .taskDetail-address-info-wrapper {
      display: flex;
      align-items: center;
      .taskDetail-address-info {
        flex: 1;
        min-width: 0;
        @include ellipsis;
        font-weight: 400;
        font-size: 24px;
        color: boleGetCssVar('text-color', 'regular');
        line-height: 36px;
      }
      .taskDetail-address-info-icon {
        color: boleGetCssVar('text-color', 'secondary');
        margin-left: 10px;
      }
    }
  }
  .taskDetail-welfare-list {
    display: flex;
    flex-wrap: wrap;
    row-gap: 24px;
  }
}
</style>