Merge pull request 'xiaozy_0614' (#9) from xiaozy_0614 into master

Reviewed-on: #9
pull/12/head
肖志勇 2 years ago
commit e2b1dee799
  1. 126
      BagMoney/pages/oilCards/oilCards.vue
  2. 171
      BagStation/orderDetail/orderDetail.vue
  3. 2
      BagStation/pages/components/price-select-tab.vue
  4. 341
      BagStation/pages/makeOrder/orderPaying.vue
  5. 28
      BagStation/pages/makeOrder/payResult.vue
  6. 89
      BagStation/pages/stationDetail/stieQr.vue

@ -6,19 +6,17 @@
</cu-custom>
<view class="" v-show="accountStatus">
<view class="placeholder bg-main-oil">
</view>
<view class="move-top">
<view class="flex radius margin my-shadow position-re">
<view class="basis-sm text-center padding bg-gradual-black">
我的油卡
</view>
<view class="basis-lg padding bg-white">
总余额<text class="text-red">{{userTotal.oilCardTotalPrice|moneyFormat}}</text><text class="cu-tag yu-tag-right position-ab sm">{{cardList.length>0?cardList.length:1}}</text>
总余额<text class="text-red">{{userTotal.oilCardTotalPrice|moneyFormat}}</text><text
class="cu-tag yu-tag-right position-ab sm">{{cardList.length>0?cardList.length:1}}</text>
</view>
</view>
<!-- <view class="flex radius margin my-shadow position-re">
<view class="basis-sm text-center padding bg-gradual-black">
自营公司油卡
@ -38,12 +36,10 @@
</view>
</view> -->
</view>
</view>
<view class=" margin-bottom-lg">
<swiper class="screen-swiper square-dot" @change="cardSwiper" :indicator-dots="true" :circular="true" :autoplay="false"
interval="5000" duration="500">
<swiper class="screen-swiper square-dot" @change="cardSwiper" :indicator-dots="true" :circular="true"
:autoplay="false" interval="5000" duration="500">
<swiper-item v-for="(item,index) in cardList" :key="index" :class="cardCur==index?'cur':''">
<!-- <image :src="imgURL+ (item.type=='zs'?'card-zs.png':'card-other.png')" mode="aspectFill">
</image> -->
@ -58,16 +54,13 @@
<view class="text-red padding-bottom-sm text-bold text-lg">
共享企业余额
</view>
<text class="text-grey">单日加油额度{{cardList[cardCur].orderAmountToplimit}}单日加油升数额度{{cardList[cardCur].orderVolumeToplimit}}L</text>
<text
class="text-grey">单日加油额度{{cardList[cardCur].orderAmountToplimit}}单日加油升数额度{{cardList[cardCur].orderVolumeToplimit}}L</text>
</view>
<view class="text-center padding">
<!-- <view class="text-red text-bold text-lg">
{{userTotal.oilCardTotalPrice|moneyFormat}}
</view> -->
<text class="">交易记录</text>
</view>
</view>
@ -75,7 +68,6 @@
<view class="cu-list menu" v-if="cardList[cardCur].historyList.length>0">
<view class="cu-item" v-for="detail in cardList[cardCur].historyList" :key="detail.id">
<view class="content padding-tb-sm">
<view class="text-gray text-sm">
{{detail.createTime}}
</view>
@ -109,7 +101,7 @@
},
data() {
return {
hideCard:[],
hideCard: [],
loadStatus: 'load',
userTotal: {},
historyList: [],
@ -170,15 +162,15 @@
this.TowerSwiper('swiperList');
},
onLoad(option) {
this.getCards()
this.getTotalOilCardInfo()
this.TowerSwiper('swiperList');
// this.getCards()
// this.getTotalOilCardInfo()
// this.TowerSwiper('swiperList');
// towerSwiper
},
onReachBottom() {
if (this.cardList[this.cardCur].loadStatus == 'more') {
setTimeout(() => {
this.getMoneyDetail(this.cardList[this.cardCur],this.cardCur)
this.getMoneyDetail(this.cardList[this.cardCur], this.cardCur)
}, 100)
} else {
uni.showToast({
@ -188,14 +180,6 @@
}
},
methods: {
getAmount() {
accountApi.getTotalOilCardInfo().then(res => {
if (res.code == 20000) {
this.userTotal = res.data
}
})
},
getTotalOilCardInfo() {
accountApi.getTotalOilCardInfo().then(res => {
if (res.code == 20000) {
@ -213,13 +197,7 @@
oilCardType: card.oilCardType
}
}
console.log('++++++++++++++')
console.log(data2)
console.log('++++++++++++++')
accountApi.getOilCardRecordByPage(data2).then(res => {
console.log('++++++++++++++')
console.log(res)
console.log('++++++++++++++')
if (res.code == 20000) {
if (res.data.list.length < 20) {
this.cardList[index].loadStatus = 'nomore'
@ -228,33 +206,36 @@
this.cardList[index].currentPage++
}
// this.cardList[index].historyList = []
if(this.cardList[index].currentPage!==1){
this.cardList[index].historyList = this.cardList[index].historyList.concat(res.data.list)
} else{
if (this.cardList[index].currentPage !== 1) {
this.cardList[index].historyList = this.cardList[index].historyList.concat(res.data
.list)
} else {
this.cardList[index].historyList = res.data.list
}
}
})
},
async getCards() {
await accountApi.getSyncDeductions().then(res => {
if (res.code == 20000) {
this.hideCard = res.data.companyIds
}
})
await accountApi.getUserAccount().then(res => {
await accountApi.getSyncDeductions().then(res => {
if (res.code == 20000) {
this.hideCard = res.data.companyIds
}
})
await accountApi.getUserAccount().then(res => {
if (res.code == 20000) {
if (res.data.length > 0) {
this.cardList = res.data
this.cardList = this.cardList.filter(item=>!this.hideCard.includes(item.companyId))
this.cardList.forEach(item => {
this.$set(item,'currentPage',1)
this.$set(item,'loadStatus','more')
this.$set(item,'historyList',[])
let staging = res.data.filter(item => item.companyType != 5).filter(item => !this.hideCard.includes(item
.companyId))
staging.forEach(item => {
this.$set(item, 'currentPage', 1)
this.$set(item, 'loadStatus', 'more')
this.$set(item, 'historyList', [])
})
console.log(this.cardList)
let target = this.sortHandler(staging)
this.cardList = target
setTimeout(() => {
this.getMoneyDetail(this.cardList[0], 0)
}, 100)
@ -262,6 +243,41 @@
}
})
},
sortHandler(arr) {
let internalArr = arr.filter(item => item.oilCardType == 2)
let externalArr = arr.filter(item => item.oilCardType == 3)
// let internalTarget = this.sortParticulars(internalArr, 'shareCompanyQuota')
let externalTarget = this.sortParticulars(externalArr, 'balance')
if (internalArr.length || externalTarget.length) return [...internalArr, ...externalTarget]
else return arr
},
sortParticulars(arr, field) {
let target = []
let map = new Map()
let keys = [],
values = []
arr.forEach(item => {
map.set(item, item[field])
})
for (let key of map.keys()) {
keys.push(key)
}
for (let value of map.values()) {
values.push(value)
}
values.sort((a,b)=>{return a - b})
values.reverse()
values.forEach(value => {
keys.forEach(key => {
if (map.get(key) == value) {
target.push(key)
map.set(key, new Date().getTime())
}
})
})
return target
},
DotStyle(e) {
this.dotStyle = e.detail.value
},
@ -332,10 +348,11 @@
</script>
<style scoped>
.boxsingForCard{
.boxsingForCard {
position: relative;
}
.inCard{
.inCard {
position: absolute;
right: 11%;
bottom: 17%;
@ -343,11 +360,12 @@
height: 55rpx;
background-color: #FFFFFF;
border-radius: 20rpx;
color: red;
color: red;
display: flex;
justify-content: center;
align-items: center;
}
.tower-swiper .tower-item {
transform: scale(calc(0.5 + var(--index) / 10));
margin-left: calc(var(--left) * 100upx - 150upx);

@ -13,14 +13,15 @@
<view class="qr-container ">
<view class="qrimg">
<view class="qrimg" @tap="newQrString">
<tki-qrcode ref="qrcode" cid="2" loadMake :val="val" :size="250" unit="upx"
background="#fff" :foreground="foreground" :pdground="foreground" :icon="iconUrl" iconSize="40" onval
:usingComponents="usingComponents" showLoading />
<tki-qrcode ref="qrcode" cid="2" loadMake :val="val" :size="250" unit="upx" background="#fff"
:foreground="foreground" :pdground="foreground" :icon="iconUrl" iconSize="40" onval
:usingComponents="usingComponents" showLoading />
</view>
</view>
</view>
<view class="text-center text-sm justify-center align-center flex">
<image src="../static/img/YDJY.png" mode="" style="width: 60upx;height:60upx;" class="margin-right-sm"></image>
<image src="../static/img/YDJY.png" mode="" style="width: 60upx;height:60upx;" class="margin-right-sm">
</image>
<text>壳牌 {{test}} {{tsets}}</text>
</view>
<view class="text-center padding-top text-sm margin-bottom">
@ -43,113 +44,109 @@
</view>
</view>
<view class="cu-list menu solid-bottom">
<!-- <view class="cu-list menu solid-bottom">
<view class="cu-item arrow" @tap="toDetail(order)">
油站
<text class="fr">{{order.siteName?order.siteName:''}}</text>
</view>
</view> -->
<view class="padding-tb-xs text-left">
<!-- <view class="cu-item arrow" @tap="toDetail(order)">
</view> -->
油站
<text class="fr nowrap">{{order.siteName?order.siteName:''}}</text>
</view>
<view class="padding-tb-xs text-left">
油品油枪
油品油枪
<text class="fr nowrap">
{{order.oilsCode?order.oilsCode+' ':'' }} {{ order.gunName?order.gunName+'号枪': order.oilsBar?order.oilsBar+'号枪':'未选择油枪'}} </text>
{{order.oilsCode?order.oilsCode+' ':'' }}{{ order.gunName?order.gunName+'号枪': order.oilsBar?order.oilsBar+'号枪':'未选择油枪'}} </text>
</view>
<view class="padding-tb-xs text-left">
{{order.oilProductType=='GAS'?'加气重量:':'加油升数:'}}
<text class="fr">{{order.volume?order.volume:'未输入' |moneyFormath}} {{order.oilProductType=='GAS'?'L':'L'}}</text>
<text
class="fr nowrap">{{order.volume?'约':''}}{{order.volume?order.volume:'未输入' |moneyFormath}}{{order.oilProductType=='GAS'?'L':'L'}}</text>
</view>
<view class="padding-tb-xs text-left">
油站价格
<text class="fr">{{order.sitePrice?order.sitePrice+'¥/' +( order.oilProductType=='GAS'?'L':'L') :'暂无'}}</text>
油站价格
<text
class="fr">{{order.sitePrice?order.sitePrice+'¥/' +( order.oilProductType=='GAS'?'L':'L') :'暂无'}}</text>
</view>
<view class="padding-tb-xs text-left">
优惠价格
<text class="fr">{{moneyIntercept(order.realPrice) }}/ {{order.oilProductType=='GAS'?'L':'L'}}</text>
优惠价格
<text class="fr">{{moneyIntercept(order.realPrice) }}/{{order.oilProductType=='GAS'?'L':'L'}}</text>
</view>
<view class="padding-tb-xs text-left">
加油员
加油员
<text class="fr">{{order.siteUser}}</text>
</view>
<view class="padding-tb-xs text-left">
加油渠道
加油渠道
<text class="fr">{{order.channelCode|channelCodeFamt}}</text>
</view>
<view class="dashed-top margin-top-xs padding-top-sm">
<view class="padding-tb-xs text-left">
加油机金额 <text class="fr">{{order.sitePriceAmount |moneyFormat}}</text>
<!-- <text
class="fr">{{order.xoilDiscountAmount>0?order.realAmount+order.xoilDiscountAmount:order.realAmount|moneyFormat}}</text> -->
</view>
</view>
<view class="padding-tb-xs text-left">
星油优惠
星油优惠
<!-- order.xoilDiscountAmount>0?order.xoilDiscountAmount:'xxx.x'|moneyFormat -->
<text
class="text-red fr">{{ moneyIntercept(order.xoilDiscountAmount)}}</text>
<text class="text-red fr">{{ moneyIntercept(order.xoilDiscountAmount)}}</text>
</view>
<view class="padding-tb-xs text-left">
优惠券
优惠券
<text class="text-red fr">{{order.couponMark==1?order.couponDiscountAmount:'未使用优惠券'}}</text>
</view>
<view class="padding-tb-xs text-left">
合计
合计
<text
class="text-red text-bold text-lg fr">{{order.payRealAmount>0?order.payRealAmount:'xxx.x'|moneyFormat}}</text>
</view>
<view class="padding-tb-xs text-left">
支付方式
支付方式
<text class=" fr">{{order.payAccountType==0?'星油豆':'企业账户支付'}}</text>
</view>
<view class="padding-tb-xs text-left" v-if="order.payTime">
订单支付时间
订单支付时间
<text class=" fr">{{order.payTime}}</text>
</view>
</view>
<view class="padding-tb-xs text-left">
{{order.suppleMark==0 ? '订单创建时间' : '补单订单创建时间'}}
<text class=" fr">{{order.orderTime||`&nbsp;${order.createTime}`}}</text>
</view>
<view class="dashed-top margin-top-xs padding-top-sm">
<view class="padding-tb-xs text-left">
加油车牌
加油车牌
<text class=" fr">{{order.plateNumber}}</text>
</view>
</view>
<view class="padding-tb-xs text-left">
加油司机
加油司机
<text class=" fr">{{order.customerName}} {{order.customerCode}}</text>
</view>
<view class="padding-tb-xs text-left" v-if="order.oilCardNature">
油卡性质
油卡性质
<text class=" fr">{{order.oilCardNature|oilCardNatureF}}</text>
</view>
</view>
</view>
<view class="padding bg-white fixed-bottom">
<view class="flex margin-bottom" v-if="order.orderStatus==0">
<button class="cu-btn block flex-sub lg bg-main-oil "
@tap="makePay">立即支付</button>
<button class="cu-btn block flex-sub lg margin-left"
@tap="cancelOrder">取消订单</button>
<button class="cu-btn block flex-sub lg bg-main-oil " @tap="makePay">立即支付</button>
<button class="cu-btn block flex-sub lg margin-left" @tap="cancelOrder">取消订单</button>
</view>
<view class="cu-btn bg-white oil-main-color block flex-sub lg" @click="makeCall">
<text class="cuIcon-service padding-right-sm">联系客服</text>
</view>
</view>
<!-- <button class=" cu-btn bg-white oil-main-color block flex-sub lg " open-type="contact"><text class="cuIcon-service padding-right-sm"></text> 在线客服</button> -->
<!-- <button class="cu-btn block lg margin-top " @tap="delOrder">删除订单</button> -->
</view>
<view class="padding placeholder-hidden">
<view class="flex margin-bottom" v-if="order.orderStatus==0">
<button class="cu-btn block flex-sub lg bg-main-oil "
@tap="makePay">立即支付</button>
<button class="cu-btn block flex-sub lg margin-left"
@tap="cancelOrder">取消订单</button>
<view class="flex margin-bottom" v-if="order.orderStatus==0">
<button class="cu-btn block flex-sub lg bg-main-oil " @tap="makePay">立即支付</button>
<button class="cu-btn block flex-sub lg margin-left" @tap="cancelOrder">取消订单</button>
</view>
<view class="cu-btn bg-white oil-main-color block flex-sub lg" @click="makeCall">
<text class="cuIcon-service padding-right-sm">联系客服</text>
</view>
</view>
<!-- <button class=" cu-btn bg-white oil-main-color block flex-sub lg " open-type="contact"><text class="cuIcon-service padding-right-sm"></text> 在线客服</button> -->
<!-- <button class="cu-btn block lg margin-top " @tap="delOrder">删除订单</button> -->
</view>
@ -159,17 +156,17 @@
<script>
import orderApi from '@/api/oil-order.js'
import tkiQrcode from "../pages/components/tki-qrcode/tki-qrcode.vue" //
import oilSiteApi from '@/api/oil-site.js'
export default {
data() {
return {
foreground:'#000',
showQr:false,
val:'',
foreground: '#000',
showQr: false,
val: '',
id: '',
test:null,
tsets:'',
test: null,
tsets: '',
order: {}
}
},
@ -192,9 +189,9 @@
})
}
}
},
components:{
tkiQrcode
},
components: {
tkiQrcode
},
methods: {
//
@ -206,18 +203,18 @@
newQrString() {
this.getOrderQrCode()
},
getOrderQrCode(){
oilSiteApi.getOrderQrCode(this.order.orderSerialNumber).then( (res)=>{
getOrderQrCode() {
oilSiteApi.getOrderQrCode(this.order.orderSerialNumber).then((res) => {
console.log(res)
this.val = res.data
if(res.code == 40000){
this.showQr = false
}else if(res.code == 20000){
if (res.code == 40000) {
this.showQr = false
} else if (res.code == 20000) {
this.showQr = true
this.val =res.data.codeStr;
this.foreground = this.val.indexOf('SHLFC/V1')==-1?'#000':'#1A487E';
this.val = res.data.codeStr;
this.foreground = this.val.indexOf('SHLFC/V1') == -1 ? '#000' : '#1A487E';
}
} )
})
},
onCopy(id) {
uni.setClipboardData({
@ -301,7 +298,7 @@
},
onLoad(option) {
console.log('++++++++++++++++++',option)
console.log('++++++++++++++++++', option)
this.test = option.id
this.id = option.id
this.tsets = option.name
@ -314,19 +311,19 @@
}, 1000 * 60 * 3);
},
filters: {
moneyIntercept(value){
if (value){
moneyIntercept(value) {
if (value) {
console.log(value)
let valus = (parseInt(value * 100) / 100).toFixed(2)+'¥/'
let valus = (parseInt(value * 100) / 100).toFixed(2) + '¥/'
console.log(valus)
return valus
return valus
} else {
return '暂无'
}
},
moneyFormath(value) {
console.log(value)
if (value != 'xxx.x') {
console.log(value)
if (value != 'xxx.x') {
let number = value.toFixed(2)
return number
} else {
@ -334,8 +331,8 @@
}
},
moneyFormat(value) {
if (value != 'xxx.x') {
return "¥" +(Math.round(value * 100) / 100).toFixed(2)
if (value != 'xxx.x') {
return "¥" + (Math.round(value * 100) / 100).toFixed(2)
} else {
return value
}
@ -386,7 +383,7 @@
case 'WJY':
return '万金油'
case 'LV':
return '其他'
return '其他'
case 'TY':
return '团油'
case 'YDJY':
@ -398,19 +395,23 @@
}
</script>
<style scoped>.move-tops{
transform: translateY(-17px);
}
.bg-red{
background-color: #FF6700;
}
.text-centers {
text-align: center;
width: 90%;
margin: 0 auto;
border-radius: 7px;
overflow: hidden;
}
<style scoped>
.move-tops {
transform: translateY(-17px);
}
.bg-red {
background-color: #FF6700;
}
.text-centers {
text-align: center;
width: 90%;
margin: 0 auto;
border-radius: 7px;
overflow: hidden;
}
.move-top {
margin-top: -2rem;
}

@ -238,7 +238,7 @@
<view class="" v-if="activeChannelCode!='TY'">
<view class="padding-tb-xs margin-bottom text-left">
加油升数
<text class="fr">{{vlom?vlom :'' | moneyVolm}} L </text>
<text class="fr">{{vlom?'约' :''}}{{vlom?vlom :'' | moneyVolm}} L </text>
</view>
<view class=" dashed-top margin-top padding-top text-left">
加油金额

@ -6,7 +6,7 @@
</cu-custom>
<view class="">
<view class="padding-xl text-center">
<text class="text-xxl text-bold oil-main-color" v-if='type == "oil"'>
<text class="text-xxl text-bold oil-main-color" v-if='type == "oil"'>
{{order.realAmount>0?order.realAmount:'xxx.x'|moneyFormat}}
</text>
<text class="text-xxl text-bold oil-main-color" v-if='type == "urea"'>
@ -61,7 +61,8 @@
<view class="content padding-tb-sm">
<view class="text-left">
<view class="site-icon-sm">
<image src="https://xoi-support.oss-cn-hangzhou.aliyuncs.com/星油运营小程序/gr.png" mode="widthFix" width="100upx"></image>
<image src="https://xoi-support.oss-cn-hangzhou.aliyuncs.com/星油运营小程序/gr.png"
mode="widthFix" width="100upx"></image>
</view>
<text class="padding-left-sm">自营企业油卡支付 <text
v-if="item.shareCompanyQuota==0">余额{{item.balance|moneyFormat}}</text></text>
@ -107,31 +108,36 @@
</view>
</view>
</view>
<!-- 尿素 -->
<view class="cu-item" v-if='type == "urea"' @tap="ureaSelectCompanyCard(itemx)"
v-for="itemx in ureaCompanyOtherList" :key="itemx.id">
<view class="content padding-tb-sm">
<view class="text-left">
<view class="site-icon-sm">
<image :src="imgURL+'pay-qy.png'" mode="widthFix" width="100upx" v-if='itemx.companyNature =="0"'></image>
<image src="https://xoi-support.oss-cn-hangzhou.aliyuncs.com/星油运营小程序/gr.png" mode="widthFix" width="100upx" v-if='itemx.companyNature =="1"'></image>
</view>
<text class="padding-left-sm" v-if='itemx.companyNature =="0"'>外请油卡支付余额{{itemx.balance|moneyFormat}}</text>
<text class="padding-left-sm" v-if='itemx.companyNature =="1"'>企业油卡支付 {{itemx.companyNature =="1" ? itemx.shareCompanyQuota==0? '(余额:'+itemx.balance+')' :'':''}} </text>
</view>
<view class="text-sm padding-left-xl margin-left-xs">
{{itemx.name}} {{itemx.shareCompanyQuota==1?'共享额度':'非共享'}}
</view>
</view>
<view class="action">
<!-- 尿素 -->
<view class="cu-item" v-if='type == "urea"' @tap="ureaSelectCompanyCard(itemx)"
v-for="itemx in ureaCompanyOtherList" :key="itemx.id">
<view class="content padding-tb-sm">
<view class="text-left">
<view class="site-icon-sm">
<image
:src="imgURL+(card.accountCardCode == itemx.accountCardCode?'pay-xz.png':'pay-qx.png')"
mode="widthFix" width="100upx"></image>
<!-- <image :src="imgURL+'pay-qx.png'" mode="widthFix" width="100upx"></image> -->
<image :src="imgURL+'pay-qy.png'" mode="widthFix" width="100upx"
v-if='itemx.companyNature =="0"'></image>
<image src="https://xoi-support.oss-cn-hangzhou.aliyuncs.com/星油运营小程序/gr.png"
mode="widthFix" width="100upx" v-if='itemx.companyNature =="1"'></image>
</view>
<text class="padding-left-sm"
v-if='itemx.companyNature =="0"'>外请油卡支付余额{{itemx.balance|moneyFormat}}</text>
<text class="padding-left-sm" v-if='itemx.companyNature =="1"'>企业油卡支付
{{itemx.companyNature =="1" ? itemx.shareCompanyQuota==0? '(余额:'+itemx.balance+')' :'':''}}
</text>
</view>
</view>
<view class="text-sm padding-left-xl margin-left-xs">
{{itemx.name}} {{itemx.shareCompanyQuota==1?'共享额度':'非共享'}}
</view>
</view>
<view class="action">
<view class="site-icon-sm">
<image
:src="imgURL+(card.accountCardCode == itemx.accountCardCode?'pay-xz.png':'pay-qx.png')"
mode="widthFix" width="100upx"></image>
<!-- <image :src="imgURL+'pay-qx.png'" mode="widthFix" width="100upx"></image> -->
</view>
</view>
</view>
</view>
</view>
<view class=" radius my-shadow solid-top margin margin-top-0">
@ -143,47 +149,46 @@
<view class="padding" v-if='type == "oil"'>
<view class="padding-bottom-xs margin-bottom-xs dashed-bottom">
<view class="padding-tb-xs text-left" @tap="onCopy(order.orderSerialNumber)">
订单编号
订单编号
<text class="fr">{{order.orderSerialNumber?order.orderSerialNumber:''}} <text
class="cuIcon-copy padding-left-xs"></text></text>
</view>
</view>
<view class="padding-tb-xs text-left">
油站
<view class="fr">{{order.siteName?order.siteName:''}}
<!-- <text v-if="order.siteLevel" class="cu-tag text-xs tag-red" style="margin-left: 20px;">{{order.siteLevel}}</text> -->
油站
<view class="fr">{{order.siteName?order.siteName:''}}
<!-- <text v-if="order.siteLevel" class="cu-tag text-xs tag-red" style="margin-left: 20px;">{{order.siteLevel}}</text> -->
</view>
</view>
<view class="padding-tb-xs text-left">
油品油枪
油品油枪
<text
class="fr nowrap">{{order.oilsCode?order.oilsCode+' ':''}}&{{ order.gunName?order.gunName+'号枪': order.oilsBar?order.oilsBar+'号枪':'未选择油枪'}}</text>
</view>
<view class="padding-tb-xs text-left">
加油升数
<text class="fr">{{order.volume?order.volume :'xxx.x' | moneyFormath}} L</text>
加油升数
<text class="fr">{{order.volume?order.volume :'xxx.x' | moneyFormath}} L</text>
</view>
<view class="dashed-top margin-top-xs padding-top-sm">
<view class="padding-tb-xs text-left">
加油金额
加油金额
<!-- <text
class="fr">{{order.oilDiscountAmount>0?order.realAmount+order.oilDiscountAmount:order.realAmount|moneyFormat}}</text> -->
<text class="fr">{{ moneyIntercept(order.xoilAmountGun )}}</text>
<text class="fr">{{ moneyIntercept(order.xoilAmountGun )}}</text>
</view>
</view>
<view class="padding-tb-xs text-left">
星油优惠
星油优惠
<!-- order.oilDiscountAmount>0?order.oilDiscountAmount:'xxx.x'|moneyFormat -->
<text
class="text-red fr">{{ moneyIntercept(order.oilDiscountAmount)}}</text>
<text class="text-red fr">{{ moneyIntercept(order.oilDiscountAmount)}}</text>
</view>
<view class="padding-tb-xs text-left">
优惠券
优惠券
<text
class="text-red fr">{{order.couponDiscountAmount>0?order.couponDiscountAmount:'xxx.x'|moneyFormat}}</text>
</view>
<view class="padding-tb-xs text-left">
合计
合计
<text
class="text-red text-bold text-lg fr">{{order.realAmount>0? '¥'+ order.realAmount:'xxx.x'|}}</text>
</view>
@ -191,55 +196,57 @@
<view class="padding" v-if='type == "urea"'>
<view class="padding-bottom-xs margin-bottom-xs dashed-bottom">
<view class="padding-tb-xs text-left" @tap="onCopy(order.orderId)">
订单编号
订单编号
<text class="fr">{{order.orderId?order.orderId:''}} <text
class="cuIcon-copy padding-left-xs"></text></text>
</view>
</view>
<view class="padding-tb-xs text-left">
油站
<view class="fr">{{order.siteName?order.siteName:''}}
<!-- <text v-if="order.siteLevel" class="cu-tag text-xs tag-red" style="margin-left: 20px;">{{order.siteLevel}}</text> -->
油站
<view class="fr">{{order.siteName?order.siteName:''}}
<!-- <text v-if="order.siteLevel" class="cu-tag text-xs tag-red" style="margin-left: 20px;">{{order.siteLevel}}</text> -->
</view>
</view>
<view class="padding-tb-xs text-left">
加注类型
<text
class="fr nowrap">{{order.formats | ureaFormats }}</text>
</view>
加注类型
<text class="fr nowrap">{{order.formats | ureaFormats }}</text>
</view>
<view class="padding-tb-xs formats_box" v-if='order.formats == "2"'>
<view class="formats_box_list" v-for="(list,i) in order.xoilUreaOrderRelations " :key='i'>
<view class="formats_box_list_left w30">
{{list.brandName}}
</view>
<view class="formats_box_list_main w30">{{list.options}}/<text style="color: red;">X{{list.goodsQuantity}}</text> </view>
<view class="formats_box_list_main w30">{{list.options}}/<text
style="color: red;">X{{list.goodsQuantity}}</text> </view>
<view class="formats_box_list_right w30">&#165;{{list.totalPrice}}</view>
</view>
</view>
<view class="padding-tb-xs text-left" v-if='order.formats != "2"'>
加注量
<view class="padding-tb-xs text-left" v-if='order.formats != "2"'>
加注量
<text class="fr">{{order.oldRealLiter?order.oldRealLiter :'xxx.x' }}</text>
</view>
</view>
<view class="padding-tb-xs text-left">
合计
<text class="text-red text-bold text-lg fr">{{order.oldRealAmount>0? '¥'+ order.oldRealAmount:'xxx.x'|}}</text>
合计
<text
class="text-red text-bold text-lg fr">{{order.oldRealAmount>0? '¥'+ order.oldRealAmount:'xxx.x'|}}</text>
</view>
</view>
</view>
<view class="padding placeholder-hidden">
<button class="cu-btn block lg bg-main-oil" :disabled = 'isdisabled' @tap="payOrder">立即支付</button>
<button class="cu-btn block lg bg-main-oil" :disabled='isdisabled' @tap="payOrder">立即支付</button>
<button class="cu-btn margin-top block lg " @tap="cancelOrder(order.orderSerialNumber)">取消订单</button>
</view>
<view class="padding fixed-bar-bottom">
<button class="cu-btn block lg bg-main-oil" :disabled = 'isdisabled' @tap="payOrder">立即支付</button>
<button class="cu-btn block lg bg-main-oil" :disabled='isdisabled' @tap="payOrder">立即支付</button>
<button class="cu-btn margin-top block lg " @tap="cancelOrder(order.orderSerialNumber)">取消订单</button>
</view>
<view class="padding fixed-bar-bottom" v-if='type == "urea"'>
<button class="cu-btn block lg bg-main-oil" :disabled = 'isdisabled' @tap="payOrder">立即支付</button>
<button class="cu-btn block lg bg-main-oil" :disabled='isdisabled' @tap="payOrder">立即支付</button>
<button class="cu-btn margin-top block lg " @tap="ureaCancelOrder(order.orderId)">取消订单</button>
</view>
</view>
<AbnormalPopup :types='PopupType' :checkType='checkType' @hidenPopup='hidenPopup' :PopupShows='PopupShow' @getureaFinanceApi='getureaFinanceApi'></AbnormalPopup>
<AbnormalPopup :types='PopupType' :checkType='checkType' @hidenPopup='hidenPopup' :PopupShows='PopupShow'
@getureaFinanceApi='getureaFinanceApi'></AbnormalPopup>
</view>
</template>
@ -255,18 +262,18 @@
AbnormalPopup
},
data() {
return {
checkType:false,
PopupType:null,
PopupShow:false,
ureaInfo:{
accountCardCode:'',
companyId:''
return {
checkType: false,
PopupType: null,
PopupShow: false,
ureaInfo: {
accountCardCode: '',
companyId: ''
},
isdisabled:false,
showtitles:"",
isdisabled: false,
showtitles: "",
imgURL: this.global.imgURL,
order:{},
order: {},
activePay: 0,
isCompany: uni.getStorageSync('accountStatus'),
accountCardCode: '',
@ -274,43 +281,49 @@
datatime: "",
checked: '',
cooling: false,
payMethod:0,
user:uni.getStorageSync('user'),
type:'',
ureaCompanyOtherList:[],
companyNature:'',
shareCompanyQuota:''
payMethod: 0,
user: uni.getStorageSync('user'),
type: '',
ureaCompanyOtherList: [],
companyNature: '',
shareCompanyQuota: ''
}
},
onLoad(option) {
if(option.type == 'urea'){
this.order = uni.getStorageSync('ureaOrderMade')
if (option.type == 'urea') {
this.order = uni.getStorageSync('ureaOrderMade')
this.order.companyStatus = true
this.type = 'urea'
this.findUreaAccount()
}else{
} else {
let oilItem = uni.getStorageSync('oilItem')
// console.log
this.order = uni.getStorageSync('orderMade')
this.order = uni.getStorageSync('orderMade')
this.type = 'oil'
this.showtitles = oilItem.listTag
if(option.payMethod == null){
this.payMethod =oilItem.payMethod
this.showtitles = oilItem.listTag
if (option.payMethod == null) {
this.payMethod = oilItem.payMethod
// console.log(this.payMethod )
}else {
this.payMethod =option.payMethod
} else {
this.payMethod = option.payMethod
}
}
}
},
computed: {
companyList() {
if (this.isCompany) {
return this.order.companyAccounts
let companyAccounts = this.order.companyAccounts || []
let filterData = companyAccounts.filter(item => item.companyType != 5)
return filterData
}
},
companyOtherList() {
if (this.isCompany) {
return this.order.otherAccounts
// return this.order.otherAccounts
let otherAccounts = this.order.otherAccounts || []
let filterData = otherAccounts.filter(item => item.companyType != 5)
let target = this.sortParticulars(filterData,'balance')
return target
}
}
},
@ -328,19 +341,45 @@
this.accountCardCode = this.card.accountCardCode
}
},
methods: {
getureaFinanceApi(){
ureaFinanceApi.queryWhetherToHangUp(this.order.orderId).then(res=>{
if(res.data == '2'){
this.checkType = true
methods: {
sortParticulars(arr, field) {
let map = new Map()
let keys = [],
values = [],
target = []
arr.forEach(item => {
map.set(item, item[field])
})
for (let key of map.keys()) {
keys.push(key)
}
for (let value of map.values()) {
values.push(value)
}
values.sort((a,b)=>{return a - b})
values.reverse()
values.forEach(value => {
keys.forEach(key => {
if (map.get(key) == value) {
target.push(key)
map.set(key, new Date().getTime())
}
})
})
return target
},
getureaFinanceApi() {
ureaFinanceApi.queryWhetherToHangUp(this.order.orderId).then(res => {
if (res.data == '2') {
this.checkType = true
}
})
},
hidenPopup(e){
hidenPopup(e) {
console.log(e)
this.PopupShow =e
this.PopupShow = e
},
findUreaAccount(){
findUreaAccount() {
ureaFinanceApi.findUreaAccount(this.order.driverId).then(res => {
console.log(res)
this.ureaCompanyOtherList = res.data
@ -353,7 +392,7 @@
return timestampDeadline
},
ureaCancelOrder(id) {
console.log(id)
console.log(id)
ureaFinanceApi.cancelTheOrder(id).then(res => {
console.log(res)
if (res.code == 20000) {
@ -365,7 +404,7 @@
setTimeout(() => {
uni.navigateBack(2)
}, 1000)
}
})
},
@ -393,17 +432,17 @@
this.card = card
this.checked = 'person'
},
ureaSelectCompanyCard(card){
ureaSelectCompanyCard(card) {
this.ureaInfo.accountCardCode = card.accountCardCode
this.ureaInfo.companyId = card.companyId
this.card = card
this.checked = card.accountCardCode
this.accountCardCode = card.accountCardCode
this.companyNature = card.companyNature
this.shareCompanyQuota =card.shareCompanyQuota
this.shareCompanyQuota = card.shareCompanyQuota
},
selectCompanyCard(card) {
console.log(card)
console.log(card)
this.card = card
this.checked = card.accountCardCode
this.accountCardCode = card.accountCardCode
@ -415,8 +454,8 @@
setTimeout(() => {
this.cooling = false
}, 5000)
if (this.activePay == 0) {
this.selfCardPay()
if (this.activePay == 0) {
this.selfCardPay()
} else if (this.activePay == 2) {
this.selfWxPay()
}
@ -426,7 +465,7 @@
icon: 'none'
})
this.isdisabled = false
}
}
},
selfWxPay() {
let payData = {
@ -444,7 +483,7 @@
provider: 'wxpay',
...res.data.baseWxOrderVo,
success: (res) => {
this.isdisabled=false
this.isdisabled = false
// this.getPayStatus(this.outTradeNo)
// this.getLastMoney()
// this.getCards()
@ -453,7 +492,8 @@
title: res.msg
})
uni.redirectTo({
url: '/BagStation/pages/makeOrder/payResult?status=success&&payMethod='+this.payMethod,
url: '/BagStation/pages/makeOrder/payResult?status=success&&payMethod=' +
this.payMethod,
fail: (err) => {
// console.log(err)
}
@ -490,14 +530,14 @@
this.isdisabled = false
return false
}
if (this.card.balance < this.order.realAmount&& this.card.shareCompanyQuota!=1) {
if (this.card.balance < this.order.realAmount && this.card.shareCompanyQuota != 1) {
console.log(this.type)
if(this.type =='urea'){
if (this.type == 'urea') {
this.PopupShow = true
this.PopupType = 2
this.isdisabled = false
return
}else if(this.type =='oil'){
} else if (this.type == 'oil') {
uni.showToast({
title: '该油卡余额不足',
icon: 'none'
@ -505,11 +545,11 @@
this.isdisabled = false
return false
}
}
let payData
if(this.type == 'oil'){
payData = {
if (this.type == 'oil') {
payData = {
...this.card,
"orderSerialNumber": this.order.orderSerialNumber, //String
"payChannel": "BALANCE_PAYMENT", //String BALANCE_PAYMENT
@ -525,13 +565,14 @@
})
setTimeout(() => {
uni.redirectTo({
url: '/BagStation/pages/makeOrder/payResult?status=success&&payMethod='+this.payMethod,
url: '/BagStation/pages/makeOrder/payResult?status=success&&payMethod=' +
this.payMethod,
fail: (err) => {
// console.log(err)
}
})
}, 1000)
} else {
this.isdisabled = false
uni.showToast({
@ -541,32 +582,33 @@
setTimeout(() => {
let msg = res.msg
uni.redirectTo({
url: `/BagStation/pages/makeOrder/payResult?status=fail&&errMsg=${msg}payMethod=`+this.payMethod
url: `/BagStation/pages/makeOrder/payResult?status=fail&&errMsg=${msg}payMethod=` +
this.payMethod
})
}, 1000)
}
})
}else if (this.type ='urea'){
payData={
belongCompanyId:this.ureaInfo.companyId,
driverId:this.user.id,
accountCardCode:this.ureaInfo.accountCardCode,
driverPhone:this.user.userPhone,
oldRealAmount:this.order.oldRealAmount,
vehicleNo:this.order.vehicleNo,
orderId:this.order.orderId,
driverName:this.order.driverName,
userSource:'urea',
formats:this.order.formats,
oilCardNature:this.companyNature,
companyShared:this.shareCompanyQuota
} else if (this.type = 'urea') {
payData = {
belongCompanyId: this.ureaInfo.companyId,
driverId: this.user.id,
accountCardCode: this.ureaInfo.accountCardCode,
driverPhone: this.user.userPhone,
oldRealAmount: this.order.oldRealAmount,
vehicleNo: this.order.vehicleNo,
orderId: this.order.orderId,
driverName: this.order.driverName,
userSource: 'urea',
formats: this.order.formats,
oilCardNature: this.companyNature,
companyShared: this.shareCompanyQuota
}
ureaFinanceApi.orderPay(payData).then(res => {
console.log(res)
if(res.code == 20000){
uni.setStorageSync('ureaOrderMade',res.data)
if(res.data.formats == '2'){
if (res.code == 20000) {
uni.setStorageSync('ureaOrderMade', res.data)
if (res.data.formats == '2') {
uni.redirectTo({
url: '/BagStation/orderDetail/orderDetailUrea?type=orderPay',
fail: (err) => {}
@ -576,14 +618,14 @@
_that.PopupShow = true
_that.PopupType = 5
this.isdisabled = false
} else if(res.code == 40000 && res.msg == '余额不足'){
} else if (res.code == 40000 && res.msg == '余额不足') {
_that.PopupShow = true
_that.PopupType = 2
this.isdisabled = false
}
console.log(res)
})
}
}
},
onCopy(id) {
uni.setClipboardData({
@ -598,28 +640,28 @@
}
},
filters: {
ureaFormats(value){
if(value == 1){
ureaFormats(value) {
if (value == 1) {
return '加注站'
}else{
} else {
return '桶装'
}
},
moneyFormath(value) {
console.log(value)
if (value != 'xxx.x') {
console.log(value)
if (value != 'xxx.x') {
let number = value.toFixed(2)
return number
} else {
return value
}
},
moneyFormat(value) {
if (value != 'xxx.x') {
let realAmount = Math.round(value * 100) / 100;
return realAmount
} else {
return value
moneyFormat(value) {
if (value != 'xxx.x') {
let realAmount = Math.round(value * 100) / 100;
return realAmount
} else {
return value
}
}
}
@ -627,31 +669,34 @@
</script>
<style scoped>
.w30{
.w30 {
width: 30%;
flex: 0 0 auto;
text-align: center;
font-weight: 700;
font-size: 28rpx;
}
.formats_box{
.formats_box {
display: flex;
justify-content: space-between;
align-items: center;
align-items: center;
padding: 2%;
box-sizing: border-box;
flex-direction: column;
}
.formats_box_list{
.formats_box_list {
display: flex;
justify-content: space-around;
align-items: center;
margin-bottom: 3%;
font-size: 30rpx;
color: #333;
align-items: center;
align-items: center;
width: 100%;
}
}
.site-icon-sm {
width: 40upx;
vertical-align: middle;

@ -52,28 +52,28 @@
<view class="padding" style="padding-bottom: 200px;">
<view class="padding-bottom-xs margin-bottom-xs dashed-bottom">
<view class="padding-tb-xs text-left" @tap="onCopy(order.orderSerialNumber)">
订单编号
订单编号
<text class="fr">{{order.orderSerialNumber?order.orderSerialNumber:''}} <text
class="cuIcon-copy padding-left-xs"></text></text>
</view>
</view>
<view class="padding-tb-xs text-left">
油站
油站
<text class="fr">{{order.siteName?order.siteName:''}}</text>
</view>
<view class="padding-tb-xs text-left">
油品油枪
油品油枪
<text class="fr nowrap">
{{order.oilsCode?order.oilsCode+' ':''}}&{{ order.gunName?order.gunName+'号枪': order.oilsBar?order.oilsBar+'号枪':'未选择油枪'}}
</text>
</view>
<view class="padding-tb-xs text-left">
加油升数
<text class="fr">{{order.volume?order.volume :'未输入' | moneyFormath}} L</text>
加油升数
<text class="fr">{{order.volume?'约':''}}{{order.volume?order.volume :'未输入' | moneyFormath}} L</text>
</view>
<view class="padding-tb-xs text-left">
加油员
加油员
<text class="fr">{{order.siteUserName}}</text>
</view>
<!-- <view class="padding-tb-xs flex text-left">
@ -87,40 +87,40 @@
</view> -->
<view class="dashed-top margin-top-xs padding-top-sm">
<view class="padding-tb-xs text-left">
加油金额
加油金额
<!-- {{order.oilDiscountAmount>0?order.realAmount+order.oilDiscountAmount:order.realAmount|moneyFormat}} -->
<!-- <text class="fr">{{order.realPriceAmount |moneyFormat}}</text> -->
<text class="fr">{{order.xoilAmountGun |moneyFormat}}</text>
<text class="fr">{{order.xoilAmountGun |moneyFormat}}</text>
</view>
</view>
<view class="padding-tb-xs text-left">
星油优惠
星油优惠
<text
class="text-red fr">{{order.oilDiscountAmount>0?order.oilDiscountAmount:'xxx.x'|moneyFormat}}</text>
</view>
<view class="padding-tb-xs text-left">
优惠券
优惠券
<text
class="text-red fr">{{order.couponDiscountAmount>0?order.couponDiscountAmount:'xxx.x'|moneyFormat}}</text>
</view>
<view class="padding-tb-xs text-left">
合计
合计
<text
class="text-red text-bold text-lg fr">{{order.realAmount>0?'¥'+order.realAmount:'xxx.x'}}</text>
</view>
<view class="dashed-top margin-top-xs padding-top-sm">
<view class="padding-tb-xs text-left">
加油车牌
加油车牌
<text class=" fr">{{order.plateNumber}}</text>
</view>
</view>
<view class="padding-tb-xs text-left">
加油司机
加油司机
<text class=" fr">{{user.customerCode}}</text>
</view>
<view class="padding-tb-xs text-left">
油卡性质
油卡性质
<!-- <text class=" fr">{{order.couponDiscountAmount>0?order.couponDiscountAmount:'xxx.x'|moneyFormat}}</text> -->
<text class="fr">企业</text>
</view>

@ -55,10 +55,10 @@
<view class="margin margin-top-lg radius bg-white">
<view class="padding text-center">
<text class="text-black">
请提醒加油员使用
请提醒加油员使用
<text class="text-red">
{{showtitles}}
</text>
</text>
进行订单核销
</text>
</view>
@ -125,7 +125,7 @@
</view>
<view class="text-right flex-sub oil-main-color">
<text v-if="activeCard.shareCompanyQuota==1">
<text v-if="activeCard && activeCard.shareCompanyQuota==1">
共享余额
</text>
<text v-else>
@ -183,11 +183,11 @@
// console.log('siteQr',option)
let oilItem = uni.getStorageSync('oilItem')
// console.log(oilItem)
this.showtitles = oilItem.listTag
this.showtitles = oilItem.listTag
},
data() {
return {
showtitles:"",
showtitles: "",
isCompany: uni.getStorageSync('accountStatus'),
activeCardIndex: 0,
showThreeSites: false,
@ -205,7 +205,7 @@
posName: '',
secondChannelCode: '',
timeinterval: '',
otherUser:'',
otherUser: '',
customerId: uni.getStorageSync('user').userCode
}
},
@ -235,11 +235,10 @@
},
cards() {
if (this.cardList.length) {
let cards = []
// console.log(this.cardList,'---------------------')
this.cardList.forEach((e) => {
// cards.push(e.accountCardCode)
e.companyName = e.companyName + '('+( e.companyType==0?`柴油账户:${e.balance}`:e.companyType==1?`汽油账户:${e.balance}`:e.companyType==2?`LNG账户:${e.balance}`:`尿素:${e.balance}`) + ')'
e.companyName = e.companyName + '(' + (e.companyType == 0 ? `柴油账户:${e.balance}` : e
.companyType == 1 ? `汽油账户:${e.balance}` : e.companyType == 2 ?
`LNG账户:${e.balance}` : `尿素:${e.balance}`) + ')'
})
return this.cardList
}
@ -251,12 +250,11 @@
onLoad(option) {
let oilItem = uni.getStorageSync('oilItem')
let otherUserInfo = uni.getStorageSync('otherUserInfo')
if(otherUserInfo){
if (otherUserInfo) {
this.otherUser = 'kl'
}
this.otherUserInfo = otherUserInfo
// console.log('+++++',option)
this.showtitles = oilItem.listTag
this.showtitles = oilItem.listTag
this.siteId = option.siteId
this.activeChannelCode = option.activeChannelCode
this.secondChannelCode = option.secondChannelCode
@ -267,6 +265,40 @@
this.getSiteInfo(option.siteId)
},
methods: {
sortHandler(arr) {
let internalArr = arr.filter(item => item.oilCardType == 2)
let externalArr = arr.filter(item => item.oilCardType == 3)
// let internalTarget = this.sortParticulars(internalArr, 'shareCompanyQuota')
let externalTarget = this.sortParticulars(externalArr, 'balance')
if (internalArr.length || externalTarget.length) return [...internalArr, ...externalTarget]
else return arr
},
sortParticulars(arr, field) {
let target = []
let map = new Map()
let keys = [],
values = []
arr.forEach(item => {
map.set(item, item[field])
})
for (let key of map.keys()) {
keys.push(key)
}
for (let value of map.values()) {
values.push(value)
}
values.sort((a,b)=>{return a - b})
values.reverse()
values.forEach(value => {
keys.forEach(key => {
if (map.get(key) == value) {
target.push(key)
map.set(key, new Date().getTime())
}
})
})
return target
},
qrR() {
},
@ -284,16 +316,8 @@
oilCardNature: activeCard.oilCardType, //String
accountCardCode: activeCard.accountCardCode //String
}
// console.log('',data2)
qrApi.getOilQrCode(data2).then(res => {
// console.log('+',res,'+')
if (res.code === 20000) {
// console.log(res.data)
// console.log(this.otherUser,'++++++++++++++++++++')
// if(this.otherUser = 'kl'){
// this.val = res.data.codeStr+"&"+this.otherUser
// return
// }
this.val = res.data.codeStr
}
})
@ -313,26 +337,21 @@
})
},
getUserCard() {
// console.log('%c look that ','color:red;font-size:50px')
// console.log(uni.getStorageSync('oilItem'),'*-*-*-*-')
accountApi.getNewUserAccount({siteId:uni.getStorageSync('oilItem').siteId}).then(res => {
accountApi.getNewUserAccount({
siteId: uni.getStorageSync('oilItem').siteId
}).then(res => {
if (res.code == 20000) {
this.cardList = res.data
if (this.cardList.length > 0) {
// this.getMoneyDetail(this.cardList[0])
}
if (res.data.length) {
let staging = res.data.filter(item => item.companyType != 5)
let target = this.sortHandler(staging)
this.cardList = target
} else this.cardList = []
}
})
},
toSiteDetail(id) {
uni.redirectTo({
url: `/BagStation/pages/stationDetail/stationDetail?siteId=${id}&customerJump=false`,
fail: (err) => {
// console.log(err)
},
success: () => {
// console.log('err')
}
url: `/BagStation/pages/stationDetail/stationDetail?siteId=${id}&customerJump=false`
})
},
openPlugin() {

Loading…
Cancel
Save