|
|
<template> <view> <view class="tabs"> <u-tabs :list="tab_list" :is-scroll="false" :current="current" bg-color="#f6f6f6" active-color="#11D189" @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="index" @click="$url('/pages/delivery/detail?id='+ item.o_sn)"> <view class="lf-row-between item"> <view class="lf-color-gray">出库名称</view> <view class="lf-color-black">{{ item.o_name }}</view> </view> <view class="lf-row-between item"> <view class="lf-color-gray">申请时间</view> <view class="lf-color-black">{{ item.created_at }}</view> </view> <view class="lf-row-between item"> <view class="lf-color-gray">商品种类</view> <view class="lf-color-black">{{ item.cate_number }}类</view> </view> <view class="lf-row-between item"> <view class="lf-color-gray">订单状态</view> <view :class="stateClass(item.state)">{{ item.state }}</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(){ let _public = { loading_class: true, loading_text: '正在加载中...', page: 1, isPage: true, isRefresher: false }; return { current: 0, tab_list: [{ name: '全部', list: [], ..._public },{ name: '申请中', list: [], ..._public },{ name: '已出库', list: [], ..._public }], page_size: 10, windowHeight: 0, stateText: '' } }, 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_CANTEEN_WAREHOUSEOUTLIST,{ page: item.page, pagesize: this.page_size, state: this.current }).then(res => { let list = res.data.list || []; let isPage = res.data.hasmore; item.isPage = isPage; if(!isPage){ item.loading_class = false; item.loading_text = '已加载全部数据~'; } if(options && options.refresh){ item.isRefresher = false; } if(item.page == 1){ item.list = list; }else{ item.list.push(...list); } }).catch(err => { if(options && options.refresh){ item.isRefresher = false; } }) }, // tabs切换
tabsChange(current){ this.current = current; if(this.tab_list[this.current].list.length <= 0){ this.getData({type: this.current}); } }, // swiper页面切换
swiperChange(event){ this.current = event.detail.current; if(event.detail.source == '') return; // 如果是被动出发,没有事件类型则不做处理
if(this.tab_list[this.current].list.length <= 0){ this.getData({type: this.current}); } }, // 页面触底
scrolltolower(){ let item = this.tab_list[this.current]; if(item.isPage){ item.page++; this.getData({type: this.current}); } }, // 下拉刷新
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,type: this.current}); }, 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; .item{ padding: 20rpx 0; box-sizing: border-box; width: 100%; // border-bottom: 1rpx solid #E5E5E5;
font-size: 28rpx; &:last-child{ border-bottom: none; } } // 已报价,等待审核
.quoted-price{ color: #777777; } // 等待报价
.wait{ color: #1833F2; } // 已通过审核
.passed{ color: #0BCE5F; } // 报价被拒绝
.refuse{ color: #FF0000; } }</style>
|