优化会员下单

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", "name": "vite-electron",
"private": true, "private": true,
"version": "1.2.2", "version": "1.2.3",
"main": "dist-electron/main.js", "main": "dist-electron/main.js",
"scripts": { "scripts": {
"dev": "chcp 65001 && vite", "dev": "chcp 65001 && vite",

View File

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

View File

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

View File

@ -54,7 +54,7 @@
import _ from "lodash"; import _ from "lodash";
import { ref } from "vue"; import { ref } from "vue";
import icon from "@/assets/icon_scan.png"; 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"; import { useUser } from "@/store/user.js";
const store = useUser(); const store = useUser();
import { import {
@ -83,6 +83,10 @@ const props = defineProps({
type: Boolean, type: Boolean,
default: false, default: false,
}, },
payType: {
type: [Number, String],
default: "",
}
}); });
const dialogVisible = ref(false); const dialogVisible = ref(false);
@ -115,10 +119,19 @@ async function submitHandle() {
payType: "scanCode", payType: "scanCode",
}); });
} else { } else {
await scanpay({ if (props.payType == 'scanCode') {
orderId: props.orderId, await scanpay({
authCode: scanCode.value, 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 * @param {Object} Max
*/ */
export function RandomNumBoth(Max, Min = 0) { export function RandomNumBoth(Max, Min = 0) {
var Range = Max - Min; var Range = Max - Min;
var Rand = Math.random(); var Rand = Math.random();
var num = Min + Math.round(Rand * Range); //四舍五入 var num = Min + Math.round(Rand * Range); //四舍五入
return num; return num;
} }
/** /**
@ -15,23 +15,40 @@ export function RandomNumBoth(Max, Min = 0) {
* @param {Object} obj * @param {Object} obj
*/ */
export function clearNoNum(obj) { export function clearNoNum(obj) {
//如果用户第一位输入的是小数点,则重置输入框内容 //如果用户第一位输入的是小数点,则重置输入框内容
if (obj.value != '' && obj.value.substr(0, 1) == '.') { if (obj.value != "" && obj.value.substr(0, 1) == ".") {
obj.value = ''; 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, ''); //清除“数字”和“.”以外的字符 return obj.value;
obj.value = obj.value.replace(/\.{2,}/g, '.'); //只保留第一个. 清除多余的 }
obj.value = obj.value
.replace('.', '$#$') /**
.replace(/\./g, '') * 保留小数n位不进行四舍五入
.replace('$#$', '.'); * num你传递过来的数字,
obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'); //只能输入两个小数 * decimal你保留的几位,默认保留小数后两位
if (obj.value.indexOf('.') < 0 && obj.value != '') { */
//以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额 export function formatDecimal(num, decimal = 2) {
if (obj.value.substr(0, 1) == '0' && obj.value.length == 2) { num = num.toString();
obj.value = obj.value.substr(1, obj.value.length); const index = num.indexOf(".");
} if (index !== -1) {
} num = num.substring(0, decimal + index + 1);
return obj.value; } 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> <span>{{ dayjs(item.create_time).format("YYYY-MM-DD HH:mm:ss") }}</span>
</div> </div>
<div class="dialog_footer_right"> <div class="dialog_footer_right">
<span :class="{ active: item.biz_code == 'cashMemberIn' }"> <span :class="{ active: checkIn(item.biz_code) }">
<template v-if="item.biz_code == 'cashMemberIn'">+</template> <template v-if="checkIn(item.biz_code)">+</template>
<template v-else>-</template> <template v-else>-</template>
{{ (Math.floor(item.amount * 100) / 100).toFixed(2) }} {{ formatDecimal(item.amount) }}
</span> </span>
<span>余额{{ (Math.floor(item.balance * 100) / 100).toFixed(2) }}</span> <span>余额{{ formatDecimal(item.balance) }}</span>
</div> </div>
</div> </div>
<el-empty description="暂无数据" v-if="!props.flowingwater.list.length" />
</div> </div>
</template> </template>
<script setup> <script setup>
import { ref } from 'vue' import { ref } from 'vue'
import { dayjs } from 'element-plus' import { dayjs } from 'element-plus'
import { formatDecimal } from '@/utils/index'
const props = defineProps({ const props = defineProps({
flowingwater: { flowingwater: {
@ -27,6 +29,13 @@ const props = defineProps({
default: {} default: {}
} }
}) })
// In
function checkIn(str) {
let reg = RegExp(/In/)
return str.match(reg)
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@ -43,7 +52,7 @@ const props = defineProps({
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
border-bottom: 1px solid #ccc; border-bottom: 1px solid #ececec;
padding-bottom: 6px; padding-bottom: 6px;
.dialog_footer_left { .dialog_footer_left {