mall_client/zyhs3_uniapp/components/homeGood.vue

363 lines
8.3 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>