<template>
	<view class="content-box" style="margin-top: 30rpx;">
		<view class="list" v-if="state.list.length>0">
			<u-checkbox-group @change="checkboxGroupChange" ref="checkbox">
				<view class="item" v-for="(item, index) in state.list" :key="index"
					:class="item.suppleStatus=='PAY'?'finished':''">
					<view class="head">
						<view class="name">
							<image :src="`${$imgUrl}user/icon-ETC.png`" class="icon"></image>
							<text class="title m-10">{{item.cardId}}</text>
							<text class="tag-green" v-if="item.suppleStatus=='NOTPAY'">待支付</text>
							<text class="tag-green" v-else-if="item.suppleStatus=='PAY'">已支付</text>
							<text class="tag-green" v-else>已下支付单</text>
						</view>
						<view class="status text-black">{{item.vehiclePlate}}</view>
					</view>
					<view class="detail">
						<view class="orders">
							<view class="order-text">
								<text class="type">补缴类型：</text>
								<text class="value">{{item.suppleType=='TRAFFIC'?'流水欠费补缴':'卡账欠费补缴'}}</text>
							</view>
							<view class="order-text">
								<text class="type">补缴单号：</text>
								<text class="value">{{item.suppleNo}}</text>
							</view>
							<view class="order-text">
								<text class="type">补缴单生成时间：</text>
								<text class="value">{{item.insertTime}}</text>
							</view>
						</view>
						<u-checkbox @change="checkboxChange" v-model="item.checked" :name="item.suppleNo"
							v-if="item.suppleStatus=='NOTPAY'">
						</u-checkbox>
					</view>
					<view class="detail1">
						<view class="order-text1">
							<text class="type">{{item.extolllaneName}}</text>
							<text class="value">{{item.exTime}}</text>
						</view>
						<view class="order-text1">
							<text class="type">{{item.entolllaneName}}</text>
							<text class="value">{{item.enTime}}</text>
						</view>
					</view>
					<view class="bottom">
						<view class="bottom-left"><text class="tit1">通行金额：￥</text><text
								class="amount1">{{item.fee}}</text>
						</view>
						<view class="bottom-left"><text class="tit1">服务费用：￥</text><text
								class="amount1">{{item.serviceFee}}</text>
						</view>
						<view class="bottom-left"><text class="tit">欠费总金额：￥</text><text
								class="amount">{{item.totalFee}}</text>
						</view>
					</view>
				</view>
			</u-checkbox-group>



			<!-- 			<view class="item">
				<view class="head">
					<view class="name">
						<image :src="`${$imgUrl}user/icon-ETC.png`" class="icon"></image>
						<text class="title m-10">20230010330</text>
						<text class="tag-green">待支付</text>
					</view>
					<view class="status text-black">贵A123456</view>
				</view>
				<view class="detail">
					<view class="orders">
						<view class="order-text">
							<text class="type">补缴单号：</text>
							<text class="value">01872753475754</text>
						</view>
						<view class="order-text odd">
							<text class="type">补缴单生成时间：</text>
							<text class="value">2023-01-12 15:09:18</text>
						</view>
					</view>
				</view>
				<view class="bottom">
					<view class="bottom-left"><text class="tit">欠费金额：￥</text><text class="amount">1200.00</text>
					</view>
					<view class="btns-box">
						<view class="btn btn-primary" @click="$util.navTo(`/pages/order/refund-confirm`)">支付</view>
					</view>
				</view>
			</view>
			<view class="item finished">
				<view class="head">
					<view class="name">
						<image :src="`${$imgUrl}user/icon-ETC.png`" class="icon"></image>
						<text class="title m-10">20230010330</text>
						<text class="tag-grey">已支付</text>
					</view>
					<view class="status text-black">贵A123456</view>
				</view>
				<view class="detail">
					<view class="orders">
						<view class="order-text">
							<text class="type">补缴单号：</text>
							<text class="value">01872753475754</text>
						</view>
						<view class="order-text odd">
							<text class="type">补缴单生成时间：</text>
							<text class="value">2023-01-12 15:09:18</text>
						</view>
					</view>
				</view>
				<view class="bottom">
					<view class="bottom-left"><text class="tit">欠费金额：￥</text><text class="amount">1200.00</text>
					</view>
					<view class="btns-box">
						<view class="btn btn-disable">已支付</view>
					</view>

				</view>
			</view> -->


		</view>
		<view class="tips" v-else>
			~暂无数据~
		</view>
		<view class="footer">
			<u-checkbox-group>
				<u-checkbox @change="checkboxChangeAll" v-model="item.checked" v-for="(item, index) in list2"
					:key="index" :name="item.name">{{item.name}}</u-checkbox>
			</u-checkbox-group>
			<view class="footer-right">
				<view class="row1">
					合计：￥{{allPrice}}
				</view>
				<view class="btn" @click="wxPayment">
					支付
				</view>
			</view>
		</view>
	</view>
