You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

444 lines
11 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!-- 收银台 -->
<template>
<s-layout title="收银台">
<view class="bg-white ss-modal-box ss-flex-col">
<!-- 订单信息 -->
<view class="modal-header ss-flex-col ss-col-center ss-row-center">
<view class="money-box ss-m-b-20">
<text class="money-text">{{ fen2yuan(state.orderInfo.price) }}</text>
</view>
<view class="time-text">
<text>{{ payDescText }}</text>
</view>
</view>
<!-- 支付方式 -->
<view class="modal-content ss-flex-1">
<view class="pay-title ss-p-l-30 ss-m-y-30">选择支付方式</view>
<radio-group @change="onTapPay" style="width: 100%">
<label class="pay-type-item" v-for="item in state.payMethods" :key="item.title">
<view class="pay-item ss-flex ss-col-center ss-row-between ss-p-x-30 border-bottom"
:class="{ 'disabled-pay-item': item.disabled }">
<view class="ss-flex ss-col-center">
<image class="pay-icon" v-if="item.disabled"
:src="sheep.$url.static('/static/img/shop/pay/cod_disabled.png')"
mode="aspectFit" />
<image class="pay-icon" v-else :src="sheep.$url.static(item.icon)" mode="aspectFit" />
<text class="pay-title">{{ item.title }}</text>
</view>
<view class="check-box ss-flex ss-col-center ss-p-l-10">
<view class="userInfo-money ss-m-r-10" v-if="item.value === 'wallet'">
余额: {{ fen2yuan(userWallet.balance) }}元
</view>
<view class="userInfo-money ss-m-r-10" v-if="item.value === 'wallet_personnel_car'">
余额: {{ fen2yuan(userWalletPersonnelCar.balance) }}元
</view>
<view class="userInfo-money ss-m-r-10" v-if="item.value === 'team_wallet'">
余额: {{ fen2yuan(userWalletTeam.balance) }}元
</view>
<!-- <view class="userInfo-money ss-m-r-10" v-if="item.value === 'team_wallet'">
余额: {{ handle_getWalletTeam() }}元
</view> -->
<radio :value="item.value" color="var(--ui-BG-Main)" style="transform: scale(0.8)"
:disabled="item.disabled" :checked="state.payment === item.value" />
</view>
</view>
</label>
</radio-group>
</view>
<!-- 工具 -->
<view class="modal-footer ss-flex ss-row-center ss-col-center ss-m-t-80 ss-m-b-40">
<button v-if="state.payStatus === 0" class="ss-reset-button past-due-btn">
检测支付环境中
</button>
<button v-else-if="state.payStatus === -1" class="ss-reset-button past-due-btn" disabled>
支付已过期
</button>
<button v-else class="ss-reset-button save-btn" @tap="onPay" :disabled="state.payStatus !== 1"
:class="{ 'disabled-btn': state.payStatus !== 1 }">
</button>
</view>
</view>
</s-layout>
</template>
<script setup>
import {
computed,
reactive,
ref
} from 'vue';
import {
onLoad
} from '@dcloudio/uni-app';
import sheep from '@/sheep';
import {
fen2yuan,
useDurationTime
} from '@/sheep/hooks/useGoods';
import PayOrderApi from '@/sheep/api/pay/order';
import PayChannelApi from '@/sheep/api/pay/channel';
import {
getPayMethods
} from '@/sheep/platform/pay';
import PayWalletApi from '@/sheep/api/pay/wallet';
import Pay from '@/sheep/platform/pay';
// const userWallet = computed(() => sheep.$store('user').userWallet);
// const userWalletPersonnelCar = computed(() => sheep.$store('user').userWalletPersonnelCar);
// const userWalletTeam = computed(() => sheep.$store('user').userWalletTeam);
const userWallet = ref()
const user_team_wallet = ref()
const userWalletPersonnelCar = ref()
const userWalletTeam = ref({
balance: 0
})
const handle_getWallet = async () => {
const {
code,
data
} = await PayWalletApi.getPayWallet();
if (code !== 0) {
return;
}
// console.log(data,'钱包')
userWallet.value = data;
}
// const handle_user_team_wallet = async () => {
// const {
// code,
// data
// } = await PayWalletApi.getPayWallet_team();
// if (code !== 0) {
// return;
// }
// user_team_wallet.value = data;
// }
const handle_getWallet_person_car = async () => {
const {
code,
data
} = await PayWalletApi.getPayWalletPersonelCar();
if (code !== 0) {
return;
}
userWalletPersonnelCar.value = data;
}
const handle_getWalletTeam = async () => {
const {
code,
data
} = await PayWalletApi.getPayWalletPersonelTeam();
if (code !== 0) {
return;
}
userWalletTeam.value = data
}
// 检测支付环境
const state = reactive({
orderType: 'goods', // 订单类型; goods - 商品订单, recharge - 充值订单
orderInfo: {}, // 支付单信息
payStatus: 0, // 0=检测支付环境, -2=未查询到支付单信息, -1=支付已过期, 1=待支付2=订单已支付
payMethods: [], // 可选的支付方式
payment: '', // 选中的支付方式
});
const onPay = () => {
if (state.payment === '') {
sheep.$helper.toast('请选择支付方式');
return;
}
// console.log(state.payment,'state.payment')
if (state.payment === 'wallet') {
// console.log(fen2yuan(userWallet.value.balance), '钱包')
let num1 = fen2yuan(userWallet.value.balance)
let num2 = state.orderInfo.price / 100
if (num1 < num2) {
uni.showModal({
title: '提示',
content: '当前余额不足,请及时充值',
success: function(res) {
},
});
return
}
uni.showModal({
title: '提示',
content: '确定要支付吗?',
success: function(res) {
if (res.confirm) {
sheep.$platform.pay(state.payment, state.orderType, state.orderInfo.id);
}
},
});
} else {
if (state.payment == 'wallet_personnel_car') {
let num1 = fen2yuan(userWalletPersonnelCar.value.balance)
let num2 = state.orderInfo.price / 100
if (num1 < num2) {
uni.showModal({
title: '提示',
content: '当前余额不足,请及时充值',
success: function(res) {
},
});
return
}
}
if (state.payment == 'team_wallet') {
let num1 = fen2yuan(userWalletTeam.value.balance)
let num2 = state.orderInfo.price / 100
if (num1 < num2) {
uni.showModal({
title: '提示',
content: '当前余额不足,请及时充值',
success: function(res) {
},
});
return
}
}
// sheep.$platform.pay(state.payment, state.orderType, state.orderInfo.id);
return new Pay(state.payment, state.orderType, state.orderInfo.id);
}
};
// 支付文案提示
const payDescText = computed(() => {
if (state.payStatus === 2) {
return '该订单已支付';
}
if (state.payStatus === 1) {
const time = useDurationTime(state.orderInfo.expireTime);
if (time.ms <= 0) {
state.payStatus = -1;
return '';
}
return `剩余支付时间 ${time.h}:${time.m}:${time.s} `;
}
if (state.payStatus === -2) {
return '未查询到支付单信息';
}
return '';
});
// 状态转换payOrder.status => payStatus
function checkPayStatus() {
if (state.orderInfo.status === 10 ||
state.orderInfo.status === 20) { // 支付成功
state.payStatus = 2;
return;
}
if (state.orderInfo.status === 30) { // 支付关闭
state.payStatus = -1;
return;
}
state.payStatus = 1; // 待支付
// console.log(state.payStatus,'state.payStatus')
}
// 切换支付方式
function onTapPay(e) {
state.payment = e.detail.value;
}
// 设置支付订单信息
async function setOrder(id) {
// 获得支付订单信息
const {
data,
code
} = await PayOrderApi.getOrder(id);
console.log(data, '设置支付订单信息')
if (code !== 0 || !data) {
state.payStatus = -2;
return;
}
state.orderInfo = data;
// 获得支付方式
await setPayMethods();
// 设置支付状态
checkPayStatus();
}
// 获得支付方式
async function setPayMethods() {
const {
data,
code
} = await PayChannelApi.getEnableChannelCodeList(state.orderInfo.appId)
let new_array = []
if (data.length > 0) {
for (var i = 0; i < data.length; i++) {
if (data[i] === 'team_wallet' && uni.getStorageSync('version') === '个人版') {
} else {
new_array.push(data[i])
}
}
}
if (code !== 0) {
return
}
let haswallet = false
for (let item of new_array) {
if (item == 'wallet') {
haswallet = true
}
}
let array_str = []
if (uni.getStorageSync('version') == '车队版' && haswallet) {
new_array.push('wallet_personnel_car')
for (let item of new_array) {
if (item != 'wallet') {
array_str.push(item)
}
}
}
if (uni.getStorageSync('version') == '个人版') {
array_str = new_array
}
let str_comeen = getPayMethods(array_str)
let commen_item = []
for (let item of str_comeen) {
if (item.disabled == false) {
commen_item.push(item)
if (item == 'team_wallet') {
handle_getWalletTeam()
}
}
}
state.payMethods = commen_item
// console.log(state.payMethods, 'tate.payMethods')
}
onLoad((options) => {
// if (sheep.$platform.name === 'WechatOfficialAccount'
// && sheep.$platform.os === 'ios'
// && !sheep.$platform.landingPage.includes('pages/pay/index')) {
// location.reload();
// return;
// }
// 获得支付订单信息
let id = options.id;
if (options.orderType) {
state.orderType = options.orderType;
}
setOrder(id);
// 刷新钱包的缓存
handle_getWallet()
handle_getWallet_person_car()
if (uni.getStorageSync("version") == '车队版') {
handle_getWalletTeam()
}
// sheep.$store('user').getWallet();
// sheep.$store('user').getWallet_person_car();
// sheep.$store('user').getWalletTeam();
});
</script>
<style lang="scss" scoped>
.pay-icon {
width: 36rpx;
height: 36rpx;
margin-right: 26rpx;
}
.ss-modal-box {
// max-height: 1000rpx;
.modal-header {
position: relative;
padding: 60rpx 20rpx 40rpx;
.money-text {
color: $red;
font-size: 46rpx;
font-weight: bold;
font-family: OPPOSANS;
&::before {
content: '¥';
font-size: 30rpx;
}
}
.time-text {
font-size: 26rpx;
color: $gray-b;
}
.close-icon {
position: absolute;
top: 10rpx;
right: 20rpx;
font-size: 46rpx;
opacity: 0.2;
}
}
.modal-content {
overflow-y: auto;
.pay-title {
font-size: 26rpx;
font-weight: 500;
color: #333333;
}
.pay-tip {
font-size: 26rpx;
color: #bbbbbb;
}
.pay-item {
height: 86rpx;
}
.disabled-pay-item {
.pay-title {
color: #999999;
}
}
.userInfo-money {
font-size: 26rpx;
color: #bbbbbb;
line-height: normal;
}
}
.save-btn {
width: 710rpx;
height: 80rpx;
border-radius: 40rpx;
background: #03a9f4;
color: $white;
}
.disabled-btn {
background: #e5e5e5;
color: #999999;
}
.past-due-btn {
width: 710rpx;
height: 80rpx;
border-radius: 40rpx;
background-color: #999;
color: #fff;
}
}
</style>