| 
						 | 
						<template>	<!-- 卡片 -->	<view class="card-container">		<view v-for="(live, index) in liveList" :key="index" class="card">			<view class="cover-image" :class="{ 'no-overlay': live.status != 1 }">				<image class="img" :src="live.cover" mode="aspectFill" alt="节目"></image>				<view v-if="live.status == 1" class="status-time" style="						position: absolute;						bottom: 0;						left: 0;						background-color: gray;						color: white;						padding: 2px 5px;						border-radius: 2px;						font-size: 12px;">					{{getDateDay(live.startTime)}} {{ live.startTime.slice(11, 16)}}开播				</view>			</view>			<view class="card-content">				<text class="card-title">{{ live.liveName }}</text>				<view class="card-actions">					<!-- 用户头像 -->					<!-- <image :src="live.user.avatar" mode="aspectFill" alt="用户头像" class="user-avatar"></image> -->					<!-- 用户昵称,与头像同行显示 -->					<text class="card-info">{{reservationNum}}人已预约</text>					<!-- 预约按钮,如果预约过了,按钮变灰色,文字变灰色,按钮文字为“已预约” -->					<a v-if="live.reservation == 0" class="card-button"						@click="booking(live.id, 90000001)">预约</a>					<a v-else @click="cancelBooking(live.id, 90000001)" class="card-button" style="background-color: #ccc;">已预约</a>				</view>			</view>		</view>	</view></template>
<script setup>	import {		ref	} from 'vue';	import service from '../../api';	import liveApi from '../../api/LiveApi';	/*	模拟后端数据	*/	const liveList = ref({});	//预约人数
	const reservationNum = 100;	//获取直播列表
	function getLive() {		liveApi.getLiveList()			.then(resp => {				if (resp.code == 200) {					liveList.value = resp.data;					console.log(liveList.value);				} else {					uni.showToast({						title: '获取直播列表失败,请联系管理员',						icon:'error',						duration: 2000					});				}			})	}	getLive();
	// 判断开播日期与当前时间的关系(今天、明天、其他)
	function getDateDay(startTime) {		const now = new Date();		const start = new Date(startTime);		const oneDay = 24 * 60 * 60 * 1000; // 一天的毫秒数
		if (now.toDateString() == start.toDateString()) {			return "今天";		} else if (now.getTime() + oneDay >= start.getTime()) {			return "明天";		} else {			return startTime.slice(5, 10);		}	}
	/*点击预约按钮以后显示预约成功的提示,并将按钮变为不可点击状态,且将按钮的文字改为“已预约”,并将按钮的背景颜色改为灰色*/	function booking(liveId, userId) {		liveApi.addReservation(liveId, userId)			.then(resp => {				if (resp.code == 200) {					getLive();					uni.showToast({						title: '预约成功',						icon:'success',						duration: 2000					});				} else {					uni.showToast({						title: '预约失败',						icon:'error',						duration: 2000					});				}			})
	}
	function cancelBooking(liveId, userId) {		liveApi.cancelReservation(liveId, userId)			.then(resp => {				if (resp.code == 200) {					uni.showToast({						title: '取消预约成功',						icon:'success',						duration: 2000					});				} else {					uni.showToast({						title: '取消预约失败',						icon:'error',						duration: 2000					});				}			})		getLive();	}</script>
<style scoped>	.card-container {		width: 100%;		/* 占满整个屏幕宽度 */		padding: 0;		display: flex;		flex-wrap: wrap;		/* 允许卡片换行 */		justify-content: space-between;		/* 卡片之间的间距均匀分布 */		background-color: #f4f4f4;	}
	.card {		background-color: #fff;		border-radius: 8px;		box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);		overflow: hidden;		border: #666;		width: calc(50% - 10px);		/* 每个卡片宽度为50%减去间隔 */		margin: 5px;		/* 卡片上下左右的间隔 */		transform: scale(1);		/* 重置缩放,如果不需要可以删除这行 */		transform-origin: center;	}
	.cover-image {		position: relative;		width: 100%;		height: 100px;		border-radius: 8px;	}
	.cover-image::before {		content: " ";		position: absolute;		top: 0;		left: 0;		width: 100%;		height: 100px;		/*最后一个参数是半透明度,可以透过调整0-1的数值,调整到满意的透明度*/		background-color: rgba(0, 0, 0, 0.3);		border-radius: 8px;	}
	.card .img {		width: 100%;		height: 100%;		/*图片占满整个卡片*/		object-fit: cover;		border-radius: 8px;	}
	/*用于隐藏样式*/	.cover-image.no-overlay::before {		display: none;	}
	.card-content {		padding: 8px;	}
	.card-title {		font-size: 13px;		font-weight: bold;		margin-bottom: 5px;		white-space: nowrap;		overflow: hidden;		text-overflow: ellipsis;
	}
	.card-info {		font-size: 14px;		color: #666;	}
	.card-button {		display: inline-block;		padding: 5px 5px;		background-color: #eb8b31;		color: #fff;		text-decoration: none;		border-radius: 20px;		font-size: small;		width: 50px;		text-align: center;		margin-left: auto;	}
	.card-actions {		display: flex;		align-items: center;		/* 垂直居中对齐 */		justify-content: space-between;		/* 按钮右对齐 */	}
	.user-avatar {		border-radius: 50%;		width: 22px;		height: 20px;	}
	.card-info {		margin-left: 0px;		/* 昵称与头像之间的间距 */		margin-top: 0;		/* 移除顶部外边距 */		/*超长以后将内容省略显示*/		white-space: nowrap;		overflow: hidden;		text-overflow: ellipsis;
		width: 90px;		font-size: 10px;	}</style>
  |