Newer
Older
xinJiangMiniProgranm / packageToolList / rumorInfo / rumorInfo.vue
liyaguang on 25 Aug 2023 4 KB 侵权举报修改
<!-- 辟谣信息列表页 -->
<template>
	<view class="rumor-info">
		<image src="http://111.198.10.15:11604/png/back_ts.png" style="position:absolute;top: -4rpx;left: 0;z-index: -999; width:100%;height: 460rpx;"></image>
		<!-- <view class="title">谣言曝光台</view> -->
		<!-- <view class="little-title">
			<text>自觉抵制网络谣言</text>
			<text style="margin-left: 32rpx;">共建清朗网络空间</text>
		</view> -->
		<!-- 搜索框 -->
		<view class="search-area">
			<u-search
				placeholder="请输入搜索关键字" 
				v-model="keyword"
				bgColor="#fff"
				height="40"
				:actionStyle="{
					fontSize: '16px',
					color: '#fff',
					fontWeight: '600'
				}"
				clearabled
				@custom="search"
				@search="search"
				@change="changeKeyword"
				@clear="clearKeyword"
			></u-search>
		</view>
		
		<!-- 卡片组件 -->
		<view class="rumor-area">
			<RumorList :list="rumorList"/>
		</view>
		<u-loadmore :status="loadingMoreStatus" loadmoreText=" " :nomore-text="isEmpty ? '' : '没有更多了'"/>
		<!-- 返回顶部 -->
		<u-back-top 
			:scroll-top="scrollTop" 
			icon="arrow-up" 
			customStyle="background: rgba(67, 144, 247, .7)"
			:iconStyle="{
					fontSize: '32rpx',
					color: '#fff',
					fontWeight: '600'
				}"
			duration="200"
		></u-back-top>
		
		<!-- 空 -->
		<u-empty
			v-if="isEmpty"
			mode="search"
			text="暂无结果"
			:show="true"
			iconColor="#77797d"
			textColor="#77797d"
			marginTop="80"
		></u-empty>
	</view>
</template>

<script>
	import RumorList from '../components/rumorList.vue'
	import { getPyxxList } from '@/api/index.js'
	import { stamp2Time } from '@/common/utils.js'
	export default {
		components: {
			RumorList
		},
		data() {
			return {
				keyword: '', // 搜索关键字
				isEmpty: false,   //数据是否为空
				scrollTop: 0,
				rumorList: [], // 列表数据
				pageIndex: 1, // 请求第几页
				loadingMoreStatus: 'loadmore', // 加载更多
			}
		},
		mounted() {
			uni.showShareMenu({
				withShareTicket: true,
				menus: ["shareAppMessage", "shareTimeline"]
			});
			this.fetchPyxxList() // 获取列表
		},
		//分享好友
		onShareAppMessage() {
			return {
				title: ' ',
				// imageUrl: '../../static/share.png',
				// path: "/pages/messageList/messageList",
			};
		},
		//分享朋友圈
		onShareTimeline() {
			return {
				title: '新疆网络举报',
			}
		},
		//上滑加载
		onReachBottom() {
			this.loadingMoreStatus = 'loading' // 显示加载中
			this.pageIndex = this.pageIndex + 1 // 页数增加
			this.fetchPyxxList(this.keyword); // 获取列表
		},
		watch: {
			// 监听列表是否为空控制空组件显隐
			rumorList: {
				handler(val){
					if(val.length) {
						this.isEmpty = false;
					} else {
						if(this.loadingMoreStatus !== 'loadmore') {
							this.isEmpty = true;
						}
					}
				},
				deep: true,
				// immediate: true,
			}
		},
		// 监听滚动条位置
		onPageScroll(e) {
			this.scrollTop = e.scrollTop;
		},
		methods: {
			// 搜索框内容变化
			changeKeyword(val) {
				this.keyword = val
			},
			// 搜索框清除按钮
			clearKeyword() {
				this.keyword = ''
			},
			// 点击搜索和键盘上的搜索触发
			search() {
				this.loadingMoreStatus = 'loadmore'
				this.rumorList = []
				this.pageIndex = 1
				this.fetchPyxxList(this.keyword)
			},
			// 获取辟谣信息---对应联合辟谣平台的权威发布
			fetchPyxxList(title = '') {
				let param
				if(title === '') {
					param = {
						pageIndex: this.pageIndex,
						pageSize: 10,
						// siteRoleCode: 'zzqwxbPortal', // 辟谣课堂
						// catalogCode: 'yykt' // 辟谣课堂
						siteRoleCode: 'zzqwxbPortal', // 对应权威发布
						catalogCode: 'qwfb', // 对应权威发布
					}
				} else {
					param = {
						pageIndex: this.pageIndex,
						pageSize: 10,
						title: title
					}
				}
				getPyxxList(param).then(res => {
					const list = res.map(item => {
						return {
							catalogId: item.catalogId,
							id: item.id,
							title: item.title, 
							contentSmallImage: item.contentSmallImage,
							publishTime: stamp2Time(item.publishDate), // 发布时间
							linkAddr: item.linkAddr, // 来源
						}
					})
					if(!list.length || list.length < param.pageSize) {
						this.loadingMoreStatus = 'nomore'
					}
					this.rumorList = this.rumorList.concat(list)
				})
			},
		}
	}
</script>

<style lang="scss" scoped>
	.rumor-info {
		padding: 40rpx;
		box-sizing: border-box;
		.title {
			color: #fff;
			font-size: 44rpx;
			font-weight: 600;
		}
		.little-title {
			color: #fff;
			font-size: 28rpx;
			margin-top: 20rpx;
		}
		.search-area {
			// position: fixed;
			// box-sizing: border-box;
			// top: 0;
			// left: 0;
			// padding: 20rpx 40rpx;
			width: 100%;
			height: 130rpx;
			box-sizing: border-box;
			margin-top: 50rpx;
		}
	}
 
</style>
<style>
	page {
		background-color: #f0f0f0;
	}
</style>