<template>
	<view class="container" :style="'overflow:' + (showPage ? 'hidden' : 'visible')" v-if="info">
		<!-- 顶部民宿图片区域 -->
		<view class="banner">
			<img class="img" mode="aspectFill" :src="info.hotelFileInfoList[0].url" />
			<view class="slogan">
				<img src="../../static/index/slogan.png" />
			</view>
		</view>

		<!-- 民宿详细信息区域 -->
		<view class="detail">
			<view class="detail_name">{{ info.hotel_name }}</view>

			<view class="detail_info">
				<view class="info_left">{{ info.fitupTime }}装修 | {{ info.openTime }}开业</view>
				<view class="info_right" @click="goPageDetailInfo">
					设施/详情
					<img src="../../static/index/right.png" />
				</view>
			</view>

			<view class="detail_group">
				<view class="group_item" v-for="item in info.hconfigList" :key="item.id">
					<img :src="item.fileUrl" />
					{{ item.name }}
				</view>
			</view>

			<view class="address">
				<view class="address_left">{{ info.hposition }}</view>
				<view class="address_right">
					<view class="right_box" @click="handleMap(info)">
						<img src="../../static/index/map.png" />
					</view>
					<view class="right_box" @click="handlePhone(info.managerPhone)">
						<img src="../../static/index/phone.png" />
					</view>
				</view>
			</view>

			<view class="distance" v-if="distance">距离我{{ distance }}km</view>
		</view>

		<!-- 房型信息区域 -->
		<view class="body">
			<!-- 选择日期区域 -->
			<view class="body_header" @click="handleOpen">
				<view class="header_start">
					<view class="header_top">{{ getWeek(startTime) }}入住</view>
					<view class="header_bottom">{{ startTime.slice(5, 7) }}月{{ startTime.slice(8, 10) }}日</view>
				</view>
				<view class="header_night">
					<view class="night_line"></view>
					<view class="night_box">{{ nightNum }}晚</view>
					<view class="night_line"></view>
				</view>
				<view class="header_end">
					<view class="header_top">{{ getWeek(endTime) }}离店</view>
					<view class="header_bottom">{{ endTime.slice(5, 7) }}月{{ endTime.slice(8, 10) }}日</view>
				</view>
			</view>

			<!-- 日历组件 -->
			<uv-calendars
				ref="calendar"
				range
				title="选择日期"
				start-text="住店"
				end-text="离店"
				color="#096562"
				confirmColor="#096562"
				:startDate="earlyTime"
				@confirm="handleConfirm"
			/>

			<!-- 房型列表区域 -->
			<view class="body_content" v-if="list.length">
				<!-- 每一个房型盒子区域 -->
				<view class="body_box" v-for="item in list" :key="item.id" @click="handleLookDetail(item)">
					<view class="box_left">
						<img mode="aspectFill" :src="item.fileInfoList[0].url" />
					</view>

					<view class="box_center">
						<view class="center_top">{{ item.hName }}</view>
						<view class="center_center">
							<view class="center_item" v-if="item.hAreas">{{ item.hAreas }}㎡</view>
						</view>
						<view class="center_bottom">
							<img v-for="item2 in item.hConfigList" :key="item2.id" class="img" :src="item2.fileUrl" />
						</view>
					</view>

					<view class="box_right">
						<view class="right_price">
							<text>¥</text>
							{{ item.price }}
						</view>
						<view class="right_btn" :class="{ inactive: item.remainRooms * 1 <= 0 }" @click.stop="goPageAffOrder(item)">订</view>
					</view>
				</view>

				<!-- 点击房型弹窗区域 -->
				<uv-popup ref="popup" bgColor="none" :safeAreaInsetBottom="false">
					<view class="body_pop">
						<!-- 轮播图区域 -->
						<swiper indicator-dots circular indicator-color="#FFFFFF" indicator-active-color="#096562" class="pop_swiper">
							<swiper-item class="pop_swiper_item" v-for="item in roomInfo.fileInfoList" :key="item.id">
								<img class="img" :src="item.url" />
							</swiper-item>
						</swiper>
						<!-- 轮播图关闭图标区域 -->
						<img class="pop_icon" src="../../static/index/close.png" @click="handleClosePop" />

						<view class="pop_body">
							<view class="body_title">{{ roomInfo.hName }}</view>
							<view class="body_tags">
								<view class="tags_item">
									<img class="img" src="../../static/index/place.png" />
									{{ roomInfo.hAreas }}㎡
								</view>
								<view class="tags_item" v-for="item2 in roomInfo.hConfigList" :key="item2.id">
									<img class="img" :src="item2.fileUrl" />
									{{ item2.name }}
								</view>
							</view>
							<view class="body_title2">费用明细</view>
							<view class="body_detail">
								<!-- <view class="detail_old">¥{{ roomInfo.price }}</view> -->
								<!-- <view class="detail_box">
									黄金会员9折
									<text>-¥25</text>
								</view>
								<view class="detail_box">
									活动
									<text>-¥2.5</text>
								</view> -->

								<view class="detail_new">
									每间每晚
									<view class="ml_10 color">¥</view>
									<view class="price color">{{ roomInfo.price }}</view>
								</view>
							</view>
							<view class="body_bottom">
								<view class="bottom_left" @click="handlePhone(info.managerPhone)">
									<img class="img" src="../../static/index/phone2.png" />
									联系商家
								</view>
								<view class="bottom_right">
									<text>¥</text>
									{{ roomInfo.price }}
									<view class="btn" :class="{ inactive: roomInfo.remainRooms * 1 <= 0 }" @click="goPageAffOrder(roomInfo)">预定</view>
								</view>
							</view>
						</view>
					</view>
				</uv-popup>
			</view>

			<view class="noData" v-else>
				<img src="../../static/images/noData.png" />
				暂无数据
			</view>
		</view>
	</view>
