From 0231109223d2ab5995d0d6e721ef4ea1ad8cccfd Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期五, 14 二月 2025 09:13:57 +0800 Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/flexJobMiniApp --- apps/bMiniApp/src/pages/home/index.vue | 207 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 190 insertions(+), 17 deletions(-) diff --git a/apps/bMiniApp/src/pages/home/index.vue b/apps/bMiniApp/src/pages/home/index.vue index e3d38b0..4c9777e 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" @click="goCitySelect"> + <img :src="IconLocaltion" class="city-btn-icon" /> + <div class="city-btn-text">{{ locationCity }}</div> + </div> + </div> + <div class="reset-localtion">閲嶆柊瀹氫綅</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,157 @@ 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 orderServices from '@12333/services/api/Order'; +import _ from 'lodash'; +import HomeQueryMenuView from './HomeQueryMenuView.vue'; +import HomeQueryPositionMenuView from './HomeQueryPositionMenuView.vue'; +import IconLocaltion from '@/assets/home/icon-localtion.png'; 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.FrontOrderListInput = { + pageModel: { + rows: 20, + page: pageParam, + orderInput: [ + queryState.orderType === HomeOrderType.Recommend + ? { property: 'isRecommend', order: OrderInputType.Desc } + : { property: 'lastShelfTime', order: OrderInputType.Desc }, + ], + }, + }; + + return orderServices.getFrontOrderList(params, { + showLoading: false, + }); + }, + { + queryKey: ['orderServices/getFrontOrderList', 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.FrontOrderList) { + Taro.navigateTo({ + url: `${RouterPath.flexJobDetail}?id=${item.id}`, + }); +} </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