<template>
	<view class="repair-container">
		<!-- 可滚动内容区 -->
		<scroll-view scroll-y class="repair-scroll-content" @scroll="handleScroll">
			<!-- 空状态 -->
			<view v-if="records.length === 0" class="repair-empty-box">
				<view class="repair-empty-img-box">
					<image src="/static/ic_my_repair_01.png" class="repair-empty-img" />
				</view>
				<view class="repair-add-btn-box">
					<image src="/static/ic_my_repair_02.png" class="repair-add-btn" @click="addRepair" />
				</view>
			</view>
			<!-- 有数据时 -->
			<view v-else class="repair-list-box">
				<view v-for="(item, idx) in records" :key="idx" class="repair-card" @click="showDetail(item)">
					<view class="repair-row">
						<view class="repair-no">工单号：{{ item.no }}</view>
						<view class="repair-status" :class="item.statusClass">{{ item.statusText }}</view>
					</view>
					<image class="repair-line-image" src="/static/ic_my_repair_03.png"/>
					<view class="repair-info">建立时间：{{ item.time }}</view>
					<view class="repair-info">报事内容：{{ item.content }}</view>
					<view class="repair-info">报事位置：{{ item.addr }}</view>
					<view v-if="item.statusText === '已结束'" class="repair-eval-btn eval-btn-right">服务评价</view>
				</view>
				<!-- 悬浮新增按钮 -->
				<image src="/static/ic_my_repair_02.png" :class="['repair-add-btn-fixed', { 'hide': isAddBtnHidden }]" @click="addRepair" />
			</view>
		</scroll-view>
		<!-- 详情弹窗 -->
		<view v-if="showDetailDialog" class="repair-detail-mask" @click.self="closeDetail">
			<view class="repair-detail-dialog">
				<view class="repair-detail-title">报事详情
					<image src="/static/ic_close_01.png" class="repair-detail-close" @click.stop="closeDetail" />
				</view>
				<view class="repair-detail-progress-box">
					<view class="repair-detail-progress">
						<view v-for="(step, idx) in progressSteps" :key="idx" class="repair-detail-step">
							<view :class="['repair-detail-dot', detailStep >= idx ? 'active' : '', (detailStep === idx && detailStatus !== '已结束') ? 'current' : '']"></view>
							<view v-if="idx < progressSteps.length - 1" :class="['repair-detail-line', detailStep > idx ? 'active' : '']"></view>
						</view>
					</view>
					<view class="repair-detail-progress-labels">
						<view v-for="(step, idx) in progressSteps" :key="idx" class="repair-detail-label">{{ step }}</view>
					</view>
				</view>
				<view class="repair-detail-info">建立时间：{{ detailItem.time }}</view>
				<view class="repair-detail-info">报事内容：{{ detailItem.content }}</view>
				<view class="repair-detail-info">报事位置：{{ detailItem.addr }}</view>
				<button v-if="detailItem.statusText === '已结束'" class="repair-detail-btn" @click="goTEvaluate">评价服务</button>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				// 空数组可切换空状态
				records: [{
						no: '20250628147856687',
						time: '2025-07-02 15:24:36',
						content: '室内无气，未欠费',
						addr: '68栋1单元8-9',
						statusText: '待处理',
						statusClass: 'pending'
					},
					{
						no: '20250628147856687',
						time: '2025-07-02 15:24:36',
						content: '室内无气，未欠费',
						addr: '68栋1单元8-9',
						statusText: '已结束',
						statusClass: 'done'
					},
					{
						no: '20250628147856687',
						time: '2025-07-02 15:24:36',
						content: '室内无气，未欠费',
						addr: '68栋1单元8-9',
						statusText: '处理中',
						statusClass: 'doing'
					},
					{
						no: '20250628147856687',
						time: '2025-07-02 15:24:36',
						content: '室内无气，未欠费',
						addr: '68栋1单元8-9',
						statusText: '已结束',
						statusClass: 'done'
					},
					{
						no: '20250628147856687',
						time: '2025-07-02 15:24:36',
						content: '室内无气，未欠费',
						addr: '68栋1单元8-9',
						statusText: '已结束',
						statusClass: 'done'
					}
				],
				showDetailDialog: false,
				detailItem: {},
				detailStep: 0,
				detailStatus: '',
				progressSteps: ['创建报事', '待处理', '处理中', '已结束'],
				lastScrollTop: 0,
				isAddBtnHidden: false
			}
		},
		methods: {
			goBack() {
				uni.navigateBack();
			},
			addRepair() {
				uni.navigateTo({
					url: '/pages/sys/user/myRepair/addRepair'
				});
			},
			showDetail(item) {
				this.detailItem = item;
				// 进度映射
				if(item.statusText === '待处理') { this.detailStep = 1; this.detailStatus = '待处理'; }
				else if(item.statusText === '处理中') { this.detailStep = 2; this.detailStatus = '处理中'; }
				else if(item.statusText === '已结束') { this.detailStep = 3; this.detailStatus = '已结束'; }
				else { this.detailStep = 0; this.detailStatus = '创建报事'; }
				this.showDetailDialog = true;
			},
			closeDetail() {
				this.showDetailDialog = false;
			},
			goTEvaluate(){
				uni.navigateTo({
					url: '/pages/sys/user/myRepair/repairEvaluate'
				});
			},
			handleScroll(e) {
				const scrollTop = e.detail.scrollTop;
				// 为了避免过于频繁的触发，可以设置一个阈值
				if (Math.abs(scrollTop - this.lastScrollTop) < 20) {
					return;
				}
				if (scrollTop > this.lastScrollTop && scrollTop > 50) {
					// 向下滚动，隐藏按钮
					this.isAddBtnHidden = true;
				} else {
					// 向上滚动，显示按钮
					this.isAddBtnHidden = false;
				}
				this.lastScrollTop = scrollTop;
			}
		}
	}
