|  |  | 
 |  |  | <template> | 
 |  |  |   <PageLayoutWithBg class="index-page-wrapper" :title="'首页'" :need-auth="false"> | 
 |  |  |   <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-searchbar-wrapper"> | 
 |  |  |       <BlSearchbar v-model.trim="searchValue"></BlSearchbar> | 
 |  |  |     <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 { useUserStore } from '@/stores/modules/user'; | 
 |  |  | import { RectDown } from '@nutui/icons-vue-taro'; | 
 |  |  | import Taro from '@tarojs/taro'; | 
 |  |  | import { LocationUtils, trim } from '@12333/utils'; | 
 |  |  | 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 searchValue = ref(''); | 
 |  |  | const { findAreaCodeFromName } = useAllAreaList(); | 
 |  |  |  | 
 |  |  | const queryState = reactive({ | 
 |  |  |   searchValueTrim: '', | 
 |  |  | const { searchValue, queryState, handleSearch, infiniteLoadingProps, queryMenuState } = useTaskList( | 
 |  |  |   { | 
 |  |  |     cityCode: computed(() => findAreaCodeFromName(locationCity.value)), | 
 |  |  |     enabled: computed(() => !!findAreaCodeFromName(locationCity.value)), | 
 |  |  |   } | 
 |  |  | ); | 
 |  |  |  | 
 |  |  | onMounted(async () => { | 
 |  |  |   try { | 
 |  |  |     await setLocationCity(); | 
 |  |  |   } catch (error) {} | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | const handleSearch = _.debounce(function () { | 
 |  |  |   queryState.searchValueTrim = trim(searchValue.value); | 
 |  |  | }, 300); | 
 |  |  |  | 
 |  |  | const userStore = useUserStore(); | 
 |  |  |  | 
 |  |  | function goCitySelect() { | 
 |  |  |   Taro.navigateTo({ | 
 |  |  |     url: RouterPath.citySelect, | 
 |  |  |   }); | 
 |  |  | } | 
 |  |  | // onMounted(async () => { | 
 |  |  | //   if (!isSetMatchMakingIdentity.value) { | 
 |  |  | //     Taro.navigateTo({ | 
 |  |  | //       url: RouterPath.toggleMatchMakingIdentity, | 
 |  |  | //     }); | 
 |  |  | //   } | 
 |  |  | // }); | 
 |  |  |  | 
 |  |  | 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"> | 
 |  |  | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   .city-btn { | 
 |  |  |   .home-searchbar-wrapper { | 
 |  |  |     padding: 32px 0; | 
 |  |  |     display: flex; | 
 |  |  |     align-items: center; | 
 |  |  |  | 
 |  |  |     .city-btn-text { | 
 |  |  |       max-width: 200px; | 
 |  |  |       @include ellipsis; | 
 |  |  |       margin-right: 12px; | 
 |  |  |     .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-searchbar-wrapper { | 
 |  |  |     padding: 32px 0; | 
 |  |  |   .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> |