<template>
	<view>
		<!-- tabs选项卡 -->
		<view class="lf-flex">
			<view style="width: 84%;">
				<u-tabs
					:current="tabIndex" 
					:list="tabList" 
					:lineWidth="34"
					:scrollable="false" 
					:itemWidth="100 / tabList.length +'%'" 
					@change="switchTab"
				>
				</u-tabs>
			</view>
			<view class="filter-icon">
				<image src="@/static/icon/filter.png" @click="showFilter = !showFilter"></image>
			</view>
		</view>
		
		<!-- 筛选 -->
		<view class="filter-box" v-if="showFilter">
			<view class="flex-col group_6" >
			  <view class="flex-col section_5">
			    <view class="flex-col">
			      <text class="text_7">按收货确认时间</text>
			      <view class="flex-col group_8">
			        <view class="flex-row">
			          <view class="flex-col items-center text-wrapper">
			            <text>1个月内</text>
			          </view>
			          <view class="text-wrapper_1 flex-col items-center">
			            <text>3个月内</text>
			          </view>
			          <view class="text-wrapper_1 flex-col items-center view_3">
			            <text>6个月内</text>
			          </view>
			          <view class="text-wrapper_1 flex-col items-center">
			            <text>今年</text>
			          </view>
			        </view>
			        <view class="flex-row group_10">
			          <view class="left-text-wrapper flex-col items-center">
			            <text>2021年</text>
			          </view>
			          <view class="left-text-wrapper flex-col items-center view_6">
			            <text>2020年</text>
			          </view>
			          <view class="left-text-wrapper flex-col items-center view_7">
			            <text>2019年</text>
			          </view>
			        </view>
			      </view>
			    </view>
			    <view class="flex-col group_11">
			      <text class="text_15">按送评信息</text>
			      <view class="flex-row group_12">
			        <view class="flex-col items-center text-wrapper_2">
			          <text>输入送评人姓名或手机号</text>
			        </view>
			        <view class="flex-col items-start text-wrapper_3">
			          <text class="text_17">输入标签</text>
			        </view>
			      </view>
			    </view>
			    <view class="flex-col group_13">
			      <text class="text_18">按送评信息</text>
			      <view class="flex-col items-start text-wrapper_4">
			        <text class="text_19">输入评级编号</text>
			      </view>
			    </view>
			    <view class="flex-row group_14">
			      <view class="flex-col items-center text-wrapper_5">
			        <text>重置</text>
			      </view>
			      <view class="flex-col items-center text-wrapper_6">
			        <text>确认</text>
			      </view>
			    </view>
			  </view>
			  <view class="flex-col items-center group_15">
			    <view class="section_7"> </view>
			  </view>
			</view>
		</view>
		
		
		
		<!-- 页面主体滚动区域 -->
		<swiper :current="tabIndex" :style="{height: swiperContentHeight}" @change="swiperChange">
			<swiper-item v-for="(tabItem, idx) in tabList" :key="idx" :item-id="tabItem.ident" @touchmove="stopTouchMove">
				<scroll-view 
					:style="{height: swiperContentHeight, 'padding-top': '30rpx'}" 
					:scroll-y="true"
					:refresher-enabled="true"
					:refresher-triggered="tabItem.isRefresher"
					@scrolltolower="scrolltolower"
					@refresherrefresh="refresherrefresh"
				>
					<view class="item-box" v-for="(item, index) in tabItem.data" :key="index">
						<view class="flex-col section_5">
						  <view class="justify-between">
						    <view class="flex-row group_8">
						      <image
						        src="https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/62677e395a7e3f03107ffc5f/62677e4a35a7e10011e93a80/16509497798740970822.png"
						        class="image_7"
						      />
						      <text class="text_7">在线送评</text>
						    </view>
						    <text class="text_8">待确认</text>
						  </view>
						  <view class="justify-between group_9">
						    <view class="flex-row">
						      <text>李丽丽</text>
						      <text class="text_10">15273936409</text>
						    </view>
						    <text>共5件</text>
						  </view>
						  <view class="justify-between group_11">
						    <text class="text_12">更多</text>
						    <view class="flex-row">
						      <view class="flex-col items-center text-wrapper">
						        <text>取消</text>
						      </view>
						      <view class="flex-col items-center text-wrapper_1">
						        <text>寄送藏品</text>
						      </view>
						    </view>
						  </view>
						</view>
					</view>
					
					<!-- 当前tab下没有数据且无分页数据时，显示系统剪辑中 -->
					<view class="nomore-box" v-if="tabItem.data.length <= 0 && !tabItem.isPage">
						<image src="@/static/images/nomore.png"></image>
						<view>暂无订单记录</view>
					</view>
					<!-- 加载中和暂无更多显示 -->
					<u-loadmore :status="tabItem.status" margin-bottom="20" marginTop="20" v-else></u-loadmore>
					<!-- 底部修饰，解决部分机型底部被挡住且padding和margin都不生效的BUG -->
					<view class="additional"></view>
				</scroll-view>
			</swiper-item>
		</swiper>
		
		<!-- 轻提示 -->
		<u-toast ref="uToast"></u-toast>
	</view>
