<template>
<!--  图集列表-->
	<view class="album_list">
		<view class="banner">
			<view class="img">
				<image :src="topImg" mode="aspectFill" style="width: 100%;height: 100%;"></image>
				<view class="topText tn-flex tn-flex-center-between tn-w-full tn-p-lg">
					<view class="icon">
						<image :src="config.logo" mode="aspectFill" style="width: 100%;height: 100%;"></image>
					</view>
					<view class="title tn-text-xl tn-mt-xl">
						#{{headerTitle}}
					</view>
				</view>
			</view>
		</view>
		
		<view class="container tn-shadow tn-radius">
			<view class="search tn-p-sm tn-pb-0 tn-flex tn-flex-center-end">
				<view class="search-btn tn-border tn-gray-dark_border tn-p-xs tn-pt-0 tn-pb-0 tn-text tn-gray-dark_text" @click="showSearch">
					<TnIcon name="search"/>
					<span class="tn-pl-xs">搜 索</span>
				</view>
			</view>
			<view class="item tn-p-sm">
				<TnWaterFall :data="articleList" mode="calc">
				    <template #left="{ item }">
				      <view class="image-data tn-mb-sm"  @click="toDetail(item)">
						  <view class="img-child tn-mb-xs tn-shadow tn-gray-dark_shadow">
						  	<image class="image" :src="JSON.parse(item.image)[0]" mode="widthFix" />
						  	<view class="title tn-text-center tn-pt-xs tn-pb-xs">
						  		{{item.title}}
						  	</view>
						  </view>
				      </view>
				    </template>
				    <template #right="{ item }" >
				      <view class="image-data tn-ml-xs tn-mb-sm"  @click="toDetail(item)">
						  <view class="img-child tn-mb-xs tn-shadow tn-gray-dark_shadow">
						  	<image class="image" :src="JSON.parse(item.image)[0]" mode="widthFix" />
						  	<view class="title tn-text-center tn-pt-xs tn-pb-xs">
						  		{{item.title}}
						  	</view>
						  </view>
				      </view>
					  
				    </template>
				  </TnWaterFall>
			</view>
		</view>
		<view class="loadmore tn-mt tn-mb">
			<TnLoadmore :status="loadmoreStatus" color="#666" loading-icon-mode="flower" />
		</view>
		<TnPopup v-model="showPopup" open-direction="top" :radius="0">
		    <view class="tn-pt-sm tn-pb-sm tn-pl-lg tn-pr-lg">
				<TnSearchBox
				    v-model="searchValue"
					shape="round"
				    @search="searchBtnClickEvent"
					@clear="clearEvent"
				  />
			</view>
		</TnPopup>
	</view>
	
</template>

<script lang="ts" setup>
	import { onMounted, reactive, ref } from 'vue';
	import request from '@/utils/request';
	import { onLoad, onReachBottom } from "@dcloudio/uni-app";
	import type { LoadmoreStatus } from '@tuniao/tnui-vue3-uniapp'
	import TnPopup from '@/uni_modules/tuniaoui-vue3/components/popup/src/popup.vue'
	import TnSearchBox from '@/uni_modules/tuniaoui-vue3/components/search-box/src/search-box.vue'
	import TnWaterFall from '@/uni_modules/tuniaoui-vue3/components/water-fall/src/water-fall.vue'
	import TnLoadmore from '@/uni_modules/tuniaoui-vue3/components/loadmore/src/loadmore.vue'
	import config from '@/config/config.js'
	
	const loadmoreStatus = ref<LoadmoreStatus>('loadmore')

	const showPopup = ref(false)
	
	const hasMore = ref(true)
	
	const headerTitle = ref('');
	
	const searchValue = ref()
	
	const cateId = ref()
	
	const articleList = ref([])
	
	const topImg = ref('/static/index_top.jpg')
	
	const params = reactive<{
		page?:number,
		limit?:number,
		cateId?:number,
		keyword?:string
	}>({
		page:1,
		limit:10,
	})
	
	const showSearch = () => {
		showPopup.value = true
	}
	
	const clearEvent = () => {
		params.page = 1
		params.keyword = undefined
		articleList.value = []
		getList(params)
	}
	
	const searchBtnClickEvent = (value:string) => {
		params.page = 1;
		params.keyword = value
		articleList.value = [];
		showPopup.value = false;
		getList(params)
	}
	
	
	const getMenuConfig = () =>{
		request({
			url:'/front/content/category/info',
			method:'GET',
			data:{'cateId':cateId.value}
		}).then(res => {
			uni.setNavigationBarTitle({
				title:res.data.data.cateName
			})
			headerTitle.value = res.data.data.cateName
		})
	}
	
	const getList = (params:any) => {
		loadmoreStatus.value = 'loading'
		request({
			url: '/front/content/list',
			method:'GET',
			data:params
		}).then((res:any)=>{
			articleList.value = articleList.value.concat(res.data.data.list)
			loadmoreStatus.value = 'loadmore'	
			if(res.data.data.list.length < 10){
				hasMore.value = false
				loadmoreStatus.value = 'nomore'
			}
		})
	}
	
	const toDetail = (item:any) => {
		if(item.type === 0){
			let routeUrl = '/pages/detail/index'
			if(item.template){
				routeUrl = item.template //定义模板后
			}
			uni.navigateTo({
				url:routeUrl + '?cateId=' + item.cateId + '&id=' + item.id
			})
		}else if(item.type === 1){
			//外链
			if(item.link && item.link.slice(0,25) !== 'https://mp.weixin.qq.com/'){
				uni.navigateTo({
					url:'/pages/webview/index?url=' + item.link
				})
			}else{
				window.location.href = item.link
			}
		}else{
			uni.navigateTo({
				url:'/pages/detail/album?id=' + item.id
			})
		}
	}
	
	onLoad((options) => {
		cateId.value = options.cateId
		params.cateId = options.cateId
	}) 
	
	onReachBottom(() => {
		if(hasMore.value){
			params.page += 1
			getList(params)
		}
	}) 
	
	onMounted(()=>{
		getMenuConfig()
		getList(params)
	})
</script>

<style lang="scss" scoped>
	.album_list{
		background-color: #f8f8f8;
		height: 100vh;
		.banner{
			height: 450rpx;
			position: relative;
			.img{
				width: 100%;
				height: 100%;
				.topText{
					color: #fff;
					position: absolute;
					top: 100rpx;
					left: 0;
					.icon{
						width: 220rpx;
						height: 80rpx;
					}
					.title{
						letter-spacing: 4rpx;
					}
				}
			}
			::after{
				content: "";
				position: absolute;
				width: 100%;
				height: 120rpx;
				top: 330rpx;
				left: 0;
				background:linear-gradient(180deg,rgba(255, 255, 255, 0.01),rgba(255, 255, 255, 0.9))
			}
		}
		
		.search-btn{
			width: 150rpx;
			border-radius: 40rpx;
			padding-top: 4rpx;
			padding-bottom: 5rpx;
		}
		
		.container{
			position: relative;
			top: -160rpx;
			background-color: #FFF;
			.item{
				.image-data {
				  width: calc(100% - 10rpx);
				  .img-child{
					  border-radius: 5rpx;
				  }
				  .image {
						display: block;
						width: 100%;
						height: auto;
					}
				}
			}
		}
			
	}
</style>