<template> 
 | 
  <PageLayoutWithBg class="index-page-wrapper" :title="''" :need-auth="false"> 
 | 
    <template #left> 
 | 
      <div class="menu-btn-wrapper menu-logo"> 
 | 
        <img :src="IconLogo" class="logo" /> 
 | 
      </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> 
 | 
        <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"> 
 | 
        <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> 
 | 
    <ProTabs 
 | 
      v-model="queryState.orderType" 
 | 
      name="home-tab" 
 | 
      :showPaneContent="false" 
 | 
      :showSmile="false" 
 | 
      class="home-tabs" 
 | 
      isTransparent 
 | 
      title-gutter="8" 
 | 
      title-scroll 
 | 
    > 
 | 
      <ProTabPane :title="`推荐`" :pane-key="HomeOrderType.Recommend"></ProTabPane> 
 | 
      <ProTabPane :title="`最新`" :pane-key="HomeOrderType.LastShelfTime"></ProTabPane> 
 | 
      <template #right> 
 | 
        <Menu> 
 | 
          <MenuItem title="筛选" ref="selectItem"> 
 | 
            <HomeQueryMenuView 
 | 
              v-model:query="queryMenuState" 
 | 
              @close="handleMenuSelectClose" 
 | 
            ></HomeQueryMenuView> 
 | 
          </MenuItem> 
 | 
        </Menu> 
 | 
      </template> 
 | 
    </ProTabs> 
 | 
    <InfiniteLoading 
 | 
      scrollViewClassName="common-infinite-scroll-list home-list" 
 | 
      v-bind="infiniteLoadingProps" 
 | 
      :key="queryState.orderType" 
 | 
    > 
 | 
      <template #renderItem="{ item }"> 
 | 
        <TaskCard @click="goTaskDetail(item)" v-bind="item" /> 
 | 
      </template> 
 | 
    </InfiniteLoading> 
 | 
  </PageLayoutWithBg> 
 | 
</template> 
 | 
  
 | 
<script setup lang="ts"> 
 | 
import { useUser } from '@/hooks'; 
 | 
import Taro from '@tarojs/taro'; 
 | 
import { setLocationCity } from '@/utils'; 
 | 
import _ from 'lodash'; 
 | 
import IconLogo from '@/assets/home/icon-logo.png'; 
 | 
import { TaskCard, ProTabs, ProTabPane } from '@12333/components'; 
 | 
import HomeQueryMenuView from './HomeQueryMenuView.vue'; 
 | 
import IconLocaltion from '@/assets/task/icon-localtion.png'; 
 | 
import { useAllAreaList, useTaskList, HomeOrderType } from '@12333/hooks'; 
 | 
import { useAccessLogin } from '@/hooks'; 
 | 
  
 | 
const { locationCity } = useUser(); 
 | 
  
 | 
const { findAreaCodeFromName } = useAllAreaList(); 
 | 
  
 | 
const { searchValue, queryState, handleSearch, infiniteLoadingProps, queryMenuState } = useTaskList( 
 | 
  { 
 | 
    cityCode: computed(() => findAreaCodeFromName(locationCity.value)), 
 | 
    enabled: computed(() => !!findAreaCodeFromName(locationCity.value)), 
 | 
  } 
 | 
); 
 | 
  
 | 
onMounted(async () => { 
 | 
  try { 
 | 
    await setLocationCity(); 
 | 
  } catch (error) {} 
 | 
}); 
 | 
  
 | 
function goCitySelect() { 
 | 
  Taro.navigateTo({ 
 | 
    url: RouterPath.citySelect, 
 | 
  }); 
 | 
} 
 | 
  
 | 
const list = ref([ 
 | 
  'https://storage.360buyimg.com/jdc-article/NutUItaro34.jpg', 
 | 
  'https://storage.360buyimg.com/jdc-article/NutUItaro2.jpg', 
 | 
  'https://storage.360buyimg.com/jdc-article/welcomenutui.jpg', 
 | 
  'https://storage.360buyimg.com/jdc-article/fristfabu.jpg', 
 | 
]); 
 | 
  
 | 
const selectItem = ref(); 
 | 
  
 | 
function handleMenuSelectClose() { 
 | 
  selectItem.value?.toggle?.(); 
 | 
} 
 | 
  
 | 
function goTaskDetail(item: API.GetTaskInfosQueryResultItem) { 
 | 
  Taro.navigateTo({ 
 | 
    url: `${RouterPath.taskDetail}?id=${item.id}&from=apply`, 
 | 
  }); 
 | 
} 
 | 
  
 | 
const goTaskApply = useAccessLogin((item: API.GetTaskInfosQueryResultItem) => { 
 | 
  console.log('item: ', item); 
 | 
}); 
 | 
</script> 
 | 
  
 | 
<style lang="scss"> 
 | 
@import '@/styles/common.scss'; 
 | 
  
 | 
.index-page-wrapper { 
 | 
  .menu-logo { 
 | 
    padding: 0; 
 | 
  
 | 
    .logo { 
 | 
      width: 96px; 
 | 
      height: 64px; 
 | 
    } 
 | 
  } 
 | 
  
 | 
  .home-searchbar-wrapper { 
 | 
    padding: 32px 0; 
 | 
    display: flex; 
 | 
  
 | 
    .searchbar-container { 
 | 
      flex: 1; 
 | 
      min-width: 0; 
 | 
    } 
 | 
  
 | 
    .city-btn { 
 | 
      display: flex; 
 | 
      align-items: center; 
 | 
      padding-left: 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; 
 | 
      } 
 | 
    } 
 | 
  } 
 | 
  
 | 
  .home-banner-wrapper { 
 | 
    .banner-img { 
 | 
      width: 100%; 
 | 
      height: 260px; 
 | 
      object-fit: cover; 
 | 
    } 
 | 
  } 
 | 
  
 | 
  .home-header { 
 | 
    padding: 0 boleGetCssVar('size', 'body-padding-h'); 
 | 
  } 
 | 
} 
 | 
  
 | 
.home-list { 
 | 
  @include infiniteLoadingInTabBarPage; 
 | 
} 
 | 
</style> 
 |