修改人脸识别拍照图片质量和添加场馆灯管费用支付

This commit is contained in:
wangxiaowei
2026-01-14 18:12:48 +08:00
parent 83bc147a48
commit 1d773081ea
4 changed files with 765 additions and 26 deletions

View File

@ -55,8 +55,6 @@
</view>
<view class="">您的订单已取消。期待下次有机会再为您服务!</view>
</view>
<view class="dot-bg"></view>
</view>
@ -108,12 +106,61 @@
</view>
</view>
</view>
<!-- <view class="d-f a-i-c open-light" @click="buyLight" v-if="detail.order_status == 1 || detail.order_status == 2">
<image style="width: 48rpx;height: 48rpx;" src="https://xh.stnav.com/uploads/sport/light.png" ></image>
<view>购买灯光</view>
</view> -->
</template>
</view>
</view>
</view>
<!-- 购买灯光 -->
<view class="cg-order" style="margin-bottom: 20rpx;" v-if="detail.order_status == 1 || detail.order_status == 2 && ballType == 1">
<view class="cg-order-title d-f a-i-c open-light">
<!-- <image style="width: 48rpx;height: 48rpx;" src="https://xh.stnav.com/uploads/sport/light.png" ></image> -->
<view>购买灯光</view>
</view>
<view class="desc" v-for="(item, index) in detail.trade" :key="index">
<view class="fb" style="margin: 20rpx 0;">{{ index }}</view>
<view class="date-grid">
<view
v-for="(item2, index2) in item"
:key="index2"
:class="isSelected(index, index2) ? 'date-time-btn' : 'date-time-btn-normal'"
@click="toggleSelect(index, index2, item2.room_id)"
>
{{ item2.start_time }}-{{ item2.end_time }}
</view>
</view>
</view>
<view class="buy-checkout">
<view :class="payType == 'wxpay' ? 'item active' : 'item'" @tap="payTypeFunc('wxpay')" style="padding-bottom: 10rpx;">
<view class="d-s-c">
<view class="icon-box d-c-c mr10"><span class="icon iconfont icon-weixin"></span></view>
<text class="key">微信支付</text>
</view>
<view class="icon-box d-c-c"><span class="icon iconfont icon-xuanze"></span></view>
</view>
<view :class="payType == 'balance' ? 'item active' : 'item'" @tap="payTypeFunc('balance')">
<view class="d-s-c">
<view class="icon-box d-c-c mr10"><span class="icon iconfont icon-yue"></span></view>
<text class="key">平台余额</text>
</view>
<view class="d-f a-i-c">
<view class="mr10 dis" v-if="userAccount > 0">
<!-- <text class="key">余额支付:(剩余:{{balance}})</text> -->
{{ cardType() }}
</view>
<view class="icon-box d-c-c"><span class="icon iconfont icon-xuanze"></span></view>
</view>
</view>
</view>
<view class="pay-light-btn" @click="getSelectedContent">确定并支付</view>
</view>
<!-- 适用场馆 -->
<view class="cg-store">
<view class="cg-store-title" @click="againReserve">适用场馆</view>
@ -290,6 +337,99 @@
</view>
</view>
</Popup>
<!-- 开灯弹窗 -->
<Popup :show="openLightPopup" radius="16rpx">
<view class="light-popup">
<view class="title">提示</view>
<view class="desc">
<view class="rule">请选择要开灯的场地</view>
<scroll-view scroll-y="true" enhanced="true" :show-scrollbar="false" style="height: 500rpx;">
<view class="desc" v-for="(item, index) in detail.trade" :key="index">
<view class="fb" style="margin: 20rpx 0;">{{ index }}</view>
<view class="date-grid">
<view
:class="isSelected(index, index2) ? 'date-time-btn' : 'date-time-btn-normal'"
v-for="(item2, index2) in item"
:key="index2"
@click="toggleSelect(index, index2, item2.room_id)"
>
{{ item2.start_time }}-{{ item2.end_time }}
</view>
</view>
</view>
</scroll-view>
</view>
<view class="btn">
<view class="btn1" @click="openLightPopup = false">取消</view>
<view class="btn2" @click="getSelectedContent">确定</view>
</view>
</view>
</Popup>
<!-- 会员卡选择弹窗 -->
<Popup :show="balancePopup" :width='750' :padding="0" type="bottom" backgroundColor="#fff" radius="32rpx 32rpx 0 0">
<view class="ww100 box-s-b pop-improt typeof pr">
<image style="width: 64rpx;height: 64rpx;position: absolute; top: 26rpx;right: 30rpx;" src="@/static/icon/close2.png" mode="" @click="closeBalancePopup"></image>
<view class="d-c-c pt44">
<text class="f34 fb">会员卡选择</text>
</view>
<view class="bg-white card">
<view class="card-item" :class="currentType == 1 ? 'active' : ''" @click="currentType = 1">
<view class="d-f a-i-c">
<view class="card-title">白银会员卡</view>
</view>
<view class="d-f a-i-c">
<view class="card-balance">{{ userBalance.balance1 }}</view>
<view class="icon-box d-c-c card-checkout"><span class="icon iconfont icon-xuanze"></span></view>
</view>
</view>
<view class="card-item" :class="currentType == 2 ? 'active' : ''" @click="currentType = 2">
<view class="d-f a-i-c">
<view class="card-title">黄金会员卡</view>
</view>
<view class="d-f a-i-c">
<view class="card-balance">{{ userBalance.balance2 }}</view>
<view class="icon-box d-c-c card-checkout"><span class="icon iconfont icon-xuanze"></span></view>
</view>
</view>
<view class="card-item" :class="currentType == 3 ? 'active' : ''" @click="currentType = 3">
<view class="d-f a-i-c">
<view class="card-title">铂金会员卡</view>
</view>
<view class="d-f a-i-c">
<view class="card-balance">{{ userBalance.balance3 }}</view>
<view class="icon-box d-c-c card-checkout"><span class="icon iconfont icon-xuanze"></span></view>
</view>
</view>
<view class="card-item" :class="currentType == 4 ? 'active' : ''" @click="currentType = 4">
<view class="d-f a-i-c">
<view class="card-title">钻石会员卡</view>
</view>
<view class="d-f a-i-c">
<view class="card-balance">{{ userBalance.balance4 }}</view>
<view class="icon-box d-c-c card-checkout"><span class="icon iconfont icon-xuanze"></span></view>
</view>
</view>
<view class="card-item" :class="currentType == 5 ? 'active' : ''" @click="currentType = 5">
<view class="d-f a-i-c">
<view class="card-title">至尊会员卡</view>
</view>
<view class="d-f a-i-c">
<view class="card-balance">{{ userBalance.balance5 }}</view>
<view class="icon-box d-c-c card-checkout"><span class="icon iconfont icon-xuanze"></span></view>
</view>
</view>
<view class="card-btn" @click="confirmCard">确定</view>
</view>
</view>
</Popup>
</view>
</template>
@ -331,12 +471,24 @@
billPopup: false,
venue: {}, // 场馆
cancelOrderPopup: false,
cancelReservePopup: false
cancelReservePopup: false,
openLightPopup: false,
selectedTimes: [], // 记录选中的时间项,格式:[{group: 0, idx: 1}, ...]
content: [], // 保存格式化后的多选结果
payType: 'wxpay', // 支付方式 wxpay\balance
balancePopup: false,
balance: {},
userBalance: {},
currentType: '', // 选择的会员卡类型
userAccount: 0,
userDiscount: 0
};
},
onLoad(e) {
this.order_id = e.order_id;
this.ballType = e.ballType || 1;
this.getRecharge()
},
onShow() {
/*获取订单详情*/
@ -563,6 +715,327 @@
return '至尊会员卡'
}
},
/**
* 购买灯光前置条件
*/
buyLight() {
let self = this
if (self.detail.light_order == 1) {
uni.showModal({
title: '提示',
content: '您已支付过灯光费用,是否再次支付?',
success: function(res) {
console.log("🚀 ~ res:", res)
if (res.confirm) {
self.payLight()
}
}
});
} else {
self.payLight()
}
},
// 选择支付方式
payTypeFunc(n) {
this.payType = n;
if (n == 'balance') {
this.balancePopup = true;
} else {
// 切换到微信支付时还原价格
this.userAccount = 0;
this.userDiscount = 0;
this.currentType = '';
this.balancePopup = false;
}
},
// 关闭余额支付弹窗
closeBalancePopup() {
this.payType = 'wxpay';
this.balancePopup = false;
},
getRecharge() {
let self = this;
uni.showLoading({
title: '加载中'
});
// 获取充值
self._post(
'ground.ground/groundSetting',
{
app_id: self.getAppId(),
},
function(res) {
self.balance = res.data.lists.balance;
}
)
// 获取充值
self._post('user.index/detail', {
source: self.getPlatform()
}, function(res) {
console.log("🚀 ~ res:", res)
self.userBalance = res.data.userInfo;
self.loadding = false;
uni.hideLoading();
});
},
// 确认选择充值卡
confirmCard() {
if (this.currentType == '') {
uni.showToast({
title: '请选择会员卡类型',
icon: 'none'
});
return;
}
if (this.userBalance['balance' + this.currentType] <= 0) {
uni.showToast({
title: '余额不足,请选择其他会员卡',
icon: 'none'
});
return;
}
this.userAccount = this.userBalance['balance' + this.currentType];
this.userDiscount = this.balance['discount' + this.currentType];
// this.payType = this.currentType;
// this.countPrice();
this.balancePopup = false;
},
cardType() {
if (this.currentType == 1) {
return '白银会员卡'
} else if (this.currentType == 2) {
return '黄金会员卡'
} else if (this.currentType == 3) {
return '铂金会员卡'
} else if (this.currentType == 4) {
return '钻石会员卡'
} else if (this.currentType == 5) {
return '至尊会员卡'
}
},
isSelected(groupIdx, idx) {
return this.selectedTimes.some(sel => sel.group === groupIdx && sel.idx === idx);
},
toggleSelect(groupIdx, idx, roomId) {
const found = this.selectedTimes.findIndex(sel => sel.group === groupIdx && sel.idx === idx);
if (found > -1) {
this.selectedTimes.splice(found, 1);
} else {
this.selectedTimes.push({ group: groupIdx, idx, roomId });
}
},
/**
* 获取选中的内容并提交
*/
getSelectedContent() {
let self = this
// 按照 roomId 分组 selectedTimes生成指定格式
const result = [];
const trade = self.detail.trade || [];
const roomMap = {};
self.selectedTimes.forEach(sel => {
if (!roomMap[sel.roomId]) roomMap[sel.roomId] = [];
// 获取时间段
const item = trade[sel.group] && trade[sel.group][sel.idx];
if (item) {
roomMap[sel.roomId].push(`${item.start_time}-${item.end_time}`);
}
});
Object.keys(roomMap).forEach(roomId => {
result.push({ room_id: roomId, arr: roomMap[roomId].join(',') });
});
self.content = result;
if (self.detail.light_order == 1) {
uni.showModal({
title: '提示',
content: '您已支付过灯光费用,是否再次支付?',
success: function(res) {
console.log("🚀 ~ res:", res)
if (res.confirm) {
self.payLight()
}
}
});
} else {
uni.showModal({
title: '提示',
content: '您确定要购买灯光费用吗?',
success: function(o) {
if (o.confirm) {
self.payLight()
}
}
});
}
},
payLight() {
let self = this
if (self.content.length == 0) {
uni.showToast({
title: '请选择时间',
icon: 'none'
});
return
}
if (self.payType == '') {
uni.showToast({
title: '请选择支付方式',
icon: 'none'
});
return;
}
if (self.payType == 'balance' && self.currentType == '') {
uni.showToast({
title: '请选择会员卡类型',
icon: 'none'
});
return;
}
uni.showLoading({
title: '正在处理'
});
self._post(
'order.GroundOrder/addLightStoreOrder', {
order_id: self.order_id,
room_id: '',
ground_id: self.detail.ground_id,
content: JSON.stringify(self.content)
},
function(res) {
uni.hideLoading();
uni.showLoading({
title: '支付中'
});
const payId = res.data.id;
if (self.payType == 'wxpay') {
self._post(
'user.groundOrder/lightPay', {
order_id: payId,
},
function(pay) {
console.log("🚀 ~ pay:", pay)
uni.requestPayment({
provider: 'wxpay',
timeStamp: pay.data.payment.timeStamp,
nonceStr: pay.data.payment.nonceStr,
package: 'prepay_id=' + pay.data.payment.prepay_id,
signType: 'MD5',
paySign: pay.data.payment.paySign,
success: res => {
self.openLightPopup = false;
self.selectedTimes = []
self.content = []
self.result = 'success'
uni.hideLoading();
setTimeout(() => {
uni.showToast({
title: '支付成功',
icon: 'none'
});
}, 200);
setTimeout(() => {
self.getData();
self.getRecharge();
}, 1500);
},
fail: res => {
self.openLightPopup = false;
self.selectedTimes = []
self.content = []
self.result = 'fail'
uni.hideLoading();
setTimeout(() => {
uni.showToast({
title: '支付失败',
icon: 'none'
});
}, 200);
setTimeout(() => {
self.getData();
self.getRecharge();
}, 1500);
},
});
}
);
} else if (self.payType == 'balance') {
self._post(
'ground.ground/yueLightPay', {
order_id: payId,
pay_type: self.currentType
},
function(pay) {
if (pay.code == 1) {
self.openLightPopup = false;
self.selectedTimes = []
self.content = []
self.result = 'success'
uni.hideLoading();
setTimeout(() => {
uni.showToast({
title: '支付成功',
icon: 'none'
});
}, 200);
setTimeout(() => {
self.getData();
self.getRecharge();
}, 1500);
} else {
self.openLightPopup = false;
console.log("🚀 ~ pay error res:", res)
self.result = 'fail'
uni.hideLoading();
setTimeout(() => {
uni.showToast({
title: '支付失败',
icon: 'none'
});
}, 200);
setTimeout(() => {
self.getData();
self.getRecharge();
}, 1500);
}
}
)
}
}
);
},
}
};
</script>
@ -1002,6 +1475,19 @@ page {
text-align: center;
}
.date-time-btn-normal {
width: 100%;
height: 60rpx;
line-height: 60rpx;
background-color: #BBBFC7;
color: #fff;
font-size: 26rpx;
border-radius: 10rpx;
text-align: center;
}
.notice-popup {
padding: 20rpx 0;
width: 100%;
@ -1036,32 +1522,190 @@ page {
margin-bottom: 10rpx;
}
.btn {
.btn {
font-size: 32rpx;
display: flex;
justify-content: center;
align-items: center;
margin-top: 44rpx;
.btn1 {
width: 240rpx;
height: 80rpx;
line-height: 80rpx;
text-align: center;
background: #F6F7F8;
border-radius: 8rpx;
margin-right: 30rpx;
}
.btn2 {
width: 240rpx;
height: 80rpx;
line-height: 80rpx;
text-align: center;
background: #365A9A;
color: #FFFFFF;
border-radius: 8rpx;
}
}
}
.light-popup {
padding: 20rpx 0;
width: 100%;
.title {
font-size: 32rpx;
color: #303133;
line-height: 50rpx;
text-align: center;
}
.desc {
font-size: 24rpx;
color: #303133;
line-height: 52rpx;
text-align: left;
}
.btn {
font-size: 32rpx;
display: flex;
justify-content: center;
align-items: center;
margin-top: 44rpx;
.btn1 {
width: 240rpx;
height: 80rpx;
line-height: 80rpx;
text-align: center;
background: #F6F7F8;
border-radius: 8rpx;
margin-right: 30rpx;
}
.btn2 {
width: 240rpx;
height: 80rpx;
line-height: 80rpx;
text-align: center;
background: #365A9A;
color: #FFFFFF;
border-radius: 8rpx;
}
}
}
.open-light {
border-radius: 16rpx;
font-size: 32rpx;
display: flex;
justify-content: center;
align-items: center;
margin-top: 44rpx;
}
.btn1 {
width: 240rpx;
height: 80rpx;
line-height: 80rpx;
text-align: center;
background: #F6F7F8;
border-radius: 8rpx;
margin-right: 30rpx;
.buy-checkout {
border-radius: 16rpx;
background-color: #FFFFFF;
.item {
border-bottom: none;
border-radius: 2rpx;
padding: 30rpx 0;
}
}
.buy-checkout .item.active .iconfont.icon-xuanze {
color: #365A9A;
}
.card {
margin-top: 28rpx;
padding-bottom: 64rpx;
.card-item {
width: 690rpx;
height: 104rpx;
background: #FFFFFF;
border-radius: 16rpx;
border: 2rpx solid #F4F4F4;
margin: 0 30rpx 20rpx;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 30rpx;
box-sizing: border-box;
.card-title {
font-size: 30rpx;
color: #121212;
margin-right: 24rpx;
}
.discount {
width: 44rpx;
height: 44rpx;
line-height: 44rpx;
text-align: center;
border-radius: 100%;
background: #FF5951;
color: #fff;
font-size: 30rpx;
margin-right: 20rpx;
}
.sale {
font-size: 28rpx;
}
.card-balance {
font-size: 30rpx;
color: #303133;
line-height: 42rpx;
margin-right: 28rpx;
}
}
.btn2 {
width: 240rpx;
height: 80rpx;
line-height: 80rpx;
text-align: center;
.active {
border: 2rpx solid #FF5951;
background: #FFF4F4;
.card-checkout {
.iconfont{
color: #365A9A;
}
}
}
.card-btn {
width: 630rpx;
height: 90rpx;
background: #365A9A;
color: #FFFFFF;
border-radius: 8rpx;
font-weight: bold;
font-size: 30rpx;
color: #FFFFFF;
line-height: 90rpx;
text-align: center;
margin: 42rpx auto 0;
}
}
.pt44 {
padding-top: 44rpx;;
}
.pay-light-btn {
width: 300rpx;
height: 80rpx;
line-height: 80rpx;
text-align: center;
border-radius: 8rpx;
color: #303133;
margin: 0 auto;
border: 2rpx solid #C2C9D5;
font-size: 28rpx;
}
</style>