From 186234cb3833e620aa0ae46212fe337eb2d6e77d Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期四, 13 三月 2025 13:07:02 +0800
Subject: [PATCH] feat: 接口对接

---
 apps/bMiniApp/src/pages/home/index.vue |  215 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 198 insertions(+), 17 deletions(-)

diff --git a/apps/bMiniApp/src/pages/home/index.vue b/apps/bMiniApp/src/pages/home/index.vue
index e3d38b0..83ab4f0 100644
--- a/apps/bMiniApp/src/pages/home/index.vue
+++ b/apps/bMiniApp/src/pages/home/index.vue
@@ -1,11 +1,66 @@
 <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 city-btn" @click="goCitySelect">
-        <div class="city-btn-text">{{ locationCity }}</div>
-        <RectDown :size="12" />
+      <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="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="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>
+    <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="selectPositionItem">
+            <HomeQueryPositionMenuView
+              v-model:query="queryPositionState"
+              @close="handleMenuSelectPositionClose"
+            ></HomeQueryPositionMenuView>
+          </MenuItem>
+          <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 }">
+        <FlexJobCard @click="goFlexJobDetail(item)" :showFooterLeft="false" />
+      </template>
+    </InfiniteLoading>
   </PageLayoutWithBg>
 </template>
 
@@ -14,39 +69,165 @@
 import { useUserStore } from '@/stores/modules/user';
 import { RectDown } from '@nutui/icons-vue-taro';
 import Taro from '@tarojs/taro';
-import { LocationUtils } from '@12333/utils';
+import { LocationUtils, trim } from '@12333/utils';
+import IconLogo from '@/assets/home/icon-logo.png';
+import { ProTabs, ProTabPane, FlexJobCard } from '@12333/components';
+import { HomeOrderType } from './constants';
+import { useInfiniteLoading } from '@12333/hooks';
+import { OrderInputType, Gender } from '@12333/constants';
+import * as flexWorkerServices from '@12333/services/api/FlexWorker';
+import _ from 'lodash';
+import HomeQueryMenuView from './HomeQueryMenuView.vue';
+import HomeQueryPositionMenuView from './HomeQueryPositionMenuView.vue';
+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,
+  age: [15, 65],
+});
+
+const queryPositionState = reactive({
+  position: [],
+});
+
+const queryState = reactive({
+  orderType: HomeOrderType.Recommend,
+});
+
+const { infiniteLoadingProps } = useInfiniteLoading(
+  ({ pageParam }) => {
+    let params: API.GetFlexTaskListInput = {
+      pageModel: {
+        rows: 20,
+        page: pageParam,
+        orderInput: [{ property: 'taskId', order: OrderInputType.Desc }],
+      },
+    };
+
+    return flexWorkerServices.getFlexTaskWorkerArrangeList(params, {
+      showLoading: false,
+    });
+  },
+  {
+    queryKey: [
+      'flexWorkerServices/getFlexTaskByArrange',
+      queryState,
+      queryMenuState,
+      queryPositionState,
+    ],
+  }
+);
 
 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();
+const selectPositionItem = ref();
+
+function handleMenuSelectClose() {
+  selectItem.value?.toggle?.();
+}
+
+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">
 @import '@/styles/common.scss';
 
 .index-page-wrapper {
-  .city-btn {
+  .menu-logo {
+    padding: 0;
+
+    .logo {
+      width: 96px;
+      height: 64px;
+    }
+  }
+
+  .nut-menu__item + .nut-menu__item {
+    margin-left: 24px;
+  }
+
+  .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;
+    }
+  }
+
+  .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>

--
Gitblit v1.9.1