shuinishop/pages/goods/goods-list/goods-list.nvue

335 lines
8.5 KiB
Plaintext
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>
<div class="content">
<header>
<div class="header">
<div class="target" v-for="(target, index) in orderbyList" :key="index" @click="select(index)" :class="[target.selected ? 'target-on' : 'target-on1']">
<text class="target-text" :class="[target.selected ? 'target-text-on' : '']">{{ target.text }}</text>
<text v-if="target.orderbyicon" class="target-icon" :class="[target.selected ? 'target-text-on' : '']">{{ target.orderbyicon[target.orderby] }}</text>
</div>
</div>
</header>
<div class="place"></div>
<waterfall class="goods-list" column-count="2" column-width="auto">
<refresh class="refresh" @refresh="onrefresh" @pullingdown="onpullingdown" :display="refreshing ? 'show' : 'hide'">
<text class="refresh-indicator-text">{{ refreshText }}</text>
<loading-indicator class="refresh-indicator"></loading-indicator>
</refresh>
<cell v-for="goods in goodsList" :key="goods.goods_id">
<view class="product" @tap="toGoods(goods)">
<image class="product-image" mode="widthFix" :src="goods.img"></image>
<text class="product-name">{{ goods.name }}</text>
<view class="product-info">
<text class="product-info-price">{{ goods.price }}</text>
<text class="product-info-slogan">{{ goods.slogan }}</text>
</view>
</view>
</cell>
<loading class="loading" @loading="onloading" :display="loadinging ? 'show' : 'hide'">
<text class="loading-indicator-text">{{loadingText}}</text>
<loading-indicator class="loading-indicator"></loading-indicator>
</loading>
</waterfall>
</div>
</template>
<script>
export default {
data() {
return {
refreshText: '下拉刷新',
refreshing: false,
loadinging: false,
loadingText:'上拉加载',
orderbyList: [
{ text: '销量', selected: true, orderbyicon: false, orderby: 0 },
{ text: '价格', selected: false, orderbyicon: ['\ue737', '\ue736'], orderby: 0 },
{ text: '好评', selected: false, orderbyicon: false, orderby: 0 }
],
goodsList: [
{
goods_id: 0,
img: 'https://ae01.alicdn.com/kf/HTB1JC1fe.CF3KVjSZJnq6znHFXaG.jpg',
name: '商品名称商品名称商品名称商品名称商品名称',
price: '¥168',
slogan: '1235人付款'
},
{
goods_id: 1,
img: 'https://ae01.alicdn.com/kf/HTB1GSqoeWWs3KVjSZFxq6yWUXXav.jpg',
name: '商品名称商品名称商品名称商品名称商品名称',
price: '¥168',
slogan: '1235人付款'
},
{
goods_id: 2,
img: 'https://ae01.alicdn.com/kf/HTB16wepeW5s3KVjSZFNq6AD3FXaJ.jpg',
name: '商品名称商品名称商品名称商品名称商品名称',
price: '¥168',
slogan: '1235人付款'
},
{
goods_id: 3,
img: 'https://ae01.alicdn.com/kf/HTB1duHtcfBj_uVjSZFpq6A0SXXaJ.jpg',
name: '商品名称商品名称商品名称商品名称商品名称',
price: '¥168',
slogan: '1235人付款'
},
{
goods_id: 4,
img: 'https://ae01.alicdn.com/kf/HTB173epeW5s3KVjSZFNq6AD3FXai.jpg',
name: '商品名称商品名称商品名称商品名称商品名称',
price: '¥168',
slogan: '1235人付款'
},
{
goods_id: 5,
img: 'https://ae01.alicdn.com/kf/HTB1_Mefe3aH3KVjSZFjq6AFWpXaJ.jpg',
name: '商品名称商品名称商品名称商品名称商品名称',
price: '¥168',
slogan: '1235人付款'
},
{
goods_id: 6,
img: 'https://ae01.alicdn.com/kf/HTB1Lu1pe8Cw3KVjSZFuq6AAOpXaI.jpg',
name: '商品名称商品名称商品名称商品名称商品名称',
price: '¥168',
slogan: '1235人付款'
},
{
goods_id: 7,
img: 'https://ae01.alicdn.com/kf/HTB1iMife3aH3KVjSZFjq6AFWpXaA.jpg',
name: '商品名称商品名称商品名称商品名称商品名称',
price: '¥168',
slogan: '1235人付款'
},
{
goods_id: 8,
img: 'https://ae01.alicdn.com/kf/HTB1D6Sfe4iH3KVjSZPfq6xBiVXaG.jpg',
name: '商品名称商品名称商品名称商品名称商品名称',
price: '¥168',
slogan: '1235人付款'
},
{
goods_id: 9,
img: 'https://ae01.alicdn.com/kf/HTB1IjSfe4iH3KVjSZPfq6xBiVXa4.jpg',
name: '商品名称商品名称商品名称商品名称商品名称',
price: '¥168',
slogan: '1235人付款'
}
]
};
},
beforeCreate() {
const domModule = weex.requireModule('dom');
domModule.addRule('fontFace', {
fontFamily: 'iconfont',
src: "url('https://at.alicdn.com/t/font_1087442_fe5vigfwr5m.ttf')"
});
},
mounted(){
// nvue页面下关闭下拉刷新用waterfall实现下拉和上拉刷新。
const currentWebview = getCurrentPages()[getCurrentPages().length - 1].$getAppWebview();
currentWebview.setStyle({
pullToRefresh: {
support: false
},
});
this.init();
},
methods: {
init() {
this.setTitle();
},
setTitle() {
//设置标题
let catName = uni.getStorageSync('catName');
console.log('catName: ' + catName);
uni.setNavigationBarTitle({
title: catName
});
},
select(index) {
let tmpTis = this.orderbyList[index].text + '排序 ';
if (this.orderbyList[index].orderbyicon) {
let type = this.orderbyList[index].orderby == 0 ? '升序' : '降序';
if (this.orderbyList[index].selected) {
type = this.orderbyList[index].orderby == 0 ? '降序' : '升序';
this.orderbyList[index].orderby = this.orderbyList[index].orderby == 0 ? 1 : 0;
}
tmpTis += type;
}
this.orderbyList[index].selected = true;
let len = this.orderbyList.length;
for (let i = 0; i < len; i++) {
if (i != index) {
this.orderbyList[i].selected = false;
}
}
uni.showToast({ title: tmpTis, icon: 'none' });
},
onrefresh(event) {
this.refreshText = '正在刷新';
this.refreshing = true;
setTimeout(() => {
this.refreshText = '下载刷新';
this.refreshing = false;
}, 2000);
},
onpullingdown(event) {
if (event.pullingDistance <= -200) {
this.refreshText = '放开刷新';
}
},
onloading(event) {
this.loadinging = true;
setTimeout(() => {
let len = this.goodsList.length;
if(len>=40){
uni.showToast({title:'没有更多了',icon:'none'});
this.loadinging = false;
return false;
}else{
this.loadingText="正在加载...";
}
let tmpList = JSON.parse(JSON.stringify(this.goodsList));
let end_goods_id = this.goodsList[len-1].goods_id;
for(let i=1;i<=10;i++){
let row = tmpList[i-1];
row.goods_id = end_goods_id+i;
this.goodsList.push(row);
}
this.loadinging = false;
}, 1000);
}
}
};
</script>
<style>
.content {
flex-direction: column;
}
.header {
width: 750px;
height: 79px;
flex-direction: row;
justify-content: space-around;
align-items: flex-end;
position: fixed;
z-index: 99;
background-color: #fff;
top: 0;
z-index: 10;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #eee;
}
.target {
width: 150px;
height: 60px;
flex-direction: row;
justify-content: center;
align-items: center;
margin-bottom: -2px;
border-bottom-color: #fff;
}
.target-on {
border-bottom-width: 4px;
border-bottom-style: solid;
border-bottom-color: #f06c7a;
}
.target-text {
color: #aaa;
font-size: 30px;
}
.target-text-on,
.target-icon-on {
color: #555;
font-weight: 600;
}
.target-icon {
color: #aaa;
font-family: iconfont;
}
.place {
background-color: #ffffff;
height: 80px;
}
.goods-list {
width: 750px;
padding: 0 30px 30px 30px;
background-color: #ffffff;
}
.product {
width: 335px;
border-radius: 20px;
background-color: #fff;
margin: 20px 0 0 0;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
}
.product-image {
width: 335px;
height: 335px;
border-top-left-radius: 20px;
border-top-right-radius: 20px;
}
.product-name {
width: 335px;
padding: 10px 13px;
text-align: center;
overflow: hidden;
font-size: 30px;
}
.product-info {
flex-direction: row;
justify-content: space-between;
align-items: flex-end;
width: 335px%;
padding: 10px 13px;
}
.product-info-price {
color: #e65339;
font-size: 30px;
font-weight: 600;
}
.product-info-slogan {
color: #807c87;
font-size: 24px;
}
.refresh {
width: 690;
height: 150;
margin-top: -50;
align-items: center;
justify-content: center;
}
.refresh-indicator-text {
color: #888888;
font-size: 30px;
text-align: center;
}
.refresh-indicator {
height: 60px;
width: 60px;
color: #000;
}
.loading {
width: 690;
height: 120;
flex-direction: row;
align-items: center;
justify-content: center;
}
.loading-indicator-text {
color: #888888;
font-size: 30px;
text-align: center;
}
.loading-indicator {
height: 60px;
width: 60px;
color: #000;
}
</style>