|
|
<template> <view> <view class="tabs"> <u-tabs :list="tab_list" :is-scroll="false" :current="current" bg-color="#f6f6f6" active-color="#1833F2" @change="tabsChange"></u-tabs> </view> <swiper :style="{height: 'calc('+ windowHeight +'px - 110rpx)', width: '750rpx'}" :current="current" @change="swiperChange"> <swiper-item v-for="(tabItem, tabIndex) in tab_list" :key="tabIndex"> <scroll-view class="lf-w-100 lf-h-100 lf-p-l-32 lf-p-r-32 lf-border-box" :scroll-y="true" :refresher-enabled="true" refresher-background="#f6f6f6" @scrolltolower="scrolltolower" :refresher-triggered="tabItem.isRefresher" @refresherrefresh="onRefresherrefresh"> <view class="card" v-for="(item, index) in tabItem.list" :key="item.id" @click="$url('/pages/supply/order/detail?q_sn='+ item.q_sn)"> <view class="lf-row-between upper"> <view class="lf-font-28 lf-color-333">订单状态</view> <view class="order-btn" :class="stateClass(item.state)">{{ item.state }}</view> </view> <view class="lf-row-between lower"> <view>报价单号 {{ item.q_sn }}</view> <view>{{ item.deadline }}</view> </view> </view> <view class="loading-more"> <text v-if="tabItem.list.length" :class="{'loading-more-text': tabItem.loading_class}">{{ tabItem.loading_text }}</text> <lf-nocontent v-else class="lf-m-t-50"></lf-nocontent> </view> </scroll-view> </swiper-item> </swiper> </view></template>
<script> export default { data(){ return { current: 0, tab_list: [{ name: '全部', state_name: '', loading_class: true, loading_text: '正在加载中...', page: 1, isPage: true, isRefresher: false, // scroll-view下拉刷新状态,当前默认没有触发
list: [] },{ name: '审核中', state_name: '审核中', loading_class: true, loading_text: '正在加载中...', page: 1, isPage: true, isRefresher: false, list: [] },{ name: '已完成', state_name: '已完成', loading_class: true, loading_text: '正在加载中...', page: 1, isPage: true, isRefresher: false, list: [] }], page_size: 10, windowHeight: 0, } }, computed: { stateClass(){ return function(val){ let class_name = { '已通过': 'quoted-price', '待发起': 'wait', '待审核': 'passed', '未通过': 'refuse' } return class_name[val]; } } }, onLoad(){ this.windowHeight = uni.getSystemInfoSync().windowHeight; this.getData(); }, methods: { getData(options){ let item = this.tab_list[this.current]; this.$http(this.API.API_SUPPLIER_QUOTATIONORDERLIST, { state: item.state_name, page: item.page, page_size: this.page_size }).then(res => { if(options && options.refresh){ item.isRefresher = false; } // item.isPage = res.isPage; // 是否有下一页
if(!item.isPage){ item.loading_class = false; item.loading_text = '已加载全部数据~' } if(item.page == 1){ item.list = res.data.list; }else{ item.list.push(...res.data.list); } }) }, tabsChange(current){ this.current = current; if(this.tab_list[this.current].list.length <= 0){ this.getData(); } }, swiperChange(event){ this.current = event.detail.current; if(event.detail.source == '') return; // 如果是被动出发,没有事件类型则不做处理
if(this.tab_list[this.current].list.length <= 0){ this.getData(); } }, // 滚动到底部
scrolltolower(){ let item = this.tab_list[this.current]; if(item.isPage){ item.page++; this.getData(); } }, // 下拉刷新
onRefresherrefresh(){ this.$u.throttle(() => { let item = this.tab_list[this.current]; item.isRefresher = true; item.page = 1; item.isPage = true; item.loading_class = true; item.loading_text = '正在加载中...'; item.list = []; this.getData({refresh: true}); }, 200); } } }</script>
<style> page{ background-color: #f6f6f6; }</style><style lang="scss" scoped="scoped"> .card{ width: 100%; height: max-content; background-color: #FFFFFF; border-radius: 20rpx; padding: 0 20rpx; box-sizing: border-box; margin-bottom: 30rpx; .upper{ width: 100%; padding: 20rpx 0; border-bottom: 1rpx solid #e5e5e5; box-sizing: border-box; .order-btn{ width: max-content; height: 62rpx; border-radius: 32rpx; // border: 2rpx solid #777777;
// padding: 0 20rpx;
line-height: 60rpx; font-size: 28rpx; } // 已通过
.quoted-price{ color: #777777; } // 待发起
.wait{ color: #1833F2; } // 待审核
.passed{ color: #0BCE5F; } // 未通过
.refuse{ color: #FF0000; } } .lower{ padding: 20rpx 0; font-size: 24rpx; color: #777777; } }</style>
|