<template>
	<view>
		<view class="cu-load padding-top-10" :class="ajax.loading?'loading':''" @tap="getHistoryMsg"></view>
		<view  class="cart-view-box" v-for="(item,index) in msgList" :key="index" :id="`msg-${item.id}`">
			<view class="text-gray text-center">{{item.createTime}}</view>
			<view @click="goDetail(item)" class="bg-white margin-top radius card-view">
				<view class="content-view">
					<view class="text-black text-bold text-lg text-cut">{{item.title}}</view>
					<view class=" text-sm text-cut-2 subtitle">{{item.notice | formatHtml}}</view>
					<view class="flex  justify-between padding-top-20" style=" border-top: 1rpx solid #f2f2f2;box-sizing: border-box;">
						<view class="text-df text-black">
							<text>查看详情</text>
						</view>
						<view style="padding-top: 8rpx;">
							<text class=" cuIcon-right"></text>
						</view>
					</view>
				</view>
			</view>
		</view>
	</view>
</template>

<script>
	var app=getApp()
	export default {
		components:{
			
		},
		data() {
			return {
				msgList:[],
				ajax:{
					rows:10,	//每页数量
					page:1,	//页码
					flag:true,	// 请求开关
					loading:true,	// 加载中
				},
				content:''
			}
		},
		filters: {
			formatHtml (str) {
				return str.replace(/<[^>]+>/g, "");
			}
		},
		mounted() {
			this.$nextTick(()=>{
				this.getHistoryMsg();
			});
		},
		onPageScroll(e){
			if(e.scrollTop<5){
				this.getHistoryMsg();
			}
		},
		onLoad() {
		},
		methods: {
			goDetail(item){
				app.globalData.noticeDetail=item
				uni.navigateTo({
					url:"/pages/index/notice/detail"
				})
			},
			// 获取历史消息
			getHistoryMsg(){
				if(!this.ajax.flag){
					return; //
				}
				// 此处用到 ES7 的 async/await 知识，为使代码更加优美。不懂的请自行学习。
				let get = async ()=>{
					this.hideLoadTips();
					this.ajax.flag = false;
					let data = await this.joinHistoryMsg();
					
					console.log(data);	// 查看请求返回的数据结构 
					
					// 获取待滚动元素选择器，解决插入数据后，滚动条定位时使用
					let selector = '';
										
					if(this.ajax.page>1){
						// 非第一页，则取历史消息数据的第一条信息元素
						selector = `#msg-${this.msgList[0].id}`;
					}else{
						
						// 第一页，则取当前消息数据的最后一条信息元素
						selector = `#msg-${data[data.length-1].id}`;
					}
					
					// 将获取到的消息数据合并到消息数组中
					this.msgList = [...data,...this.msgList];	
					
					// 数据挂载后执行，不懂的请自行阅读 Vue.js 文档对 Vue.nextTick 函数说明。
					this.$nextTick(()=>{
						// 设置当前滚动的位置
						this.setPageScrollTo(selector);
						
						this.hideLoadTips(true);
												
						if(data.length < this.ajax.rows){
							// 当前消息数据条数小于请求要求条数时，则无更多消息，不再允许请求。
							// 可在此处编写无更多消息数据时的逻辑
						}else{
							this.ajax.page ++;
							
							// 延迟 200ms ，以保证设置窗口滚动已完成
							setTimeout(()=>{
								this.ajax.flag = true;
							},200)
						}
						
					})
				}
				get();
			},
			// 拼接历史记录消息，正式项目可替换为请求历史记录接口
			joinHistoryMsg(){
				let that=this
				// 此处用到 ES6 的 Promise 知识，不懂的请自行学习。
				return new Promise((done,fail)=>{
					// 无数据请求接口，由 setTimeout 模拟，正式项目替换为 ajax 即可。
					setTimeout(()=>{
						let params={
							agencyId:that.$cache.get('agencyId')
						}
						that.$api.notice.page(params).then(res=>{
							let data=res.data.records
							done(data.reverse());
						})
					},800);
				})
			},
			// 设置页面滚动位置
			setPageScrollTo(selector){
				let view = uni.createSelectorQuery().in(this).select(selector);
				view.boundingClientRect((res) => {
					uni.pageScrollTo({
					    scrollTop:res.top - 30,	// -30 为多显示出大半个消息的高度，示意上面还有信息。
					    duration: 0
					});
				}).exec();
			},
			// 隐藏加载提示
			hideLoadTips(flag){
				if(flag){
					console.log("333");
					setTimeout(()=>{
						this.ajax.loading = false;
					},300);
				}else{
					this.ajax.loading = true;
				}
			},
		},
		
	}
</script>

<style lang="scss">
	page{
		background-color: #F3F3F3;
		font-size: 28rpx;
	}
	.subtitle{
		color: #7e7e7e;
		font-size: 28rpx;
		margin: 50rpx 0 10rpx 0;
		line-height: 52rpx;
	}
	.cart-view-box {
		padding: 36.36rpx 27.27rpx;
		.card-view {
			background-color: #FFFFFF;
			position: relative;
			border-radius: 10rpx;
			.head-img {
				width: 100%;
				height: 236.36rpx;
				border-radius: 9.09rpx 9.09rpx 0 0;
			}
			.content-view {
				padding: 27.27rpx;
			}
		}
	}
</style>