</template>

<script>
export default {
	data() {
		return {
			// 滚动穿透控制
			showPage: false,
			// 房型数据数组
			list: [],
			// 住几晚
			nightNum: 1,
			// 选择日期数组
			dayList: [],
			// 酒店信息
			info: null,
			// 房间信息
			roomInfo: {},
			// 民宿Id
			hotelId: '',
			// 是否有定位权限
			showLocation: false,
			// 是否展示距离
			distance: '',
			// 入住时间 YYYY-MM-DD
			startTime: '',
			// 离店时间 YYYY-MM-DD
			endTime: '',
			// 日历可以选择的最早日期
			earlyTime: ''
		}
	},
	onLoad(options) {
		this.getTimes()
		this.hotelId = options.id
		this.distance = options.distance === 'undefined' ? false : options.distance
		uni.getSetting({
			success: (res) => {
				this.showLocation = res.authSetting['scope.userLocation']
				this.getHotelInfo()
			}
		})
	},
	methods: {
		async getHotelInfo() {
			const res = await this.$myRequest({
				url: '/mhotel/ahpgetHouseByHotelId.action',
				data: {
					hotelId: this.hotelId,
					queryStartTime: this.startTime,
					queryEndTime: this.endTime
				}
			})
			// console.log(res)
			if (res.code === 200) {
				this.info = res.data.data
				this.list = res.data.data.houseList
			}
		},
		// 选择日期确定回调
		handleConfirm(e) {
			this.startTime = e.range.before
			this.endTime = e.range.after
			this.dayList = e.range.data
			this.nightNum = e.range.data.length - 1
			this.getHotelInfo()
		},
		// 点击地图图标回调
		handleMap(item) {
			if (this.showLocation) {
				let lat = item.hpositionWens.split(',')[0] * 1
				let lng = item.hpositionWens.split(',')[1] * 1
				uni.openLocation({
					latitude: lat,
					longitude: lng,
					name: item.hname,
					address: item.hposition,
					success: () => {}
				})
			} else {
				uni.showModal({
					content: '当前没有定位权限，是否去设置打开？',
					confirmText: '确认',
					cancelText: '取消',
					success: (res) => {
						if (res.confirm) {
							uni.openSetting({
								success: (res) => {
									this.showLocation = true
									this.handleMap(item)
								}
							})
						} else {
							uni.showToast({
								title: '获取定位权限失败,无法使用地图功能',
								icon: 'none',
								mask: true
							})
						}
					}
				})
			}
		},
		// 点击电话图标回调
		handlePhone(phone) {
			uni.makePhoneCall({
				phoneNumber: phone
			})
		},
		// 点击弹窗关闭图标回调
		handleClosePop() {
			this.showPage = false
			this.$refs.popup.close()
		},
		// 点击每一个户型回调
		handleLookDetail(item) {
			this.roomInfo = item
			this.showPage = true
			this.$refs.popup.open('bottom')
		},
		// 点击设施详情回调
		goPageDetailInfo() {
			uni.navigateTo({
				url: `/pages/detailInfo/detailInfo?hotelId=${this.hotelId}`
			})
		},
		// 点击 订 预定 按钮回调
		goPageAffOrder(item) {
			let flag = uni.getStorageSync('openid')
			if (flag) {
				if (!this.startTime) {
					uni.showToast({
						title: '请选择入住时间',
						icon: 'none'
					})
					return
				}
				if (!this.endTime) {
					uni.showToast({
						title: '请选择离店时间',
						icon: 'none'
					})
					return
				}
				if (item.remainRooms * 1 > 0) {
					this.$refs.popup.close()
					this.showPage = false

					let info = JSON.stringify({
						nightNum: this.nightNum,
						startTimeDay: this.startTime.slice(8, 10),
						startTimeMonth: this.startTime.slice(5, 7),
						startTimeWeek: this.getWeek(this.startTime),
						endTimeDay: this.endTime.slice(8, 10),
						endTimeMonth: this.endTime.slice(5, 7),
						endTimeWeek: this.getWeek(this.endTime),
						item: item,
						queryStartTime: this.startTime,
						queryEndTime: this.endTime,
						dayList: this.dayList,
						hTypeName: this.info.hTypeName
					})
					uni.navigateTo({
						url: `/pages/affirmOrder/affirmOrder?info=${info}`
					})
				} else {
					uni.showToast({
						title: '该房间已售罄',
						icon: 'none',
						mask: true
					})
				}
			} else {
				uni.showToast({
					title: '请先登录',
					icon: 'none',
					mask: true
				})
				setTimeout(() => {
					uni.navigateTo({
						url: '/pages/login/login'
					})
				}, 1500)
			}
		},
		// 点击日期区域回调
		handleOpen() {
			this.$refs.calendar.open()
		},
		// 传入参数获取当前是星期几
		getWeek(time) {
			let date = new Date(time)
			let week = date.getDay()
			let weekList = ['日', '一', '二', '三', '四', '五', '六']
			let res = '周' + weekList[week]
			return res
		},
		// 获取今明两天的日期 YYYY-MM-DD
		getTimes() {
			let today = new Date()
			let tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000)
			this.startTime = `${today.getFullYear()}-${(today.getMonth() + 1).toString().padStart(2, 0)}-${today.getDate().toString().padStart(2, 0)}`
			this.endTime = `${tomorrow.getFullYear()}-${(tomorrow.getMonth() + 1).toString().padStart(2, 0)}-${tomorrow.getDate().toString().padStart(2, 0)}`
			this.dayList = [this.startTime, this.endTime]
			this.earlyTime = this.startTime
		}
	}
}
</script>

