<!-- 会员充值 -->
<template>
	<view class="member">
		<view class="card" :style="{'background-image':'url(../../static/icon/charge_bg.webp)'}">
			<view class="card-info">
				<u-image width="100rpx" height="100rpx" :src="userInfo.avatar" />
				<view class="card-info-right">
					<view class="phone">{{userInfo.mobile}}</view>
					<view class="level">初级会员 享受{{userInfo.discount}}折优惠</view>
				</view>
			</view>

			<view class="charge">
				<view class="charge-left">
					<view>
						<text>当前已充值{{userInfo.total_recharge_amount}},升级还需{{userInfo.next_limit}}</text>
						<text>{{userInfo.next_level}}</text>
					</view>
					<up-line-progress :percentage="30" activeColor="#A26341" inactiveColor="#fff"
						height="8rpx"></up-line-progress>
				</view>
				<view class="charge-right">升级会员</view>
			</view>
		</view>

		<!-- 充值规格 -->
		<view class="rules">
			<view class="rules-title">
				<view class="rules-title-main">充值规格</view>
				<view class="rules-title-record" @click="onPageToRecord">
					充值记录
					<up-icon name="arrow-right"></up-icon>
				</view>
			</view>
			<view class="rules-con">
				<block v-for="item in chargeRulesList" :key="item.id">
					<view class="rules-con-item" :class="{'active':isChooseMoney==item.id?true:false}"
						@click="isChooseMoney = item.id">
						<view class="rules-con-item-main">{{item.name}}</view>
						<view class="rules-con-item-sub">{{item.remark?item.remark:'永久'}}</view>
						<view class="rules-con-item-amount">
							<text class="symbol">¥</text>
							<text>{{item.value}}</text>
						</view>
					</view>
				</block>

				<view class="rules-con-item" :class="{'active':isChooseMoney=='input'?true:false}"
					@click="isChooseMoney = 'input'">
					<view class="rules-con-item-main">自定义金额</view>
					<view class="rules-con-item-sub">永久</view>
					<view class="rules-con-item-amount">
						<up-input v-model="chargeMoney" placeholder="点击输入金额" border="none" type="number" color="#333"
							fontSize="28rpx" inputAlign="center"
							placeholderStyle="color:'#989898';'font-size':'24rpx';text-align:center;"></up-input>
					</view>
				</view>
			</view>
		</view>

		<!-- 注意事项 -->
		<view class="attention">
			<view class="attention-title"><text>注意事项:</text></view>
			<view class="attention-tips">1、充值后帐户的金额不能提现,可用于消费使用</view>
			<view class="attention-tips">2、账户充值出现问题可联系平台客服,也可拨打平台客服咨询热线4008888888</view>
		</view>

		<view class="member-btn" @click="onConfirmCharge">
			<view class="btn-wrap">
				确认充值
			</view>
		</view>
	</view>
</template>
<script setup>
	import {
		rechargeApi,
		rechargeAmountApi
	} from "@/api/user.js";
	import {
		onLoad
	} from "@dcloudio/uni-app";
	import {
		ref
	} from "vue";
	import useUserStore from "@/store/user";

	//用户信息
	const userInfo = useUserStore().userInfo;
	const isChooseMoney = ref('');
	const chargeMoney = ref('');

	// 充值规则
	const chargeRulesList = ref([]);
	const getChargeRules = () => {
		rechargeAmountApi().then(rs => {
			chargeRulesList.value = rs.data;
		})
	}

	// 充值记录产看
	const onPageToRecord = () => {
		uni.navigateTo({
			url: '/pages/charge/charge_record',
			fail(err) {
				console.log(err);
			}
		})
	}

	// 确认充值
	const onConfirmCharge = () => {
		if (!isChooseMoney.value) return uni.$u.toast('充值金额不能为空');
		let money = 0;
		if (isChooseMoney.value == 'input') {
			money = chargeMoney.value;
		} else {
			const rule = chargeRulesList.value.find(i => i.id == isChooseMoney.value);
			if (rule != undefined) {
				money = rule.value;
			}
		}

		rechargeApi({
			price: money
		}).then(res => {
			if (!res.data?.nonceStr) return uni.$u.toast('支付失败!');
			uni.requestPayment({
				provider: 'wxpay',
				timeStamp: res.data.timeStamp,
				nonceStr: res.data.nonceStr,
				package: res.data.package,
				signType: res.data.signType,
				paySign: res.data.paySign,
				success: (e) => {
					if (e.errMsg == 'requestPayment:ok') {
						uni.showModal({
							title: '充值成功',
							confirmText: '查看记录',
							cancelText: '继续充值',
							success: (e) => {
								chargeMoney.value = '';
								isChooseMoney.value = '';
								if (e.confirm) {
									uni.navigateTo({
										url: '/pages/charge/charge_record'
									})
								}
							},
							fail(err) {
								console.log(err);
							}
						})
					} else uni.$u.toast('支付失败')
				},
				fail: (e) => {
					uni.$u.toast('用户取消支付');
				}
			})
		})
	}

	onLoad(() => {
		getChargeRules();
	})
