零售收银终端CheckoutPad_ox_as
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.
 
 
 
 
 
 

284 lines
7.9 KiB

<template>
<view class="pay-page">
<keyboard-listener @keyup="onKeyup" @keydown="onKeydown" ></keyboard-listener>
<view v-if="paySuccessStatus==0">
<view-header class="mheader" :backgroundCustom="('none')" :needBorder="(false)"
@closeUse=""></view-header>
<paying v-if="true" @clickVipCard="handle_clickVipCard"></paying>
</view>
<pay-success v-else></pay-success>
<!-- 手机尾号后4位数验证 -->
<input-box-end-phone v-if="showEndPhoneBox" :maskHeight="screenHeight" :maxInput="4"
@showIt="handle_closeEndPhoneBox" @clickCommit="handle_clickCommit_end_phone"></input-box-end-phone>
<!-- 条形码输入框 -->
<!-- <input-qr-box v-if="false" :maskHeight="screenHeight" :maxInput="11"
@showIt="handle_closeQRInputBox" @clickCommit="handle_clickCommit_qr"></input-qr-box> -->
</view>
</template>
<script>
import util from "@/utils/util.js"
import {
API
} from "@/utils/api";
import {
ox
} from "@/utils/server";
import dictKeyboard from '@/utils/dictOfKeyboard'
import viewHeader from '@/components/index/view_header.nvue';//头部
import inputQrBox from '@/components/index/keyboard/input_box_QR.vue'; //条形码
import inputBoxEndPhone from '@/components/index/keyboard/input_box_end_phone.vue';//手机号尾号
import paying from '@/components/pay/paying.vue';//支付中
import paySuccess from '@/components/pay/success.vue';//支付成功
import keyboardListener from '@/components/index/keyboard/keyboard_listener.vue';//键盘监听
export default {
components: {
'view-header': viewHeader,
'input-box-end-phone': inputBoxEndPhone,
'paying': paying,
'pay-success': paySuccess,
'input-qr-box': inputQrBox,
'keyboard-listener': keyboardListener,
},
watch:{
},
data() {
return {
showPageStandby: false,
showEndPhoneBox:false,
screenHeight: '1000',
footerHeight: '',
paySuccessStatus:0,
decryptList: [],
strResult: "",
dataQuery:""
}
},
async onLoad(res) {
console.log("pay onload:",res)
this.setPayData(res)
},
async onReady() {
await this.setPageHeight()
},
methods: {
setPayData(res){
console.log("setPayData:",res)
res = JSON.parse(res.query)
console.log("setPayData1:",res)
let _data = {
goods_data:res.shopList,
amount:res.shopListTotalPrice,
}
console.log("setPayData2:",_data)
this.dataQuery = _data
},
// 字符数字10,11,12,13,14,15开头是WECHAT_MICROPAY,28是ALI_BARCODEPAY
getPayType(code){
let pay_type = ""
if(code.indexOf("10") == 0 || code.indexOf("11") == 0 || code.indexOf("12") == 0 || code.indexOf("13") == 0 || code.indexOf("14") == 0 || code.indexOf("15") == 0){
pay_type = "WECHAT_MICROPAY"
}else if(code.indexOf("28") == 0){
pay_type = "ALI_BARCODEPAY"
}else{
pay_type = null
}
return pay_type
},
async acceptScanCode(code) {
console.log("acceptScanCode:",code)
// util.showNone("支付中...")
util.showLoad("交易处理中...")
let pay_code = code
let pay_type = this.getPayType(pay_code)
if(pay_type == null){
util.showNone("支付类型未知,请重试!")
return
}
await this.makeOrder((makeInfo)=>{
console.log("makeInfo-result",makeInfo)
}).then((orderInfo)=>{
console.log("orderInfo-result",orderInfo)
return this.payOrder({
"order_no":orderInfo.order_no,
pay_code,pay_type
})
}).then((payInfo)=>{
console.log("payInfo-result:",payInfo)
return this.checkOrder(payInfo)
}).then((checkInfo)=>{
console.log("最终checkInfo:",checkInfo)
let {payRes,checkRes} = checkInfo
// util.showNone(payRes.res.respMsg+"-"+payRes.res.respCode)
if(checkRes.pay_order.status == "1"){
util.showNone(checkRes.res.respMsg+"-"+checkRes.res.respCode)
this.paySuccessStatus = 1
}else{
util.showNone(checkRes.res.respMsg+"-"+checkRes.res.respCode)
}
}).finally(()=>{
util.hideLoad()
})
},
async makeOrder(){
let {store_id,brand_id,token} = getApp().globalData.accountInfo
let {goods_data,amount} = this.dataQuery
let urlParams = {
store_id,brand_id,token,amount,
"goods_data": goods_data,
"pay_type": 7,
"other_pay_type":"付款码支付",
"card_no": "",
"mark": ""
}
console.log("需要适配makeOrder urlParams:", urlParams)
return ox.post({
url: API.makeOrder,
data: urlParams,
isDefaultGet: true,
failMsg: '操作失败!'
})
.then(res => {
util.hideLoad();
console.log("makeOrder suc: ", res)
return res
})
},
payOrder(orderInfo){
console.log("payOrder get param:",orderInfo)
let {order_no,pay_code,pay_type} = orderInfo
let {goods_data,amount} = this.dataQuery
let {store_id,brand_id,token} = getApp().globalData.accountInfo
let urlParams = {
order_no,
pay_code,
pay_type,
brand_id,
token,
"order_amt": amount, //未知TODO 问家华- 猜测是金额
"goods_info": order_no,
}
console.log("需要适配payOrder urlParams:", urlParams)
return ox.post({
url: API.payOrder,
data: urlParams,
isDefaultGet: true,
failMsg: "payOrder fail"
})
.then(res => {
console.log("payOrder suc: ", res)
let _pay_res = {
"order_no": order_no,
"pay_code": pay_code,
"pay_type": pay_type,
"orderAmt":res.res.orderAmt,
"transNo":res.res.transNo,
"res":res.res
}
return _pay_res
})
},
checkOrder(res){
let {store_id,brand_id,token} = getApp().globalData.accountInfo
let {transNo,orderAmt,payCode} = res
let urlParams= {
transNo,payCode,brand_id,token,orderAmt,
"manual": "yes",//是否手动
}
console.log("需要适配checkOrder urlParams:", urlParams)
return ox.get({
url: API.checkOrder,
data: urlParams,
isDefaultGet: true,
failMsg: "checkOrder fail"
})
.then(res2 => {
console.log("checkOrder suc: ", res)
return {
payRes:res,
checkRes:res2
}
})
},
handle_clickVipCard() {
util.showNone("储值卡支付未接入")
// this.paySuccess = true
this.handle_clickVIP()
// util.routeTo(`/pages/pay/success`, 'nT');
},
handle_closeEndPhoneBox(val) {
console.log("handle_closeEndPhoneBox", val)
this.showEndPhoneBox = !this.showEndPhoneBox
},
handle_clickCommit_end_phone(val) {
console.log("handle_clickCommit_end_phone", val)
this.showEndPhoneBox = !this.showEndPhoneBox
},
handle_closeQRInputBox(val) {
console.log("handle_closeQRInputBox", val)
},
handle_clickCommit_qr(val) {
console.log("handle_clickCommit_qr", val)
this.showQRInputBox = !this.showQRInputBox
},
handle_clickVIP() {
// util.showNone("会员登录")
this.showEndPhoneBox = !this.showEndPhoneBox
},
async setPageHeight(){
this.screenHeight = await util.getPageHeight()
},
// 按键松开事件
async onKeyup(event) {
let res = dictKeyboard.dict[event.keyCode];
this.decryptList.push(res);
if(event.keyCode != 13) {
return console.log("this.decryptList1: ",this.decryptList)
};
this.decryptList.pop();
this.strResult = await dictKeyboard.resultScan(this.decryptList);
this.orderQrcode = this.strResult
// console.log("扫码结果--:", this.strResult)
this.decryptList.splice(0);
console.log("this.decryptList: "+this.decryptList)
//过滤结果中的down_arrow
if(this.strResult.indexOf("down_arrow") != -1){
this.strResult = this.strResult.replace("down_arrow","")
}
console.log("扫码最终结果--:", this.strResult)
this.acceptScanCode(this.strResult)
},
// 监听按键按下事件
onKeydown(event) {
// console.log("监听按键按下事件: ",event)
},
}
}
</script>
<style lang="scss" scoped>
.pay-page {
width: 750rpx;
.mheader{
width: 750rpx;
}
}
</style>