</template>

<script lang="ts" setup>
	import {
		pathToBase64
	} from "@/utils/util/imageTool.js";
	import {
		getItem
	} from "@/utils/storage.ts"
	import {
		wechatAppID,
		wechatSecret,
		CardBillQuery,
		CardBillPlaceOrder,
		CardBillPayStatus,
		wechatPayConfigId
	} from "@/utils/network/api.js";
	import {
		request
	} from "@/utils/network/request.js";

	import {
		stringToJson
	} from "@/utils/network/encryption";
	import {
		onLoad,
		onShow,
		onPullDownRefresh
	} from "@dcloudio/uni-app";
	import {
		ref,
		reactive
	} from "vue"
	import {
		confirm,
		msg
	} from "@/utils/utils";
	const state = reactive({
		list: [],
		suppleNoList: [],
		openid: '',
		orderId: ''

	})
	const checkbox = ref()
	const list2 = reactive([{
		name: '全选',
		checked: false,
		disabled: false
	}])
	const allPrice = ref(0)
	const all = ref(true)
	// 获取列表数据
	const getlist = () => {
		allPrice.value = 0

		const options = {
			type: 2,
			data: {
				opId: getItem('openId')
			},
			method: "POST",
			showLoading: true,
		};
		request(CardBillQuery, options).then((res) => {
			const data = stringToJson(res.bizContent);
			console.log(data);
			data.data = data.data.map(val => {
				val.checked = false
				val.fee = val.fee / 100
				val.totalFee = val.totalFee / 100
				val.serviceFee = val.serviceFee / 100
				return val
			})
			state.list = data.data
			console.log(state.list, "我是处理后得列表");
		});
	}

	const checkboxChangeAll = (e) => {
		console.log(e);
		allPrice.value = 0
		state.suppleNoList = []
		if (e.value) {
			state.list.map(val => {
				val.checked = true;
				if (val.suppleStatus == 'NOTPAY') {
					allPrice.value += val.totalFee
					state.suppleNoList.push(val.suppleNo)
				}
			})
		} else {
			state.list.map(val => {
				val.checked = false;
			})
		}

		console.log(state.suppleNoList, "支付集合");
	}

	const checkboxChange = (e) => {
		console.log(e);
	}
	const checkboxGroupChange = (e) => {
		console.log(e);
		state.suppleNoList = e
		let arr = []
		allPrice.value = 0
		state.suppleNoList.forEach((item, i) => {
			state.list.forEach((val, index) => {
				if (item == val.suppleNo) {
					arr.push(val.totalFee)
				}
			})
		})
		arr.forEach(item => {
			allPrice.value += item
		})

		console.log(state.suppleNoList, "支付集合");
	}


	//获取微信小程序openid
	const getOpenID = () => {
		uni.login({
			provider: "weixin",
			success: function(e) {
				wx.request({
					url: `https://api.weixin.qq.com/sns/jscode2session?appid=${wechatAppID}&secret=${wechatSecret}&js_code=${e.code}&grant_type=authorization_code`,
					success: (res: any) => {
						state.openid = res.data.openid;
						console.log(state.openid, "微信登录获得");
					},
				});
			},
		});
	};


	//掉起微信支付
	const wxPayment = () => {
		if (state.suppleNoList.length > 0) {
			// #ifdef MP-WEIXIN
			const options = {
				type: 2,
				data: {
					openid: state.openid,
					suppleNoList: state.suppleNoList,
					totalFee: allPrice.value * 100,
					payConfigId: wechatPayConfigId,
				},
				method: "POST",
				showLoading: true,
			};
			request(CardBillPlaceOrder, options).then((res) => {
				const data = stringToJson(res.bizContent);
				state.orderId = data.orderId
				uni.requestPayment({
					provider: "wxpay",
					orderInfo: "",
					timeStamp: data.timestamp,
					nonceStr: data.noncestr,
					package: data.wxPackage ?? "",
					signType: data.signType,
					paySign: data.sign,
					success: function(e) {
						console.log("支付成功", e);
						checkOrder();
					},
					fail: function(err) {
						confirm(err, () => {}, "支付失败", false);
					},
				});
			});
			// #endif
		} else {
			msg("未勾选补缴订单！")
		}

	};


	//支付成功改变订单状态
	const checkOrder = () => {
		const options = {
			type: 2,
			data: {
				orderId: state.orderId,
			},
			method: "POST",
			showLoading: true,
		};

		request(CardBillPayStatus, options).then((res) => {
			msg("支付成功!");
			getlist()
		});
	};

	onLoad(() => {
		getlist()
		getOpenID()
		console.log(state);
	})
	
	onPullDownRefresh(()=>{ 
		getlist()
	})
