From 42e5ea86f7edc9361227edd979a8ae1952713161 Mon Sep 17 00:00:00 2001
From: Liuyi <candymxq888@outlook.com>
Date: 星期六, 19 十月 2024 16:19:16 +0800
Subject: [PATCH] 添加共享列表,修改共享功能相关代码

---
 pages/index/index.vue |  806 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 762 insertions(+), 44 deletions(-)

diff --git a/pages/index/index.vue b/pages/index/index.vue
index ec0ec26..6f3549d 100644
--- a/pages/index/index.vue
+++ b/pages/index/index.vue
@@ -1,52 +1,770 @@
+<script setup>
+    import { onMounted, ref } from "vue";
+	import { getVipInfoApi,getUserInfo,reportLossApi,removeCardApi } from '../../api/index.js'
+	import { onShow,getCurrentPages } from '@dcloudio/uni-app'
+	//状态栏高度
+	const topHeight = ref(0)
+	function getTopHeight(){
+		if(uni.getMenuButtonBoundingClientRect){
+			// topHeight.value = (uni.getMenuButtonBoundingClientRect().top + uni.getMenuButtonBoundingClientRect().height) * 2
+			topHeight.value = uni.getMenuButtonBoundingClientRect().top * 2
+		}
+	}
+	/**
+	 * 会员卡相关
+	 */
+	const cardInfo = ref({
+		id:'',
+		userName:'微信用户',
+		headImg:'',
+		userPhone:'',
+		
+		waterCardNumber:'',
+		balance:'',
+		count:'',
+		state:'',//state:true:挂失,false:正常
+		userCardType:'',//userCardType:true:共享卡,false:正常卡
+	})
+	const isLoss = ref(false)
+	const isVip = ref(false)
+	const isShareCard = ref(false)
+	//获取会员卡信息
+	 async function getVipInfo(){
+		await getVipInfoApi().then((res) =>{
+			if(res.code == 200 && res.data.id){
+				cardInfo.value.waterCardNumber = res.data.cardNumber
+				cardInfo.value.state = res.data.state == 2 ? true : false//state:2:挂失,1:正常
+				cardInfo.value.userCardType = res.data.userCardType == 2 ? true : false //userCardType:2:共享卡,1:正常卡
+				
+				isLoss.value = cardInfo.value.state 
+				isShareCard.value = cardInfo.value.userCardType 
+				if(res.data.cardType == 1){
+					cardInfo.value.balance = res.data.balance
+				}else if(res.data.cardType == 2){
+					cardInfo.value.count = res.data.count
+				}
+				isVip.value = true
+				console.log('cardInfo',cardInfo.value,'isShareCard.value',isShareCard.value)
+			}
+		})
+	}
+	//获取用户信息
+	async function getInfo(){
+		 await getUserInfo().then(async(res) =>{
+			if(res.code == 200){
+				cardInfo.value.userName = res.data.userInfo.userName ?  res.data.userInfo.userName : cardInfo.value.userName
+				cardInfo.value.headImg = res.data.userInfo.headImg
+				cardInfo.value.userPhone = res.data.userInfo.userPhone
+				cardInfo.value.id = res.data.userInfo.id
+				await getVipInfo()
+				console.log('00000',cardInfo.value)
+				uni.setStorageSync('userInfo',JSON.stringify(cardInfo.value))
+			}
+		})
+	}
+	/**
+	 * 扫码取水相关
+	 */
+	function toScan(){
+		//调用二维码扫描接口
+		uni.scanCode({
+			scanType: ['qrCode'],
+			success: function (res) {
+				console.log('条码内容:' + res.result);
+				uni.navigateTo({
+					url:'/pages/scanWater/index'
+				})
+			}
+		});
+	}
+	/**
+	 * 功能列表相关
+	 */
+	const functionList = ref([
+		{text:'余额记录',icon:'../../static/images/index/icon31.png',bgColor:'#16b387',url:'/pages/functionList/balanceRecord/index',isUrl:1},
+		{text:'消费记录',icon:'../../static/images/index/icon32.png',bgColor:'#329ae8',url:'/pages/functionList/paymentRecord/index',isUrl:1},
+		{text:'充值记录',icon:'../../static/images/index/icon33.png',bgColor:'#f0a50e',url:'/pages/functionList/rechargeRecord/index',isUrl:1},
+		{text:'水卡共享',icon:'../../static/images/index/icon34.png',bgColor:'#55ca8c',url:'/pages/functionList/share/cardShare/index',isUrl:1},
+		{text:'故障上报',icon:'../../static/images/index/icon35.png',bgColor:'#a88ff1',url:'/pages/infoBreakdown/index',isUrl:1},
+		{text:'优惠卷',icon:'../../static/images/index/icon36.png',bgColor:'#18bfc4',url:'',isUrl:4},
+		{text:'会员卡挂失',icon:'../../static/images/index/icon37.png',bgColor:'#4875f0',url:'',isUrl:2},
+		{text:'会员卡注销',icon:'../../static/images/index/icon38.png',bgColor:'#f45088',url:'',isUrl:3},
+	])
+	function navTo(itemUrl){
+		if(itemUrl){
+			uni.navigateTo({
+				url:itemUrl
+			})
+		}
+	}
+	//功能列表点击功能
+	async function setEvent(isUrl,url){
+		if(isUrl == 1){
+			navTo(url)
+		}else if(isUrl == 2){
+			if(cardInfo.value.waterCardNumber){
+				uni.showModal({
+						title: '会员卡挂失',
+						content: '确认挂失会员卡?',
+						success: async function(res) {
+						if (res.confirm) {
+							await reportLossApi(cardInfo.value.waterCardNumber).then(async(res) =>{
+								if(res.code == 200){
+									uni.showToast({
+										title: '已挂失',
+										duration: 2000,
+									});
+									await getVipInfoApi().then((res) =>{
+										if(res.code == 200){
+											if(res.data.state == 2){
+												isLoss.value = true
+											}
+										}
+									})
+								}
+							})
+						}
+					}
+				})
+			}else{
+				uni.showToast({
+					title:'未绑定会员卡!',
+					icon:'none'
+				})
+			}
+		}else if(isUrl == 3){
+			if(cardInfo.value.waterCardNumber){
+				uni.showModal({
+						title: '会员卡注销',
+						content: '确认注销会员卡?',
+						success: async function(res) {
+						if (res.confirm) {
+							await removeCardApi(cardInfo.value.waterCardNumber).then(async(res) =>{
+								if(res.code == 200){
+									uni.showToast({
+										title: '已注销',
+										duration: 2000,
+										icon:'none',
+									});
+									await getVipInfoApi().then((res) =>{
+										if(res.code == 200){
+											if(!res.data.id){
+												isVip.value = false
+												cardInfo.value.balance = ''
+												cardInfo.value.count = ''
+												cardInfo.value.waterCardNumber = ''
+												uni.setStorageSync('userInfo',JSON.stringify(cardInfo.value))
+											}
+										}
+									})
+								}
+							})
+						}else{
+							console.log('点击了取消8')
+						}
+					}
+				})
+			}else{
+					uni.showToast({
+						title:'未绑定会员卡!',
+						icon:'none'
+					})
+			}
+		}else{
+			uni.showToast({
+				title: '该功能正在升级中!',
+				duration: 2000,
+				icon:'none',
+			});
+		}
+	}
+	function upGrade(){
+		uni.showToast({
+			title: '该功能正在升级中!',
+			duration: 2000,
+			icon:'none',
+		});
+	}
+	onMounted( async() =>{
+		getTopHeight()
+	})
+	onShow(async() =>{
+		await getInfo()
+	})
+	uni.showShareMenu({
+	  withShareTicket: true,
+	  menus: ['shareAppMessage', 'shareTimeline'],
+	  success: function () {
+	    console.log('分享菜单显示成功');
+	  },
+	  fail: function (err) {
+	    console.error('分享菜单显示失败', err);
+	  }
+	});
+	
+
+</script>
+
 <template>
