This commit is contained in:
linfso 2025-06-20 04:26:44 +08:00
parent 2a430f6a66
commit 2cd868f659
22 changed files with 168 additions and 1006 deletions

View File

@ -12,6 +12,7 @@ VUE_APP_PDOMAIN = 'tanex56-oms'
VUE_APP_BASE_API = 'http://47.102.220.189:59089/api/omssvr'
VUE_APP_DATA_FROM = "oms"
VUE_APP_WECHAT_APPID = "wxcb329faf410bc997";
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

View File

@ -8,6 +8,8 @@ ENV = 'production'
# 管理系统/生产环境
VUE_APP_PDOMAIN = 'tanex56-oms'
VUE_APP_BASE_API = 'https://api.sapp.tanex56.com/api/omssvr'
VUE_APP_BASE_API = 'https://api-sapp.tanex56.com/api/omssvr'
VUE_APP_DATA_FROM = "oms"
VUE_APP_WECHAT_APPID = "wxcb329faf410bc997";

View File

@ -12,3 +12,5 @@ ENV = 'staging'
VUE_APP_BASE_API = '/stage-api'
VUE_APP_PDOMAIN = 'tanex56-oms'
VUE_APP_BASE_API = 'http://api.vip.tanex56.com/api/omssvr'
VUE_APP_WECHAT_APPID = "wxcb329faf410bc997";

View File

