smartswrtch-app/page_geren/index.vue
2025-03-12 17:04:47 +08:00

983 lines
22 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="page">
<view class="">
<u-navbar :title="tit" :border-bottom="false" :background="background" title-color='#000' title-size='36'
back-icon-color='#000' height='45'></u-navbar>
</view>
<!-- -->
<view class="" v-if="typeflag">
<view class="vipcard">
<view class="card_top">
<view class="name">
购买会员
</view>
</view>
<view class="card_bot">
<view class="txts">
开通立享超值会员特权
</view>
<view class="topage" @click="topage">
购买记录 >
</view>
</view>
</view>
<view class="" style="background-color: #fff;">
<image class="mc" src="https://lxnapi.ccttiot.com/bike/img/static/uCIpavkHbM18al7gpxH8" mode=""></image>
<view class="cont_box">
<view class="cont_li" v-for="(item,index) in huiyuanzaishoulist" :key="index"
@click="choose(item,index)" :class="chooseidx == index ? 'act1' : ''">
<!-- <view class="tit">
适用店铺:{{item.storeName == null ? '--' : item.storeName}}
</view> -->
<view class="tit">
{{item.name == null ? '--' : item.name}}
</view>
<view class="tips">
{{item.time == null ? '--' :item.time}}天享{{item.discount == null ? '--' : item.discount}}折
</view>
<view class="tips">
<view class="" v-if="item.limitType == 1">
没有限制
</view>
<view class="" v-if="item.limitType == 2">
每周最多用{{item.limitCount == null ? '--' : item.limitCount}}次
</view>
<view class="" v-if="item.limitType == 3">
每30天最多用{{item.limitCount == null ? '--' : item.limitCount}}次
</view>
</view>
<view class="tips">
总共可用{{item.limitTotal == null ? '--' : item.limitTotal}}次
</view>
<view class="money">
¥ {{item.price == null ? '--' : item.price}}
</view>
<view class="tips" style="text-decoration: line-through; ">
¥{{item.originalPrice == null ? '--' : item.originalPrice}}
</view>
<view class="tips">
立省¥{{Number(item.originalPrice) - Number(item.price)}}
</view>
</view>
</view>
<view class="txt">
该会员只能用于付费享折扣
</view>
</view>
<view class="pay_btn" @click="btnzf">
¥{{price}}立即开通
</view>
</view>
<view class="" style="height: 500rpx;overflow: scroll;" v-if="storeId != ''">
<view class="vip_box1" v-for="(item,index) in huiyuanlist" :key="index">
<view class="txt1">{{item.vipLevelName == null ? '--' : item.vipLevelName}}</view>
<view class="txt1"
style="position: absolute;top: 70rpx;font-size: 24rpx;font-weight: 400;display: flex;">
每单享{{item.discount == null ? '--' : item.discount}}折
<view class="" v-if="item.limitType == 1">
使用无限制
</view>
<view class="" v-if="item.limitType == 2">
每周最多用{{item.limitCount == null ? '--' : item.limitCount}}次
</view>
<view class="" v-if="item.limitType == 3">
每30天最多用{{item.limitCount == null ? '--' : item.limitCount}}次
</view>
</view>
<view class="txt2">会员将在{{item.endTime.slice(0,10)}}后到期,剩余{{item.surplusCount}}次</view>
<view class="btn">
已开通
</view>
</view>
</view>
<view class="" style="max-height: 1250rpx;overflow: scroll;" v-else>
<view class="vip_box1" v-for="(item,index) in huiyuanlist" :key="index">
<view class="txt1">{{item.vipLevelName == null ? '--' : item.vipLevelName}}</view>
<view class="txt1"
style="position: absolute;top: 70rpx;font-size: 24rpx;font-weight: 400;display: flex;">
每单享{{item.discount == null ? '--' : item.discount}}
<view class="" v-if="item.limitType == 1">
使用无限制
</view>
<view class="" v-if="item.limitType == 2">
每周最多用{{item.limitCount == null ? '--' : item.limitCount}}次
</view>
<view class="" v-if="item.limitType == 3">
每30天最多用{{item.limitCount == null ? '--' : item.limitCount}}次
</view>
</view>
<view class="txt2">会员将在{{item.endTime.slice(0,10)}}后到期,剩余{{item.surplusCount}}次</view>
<view class="btn">
已开通
</view>
</view>
</view>
<view v-if="zanwuflag && storeId == '' "
style="width: 100%;text-align: center;margin-top: 50rpx;font-size: 32rpx;color: #ccc;">
暂无更多会员...
</view>
<!-- <view class="yanjuan" @click="btnyj">
验劵
</view> -->
</view>
</template>
<script>
export default {
data() {
return {
background: {
backgroundColor: '#fff'
},
userinfo: {},
chooseInfo: {},
chooseidx: 0,
typeflag: false,
tit: '会员中心',
huiyuanlist: [],
zanwuflag: false,
storeId: '',
huiyuanzaishoulist: [],
price: '',
channelId: '',
mchid: '',
zfobj: {}
}
},
onLoad(option) {
if (option.storeId) {
this.typeflag = true
this.storeId = option.storeId
this.tit = '购买会员'
this.getlist()
this.getzaishou()
} else {
this.typeflag = false
this.tit = '会员中心'
this.getlist()
}
this.getinfo()
},
onShow() {
},
methods: {
// 点击验劵
btnyj() {
uni.navigateTo({
url: '/page_geren/tuangou'
})
},
// 根据店铺id查询在售会员列表
getzaishou() {
this.$u.get(`/app/vipLevel/list?pageNum=1&pageSize=99&storeId=${this.storeId}`).then((res) => {
if (res.code == 200) {
this.huiyuanzaishoulist = res.rows
this.price = this.huiyuanzaishoulist[0].price
this.mchid = this.huiyuanzaishoulist[0].mchId
this.zfobj = this.huiyuanzaishoulist[0]
this.getzfqd()
}
})
},
// 请求个人会员列表
getlist() {
this.$u.get(`/app/vip/list?pageNum=1&pageSize=999&orderByColumn=createTime&isAsc=desc&inValid=true`).then((
res) => {
if (res.code == 200) {
this.huiyuanlist = res.rows
if (res.rows != '') {
this.zanwuflag = false
} else {
this.zanwuflag = true
}
}
})
},
// 请求个人信息
getinfo() {
this.$u.get("/app/user/userInfo").then((res) => {
if (res.code == 200) {
this.userinfo = res.data
}
})
},
// 点击开通会员
btnkt(num) {
if (num == 1) { //月卡开通
uni.navigateTo({
url: '/page_geren/kaitonghuiyuan'
})
} else { //年卡开通
uni.navigateTo({
url: '/page_geren/kaitonghuiyuan'
})
}
},
// 点击跳转到购买记录
topage() {
uni.navigateTo({
url: '/page_geren/vip_his'
})
},
// 点击切换高亮
choose(itm, idx) {
this.price = itm.price
this.zfobj = itm
this.chooseInfo = itm
this.chooseidx = idx
},
// 获取支付渠道
getzfqd() {
this.$u.get(`/app/channel/recharge/enabledList?mchId=` + this.mchid).then(res => {
if (res.code == 200) {
this.channelId = res.data[0].channelId
}
})
},
// 点击支付购买会员
btnzf() {
let data = {
amount: this.price,
channelId: this.channelId,
levelId: this.zfobj.id,
levelTime: this.zfobj.time,
levelPrice: this.price,
levelLimitType: this.zfobj.limitType,
levelLimitCount: this.zfobj.limitCount,
levelLimitTotal: this.zfobj.limitTotal,
levelDiscount: this.zfobj.discount,
levelStoreId: this.storeId
}
let that = this
that.$u.post("/app/vipOrder", data).then((res) => {
if (res.code == 200) {
uni.requestPayment({
provider: 'wxpay',
timeStamp: res.data.payParams.timeStamp,
nonceStr: res.data.payParams.nonceStr,
package: res.data.payParams.packageVal,
signType: res.data.payParams.signType,
paySign: res.data.payParams.paySign,
success(ress) {
// 刷新支付接口
that.$u.put(`/app/vipOrder/refreshPayResult?orderNo=${res.data.orderNo}`)
.then(res => {
uni.navigateBack()
}).catch(() => {
uni.navigateBack()
})
},
fail(err) {
uni.showToast({
title: '支付失败',
icon: 'none',
duration: 2000
})
}
})
}
})
},
}
}
</script>
<style lang="scss">
/deep/ .uni-navbar {
background: transparent !important; // 使用 !important 确保覆盖原样式
}
page {
background-color: #F4F4F4;
}
.yanjuan {
width: 680rpx;
height: 120rpx;
background-color: #8883F0;
text-align: center;
line-height: 120rpx;
font-size: 40rpx;
color: #fff;
font-weight: 600;
position: fixed;
bottom: 50rpx;
left: 50%;
transform: translateX(-50%);
border-radius: 20rpx;
}
.custom-select {
.mask {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 999;
}
.select-content {
position: fixed;
left: 0;
right: 0;
bottom: 0;
background: #fff;
border-radius: 20rpx 20rpx 0 0;
z-index: 1000;
height: 50vh; // 最大高度
display: flex;
flex-direction: column;
padding-bottom: 20rpx;
.select-header {
padding: 20rpx 30rpx;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #eee;
.close {
font-size: 40rpx;
color: #999;
}
}
.search-box {
padding: 15rpx 20rpx;
border-bottom: 1px solid #eee;
input {
width: 100%;
height: 60rpx;
background: #f5f5f5;
border-radius: 30rpx;
padding: 0 30rpx;
font-size: 28rpx;
}
}
.select-list {
flex: 1;
max-height: calc(50vh - 140rpx);
min-height: 260rpx; // 为列表添加最小高度
.select-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 30rpx;
border-bottom: 1px solid #eee;
font-size: 28rpx;
&.highlight {
background-color: #f0f9ff;
color: #2d8cf0;
}
&:active {
background: #f5f5f5;
}
}
}
}
}
.page {
.fee_box {
margin-top: 18rpx;
position: relative;
margin-left: 38rpx;
width: 680rpx;
height: 288rpx;
background-image: url('https://lxnapi.ccttiot.com/bike/img/static/ugciMYClSGgJxP8HYoRU');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
.auto_box::-webkit-scrollbar {
display: none;
}
.auto_box {
padding-left: 24rpx;
display: flex;
overflow-x: auto;
/* 允许横向滚动 */
flex-wrap: nowrap;
/* 禁止换行保持所有元素在一行 */
position: absolute;
top: 90rpx;
width: 100%;
/* 根据需要调整宽度 */
height: auto;
/* 根据内容自动调整高度 */
.auto_li {
position: relative;
padding: 24rpx 28rpx;
margin-right: 22rpx;
width: 408rpx;
height: 176rpx;
flex-shrink: 0;
/* 防止子元素被压缩 */
background-image: url('https://lxnapi.ccttiot.com/bike/img/static/ui88NWy9R1j2zFGojdHU');
background-size: cover;
background-position: center;
.txt1 {
width: 100%;
font-weight: 600;
font-size: 32rpx;
color: #495E74;
}
.txt2 {
font-weight: 400;
font-size: 24rpx;
color: #495E74;
}
.buy_btn {
position: absolute;
right: 26rpx;
bottom: 38rpx;
display: flex;
align-items: center;
justify-content: center;
width: 132rpx;
height: 50rpx;
background: #495E74;
border-radius: 25rpx 25rpx 25rpx 25rpx;
font-weight: 500;
font-size: 28rpx;
color: #FFF3DB;
}
}
}
}
.fixed {
z-index: 999;
position: fixed;
top: 0;
}
.tipss {
margin-left: 40rpx;
font-weight: 500;
font-size: 36rpx;
color: #3D3D3D;
}
.vipcard {
padding: 36rpx;
width: 680rpx;
height: 244rpx;
margin: auto;
margin-top: 30rpx;
z-index: 1;
background-image: url('https://lxnapi.ccttiot.com/bike/img/static/u78FEc5oHRKzdvopQpZE');
background-size: cover;
/* 背景图片等比缩放以覆盖整个容器 */
background-position: center;
/* 背景图片居中显示 */
background-repeat: no-repeat;
.card_top {
display: flex;
flex-wrap: nowrap;
align-items: center;
.name {
font-weight: 500;
font-size: 44rpx;
color: #B07C1E;
}
.type {
margin-left: 30rpx;
padding: 4rpx 18rpx;
font-weight: 400;
font-size: 24rpx;
color: #B07C1E;
border-radius: 35rpx 35rpx 35rpx 35rpx;
border: 1rpx solid #B07C1E;
}
}
.card_bot {
margin-top: 20rpx;
display: flex;
flex-wrap: nowrap;
align-items: center;
.txts {
font-weight: 400;
font-size: 28rpx;
color: #B07C1E;
}
.topage {
margin-left: auto;
font-weight: 400;
font-size: 28rpx;
color: #B07C1E;
}
}
}
.pay_btn {
display: flex;
align-items: center;
justify-content: center;
margin: 20rpx auto;
width: 680rpx;
height: 104rpx;
background: linear-gradient(90deg, rgba(255, 201, 87, 0.84) 0%, rgba(255, 224, 158, 0.58) 100%);
border-radius: 58rpx 58rpx 58rpx 58rpx;
font-weight: 500;
font-size: 44rpx;
color: #B07C1E;
position: fixed;
left: 50%;
transform: translateX(-50%);
bottom: 30rpx;
}
.backimg {
position: fixed;
width: 750rpx;
height: 670rpx;
top: 0;
left: 0;
z-index: -1; // 确保背景图片在所有内容之下
}
.txt {
margin: 40rpx 48rpx;
font-weight: 400;
font-size: 24rpx;
color: #64B6A7;
padding-bottom: 20rpx;
box-sizing: border-box;
}
.cont_box {
display: flex;
flex-wrap: nowrap;
padding: 0 38rpx;
box-sizing: border-box;
z-index: 10;
overflow-x: auto; // 允许横向滚动
white-space: nowrap; // 保持内容不换行
-webkit-overflow-scrolling: touch; // 使滚动更流畅
// 隐藏横向滚动条
::-webkit-scrollbar {
display: none;
height: 0;
}
scrollbar-width: none; // 针对 Firefox
-ms-overflow-style: none; // 针对 Internet Explorer Edge
.act1 {
background: #FFFBF1;
}
.cont_li {
width: 230rpx;
height: 330rpx;
background: rgba(255, 224, 158, 0.15) #FFFFFF;
border-radius: 20rpx;
border: 1rpx solid rgba(176, 124, 30, 0.56);
z-index: 10;
flex-shrink: 0; // 防止子元素缩小
margin-right: 20rpx; // 子元素之间的间距
.tit {
width: 100%;
text-align: center;
font-weight: 500;
font-size: 32rpx;
color: #B07C1E;
margin-top: 10rpx;
}
.money {
width: 100%;
text-align: center;
margin-top: 10rpx;
font-weight: 600;
font-size: 32rpx;
color: #E46666;
}
.tips {
margin-top: 10rpx;
width: 100%;
text-align: center;
font-weight: 400;
font-size: 24rpx;
color: #979797;
}
}
}
.cont_box::-webkit-scrollbar {
display: none;
}
.mc {
width: 750rpx;
height: 40rpx;
z-index: 2;
position: relative;
top: -40rpx;
}
}
.page {
width: 750rpx;
.fee_box {
margin-top: 40rpx;
position: relative;
margin-left: 38rpx;
width: 680rpx;
height: 288rpx;
background-image: url('https://lxnapi.ccttiot.com/bike/img/static/ugciMYClSGgJxP8HYoRU');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
.auto_box::-webkit-scrollbar {
display: none;
}
.auto_box {
padding-left: 24rpx;
display: flex;
overflow-x: auto;
/* 允许横向滚动 */
flex-wrap: nowrap;
/* 禁止换行保持所有元素在一行 */
position: absolute;
top: 90rpx;
width: 100%;
/* 根据需要调整宽度 */
height: auto;
/* 根据内容自动调整高度 */
.auto_li {
position: relative;
padding: 24rpx 28rpx;
margin-right: 22rpx;
width: 408rpx;
height: 176rpx;
flex-shrink: 0;
/* 防止子元素被压缩 */
background-image: url('https://lxnapi.ccttiot.com/bike/img/static/ui88NWy9R1j2zFGojdHU');
background-size: cover;
background-position: center;
.txt1 {
width: 100%;
font-weight: 600;
font-size: 32rpx;
color: #495E74;
}
.txt2 {
font-weight: 400;
font-size: 24rpx;
color: #495E74;
}
.buy_btn {
position: absolute;
right: 26rpx;
bottom: 38rpx;
display: flex;
align-items: center;
justify-content: center;
width: 132rpx;
height: 50rpx;
background: #495E74;
border-radius: 25rpx 25rpx 25rpx 25rpx;
font-weight: 500;
font-size: 28rpx;
color: #FFF3DB;
}
}
}
}
.vip_box1 {
position: relative;
margin-left: 38rpx;
width: 680rpx;
height: 158rpx;
background-image: url('https://lxnapi.ccttiot.com/bike/img/static/uiaiNkMy7221n3bk2ta0');
background-size: cover;
/* 背景图片等比缩放以覆盖整个容器 */
background-position: center;
/* 背景图片居中显示 */
background-repeat: no-repeat;
margin-bottom: 20rpx;
.txt1 {
top: 20rpx;
left: 171rpx;
position: absolute;
font-weight: 500;
font-size: 39rpx;
color: #B07C1E;
}
.txt2 {
position: absolute;
left: 171rpx;
bottom: 20rpx;
font-weight: 400;
font-size: 25rpx;
color: #B07C1E;
}
.btn {
display: flex;
align-items: center;
justify-content: center;
position: absolute;
top: 18rpx;
right: 23rpx;
width: 150rpx;
height: 43rpx;
border-radius: 31rpx 31rpx 31rpx 31rpx;
border: 1rpx solid #B07C1E;
font-weight: 400;
font-size: 25rpx;
color: #B07C1E;
}
}
.vip_box {
position: relative;
margin-left: 38rpx;
width: 680rpx;
height: 158rpx;
background-image: url('https://lxnapi.ccttiot.com/bike/img/static/uw6bYgjn1bS1ayNm6VI9');
background-size: cover;
/* 背景图片等比缩放以覆盖整个容器 */
background-position: center;
/* 背景图片居中显示 */
background-repeat: no-repeat;
margin-top: 40rpx;
.txt1 {
top: 20rpx;
left: 100rpx;
position: absolute;
font-weight: 500;
font-size: 44rpx;
color: #FFE09E;
}
.txt2 {
position: absolute;
right: 74rpx;
bottom: 10rpx;
font-weight: 400;
font-size: 24rpx;
color: #FFE09E;
}
}
.btns {
display: flex;
align-items: center;
justify-content: center;
width: 680rpx;
height: 90rpx;
background: #64B6A7;
color: #fff;
font-size: 36rpx;
border-radius: 20rpx;
margin: 40rpx auto;
}
.fixed {
z-index: 999;
position: fixed;
top: 0;
}
.backimg-container {
position: fixed;
top: -7px;
left: 0;
width: 100%;
height: 564rpx;
z-index: 0;
.backimg {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
}
.topbg {
width: 750rpx;
height: 184rpx;
.topbox {
width: 750rpx;
height: 184rpx;
border-radius: 0 0 100rpx 0;
.info {
padding-top: 40rpx;
margin-left: 100rpx;
display: flex;
flex-wrap: nowrap;
align-items: center;
image {
width: 90rpx;
height: 90rpx;
border-radius: 50%;
}
.cont {
margin-left: 40rpx;
width: 70%;
.name {
font-weight: 400;
font-size: 32rpx;
color: #FFFFFF;
width: 100%;
text-shadow: 0px 8px 20px rgba(0, 0, 0, 0.3);
}
.phone {
margin-top: 4rpx;
width: 100%;
font-weight: 400;
font-size: 20rpx;
color: #FFFFFF;
text-shadow: 0px 8px 20px rgba(0, 0, 0, 0.3);
}
}
}
}
}
.type_cont {
width: 680rpx;
padding: 58rpx 54rpx;
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
margin: 0 auto;
margin-top: 30rpx;
.type_li {
width: 100%;
display: flex;
align-items: center;
flex-wrap: nowrap;
font-weight: 400;
font-size: 32rpx;
color: #2F3240;
image {
width: 44rpx;
height: 44rpx;
margin-right: 20rpx;
}
.icon-xiangyou1 {
margin-left: auto;
color: #2F3240;
font-size: 36rpx;
}
}
}
.tocont {
display: flex;
flex-wrap: nowrap;
align-items: center;
justify-content: space-around;
margin: 0 auto;
margin-top: 100rpx;
width: 680rpx;
height: 176rpx;
background: #fff;
border-radius: 20rpx 20rpx 20rpx 20rpx;
z-index: 10;
position: relative;
.cont_li {
width: 112rpx;
display: flex;
flex-wrap: wrap;
justify-content: center;
image {
margin-top: 10rpx;
width: 44rpx;
height: 44rpx;
}
.txt {
width: 112rpx;
text-align: center;
font-weight: 400;
font-size: 28rpx;
color: #2F3240;
}
}
}
.btnbg {
width: 750rpx;
.btnbox {
padding-top: 36rpx;
width: 750rpx;
background: #fff;
border-radius: 100rpx 0 0 0;
.btncard {
padding: 0 54rpx;
margin: 0 auto;
width: 680rpx;
padding: 0 56rpx;
background: #FFFFFF;
box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0, 0, 0, 0.08);
border-radius: 34rpx 34rpx 34rpx 34rpx;
.card_li {
padding-top: 18rpx;
width: 100%;
display: flex;
flex-wrap: nowrap;
align-items: center;
justify-content: space-between;
border-bottom: 2rpx solid #D8D8D8;
padding-bottom: 26rpx;
.card_left {
display: flex;
flex-wrap: nowrap;
image {
margin-right: 28rpx;
width: 40rpx;
height: 40rpx;
}
.text {
margin-right: 24rpx;
font-weight: 400;
font-size: 28rpx;
color: #3D3D3D;
}
.tip {
display: flex;
align-items: center;
justify-content: center;
width: 80rpx;
height: 28rpx;
background: #FFEFEF;
border-radius: 17rpx 17rpx 17rpx 17rpx;
font-weight: 400;
font-size: 16rpx;
color: #FA5F5F;
}
}
.icon-xiangyou1 {
font-size: 42rpx;
color: #3D3D3D;
}
}
}
}
}
}
</style>