-	<view class="content">
-		<image class="logo" src="/static/logo.png"></image>
-		<view class="text-area">
-			<text class="title">{{title}}</text>
+	<view class="container">
+		<view class="content">
+			<view class="card-box" :style="{paddingTop:topHeight + 'rpx'}">
+				<view class="user-info" >
+					<image class="user-img" src='../../static/images/index/head.png' alt=''></image>
+					<text @click="navTo('/pages/userInfo/index')">{{cardInfo.userName}}</text>
+					<image @click="navTo('/pages/userInfo/index')" class="user-more"src="../../static/images/index/back.png"></image>
+					<view class="user-add-card" @click="navTo('/pages/addCard/index')">
+						<image src='../../static/images/index/vip-add.png' alt=''></image>
+						<text>添加会员卡</text>
+					</view>
+				</view>
+				<view class="card">
+					<image class="card-bg" src="../../static/images/index/card11.png" alt=""></image>
+					<view v-if="isShareCard" class="share-card">共享卡号:{{cardInfo.waterCardNumber}}</view>
+					<view v-if="!isShareCard" class="card-content">
+						<view class="card-left">
+							<view class="left-top">
+								<view>
+									<image v-if="isVip"  src="../../static/images/index/code1.png" alt=""></image>
+									<text>会员卡&nbsp;</text>
+									<text class="lossed" v-if="isLoss && isVip">&nbsp;[已挂失]</text>
+								</view>
+								<view v-if="isVip">ID:{{cardInfo.waterCardNumber}}</view>
+							</view>
+							<!-- <view v-if="cardInfo.userPhone" class="left-bottom">电话:{{cardInfo.userPhone}}</view> -->
+						</view>
+						<view class="card-right">
+							<view class="card-right-top">
+								<!-- <view @click="navTo('/pages/addCard/index')">
+									<image src='../../static/images/index/vip-add.png' alt=''></image>
+									<text>添加会员卡</text>
+								</view> -->
+								<text v-if="isVip">金额卡</text>
+								<text v-if="!isVip">未绑定会员卡</text>
+								<text v-if="isVip">{{cardInfo.balance}}元</text>
+							</view>
+							<view v-if="isVip" class="card-right-bottom" @click="navTo('/pages/recharge/index')">充值</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="function-box1">
+				<view class="box1-bg box1-one" @click="upGrade()">
+					<image src="../../static/images/index/home21.png" alt=""></image>
+					<view>送水到家</view>
+				</view>
+				<view @click="navTo('/pages/facilityList/index')" class="box1-bg box1-two">
+					<image src="../../static/images/index/icon22.png" alt=""></image>
+					<view>附近设备</view>
+					<!-- <view>账户余额(元)</view>
+					<view class="recharge">
+						<text>¥</text>
+						<text>120.00</text>
+					</view>
+					<view @click="navTo('/pages/recharge/index')">
+						充值
+					</view> -->
+				</view>
+				<view class="box1-bg box1-three" @click="toScan()">
+					<image src="../../static/images/index/icon23.png" alt=""></image>
+					<view>扫码取水</view>
+				</view>
+			</view>
+			<view class="function-box2">
+				<view class="box2-title"><text>功能列表</text></view>
+				<view class="box2-content">
+					<block v-for="(item,index) in functionList" :key="index">
+						<view class="box2-item"  @click="setEvent(item.isUrl,item.url)">
+							<view class="box2-item-img" :style="{background:item.bgColor}"><image :src= "item.icon" alt=""></image></view>
+							<view class="box2-item-text">{{item.text}}</view>
+						</view>
+					</block>
+				</view>
+			</view>
+			<view class="advertisement-box" @click="upGrade"><image src="../../static/images/index/bg4.png" alt=""></image></view>
+			<view class="service-box">
+				<view class="service-title"><text>服务指南</text></view>
+				<view class="service-content">
+					<view class="service-bg" @click="navTo('/pages/station/index')">
+						<view>
+							<image src="../../static/images/index/icon51.png" alt=""></image>
+							<text>附近站点</text>
+						</view>
+						<view class="service-info">服务中心正在营业中……</view>
+						<view>
+							<text>查看更多</text>
+							<image src="../../static/images/index/more-info5.png" alt=""></image>
+						</view>
+					</view>
+					<view class="service-bg" @click="upGrade">
+							<view>
+								<image src="../../static/images/index/notice5.png" alt=""></image>
+								<text>公示公告</text>
+							</view>
+							<view class="service-info">停水公告的部分摘要的内容展示……</view>
+							<view>
+								<text>查看更多</text>
+								<image src="../../static/images/index/more-info5.png" alt=""></image>
+							</view>
+					</view>
+				</view>
+			</view>
 		</view>
 	</view>
 </template>
