food_wechat/pages/main/order.vue
sszdot 0a61462be1 【类 型】:fix
【原  因】:orderItem订单列表组件 商品列表容器 超长时的横向滚动 由于父级的swiper的横向切换 冒泡导致失效
【过  程】:用uniapp 官方组件scroll-view 替代自定义的overflow auto样式
【影  响】:

# 类型 包含:
# feat:新功能(feature)
# fix:修补bug
# docs:文档(documentation)
# style: 格式(不影响代码运行的变动)
# refactor:重构(即不是新增功能,也不是修改bug的代码变动)
# test:增加测试
# chore:构建过程或辅助工具的变动
2024-12-24 14:07:08 +08:00

148 lines
4.3 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>
<!-- topbar -->
<u-navbar title="确认订单" bgColor="#d43030" :titleStyle="{ color: '#FFF'}" :autoBack="true" placeholder>
<view class="u-nav-slot" slot="left">
<u-icon name="arrow-left" color="#fff" size="19"></u-icon>
</view>
</u-navbar>
<!-- tab -->
<view class="tabListBox m-l-24 m-r-24 m-t-24 flex msb pr">
<view class="tabBox flex mac mc fz32" v-for="(tab,index) in tabList" :key="index" @click="handlerTab(index)"
:class="current===index?'fb':''">
<view class="pr">
<badge :cou="orderCouArr[index]"></badge>
{{tab}}
</view>
</view>
</view>
<!-- tabLine -->
<view class="tabLineBox flex mac mc z-top" :style="{ left: tabLineLeft + 'rpx' }">
<view class="tabLine rad8 bg-m"></view>
</view>
<!-- 订单页 swiper -->
<swiper class="swiperClass m-t-12" :current="current" @animationfinish="animationfinish">
<swiper-item class="swiperClass">
<scroll-view scroll-y class="swiperClass">
<view v-if="orderList_unpaid.length>0">
<orderItem v-for="order in orderList_unpaid" :order=order :key="order.id"></orderItem>
<u-divider class="m-r-24 m-l-24" text="没有更多了" :hairline="true"></u-divider>
<view class="extra-space2"></view>
</view>
</scroll-view>
</swiper-item>
<swiper-item class="swiperClass">
<scroll-view scroll-y class="swiperClass">
<view v-if="orderList_paid.length>0">
<orderItem v-for="order in orderList_paid" :order=order :key="order.id"></orderItem>
<u-divider class="m-r-24 m-l-24" text="没有更多了" :hairline="true"></u-divider>
<view class="extra-space2"></view>
</view>
</scroll-view>
</swiper-item>
<swiper-item class="swiperClass">
<scroll-view scroll-y class="swiperClass">
<view v-if="orderList_refund.length>0">
<orderItem v-for="order in orderList_refund" :order=order :key="order.id"></orderItem>
<u-divider class="m-r-24 m-l-24" text="没有更多了" :hairline="true"></u-divider>
<view class="extra-space2"></view>
</view>
</scroll-view>
</swiper-item>
</swiper>
<!-- tabbar -->
<view>
<tabbar></tabbar>
</view>
</view>
</template>
<script>
export default {
data() {
return {
tabList: ['待支付', '已付款', '退款售后'], // tab标签
current: 1, //当前激活标签
tabLineLeft: 24 ,//tabLine 样式表的left值
isPressed: false, //立即支付按钮是否锁定
}
},
onLoad() {
//初始化 tapline的位置
this.lineOffset(this.current)
},
computed: {
//未付款订单
orderList_unpaid() {
return this.$store.state.orderList.filter(item => item.main_status === '未付款')
},
//已付款 已完成 并且没有申请退款的订单
orderList_paid() {
return this.$store.state.orderList.filter(item => {
return item.main_status === '已付款' && item.refund_status === '未申请';
})
},
//申请中 已同意 主动退 拒绝退 等退款相关的订单
orderList_refund() {
return this.$store.state.orderList.filter(item => item.refund_status !== '未申请')
},
//订单数量 数组[未付款订单数量,已付款没有产生退款相关业务的订单数量,申请中 已同意 主动退 等退款的订单数量]
orderCouArr() {
return [this.orderList_unpaid.length, this.orderList_paid.length, this.orderList_refund.length]
}
},
methods: {
//点击tab标签时 设置current
handlerTab(index) {
this.current = index
},
// swiper滑动结束设置current
animationfinish(e) {
this.current = e.detail.current
},
//计算每个 tabLine 的left值
lineOffset(val) {
// 计算每个 tabLine 的left值
const tabWidth = 200
const spacing = (750 - tabWidth * this.tabList.length - 48) / (this.tabList.length -
1) // 750是屏幕宽度48是左右边距
this.tabLineLeft = 24 + val * (tabWidth + spacing) // 计算新的 left 值
}
},
watch: {
current: {
handler(val) {
//更新tapline 的位置
this.lineOffset(val)
}
}
}
}
</script>
<style lang="scss" scoped>
.tabListBox {
height: 77rpx;
}
.tabBox {
width: 200rpx;
height: 77rpx;
}
.tabLineBox {
width: 200rpx;
height: 8rpx;
position: absolute;
transition: all .2s ease;
}
.tabLine {
width: 70rpx;
height: 8rpx;
}
.swiperClass {
height: calc(100vh - 297rpx);
}
</style>