@ -18,6 +18,23 @@ export function queryTraceInfo(mailno,tail4) {
})
}
export function getBillPayInfo(billNo) {
return request({
url: '/oms2c/common/getBillPayInfo' ,
method: 'get',
params: {settleBillNo:billNo}
})
}
export function getWxPayQrCode(billNo) {
return request({
url: '/oms2c/common/getWxPayQrCode',
method: 'get',
params:{settleBillNo:billNo}
})
}
// 物流轨迹查询
export function querySignedPic(billCode,tail4) {
return request({

View File

@ -26,6 +26,7 @@ export function getEmisSettleBill(id) {
}
// 查询结算总账单详细
export function getInfoBySettleBillNo(settleBillNo) {
return request({

View File

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询库区列表
export function listWmsArea(query) {
return request({
url: '/wms/wmsArea/list',
method: 'get',
params: query
})
}
// 查询库区详细
export function getWmsArea(id) {
return request({
url: '/wms/wmsArea/' + id,
method: 'get'
})
}
// 新增库区
export function addWmsArea(data) {
return request({
url: '/wms/wmsArea',
method: 'post',
data: data
})
}
// 修改库区
export function updateWmsArea(data) {
return request({
url: '/wms/wmsArea',
method: 'put',
data: data
})
}
// 删除库区
export function delWmsArea(id) {
return request({
url: '/wms/wmsArea/' + id,
method: 'delete'
})
}

View File

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询品牌表列表
export function listWmsBrand(query) {
return request({
url: '/wms/wmsBrand/list',
method: 'get',
params: query
})
}
// 查询品牌表详细
export function getWmsBrand(brandId) {
return request({
url: '/wms/wmsBrand/' + brandId,
method: 'get'
})
}
// 新增品牌表
export function addWmsBrand(data) {
return request({
url: '/wms/wmsBrand',
method: 'post',
data: data
})
}
// 修改品牌表
export function updateWmsBrand(data) {
return request({
url: '/wms/wmsBrand',
method: 'put',
data: data
})
}
// 删除品牌表
export function delWmsBrand(brandId) {
return request({
url: '/wms/wmsBrand/' + brandId,
method: 'delete'
})
}

View File

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询客户列表
export function listWmsCustomer(query) {
return request({
url: '/wms/wmsCustomer/list',
method: 'get',
params: query
})
}
// 查询客户详细
export function getWmsCustomer(id) {
return request({
url: '/wms/wmsCustomer/' + id,
method: 'get'
})
}
// 新增客户
export function addWmsCustomer(data) {
return request({
url: '/wms/wmsCustomer',
method: 'post',
data: data
})
}
// 修改客户
export function updateWmsCustomer(data) {
return request({
url: '/wms/wmsCustomer',
method: 'put',
data: data
})
}
// 删除客户
export function delWmsCustomer(id) {
return request({
url: '/wms/wmsCustomer/' + id,
method: 'delete'
})
}

View File

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询商品分类表列表
export function listWmsGoodsCategory(query) {
return request({
url: '/wms/wmsGoodsCategory/list',
method: 'get',
params: query
})
}
// 查询商品分类表详细
export function getWmsGoodsCategory(catId) {
return request({
url: '/wms/wmsGoodsCategory/' + catId,
method: 'get'
})
}
// 新增商品分类表
export function addWmsGoodsCategory(data) {
return request({
url: '/wms/wmsGoodsCategory',
method: 'post',
data: data
})
}
// 修改商品分类表
export function updateWmsGoodsCategory(data) {
return request({
url: '/wms/wmsGoodsCategory',
method: 'put',
data: data
})
}
// 删除商品分类表
export function delWmsGoodsCategory(catId) {
return request({
url: '/wms/wmsGoodsCategory/' + catId,
method: 'delete'
})
}

View File

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询商品sku列表
export function listWmsGoodsItem(query) {
return request({
url: '/wms/wmsGoodsItem/list',
method: 'get',
params: query
})
}
// 查询商品sku详细
export function getWmsGoodsItem(id) {
return request({
url: '/wms/wmsGoodsItem/' + id,
method: 'get'
})
}
// 新增商品sku
export function addWmsGoodsItem(data) {
return request({
url: '/wms/wmsGoodsItem',
method: 'post',
data: data
})
}
// 修改商品sku
export function updateWmsGoodsItem(data) {
return request({
url: '/wms/wmsGoodsItem',
method: 'put',
data: data
})
}
// 删除商品sku
export function delWmsGoodsItem(id) {
return request({
url: '/wms/wmsGoodsItem/' + id,
method: 'delete'
})
}

View File

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询库存列表
export function listWmsInventory(query) {
return request({
url: '/wms/wmsInventory/list',
method: 'get',
params: query
})
}
// 查询库存详细
export function getWmsInventory(id) {
return request({
url: '/wms/wmsInventory/' + id,
method: 'get'
})
}
// 新增库存
export function addWmsInventory(data) {
return request({
url: '/wms/wmsInventory',
method: 'post',
data: data
})
}
// 修改库存
export function updateWmsInventory(data) {
return request({
url: '/wms/wmsInventory',
method: 'put',
data: data
})
}
// 删除库存
export function delWmsInventory(id) {
return request({
url: '/wms/wmsInventory/' + id,
method: 'delete'
})
}

View File

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询客户订单表列表
export function listWmsOrder(query) {
return request({
url: '/wms/wmsOrder/list',
method: 'get',
params: query
})
}
// 查询客户订单表详细
export function getWmsOrder(id) {
return request({
url: '/wms/wmsOrder/' + id,
method: 'get'
})
}
// 新增客户订单表
export function addWmsOrder(data) {
return request({
url: '/wms/wmsOrder',
method: 'post',
data: data
})
}
// 修改客户订单表
export function updateWmsOrder(data) {
return request({
url: '/wms/wmsOrder',
method: 'put',
data: data
})
}
// 删除客户订单表
export function delWmsOrder(id) {
return request({
url: '/wms/wmsOrder/' + id,
method: 'delete'
})
}

View File

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询客户订单商品列表
export function listWmsOrderGoods(query) {
return request({
url: '/wms/wmsOrderGoods/list',
method: 'get',
params: query
})
}
// 查询客户订单商品详细
export function getWmsOrderGoods(id) {
return request({
url: '/wms/wmsOrderGoods/' + id,
method: 'get'
})
}
// 新增客户订单商品
export function addWmsOrderGoods(data) {
return request({
url: '/wms/wmsOrderGoods',
method: 'post',
data: data
})
}
// 修改客户订单商品
export function updateWmsOrderGoods(data) {
return request({
url: '/wms/wmsOrderGoods',
method: 'put',
data: data
})
}
// 删除客户订单商品
export function delWmsOrderGoods(id) {
return request({
url: '/wms/wmsOrderGoods/' + id,
method: 'delete'
})
}

View File

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询仓库月台列表
export function listWmsPlatform(query) {
return request({
url: '/wms/wmsPlatform/list',
method: 'get',
params: query
})
}
// 查询仓库月台详细
export function getWmsPlatform(id) {
return request({
url: '/wms/wmsPlatform/' + id,
method: 'get'
})
}
// 新增仓库月台
export function addWmsPlatform(data) {
return request({
url: '/wms/wmsPlatform',
method: 'post',
data: data
})
}
// 修改仓库月台
export function updateWmsPlatform(data) {
return request({
url: '/wms/wmsPlatform',
method: 'put',
data: data
})
}
// 删除仓库月台
export function delWmsPlatform(id) {
return request({
url: '/wms/wmsPlatform/' + id,
method: 'delete'
})
}

View File

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询货架列表
export function listWmsRack(query) {
return request({
url: '/wms/wmsRack/list',
method: 'get',
params: query
})
}
// 查询货架详细
export function getWmsRack(id) {
return request({
url: '/wms/wmsRack/' + id,
method: 'get'
})
}
// 新增货架
export function addWmsRack(data) {
return request({
url: '/wms/wmsRack',
method: 'post',
data: data
})
}
// 修改货架
export function updateWmsRack(data) {
return request({
url: '/wms/wmsRack',
method: 'put',
data: data
})
}
// 删除货架
export function delWmsRack(id) {
return request({
url: '/wms/wmsRack/' + id,
method: 'delete'
})
}

View File

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询入库箱列表
export function listWmsReceiptBoxDetail(query) {
return request({
url: '/wms/wmsReceiptBoxDetail/list',
method: 'get',
params: query
})
}
// 查询入库箱详细
export function getWmsReceiptBoxDetail(id) {
return request({
url: '/wms/wmsReceiptBoxDetail/' + id,
method: 'get'
})
}
// 新增入库箱
export function addWmsReceiptBoxDetail(data) {
return request({
url: '/wms/wmsReceiptBoxDetail',
method: 'post',
data: data
})
}
// 修改入库箱
export function updateWmsReceiptBoxDetail(data) {
return request({
url: '/wms/wmsReceiptBoxDetail',
method: 'put',
data: data
})
}
// 删除入库箱
export function delWmsReceiptBoxDetail(id) {
return request({
url: '/wms/wmsReceiptBoxDetail/' + id,
method: 'delete'
})
}

View File

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询入库商品条目列表
export function listWmsReceiptItemDetail(query) {
return request({
url: '/wms/wmsReceiptItemDetail/list',
method: 'get',
params: query
})
}
// 查询入库商品条目详细
export function getWmsReceiptItemDetail(id) {
return request({
url: '/wms/wmsReceiptItemDetail/' + id,
method: 'get'
})
}
// 新增入库商品条目
export function addWmsReceiptItemDetail(data) {
return request({
url: '/wms/wmsReceiptItemDetail',
method: 'post',
data: data
})
}
// 修改入库商品条目
export function updateWmsReceiptItemDetail(data) {
return request({
url: '/wms/wmsReceiptItemDetail',
method: 'put',
data: data
})
}
// 删除入库商品条目
export function delWmsReceiptItemDetail(id) {
return request({
url: '/wms/wmsReceiptItemDetail/' + id,
method: 'delete'
})
}

View File

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询入库单列表
export function listWmsReceiptOrder(query) {
return request({
url: '/wms/wmsReceiptOrder/list',
method: 'get',
params: query
})
}
// 查询入库单详细
export function getWmsReceiptOrder(id) {
return request({
url: '/wms/wmsReceiptOrder/' + id,
method: 'get'
})
}
// 新增入库单
export function addWmsReceiptOrder(data) {
return request({
url: '/wms/wmsReceiptOrder',
method: 'post',
data: data
})
}
// 修改入库单
export function updateWmsReceiptOrder(data) {
return request({
url: '/wms/wmsReceiptOrder',
method: 'put',
data: data
})
}
// 删除入库单
export function delWmsReceiptOrder(id) {
return request({
url: '/wms/wmsReceiptOrder/' + id,
method: 'delete'
})
}

View File

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询供应商列表
export function listWmsSupplier(query) {
return request({
url: '/wms/wmsSupplier/list',
method: 'get',
params: query
})
}
// 查询供应商详细
export function getWmsSupplier(id) {
return request({
url: '/wms/wmsSupplier/' + id,
method: 'get'
})
}
// 新增供应商
export function addWmsSupplier(data) {
return request({
url: '/wms/wmsSupplier',
method: 'post',
data: data
})
}
// 修改供应商
export function updateWmsSupplier(data) {
return request({
url: '/wms/wmsSupplier',
method: 'put',
data: data
})
}
// 删除供应商
export function delWmsSupplier(id) {
return request({
url: '/wms/wmsSupplier/' + id,
method: 'delete'
})
}

View File

@ -1,44 +0,0 @@
import request from '@/utils/request'
// 查询仓库列表
export function listWmsWarehouse(query) {
return request({
url: '/wms/wmsWarehouse/list',
method: 'get',
params: query
})
}
// 查询仓库详细
export function getWmsWarehouse(id) {
return request({
url: '/wms/wmsWarehouse/' + id,
method: 'get'
})
}
// 新增仓库
export function addWmsWarehouse(data) {
return request({
url: '/wms/wmsWarehouse',
method: 'post',
data: data
})
}
// 修改仓库
export function updateWmsWarehouse(data) {
return request({
url: '/wms/wmsWarehouse',
method: 'put',
data: data
})
}
// 删除仓库
export function delWmsWarehouse(id) {
return request({
url: '/wms/wmsWarehouse/' + id,
method: 'delete'
})
}

View File

@ -10,7 +10,7 @@ import getPageTitle from '@/utils/get-page-title'
NProgress.configure({ showSpinner: false })
const whiteList = ['/login', '/auth-redirect', '/bind', '/register','/tools','/loginBySSO','/queryTraceInfo','/onlineChat','onlinePay']
const whiteList = ['/login', '/auth-redirect', '/bind', '/register','/tools','/loginBySSO','/queryTraceInfo','/onlineChat','/onlinePay']
router.beforeEach(async(to, from, next) => {
NProgress.start()

View File

@ -1,365 +1,164 @@
<template>
<div class="" style="background-color: #F3F4F8;padding:5px">
<div>
<div style="display: inline-flex;width: 100%;" class="panel">
<!-- <el-input v-model="billCode" placeholder="输入运单号查询物流详情" /> -->
<div style="width:85%">
<el-input v-model="billCode" clearable placeholder="输入运单号查询物流详情" @keyup.enter.native="queryTrace" >
<i slot="prefix" class="iconfont">&#xe656;</i>
</el-input>
</div>
<div style="width: 15%;
text-align: center;
font-size: 14px;
line-height: 30px;" @click="queryTrace">查询</div>
</div>
</div>
<div v-if="latestBillList!=null&&latestBillList.length>0" style="margin-top: 10px; font-size: 14px;width:100%" class="panel" >
<!-- <div style="width: 85%;color:gray;padding-left: 10px;">T12321321</div> -->
<el-tag class="his-q-code" type="info" v-for="item in latestBillList" :key="item" @click="latestClick(item)">
{{ item }}
</el-tag>
</div>
<div v-if="extBillInfo!=null" style="line-height:30px;margin-top: 10px; font-size: 14px;width:100%" class="panel" >
<div style="display: inline-flex; width: 100%;">
<div style="width:20%;color:black;font-weight: 600; font-size: 18px;
display: flex;
justify-content: center;
align-items: center;
text-align: center;">{{ extBillInfo.sendSiteName }}</div>
<div style="position: relative; text-align: center;">
<svg t="1726269105329" class="icon" viewBox="0 0 1024 1024" version="1.1" p-id="2426" width="200" height="50" xmlns="http://www.w3.org/2000/svg">
<path d="M 1467.617 655.095 L -534.095 655.095 C -589.52 653.579 -620.594 625.007 -590.029 603.666 C -577.517 594.93 -556.788 589.42 -534.095 588.798 L 1467.617 588.798 C 1523.042 587.282 1561.249 613.957 1536.386 636.814 C 1523.467 648.693 1496.419 655.882 1467.617 655.095 Z" p-id="2427" style="fill: rgb(135, 5, 5);"/>
<path d="M 1522.012 638.505 C 1515.688 638.601 1509.572 636.246 1504.945 631.934 L 1319.089 456.404 C 1304.914 444.275 1309.185 421.349 1326.776 415.138 C 1335.725 411.978 1345.694 414.332 1352.284 421.161 L 1538.567 596.692 C 1552.099 609.534 1546.655 632.209 1528.767 637.507 C 1526.574 638.157 1524.3 638.493 1522.012 638.505 Z" p-id="2428" style="fill: rgb(148, 6, 6);"/>
</svg>
<div style="position: absolute; top:0px;left:35%; color: gray;">{{ extBillInfo.waybillStatus }}</div>
<div style="position: absolute; top:30px;left:35%; color: gray;">{{ extBillInfo.productTypeName }}</div>
</div>
<div style="width:20%;color:black;font-weight: 600;font-size: 18px; display: flex;
justify-content: center;
align-items: center;text-align: center;">{{ extBillInfo.destinationName }}</div>
</div>
<div style="width: 100%;color:black;font-weight: 600;padding-left: 10px;">
<div style="color: #880504;text-align: left;" v-if="extBillInfo.blSign==0"> 预计送达:{{ extBillInfo.estimateDate }}</div>
<div style="color: #880504;text-align: left;" v-if="extBillInfo.blSign==1"> 签收时间:{{ extBillInfo.signDate }}</div>
</div>
</div>
<div v-if="extBillInfo!=null&&extBillInfo.blBillPicDispatchRmk==1" style="line-height:30px;margin-top: 10px; font-size: 14px;display: inline-flex;width:100%" class="panel" >
<div style="width: 85%;color:gray;padding-left: 10px;">签收底单</div>
<div style="width: 15%;text-align: center;font-size: 14px;" @click="viewSignedPic">查看</div>
</div>
<!-- <el-scrollbar style="height:400px;"> -->
<div style="min-height:50px;margin-top: 10px;" class="panel" >
<!-- <div style="font-weight: 600;margin-bottom: 20px;padding-left: 40px;">运单号:{{ billCode }}</div> -->
<el-timeline :reverse="reverse">
<el-timeline-item
v-for="(step, stepIndex) in traceInfoList"
:key="stepIndex"
:timestamp="step.time"
:type="stepIndex==0?'primary ':''"
>
{{step.content}}
</el-timeline-item>
</el-timeline>
</div>
<!-- </el-scrollbar> -->
<div v-if="open" style="z-index: 2004;width: 97%;
padding: 15px 15px;
color: gray;" class="code-wrapper code-dialog">
<div class="input-captcha" style=" position: relative;">
<div>
请输入手机号码后四位
</div>
<div style="position: absolute;right: 5px;top: 0px;">
<span
@click.stop="clostBtnClick"
>
<i class="el-icon-close" style="font-size: 26px;color: black"></i>
</span>
</div>
<div class="input-box">
<div class="input-content">
<input v-model.trim.number="input0" ref="input0" @keydown.8="deleteValue('input0','input0')" @keyup="changeValue($event,'input0','input1')" type="number" placeholder="">
<input v-model.trim.number="input1" ref="input1" @keydown.8="deleteValue('input1','input0')" @keyup="changeValue($event,'input1','input2')" type="number" placeholder="">
<input v-model.trim.number="input2" ref="input2" @keydown.8="deleteValue('input2','input1')" @keyup="changeValue($event,'input2','input3')" type="number" placeholder="">
<input v-model.trim.number="input3" ref="input3" @keydown.8="deleteValue('input3','input2')" @keyup="changeValue($event,'input3','input0')" type="number" placeholder="">
</div>
</div>
<div style="width:100%;text-align: center">
<el-button type="primary" plain style=" margin-top: 10px;
width: 60%;
height: 40px;" @click="handleShowSignPic" >确 定</el-button>
</div>
</div>
</div>
<div v-if="open" class="code-mask" tabindex="0" style="z-index: 2003;"></div>
<el-dialog
:visible.sync="dialogVisible"
title="图片"
width="100%"
append-to-body
>
<img
:src="signImageUrl"
style="display: block; max-width: 100%; margin: 0 auto"
/>
</el-dialog>
<div class="wechat-payment-container">
<!-- <OnlinePayJsApi v-if="isWx"></OnlinePayJsApi> -->
<!-- <OnlinePayQr v-else></OnlinePayQr> -->
<div v-if="!isWx">请在微信浏览器中打开此页面进行支付</div>
</div>
</template>
<script>
import { queryTraceInfo,querySignedPic } from "@/api/oms/emisCommon";
// import OnlinePayQr from '@/views/openpage/onlinePayQr.vue';
// import OnlinePayJsApi from '@/views/openpage/onlinePayJsApi.vue';
export default {
name: "queryTraceInfo",
props:{
// billCode:{
// type: String,
// }
},
dicts: [],
name: 'OnlinePay',
// components: {OnlinePayQr,OnlinePayJsApi },
components: {},
data() {
return {
billCode:null,
reverse: false,
open:false,
showSignPic:false,
dialogVisible:false,
signImageUrl:"",
input0: '',
input1: '',
input2: '',
input3: '',
latestBillList:[],
extBillInfo:null,
// 遮罩层
loading: true,
// 地球洲表格数据
traceInfoList: []
billNo:null,
isWx:false,
loadingVisible: false,
resultVisible: false,
paymentSuccess: false,
errorMessage: '',
wechatPaymentParams: null
};
},
created() {
// this.queryData();
this.recordLatestBill();
},
watch: {
// "billCode": {
// handler (newValue, oldValue) {
// this.queryData();
// },
// deep: true
// }
},
methods: {
/** 查询地球洲列表 */
queryTrace() {
this.loading = true;
if(!this.billCode){
return this.$message.error("输入查询单号")
}
queryTraceInfo(this.billCode,"1234").then(response => {
this.traceInfoList = response.data;
this.extBillInfo=response.extBillInfo;
this.recordLatestBill(this.billCode);
this.loading = false;
});
const ua = window.navigator.userAgent.toLowerCase();
if (!ua.match(/MicroMessenger/i)) {
this.isWx=false;
}else{
const params = new URLSearchParams(window.location.search);
let code=params.get('code');
let state=params.get('code');
},
recordLatestBill(billCode){
const storage = window.localStorage.getItem('queryDataStorage') ? JSON.parse(window.localStorage.getItem('queryDataStorage')) : {}
this.latestBillList = storage["latestBillList"] ? storage["latestBillList"] : [];
if(billCode){
this.latestBillList.push(billCode);
let list= this.latestBillList.filter(function(item, index, arr) {
return arr.indexOf(item, 0) === index;
})
this.latestBillList=list;
}
if(this.latestBillList&&this.latestBillList.length>0){
this.latestBillList= this.latestBillList.reverse();
let cutList=[...this.latestBillList];
this.latestBillList=cutList.slice(0,5);
storage["latestBillList"] = this.latestBillList
window.localStorage.setItem('queryDataStorage', JSON.stringify(storage))
}
},
latestClick(item){
this.billCode=item;
this.queryTrace();
},
clostBtnClick(){
this.open=false;
},
viewSignedPic(){
this.input0='';
this.input1='';
this.input2='';
this.input3='';
this.open=true;
},
handleShowSignPic(){
let code=this.input0+""+this.input1+""+this.input2+""+this.input3;
this.loading = true;
querySignedPic(this.billCode,code).then(response => {
// console.log(response.data);
this.signImageUrl = response.data;
this.loading = false;
this.open=false;
this.dialogVisible=true;
});
},
deleteValue (inputValue, previousItem) { // 键盘按下时$event,当前input,上一个input
if (this[inputValue].length > 0) { // 当前有值,清空之
this[inputValue] = ''
} else { // 当前没有值,光标跳转到上一个input,并清空该input值
this.$nextTick(() => {
this.$refs[previousItem].focus()
this[previousItem] = ''
this[inputValue] = ''
})
// 如果是微信回调,拉起微信支付
if (code) {
this.requestPayment(code,state);
}
},
changeValue (e, inputValue, nextItem) { // 键盘抬起时$event,当前input,下一个input
if (e.keyCode !== 8) {
this.$nextTick(() => {
this.$refs[nextItem].focus() // 截取当前值最后一位,跳到下一个input
this[inputValue] = (this[inputValue]).toString().slice(-1)
})
else{
this.billNo = this.$route.query.bid;
const authUrl = this.generateAuthUrl("https://oms.tanex56.com/onlinePay","snsapi_base",this.billNo);
window.location.href = authUrl;
}
}
},
methods: {
requestPayment(code,state) {
this.loadingVisible = true;
// 调用后端API获取微信支付参数
this.$axios.post('/oms2c/common/sumbitWxPayByCode', {
code: code,
state: state
})
.then(response => {
this.loadingVisible = false;
if (response.data.code === 200) {
this.wechatPaymentParams = response.data;
this.invokeWechatPayment();
} else {
this.showPaymentResult(false, response.data.message || '获取支付参数失败');
}
})
.catch(error => {
this.loadingVisible = false;
this.showPaymentResult(false, '网络错误,请稍后重试');
console.error('获取微信支付参数失败:', error);
});
},
invokeWechatPayment() {
if (typeof WeixinJSBridge === 'undefined') {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', this.onBridgeReady, false);
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', this.onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', this.onBridgeReady);
}
} else {
this.onBridgeReady();
}
},
onBridgeReady() {
const params = this.wechatPaymentParams;
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId": params.appId, // 公众号ID,由商户传入
"timeStamp": params.timeStamp, // 时间戳,自1970年以来的秒数
"nonceStr": params.nonceStr, // 随机串
"package": params.package, // 预支付交易会话ID
"signType": params.signType, // 微信签名方式
"paySign": params.paySign // 微信签名
},
(res) => {
if (res.err_msg === 'get_brand_wcpay_request:ok') {
// 用户支付成功,这里可以调用后端接口确认支付状态
this.verifyPaymentStatus();
} else if (res.err_msg === 'get_brand_wcpay_request:cancel') {
this.showPaymentResult(false, '用户取消支付');
} else {
this.showPaymentResult(false, `支付失败: ${res.err_msg}`);
}
}
);
},
verifyPaymentStatus() {
this.loadingVisible = true;
// 调用后端API验证支付状态
setTimeout(() => {
// 实际项目中应该调用后端API验证支付状态
// 这里使用模拟数据
this.loadingVisible = false;
this.showPaymentResult(true);
}, 1500);
},
showPaymentResult(success, message = '') {
this.paymentSuccess = success;
this.errorMessage = message;
this.resultVisible = true;
},
handleResultAction() {
this.resultVisible = false;
if (this.paymentSuccess) {
this.$router.push({ name: 'OrderSuccess', params: { orderId: this.orderInfo.orderId } });
}
},
/**
* 生成微信授权URL
* @param {string} redirectUri - 授权后重定向的URL
* @param {string} scope - 授权作用域,snsapi_base或snsapi_userinfo
* @param {string} state - 自定义参数
*/
generateAuthUrl(redirectUri, scope = 'snsapi_base', state = 'STATE') {
const appId = process.env.VUE_APP_WECHAT_APPID;
const encodedRedirectUri = encodeURIComponent(redirectUri);
return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${encodedRedirectUri}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`;
},
// /**
// * 将code发送到后端换取openid
// * @param {string} code - 微信授权码
// */
// async exchangeCodeForOpenid(code) {
// try {
// const response = await this.$axios.post('/api/wechat/auth/openid', { code });
// return response.data;
// } catch (error) {
// console.error('换取OpenID失败:', error);
// throw error;
// }
// }
}
};
</script>
<style rel="stylesheet/scss" lang="scss">
:deep #app{
background-color: #fff!important;
<style scoped>
.wechat-payment-container {
padding-bottom: 80px;
}
.el-input__inner:hover {
border-color: #eeeeee;
}
.panel {
background-color: #fff;
padding: 5px;
line-height: 30px;
}
.input-captcha{
min-height: 200px;
.input-box {
text-align: center;
min-height: 100px;
border-radius: 8px;
width: 100%;
max-width: 500px;
display: inline-block;
padding: 10px;
box-sizing: border-box;
input {
vertical-align: middle;
}
& + .input-box {
margin-top: 20px;
}
// 六个span时的样式
.simple-input-content {
label {
padding: 20px;
}
span {
vertical-align: middle;
border: 1px solid silver;
display: inline-block;
height: 20px;
width: 20px;
&.highlight {
border-color: purple;
}
}
}
// 六个input时的样式
.input-content {
padding: 0px;
input {
width: 60px;
height: 60px;
font-size: 40px;
text-align: center;
margin-right: 5px;
border: 1px solid #d3d3d3;
border-radius: 5px;
}
}
/* 去掉input[type=number]浏览器默认的icon显示 */
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button { // chrome
-webkit-appearance: none;
appearance: none;
margin: 0;
}
input{ // 火狐
-moz-appearance:textfield;
}
}
}
.code-wrapper {
position: absolute;
top: 100px;
text-align: center;
}
.code-dialog{
margin: 0 auto 50px;
background: #fff;
border-radius: 2px;
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.code-mask {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
opacity: .5;
background: #000
}
.his-q-code {
background-color: #fcfcfc;
border-color: #d2d2d2;
color: #000000;
font-weight: 700;
border-radius: 20px;
}
</style>
</style>