From 440b4ab9d4278d3f9c13b004d2c2289f45254cbc Mon Sep 17 00:00:00 2001
From: Liuyi <candymxq888@outlook.com>
Date: 星期二, 19 十一月 2024 17:29:06 +0800
Subject: [PATCH] 添加积分记录,修改位置获取

---
 pages/scanWater/index.vue |  328 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 319 insertions(+), 9 deletions(-)

diff --git a/pages/scanWater/index.vue b/pages/scanWater/index.vue
index 383a3fe..ab6ba91 100644
--- a/pages/scanWater/index.vue
+++ b/pages/scanWater/index.vue
@@ -1,14 +1,324 @@
+<script setup>
+	import{ ref ,onMounted} from 'vue'
+	import { wxPayApi,buyWaterApi,getPriceBySnApi } from '../../api/index.js'
+	import { onLoad } from "@dcloudio/uni-app"
+	
+	const choosedMoney = ref(1)
+	//选择金额
+	const moneyList = ref([
+		{value:1,volume:2.5,active:true},
+		{value:2,volume:5,active:false},
+		{value:3,volume:7.5,active:false},
+	])
+	const activeStyle = ref({
+		backgroundColor:'rgba(148,201,243)',
+		color:'#fff'
+	})
+	function chooseMoney(index1){
+		moneyList.value.forEach((item,index) =>{
+			if(item.active == true){
+				item.active = false
+			}
+		})
+		moneyList.value[index1].active = true
+		choosedMoney.value = moneyList.value[index1].value
+	}
+	//支付方式
+	const userBalance = ref(JSON.parse(uni.getStorageSync('userInfo')).balance)
+	const payMethod = ref(2)
+	const payList = ref([
+		// {text:"支付宝支付",value:1,checked:true,img:'../../static/images/recharge/pay.png'},
+		{text:"微信",value:2,checked:true,img:'../../static/images/recharge/wx.png'},
+		{text:"余额",value:1,checked:false,img:'../../static/images/recharge/balance.png'},
+	])
+	function choosePay(index1){
+		payList.value.forEach((item,index) =>{
+			if(item.checked == true){
+				item.checked = false
+			}
+		})
+		payList.value[index1].checked = true
+		payMethod.value = payList.value[index1].value
+		console.log('index',index1,payMethod.value)
+	}
+	async function submit(){
+		//余额支付
+		if(payMethod.value == 1){
+			if(choosedMoney.value > Number(userBalance.value)){
+				uni.showToast({
+					title:'水卡余额不足',
+					icon:'none'
+				})
+			}else{
+				let data = {
+					payType:payMethod.value,
+					card:JSON.parse(uni.getStorageSync('userInfo')).waterCardNumber,
+					amount:choosedMoney.value,
+					sn:facilityCode.value
+					}
+					//余额支付回
+				await buyWaterApi(data).then((res) =>{
+					console.log('余额支付回调',res,'传参',data)
+					if(res.code == 200){
+							uni.navigateTo({
+								url:'/pages/scanSuccess/index'
+							})
+						}else if(res.code == 300){
+							uni.showToast({
+								title:res.msg,
+								icon:'none'
+							})
+						}else{
+							uni.showToast({
+								title:'支付失败,联系管理员',
+								icon:'none'
+							})
+						}
+				})
+			}
+			//微信支付
+		}else if(payMethod.value == 2){
+			let data = {
+				businessType:3,
+				tradeAmount:choosedMoney.value,
+				facilityCode:facilityCode.value,
+			}
+			await wxPayApi(data).then((res) =>{
+				console.log('微信支付回调',res,'传参',data)
+				if(res.code == 200){
+					//调用微信官方支付接口弹出付款界面,输入密码扣款
+					wx.requestPayment({
+					  //预支付订单信息
+					  // appId: res.data.appId,
+					  timeStamp: res.data.timeStamp,     //时间戳 
+					  nonceStr: res.data.nonceStr,      //随机串     
+					  package: res.data.package,		//prepay_id
+					  signType: res.data.signType,		//签名算法MD5		
+					  paySign: res.data.paySign ,//微信签名 
+					 success (res) {
+					   if (res.errMsg == "requestPayment:ok"){
+						  console.log('支付成功', res)
+						 uni.navigateTo({
+						 	url:'/pages/scanSuccess/index'
+						 })
+					   }else{
+						  uni.showToast({
+							title: '微信支付失败',
+							duration: 2000,
+							icon:'none'
+						  });
+					   }
+					 },
+					 fail (res) { 
+					   uni.showToast({
+							title: '微信支付失败',
+							duration: 2000,
+							icon:'none'
+					   });
+					 }
+					})
+				}else if(res.code == 300){
+					uni.showToast({
+						title:res.msg,
+						duration: 2000,
+						icon:'none'
+					});
+				}else{
+					uni.showToast({
+						title:'微信支付失败',
+						duration: 2000,
+						icon:'none'
+					});
+				}
+			})
+		}
+	}
+	const facilityCode = ref()
+	onLoad((option) =>{
+		facilityCode.value = option.facilityCode
+		console.log('小程序扫码取水','option.facilityCode',option.facilityCode,'facilityCode',facilityCode.value)
+	})
+	//设置水价及支付方式
+	async function getWaterPrice(){
+		await getPriceBySnApi(facilityCode.value).then((res) =>{
+			moneyList.value.forEach((item,index) =>{
+				item.value = ((index + 1) * res.data.price).toFixed(1)
+				item.volume = ((index + 1) * res.data.yield).toFixed(1)
+			})
+			choosedMoney.value = res.data.price
+			console.log('水价设置回调',res,'传参',facilityCode.value)
+		})
+		let waterCardNumber = JSON.parse(uni.getStorageSync('userInfo')).waterCardNumber
+		if(!waterCardNumber){
+			payList.value.splice(1,1)
+		}
+	}
+	onMounted(async() =>{
+		await getWaterPrice()
+	})
+	
+</script>
 <template>