</template>

<script>
	
	export default {
		data(){
			let publicKey = {
				page: 1,
				pageSize: 5,
				isPage: true,
				status: 'loading', // loading加载，nomore没有更多了
				isRefresher: false, // 下拉刷新状态，默认没有开启下拉
			}
			return {
				showFilter: false,
				tabList: [{
					name: '全部',
					ident: 'all',
					data: [],
					badge: {isDot: false},
					requestFunction: 'getList',
					...publicKey
				},{
					name: '待确认',
					ident: 'video',
					data: [],
					badge: {isDot: false},
					requestFunction: 'getList',
					...publicKey
				},{
					name: '评级中',
					ident: 'image',
					data: [],
					badge: {isDot: false},
					requestFunction: 'getList',
					...publicKey
				},{
					name: '待付款',
					ident: 'share',
					data: [],
					badge: {isDot: false},
					requestFunction: 'getList',
					...publicKey
				},{
					name: '待收货',
					ident: 'short',
					data: [],
					badge: {isDot: false},
					requestFunction: 'getList',
					...publicKey
				}],
				tabIndex: 0,
				scenic: {}
			}
		},
		computed: {
			// 传入对应tab的ident值，在当前tabIndex下是否匹配，匹配上返回true，否则返回false，调用matchTabIdent(par1, par2, ...)
			matchTabIdent(){
				let that = this;
				return function(){
					let identList = Array.from(arguments);
					let hasKey = identList.some(item => that.tabList[that.tabIndex].ident === item);
					return hasKey;
				}
			},
			// 计算获得swiper内容区域剩余高度
			swiperContentHeight(){
				return `calc(100vh - 80rpx - 10rpx)`;
			}
		},
		onLoad(options){
			this.tabIndex = Number(options.current || this.tabIndex);
			this.scenic = uni.getStorageSync("scenic_key") || {};
			this[ this.tabList[this.tabIndex].requestFunction ](); // 获取当前tab下的数据列表
		},
		methods: {
			// 获取数据
			getList(options = {}){
				let tabItem = this.tabList[this.tabIndex];
				
				setTimeout(() => {
					if(tabItem.page === 1){
						tabItem.data = [1,2,3,4,5]
					}else{
						let arr = [Math.random(), Math.random(), Math.random(), Math.random(), Math.random()];
						tabItem.data.push(...arr);
						if(tabItem.page === 4){
							tabItem.isPage = false;
							tabItem.status = "nomore";
						}
					}
					
					if(options.refresher){
						this.$refs.uToast.show({
							title: '刷新成功',
							type: 'success'
						});
						tabItem.isRefresher = false;
					}
				}, 800);
			},
			// 切换tab
			switchTab(item){
				this.tabIndex = item.index;
				// 判断所切换到的tab下是否有数据并且isPage为true，如果没有再请求，否则啥也不干
				let tabItem = this.tabList[this.tabIndex];
				if(tabItem.data.length === 0 && tabItem.isPage){
					this[ tabItem.requestFunction ]();
				}
			},
			// swiper滑动响应事件
			swiperChange(event){
				// 事件触发类型为触摸时才做处理，否则是因为switchTab方法执行导致的事件回调
				if(event.detail.source === 'touch'){
					this.tabIndex = event.detail.current;
					// 判断所切换到的tab下是否有数据并且isPage为true，如果没有再请求，否则啥也不干
					let tabItem = this.tabList[this.tabIndex];
					if(tabItem.data.length === 0 && tabItem.isPage){
						this[ tabItem.requestFunction ]();
					}
				}
				console.log("swiperChange", event);
			},
			stopTouchMove(){
				return false;
			},
			// 下拉刷新，重新获取页面数据，将状态置回初始值再请求
			refresherrefresh(){
				let tabItem = this.tabList[this.tabIndex];
				tabItem.isRefresher = true;
				tabItem.page = 1;
				tabItem.isPage = true;
				tabItem.status = 'loading';
				tabItem.data = [];
				this[tabItem.requestFunction]({refresher: true});
			},
			// 滚动到底部
			scrolltolower(){
				let tabItem = this.tabList[this.tabIndex];
				if(tabItem.isPage){
					tabItem.page++;
					this[tabItem.requestFunction]();
				}
			}
		}
	}
