Files
czg_zysh_ointment_weapp/pages/mall/community.vue
2024-03-21 15:54:39 +08:00

388 lines
9.9 KiB
Vue
Raw 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="index">
<view class="oneindex">
<view class="oneindexbox">
<view class="oneindexboxswiper" :scroll-y="true" :scroll-with-animation="true"
:enable-back-to-top="true" :style="'height:'+hh+'px'">
<view v-for="(item,index) in navList" :key="index" class="oneindexswiperitem">
<view class="oneindexswiperitem_one" :style="swiperCurrent==index?'background: #fff;':''"
:class="swiperCurrent==index?'oneindexswiperitem_ones':''" @click="orderswitch(item,index)">
{{item.title}}
</view>
</view>
</view>
</view>
<view class="towindexbox">
<swiper :current="swiperCurrent" :disable-touch='disabletouch' @animationfinish="animationfinish"
:duration='0' :vertical='true' :style="'height:'+hh+'px'">
<swiper-item v-for="(item,index) in list_" :key="index">
<scroll-view :scroll-y="true" @scrolltolower="lower" :style="'height:'+hh+'px'">
<view v-for="(item1,index1) in list_[index].data" :key="index1"
class="main-item towindexboxscrollview">
<view class="towindexboxview_box flex-start">
<image class="towindexboxview_boximage" :src="item1.host_img" mode="aspectFill">
</image>
<view class="towindexboxview_boxtext flex-colum-start">
<view class="towindexboxview_boxtextone">
{{item1.title}}
</view>
<view class="towindexboxview_boxtexttow">
销量 100+
</view>
<view class="indexboxitemlefttheretext flex-between">
<view class="flex-start">
<view class="indexboxitemlefttheretextone">
<text>¥</text>
<text>{{item1.price}}</text>
</view>
<view class="indexboxitemlefttheretexttow">
¥{{item1.y_price}}
</view>
</view>
<image src="@/static/mall/cart.png" mode="aspectFill"
@click="requestSubscribeMessage(0,item1)"
style="width: 40rpx; height: 40rpx;">
</image>
<!-- <u-number-box v-else v-model="item1.number" :min="0" button-size="12"
color="#ffffff" :bgColor="theme.cartpieces" :max="item1.stock"
iconStyle="color: #fff" @change="requestSubscribeMessage($event,item1)">
</u-number-box> -->
</view>
</view>
</view>
</view>
<view v-if="list_[index].data.length == 0 && list_[index].is_end == true"
style="margin-top:200rpx;width: 100%;" class="flex-colum">
<image :src="bgnothave" mode="" style="width: 100%;width: 100%;">
</image>
</view>
<view class="flex-colum" style="width: 100%;">
<u-loadmore :status="form.status" />
</view>
</scroll-view>
</swiper-item>
</swiper>
</view>
</view>
<bottombbar class="headinga" v-if="style_type == 2" :valuebbar='1'></bottombbar>
<bottombbar class="headinga" v-else :valuebbar='3'></bottombbar>
</view>
</template>
<script>
import bottombbar from '@/components/bottombbar.vue'
export default {
components: {
bottombbar
},
data() {
return {
bgnothave: uni.getStorageSync('bgnothave'),
style_type: uni.cache.get('loginuser').style_type,
hh: 0,
navList: [{
id: '',
title: ''
}],
navCount: 0,
valuenumber: 0,
swiperCurrent: 0, // swiper组件的current值表示当前那个swiper-item是活动的
current: 0, // tabs组件的current值表示当前活动的tab选项
list_: {},
like: '', //备注
form: {
status: 'loadmore',
},
disabletouch: true, //控制是否可以滑动
};
},
async onLoad() {
let res = await this.api.shoppingindexgoodsclass()
this.navList = res
},
onShow() {
this.shoppingindexgoodsclass()
this.$store.dispatch("actionsclassification");
},
computed: {
theme() {
return this.$store.getters.theme
},
//计算选中商品的总价
},
onReady() {
this._onReadyApi()
uni.hideLoading()
},
methods: {
animationfinish(e) {
let current = e.detail.current;
if (this.list_['list' + current].data.length < 10) {
this.form.status = 'nomore';
}
this.swiperCurrent = current;
this.current = current;
},
lower(e) {
console.log(e)
this.onReachBottom_fn(this.list_['list' + this.swiperCurrent])
},
onReachBottom_fn(list) {
if (!list.is_end) {
this.get_order_list(this.current);
} else {
this.disabletouch = false
this.form.status = 'nomore';
console.log(this.disabletouch)
this.$forceUpdate();
}
},
init_fn() {
for (let i = 0; i < this.navList.length; i++) {
this.$set(this.list_, 'list' + [i], { //全部
data: [],
page: 1,
is_end: false,
})
this.get_order_list(i);
}
console.log(this.list_)
},
async get_order_list(i) {
this.form.status = 'loading';
let page = null;
let order_type = 0
order_type = this.navList[i].id
page = this.list_['list' + i].page
let res = await this.api.shoppingindex({
classid: order_type,
page: page,
like: this.like
})
this.paging(res, this.list_['list' + i])
uni.hideLoading();
},
paging(res, list) {
if (res.length == 0) {
this.form.status = 'nomore';
list.is_end = true;
return false;
} else {
this.form.status = 'loading';
list.page = list.page + 1;
setTimeout(() => {
list.data = [...list.data, ...res];
if (res.length != 10) {
list.is_end = true;
this.form.status = 'nomore';
} else {
this.disabletouch = true
this.form.status = 'loading';
}
this.$forceUpdate();
}, 500)
}
},
async shoppingindexgoodsclass() {
let res = await this.api.shoppingindexgoodsclass()
this.navList = res
this.init_fn();
},
orderswitch(s, index) {
console.log(index, this.list_['list' + index])
if (this.list_['list' + index].data.length < 10) {
this.form.status = 'nomore';
}
this.swiperCurrent = index;
},
requestSubscribeMessage(e,s) {
console.log(e)
// this.valuenumber = e.value
// if (e == 0) {
// } else {
// }
this.$u.debounce(this.shoppingindexgoodindexsaddcar(s), 200);
},
async shoppingindexgoodindexsaddcar(s) {
console.log(s)
let res = await this.api.shoppingindexgoodindexsaddcar({
number:1,
goods_id: s.id,
spec: s.spec_title,
})
if (res == 1) {
uni.showToast({
title: '添加购物车成功',
icon: 'none'
});
}
},
_onReadyApi() {
var windowHeight = uni.getSystemInfoSync().windowHeight
var that = this
uni.createSelectorQuery().select('.headinga').boundingClientRect((res) => {
that.hh = windowHeight - res.height
that.navCount = Math.round(that.hh / 50)
}).exec()
}
},
}
</script>
<style lang="scss">
.index {
.oneindex {
background-color: #fff;
display: flex;
.oneindexbox {
width: 24%;
background-color: #f7f7f7;
overflow: auto;
.oneindexboxswiper {
width: 100%;
.oneindexswiperitem {
width: 100%;
height: 84rpx;
.oneindexswiperitem_ones::before {
position: absolute;
left: 0;
top: 0;
transform: translateY(50%);
content: '';
display: inline-block;
background: #fc821c;
width: 8rpx;
height: 40rpx;
border-radius: 0 10rpx 10rpx 0;
}
.oneindexswiperitem_one {
position: relative;
font-size: 28rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
color: #333333;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
color: #000;
height: 84rpx;
}
}
}
}
.towindexbox {
width: 76%;
.towindexboxscrollview {
margin-left: 24rpx;
.towindexboxview_box {
width: 100%;
padding: 32rpx 0 28rpx 0;
border-bottom: 1rpx solid #F6F6F6;
.towindexboxview_boximage {
background: #f8f8f8;
width: 156rpx;
height: 156rpx;
border-radius: 12rpx;
}
.towindexboxview_boxtext {
position: relative;
margin-left: 20rpx;
.towindexboxview_boxtextone {
width: 300rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 28rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #333333;
}
.towindexboxview_boxtexttow {
margin-top: 12rpx;
width: 300rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 24rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
color: #999999;
}
.indexboxitemlefttheretext {
margin-top: 20rpx;
width: 100%;
.flex-start {
.indexboxitemlefttheretextone {
text {
font-family: SourceHanSansCN-Bold, SourceHanSansCN-Bold;
font-weight: normal;
color: #FF5053;
}
text:nth-child(1) {
font-size: 24rpx;
}
text:nth-child(2) {
font-weight: bold;
font-size: 34rpx;
}
}
.indexboxitemlefttheretexttow {
margin-top: 10rpx;
margin-left: 12rpx;
font-size: 20rpx;
font-family: SourceHanSansCN-Regular, SourceHanSansCN-Regular;
font-weight: normal;
color: #999999;
}
}
}
.indexboxitemleftthere_countdown {
.indexboxitemleftthere_countdowntext {
font-family: Roboto, Roboto;
font-weight: 400;
color: #333333;
font-size: 18rpx;
}
.indexboxitemleftthere_countdowntexts {
font-family: Roboto, Roboto;
font-weight: 400;
color: #333333;
margin-left: 16rpx;
font-size: 22rpx;
}
}
}
}
}
}
}
}
</style>