Files
cashier_app/pagesOrder/pay-order/pay-order.vue
2025-03-10 17:26:39 +08:00

1137 lines
28 KiB
Vue
Raw 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="bg-gray min-page u-p-30 u-font-28">
<view class="u-p-t-60 u-p-b-60 u-text-center">
<template v-if="originPrice!=payPrice">
<view class="u-font-32 ">
<text class="price-fuhao"></text>
<text class="font-bold price">{{payPrice}}</text>
</view>
<view class="u-m-t-10 color-999 old-price">
<text class=""></text>
<text class=" ">{{originPrice}}</text>
</view>
<view class="u-m-t-10 u-flex u-row-center color-main">
<view @click="discountShow">修改</view>
</view>
</template>
<template v-else>
<view class="u-font-32 ">
<text class="price-fuhao"></text>
<text class="font-bold price">{{originPrice}}</text>
</view>
<view class="u-m-t-10 u-flex u-row-center color-main">
<view @click="discountShow">修改</view>
</view>
</template>
</view>
<view class="content bg-fff border-r-12">
<view class="u-p-l-26 u-p-r-26 card top u-m-t-30">
<view class="border-bottom-dashed u-p-b-30 u-p-t-30" v-if="vipDiscount*1>0">
<view class="u-flex u-p-l-24 u-p-r-24 u-row-between ">
<view>会员优惠</view>
<view class="color-red">
-{{vipDiscount}}
</view>
</view>
</view>
<view class="border-bottom-dashed u-p-b-30 u-p-t-30">
<view class="u-flex u-p-l-24 u-p-r-24 u-row-between " @click="toQuan">
<view>优惠券</view>
<view class="color-999 u-flex u-col-center">
<text>选择优惠券</text>
<view class="u-flex u-col-center">
<uni-icons type="right" color="#999"></uni-icons>
</view>
</view>
</view>
<view class="u-m-t-24" v-if="pays.quan.length>0">
<view class="u-flex u-p-l-24 u-p-r-24 u-m-t-24 u-row-between "
v-for="(item,index) in pays.quan" :key="index">
<view class="u-flex">
<view class="hui"></view>
<view class="u-m-l-18">{{item.name}}</view>
<view class="u-m-l-18 color-999">x{{item.number}}</view>
</view>
<view class="u-flex">
<view class="color-red">
-{{item.discountAmount}}
</view>
<view class="u-m-l-12" @click="delQuan(index)">
<up-icon :size="16" name="minus-circle-fill" color="rgb(255, 0, 0)"></up-icon>
</view>
</view>
</view>
</view>
</view>
<view class="border-bottom u-p-b-30" v-if="discount.value||accountPoints.sel">
<view class="u-flex u-p-l-24 u-p-r-24 u-row-between u-p-t-30 " v-if="discount.value">
<view>服务员改价</view>
<view class=" u-flex u-col-center">
<text style="color: rgb(255, 95, 46);">-{{to2(discount.value)}}</text>
</view>
</view>
<view class="u-flex u-p-l-24 u-p-r-24 u-row-between u-p-t-30 "
v-if="accountPoints.price&&accountPoints.sel">
<view>积分抵扣</view>
<view class=" u-flex u-col-center">
<text style="color: rgb(255, 95, 46);">-{{to2(accountPoints.price)}}</text>
</view>
</view>
</view>
</view>
<view class="bg-fff border-r-12 ">
<view class="u-p-t-30 u-p-l-50 u-p-r-50 card bottom">
<my-tabs :list="pays.list" v-model="pays.selIndex"></my-tabs>
<template v-if="pays.selIndex==0">
<view class="list">
<view class="item" @click="changePayType(index,item)" :class="{disabled:item.disabled}"
v-for="(item,index) in pays.payTypes.list" :key="index">
<view class="u-flex u-row-between u-p-t-30 u-p-b-30 border-bottom">
<view class="u-flex">
<image class="icon" :src="item.icon" mode=""></image>
<text class="u-m-l-10 no-wrap">{{item.payName}}</text>
</view>
<view class="u-flex color-999 u-font-24">
<view class="u-m-r-20" v-if="item.payType=='virtual'&&pageData.buyer.id"
@click.stop="chooseBuyer">
<view>
<text>挂账人</text>
<text class="u-m-r-4">{{pageData.buyer.debtor}}</text>
</view>
<view>
<text>挂账额度</text>
<text>{{pageData.buyer.creditAmount||'0'}}</text>
</view>
</view>
<view class="u-m-r-20" v-if="item.payType=='member-account'&&pageData.user.id"
@click.stop="chooseUser">
<view>
<text>会员</text>
<text class="u-m-r-4">{{pageData.user.phone||pageData.user.nickName}}</text>
</view>
<view>
<text>余额</text>
<text>{{pageData.user.amount||'0'}}</text>
</view>
<!-- <view>
<text>积分</text>
<text>{{user.accountPoints||'0'}}</text>
</view> -->
</view>
<view :class="{op3:item.disabled}">
<my-radio @click="changePayType(index,item)"
:modelValue="index==pays.payTypes.selIndex">
</my-radio>
</view>
</view>
</view>
</view>
</view>
<view class="border-bottom-dashed "></view>
<view class="u-flex u-row-between u-p-t-24" v-if="pageData.user.id" @click="changeAccountPoints">
<view class="u-flex ">
<view class="">积分抵扣</view>
<view class="color-999 u-m-l-10">
<text>(</text>
<text>{{pageData.user.accountPoints||'0'}}</text>
<text>)</text>
</view>
<!-- <view><text class="color-red font-bold">{{accountPoints.price}}</text></view> -->
</view>
<view class="u-flex">
<view class="u-flex">
<view><text>{{accountPoints.num}}</text></view>
<view v-if="accountPoints.calcRes.usable" @click.stop="refPointsOpen">
<up-icon name="edit-pen" size="16" color="#999"></up-icon>
</view>
</view>
<view class="u-m-l-32 u-relative" v-if="accountPoints.calcRes.usable">
<view class="u-absolute position-all"></view>
<my-radio :modelValue="accountPoints.sel">
</my-radio>
</view>
</view>
</view>
<view class="color-999 u-font-24 u-m-t-16">
<view class="" v-if="accountPoints.calcRes.unusableReason">
<text class="color-red">*</text>
<text>{{accountPoints.calcRes.unusableReason}}</text>
</view>
<view class="" v-if="accountPoints.calcRes.usable">
<text class="color-red">*</text>
<text class=""
v-if="accountPoints.calcRes.equivalentPoints">100积分等于{{to2(accountPoints.calcRes.equivalentPoints*100)}},</text>
<text>
最大抵扣积分{{accountPoints.calcRes.maxUsablePoints}}
</text>
<text>,
最小抵扣积分0
</text>
</view>
</view>
<view class="u-m-t-60 u-p-b-30">
<my-button @click="payOrderClick">确认付款</my-button>
</view>
</template>
<template v-if="pays.selIndex==1">
<view class="u-font-32 u-m-t-40 u-text-center">请让顾客使用微信/支付宝扫码</view>
<view class="u-flex u-row-center u-m-t-40">
<up-qrcode cid="code" :size="140" :val="payCodeUrl"></up-qrcode>
</view>
</template>
</view>
<!-- 二维码支付扫码 -->
<template v-if="pays.selIndex==1">
<view class="card border-bottom top u-m-t-32">
</view>
<view class="bg-fff card bottom border-r-12 u-p-32">
<view class="font-bold u-font-32 u-text-center">
{{payPrice}}</view>
<view class="u-flex u-row-center u-m-t-24">
<template v-if="order.status=='unpaid'">
<up-loading-icon size="14" text="等待支付"></up-loading-icon>
</template>
<template v-if="order.status=='done'">
<view class="u-flex pay-success">
<up-icon color="#5CBB6F" name="checkmark-circle-fill"></up-icon>
<view class="u-m-l-6">支付成功</view>
</view>
</template>
</view>
</view>
</template>
</view>
</view>
<edit-discount :nowPrice="order.orderAmount-productCouponDiscountAmount-fullCouponDiscountAmount"
@confirm="editDiscountConfirm" title="优惠金额" :ref="setModel" name="editMoney"
:price="order.orderAmount-productCouponDiscountAmount" :discount="discount.discount"></edit-discount>
<up-modal :title="modal.title" :content="modal.content" :show="modal.show" :confirmText="modal.confirmText"
:cancelText="modal.cancelText" showCancelButton closeOnClickOverlay @confirm="confirmModelConfirm"
@cancel="confirmModelCancel" @close="confirmModelCancel" width="300px" />
<edit-accountPoints @confirm="pointsConfirm" :price="accountPoints.num" :accountPoints="accountPoints"
ref="refPoints"></edit-accountPoints>
</view>
</template>
<script setup>
import { reactive, onMounted, watch, ref, onBeforeUnmount, computed } from 'vue';
import { onLoad, onBackPress, onShow } from '@dcloudio/uni-app'
import go from '@/commons/utils/go.js'
import { hasPermission } from '@/commons/utils/hasPermission.js'
import infoBox from '@/commons/utils/infoBox.js'
import editDiscount from '@/components/my-components/edit-discount.vue'
import editAccountPoints from './components/edit-accountPoints.vue'
import {
returnGoodsPayPriceMap,
returnProCoupStartIndex,
returnProductCoupAllPrice,
returnProductCanUseNum
} from '../quan_util.js'
import { getCouponList } from '@/api/coupon.js'
import { getHistoryOrder } from '@/api/order.js'
import { getPayTypeList } from '@/api/payType.js'
import { scanPay,microPay,cashPay,vipPay,creditPay,getOrderPayUrl } from '@/api/pay.js'
import { shopUserDetail } from '@/api/shopUser.js'
import { calcUsablePoints,calcDeductionAmount,payedDeductPoints,consumeAwardPoints } from '@/api/points.js'
const modal = reactive({
title: '提示',
cancelText: '取消',
confirmText: '确认',
content: '',
key: 'cash',
show: false,
data: ''
})
let option = {
isNowPay: false
}
const pageData = reactive({
goodsList: [], //菜品列表
user: { //会员信息
userId: null,
amount: 0
},
buyer: {}
})
const order = reactive({
orderAmount: 0
})
//商品数量从0到n每一个对应的价格
let $goodsPayPriceMap = {}
const pays = reactive({
list: ['扫码收款', '二维码收款'],
selIndex: 0,
payTypes: {
list: [],
selIndex: 0
},
quan: [],
seatNum: 0
})
//打折相关数据
const discount = reactive({
discount: 100,
currentPrice: 0,
value: 0
})
const accountPoints = reactive({
sel: false,
num: 0,
calcRes: {
usable: false,
unusableReason: '',
minDeductionPoints: 0,
maxUsablePoints: 0
},
price: 0
})
let timer = null
const refPoints = ref(null)
let payCodeUrl = ref('') //收款二维码地址
onShow(() => {
watchChooseuser()
watchChoosebuyer()
watchChooseQuan()
})
onLoad(async (opt) => {
console.log(opt);
option = opt
Object.assign(order, opt)
getPayType()
init()
})
onBeforeUnmount(() => {
clearInterval(timer)
timer = null
})
onBackPress(() => {
uni.$emit('orderDetail:update')
console.log('onBackPress');
})
/**
* 初始化
*/
async function init() {
// 获取订单详情
const orderRes = await getHistoryOrder({orderId:order.orderId})
Object.assign(order, orderRes)
$goodsPayPriceMap = returnGoodsPayPriceMap(order.detailMap)
pageData.goodsList = [];
Object.values(orderRes.detailMap).forEach(item=>{
pageData.goodsList = [...pageData.goodsList,...item]
})
const hasSelQuan = orderRes.couponInfoList ? JSON.parse(orderRes.couponInfoList) : {
fullReductionCoupon: [],
productCoupon: []
};
const fullReductionCoupon = hasSelQuan.fullReductionCoupon.filter(v => v.type == 1)
const productCoupon = hasSelQuan.productCoupon.filter(v => v.type == 2)
setQuan([...fullReductionCoupon, ...productCoupon])
// 获取用户信息
console.log("pageData.user===",pageData.user)
if (order.userId||pageData.user.userId) {
shopUserDetail({
userId: order.userId || pageData.user.userId
}).then(res => {
pageData.user = res
getCalcUsablePoints()
if (orderRes.pointsNum) {
accountPoints.sel = true
}
})
}
console.log("order==",order)
pageData.seatNum = order.seatNum;
}
const coupAllPrice = computed(() => {
const n = pays.quan.reduce((prve, cur) => {
return prve + cur.discountAmount * 1
}, 0)
return n
})
/**
* 菜品打包费
*/
const packAmount = computed(() => {
if(pageData.goodsList){
let price = pageData.goodsList.filter(v => v.packNumber > 0 && v.status !== "return").reduce((a, b) => {
return a + (b.packNumber * b.packAmount)
}, 0)
return price
}
})
/**
* 订单金额
*/
const originPrice = computed(() => {
console.log("order===",order)
if(pageData.goodsList){
let goodsPrice = pageData.goodsList.filter(v => v.price != 0 && v.status !== "return").reduce((a, b) => {
return a + (b.num * b.price)
}, 0)
return (goodsPrice + (pageData.seatNum||0) + packAmount.value).toFixed(2)
}
})
/**
* 会员优惠金额
*/
const vipDiscount = computed(() => {
if (!pageData.user.isVip) {
return 0
}
if(pageData.goodsList){
let price = pageData.goodsList.filter(v => v.price != 0 && v.discountSaleAmount <= 0 && v.status !== "return" && v.memberPrice && (v.memberPrice != v.price)).reduce((a, b) => {
return a + (b.num * (b.price - b.memberPrice))
}, 0)
return price.toFixed(2)
}
})
/**
* 菜品折扣金额
*/
const discountSaleAmount = computed(() => {
if(pageData.goodsList){
let price = pageData.goodsList.filter(v => v.discountSaleAmount > 0 && v.status !== "return").reduce((a, b) => {
return a + ((b.num * b.price) - (b.num * b.discountSaleAmount))
}, 0)
return price
}
})
/**
* 优惠券金额
*/
const fullCouponDiscountAmount = computed(() => {
return pays.quan.filter(v => v.type == 1).reduce((prve, cur) => {
console.log("优惠券金额",prve + cur.discountAmount * 1)
return prve + cur.discountAmount * 1
}, 0)
})
/**
* 商品券金额
*/
const productCouponDiscountAmount = computed(() => {
return pays.quan.filter(v => v.type == 2).reduce((prve, cur) => {
return prve + cur.discountAmount * 1
}, 0)
})
/**
* 积分计算
*/
const pointCanDicountPrice = computed(() => {
let total = (originPrice.value || 0) - productCouponDiscountAmount.value - discount.value -
fullCouponDiscountAmount.value
return (total < 0 ? 0 : total).toFixed(2)
})
/**
* 支付金额
*/
const payPrice = computed(() => {
console.log("originPrice===",originPrice.value)
console.log("vipDiscount===",vipDiscount.value)
console.log("discountSaleAmount===",discountSaleAmount.value)
console.log("pointCanDicountPrice===",pointCanDicountPrice.value)
console.log("productCouponDiscountAmount===",productCouponDiscountAmount.value)
console.log("discount===",discount.value)
console.log("fullCouponDiscountAmount===",fullCouponDiscountAmount.value)
console.log("accountPoints===",accountPoints)
let total = (originPrice.value*1) - discountSaleAmount.value - (vipDiscount.value*1) - productCouponDiscountAmount.value - discount
.value - fullCouponDiscountAmount.value - accountPoints.price * (accountPoints.sel ? 1 : 0)
console.log("payPrice===",total)
return (total < 0 ? 0 : total).toFixed(2)
})
/**
* 积分使用前金额
*/
const orderAmount = computed(() => {
let total = (originPrice.value*1) - discountSaleAmount.value - (vipDiscount.value*1) - productCouponDiscountAmount.value - discount
.value - fullCouponDiscountAmount.value
console.log(total)
return (total < 0 ? 0 : total).toFixed(2)
})
watch(() => accountPoints.sel, (newval) => {
if (newval) {
calcDeDuctionPoints()
}
})
watch(() => pointCanDicountPrice.value, (newval) => {
if( pageData.user.id ){
getCalcUsablePoints()
}
})
watch(() => payPrice.value, (newval) => {
getPayUrl()
if (newval <= 0) {
const arr = ['cash', 'member-account']
pays.payTypes.list.map(v => {
if (arr.includes(v.payType)) {
v.disabled = false
} else {
v.disabled = true
}
})
const index = pays.payTypes.list.findIndex(v => !v.disabled)
pays.payTypes.selIndex = index
} else {
pays.payTypes.list.map(v => {
v.disabled = false
})
}
})
watch(() => accountPoints.num, (newval) => {
if (!newval) {
accountPoints.price = 0
return
}
calcDeDuctionPoints()
})
watch(() => pays.selIndex, (newval) => {
clearInterval(timer)
if (newval) {
timer = setInterval(() => {
getHistoryOrder({orderId:order.orderId}).then(res => {
order.status = res.status
if (res.status == 'done') {
paySuccess()
}
})
}, 2000)
}
})
function getPayParam () {
return {
shopId: uni.getStorageSync("shopInfo").id,
orderId: order.id,
originAmount: originPrice.value, //订单原金额(包含打包费+餐位费) 不含折扣价格
orderAmount: payPrice.value, // 订单金额
seatNum: pageData.seatNum, // 用餐人数
discountAmount: discount.value, // 手动优惠金额
fullCouponDiscountAmount: fullCouponDiscountAmount.value, // 满减金额
vipPrice: vipDiscount.value != 0 ? 1: 0, // 是否使用会员价
pointsDiscountAmount: accountPoints.sel ? accountPoints.price : 0,
pointsNum: accountPoints.sel ? accountPoints.num : 0,
}
}
/**
* 获取店铺订单支付URL
*/
function getPayUrl() {
console.log(discount)
console.log(getPayParam())
let par = getPayParam()
let params = {
shopId: uni.getStorageSync("shopInfo").id,
...par
}
if( order.userId||pageData.user.userId ){
params.userId = order.userId||pageData.user.userId
}
getOrderPayUrl(params).then(res => {
payCodeUrl.value = res
})
}
/**
* 获取支付方式
*/
async function getPayType() {
const payTypeList = await getPayTypeList()
pays.payTypes.list = [];
payTypeList.map(v => {
if( v.payType != 'bank'){
pays.payTypes.list.push({
...v,
disabled: false
})
}
})
}
/**
* 设置优惠券/商品券
* @param {Object} arr
*/
function setQuan(arr) {
console.log("choose-quan===",arr)
discount.discount = 100
discount.value = 0
discount.currentPrice = order.orderAmount
const manjianCoup = arr.filter(v => v.type == 1 && v.number >= 1)
let productCoup = arr.filter(v => v.type == 2)
//商品券分组
let coupMap = {}
for (let i in productCoup) {
const coup = productCoup[i]
if (coupMap.hasOwnProperty(coup.proId)) {
coupMap[coup.proId].push(coup)
} else {
coupMap[coup.proId] = [coup]
}
}
for (let key in coupMap) {
const arr = coupMap[key]
for (let i in arr) {
const coup = arr[i]
const proCoupStartIndex = returnProCoupStartIndex(arr, i)
console.log(proCoupStartIndex);
const coupUseNum = returnProductCanUseNum($goodsPayPriceMap[coup.proId], proCoupStartIndex,
coup.number)
const number = Math.min($goodsPayPriceMap[coup.proId].length, coupUseNum)
coup.number = number
console.log($goodsPayPriceMap[coup.proId]);
const findGoods = order.detailList.find(v => v.productId == coup.proId)
const isMember = findGoods.isMember
coup.discountAmount = returnProductCoupAllPrice($goodsPayPriceMap[coup.proId],
proCoupStartIndex, number, isMember).toFixed(2)
}
}
productCoup = productCoup.filter(v => v.number >= 1)
pays.quan = [...manjianCoup, ...productCoup]
}
/**
* 删除优惠券
* @param {Object} i
*/
function delQuan(i) {
pays.quan.splice(i, 1)
}
/**
* 积分选择
*/
function refPointsOpen() {
if (!accountPoints.calcRes.usable && accountPoints.sel) {
return
}
refPoints.value.open()
}
/**
* 积分确认
* @param {Object} e
*/
function pointsConfirm(e) {
accountPoints.num = e
}
/**
* 获取积分信息
* @param {Object} orderAmount
*/
async function getCalcUsablePoints(orderAmount) {
if (!order.userId&&!pageData.user.userId) {
return
}
console.log("calcUsablePoints",pageData.user)
const res = await calcUsablePoints({
userId: pageData.user.id,
orderAmount: orderAmount ? orderAmount : payPrice.value
})
accountPoints.calcRes = res
accountPoints.num = res.maxUsablePoints
return res;
}
async function calcDeDuctionPoints() {
if (accountPoints.num <= 0) {
accountPoints.price = 0
return ''
}
const res = await calcDeductionAmount({
userId: pageData.user.id,
orderAmount: orderAmount.value,
points: accountPoints.num
})
if (res) {
accountPoints.price = res
}
return res
}
function changeAccountPoints() {
if (!accountPoints.calcRes.usable) {
return
}
accountPoints.sel = !accountPoints.sel
if (!accountPoints.sel) {
accountPoints.num = 0
}
}
/**
* 选择优惠券
*/
function toQuan() {
console.log(order);
if (!order.userId&&!pageData.user.id) {
return infoBox.showToast('请先选择会员', 0.5).then(() => {
chooseUser()
})
}
go.to('PAGES_ORDER_QUAN', {
orderId: order.id,
shopUserId: pageData.user.id,
orderPrice: (payPrice.value * 1 + coupAllPrice.value * 1).toFixed(2)
})
}
/**
* 判断是否可以修改金额
*/
async function discountShow() {
const bol = await hasPermission('yun_xu_da_zhe')
if (bol) {
showModel('editMoney', true)
}
}
/**
* 积分金额处理
* @param {Object} n
*/
function to2(n) {
if (!n) {
return ''
}
return Number(n).toFixed(2)
}
/**
* 优惠券选择
*/
function watchChooseQuan() {
uni.$off('choose-quan')
uni.$on('choose-quan', (arr) => {
setQuan(arr)
})
}
/**
* 选择用户
*/
function chooseUser() {
go.to('PAGES_CHOOSE_USER')
}
/**
* 更新选择用户
*/
function watchChooseuser() {
uni.$off('choose-user')
uni.$on('choose-user', (data) => {
console.log(data);
pageData.user = data
pays.quan = []
init()
})
}
/**
* 选择挂账人
*/
function chooseBuyer() {
go.to('PAGES_CHOOSE_BUYER')
}
/**
* 更新选择挂账人
*/
function watchChoosebuyer() {
uni.$off('choose-buyer')
uni.$on('choose-buyer', (data) => {
console.log(data);
pageData.buyer = data
})
}
/**
* 修改价格确认
* @param {Object} form
*/
function editDiscountConfirm(form) {
console.log(form);
accountPoints.sel = false
Object.assign(discount, {
...form,
value: form.price - form.currentPrice
})
console.log(discount.discount);
const fullCoupon = pays.quan.find(v => v.type == 1)
if (fullCoupon && form.currentPrice < fullCoupon.fullAmount) {
modal.content = '改价后价格不满足满减券最低满减需求' + fullCoupon.fullAmount + '元'
modal.key = 'fullCoupon'
modal.show = true
modal.cancelText = '取消改价'
modal.confirmText = '删除满减券'
}
getPayUrl()
}
/**
* 支付方式选择
* @param {Object} i
* @param {Object} item
*/
function changePayType(i, item) {
if (item.disabled) {
return infoBox.showToast(item.payName + '不可用')
}
pays.payTypes.selIndex = i
console.log(item.payType)
console.log(pageData.user.id)
if (item.payType == 'member-account' && !pageData.user.id) {
chooseUser()
}
if (item.payType == 'virtual' && !pageData.buyer.id) {
chooseBuyer()
}
}
const models = new Map();
function setModel(el) {
if (el && el.$attrs['name']) {
models.set(el.$attrs['name'], el);
}
}
function showModel(key) {
const model = models.get(key)
model && model.open()
}
let payStatus = '';
/**
* 确认付款
*/
const tipsMap = {
paying: '支付中',
success: '已支付成功'
}
function payOrderClick() {
const payType = pays.payTypes.list[pays.payTypes.selIndex].payType
console.log(payType);
if (payType == 'scanCode' || payType == 'deposit') {
return saomaPay(payType)
}
if (payType == 'cash' && payPrice.value * 1 > 0) {
return cashConfirmShow()
}
if (payType == 'virtual') {
// return cashConfirmShow()
}
if (payType == 'member-account' && pageData.user.amount * 1 < payPrice.value * 1) {
infoBox.showToast('余额不足')
return
}
if (payStatus) {
return infoBox.showToast(tipsMap[payStatus])
}
try {
pay()
} catch (e) {
//TODO handle the exception
payStatus = ''
}
}
/**
* 支付调佣
* @param {Object} par
*/
async function pay(par) {
const payType = pays.payTypes.list[pays.payTypes.selIndex].payType
let pars = getPayParam()
console.log(payType)
console.log(discount)
payStatus = 'paying'
let params = {
shopId: uni.getStorageSync("shopInfo").id,
checkOrderPay: {
couponList: pays.quan.map(v => {
return {
userCouponId: v.id,
num: v.number
}
}),
...pars
},
...par
}
if( order.userId||pageData.user.userId ){
params.checkOrderPay.userId = order.userId||pageData.user.userId
}
if( payType == 'virtual' ){
params.creditBuyerId = pageData.buyer.id
}
console.log(params)
try {
if (payType == 'scanCode') {
await microPay(params)
}
if (payType == 'cash') {
await cashPay(params)
}
if (payType == 'virtual') {
await creditPay(params)
}
if( payType == 'member-account' || payType == 'deposit' ) {
if (pageData.user.amount * 1 >= payPrice.value * 1) {
params.payType = 'userPay'
params.shopUserId = pageData.user.id
await vipPay(params)
} else {
infoBox.showToast('余额不足')
return
}
}
} catch (error) {
payStatus = '';
return false;
}
paySuccess()
}
/**
* 支付成功回调
*/
function paySuccess() {
infoBox.showToast('支付成功')
payStatus = 'success'
setTimeout(() => {
// uni.$emit('orderDetail:update')
uni.$emit('get:table')
uni.$emit('update:orderDetail')
uni.navigateBack({
delta: 1
})
}, 500)
}
/**
* 弹窗关闭
*/
function confirmModelCancel() {
if (modal.key == 'fullCoupon') {
// 取消改价
discount.discount = 100
discount.value = 0
}
modal.show = false
modal.key = ''
modal.data = ''
}
/**
* 弹窗确认
*/
async function confirmModelConfirm() {
if (modal.key == 'cash') {
await pay()
confirmModelCancel()
return
}
if (modal.key == 'fullCoupon') {
//删除满减券
const index = pays.quan.findIndex(v => v.type == 1)
pays.quan.splice(index, 1)
return
}
}
/**
* 扫码/储值卡支付
*/
function saomaPay() {
const item = pays.payTypes.list[pays.payTypes.selIndex]
uni.scanCode({
onlyFromCamera: true,
success: function(res) {
console.log('条码类型:' + res.scanType);
console.log('条码内容:' + res.result);
pay({
authCode: res.result
})
}
});
}
/**
* 现金支付唤起
*/
function cashConfirmShow() {
modal.content = '是否确认已现金收款' + payPrice.value
modal.key = 'cash'
modal.show = true
}
</script>
<style lang="scss" scoped>
$quan-color: #318AFE;
.op3 {
opacity: .3;
}
.hui {
// background-color: $quan-color;
background-image: linear-gradient(to right bottom, rgb(254, 103, 4), rgb(241, 50, 42));
padding: 4rpx 10rpx;
border-radius: 10rpx;
font-size: 24rpx;
color: #fff;
}
.box-shadow {
box-shadow: 0 0 5px #E5E5E5;
}
.pay-success {
color: #5CBB6F;
}
.icon {
width: 40rpx;
height: 40rpx;
}
.border-bottom-dashed {
border-bottom: 1px dashed #bbb;
}
.border-bottom {
border-color: rgb(240, 240, 240);
}
.list {
.item {
&.disabled {
color: #999;
}
}
.item:last-child {
.border-bottom {
border-bottom: none;
}
}
}
.old-price {
text-decoration: line-through;
}
.price-fuhao {
font-size: 24px;
}
.price {
font-size: 32px;
}
$dotSize: 20rpx;
$position: calc($dotSize / (-2));
.card {
position: relative;
&::after,
&:before {
content: '';
display: block;
position: absolute;
background-color: #F9F9F9;
width: $dotSize;
height: $dotSize;
border-radius: 50%;
}
&.top {
&::after {
right: $position;
bottom: $position;
}
&:before {
left: $position;
bottom: $position;
}
}
&.bottom {
&::after {
right: $position;
top: $position;
}
&:before {
left: $position;
top: $position;
}
}
}
</style>