<style lang="scss" scoped>
.container {
	display: flex;
	flex-direction: column;
	align-items: center;
	position: relative;
	min-height: 100vh;
	background-color: #ebeced;

	.banner {
		position: relative;
		margin-top: 20rpx;
		width: 750rpx;
		height: 422rpx;

		.img {
			width: 100%;
			height: 100%;
		}

		.slogan {
			position: absolute;
			top: 0;
			left: 0;
			display: flex;
			justify-content: center;
			align-items: center;
			width: 163rpx;
			height: 60rpx;
			background-color: rgba(255, 255, 255, 0.4);

			img {
				width: 125rpx;
				height: 44rpx;
			}
		}
	}

	.detail {
		z-index: 1;
		float: left;
		margin-top: -177rpx;
		box-sizing: border-box;
		padding: 0 30rpx 30rpx;
		width: 710rpx;
		border-radius: 10rpx;
		background-color: #fff;

		.detail_name {
			margin-top: 25rpx;
			font-size: 34rpx;
			font-weight: bold;
		}

		.detail_info {
			display: flex;
			justify-content: space-between;
			margin-top: 10rpx;

			.info_left {
				color: #999999;
				font-size: 20rpx;
			}

			.info_right {
				display: flex;
				align-items: center;
				color: #096562;
				font-size: 24rpx;

				img {
					margin-left: 6rpx;
					width: 10rpx;
					height: 20rpx;
				}
			}
		}

		.detail_group {
			display: flex;
			flex-wrap: wrap;
			margin-top: 5rpx;
			width: 450rpx;

			.group_item {
				display: flex;
				align-items: center;
				margin-right: 10rpx;
				margin-bottom: 10rpx;
				color: #999999;
				font-size: 20rpx;

				img {
					margin-right: 5rpx;
					width: 22rpx;
					height: 22rpx;
				}
			}
		}

		.address {
			display: flex;
			justify-content: space-between;
			margin-top: 8rpx;
			font-size: 28rpx;
			font-weight: bold;

			.address_left {
				width: 480rpx;
				overflow: hidden;
				text-overflow: ellipsis;
				white-space: nowrap;
			}

			.address_right {
				display: flex;

				.right_box {
					margin-left: 28rpx;
					width: 50rpx;
					height: 78rpx;

					img {
						width: 100%;
						height: 100%;
					}
				}
			}
		}

		.distance {
			margin-top: -35rpx;
			color: #999999;
			font-size: 24rpx;
		}
	}

	.body {
		float: left;
		margin-top: 20rpx;
		padding-bottom: 30rpx;
		width: 710rpx;
		border-radius: 10rpx;
		background-color: #fff;

		.body_header {
			display: flex;
			justify-content: space-around;
			box-sizing: border-box;
			padding: 0 30rpx;
			height: 150rpx;

			.header_start {
				display: flex;
				flex-direction: column;
				justify-content: center;
				align-items: center;
				width: 213rpx;
				height: 150rpx;
				font-size: 30rpx;

				.header_top {
					margin-bottom: 10rpx;
					color: #999999;
					font-size: 24rpx;
				}

				.header_bottom {
					font-size: 34rpx;
					font-weight: bold;
				}
			}

			.header_night {
				display: flex;
				justify-content: center;
				align-items: center;

				.night_line {
					width: 17rpx;
					height: 1rpx;
					background-color: #296de3;
				}

				.night_box {
					display: flex;
					align-items: center;
					justify-content: center;
					width: 81rpx;
					height: 46rpx;
					font-size: 24rpx;
					border-radius: 66rpx;
					border: 1rpx solid #296de3;
				}
			}

			.header_end {
				display: flex;
				flex-direction: column;
				justify-content: center;
				align-items: center;
				width: 213rpx;
				height: 150rpx;
				font-size: 30rpx;

				.header_top {
					margin-bottom: 10rpx;
					color: #999999;
					font-size: 24rpx;
				}

				.header_bottom {
					font-size: 34rpx;
					font-weight: bold;
				}
			}
		}

		.body_content {
			.body_box {
				box-sizing: border-box;
				padding: 0 30rpx;
				margin-bottom: 30rpx;
				display: flex;
				height: 193rpx;
				border-bottom: 1rpx solid #cccccc;

				.box_left {
					width: 213rpx;
					height: 161rpx;
					border-radius: 5rpx;

					img {
						width: 100%;
						height: 100%;
					}
				}

				.box_center {
					margin-left: 16rpx;

					.center_top {
						font-size: 34rpx;
						font-weight: bold;
					}

					.center_center {
						display: flex;
						flex-wrap: wrap;
						margin-top: 10rpx;
						color: #999999;
						font-size: 24rpx;

						.center_item {
							margin-right: 15rpx;
						}
					}
					.center_bottom {
						margin-top: 25rpx;

						.img {
							margin-right: 15rpx;
							width: 30rpx;
							height: 30rpx;
						}
					}
				}

				.box_right {
					display: flex;
					flex-direction: column;
					align-items: flex-end;
					margin-left: auto;
					margin-top: 20rpx;

					.right_price {
						color: #ff5733;
						font-size: 42rpx;
						text {
							font-size: 24rpx;
						}
					}

					.right_btn {
						display: flex;
						justify-content: center;
						align-items: center;
						margin-top: 10rpx;
						width: 100rpx;
						height: 66rpx;
						color: #fff;
						font-size: 36rpx;
						border-radius: 11rpx;
						background-color: #096562;
					}

					.inactive {
						background-color: #cccccc;
					}
				}
			}

			.body_pop {
				position: relative;
				height: 955rpx;
				border-radius: 22rpx 22rpx 0 0;
				background-color: #fff;
				overflow-y: auto;

				.pop_swiper {
					height: 422rpx;
					border-radius: 22rpx 22rpx 0 0;

					.pop_swiper_item {
						width: 100%;
						height: 100%;

						.img {
							width: 100%;
							height: 100%;
							border-radius: 22rpx 22rpx 0 0;
						}
					}
				}

				.pop_icon {
					position: absolute;
					top: 20rpx;
					right: 30rpx;
					width: 58rpx;
					height: 58rpx;
				}

				.pop_body {
					box-sizing: border-box;
					padding: 0 20rpx 30rpx;

					.body_title {
						margin-top: 30rpx;
						font-size: 32rpx;
						font-weight: bold;
					}

					.body_tags {
						display: flex;
						flex-wrap: wrap;
						margin-top: 20rpx;

						.tags_item {
							display: flex;
							align-items: center;
							margin-right: 76rpx;
							margin-bottom: 20rpx;
							color: #383838;
							font-size: 24rpx;

							.img {
								margin-right: 5rpx;
								width: 28rpx;
								height: 28rpx;
							}
						}
					}

					.body_title2 {
						margin-top: 20rpx;
						font-size: 28rpx;
					}

					.body_detail {
						display: flex;
						flex-direction: column;
						justify-content: space-between;
						// align-items: flex-end;
						box-sizing: border-box;
						padding: 20rpx 30rpx;
						margin-top: 18rpx;
						width: 710rpx;
						height: 266rpx;
						font-size: 24rpx;
						border-radius: 7rpx;
						background-color: #f2f2f2;

						.detail_old {
							text-align: end;
							text-decoration: line-through;
						}

						.detail_box {
							display: flex;
							justify-content: space-between;
							color: #808080;

							text {
								color: #ff5733;
							}
						}

						.detail_new {
							display: flex;
							justify-content: flex-end;
							align-items: center;
							font-size: 24rpx;

							.color {
								color: #ff5733;
							}

							.price {
								font-size: 36rpx;
							}

							.ml_10 {
								margin-left: 10rpx;
							}
						}
					}

					.body_bottom {
						display: flex;
						justify-content: space-between;
						align-items: center;
						margin-top: 250rpx;
						height: 80rpx;

						.bottom_left {
							display: flex;
							align-items: center;
							color: #333333;
							font-size: 24rpx;

							.img {
								margin-right: 10rpx;
								width: 48rpx;
								height: 48rpx;
							}
						}

						.bottom_right {
							display: flex;
							align-items: center;
							color: #ff5733;
							font-size: 40rpx;
							font-weight: bold;

							text {
								font-size: 24rpx;
							}

							.btn {
								display: flex;
								justify-content: center;
								align-items: center;
								margin-left: 30rpx;
								width: 238rpx;
								height: 80rpx;
								color: #fff;
								font-size: 32rpx;
								font-weight: 400;
								border-radius: 64rpx;
								background-color: #096562;
							}

							.inactive {
								background-color: #cccccc;
							}
						}
					}
				}
			}
		}

		.noData {
			display: flex;
			flex-direction: column;
			justify-content: center;
			align-items: center;
			padding-bottom: 20rpx;

			img {
				margin-top: 60rpx;
				width: 600rpx;
				height: 600rpx;
			}
		}
	}
}
</style>
