zhengyiming
8 天以前 5fc0cba8af1a9e9b1cc41fa65c8a4db89e82ee3e
apps/bMiniApp/src/pages/home/index.vue
@@ -6,27 +6,22 @@
      </div>
    </template>
    <div class="home-header">
      <!-- <div class="home-searchbar-wrapper">
        <div class="searchbar-container">
          <BlSearchbar
            v-model.trim="searchValue"
            placeholder="搜索任务"
            @search="handleSearch"
            @change="handleSearch"
          ></BlSearchbar>
      <div class="home-searchbar-wrapper">
        <div class="city-btn-wrapper">
          <div class="city-btn">
            <img :src="IconLocaltion" class="city-btn-icon" />
            <div class="city-btn-text">{{ locationCity }}</div>
          </div>
        </div>
        <div class="city-btn" @click="goCitySelect">
          <img :src="IconLocaltion" class="city-btn-icon" />
          <div class="city-btn-text">{{ locationCity }}</div>
        </div>
      </div> -->
      <div class="home-banner-wrapper">
        <div class="reset-localtion" @click="resetLocation">重新定位</div>
      </div>
      <!-- <div class="home-banner-wrapper">
        <nut-swiper :auto-play="3000">
          <nut-swiper-item v-for="(item, index) in list" :key="index">
            <img :src="item" class="banner-img" draggable="false" />
          </nut-swiper-item>
        </nut-swiper>
      </div>
      </div> -->
    </div>
    <ProTabs
      v-model="queryState.orderType"
@@ -63,7 +58,7 @@
      :key="queryState.orderType"
    >
      <template #renderItem="{ item }">
        <!-- <TaskCard @click="goTaskDetail(item)" /> -->
        <FlexJobCard @click="goFlexJobDetail(item)" :showFooterLeft="false" />
      </template>
    </InfiniteLoading>
  </PageLayoutWithBg>
@@ -76,26 +71,35 @@
import Taro from '@tarojs/taro';
import { LocationUtils, trim } from '@12333/utils';
import IconLogo from '@/assets/home/icon-logo.png';
import { ProTabs, ProTabPane } from '@12333/components';
import { ProTabs, ProTabPane, FlexJobCard } from '@12333/components';
import { HomeOrderType } from './constants';
import { useInfiniteLoading } from '@12333/hooks';
import { OrderInputType, Gender } from '@12333/constants';
import * as orderServices from '@12333/services/api/Order';
import {
  EnumPagedListOrder,
  EnumTaskRecommendStatus,
  EnumTaskReleaseStatus,
  EnumUserGender,
} from '@12333/constants';
import * as taskServices from '@12333/services/apiV2/task';
import _ from 'lodash';
import HomeQueryMenuView from './HomeQueryMenuView.vue';
import HomeQueryPositionMenuView from './HomeQueryPositionMenuView.vue';
import IconLocaltion from '@/assets/task/icon-localtion.png';
import IconLocaltion from '@/assets/home/icon-localtion.png';
import { setLocationCity } from '@/utils';
const { locationCity } = useUser();
const userStore = useUserStore();
const queryMenuState = reactive({
  gender: '' as any as Gender,
  genderLimit: '' as any as EnumUserGender,
  age: [15, 65],
  identity: '',
  certificateType: '',
});
const queryPositionState = reactive({
  position: [],
  position: [] as string[],
});
const queryState = reactive({
@@ -104,24 +108,36 @@
const { infiniteLoadingProps } = useInfiniteLoading(
  ({ pageParam }) => {
    let params: API.FrontOrderListInput = {
    let params: API.GetTaskInfosQuery = {
      pageModel: {
        rows: 20,
        page: pageParam,
        orderInput: [
          queryState.orderType === HomeOrderType.Recommend
            ? { property: 'isRecommend', order: OrderInputType.Desc }
            : { property: 'lastShelfTime', order: OrderInputType.Desc },
            ? { property: 'createdTime', order: EnumPagedListOrder.Desc }
            : {},
        ],
      },
      // keywords: 'string',
      // time: '2025-08-08T02:58:58.756Z',
      // cityCode: 'string',
      // settlementCycle: 10,
      // benefitCodes: ['string'],
      genderLimit: queryMenuState.genderLimit,
      // status: 10,
      releaseStatus: EnumTaskReleaseStatus.InProcess,
    };
    return orderServices.getFrontOrderList(params, {
    if (queryState.orderType === HomeOrderType.Recommend) {
      params.recommendStatus = EnumTaskRecommendStatus.Yes;
    }
    return taskServices.getTaskInfos(params, {
      showLoading: false,
    });
  },
  {
    queryKey: ['orderServices/getFrontOrderList', queryState, queryMenuState, queryPositionState],
    queryKey: ['taskServices/getTaskInfos', queryState, queryMenuState, queryPositionState],
  }
);
@@ -148,6 +164,18 @@
function handleMenuSelectPositionClose() {
  selectPositionItem.value?.toggle?.();
}
function goFlexJobDetail(item: API.GetFlexTaskListOutput) {
  Taro.navigateTo({
    url: `${RouterPath.flexJobDetail}?id=${item.taskId}`,
  });
}
async function resetLocation() {
  try {
    await setLocationCity();
  } catch (error) {}
}
</script>
<style lang="scss">
@@ -167,14 +195,40 @@
    margin-left: 24px;
  }
  .city-btn {
  .home-searchbar-wrapper {
    padding: 32px 0 28px;
    display: flex;
    align-items: center;
    .city-btn-text {
      max-width: 200px;
      @include ellipsis;
      margin-right: 12px;
    .city-btn-wrapper {
      flex: 1;
      min-width: 0;
      .city-btn {
        display: flex;
        align-items: center;
        padding-right: 36px;
        color: boleGetCssVar('text-color', 'primary');
        .city-btn-icon {
          width: 40px;
          height: 40px;
        }
        .city-btn-text {
          max-width: 200px;
          @include ellipsis;
          margin-left: 12px;
          font-size: 30px;
        }
      }
    }
    .reset-localtion {
      font-weight: 400;
      font-size: 24px;
      color: boleGetCssVar('color', 'primary');
      line-height: 28px;
    }
  }