<template>
	<scroll-view class="container" :scroll-y="scrollY" @scrolltolower="scrolltolower">
		<!-- 顶部分段器区域 -->
		<view class="control">
			<view class="control_item" :class="{ active: current === index }" v-for="(item, index) in items" :key="index" @click="onClickItem(index)">{{ item }}</view>
		</view>

		<!-- 主体内容区域 -->
		<view class="body">
			<!-- 每一个记录区域 -->
			<view class="body_item" v-for="item in list" :key="item.id">
				<!-- 工单编号 -->
				<view class="item_title" @click="handleLookDetail(item)">
					<img src="../../static/images/repairsImg/order.png" />
					<view class="title_info">工单编号：{{ item.recordNo }}</view>
					<view class="title_type" v-if="item.timeoutStr">{{ item.timeoutStr }}</view>
				</view>

				<!-- 报修时间 -->
				<view class="item_time">
					<view class="time_msg">
						报修时间：
						<text>{{ item.reportTime }}</text>
					</view>
					<view class="time_type" v-if="item.state === '待接单'">待接单</view>
					<view class="time_type color_type" v-if="item.state === '维修中'">维修中</view>
					<view class="time_type" v-if="item.state === '待确认'">待确认</view>
					<view class="time_type color_type2" v-if="item.state === '已完成'">已完成</view>
					<view class="time_type" v-if="item.state === '已取消'">已取消</view>
				</view>

				<!-- 报修姓名 -->
				<view class="item_box">
					<view class="box_key">报修姓名：</view>
					<view class="box_value">{{ item.userName }}</view>
				</view>

				<!-- 报修电话 -->
				<view class="item_box">
					<view class="box_key">报修电话：</view>
					<view class="box_value phone" @click="handleCallPhone(item.userPhone)">
						{{ item.userPhone }}
						<img src="../../static/images/repairsImg/phone.png" />
					</view>
				</view>

				<!-- 报修区域 -->
				<view class="item_box">
					<view class="box_key">报修区域：</view>
					<view class="box_value">{{ item.areaName }}</view>
				</view>

				<!-- 详细地址 -->
				<view class="item_box">
					<view class="box_key">详细地址：</view>
					<view class="box_value">{{ item.address }}</view>
				</view>

				<!-- 报修物品 -->
				<view class="item_box">
					<view class="box_key">报修物品：</view>
					<view class="box_value">{{ item.articleName }}</view>
				</view>

				<!-- 故障描述 -->
				<view class="item_box">
					<view class="box_key">故障描述：</view>
					<view class="box_value">{{ item.descript }}</view>
				</view>

				<!-- 上传图片 -->
				<view class="item_img">
					<view class="img_key">上传图片：</view>
					<img class="img_value" mode="aspectFill" :src="item.images[0]" @click="handleLookImgs(item.images)" />
				</view>

				<!-- 维修师傅 -->
				<view class="item_time" v-if="item.maintenancerName">
					<view class="time_msg">
						维修师傅：
						<text>{{ item.maintenancerName }}</text>
					</view>
				</view>

				<!-- 师傅电话 -->
				<view class="item_box" v-if="item.maintenancerPhone">
					<view class="box_key">师傅电话：</view>
					<view class="box_value phone" @click="handleCallPhone(item.maintenancerPhone)">
						{{ item.maintenancerPhone }}
						<img src="../../static/images/repairsImg/phone.png" />
					</view>
				</view>

				<!-- 维修费用 -->
				<view class="item_box" v-if="item.money">
					<view class="box_key">维修费用：</view>
					<view class="box_value2 phone" @click="checkFeeDetail(item)">
						{{ item.price }}元
						<img src="../../static/images/repairsImg/eye.png" />
					</view>
				</view>

				<!-- 维修费用弹窗 -->
				<uni-popup :is-mask-click="false" ref="popup_fee">
					<view class="pop_fee">
						<view class="fee_title">
							维修费用
							<text @click="$refs.popup_fee[0].close()">×</text>
						</view>
						<view class="fee_list">
							<view class="fee_item" v-for="ele in consumables" :key="ele.id">
								<view class="fee_box">
									耗材：
									<text>{{ ele.consumeName }}</text>
								</view>
								<view class="fee_box">
									耗材单价：
									<text>{{ ele.price }}元</text>
								</view>
								<view class="fee_box">
									耗材数量：
									<text>{{ ele.number }}</text>
								</view>
								<view class="fee_box">
									耗材费用：
									<text>{{ ele.totalPrice }}元</text>
								</view>
							</view>
						</view>
					</view>
				</uni-popup>

				<!-- 按钮 -->
				<view class="item_btn" v-if="item.state !== '已取消'">
					<view class="btn_box type" v-if="item.state === '待接单' || item.state === '维修中'" @click="handleExpedite">催单</view>
					<view class="btn_box type" v-if="item.state === '待确认'" @click="handleBackOffice">转后勤</view>
					<view class="btn_box type" v-if="item.state === '待确认'">支付</view>
					<view class="btn_box type2" v-if="item.state === '待接单' || item.state === '维修中' || item.state === '待确认'" @click="handleRepeal">撤销</view>
					<view class="btn_box type" v-if="item.state === '已完成'" @click="handleEvaluate(item)">去评价</view>
				</view>
				<view class="item_btn2" v-else></view>

				<!-- 转后勤弹窗 -->
				<uni-popup ref="popup_logistics" :is-mask-click="false">
					<view class="pop_logistics">
						<view class="logistics_title">转后勤</view>
						<view class="logistics_body">
							<textarea placeholder-style="color:#CCCCCC" placeholder="请输入您宝贵的留言" v-model="logisticsValue"></textarea>
						</view>
						<view class="logistics_btn">
							<view class="btn_box cancel" @click="$refs.popup_logistics[0].close()">取消</view>
							<view class="btn_box confirm" @click="handleLogisticsConfirm">确定</view>
						</view>
					</view>
				</uni-popup>
			</view>

			<!-- 没有数据时展示的图片 -->
			<view class="body_no_data" v-if="list.length === 0">
				<img src="../../pagesClockIn/static/imgs/nodata.png" />
				<view>暂无数据</view>
			</view>

			<view class="body_text" v-if="list.length && showBottomText">---我是有底线的---</view>
		</view>
	</scroll-view>