</script>

<style>
	/* 修复ios页面左右漂浮BUG */
	page{
		overflow: hidden;
	}
</style>
<style scoped lang="scss">
	.filter-icon{
		width: 16%;
		height: 34rpx;
		display: flex;
		justify-content: center;
		align-items: center;
		border-left: 2rpx solid #F6F6F6;
		image{
			width: 36rpx;
			height: 32rpx;
		}
	}
	
	.filter-box{
		position: absolute;
		z-index: 9999;
		width: 750rpx;
		
		.text-wrapper_1 {
		  margin-left: 16rpx;
		  flex: 1 1 160rpx;
		  color: rgb(51, 51, 51);
		  font-size: 28rpx;
		  font-weight: 500;
		  line-height: 40rpx;
		  white-space: nowrap;
		  padding: 14rpx 0;
		  background-color: rgb(246, 246, 246);
		  border-radius: 10rpx;
		  height: 68rpx;
		}
		.left-text-wrapper {
		  padding: 14rpx 0;
		  background-color: rgb(246, 246, 246);
		  border-radius: 10rpx;
		  width: 160rpx;
		  height: 68rpx;
		}
		.group_6 {
		  padding-top: 2rpx;
		}
		.section_5 {
		  padding: 40rpx 32rpx 50rpx;
		  background-color: rgb(255, 255, 255);
		}
		.group_15 {
		  padding: 506rpx 0 16rpx;
		  position: relative;
		}
		.group_11 {
		  margin-top: 50rpx;
		}
		.group_13 {
		  margin-top: 50rpx;
		}
		.group_14 {
		  margin-top: 50rpx;
		}
		
		.section_7 {
		  background-color: rgba(0, 0, 0, 0.5);
		  width: 750rpx;
		  height: 528rpx;
		  top: 0;
		  right: 0;
		  bottom: 0;
		  left: 0;
		  position: absolute;
		}
		.text_7 {
		  color: rgb(51, 51, 51);
		  font-size: 32rpx;
		  font-weight: 500;
		  line-height: 44rpx;
		  white-space: nowrap;
		}
		.group_8 {
		  margin-top: 20rpx;
		}
		.text_15 {
		  color: rgb(51, 51, 51);
		  font-size: 32rpx;
		  font-weight: 500;
		  line-height: 44rpx;
		  white-space: nowrap;
		}
		.group_12 {
		  margin-top: 20rpx;
		  color: rgb(195, 195, 195);
		  font-size: 28rpx;
		  font-weight: 500;
		  line-height: 40rpx;
		  white-space: nowrap;
		}
		.text_18 {
		  color: rgb(51, 51, 51);
		  font-size: 32rpx;
		  font-weight: 500;
		  line-height: 44rpx;
		  white-space: nowrap;
		}
		.text-wrapper_4 {
		  margin-top: 18rpx;
		  padding: 12rpx 0;
		  color: rgb(195, 195, 195);
		  font-size: 28rpx;
		  font-weight: 500;
		  line-height: 40rpx;
		  white-space: nowrap;
		  border-radius: 10rpx;
		  border: solid 2rpx rgb(195, 195, 195);
		}
		.text-wrapper_5 {
		  padding: 24rpx 0;
		  flex: 1 1 330rpx;
		  color: rgb(195, 195, 195);
		  font-size: 32rpx;
		  font-weight: 600;
		  line-height: 44rpx;
		  white-space: nowrap;
		  border-radius: 10rpx;
		  height: 96rpx;
		  border: solid 2rpx rgb(195, 195, 195);
		}
		.text-wrapper_6 {
		  margin-left: 26rpx;
		  padding: 26rpx 0;
		  flex: 1 1 330rpx;
		  color: rgb(255, 255, 255);
		  font-size: 32rpx;
		  font-weight: 600;
		  line-height: 44rpx;
		  white-space: nowrap;
		  background-color: rgb(231, 162, 63);
		  border-radius: 10rpx;
		  height: 96rpx;
		}
		.group_10 {
		  margin-top: 20rpx;
		  color: rgb(51, 51, 51);
		  font-size: 28rpx;
		  font-weight: 500;
		  line-height: 40rpx;
		  white-space: nowrap;
		}
		.text-wrapper_2 {
		  padding: 12rpx 0;
		  flex: 1 1 auto;
		  border-radius: 10rpx;
		  height: 68rpx;
		  border: solid 2rpx rgb(195, 195, 195);
		}
		.text-wrapper_3 {
		  margin-left: 28rpx;
		  padding: 12rpx 0;
		  border-radius: 10rpx;
		  width: 308rpx;
		  height: 68rpx;
		  border: solid 2rpx rgb(195, 195, 195);
		}
		.text_19 {
		  margin-left: 18rpx;
		}
		.text-wrapper {
		  padding: 14rpx 0;
		  flex: 1 1 160rpx;
		  color: rgb(255, 255, 255);
		  font-size: 28rpx;
		  font-weight: 500;
		  line-height: 40rpx;
		  white-space: nowrap;
		  background-color: rgb(231, 162, 63);
		  border-radius: 10rpx;
		  height: 68rpx;
		}
		.view_3 {
		  margin-left: 14rpx;
		}
		.view_6 {
		  margin-left: 16rpx;
		}
		.view_7 {
		  margin-left: 14rpx;
		}
		.text_17 {
		  margin-left: 18rpx;
		}
	}
	
	
	.item-box{
		width: 686rpx;
		// height: 300rpx;
		margin: 0 auto;
		background-color: #f6f6f6;
		&:nth-child(n+2){
			margin-top: 20rpx;
		}
		
		.section_5 {
		  padding: 40rpx 32rpx 0;
		  background-color: rgb(255, 255, 255);
		}
		.group_9 {
		  margin-top: 30rpx;
		  color: rgb(51, 51, 51);
		  font-size: 32rpx;
		  font-weight: 500;
		  line-height: 44rpx;
		  white-space: nowrap;
		}
		.group_11 {
		  margin-top: 26rpx;
		  padding: 32rpx 0 28rpx;
		  border-top: solid 2rpx rgb(239, 239, 239);
		}
		.group_8 {
		  color: rgb(153, 153, 153);
		  font-size: 28rpx;
		  line-height: 40rpx;
		  white-space: nowrap;
		}
		.text_8 {
		  color: rgb(43, 102, 234);
		  font-size: 28rpx;
		  font-weight: 500;
		  line-height: 40rpx;
		  white-space: nowrap;
		}
		.text_12 {
		  align-self: center;
		  color: rgb(153, 153, 153);
		  font-size: 28rpx;
		  line-height: 40rpx;
		  white-space: nowrap;
		}
		.image_7 {
		  width: 40rpx;
		  height: 40rpx;
		}
		.text_7 {
		  margin-left: 12rpx;
		}
		.text_10 {
		  margin-left: 21rpx;
		}
		.text-wrapper {
		  padding: 10rpx 0;
		  color: rgb(153, 153, 153);
		  font-size: 28rpx;
		  font-weight: 500;
		  line-height: 40rpx;
		  white-space: nowrap;
		  border-radius: 32rpx;
		  width: 160rpx;
		  height: 64rpx;
		  border: solid 2rpx rgb(153, 153, 153);
		}
		.text-wrapper_1 {
		  margin-left: 18rpx;
		  padding: 10rpx 0;
		  color: rgb(231, 162, 63);
		  font-size: 28rpx;
		  font-weight: 500;
		  line-height: 40rpx;
		  white-space: nowrap;
		  border-radius: 32rpx;
		  width: 160rpx;
		  height: 64rpx;
		  border: solid 2rpx rgb(231, 162, 63);
		}
	}
	
	.nomore-box{
		width: 686rpx;
		height: 500rpx;
		margin: 0 auto;
		display: flex;
		flex-direction: column;
		justify-content: center;
		align-items: center;
		image{
			width: 434rpx; 
			height: 260rpx;
		}
		view{
			text-align: center; 
			color: #777777;
			margin-top: 40rpx;
		}
	}
	
	// 解决scroll-view底部padding和margin都不生效贴边的BUG
	.additional{
		height: calc( env(safe-area-inset-bottom) + 20rpx );
		height: calc( constant(safe-area-inset-bottom) + 20rpx );
	}
</style>
