oil-station/gasStation-uni/pagesRefuel/orderDetail/index.vue
2023-12-26 18:44:50 +08:00

493 lines
13 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="content">
<view class="container">
<view class="my-header">
<view class="my-icons" @click="goBack"> <uni-icons type="left" size="16"></uni-icons> </view>
<view class="my-text">支付订单</view>
<view class="my-icons"></view>
</view>
<!-- 顶部区域 -->
<view style="background-color: white;width: 94%;margin: 15px auto;">
<view style="font-weight: bold;height: 40px;line-height: 40px;margin-left: 10px;margin-top: 20px;">订单详情
</view>
<view class="desc">
<view>油站名称</view>
<view>{{store.name}}{{store.description ? "("+store.description+")" : ""}}</view>
</view>
<view class="desc">
<view>油号油枪</view>
<view>{{oilName}}/{{oilOrder.oilGunNum}}</view>
</view>
<view class="desc">
<view>加油金额</view>
<view>{{oilOrder.orderAmount}}</view>
</view>
<view class="desc">
<view>加油数量</view>
<view>{{oilOrder.oilNum}}L</view>
</view>
<view class="desc">
<view>油品单价</view>
<view>{{oilPrice}}/L</view>
</view>
<view class="desc">
<view>加油员工</view>
<view>{{staff.realName}}</view>
</view>
</view>
<view style="background-color: white;width: 94%;margin: 15px auto;">
<view class="desc" v-if="isOilStorageCard">
<view style="display: flex;">
囤油卡
<span style="display: flex;">(余额{{refuelBalance}}L)</span>
</view>
<view style="display: flex;">
<span style="margin-right: 10px;">- {{oilCardRedece}}L</span>
</view>
</view>
<view class="desc" v-if="isStoreValueCard">
<view style="display: flex;">
储值卡
<span style="display: flex;">(余额{{user.cardBalance}})</span>
</view>
<view style="display: flex;">
<span style="margin-right: 10px;">-{{balanceRedece}}</span>
</view>
</view>
<view class="desc">
<view style="display: flex;">
会员等级优惠
<span style="display: flex;">(会员等级)</span>
</view>
<view style="display: flex;">
<span style="margin-right: 10px;">-{{gradeRedece}}</span>
</view>
</view>
<view style="margin: 10px 20px 0;color: red;font-size: 12px;">囤油卡不参与任何优惠活动</view>
</view>
<view style="background-color: white;width: 94%;margin: 15px auto;height: 100px;">
<view style="font-weight: bold;height: 40px;line-height: 40px;margin-left: 10px;margin-top: 20px;">支付方式
</view>
<!-- <view class="desc">
<view>微信支付</view>
<u-radio-group v-model="value">
<u-radio name="wx"></u-radio>
</u-radio-group>
</view> -->
<view class="scc">
<image src="@/static/imgs/wechat.png" class="imgIcon"></image>
<span style="width: 70%;margin-top: 5px;">微信支付</span>
<radio value="r1" checked="true" />
</view>
</view>
<!-- 支付信息 -->
<view class="bar">
<view style="margin-left: 20px;">
<view>
<span style="font-size: 22px;font-weight: bold;">{{payAmount}}</span>
</view>
<view style="color: red;font-size: 12px;">应付金额</view>
</view>
<view @click="payment"
style="margin-right: 20px;width: 30%;border-radius:30px;background-color: #1879ff;height: 40px;line-height: 40px;text-align: center;color: white">
确认支付
</view>
</view>
</view>
</view>
</template>
<script>
import request from '../../utils/request'
export default {
data() {
return {
gradeDis:"",
title: '',
value: true,
orderNo: "",
// 油品订单信息
oilOrder: {},
// 员工列表信息
staff: {},
// 店铺信息
store: {},
oilPrice: 0,
// 油品名称
oilName: "",
// 油品类型
oilType:"",
// 用户信息
user:{
cardBalance:0,
},
// 储值卡升数
refuelBalance:0,
// 会员等级信息
userGrade:{},
balanceRedece:0,
oilCardRedece:0,
gradeRedece:0,
fullRedece:0,
couponRedece:0,
hoardAmount:0,
// 囤油卡信息
refuelMoney:[],
// 会员等级优惠信息
gradeDiscount:[],
// 优惠券优惠信息
couponDiscount:[],
// 满减优惠信息
fullReduceDiscount:[],
// 支付金额
payAmount:0,
// 调起支付所需的数据
orderInfo:{},
// 是否使用囤油卡
isOilStorageCard:false,
// 是否使用储值卡
isStoreValueCard:false,
}
},
onLoad(e) {
// this.orderNo = e.orderNo
this.orderNo = "234520231226154037a1f53b"
},
onShow() {
this.getOilOrder();
},
components: {
},
methods: {
// 支付接口
payment(){
let refuel = this.refuelMoney
refuel.refuelMoney = this.refuelMoney.refuelMoney - this.oilCardRedece
let map = {
orderNo : this.orderNo,
payAmount : this.payAmount,
// payAmount : "0.01",
discountAmount : this.fullRedece+this.gradeRedece+this.couponRedece,
oilCardAmount : JSON.stringify(refuel),
oilCardLiters : this.oilCardRedece,
balanceAmount : this.balanceRedece,
isOilStorageCard : this.isOilStorageCard,
tankId : uni.getStorageSync("tankId"),
// tankId : 6,
};
let _this = this;
request({
url: "business/oilOrder/appletPay",
method: 'post',
data: map,
}).then(res => {
console.log(res)
let payProvider = "wxpay"
// if (_this.appltType== "WECHAT"){
// payProvider = "wxpay"
// }else{
// payProvider = "alipay"
// }
if (res.data.reservedPayInfo!=null && res.data.reservedPayInfo!=""){
_this.orderInfo = JSON.parse(res.data.data.reservedPayInfo);
uni.requestPayment({
// 微信支付provider: 'wxpay' 支付宝支付 'alipay'
provider: payProvider,
// 时间戳
timeStamp: _this.orderInfo.timeStamp,
// 随机字符串
nonceStr: _this.orderInfo.nonceStr,
// 固定值
package: _this.orderInfo.package,
// 解密方式
signType: 'MD5',
// 支付签名
paySign: _this.orderInfo.paySign,
success: function (res) {
console.log('success:',res);
uni.reLaunch({
url: '/pagesRefuel/orderSuccess/index'
})
},
fail: function (err) {
request({
url: "/business/allOrderInfo/orderStatus",
method: 'post',
data: {"orderNo":res.data.data.orderNo,"status":"payFail"},
}).then((res)=>{
uni.showToast({
title:"支付失败!",
icon:"error"
})
})
console.log('fail:',err);
}
});
}else{
my.tradePay({ tradeNO: res.data.data.reservedTransactionId }, function(resp){
if(resp.resultCode == '9000'){
console.log("支付成功")
}else{
request({
url: "/business/allOrderInfo/orderStatus",
method: 'post',
data: {"orderNo":res.data.data.orderNo,"status":"payFail"},
}).then((res)=>{
uni.showToast({
title:"支付失败!",
icon:"error"
})
})
console.log('支付失败,'+resp.resultCode);
}
});
}
})
},
// 查看是否有可使用的囤油卡
chooseRefuelMoney(){
let falg = false;
this.refuelMoney.forEach(item => {
if (item.oilType == this.oilName){
falg = true
this.refuelBalance = item.refuelMoney
this.isOilStorageCard = true
if (this.oilCardRedece >= this.oilOrder.oilNum){
this.oilCardRedece = this.oilOrder.oilNum
}else{
this.oilCardRedece = item.refuelMoney
this.chooseCardBalance(1)
}
}
})
if (falg == false) {
this.chooseCardBalance(0)
}
},
// 查看是否有可使用的储值卡金额
chooseCardBalance(val){
if (this.user.cardBalance>0) {
this.isStoreValueCard = true;
if (val == 0) {
// 没有使用囤油卡
if (this.user.cardBalance >= this.oilOrder.orderAmount){
this.balanceRedece = this.oilOrder.orderAmount
} else {
this.balanceRedece = this.user.cardBalance
this.payAmount = this.oilOrder.orderAmount - this.balanceRedece
}
}else{
// 使用囤油卡
// 扣除囤油卡金额后需要支付的金额
let residueAmount = (this.oilOrder.oilNum - this.oilCardRedece) * this.oilPrice
if (this.user.cardBalance >= residueAmount){
this.balanceRedece = residueAmount
} else {
this.balanceRedece = this.user.cardBalance
this.payAmount = (this.oilOrder.orderAmount - residueAmount - this.balanceRedece).toFixed(2)
}
}
}
},
// 查看是否有可使用的会员等级优惠
chooseGrade(id){
let that = this;
request({
url: "business/userManager/userGrade/isUse/" + id,
method: 'get',
}).then((res) => {
console.log(res,that.oilType)
if (res.data != null && res.data != ""){
if (res.data.preferential== "自定义优惠"){
if (that.oilType == "汽油"){
// 将数组按照金额从小到大排序
let gasolineRule = JSON.parse(res.data.gasolineRule).sort((a,b) => a.gasolineRule1 - b.gasolineRule1);
console.log(gasolineRule,222)
if (res.data.gasolineDiscount == "满减优惠"){
for (let i = 0; i<gasolineRule.length; i++){
if (that.oilOrder.orderAmount >= gasolineRule[gasolineRule.length-1].gasolineRule1){
that.gradeRedece = gasolineRule[gasolineRule.length-1].gasolineRule2
break;
}
if (item.amount >= gasolineRule[i - 1].gasolineRule1 && item.amount < gasolineRule[i].gasolineRule1) {
discount.full = gasolineRule[i - 1].gasolineRule1
oilDiscount = gasolineRule[i - 1].gasolineRule2
discount.reduce = gasolineRule[i - 1].gasolineRule2
}
}
}
if (res.data.gasolineDiscount == "每升优惠"){
}
}
if (that.oilType == "柴油"){
}
if (that.oilType == "天然气"){
}
}
}
})
},
// 根据用户id查询用户信息
getUser(id){
let _this = this;
request({
url: "business/userManager/user/" + id,
method: 'get',
}).then((res) => {
// console.log(res)
_this.user = res.data;
if (res.data.refuelMoney!=null && res.data.refuelMoney!=""){
_this.refuelMoney = JSON.parse(res.data.refuelMoney)
_this.chooseRefuelMoney()
}else{
_this.chooseCardBalance(0)
}
_this.chooseGrade(res.data.gradeId)
})
},
// 获取油品订单
getOilOrder() {
let _this = this;
request({
url: "business/oilOrder/orderNo",
method: 'post',
data: {
orderNo: _this.orderNo
},
}).then((res) => {
_this.oilOrder = res.data
_this.getStaffList(res.data.staffId)
_this.getStore(res.data.storeId)
_this.getOilNumber(res.data.storeId)
_this.getUser(res.data.userId)
})
},
// 获取门店信息
getStore(id) {
let _this = this;
request({
url: "business/storeInformation/store/queryStoreById",
method: 'post',
data: {
"storeId": id
},
}).then((res) => {
_this.store = res.data;
})
},
// 根据员工id获取员工信息
getStaffList(staffId) {
let _this = this;
request({
url: "business/member/staff/" + staffId,
method: 'get',
}).then((res) => {
_this.staff = res.data
})
},
// 获取当前店铺油号信息
getOilNumber(storeId) {
let _this = this;
request({
url: "business/petrolStationManagement/oilNumber/getOilNumberName/" + storeId,
method: 'get',
}).then((res) => {
res.data.forEach(item => {
if (item.oilName == _this.oilOrder.oils) {
_this.oilPrice = item.gbPrice;
_this.oilName = item.oilNames;
_this.oilType = item.oilType;
}
})
})
},
// 返回
goBack() {
uni.navigateBack()
}
}
}
</script>
<style scoped lang="scss">
.scc{
display: flex;
justify-content: space-around;
margin-top: 10px;
height: 40px;
font-size: 18px;
line-height: 40px;
}
.imgIcon{
width: 30px;
height: 30px;
border-radius: 50%;
margin-top: 10px;
}
.desc {
height: 35px;
line-height: 35px;
margin-left: 20px;
margin-right: 20px;
display: flex;
justify-content: space-between;
font-size: 15px;
color: rgba(0, 0, 0, 0.65);
}
.bar {
width: 100%;
height: 70px;
background-color: white;
position: fixed;
bottom: 0px;
display: flex;
align-items: center;
justify-content: space-between;
}
.content {
background: #f4f5f6;
}
.container {
width: 100%;
height: 100vh;
box-sizing: border-box;
padding-top: 88px;
}
.my-header {
width: 100%;
height: 88px;
background: #ffffff;
display: flex;
align-items: center;
justify-content: space-between;
color: #000;
box-sizing: border-box;
padding: 0px 15px;
padding-top: 40px;
.my-icons {
width: 20px;
}
position: fixed;
top: 0px;
}
</style>