Files
frontend-app/pages/home/home.vue
T

530 lines
302 KiB
Vue
Raw Normal View History

2025-03-20 08:46:07 +08:00
<template>
<view class="home_warp">
<!-- 带背景的头部 -->
<view class="home_header_warp">
<view class="header_title_warp">
<up-image src="/static/home/logo.png" width="104" height="30" bgColor="#f1f6ff00" @click="jumpMine"></up-image>
<view class="header_right_warp">
<view class="language_warp" style="width: 200rpx;justify-content: flex-start;" @click="jumpSearch">
<up-image src="/static/home/search.png" width="18" height="18" bgColor="#f1f6ff00"></up-image>
<text class="search_msg_warp">搜索</text>
</view>
<view class="language_warp" @click="languageShow = true">
<text>CN</text>
<up-image src="/static/common/down.png" width="10" height="10" bgColor="#f1f6ff00"></up-image>
</view>
</view>
</view>
<up-swiper
:list="swiperList"
height="140"
radius="10"
>
<template #indicator>
<view
class="indicator-num"
>
<text class="indicator-num__text">{{ currentNum + 1 }}/{{ swiperList.length }}</text>
</view>
</template>
</up-swiper>
</view>
2025-03-23 20:36:06 +08:00
<!-- banner图 -->
2025-03-20 08:46:07 +08:00
<view class="home_sort_warp">
<view class="sort_warp">
<view v-for="item in sortList" :key="item.id" class="sort_item">
<up-image :src="item.url" width="40" height="32" bgColor="#f1f6ff00"></up-image>
<view class="sort_item_title">{{item.name}}</view>
</view>
</view>
</view>
<!-- 带灰色背景的内容 -->
<view class="home_content_warp">
<!-- 转盘 -->
<up-image src="/static/home/turntable.png" width="100%" height="134" bgColor="#f1f6ff00" @click="jumpTurntable"></up-image>
<!-- 好物优选 -->
<view class="product_comm yx_warp">
<view class="product_title">
<view class="product_title_left">
<text class="product_title_z">好物优选</text>
<text>品牌5折秒杀福利</text>
</view>
<view class="product_title_f" style="font-weight: bold;" @click="jumpPrdference">
<text style="margin-right: 10rpx;">立即抢购</text>
<view style="margin-top: 10rpx;"><up-image src="/static/common/right_y_st2.png" width="12" height="12" bgColor="#f1f6ff00"></up-image></view>
</view>
</view>
<view class="product_content">
2025-03-23 20:36:06 +08:00
<up-loading-icon :show="productLoading"></up-loading-icon>
2025-03-20 08:46:07 +08:00
<view class="product_item" v-for="item in yxProduct" :key="item.id">
<up-image :src="item.url" width="100%" height="100" bgColor="#f1f6ff00" shape="square" radius='16'></up-image>
<view class="product_f_item">
2025-03-23 20:36:06 +08:00
<view class="product_f_item_name">{{item.title}}</view>
<view class="product_f_item_price product_f_item_price_yx">优选价 {{item.price}}元</view>
2025-03-20 08:46:07 +08:00
</view>
</view>
</view>
</view>
2025-03-23 20:36:06 +08:00
<!-- 爆款专区-->
2025-03-20 08:46:07 +08:00
<view class="product_comm hx_warp">
<view class="product_title">
<view class="product_title_left">
<text class="product_title_z">爆款专区</text>
<text>品牌5折秒杀福利</text>
</view>
<view class="product_title_f" style="font-weight: bold;" @click="jumpWelcome">
<text style="margin-right: 10rpx;">立即抢购</text>
<view style="margin-top: 10rpx;"><up-image src="/static/common/right_y_st2.png" width="12" height="12" bgColor="#f1f6ff00"></up-image></view>
</view>
</view>
<view class="product_content">
2025-03-23 20:36:06 +08:00
<up-loading-icon :show="productLoading"></up-loading-icon>
<view class="product_item" v-for="item in faddishProduct" :key="item.id">
2025-03-20 08:46:07 +08:00
<up-image :src="item.url" width="100%" height="100" bgColor="#f1f6ff00" shape="square" radius='16'></up-image>
<view class="product_f_item">
2025-03-23 20:36:06 +08:00
<view class="product_f_item_name">{{item.title}}</view>
<view class="product_f_item_price product_f_item_price_hx">优选价 {{item.price}}元</view>
2025-03-20 08:46:07 +08:00
</view>
</view>
</view>
</view>
<!-- 热门榜 -->
2025-03-23 20:36:06 +08:00
<!-- <view class="hot_warp">
2025-03-20 08:46:07 +08:00
<view class="hot_title_warp">
<view class="title_warp">
<text class="title_">热门榜</text>
<view class="good_warp">
<view style="margin-top: 10rpx;">
<up-image src="/static/home/hot.png" width="20" height="20" bgColor="#f1f6ff00"></up-image>
</view>
<view class="good__msg_warp">精选好货</view>
</view>
</view>
<view class="more_warp">
<text style="margin-right: 10rpx;">更多</text>
<up-image src="/static/common/right_y_st.png" width="12" height="12" bgColor="#f1f6ff00"></up-image>
</view>
</view>
<view class="hot_content_warp">
<view v-for="item in hotList" :key="item.id" class="hot_item">
<up-image :src="item.url" width="100%" height="100" bgColor="#f1f6ff00"></up-image>
<view class="hot_item_name">{{item.name}}</view>
<view class="hot_item_price">
<up-image src="/static/home/hot_price.png" width="12" height="12" bgColor="#f1f6ff00"></up-image>
<view >¥{{item.price}}</view>
</view>
</view>
</view>
2025-03-23 20:36:06 +08:00
</view> -->
2025-03-20 08:46:07 +08:00
<!-- 哈希商学院 -->
<view class="business_school_warp">
<view>
<view class="title">哈希商学院</view>
<view class="msg">
<text>带你快速入门</text>
<view style="margin-top: 10rpx;"><up-image src="/static/common/right.png" width="16" height="16" bgColor="#f1f6ff00"></up-image></view>
</view>
</view>
</view>
<!-- 为您精选 -->
<choiceness/>
</view>
<up-action-sheet :actions="languageList" :show="languageShow" cancelText="取消" @close="languageShow=false"></up-action-sheet>
</view>
</template>
<script>
import choiceness from '@/components/choiceness/choiceness.vue';
2025-03-23 20:36:06 +08:00
import { searchList } from '@/api/product.js';
import { SEARCH_TYPE } from '@/utils/enumUtils.js'
2025-03-20 08:46:07 +08:00
export default {
components:{choiceness},
data() {
return {
swiperList:[
'/static/home/banner02.png',
'/static/home/banner01.png',
],
currentNum:0,
sortList:[
{
id:1,
name:"家居百货",
url:"/static/home/sort/1.png"
},{
id:2,
name:"水果生鲜",
url:"/static/home/sort/2.png"
},{
id:3,
name:"爆款新品",
url:"/static/home/sort/3.png"
},{
id:4,
name:"服装服饰",
url:"/static/home/sort/4.png"
},{
id:5,
name:"箱包皮具",
url:"/static/home/sort/5.png"
},{
id:6,
name:"手机数码",
url:"/static/home/sort/6.png"
},{
id:7,
name:"营养保健",
url:"/static/home/sort/7.png"
},{
id:8,
name:"个护家清",
url:"/static/home/sort/8.png"
},{
id:9,
name:"厨房生活",
url:"/static/home/sort/9.png"
},{
id:10,
name:"全部",
url:"/static/home/sort/10.png"
},
],
languageShow:false,// 语言选项
languageList:[
{
name: '中文',
key:"CN"
}, {
name: '英文',
key:"EN"
},
],
currentLanguage:{},
2025-03-23 20:36:06 +08:00
yxProduct:[],// 好物优选列表
faddishProduct:[],// 爆款专区
2025-03-20 08:46:07 +08:00
hotList:[
{
id:1,
name:"中文中文中文中文中文",
url:"/static/common/product_def.png",
price:99,
},{
id:2,
name:"中文中文中文中文",
url:"/static/common/product_def.png",
price:99,
},{
id:3,
name:"中文中文中文中文中文",
url:"/static/common/product_def.png",
price:99,
},{
id:4,
name:"中文中文中文中文中文",
url:"/static/common/product_def.png",
price:99,
},
2025-03-23 20:36:06 +08:00
],// 热门
productLoading:false,
2025-03-20 08:46:07 +08:00
}
},
2025-03-23 20:36:06 +08:00
mounted() {
this.querySearchList(SEARCH_TYPE.SOMETHING);// 好物专区
this.querySearchList(SEARCH_TYPE.EXPLOSIVE);// 爆单专区
},
2025-03-20 08:46:07 +08:00
methods: {
jumpTurntable(){
uni.navigateTo({
url:'/pages/turntable/turntable',
})
},
jumpPrdference(){
uni.navigateTo({
url:'/pages/preference/preference',
})
},
jumpWelcome(){
uni.navigateTo({
url:'/pages/welcome/welcome',
})
},
jumpSearch(){
uni.navigateTo({
url:'/pages/search/search',
})
},
2025-03-23 20:36:06 +08:00
/**
* 查询商品列表
*/
async querySearchList(type){
this.productLoading = true;
const params = {
type,
page:1,
pageSize:3,
}
const resp = await searchList(params);
if(resp && resp.bizcode === 100){
if(type === SEARCH_TYPE.SOMETHING){// 好物优选
this.yxProduct = resp.data;
}else if(type === SEARCH_TYPE.EXPLOSIVE){// 爆单专区
this.faddishProduct = resp.data;
}
}
this.productLoading = false;
}
2025-03-20 08:46:07 +08:00
}
}
</script>
<style lang="scss" scoped>
.home_warp{
background: $app-bj;
height: 100vh;
overflow: auto;
position: relative;
}
.home_header_warp{
background-color: #FF8031;
height: 500rpx;
padding: 100rpx 30rpx 0rpx;
.header_title_warp{
display: flex;
justify-content: space-between;
margin-bottom: 30rpx;
}
.header_right_warp{
display: flex;
align-items: center;
}
.language_warp{
display: flex;
justify-content: space-between;
align-items: center;
width: 100rpx;
background: #FFFFFF;
border-radius: 16rpx;
border: 1px solid #000000;
margin-left: 20rpx;
padding: 10rpx 20rpx;
}
.search_msg_warp{
margin-left: 20rpx;
font-weight: 500;
font-size: 26rpx;
color: #333333;
}
}
.home_sort_warp{
position: absolute;
top: 460rpx;
padding: 30rpx;
width: calc(100% - 60rpx);
.sort_warp{
background: #ffffff;
padding: 20rpx;
border-radius: 20rpx;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.sort_item{
width: 18%;
text-align: center;
margin-bottom: 20rpx;
}
.sort_item_title{
font-weight: 500;
font-size: 22rpx;
color: #333333;
}
}
}
.home_content_warp{
margin-top: 162rpx;
padding: 0 30rpx;
.product_comm{
border-radius: 30rpx;
padding: 10rpx;
color: #FFFFFF;
margin-top: 20rpx;
}
.yx_warp{
background: linear-gradient(0deg,#FF3D3A, #FF8830 );
}
.hx_warp{
background: linear-gradient(0deg, #2C2B2D, #4D403A);
}
.product_title{
display: flex;
justify-content: space-between;
align-items: center;
padding: 10rpx 20rpx;
}
.product_title_z{
font-weight: 800;
font-size: 36rpx;
color: #FFFFFF;
margin-right: 10rpx;
}
.product_title_left{
font-size: 20rpx;
color: #FFFFFF;
display: flex;
align-items: flex-end;
}
.product_title_f{
font-size: 20rpx;
color: #FFFFFF;
margin-left: 10rpx;
display: flex;
align-items: center;
}
.product_content{
background-color: #FFFFFF;
padding: 20rpx;
border-radius: 24rpx;
display: flex;
2025-03-23 20:36:06 +08:00
// justify-content: space-between;
2025-03-20 08:46:07 +08:00
align-items: center;
.product_item{
width: 32%;
border-radius: 16rpx;
position: relative;
2025-03-23 20:36:06 +08:00
margin-right: 20rpx;
2025-03-20 08:46:07 +08:00
}
.product_f_item{
position: absolute;
bottom: 0;
width: calc(100% - 40rpx);
height: 66rpx;
background: #F5F5F5;
border-radius: 24rpx;
padding: 10rpx 20rpx;
font-size: 20rpx;
color: #000000;
}
.product_f_item_name{
width: 172rpx;
white-space: nowrap; /* 防止文本换行 */
overflow: hidden; /* 隐藏溢出的文本 */
text-overflow: ellipsis; /* 使用省略号表示溢出的内容 */
font-weight: bold;
}
.product_f_item_price{
text-align: center;
border-radius: 10rpx;
color: #FFFFFF;
margin-top: 10rpx;
padding: 2rpx 0;
}
.product_f_item_price_yx{
background: #F92321;
}
.product_f_item_price_hx{
background: #4D403A;
}
}
// 热门榜
.hot_warp{
background: #FFFFFF;
border-radius: 30rpx;
padding: 20rpx;
margin-top: 20rpx;
.hot_title_warp{
display: flex;
justify-content: space-between;
align-items: center;
.title_warp{
display: flex;
align-items: center;
}
.title_{
font-weight: 800;
font-size: 36rpx;
color: #111111;
margin-right: 10rpx;
}
.good_warp{
display: flex;
align-items: center;
}
.good__msg_warp{
background: #FFF8F3;
/* border-radius: 18rpx; */
border-top: 2rpx solid #FF5E2F;
border-right: 2rpx solid #FF5E2F;
border-bottom: 2rpx solid #FF5E2F;
font-size: 20rpx;
color: #FF7A29;
padding: 4rpx 14rpx 4rpx 20rpx;
margin-left: -6px;
border-radius: 0rpx 18rpx 18rpx 0rpx;
}
.more_warp{
display: flex;
font-size: 24rpx;
color: #666666;
}
}
.hot_content_warp{
display: flex;
justify-content: space-between;
margin-top: 20rpx;
.hot_item{
width: 24%;
}
.hot_item_name{
font-weight: 800;
font-size: 24rpx;
color: #000000;
width: 160rpx;
white-space: nowrap; /* 防止文本换行 */
overflow: hidden; /* 隐藏溢出的文本 */
text-overflow: ellipsis; /* 使用省略号表示溢出的内容 */
}
.hot_item_price{
display: flex;
justify-content: center;
font-size: 20rpx;
color: #FF7A29;
text-align: center;
margin-top: 10rpx;
}
}
}
// 哈希商学院
.business_school_warp{
margin-top: 20rpx;
height: 150rpx;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABWQAAAFACAYAAAA7/3WCAAAAAXNSR0IArs4c6QAAIABJREFUeF7svdmPLcl93/mNyOUstdyl79bNvs3bbLLZXCRR5iZDlkc0aVJDawPGMmAY8AAzA8NPM4D/Aj3N4wAzT4Zn/DB+GAOSBiNbsmxaJmhBbEoim6S4Nalms8ne7n7r3lrPlhkx+P0iIvOslcs5p86pqiiieLvOyYzlG7/I5ZO//IbAmv9oreWrryLsXELYjRDE+nAjSaKLWqlntJRPC6VvCIintNBXIMRFaGxr6E1AbAmgCaCpgVgAEQC55t31zfMKeAW8Al4Br4BXwCvgFfAKeAXOoQLa9lksqe+u/CUVf+LFltXprPX7xIVeVoV+YJal7Mxyp0nu5pEfjhMfDl/hDAU0oITAABp9AF37e6A1DoTALoR+orV4KKAfCS3uCqHuCClv93qDJ3u9jUO5jbTzGMmrH0byu0KodRa67HlsZX346gO9JbudbREE2ynEBrS6BIjLAvoahLgOzf9eghaXAb0NgH437G+DgCyAte/nygT2FXsFvAJeAa+AV8Ar4BXwCngFTkSBepfkM0HBCRGEE6rmREbAV3KGFFhyYC65+KUPROX26/keiVSub5YCCysor8AUOavg5SHZJXSlRD9cv4v6W3EAbHEz1Zp5erNfLEeMuedRcbPq6jh301zQEpDtATiExpEW2BUQe4DeAfRjQNyH0PekEPf7id5JtHysU32odbp36XJr7+9cFfsLacmSCql3VbSkxgwX+xWtw+jto2sI4xeE0i8Iqd8HLd4D6GcAcQFASwNt+lcADQg0oBED/BucQBN9FeugwNpG8DqIcwbaUHyGOAOd9F3wCngFvAJeAa/A6Vag7Ok64x2VuisAQRd8AnqsAD0TMFSqYGJjrccuMEs2fHy3Wa0Q3B9M9sfW476f2YuyFY0VUHO3+cRc4t6iZOCNx80Sm3SiRU/Gv4vbBd0gFcW9i+OxeXi83kNttOO3vPExCo2Hycz5NzJ6FTXkSsRIZXX7VXxcG21blXqmZsg6Xjj2pSu36Hg0rX4nxyInhKtnVljacMyqLLvdeBtn7uey/KZwe/fRsIQTcbfgHMEq437sOBSEel0dZ9WpMx0qzjFTYApw1mxfa/QgdE8AHQBH9K8AdrXE7RB4N4zEG3Eg3miJwU/ie637n/iEGCwyHhdVVi0VFlX5eDmUDRsk3aeggsupUjdkIJ/VWr8AjReEEO8D8B4A15ZVvy/3FCqwVhF8CvVb9yaXvNBe92749nkFvAJeAa+AV+AsK1D2dD0BOkuJIqBnAdkiYFSq/MmNxttZ9sa3LPD0QLbmwIztdu6B7ET8LxbIFsb9goCsWtY8RkUgO5IhW/EmUxOLHQOyquyRcTSwC3UfA3vF2ztOPB31zns8Og7I1lNg+vEhB7LTSx0Hx7N0qQOYqUV0vOFHg+5BwlCITOHxQw8CzIai7Ami5OGxzLiXKaqoWXV1nFX3nEA2KzZrlx0HOhxJAYSBuB9CvxuGeCMM8EYgxE+0Uu/2lLydJumOFM1Hv/XS+mTNVjzSlBnSetu8fHf/mlLNFwOtfwHAhwD9fkBcAUDZsM6KgOwH/I9XwJtQnJcYWORZ/Lxo5vvpFfAKeAW8Al6BE1ag7OnaA1kzMLMAiANTcjzVa3w8i+6gZ4y/Wps7v8UEqCwZeMsCfovpRf1SJkHJKQOy1tlxUWBpYpqsGsjWBM3FelTPkHWWBdMzZKdn7Jc9Hk2bX9MAZf1IN3t6IDuqYHGclFO86HSy9kDWdpNhuYWyQqArhNgTQu9BYA/AAwnxeiNUP4yC4Lsheq997n2b98optNytVnpa/stHelsd9a4JGVxXWn8AQr8kgF8AxIcAPOe9X5c7+Ke69JVG7qlW7nQ1vuSF9unqlG+tV8Ar4BXwCngFzpYCZU/XHsgeD2TLviKMojvoGeFVc7e1DVafITv5UrSNsIWMWSHwWVCGbGE9NXtD+aCVLAsWnSF7yoFs2eORz5C1GcijCdI+Q3bWeWg+y4Ks1OOOG27euykoBHQU4K1miB9GAb6bKvHDRIvXgyC9G+nG/S9+gDxpV/OzMqz1l/cOrieD4MNShJ+A0B+FxvsBXAVAWbEXPYxdTUCculpXFsGnTqnT2eCyd3ins3e+1V4Br4BXwCtwzhU4b6c5D2Q9kF3klPdA1gPZ4+LJA9lcnToZsh7IjkZXZllgP57wi/VAttThfeGWBWO18riwhUj+S8hISmgp8SQQeCSA+1rg9Wagv9+I9SuhSl9dVcbsieIsrbX8xgNc6yeDZ6XCh7XELwiFj0PgwxbGlhpEv5FXIFPgRCPY637iCpy3O9UTF9hX6BXwCngFvAKrVOC8neY8kPVAdpHzzQNZD2Q9kJ1cHHCaJh7I5qrM7SHrgSwrUKTjrLm5bCDr6p1YaG0ImBNCCqR+0AjwahzIb0LgOyrBq2Gj/843bm3c/10hrKHKIs9Y08s6MZxFMPar93u3ZCI+JbT4NIBfhMSz0LxI19byu+prOJMKnFgEn0n11r9T5+1Odf1HxLfQK+AV8AqsVAF/Wlip/HNX7oGsB7JzB9FQAR7IeiB7noFsNvoF1gg5mDp+MazxV8BPf4bseHTY/lurjVkYYaZnqtt9StD5Rb3KH9lXCmSHpoCUvAjYvhS4L4V+JxDy2+1Q/1UU6a9/9rnGz8QJQdml46zf0zq49eDwai9pvF/o9GMC8pcE8AkAH6DM4fJD57f0CkxRYOkR7FVfqQL+znul8vvKvQJeAa9AVQWWfdhedvlV+zvv9uftMub0ANnRkS1rBVnWo3XeVc29h6wF2yUPCBNry5fcb975vez9T/2iXnYc1tNDdnj0io7UJvXOvSrt9pw8bpQLvGI97CJcsyvib8Zrm5gHdv95j0czPWQzr9ByMyFr7wy5qy/qNVwvDZCtQZoKsgc6Y4soFgHZmb2ZaVngjldFcVROp3zYy8VTUalF563iRb3G++XaNb2/eavn06NonoxmyIqpi8I7W4MAUGGgf9wM8Uoz1H8ZBMFfhyp8/cEtPPhHQqRFGs7z/XwqFNRMWbFfe7v3vAjEpwTEZzRlxQr9HmhBXrHhPA33+55zBZYauedcW9/9pSswM3wXc15dXvvXvX3L6/loyXYAy8qxroersu0/KVnnrees9WdePU7d/iUnyom9Q3ZCApbs9gm1pn415TMV7Y2wWwyoBOl02TR5Vs1kO4tuzKr2rCpIyW/8po/orFc7a7e76A66aoeL7ulOe6DOOkGUiL8FSzlS3Pj4130FOAc0yxmoWXFaFIaz49tdSM0ANgsal/oesozrpgz92GdjAkw+cBoNvLLdKjwuDIE/A4FnBLj9vOj6aHFAdhjEjUHjChNp9nQ13xQDQldZPl68j9bmWdZYhuwETiw5UMP7Ha/x8fOycLyLjs/ZylVmw2w8K2heZ1MX72M8OwvH8c+z41RFUF+2bRMZ3kaN/MHElGFgIKtNSEggkUI/CKV4N47w7YbUX9FKf/3r72/8dJkWBss5agP42tv6choMnhcKn4TQvyIgfkUAN8sK6rfzChyrwNIi1+vuFVi+Ah7ILl/jpdbggexS5a1beNENR91y/X7VFKg9DiXP67XLr9aNE9u6ZLdPrD11Kzp7QLZapHkgWzdyVrRfNmDVxnnRrfVAdp2B7PBou3bOArIWPhaEU1nwVrhdSSBbWI7t4tKAbBGxH5tQ2bSccWKsmiE7XHwGZA2xtKjObDH+IKSsbos6HsxbX7a/1e3kgezogBVZXSzrqHs8kJ2eITseI0qbV/ijAG83Q/x5GOHPhcY3wkb001+7KXYWNebTji4LLfsrt/WVKO19SgrxdyDEL0PoD0CLpxdaiS/sfCtwVu5gzvcontveeyB7yofeA9m1HMBlXeCtZWfXuFG1x6Hkeb12+WuqWclur2nr82Z5IGu0mJXF6zNk1yyEPZCtNCDnM0PWA9kisOYUyuNjLEN23YDsWHatOy57IFvpcJBtnGfIriuQdVnajlQf309FGdSULWvz
background-size: 100% 100%;
background-position: center; /* 将图片居中显示 */
display: grid;
align-items: center;
padding: 0 30rpx;
.title{
font-weight: 800;
font-size: 32rpx;
color: #0987F8;
}
.msg{
font-size: 20rpx;
color: #666666;
display: flex;
align-items: center;
margin-top: 10rpx;
}
}
}
</style>