</script>

<style lang="scss">
	.member {
		padding: 40rpx 0 300rpx 0;

		.card {
			background: linear-gradient(to right, #F7EED7, #E7DAAF);
			background-size: 100%;
			background-repeat: no-repeat;
			height: 272rpx;
			margin: 0 30rpx 30rpx;
			border-radius: 10rpx;
			padding: 20rpx 0 0 20rpx;
			box-sizing: border-box;

			.card-info {
				display: flex;
				align-items: center;
				margin-bottom: 30rpx;

				.card-info-right {
					margin-left: 40rpx;

					.phone {
						margin-bottom: 12rpx;
						font-weight: 600;
						font-size: 32rpx;
						color: #444444;
					}

					.level {
						font-size: 28rpx;
						color: #7B5232;
					}
				}
			}

			.charge {
				display: flex;
				align-items: center;
				padding-right: 38rpx;

				.charge-left {
					flex: 1;
					margin-right: 30rpx;

					&>view {
						display: flex;
						align-items: center;
						justify-content: space-between;
						margin-bottom: 10rpx;

						text {
							font-size: 22rpx;
							color: #A26341;
						}
					}
				}

				.charge-right {
					width: 148rpx;
					height: 52rpx;
					line-height: 52rpx;
					background: #7B5232;
					border-radius: 30rpx;
					font-size: 22rpx;
					color: #FFFFFF;
					text-align: center;
				}
			}
		}

		.rules {
			background: #FFFFFF;
			border-radius: 16rpx;
			margin: 0 30rpx 30rpx;
			padding: 30rpx;

			.rules-title {
				display: flex;
				justify-content: space-between;
				align-items: center;
				margin-bottom: 34rpx;

				.rules-title-main {
					font-weight: 600;
					font-size: 32rpx;
					color: #444444;
				}

				.rules-title-record {
					display: flex;
					align-items: center;
					font-size: 28rpx;
					color: #444444;
				}
			}

			.rules-con {
				display: flex;
				flex-wrap: wrap;

				.rules-con-item {
					display: flex;
					flex-direction: column;
					justify-content: center;
					align-items: center;
					width: 188rpx;
					height: 220rpx;
					border: 2rpx solid #F1F1F1;
					border-radius: 16rpx;
					margin-bottom: 28rpx;

					&:not(:nth-child(3n)) {
						margin-right: 26rpx;
					}

					.rules-con-item-main {
						margin-bottom: 10rpx;
						font-size: 30rpx;
						color: #333333;
					}

					.rules-con-item-sub {
						margin-bottom: 30rpx;
						font-size: 24rpx;
						color: #777777;
					}

					.rules-con-item-amount {
						text {
							font-weight: 600;
							font-size: 32rpx;
							color: #333333;
						}

						.symbol {
							font-size: 20rpx;
						}
					}
				}

				.active {
					border: 2rpx solid #EFCC6E;
					background: #FEF8E7;
				}
			}
		}

		.attention {
			margin: 0 30rpx;

			.attention-title {
				position: relative;
				font-weight: 600;
				font-size: 32rpx;
				color: #262626;
				margin-bottom: 20rpx;
				margin-left: 10rpx;

				text {
					margin-left: 14rpx;
				}

				&::before {
					content: "";
					display: block;
					position: absolute;
					left: 0;
					top: 50%;
					transform: translateY(-50%);
					width: 6rpx;
					height: 70%;
					border-radius: 4rpx;
					background: #FF8056;
				}
			}

			.attention-tips {
				font-size: 24rpx;
				color: #7A7A7A;
				margin-bottom: 30rpx;
			}
		}

		.member-btn {
			position: fixed;
			bottom: 0rpx;
			left: 50%;
			transform: translateX(-50%);
			height: 110rpx;
			background-color: #F6F6F6;
			width: 100%;
			display: flex;
			justify-content: center;
			align-items: center;
			padding-bottom: constant(safe-area-inset-bottom);
			/* 兼容 iOS < 11.2 */
			padding-bottom: env(safe-area-inset-bottom);
			/* 兼容 iOS >= 11.2 */

			.btn-wrap {
				width: 670rpx;
				height: 80rpx;
				line-height: 80rpx;
				margin: 0 auto;
				background: #EFCC6E;
				border-radius: 40rpx;
				font-size: 32rpx;
				color: #FFFFFF;
				text-align: center;
			}
		}
	}
</style>