110 lines
2.7 KiB
Vue
110 lines
2.7 KiB
Vue
![]() |
<script setup lang="ts">
|
||
|
import { nextTick, ref } from 'vue'
|
||
|
import { getBannerApi, getHotRecommendApi, getNoticeBartApi } from '@/api/home'
|
||
|
import type { bannerItem, noticeBarItem } from '@/types/home'
|
||
|
import { onLoad, onShow } from '@dcloudio/uni-app'
|
||
|
import categoryGroup from '@/pages/index/components/categoryGroup.vue'
|
||
|
import noticeBar from '@/pages/index/components/notice-bar.vue'
|
||
|
import { getTopCategoryApi } from '@/api/catogory'
|
||
|
import { useCartStore, useMemberStore } from '@/stores'
|
||
|
import { getCartTotalNumApi } from '@/api/cart'
|
||
|
import hotRecommend from '@/pages/index/components/hotRecommend.vue'
|
||
|
|
||
|
//轮播图
|
||
|
const bannerList = ref<bannerItem[]>([])
|
||
|
const getBannerListData = async () => {
|
||
|
const res = await getBannerApi()
|
||
|
bannerList.value = res.result
|
||
|
}
|
||
|
//公告
|
||
|
const noticeBarList = ref<noticeBarItem[]>([])
|
||
|
const getNoticeBarData = async () => {
|
||
|
const res = await getNoticeBartApi()
|
||
|
noticeBarList.value = res.result
|
||
|
}
|
||
|
//分类
|
||
|
const categoryList = ref()
|
||
|
const getTopCategoryListData = async () => {
|
||
|
const res = await getTopCategoryApi()
|
||
|
categoryList.value = res.result
|
||
|
}
|
||
|
//热卖推荐
|
||
|
const hotRecommendList = ref()
|
||
|
const getHotRecommend = async () => {
|
||
|
const res = await getHotRecommendApi()
|
||
|
hotRecommendList.value = res.result
|
||
|
}
|
||
|
//商品列表
|
||
|
const shopGoodsListRef = ref()
|
||
|
|
||
|
const getIndexData = () => {
|
||
|
return Promise.all([
|
||
|
getBannerListData(),
|
||
|
getNoticeBarData(),
|
||
|
getTopCategoryListData(),
|
||
|
getHotRecommend(),
|
||
|
])
|
||
|
}
|
||
|
|
||
|
onLoad(() => {
|
||
|
getIndexData()
|
||
|
// 首页分享
|
||
|
// #ifdef MP-WEIXIN
|
||
|
uni.showShareMenu({
|
||
|
withShareTicket: true,
|
||
|
menus: ['shareAppMessage'],
|
||
|
})
|
||
|
// #endif
|
||
|
})
|
||
|
|
||
|
onShow(() => {
|
||
|
nextTick(() => {
|
||
|
shopGoodsListRef.value.refresh()
|
||
|
})
|
||
|
|
||
|
const cartStore = useCartStore()
|
||
|
//首页初始化设置购物车角标
|
||
|
if (useMemberStore().profile) {
|
||
|
getCartTotalNumApi().then((res) => {
|
||
|
cartStore.setCartTotalNum(res.result)
|
||
|
})
|
||
|
} else {
|
||
|
cartStore.setCartTotalNum(0)
|
||
|
}
|
||
|
cartStore.setCartTabBadge()
|
||
|
})
|
||
|
|
||
|
const handleRefresh = async (status: number) => {
|
||
|
//触发刷新状态
|
||
|
if (status === 2) {
|
||
|
getIndexData()
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
<template>
|
||
|
<shop-goods-list
|
||
|
ref="shopGoodsListRef"
|
||
|
@refresher-status-changed="handleRefresh"
|
||
|
:options="{
|
||
|
auto: false,
|
||
|
}"
|
||
|
>
|
||
|
<template #top>
|
||
|
<shop-goods-search />
|
||
|
</template>
|
||
|
<template #middle>
|
||
|
<shop-swiper :list="bannerList" v-if="bannerList" />
|
||
|
<noticeBar :list="noticeBarList" />
|
||
|
<category-group :list="categoryList" v-if="categoryList" />
|
||
|
<hot-recommend :list="hotRecommendList" />
|
||
|
<uni-section title="商品列表" type="line"></uni-section>
|
||
|
</template>
|
||
|
</shop-goods-list>
|
||
|
</template>
|
||
|
|
||
|
<style lang="scss">
|
||
|
page {
|
||
|
background-color: #f9f9f9;
|
||
|
}
|
||
|
</style>
|