</template>

<script>
export default {
	data() {
		return {
			// 后勤弹窗输入框绑定数据
			logisticsValue: '',
			// 顶部分段器数组
			items: ['未完成（0）', '待确认（0）', '已完成（0）'],
			// 分段器数组当前索引
			current: 0,
			// 订单列表
			list: [],
			// 是否可以Y轴滚动
			scrollY: true,
			// 是否显示底部文字
			showBottomText: false,
			// 用户id,请求接口时的参数
			userId: '',
			// 当前页
			currentPage: 1,
			// 每页多少条数据
			pageCount: 5,
			// 列表总数据
			total: 0,
			// 维修费用耗材明细列表
			consumables: []
		}
	},
	mounted() {
		console.log('我的报修页面加载')
		this.userId = uni.getStorageSync('repairsUserInfo').userId
		this.getRepairCount()
		this.getRepairList()
	},
	methods: {
		// 获取每个状态的订单总数量
		async getRepairCount() {
			const res = await this.$myRequest_repairs({
				url: '/repairRecord/getRepairRecordCountByUserId',
				data: {
					userId: this.userId
				}
			})
			// console.log(res)
			if (res.code === '200') {
				this.items = [`未完成（${res.data.incomplete}）`, `待确认（${res.data.confirmed}）`, `已完成（${res.data.finished}）`]
			}
		},

		// 获取订单列表数据
		async getRepairList() {
			const res = await this.$myRequest_repairs({
				url: '/repairRecord/getRepairRecordsByUserId',
				data: {
					userId: this.userId,
					currentPage: this.currentPage,
					pageCount: this.pageCount,
					state: this.current - 0 + 1
				}
			})
			console.log(res)
			if (res.code === '200') {
				this.list = [...this.list, ...res.data.list]
				this.total = res.data.totalCount
				// 当页面没有数据时,页面禁止滚动
				if (this.list.length === 0) {
					this.scrollY = false
				}
			}
		},

		// 滚动到底部触发回调
		scrolltolower() {
			console.log('页面触底了')
			if (this.total > this.list.length) {
				this.currentPage++
				this.getRepairList()
			} else {
				console.log('没有更多数据了')
				this.showBottomText = true
			}
		},

		// 分段器切换回调
		onClickItem(index) {
			// 清空数组
			this.list = []
			// 重置当前页面可以滚动
			this.scrollY = true
			// 重置请求数据当前页参数
			this.currentPage = 1
			// 改变分段器索引
			this.current = index
			this.getRepairList()
		},

		// 转后勤弹窗确定按钮回调
		handleLogisticsConfirm() {
			console.log(this.logisticsValue)
			uni.showToast({
				title: '留言成功',
				icon: 'success'
			})
			this.$refs.popup_logistics[0].close()
		},
		// 催单按钮回调
		handleExpedite() {
			uni.showModal({
				title: '提示',
				content: '确定催单吗？',
				success: (res) => {
					if (res.confirm) {
						uni.showToast({
							title: '催单成功',
							icon: 'success'
						})
					}
				}
			})
		},

		// 撤销按钮回调
		handleRepeal() {
			uni.showModal({
				title: '提示',
				content: '确定撤销吗？',
				success: (res) => {
					if (res.confirm) {
						uni.showToast({
							title: '撤销成功',
							icon: 'success'
						})
					}
				}
			})
		},

		// 查看维修费用回调
		checkFeeDetail(item) {
			this.$refs.popup_fee[0].open('center')
			this.consumables = item.consumables
		},
		// 转后勤按钮回调
		handleBackOffice() {
			this.$refs.popup_logistics[0].open('center')
		},
		// 去评价按钮回调
		handleEvaluate(item) {
			let recordId = item.id
			uni.navigateTo({
				url: `/pagesRepairs/evaluate/evaluate?recordId=${recordId}`
			})
		},
		// 点击工单编号区域回调
		handleLookDetail(item) {
			const detailInfo = encodeURIComponent(JSON.stringify(item))
			// console.log(detailInfo)
			uni.navigateTo({
				url: `/pagesRepairs/repairDetails/repairDetails?detailInfo=${detailInfo}`
			})
		},
		// 点击电话号码回调
		handleCallPhone(phone) {
			uni.makePhoneCall({
				phoneNumber: phone
			})
		},
		// 点击图片回调
		handleLookImgs(img) {
			uni.previewImage({
				urls: img
			})
		}
	}
}
</script>