</script>

<style lang="scss">
	page {
		background: #eef7f7;
	}

	.content-box {
		padding-bottom: 115rpx;

		.tips {
			font-size: 25rpx;
			color: #d2d2d2;
			text-align: center;
		}

		.footer {
			display: flex;
			align-items: center;
			padding: 0 30rpx;
			background: #fff;
			height: 100rpx;
			border-top: 1rpx solid #cdcdcd;
			position: fixed;
			bottom: 0;
			width: 100%;
			box-sizing: border-box;

			.footer-right {
				align-items: center;
				display: flex;
				justify-content: flex-end;
				flex: 1;

				.row1 {
					font-size: 29rpx;
				}

				.btn {
					text-align: center;
					width: 150rpx;
					height: 60rpx;
					background: #13E7C1;
					line-height: 60rpx;
					border-radius: 10rpx;
					font-size: 29rpx;
					color: #fff;
					margin-left: 30rpx;
				}
			}
		}
	}

	.search-btn {
		color: white;
		background-color: #00B38B;
		width: 140rpx;
		height: 75rpx;
		line-height: 75rpx;
		font-size: 32rpx;
		border-radius: 40rpx;
		text-align: center;
		margin-right: 30rpx;
		margin-top: 10rpx;
	}

	.search-box {
		margin: 30rpx 30rpx 20rpx 30rpx;
		height: 72rpx;
		height: 81rpx;
		background: #FFFFFF;
		border: 1px solid #DCDCDC;
		border-radius: 40rpx;
		display: flex;
		justify-content: center;
		align-items: center;
		box-sizing: border-box;
		flex: 1;
	}

	.search-box .icon {
		width: 48rpx;
		height: 48rpx;
		margin: 0 20rpx;
	}

	.search-box .search {
		flex: 1;
		margin-right: 20rpx;
		height: 100%;
		padding: 0 10rpx;
		font-size: 28rpx;
		color: #00b38b;

	}

	.scroll-view {
		white-space: nowrap;
		position: sticky;
		top: 0;
		background: #ffffff;
		box-shadow: 0rpx 2rpx 6rpx 0rpx rgba(223, 223, 223, 0.8);
	}

	.top-menu {
		display: flex;
	}

	.top-menu .tab {
		font-size: 26rpx;
		padding: 38rpx 30rpx;
		color: #333;
		position: relative;
	}

	.top-menu .active .border {
		position: absolute;
		width: 70%;
		height: 16rpx;
		background: #00b38b;
		opacity: 0.3;
		bottom: 40rpx;
		z-index: -99;
		left: 15%;
		border-radius: 6rpx;
	}

	.top-menu .active {
		font-weight: bold;
		font-size: 28rpx;
	}

	.top-menu .active::before {
		width: 100%;
		height: 16rpx;
		background: #00b38b;
		opacity: 0.3;
	}

	.search-time {
		display: flex;
		margin: 20rpx 30rpx 48rpx 30rpx;
		justify-content: space-between;

		.time-btn {
			width: 130rpx;
			height: 80rpx;
			background: #00B38B;
			border-radius: 40rpx;
			color: #FFFFFF;
			font-size: 32rpx;
			line-height: 80rpx;
			text-align: center;
		}

		.show-info {
			width: 260rpx;
			height: 80rpx;
			padding: 0 31rpx;
			background: #FFFFFF;
			border: 1px solid #DCDCDC;
			border-radius: 40rpx;
			display: flex;
			justify-content: space-between;
			align-items: center;

			.show-text {
				display: flex;
				align-items: center;
			}

			.date-text {
				color: #999999;
				font-size: 28rpx;
			}

			.text-val {
				color: #333
			}

			.line {
				width: 25rpx;
				height: 1rpx;
				background: #999999;
				margin: 0 24rpx;
			}
		}

		.show-info2 {
			width: 541rpx;
			height: 80rpx;
			padding: 0 31rpx;
			background: #FFFFFF;
			border: 1px solid #DCDCDC;
			border-radius: 40rpx;
			display: flex;
			justify-content: space-between;
			align-items: center;

			.show-text {
				display: flex;
				align-items: center;
				flex: 1;
				justify-content: space-evenly;
			}

			.date-text {
				color: #999999;
				font-size: 28rpx;
			}

			.text-val {
				color: #333
			}

			.line {
				width: 25rpx;
				height: 1rpx;
				background: #999999;
				margin: 0 24rpx;
			}
		}
	}

	.count {
		margin: 0 30rpx 25rpx 30rpx;
		font-size: 28rpx;
		font-family: Noto Sans S Chinese;
		font-weight: 400;
		color: #999999;
		line-height: 36rpx;
	}

	.search-payment-box {
		width: 260rpx;
		height: 80rpx;
		padding: 0 31rpx;
		background: #FFFFFF;
		border: 1px solid #DCDCDC;
		border-radius: 40rpx;
		display: flex;
		justify-content: space-between;
		align-items: center;
		color: #999999;
	}

	.list {
		padding: 0 30rpx;
		display: flex;
		flex-direction: column;
	}

	.bg-white {
		background: #FFFFFF;
		border-radius: 30rpx 30rpx 0 0;
	}

	.bg-white .sub-tabs {
		display: flex;
		justify-content: space-evenly;
		align-items: center;
	}

	.bg-white .sub-item {
		padding: 10rpx 0;
		margin: 20rpx 0 30rpx;
		border-bottom: 6rpx solid #fff;
		font-size: 26rpx;
	}

	.bg-white .active {
		border-bottom: 6rpx solid #00B38B;
		color: #00B38B;
		font-size: 30rpx;
		font-weight: bold;
	}

	.bg-none {
		background: none;
		border-radius: 30rpx 30rpx 0 0;
	}

	.list .item {
		background: #ffffff;
		box-shadow: 0rpx 2rpx 6rpx 0rpx rgba(223, 223, 223, 0.8);
		border-radius: 20rpx;
		box-sizing: border-box;
		display: flex;
		flex-direction: column;
		margin-bottom: 30rpx;
	}

	.list.bg-white .item {
		box-shadow: 0rpx 4rpx 13rpx 3rpx rgba(223, 223, 223, 0.8);
	}

	.list .item .head {
		display: flex;
		justify-content: space-between;
		align-items: center;
		padding: 20rpx 28rpx;
		border-bottom: 1px solid #dcdcdc;
	}

	.list .item .head {
		.head-row {
			display: flex;
			width: 100%;
			justify-content: space-between;
			align-items: center;
		}

		.name {}

		.name>text {
			font-size: 25rpx;
			font-family: Noto Sans S Chinese;
			font-weight: 400;
			color: #999999;
			line-height: 36rpx;
		}
	}

	.list .item .head .icon {
		width: 48rpx;
		height: 48rpx;
	}

	.list .item .head .name {
		display: flex;
		align-items: center;
	}

	.list .text-green {
		font-size: 26rpx;
		color: #00b38b;
	}

	.list .text-orange {
		font-size: 26rpx;
		color: #ff8000;
	}

	.list .text-black {
		font-size: 28rpx;
		color: #333;
		font-weight: 500;
	}

	.list .title {
		font-size: 30rpx;
		color: #333;
	}

	.list .tag-green {
		font-size: 22rpx;
		height: 40rpx;
		line-height: 40rpx;
		padding: 0 12rpx;
		border-radius: 6rpx;
		background: #d9f4ee;
		color: #00b38b;
	}

	.list .tag-grey {
		font-size: 22rpx;
		height: 40rpx;
		line-height: 40rpx;
		padding: 0 12rpx;
		border-radius: 6rpx;
		background: #e8e8e8;
		color: #666;
	}

	.list .detail {
		display: flex;
		justify-content: space-between;
		align-items: center;
		padding: 30rpx 32rpx;

	}

	.list .detail1 {
		display: flex;
		justify-content: space-between;
		align-items: center;
		padding: 0rpx 32rpx 30rpx 32rpx;

		.order-text1 {
			display: flex;
			flex-direction: column;
			width: 50%;

			.type {
				font-size: 26rpx;
				color: #999;
			}

			.value {
				font-size: 26rpx;
				color: #333;
			}
		}
	}


	.list .detail .type {
		font-size: 26rpx;
		color: #999;
	}

	.list .detail .value {
		font-size: 26rpx;
		color: #333;
	}

	.list .finished .detail .value {
		color: #999;
	}

	.list .detail .odd {
		margin: 20rpx 0;
	}

	.list .cny {
		font-size: 26rpx;
		color: #333;
	}

	.list .finished .cny {
		color: #999;
	}

	.list .amount {
		font-size: 40rpx;
		font-weight: bold;
	}

	.list .bottom .amount {
		color: #ff8000;
	}

	.list .finished .amount {
		color: #999;
	}

	.list .btns {
		position: relative;
		display: flex;
		align-items: center;
		justify-content: flex-end;
		border-top: 1px solid #dcdcdc;
		margin: 0 30rpx;
		padding: 20rpx 0;
	}

	.list .bottom {
		display: flex;
		border-top: 1px solid #dcdcdc;
		margin: 0 30rpx;
		padding: 20rpx 0;
		flex-direction: column;
		align-items: flex-start;

		.tit {
			font-size: 30rpx;
		}

		.tit1 {
			font-size: 26rpx;
			color: #999;
		}

		.amount1 {
			font-size: 26rpx;
			color: #333;
		}
	}

	.list .btn {
		height: 60rpx;
		line-height: 58rpx;
		border-radius: 30rpx;
		padding: 0 24rpx;
		font-size: 26rpx;
		box-sizing: border-box;
		margin-right: 20rpx;
	}



	.list .btns .btn:last-child {
		margin: 0;
	}

	.list .btns .state {
		position: absolute;
		left: 0;
		font-size: 26rpx;
		font-family: Noto Sans S Chinese;
		font-weight: 400;
		color: #999999;
		line-height: 58rpx;

		text {
			font-size: 26rpx;
			font-family: Noto Sans S Chinese;
			font-weight: 400;
			color: #00B38B;
			line-height: 58rpx;
		}
	}

	.list .btn-primary {
		border: 1px solid #00b38b;
		color: #00b38b;
	}

	.list .btn-disable {
		border: 1px solid #999;
		color: #999;

	}

	.list .btn-normal {
		border: 1px solid #dcdcdc;
		color: #333;
	}

	.m-10 {
		margin: 0 10rpx;
	}

	// 
	.detail2 {
		display: flex;
		justify-content: space-between;
		align-items: center;
		padding: 30rpx 32rpx;
		position: relative;

		view {
			text-align: center;

			text {
				display: block;
				margin: 20rpx 0;
			}

			view {
				font-size: 24rpx;
				font-family: Noto Sans S Chinese;
				font-weight: 400;
				color: #999999;
				line-height: 36rpx;

				text {
					margin: 0;

				}
			}
		}

		.indicator {
			position: absolute;
			left: 50%;
			top: 50%;
			transform: translate(-50%, -50%);
			display: flex;
			flex-direction: column;

			text {
				margin: 0;
				font-size: 26rpx;
				font-family: Noto Sans S Chinese;
				font-weight: 400;
				color: #666666;
				line-height: 36rpx;
			}

			image {
				width: 186rpx;
				height: 12rpx;
			}
		}

		.state {
			position: absolute;
			left: 0;
			font-size: 26rpx;
			font-family: Noto Sans S Chinese;
			font-weight: 400;
			color: #999999;
			line-height: 58rpx;
		}
	}

	.emptyView {
		margin-top: 120rpx;
	}
</style>