</script>

<style scoped>
	.repair-container {
		height: 100vh;
		background: #f7f7f7;
		display: flex;
		flex-direction: column;
	}

	.repair-navbar {
		width: 100%;
		height: 120rpx;
		padding-top: 40rpx;
		display: flex;
		align-items: center;
		justify-content: center;
		position: relative;
		background: #fff;
		flex-shrink: 0; /* 防止被压缩 */
	}

	.repair-back {
		position: absolute;
		left: 37rpx;
		width: 15rpx;
		height: 33rpx;
	}

	.repair-title {
		font-size: 36rpx;
		color: #000;
		font-weight: 500;
	}

	.repair-scroll-content {
		flex: 1;
		overflow-y: auto;
		padding-bottom: 40rpx;
	}

	.repair-empty-box {
		margin: 48rpx 24rpx 0 24rpx;
		position: relative;
	}

	.repair-empty-img-box {
		border: 2rpx dashed #BDBDBD;
		border-radius: 8rpx;
		background: #fafbfc;
		width: 100%;
		min-height: 220rpx;
		display: flex;
		align-items: center;
		justify-content: center;
	}

	.repair-empty-img {
		width: 90%;
		max-width: 400rpx;
		height: 180rpx;
		object-fit: contain;
		margin: 24rpx auto;
	}

	.repair-add-btn-box {
		position: absolute;
		right: 24rpx;
		bottom: -40rpx;
	}

	.repair-add-btn {
		width: 80rpx;
		height: 80rpx;
		border: 2rpx dashed #BDBDBD;
		border-radius: 50%;
		background: #fff;
		box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.08);
	}

	.repair-list-box {
		margin: 32rpx 0 0 0;
		padding: 0 24rpx;
		position: relative;
	}

	.repair-card {
		background: #fff;
		border-radius: 12rpx;
		margin-bottom: 24rpx;
		box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.03);
		padding-top: 25rpx;
		padding-bottom: 32rpx;
	}

	.repair-row {
		display: flex;
		align-items: center;
		justify-content: space-between;
		margin-bottom: 12rpx;
		margin-top: 25rpx;
		margin-left: 19rpx;
		margin-right: 50rpx;
	}

	.repair-no {
		font-size: 24rpx;
		color: #0B0B0B;
		font-weight: 500;
	}

	.repair-status {
		font-size: 24rpx;
		font-weight: 500;
	}
	.repair-line-image{
		margin: left 29rpx ;
		margin-right: 39rpx;
		height: 2rpx;
		margin-bottom: 29rpx;
	}

	.repair-status.pending {
		color: #FF9800;
	}

	.repair-status.doing {
		color: #05C58C;
	}

	.repair-status.done {
		color: #BDBDBD;
	}

	.repair-info {
		font-size: 24rpx;
		color: #888;
		margin-bottom: 30rpx;
		margin-left: 47rpx;
	}

	.repair-eval-btn {
		margin-top: -20rpx;
		margin-bottom: 0;
		margin-left: auto;
		margin-right: 44rpx;
		display: flex;
		justify-content: flex-end;
		align-items: center;
		padding: 0 18rpx;
		height: 44rpx;
		line-height: 44rpx;
		border-radius: 8rpx;
		border: 2rpx solid #2186FF;
		color: #2186FF;
		font-size: 24rpx;
		background: #fff;
		font-weight: 500;
		width: fit-content;
	}

	.repair-add-btn-fixed {
		position: fixed;
		right: 40rpx;
		bottom: 80rpx;
		width: 100rpx;
		height: 100rpx;
		z-index: 100;
		transition: transform 0.3s ease;
		transform: translateX(0);
	}

	.repair-add-btn-fixed.hide {
		transform: translateX(200%);
	}

	.repair-detail-mask {
		position: fixed;
		left: 0; top: 0; right: 0; bottom: 0;
		background: rgba(0,0,0,0.45);
		z-index: 999;
		display: flex;
		align-items: flex-end;
		justify-content: center;
	}
	.repair-detail-dialog {
		width: 100vw;
		background: #fff;
		border-radius: 18rpx 18rpx 0 0;
		box-shadow: 0 -2rpx 24rpx rgba(0,0,0,0.10);
		padding: 52rpx 56rpx 69rpx 56rpx;
		margin-bottom: 0;
	}
	.repair-detail-title {
		font-size: 36rpx;
		color: #000;
		text-align: center;
		position: relative;
		margin-bottom: 48rpx;
	}
	.repair-detail-close {
		width: 32rpx;
		height: 32rpx;
		position: absolute;
		right: 0;
		top: 0;
	}
	.repair-detail-progress-box {
		height: 107rpx;
		margin-bottom: 41rpx;
		background: #F7F7F7;
		border-radius: 10rpx;
		display: flex;
		flex-direction: column;
		justify-content: center;
		align-items: stretch;
	}
	.repair-detail-progress {
		display: flex;
		align-items: center;
		justify-content: space-between;
		margin-bottom: 5rpx;
		margin-left: 70rpx;
		width: 100%;
	}
	.repair-detail-step {
		display: flex;
		align-items: center;
		flex: 1;
		position: relative;
	}
	.repair-detail-dot {
		width: 22rpx;
		height: 22rpx;
		border-radius: 50%;
		background: #BDBDBD;
		border: 2rpx solid #BDBDBD;
		position: relative;
		z-index: 2;
	}
	.repair-detail-dot.active {
		background: #2186FF;
		border-color: #2186FF;
	}
	.repair-detail-dot.current {
		background: #EF8D00;
		border-color: #EF8D00;
	}
	.repair-detail-line {
		flex: 1;
		height: 4rpx;
		background: #BDBDBD;
		margin: 0 2rpx;
		z-index: 1;
	}
	.repair-detail-line.active {
		background: #2186FF;
	}
	.repair-detail-progress-labels {
		display: flex;
		justify-content: space-between;
		margin-left: 0;
		width: 100%;
	}
	.repair-detail-label {
		font-size: 22rpx;
		color: #888;
		text-align: center;
		flex: 1;
		position: relative;
		top: 8rpx;
	}
	.repair-detail-info {
		font-size: 26rpx;
		color: #222;
		margin-bottom: 30rpx;
	}
	.repair-detail-btn {
		width:445rpx;
		height: 73rpx;
		background: linear-gradient(90deg, #005DE9 0%, #4B9BFF 100%);
		color: #fff;
		font-size: 32rpx;
		border: none;
		border-radius: 30rpx;
		margin-top: 32rpx;
		font-weight: 600;
		margin-top: 100rpx;
	}
</style>

/* 让服务评价按钮靠右 */
.eval-btn-right {
  margin-left: auto;
  display: block;
  width: fit-content;
}