mall_client/zyhs3_uniapp/components/homeGood.vue

363 lines
8.3 KiB
Vue
Raw Permalink Normal View History

2026-03-13 07:50:35 +00:00
<template>
<view class="waterfall">
<uv-waterfall ref="waterfall"
class="mt10"
v-model="list"
:add-time="10"
:left-gap="leftGap"
:right-gap="rightGap"
:column-gap="columnGap"
@changeList="changeList">
<!-- 第一列数据 -->
<template v-slot:list1>
<!-- 为了磨平部分平台的BUG必须套一层view -->
<view>
<!-- <view >
<uv-swiper
imgMode="widthFix"
:list="listSwiper"
:autoplay="false"
height="240"
width="120"
style="border-radius: 0;"
>
</uv-swiper>
</view> -->
<view v-for="(item, index) in list1"
@click.stop="godetail(item)"
:key="item.id"
class="waterfall-item ">
<view class="waterfall-item__image" :style="[imageStyle(item)]">
<image :src="item.image" mode="widthFix" :style="{width:item.width+'px'}"></image>
</view>
<view class="p4">
<view class="w500 m2">
{{
item.name
}}
<!-- 华为P60 香芋紫 1TB -->
</view>
<view class="flex">
<view class="baoyou">包邮</view>
<!-- <view class="youhuiquan">优惠券</view> -->
</view>
<view class="flex justify-between items-baseline">
<rkPrice new-color="#000" newPriceSlotText="" :price="{
newPrice:item.price,
oldPrice:item.price
}" ></rkPrice>
<view class="w500 t5 f10">{{item.ficti}}人购买</view>
</view>
</view>
</view>
</view>
</template>
<!-- 第二列数据 -->
<template v-slot:list2>
<!-- 为了磨平部分平台的BUG必须套一层view -->
<view>
<view v-for="(item, index) in list2"
:key="item.id"
@click.stop="godetail(item)"
class="waterfall-item">
<view class="waterfall-item__image" :style="[imageStyle(item)]">
<image :src="item.image" mode="widthFix" :style="{width:item.width+'px'}"></image>
</view>
<view class="p4">
<view class="w500 m2">
{{
item.name
}}
<!-- 华为P60 香芋紫 1TB -->
</view>
<view class="flex">
<view class="baoyou">包邮</view>
<!-- <view class="youhuiquan">优惠券</view> -->
</view>
<view class="flex justify-between items-baseline">
<rkPrice new-color="#000" newPriceSlotText="" :price="{
newPrice:item.price,
oldPrice:item.price
}" ></rkPrice>
<view class="w500 t5 f10">{{item.ficti}}人购买</view>
</view>
</view>
</view>
</view>
</template>
<view class='loadingicon acea-row row-center-wrapper' :hidden='loading==false'>
<text class='loading iconfont icon-jiazai'></text>
</view>
<view class="mores-txt flex" v-if="goodScroll">
<text>我是有底线的</text>
</view>
</uv-waterfall>
<uv-load-more :status="loadStatus"></uv-load-more>
</view>
</template>
<script>
import { guid } from '@/uni_modules/uv-ui-tools/libs/function/index.js'
import rkPrice from '@/components/rk-price.vue'
export default {
components:{
rkPrice
},
data() {
return {
tabClick: 0, //导航栏被点击
tabTitle:[
{
name:'热门推荐',
dec:'超值低价',
titleColor:'#F80B0B',
decbg:['#FF6E46','#FF3B38']
},
{
name:'电子数码',
dec:'新品发售',
titleColor:'#F80B0B',
decbg:['#FF6E46','#FF3B38']
},
{
name:'酒水冲饮',
dec:'质优价廉',
titleColor:'#F80B0B',
decbg:['#FF6E46','#FF3B38']
},
{
name:'日用百货',
dec:'清仓特价',
titleColor:'#F80B0B',
decbg:['#FF6E46','#FF3B38']
},
{
name:'美妆特价',
dec:'超值低价',
titleColor:'#F80B0B',
decbg:['#FF6E46','#FF3B38']
},
],
loadStatus:'loadmore',
params: { //精品推荐分页
page: 1,
limit: 10,
cid: 0
},
listSwiper:[
],
list: [],// 瀑布流全部数据
list1: [],// 瀑布流第一列数据
list2: [],// 瀑布流第二列数据
leftGap: 20,
rightGap: 20,
columnGap: 10
}
},
computed: {
imageStyle(item) {
return item=>{
const v = uni.upx2px(750) - this.leftGap - this.rightGap - this.columnGap;
const w = v/2;
const rate = w / item.w;
const h = rate* item.h;
return {
width: w + 'px',
height: h + 'px'
}
}
}
},
async onLoad() {
await this.get_host_product();
},
async mounted() {
await this.get_host_product();
},
methods: {
longClick(index, id, fid) {
this.tabClick = index //设置导航点击了哪一个
},
godetail(item){
goShopDetail(item.id);
},
get_host_product: function() {
if (this.goodScroll) return;
this.loading = true
this.loadStatus = 'loading';
this.params.cid = 0;
getProductHot(
this.params
).then((res) => {
this.$set(this.params, 'page', this.params.page + 1);
this.goodScroll = this.params.page > res.data.totalPage;
this.list = this.list.concat(res.data.list || []);
this.$emit('noCommodity', this.list.length);
this.loading = false
this.loadStatus = 'loadmore';
}).catch(err => {
this.loading = false
this.loadStatus = 'loadmore';
});
},
// 这点非常重要e.name在这里返回是list1或list2要手动将数据追加到相应列
changeList(e){
console.log(e,'111')
this[e.name].push(e.value);
},
// 模拟的后端数据
getData() {
return new Promise((resolve)=>{
const imgs = [
];
let list = [];
const doFn = (i)=>{
const randomIndex = Math.floor(Math.random() * 2);
return {
id: guid(),
allowEdit: i==0,
image: imgs[randomIndex].url,
w: imgs[randomIndex].width,
h: imgs[randomIndex].height,
title: i % 2 == 0 ? `(${this.list.length + i + 1})体验uv-ui框架`: `(${this.list.length + i +1})uv-ui支持多平台`,
desc: i % 2 == 0 ? `(${this.list.length + i + 1})欢迎使用uv-uiuni-app生态专用的UI框架` :
`(${this.list.length + i})开发者编写一套代码, 可发布到iOS、Android、H5、以及各种小程序`
}
};
// 模拟异步
setTimeout(() => {
for (let i = 0; i < 3; i++) {
list.push(doFn(i));
}
resolve({data:list});
}, 200)
})
}
}
}
</script>
<style>
page {
background: #f1f1f1;
}
</style>
<style scoped lang="scss">
.navTabBox {
width: 100%;
padding-bottom: 10px;
color: rgba(255, 255, 255, 1);
position: relative;
padding: 0 24rpx 0 24rpx;
display: flex;
justify-content: space-between;
z-index: 9;
&.isFixed {
z-index: 10;
position: fixed;
left: 0;
width: 100%;
/* #ifdef H5 */
top: 0;
/* #endif */
}
.click {
// color: white;
}
.longTab {
width: 94%;
.longItem {
//height: 72rpx;
display: inline-block;
// line-height: 52rpx;
text-align: center;
font-size: 28rpx;
color: #000;
white-space: nowrap;
text-overflow: ellipsis;
margin-right: 42rpx;
&.click {
font-weight: bold;
font-size: 30rpx;
color: #fff;
font-weight: bold;
}
.name {
height: 48rpx;
}
}
.underlineBox {
height: 3px;
transition: .5s;
.underline {
width: 33rpx;
height: 4rpx;
background-color: #fff;
}
}
}
.category {
height: 66rpx;
line-height: 46rpx;
z-index: 3;
// padding: 0 15rpx 0 25rpx;
.iconfont {
font-size: 24rpx;
}
}
}
$show-lines: 1;
@import '@/uni_modules/uv-ui-tools/libs/css/variable.scss';
.baoyou{
background: linear-gradient( 164deg, #FF784C 0%, #FF4C56 100%); border-radius: 1px;
color:#fff;
font-size: 18rpx;
margin: 10rpx;
padding: 4rpx 6rpx;
font-weight: 500;
}
.waterfall-item {
background: #fff;
overflow: hidden;
margin-top: 10px;
border-radius: 6px;
}
.waterfall-item__image{
background-color: #fff;
display: flex;
flex-direction: column;
justify-content: center;
}
.waterfall-item__ft {
padding: 20rpx;
background: #fff;
&__title {
margin-bottom: 10rpx;
line-height: 48rpx;
font-weight: 700;
.value {
font-size: 32rpx;
color: #303133;
}
}
&__desc .value {
font-size: 28rpx;
color: #606266;
}
&__btn {
padding: 10px 0;
}
}
</style>