-
-<script>
-	export default {
-		data() {
-			return {
-				title: 'Hello'
+<style lang="scss" scoped>
+	.container{
+		width:100%;
+		height:100vh;
+		overflow:scroll;
+		.content{
+			width:100%;
+			height:100vh;
+			background:#F6F6F6;
+			.card-box{
+				width: 100%;
+				height: auto;
+				box-sizing: border-box;
+				padding: 0 32rpx;
+				background: linear-gradient(to bottom,#5EA1FA,#D2F2FE);
+				.user-info{
+					width:100%;
+					height:100rpx;
+					// background: #06BF5E;
+					display: flex;
+					align-items: center;
+					padding-left:15rpx;
+					box-sizing: border-box;
+					margin-bottom: 14rpx;
+					display:flex;
+					position:relative;
+					.user-img{
+						width:90rpx;
+						height:90rpx;
+						margin-right:20rpx;
+					}
+					text{
+						margin-right:20rpx;
+						color: #fff;
+					}
+					.user-more{
+						width: 12rpx;
+						height: 28rpx;
+					}
+					.user-add-card{
+						display:flex;
+						align-items:center;
+						height:40rpx;
+						font-size:22rpx;
+						background:linear-gradient(to right,#B1D9FD,#65A7FD);
+						border-radius:50rpx;
+						padding: 0 8rpx;
+						position: absolute;
+						bottom:0;
+						right:0;
+						image{
+							width:28rpx;
+							height:28rpx;
+							margin-right:10rpx;
+						}
+					}
+				}
+				.card{
+					width: 100%;
+					height: 290rpx;
+					position:relative;
+					.card-bg{
+						height:290rpx;
+						width:100%;
+						top:0;
+						position: absolute;
+						z-index:1;
+					}
+					.share-card{
+						position:absolute;
+						top:16rpx;
+						left:28rpx;
+						z-index:100;
+						font-weight:400;
+						font-size: 36rpx;
+						color: #FFFFFF;
+					}
+					.card-content{
+						width: 100%;
+						height: 100%;
+						box-sizing: border-box;
+						padding:20rpx 15rpx;
+						display: flex;
+						justify-content:space-between;
+						font-weight: 300;
+						font-size: 30rpx;
+						color: #FFFFFF;
+						z-index:100;
+						.card-left{
+							height:100%;
+							display: flex;
+							justify-content:space-between;
+							flex-direction:column;
+							align-items:flex-start;
+							z-index:100;
+							.left-top{
+								display: flex;
+								flex-direction: column;
+								view:first-child{
+									display: flex;
+									align-items: center;
+									image{
+										width:48rpx;
+										height:48rpx;
+									}
+									text{
+										font-weight:400;
+										font-size: 36rpx;
+										color: #FFFFFF;
+									}
+									.lossed{
+										color:#fff;
+									}
+								}
+								view:last-child{
+									margin-left:10rpx;
+									font-size: 26rpx;
+									font-weight:500;
+								}
+							}
+						}
+						.card-right{
+							display: flex;
+							justify-content: space-between;
+							align-items:flex-end;
+							flex-direction: column;
+							height:100%;
+							z-index:100;
+							.card-right-top{
+								align-items:flex-end;
+								display: flex;
+								justify-content: space-between;
+								flex-direction: column;
+								font-size:34rpx;
+								text:last-child{
+									font-weight:500;
+								}
+							}
+							.card-right-bottom{
+								width:137rpx;
+								height:56rpx;
+								background:linear-gradient(to right,#65A7FD ,#B1D9FD);
+								border-radius:50rpx;
+								text-align: center;
+								line-height: 56rpx;
+								color:#212DDE;
+								font-weight: 400;
+							}
+						}
+					}
+				}
 			}
-		},
-		onLoad() {
-
-		},
-		methods: {
-
+			.function-box1{
+				width:100%;
+				box-sizing:border-box;
+				height: 215rpx;
+				padding: 20rpx 32rpx 15rpx;
+				// background: rgba(85, 170, 0, 0.1);
+				display:flex;
+				justify-content: space-between;
+				align-items:center;
+				.box1-bg{
+					width:212rpx;
+					height:180rpx;
+					border-radius:24rpx;
+					background: #fff;
+					box-shadow:0 0 12rpx 2rpx rgba(13,118,255,0.16);
+				}
+				.box1-one{
+					font-weight: 300;
+					font-size: 32rpx;
+					color: #000000;
+					text-align: center;
+					display: flex;
+					flex-direction:column;
+					align-items: center;
+					justify-content: center;
+					image{
+						width: 86rpx;
+						height: 78rpx;
+						margin-bottom:20rpx;
+					}
+				}
+				.box1-two{
+					font-weight: 300;
+					font-size: 32rpx;
+					color: #000000;
+					display: flex;
+					flex-direction:column;
+					align-items:center;
+					justify-content:space-evenly;
+					image{
+						width:96rpx;
+						height: 96rpx;
+						// margin-bottom:20rpx;
+					}
+					// view:first-child{
+					// 	font-weight: 300;
+					// 	font-size: 24rpx;
+					// 	color: #464646;
+					// 	text-align: center;
+					// 	margin-bottom:10rpx;
+					// }
+					// .recharge{
+					// 	text:first-child{
+					// 		font-weight: 500;
+					// 		font-size: 32rpx;
+					// 		color: #000;
+					// 	}
+					// 	text:last-child{
+					// 		font-weight: 300;
+					// 		font-size: 32rpx;
+					// 		color: #2269E5;
+					// 	}
+					// }
+					// view:last-child{
+					// 	width: 140rpx;
+					// 	height: 70rpx;
+					// 	font-weight:300;
+					// 	font-size: 24rpx;
+					// 	color: #000141;
+					// 	background-image: url('../../static/images/index/icon22.png');
+					// 	background-repeat: no-repeat;
+					// 	background-position: center;
+					// 	background-size: 100% 100%;
+					// 	text-align:center;
+					// 	line-height:70rpx;
+					// 	margin-top:10rpx;
+					// }
+				}
+				.box1-three{
+					font-weight: 300;
+					font-size: 32rpx;
+					color: #000000;
+					text-align: center;
+					display: flex;
+					flex-direction:column;
+					align-items: center;
+					justify-content: center;
+					image{
+						width: 83rpx;
+						height:83rpx;
+						margin-bottom:20rpx;
+					}
+				}
+			}
+			.function-box2{
+				width:100%;
+				box-sizing:border-box;
+				height: 429rpx;//374 + 44 + 距离 + 底部padding32
+				padding:0 32rpx 15rpx;
+				// background: rgba(46, 121, 170, 0.5);
+				.box2-title{
+					width: 100%;
+					font-weight:300;
+					font-size: 32rpx;
+					color: #000000;
+					text-align: left;
+					margin-bottom: 10rpx;
+					margin-left: 30rpx;
+				}
+				.box2-content{
+					box-sizing: border-box;
+					padding:22rpx 35rpx;
+					width: 686rpx;
+					height:360rpx;
+					background: #fff;
+					border-radius: 24rpx;
+					box-shadow: 0 0 12rpx 2rpx rgba(0, 0, 0, 0.1);
+					display: flex;
+					flex-wrap: wrap;
+					justify-content: space-between;
+					align-items: center;
+					.box2-item{
+						width: 146rpx;
+						height:143rpx;
+						display: flex;
+						flex-direction:column;
+						justify-content:space-between;
+						align-items: center;
+						.box2-item-img{
+							width: 90rpx;
+							height:90rpx;
+							display: flex;
+							justify-content: center;
+							align-items: center;
+							// background: #65A7FD;
+							border-radius:50%;
+							image{
+								width: 48rpx;
+								height:48rpx;
+							}
+						}
+						.box2-item-text{
+							width:100%;
+							height: 40rpx;
+							font-weight: 300;
+							font-size: 28rpx;
+							color: #000000;
+							text-align: center;
+						}
+					}
+				}
+			}
+			.advertisement-box{
+				width:100%;
+				height: 188rpx;
+				padding:0 32rpx 10rpx; 
+				box-sizing: border-box;
+				image{
+					width:100%;
+					height: 178rpx;
+				}
+			}
+			.service-box{
+				width: 100%;
+				height: 255rpx;
+				// background: #D2F2FE;
+				padding:0 32rpx;
+				box-sizing: border-box;
+				.service-title{
+					height: 44rpx;
+					font-weight: 300;
+					font-size: 32rpx;
+					color: #000000;
+					text-align: left;
+					margin-bottom: 5rpx;
+					margin-left: 30rpx;
+				}
+				.service-content{
+					width: 100%;
+					height: 206rpx;
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					.service-bg{
+						width: 330rpx;
+						height: 206rpx;
+						background: linear-gradient(to bottom,#AFD5FF,#FFFFFF);
+						border-radius: 24rpx;
+						display: flex;
+						flex-direction: column;
+						justify-content: center;
+						align-items:flex-start;
+							view:first-child{
+								display: flex;
+								align-items: center;
+								margin-left:40rpx;
+								image{
+									width:48rpx;
+									height:48rpx;
+									margin-right:10rpx;
+								}
+								text{
+									font-weight: 300;
+									font-size: 28rpx;
+									color: #000000;
+								}
+							}
+							.service-info{
+								width: 214rpx;
+								font-weight: 300;
+								font-size: 24rpx;
+								color: #4D4B4B;
+								margin-left:96rpx;
+							}
+							view:last-child{
+								margin-left: 174rpx;
+								margin-top: 18rpx;
+								display: flex;
+								align-items: center;
+								image{
+									width:32rpx;
+									height:32rpx;
+								}
+								text{
+									font-weight: 300;
+									font-size: 24rpx;
+									color: #4D4B4B;
+									margin-right: 10rpx;
+								}
+							}
+					}
+				}
+			}
 		}
-	}
-</script>
-
-<style>
-	.content {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		justify-content: center;
-	}
-
-	.logo {
-		height: 200rpx;
-		width: 200rpx;
-		margin-top: 200rpx;
-		margin-left: auto;
-		margin-right: auto;
-		margin-bottom: 50rpx;
-	}
-
-	.text-area {
-		display: flex;
-		justify-content: center;
-	}
-
-	.title {
-		font-size: 36rpx;
-		color: #8f8f94;
+		.popup-content{
+			height: 560rpx;
+			position: relative;
+			z-index: 1000;
+			.popup-title{
+				width: 100%;
+				display: block;
+				text-align: center;
+				margin: 15rpx 0;
+				font-weight: 600;
+				font-size: 36rpx;
+			}
+			.hr {
+				width: 100%;
+				height: 2rpx;
+				background: #e2e2e2;
+			}
+			.img-box {
+				width: 65rpx;
+				height: 65rpx;
+				margin: 40rpx auto 30rpx;
+				border: 1rpx solid #e2e2e2;
+				border-radius: 50%;
+				padding: 15rpx;
+				.img{
+					width: 100%;
+					height: 100%;
+				}
+			}
+			.info-box {
+				width: 100%;
+				padding: 0 80rpx;
+				box-sizing: border-box;
+				.hr2{
+					width: 100%;
+					height: 2rpx;
+					background: #e2e2e2;
+					margin: 20rpx 0;
+				}
+				.info-text2{
+					font-size: 26rpx;
+					color: #767676;
+				}
+			}
+			.button-box{
+				display: flex;
+				margin-top: 20rpx;
+				button{
+					width: 230rpx;
+					height: 80rpx;
+					line-height: 80rpx;
+					border: none;
+					box-shadow: none;
+					margin-top: 30rpx;
+				}
+				button::after {
+					border: none !important;
+				}
+				.button1{
+					background-color: #F0F0F0;
+					color: #333333;
+				}
+				.button2{
+					background-color: #06BF5E;
+					color: #ffffff;
+				}
+			}
+		}
 	}
 </style>

--
Gitblit v1.9.3