-	<view>
-		<navbar title ='设备详情'></navbar>
-		扫码后跳转的页面
+	<view class="container">
+		<navbar title="扫码取水"></navbar>
+		<view class="content">
+			<view class="main">
+				<view class="money">
+					<view class="money-title">
+						<view class="title-icon"></view>
+						<view class="title-text">选择</view>
+					</view>
+					<view class="money-list">
+						<block v-for="(item,index) in moneyList" :key="index">
+							<view class="money-box" :style="item.active ? activeStyle : ''" @click="chooseMoney(index)">
+								<view>{{item.value}}<span>元</span></view>
+								<view>{{item.volume}}<span>L</span></view>
+							</view>
+						</block>
+					</view>
+				</view>
+				<view class="pay-methods">
+					<view class="money-title">
+						<view class="title-icon"></view>
+						<view class="title-text">请选择支付方式</view>
+					</view>
+					<view class="methods-list">
+						<block v-for="(item,index) in payList">
+							<view class="pay-item">
+								<view class="pay-item-right">
+									<image :src="item.img" alt=""></image>
+									<view>{{item.text}}</view>
+									<view style="margin-left:10rpx;color:#5EA1FA;" v-if="item.value == 1">({{userBalance}})</view>
+								</view>
+								<radio :value="item.value" :checked="item.checked" @click="choosePay(index)"/>
+							</view>
+						</block>
+					</view>
+				</view>
+			</view>
+			<view class="submit-btn" @click="submit()">确认支付</view>
+		</view>
 	</view>
 </template>
 
-<script setup>
-	
-</script>
-
-<style>
-	       
+<style lang="scss" scoped>
+	.container{
+		width: 100%;
+		height: 100vh;
+		.content{
+			width: 100%;
+			height:calc(100vh - 176rpx);
+			background:linear-gradient(to top,#FFFFFF,#E8EFFF);
+			overflow-y: scroll;
+			.main{
+				width: 686rpx;
+				height:1262rpx;
+				background: #FFFFFF;
+				border-top-right-radius: 24rpx;
+				border-top-left-radius: 24rpx;
+				margin: 20rpx auto 0;
+				padding:0 25rpx;
+				box-sizing: border-box;
+				.money{
+					width: 100%;
+					height:420rpx;
+					padding-top: 58rpx;
+					// background: #65ffb2;
+					box-sizing: border-box;
+					.money-list{
+						margin-top:30rpx;
+						width:100%;
+						height: 290rpx;
+						padding: 0 20rpx;
+						box-sizing: border-box;
+						display: flex;
+						flex-direction: column;
+						justify-content: space-between;
+						align-items: center;
+						.money-box{
+							width:94%;
+							height:86rpx;
+							border:2rpx solid #75C8EB;
+							border:2rpx solid rgba(148,201,243);
+							border-radius: 8rpx;
+							font-weight: 300;
+							font-size: 28rpx;
+							color: #4EB6E3;
+							display: flex;
+							align-items: center;
+							padding: 0 20px;
+							box-sizing: border-box;
+							justify-content:space-between;
+							font-weight:600;
+							letter-spacing:5rpx;
+							font-size:32rpx;
+						}
+					}
+				}
+				.pay-methods{
+					width: 100%;
+					margin-top:58rpx;
+					.methods-list{
+						margin-top:40rpx;
+						width: 100%;
+						padding: 0 20rpx;
+						box-sizing: border-box;
+						// background: #49B4E3;
+						height:130rpx;
+						display: flex;
+						flex-direction: column;
+						justify-content: space-between;
+						align-items: flex-start;
+						.pay-item{
+							width:100%;
+							display: flex;
+							justify-content:space-between;
+							align-items: center;
+							.pay-item-right{
+								display: flex;
+								image{
+									width: 42rpx;
+									height: 42rpx;
+									margin-right:34rpx;
+								}
+								view{
+									font-weight: 300;
+									font-size: 28rpx;
+									color: #111111;
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+		.submit-btn{
+			width: 686rpx;
+			height: 98rpx;
+			background:#5EA1FA;
+			border-radius:50rpx;
+			text-align: center;
+			line-height: 98rpx;
+			letter-spacing:3rpx;
+			margin:0 auto;
+			font-weight: 300;
+			font-size: 36rpx;
+			color: #FFFFFF;
+		}
+	}
+	.money-title{
+		display: flex;
+		align-items: center;
+		.title-icon{
+			width:8rpx;
+			height:36rpx;
+			background:#49B4E3;
+			margin-right:12rpx;
+		}
+		.title-text{
+			font-weight: 300;
+			font-size: 28rpx;
+			color: #000000;
+		}
+	}
 </style>

--
Gitblit v1.9.3