优化会员下单

This commit is contained in:
gyq 2024-05-29 14:01:05 +08:00
parent bf0614e10b
commit 3b0e6513c7
6 changed files with 85 additions and 41 deletions

View File

@ -1,7 +1,7 @@
{
"name": "vite-electron",
"private": true,
"version": "1.2.2",
"version": "1.2.3",
"main": "dist-electron/main.js",
"scripts": {
"dev": "chcp 65001 && vite",

View File

@ -52,11 +52,11 @@ const menus = ref([
path: '/order',
icon: 'Tickets'
},
{
label: '网络',
path: '/internat',
icon: 'Paperclip'
},
// {
// label: '',
// path: '/internat',
// icon: 'Paperclip'
// },
{
label: '会员',
path: '/member',

View File

@ -46,7 +46,7 @@
</div>
</div>
<scanModal ref="scanModalRef" :amount="props.amount" :orderId="props.orderId" :selecttype="props.selecttype"
@success="scanCodeSuccess" />
:payType="payType" @success="scanCodeSuccess" />
</template>
<script setup>
@ -96,6 +96,7 @@ const waitPayMoney = computed(() => {
})
const payActive = ref(0)
const payType = ref('')
const payList = ref([])
const payLoading = ref(false)
@ -107,16 +108,20 @@ function scanCodeSuccess() {
//
function payTypeChange(index, item) {
payActive.value = index
payType.value = item.payType
if (item.payType == 'scanCode') {
scanModalRef.value.show()
}
if (payList.value[payActive.value].payType == 'deposit' && !props.member.id) {
scanModalRef.value.show()
}
}
//
async function confirmOrder() {
if (payLoading.value) return
try {
if (payList.value[payActive.value].payType == 'scanCode') {
if (payList.value[payActive.value].payType == 'scanCode' || payList.value[payActive.value].payType == 'deposit') {
scanModalRef.value.show()
} else {
if (money.value < props.amount) return

View File

@ -54,7 +54,7 @@
import _ from "lodash";
import { ref } from "vue";
import icon from "@/assets/icon_scan.png";
import { scanpay, queryOrder, quickPay, queryQuickPayStatus } from "@/api/pay";
import { scanpay, queryOrder, quickPay, queryQuickPayStatus, accountPay } from "@/api/pay";
import { useUser } from "@/store/user.js";
const store = useUser();
import {
@ -83,6 +83,10 @@ const props = defineProps({
type: Boolean,
default: false,
},
payType: {
type: [Number, String],
default: "",
}
});
const dialogVisible = ref(false);
@ -115,10 +119,19 @@ async function submitHandle() {
payType: "scanCode",
});
} else {
await scanpay({
orderId: props.orderId,
authCode: scanCode.value,
});
if (props.payType == 'scanCode') {
await scanpay({
orderId: props.orderId,
authCode: scanCode.value,
});
}
if (props.payType == 'deposit') {
await accountPay({
orderId: props.orderId,
memberId: '',
memberAccount: scanCode.value
})
}
}
}

View File

@ -4,10 +4,10 @@
* @param {Object} Max
*/
export function RandomNumBoth(Max, Min = 0) {
var Range = Max - Min;
var Rand = Math.random();
var num = Min + Math.round(Rand * Range); //四舍五入
return num;
var Range = Max - Min;
var Rand = Math.random();
var num = Min + Math.round(Rand * Range); //四舍五入
return num;
}
/**
@ -15,23 +15,40 @@ export function RandomNumBoth(Max, Min = 0) {
* @param {Object} obj
*/
export function clearNoNum(obj) {
//如果用户第一位输入的是小数点,则重置输入框内容
if (obj.value != '' && obj.value.substr(0, 1) == '.') {
obj.value = '';
//如果用户第一位输入的是小数点,则重置输入框内容
if (obj.value != "" && obj.value.substr(0, 1) == ".") {
obj.value = "";
}
obj.value = obj.value.replace(/^0*(0\.|[1-9])/, "$1"); //粘贴不生效
obj.value = obj.value.replace(/[^\d.]/g, ""); //清除“数字”和“.”以外的字符
obj.value = obj.value.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
obj.value = obj.value
.replace(".", "$#$")
.replace(/\./g, "")
.replace("$#$", ".");
obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/, "$1$2.$3"); //只能输入两个小数
if (obj.value.indexOf(".") < 0 && obj.value != "") {
//以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
if (obj.value.substr(0, 1) == "0" && obj.value.length == 2) {
obj.value = obj.value.substr(1, obj.value.length);
}
obj.value = obj.value.replace(/^0*(0\.|[1-9])/, '$1'); //粘贴不生效
obj.value = obj.value.replace(/[^\d.]/g, ''); //清除“数字”和“.”以外的字符
obj.value = obj.value.replace(/\.{2,}/g, '.'); //只保留第一个. 清除多余的
obj.value = obj.value
.replace('.', '$#$')
.replace(/\./g, '')
.replace('$#$', '.');
obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'); //只能输入两个小数
if (obj.value.indexOf('.') < 0 && obj.value != '') {
//以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
if (obj.value.substr(0, 1) == '0' && obj.value.length == 2) {
obj.value = obj.value.substr(1, obj.value.length);
}
}
return obj.value;
}
}
return obj.value;
}
/**
* 保留小数n位不进行四舍五入
* num你传递过来的数字,
* decimal你保留的几位,默认保留小数后两位
*/
export function formatDecimal(num, decimal = 2) {
num = num.toString();
const index = num.indexOf(".");
if (index !== -1) {
num = num.substring(0, decimal + index + 1);
} else {
num = num.substring(0);
}
//截取后保留两位小数
return parseFloat(num).toFixed(decimal);
}

View File

@ -6,20 +6,22 @@
<span>{{ dayjs(item.create_time).format("YYYY-MM-DD HH:mm:ss") }}</span>
</div>
<div class="dialog_footer_right">
<span :class="{ active: item.biz_code == 'cashMemberIn' }">
<template v-if="item.biz_code == 'cashMemberIn'">+</template>
<span :class="{ active: checkIn(item.biz_code) }">
<template v-if="checkIn(item.biz_code)">+</template>
<template v-else>-</template>
{{ (Math.floor(item.amount * 100) / 100).toFixed(2) }}
{{ formatDecimal(item.amount) }}
</span>
<span>余额{{ (Math.floor(item.balance * 100) / 100).toFixed(2) }}</span>
<span>余额{{ formatDecimal(item.balance) }}</span>
</div>
</div>
<el-empty description="暂无数据" v-if="!props.flowingwater.list.length" />
</div>
</template>
<script setup>
import { ref } from 'vue'
import { dayjs } from 'element-plus'
import { formatDecimal } from '@/utils/index'
const props = defineProps({
flowingwater: {
@ -27,6 +29,13 @@ const props = defineProps({
default: {}
}
})
// In
function checkIn(str) {
let reg = RegExp(/In/)
return str.match(reg)
}
</script>
<style scoped lang="scss">
@ -43,7 +52,7 @@ const props = defineProps({
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #ccc;
border-bottom: 1px solid #ececec;
padding-bottom: 6px;
.dialog_footer_left {