店铺列表和店铺详情分页功能添加

This commit is contained in:
2022-06-11 15:18:39 +08:00
parent 1f2a85c2d7
commit e82b7d74ce
13 changed files with 877 additions and 809 deletions

View File

@@ -22,11 +22,12 @@ const goods = id => {
} }
// 店铺列表 // 店铺列表
const shops = (categoryId) => { const shops = (categoryId,page) => {
return request({ return request({
url: 'mall/shops', url: 'mall/shops',
data: { data: {
category_id: categoryId category_id: categoryId,
page:page
} }
}) })
} }
@@ -39,12 +40,13 @@ const shopsDetail = (shopId) => {
} }
// 店铺商品 // 店铺商品
const shopsGoods = (shop_id, category_id) => { const shopsGoods = (shop_id, category_id,page) => {
return request({ return request({
url: 'mall/goods', url: 'mall/goods',
data: { data: {
shop_id, shop_id,
category_id category_id,
page,
} }
}) })
} }

View File

@@ -28,7 +28,7 @@
</scroll-view> </scroll-view>
</view> </view>
<view class="right"> <view class="right">
<scroll-view scroll-y="true" class="scroll-view-right"> <scroll-view scroll-y="true" class="scroll-view-right" @scrolltolower='lower'>
<block v-if="goods.length > 0"> <block v-if="goods.length > 0">
<view class="goods-item" v-for="(item,index) in goods" :key="index" <view class="goods-item" v-for="(item,index) in goods" :key="index"
@click="onGoods(item.goods_id)"> @click="onGoods(item.goods_id)">
@@ -39,7 +39,7 @@
<view class="price">{{item.price.price_min || '0'}} <view class="price">{{item.price.price_min || '0'}}
<view class="price-type"> <view class="price-type">
<text> DT积分</text> <text> DT积分</text>
<text class="kucun"> 库存量:1222</text> <text class="kucun"> 库存量:{{item.stock}}</text>
</view> </view>
</view> </view>
</view> </view>
@@ -70,12 +70,14 @@
category_id : '', category_id : '',
classify : [], classify : [],
goods : [], goods : [],
pages : {} has_more:true,
page:1,
} }
}, },
onLoad(e) { onLoad(e) {
this.ShopId = this.$Route.query.ShopId this.ShopId = this.$Route.query.ShopId
shopsDetail(this.ShopId).then(res => { shopsDetail(this.ShopId).then(res => {
console.log(res);
this.classify = [{ this.classify = [{
category_id: '', category_id: '',
name: '全部商品', name: '全部商品',
@@ -90,14 +92,19 @@
}) })
}) })
}, },
onPullDownRefresh() {
this.has_more = true;
this.page = 1;
this.getGoods()
},
methods: { methods: {
getGoods() { getGoods() {
uni.showLoading({ uni.showLoading({
title: '加载中...' title: '加载中...'
}) })
shopsGoods(this.ShopId, this.category_id).then(res => { shopsGoods(this.ShopId, this.category_id,this.page).then(res => {
this.goods = res.data this.goods = this.goods.concat(res.data);
this.pages = res.page this.has_more = res.page.has_more;
uni.hideLoading() uni.hideLoading()
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
@@ -106,9 +113,19 @@
}) })
}) })
}, },
lower(){
if(this.has_more){
this.page = this.page + 1;
this.has_more = true;
this.getGoods()
}
},
selectClassify(id) { selectClassify(id) {
if (id === this.category_id) return; if (id === this.category_id) return;
this.category_id = id; this.category_id = id;
this.page = 1;
this.goods =[];
this.has_more = true;
this.getGoods() this.getGoods()
}, },
search() { search() {

View File

@@ -15,17 +15,15 @@
<view>店铺评分:<span>5.0</span></view> <view>店铺评分:<span>5.0</span></view>
</view> </view>
</view> </view>
<view class="shopInfo-title-right" >在售{{item.goods_count}}<uni-icons class="icons" type="right" size="14" color="grey" /></view> <view class="shopInfo-title-right">在售{{item.goods_count}}
<uni-icons class="icons" type="right" size="14" color="grey" />
</view>
</view> </view>
</view> </view>
</block> </block>
<block v-else> <block v-else>
<view class="vertical pages-empty"> <view class="vertical pages-empty">
<u-empty <u-empty icon="http://cdn.uviewui.com/uview/empty/list.png" textColor="#999" text="暂无相关店铺">
icon="http://cdn.uviewui.com/uview/empty/list.png"
textColor="#999"
text="暂无相关店铺"
>
</u-empty> </u-empty>
</view> </view>
</block> </block>
@@ -39,29 +37,42 @@
export default { export default {
data() { data() {
return { return {
shopsArr : [], shopsArr: [],
classify : [], classify: [],
shopsPage: {}, // shopsPage: {},
page: 1,
has_more: true,
}; };
}, },
mounted() { mounted() {
this.getShops() this.getShops()
}, },
onReachBottom() {
if (this.has_more) {
this.page = this.page + 1;
this.getShops();
}
},
methods: { methods: {
getShops() { getShops() {
shops(this.categoryId).then(res => { shops(this.categoryId, this.page).then(res => {
console.log(res) console.log(res)
this.shopsArr = res.shops.data if (this.page == 1) {
this.shopsPage= res.shops.page this.shopsArr = [];
this.classify = [{ this.classify = [{
name: "全部", name: "全部",
category_id: "" category_id: ""
}].concat(res.categories) }].concat(res.categories)
}
this.shopsArr = this.shopsArr.concat(res.shops.data);
this.has_more = res.shops.page.has_more;
uni.stopPullDownRefresh() uni.stopPullDownRefresh()
}) })
}, },
onTabs(e) { onTabs(e) {
this.categoryId = e.category_id this.categoryId = e.category_id
this.page = 1;
this.has_more = true;
this.getShops() this.getShops()
}, },
toShop(id) { toShop(id) {
@@ -74,26 +85,33 @@
} }
}, },
onPullDownRefresh() { onPullDownRefresh() {
this.getShops() this.category_id = '';
this.page = 1;
this.has_more = true;
this.getShops();
}, },
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.pages-empty{ .pages-empty {
height: 70vh; height: 70vh;
} }
.content { .content {
background: $window-color; background: $window-color;
min-height: 100vh; min-height: 100vh;
} }
// 筛选 // 筛选
.classify-tabs { .classify-tabs {
background: white; background: white;
} }
.shop-List{
.shop-List {
padding: $padding; padding: $padding;
.shopInfo { .shopInfo {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@@ -104,9 +122,11 @@
background-color: #fff; background-color: #fff;
border-radius: $radius; border-radius: $radius;
margin-top: 20rpx; margin-top: 20rpx;
&:first-child{
&:first-child {
margin-top: 0; margin-top: 0;
} }
.shopInfo-title-left { .shopInfo-title-left {
width: 60%; width: 60%;
display: flex; display: flex;
@@ -118,6 +138,7 @@
padding-left: 90rpx; padding-left: 90rpx;
min-height: 90rpx; min-height: 90rpx;
box-sizing: border-box; box-sizing: border-box;
.shop-logo { .shop-logo {
position: absolute; position: absolute;
left: 0; left: 0;
@@ -127,6 +148,7 @@
border-radius: 10rpx; border-radius: 10rpx;
border: solid 1rpx #f9f9f9; border: solid 1rpx #f9f9f9;
} }
.shop-title { .shop-title {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -137,10 +159,12 @@
margin-left: $margin; margin-left: $margin;
color: #999; color: #999;
width: 100%; width: 100%;
span { span {
color: $text-price; color: $text-price;
padding-left: 4rpx; padding-left: 4rpx;
} }
.shop-titl { .shop-titl {
font-size: 32rpx; font-size: 32rpx;
color: #333; color: #333;
@@ -153,12 +177,14 @@
} }
} }
} }
.shopInfo-title-right { .shopInfo-title-right {
width: 40%; width: 40%;
text-align: right; text-align: right;
font-size: 26rpx; font-size: 26rpx;
color: gray; color: gray;
.icons{
.icons {
vertical-align: bottom; vertical-align: bottom;
margin-top: 2rpx; margin-top: 2rpx;
} }

BIN
static/.DS_Store vendored

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -20376,7 +20376,12 @@ var render = function() {
"v-uni-scroll-view", "v-uni-scroll-view",
{ {
staticClass: _vm._$g(19, "sc"), staticClass: _vm._$g(19, "sc"),
attrs: { "scroll-y": "true", _i: 19 } attrs: { "scroll-y": "true", _i: 19 },
on: {
scrolltolower: function($event) {
return _vm.$handleViewEvent($event)
}
}
}, },
[ [
_vm._$g(20, "i") _vm._$g(20, "i")
@@ -20454,7 +20459,12 @@ var render = function() {
), ),
attrs: { _i: "29-" + $31 } attrs: { _i: "29-" + $31 }
}, },
[_vm._v("库存量:1222")] [
_vm._v(
"库存量:" +
_vm._$g("29-" + $31, "t0-0")
)
]
) )
], ],
1 1

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long