<style lang="scss" scoped>
.container {
	display: flex;
	flex-direction: column;
	box-sizing: border-box;
	padding: 0 30rpx;
	width: 100vw;
	height: calc(100vh - 152rpx);
	overflow-y: auto;

	// 隐藏滚动条
	::-webkit-scrollbar {
		width: 0;
		height: 0;
		color: transparent;
	}

	.control {
		display: flex;
		box-sizing: border-box;
		margin: 26rpx 0 29rpx;
		padding: 6rpx;
		width: 100%;
		height: 88rpx;
		border-radius: 18rpx;
		background-color: #f2f2f2;

		.control_item {
			flex: 1;
			display: flex;
			justify-content: center;
			align-items: center;
			height: 76rpx;
			font-size: 32rpx;
		}

		.active {
			border-radius: 18rpx;
			background-color: #fff;
		}
	}

	.body {
		// height: calc(100vh - 190rpx);
		// overflow-y: auto;
		padding-bottom: 25rpx;

		.body_item {
			margin: 10rpx 10rpx 30rpx;
			// height: 799rpx;
			border-radius: 11rpx;
			box-shadow: 0 0 8rpx #d9d9d9;

			.item_title {
				display: flex;
				align-items: center;
				padding: 0 30rpx;
				height: 87rpx;
				border-bottom: 1rpx solid #e6e6e6;

				img {
					width: 30rpx;
					height: 30rpx;
				}

				.title_info {
					margin: 0 21rpx 0 13rpx;
					font-size: 28rpx;
				}

				.title_type {
					width: 137rpx;
					height: 47rpx;
					line-height: 47rpx;
					text-align: center;
					border-radius: 136rpx;
					color: #ff5733;
					font-size: 24rpx;
					border: 1rpx solid #ff5733;
				}
			}

			.item_time {
				display: flex;
				justify-content: space-between;
				align-items: center;
				padding: 0 30rpx;
				height: 79rpx;

				.time_msg {
					font-size: 28rpx;
					color: #808080;

					text {
						color: #000000;
					}
				}

				.time_type {
					font-size: 32rpx;
					color: #ff5733;
				}

				.color_type {
					color: #1e7dfb;
				}
				.color_type2 {
					color: #6fb6b8;
				}
			}

			.item_box {
				display: flex;
				padding: 0 30rpx;
				height: 60rpx;
				font-size: 28rpx;

				.box_key {
					color: #808080;
				}

				.box_value {
					display: flex;

					img {
						margin-top: 5rpx;
						margin-left: 10rpx;
						width: 28rpx;
						height: 28rpx;
					}
				}

				.box_value2 {
					display: flex;

					img {
						margin-top: -2rpx;
						margin-left: 14rpx;
						width: 46rpx;
						height: 46rpx;
					}
				}

				.phone {
					color: #6fb6b8;
				}
			}

			.item_img {
				display: flex;
				align-items: center;
				padding: 0 30rpx;
				height: 120rpx;
				color: #808080;
				font-size: 28rpx;

				.img_key {
				}

				.img_value {
					width: 120rpx;
					height: 120rpx;
					border-radius: 14rpx;
				}
			}

			.item_btn {
				display: flex;
				align-items: center;
				justify-content: flex-end;
				padding: 0 30rpx;
				height: 153rpx;

				.btn_box {
					display: flex;
					justify-content: center;
					align-items: center;
					margin-left: 16rpx;
					width: 174rpx;
					height: 68rpx;
					font-size: 28rpx;
					border-radius: 11rpx;
				}

				.type {
					color: #fff;
					background-color: #6fb6b8;
				}

				.type2 {
					color: #6fb6b8;
					background-color: #fff;
					border: 1rpx solid #6fb6b8;
				}
			}

			.item_btn2 {
				height: 50rpx;
			}

			.pop_fee {
				padding-bottom: 50rpx;
				border-radius: 19rpx;
				background-color: #fff;

				.fee_title {
					display: flex;
					justify-content: space-between;
					align-items: center;
					box-sizing: border-box;
					padding: 0 31rpx 0 42rpx;
					width: 690rpx;
					height: 110rpx;
					font-size: 32rpx;
					font-weight: bold;
					border-radius: 19rpx 19rpx 0 0;
					border-bottom: 1rpx solid #e6e6e6;

					text {
						font-size: 45rpx;
						font-weight: 400;
						color: #808080;
					}
				}

				.fee_list {
					height: 40vh;
					overflow-y: auto;

					.fee_item {
						border-bottom: 1rpx solid #e6e6e6;

						.fee_box {
							display: flex;
							align-items: center;
							padding-left: 42rpx;
							height: 80rpx;
							font-size: 28rpx;
							color: #808080;

							text {
								color: #000000;
							}
						}
					}
				}
			}

			.pop_logistics {
				border-radius: 19rpx;
				background-color: #fff;

				.logistics_title {
					display: flex;
					justify-content: center;
					align-items: center;
					width: 690rpx;
					height: 110rpx;
					font-size: 32rpx;
					font-weight: bold;
					border-radius: 19rpx 19rpx 0 0;
					border-bottom: 1rpx solid #e6e6e6;
				}

				.logistics_body {
					height: 440rpx;
					border-bottom: 1rpx solid #e6e6e6;

					textarea {
						box-sizing: border-box;
						margin: 35rpx 40rpx;
						padding: 20rpx;
						width: 610rpx;
						height: 370rpx;
						font-size: 28rpx;
						border-radius: 14rpx;
						border: 1rpx solid #e6e6e6;
					}
				}

				.logistics_btn {
					display: flex;
					align-items: center;
					justify-content: space-evenly;
					height: 121rpx;

					.btn_box {
						display: flex;
						justify-content: center;
						align-items: center;
						width: 203rpx;
						height: 72rpx;
						border-radius: 9rpx;
						font-size: 32rpx;
					}

					.cancel {
						background-color: #e5e5e5;
						color: #6fb6b8;
					}

					.confirm {
						background-color: #6fb6b8;
						color: #fff;
					}
				}
			}
		}

		.body_no_data {
			text-align: center;
			color: #b3b3b3;
			font-size: 24rpx;

			img {
				margin: 150rpx auto 50rpx;
				width: 480rpx;
				height: 508rpx;
			}
		}

		.body_text {
			text-align: center;
			color: #b3b3b3;
			font-size: 24rpx;
		}
	}
}
</style>
