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.
542 lines
15 KiB
542 lines
15 KiB
<template> |
|
<view class="oliout"> |
|
<cu-custom style="" class="main-totextbar bg-main-oil" :backCard = 'true' :isBack="true" bgColor="bg-main-oil"> |
|
<block slot="backText">返回</block> |
|
<block slot="content">油卡转出</block> |
|
</cu-custom> |
|
<view class="olibgclass"></view> |
|
<view :style="'background-image: url('+imgURL+ ');'" class="new_card"> |
|
<view class="new_card_flexone"> |
|
<text>外请公司油卡</text> |
|
</view> |
|
<view class="new_card_flexone"> |
|
<text style="font-size: 44rpx; ">{{handle(cardData.accountCardCode)}}</text> |
|
</view> |
|
<view style="" class="new_card_flexone company"> |
|
<text>{{cardData.companyName}}</text> |
|
</view> |
|
<view style="position: relative;" class="new_card_flexone"> |
|
<text style="">账户余额: <text style="font-size: 36rpx;font-weight: 600;">{{cardData.balance}}</text> |
|
元</text> |
|
</view> |
|
</view> |
|
<view class="card_body" style=""> |
|
<view class="company_phone" style=""> |
|
<view class="new_input"> |
|
<text style="margin-right: 10rpx;" class="cuIcon-search"></text> |
|
<input v-model="seachPhone" style="width: 80%;" placeholder="请输入对方手机号" type="number" /> |
|
</view> |
|
<text @click="searchFn">搜索</text> |
|
</view> |
|
<view> |
|
<view v-if="tip" class="card_tiop">请认真核对对方手机号码姓名,一旦转出无法追回</view> |
|
<view v-if="!tip" style="color: red;" class="card_tiop">请输入正确手机号格式</view> |
|
<view class="name_card" style=""> |
|
<view v-if="giveData!==null" class="company_user" |
|
:style="'background-image: url('+(giveData.headPhoto?giveData.headPhoto:'https://publicxingyou.oss-cn-hangzhou.aliyuncs.com/mp-xq/default-avator.png')+ ');'"> |
|
</view> |
|
<view v-if="giveData!==null" style="margin-left: 20rpx;"> |
|
<view class="newcard_title">{{giveData.userName}} <text |
|
v-if="giveData.createUser">({{giveData.createUser}})</text> </view> |
|
<view>{{giveData.phone}}</view> |
|
</view> |
|
<view style="margin: 0 auto; color:#999999;" v-if="giveData===null">{{seachText}}</view> |
|
</view> |
|
<view style="padding: 15rpx 15rpx; 0 15rpx"> |
|
<view class="newcard_title">转出金额</view> |
|
<view style="display: flex; align-items: center; "> |
|
<text style="font-size: 80rpx;"> |
|
¥ |
|
</text> |
|
<input v-model="sendData.occurAmount" class="card_input" style=" margin-left: 10rpx;" |
|
:placeholder=" '最多可以转出'+ cardData.balance + '元'" type="digit" /> |
|
</view> |
|
</view> |
|
</view> |
|
</view> |
|
<view style="width: 90vw; margin: 0 auto;"> |
|
<view class="newcard_title zc"> |
|
转出说明 |
|
<view class="tiao"></view> |
|
</view> |
|
<view class="text" style="">1、转出油费实时到账,本页非任何法律文件,转出钱请认真核对 |
|
转出人,转出金额,如遇纠纷问题,请联系当事人解决处理。 </view> |
|
</view> |
|
<button @click="open" class="oliout_butten" style="">立即转出</button> |
|
<!-- 弹窗 uini ui --> |
|
<uni-popup @change='changefn' ref="popup" type="center"> |
|
<view v-if="giveData!==null" class="poput_tip"> |
|
<view :style="'background-image: url('+popupbg+ ');'" class="popup_header">短信身份验证</view> |
|
<view style="margin: 20rpx auto;width: 90%;">转出验证:本次转出需要短信确认,验证码 已发送至您的手机 {{phoneHandle(this.phone)}}</view> |
|
<xt-verify-code class="code" v-model="verifyCode" @confirm="confirm"></xt-verify-code> |
|
<button @click="send" class="oliout_butten" |
|
style="width:60%; border-radius: 50rpx;">{{time===0?'重新发送验证码':time+'S'}} |
|
</button> |
|
</view> |
|
</uni-popup> |
|
<uni-popup ref="popupt" type="center"> |
|
<view class="poput_tip"> |
|
<view :style="'background-image: url('+popupbg+ ');'" class="popup_header">温馨提示</view> |
|
<view style="margin: 20rpx auto;width: 90%;text-align: center;"> |
|
<view class="container_img"> |
|
<image class="success_img" src="../../../static/img/success.png"></image> |
|
</view> |
|
转出成功! |
|
</view> |
|
<button @click="close" class="oliout_butten" style="width:60%; border-radius: 50rpx;">确认</button> |
|
</view> |
|
</uni-popup> |
|
<uni-popup ref="dialog" type="dialog"> |
|
<uni-popup-dialog mode="base" message="成功消息" :duration="2000" :before-close="true" @close="dialogClose" |
|
@confirm="dialogClose">{{errText}}</uni-popup-dialog> |
|
</uni-popup> |
|
<!-- <uni-popup ref="tip" type="dialog"> |
|
<uni-popup-dialog mode="base" message="成功消息" :duration="2000" :before-close="true" @close="dialogClose" |
|
@confirm="dialogClose">发送成功</uni-popup-dialog> |
|
</uni-popup> --> |
|
</view> |
|
</template> |
|
|
|
<script> |
|
import accountApi from '@/api/account.js' |
|
export default { |
|
data() { |
|
return { |
|
imgURL: 'https://xoi-support.oss-cn-hangzhou.aliyuncs.com/web/cuscomtrac/card.png', |
|
popupbg: 'https://xoi-support.oss-cn-hangzhou.aliyuncs.com/web/cuscomtrac/popupbg.png', |
|
seachText: "", |
|
verifyCode: '', |
|
value: '', |
|
time: 0, |
|
seachPhone: '', |
|
userPhone: '', |
|
balance: 980.50, |
|
errText:'', |
|
cardData: '', |
|
giveData: null, |
|
tip: true, |
|
phone:'', |
|
sendData: { |
|
giveCustomerId: '', //赠送司机ID (与givePhone二选一必填) |
|
givePhone: '', //赠送司机手机(与giveCustomerId二选一必填) |
|
companyId: '', //公司id |
|
code: '', //短信验证码 |
|
verifyCodeToken: '', //验证码Token |
|
occurAmount: '' ,//交易金额(不得小于定义最小金额), |
|
createSource:'XOIL_DRIVER_WECHAT_APPLET', |
|
billType:'OIL_DONATION', |
|
payerCustomerId:'' |
|
} |
|
} |
|
}, |
|
onLoad(card) { |
|
if (card) { |
|
this.cardData = JSON.parse(card.card) |
|
console.log(this.cardData,'-------------------') |
|
} |
|
this.phone = uni.getStorageSync('user').userPhone |
|
}, |
|
methods: { |
|
/* |
|
this.$refs.(弹窗绑定的ref).open() 打开 |
|
this.$refs.(弹窗绑定的ref).close() 关闭 |
|
*/ |
|
//校验手机号 |
|
isPoneAvailable(poneInput) { |
|
var myreg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/; |
|
if (!myreg.test(poneInput)) { |
|
if (poneInput == '') { |
|
this.tip = true |
|
} |
|
return false; |
|
} else { |
|
this.tip = true |
|
return true; |
|
} |
|
}, |
|
//搜索函数 |
|
searchFn() { |
|
/* |
|
this.giveData绑定的值 |
|
this.giveData.globalEnabl 0 是已停用 |
|
this.seachText 提示文字 |
|
this.seachPhone 搜索的手机号 |
|
*/ |
|
//校验手机号 |
|
if (this.isPoneAvailable(this.seachPhone)) { |
|
//搜索前清空 |
|
this.giveData = null |
|
//手机号没问题请求接口 |
|
accountApi.getByPhone(this.seachPhone).then(res => { |
|
console.log(res, '---') |
|
//赠送对象赋值 |
|
if (res.data === null) { |
|
//如果返回的是null 在下一步发送转账请求的时候 后台会自动创建 一个账号 前台做一个假数据 给赠送对象一些默认值 |
|
this.giveData = {} |
|
this.giveData.userName = '将为您创建一个新的账号' |
|
this.giveData.phone = this.seachPhone |
|
this.giveData.headPhoto = |
|
'https://publicxingyou.oss-cn-hangzhou.aliyuncs.com/mp-xq/default-avator.png' |
|
} else { |
|
// 如果有数据 给数据绑定的值 赋值,设置提示 如果停用,清空搜索对象,修改提示文字 |
|
this.giveData = res.data |
|
if (this.giveData.globalEnable === 0) { |
|
this.seachText = '用户已停用' |
|
this.giveData = null |
|
} |
|
else { |
|
this.seachText = '亲暂无搜索记录哦~~' |
|
} |
|
} |
|
}) |
|
} else { |
|
//如果手机号校验不通过 清空搜索对象 |
|
this.giveData = null |
|
this.tip = false |
|
} |
|
}, |
|
//卡号数据格式处理函数 |
|
handle(e) { |
|
return e.replace(/(.{4})/g, '$1 ') |
|
}, |
|
//手机号处理函数 |
|
phoneHandle(e) { |
|
return e.substr(0,3)+"****"+e.substr(7); |
|
}, |
|
//关闭弹窗函数 |
|
dialogClose() { |
|
this.$refs.dialog.close() |
|
}, |
|
//监听弹窗状态函数 |
|
changefn(e) { |
|
console.log(e, '监听') |
|
}, |
|
//开始记时函数 |
|
timefn() { |
|
/* |
|
this.time 时间值 |
|
this.time -- |
|
*/ |
|
if (this.time !== 0) { |
|
this.time-- |
|
setTimeout(() => { |
|
this.timefn() |
|
}, 1000) |
|
} |
|
}, |
|
//发送验证码函数 |
|
send() { |
|
//如果计时器不等于 0 back 否则进入下一步 |
|
if (this.time === 0) { |
|
this.verifyCode = '' |
|
this.sendData.verifyCodeToken='' |
|
let phone = uni.getStorageSync('user').userPhone |
|
// 调用接口 |
|
accountApi.giveCard({ |
|
phone: phone |
|
}).then(res => { |
|
// 接口返回2000 正常 表明验证码已经发送 |
|
// if (res.code === 20000) { |
|
// 开启设置计时器时间 |
|
console.log(res,'验证') |
|
this.time = 60 |
|
//获取验证码token |
|
this.sendData.verifyCodeToken = res.data.verifyCodeToken |
|
// 开启计时器 |
|
this.timefn() |
|
// 打开提示 |
|
this.$refs.popup.open('center') |
|
// }else{ |
|
// this.$refs.popup.open('center') |
|
// } |
|
}) |
|
|
|
} else { |
|
uni.showToast({ |
|
title: '请等待'+this.time+'秒后再转账', |
|
icon: "none" |
|
}) |
|
return |
|
} |
|
}, |
|
// 校验 验证码 发送转账请求 |
|
givefn(e) { |
|
/* |
|
userData : 登录用户数据; |
|
giveData : 转出对象参数; |
|
cardData:卡参数 |
|
拿到需要的值 companyId accountCardCode code |
|
拷贝一份 发送的参数 因为不拷贝一份数据,第二次会报错 |
|
合并数据 |
|
回显数据 |
|
*/ |
|
console.log(e,'givefn') |
|
let userData = uni.getStorageSync('user') |
|
console.log(this.giveData, '转出对象参数') |
|
console.log(userData, '用户数据参数') |
|
console.log(this.cardData, '卡参数') |
|
// 拷贝 |
|
let sen = JSON.parse(JSON.stringify(this.sendData)); |
|
// 合并数据 |
|
({companyId:sen.companyId,accountCardCode:sen.accountCardCode} = this.cardData); |
|
({id:sen.payerCustomerId}=userData); |
|
// 数据key的操作 |
|
if(this.giveData.id===undefined){ |
|
sen.givePhone = this.giveData.phone |
|
delete sen.giveCustomerId |
|
}else{ |
|
sen.giveCustomerId = this.giveData.id |
|
delete sen.givePhone |
|
} |
|
console.log('处理好的对象',sen) |
|
accountApi.oilCustomerAccountRecord(sen).then(res=>{ |
|
if(res.code===20000){ |
|
this.$refs.popup.close() |
|
this.$refs.popupt.open('center') |
|
this.time=0 |
|
accountApi.getUserAccount().then(res=>{ |
|
// 回显 |
|
res.data.forEach(itme=>{ |
|
if(this.cardData.id===itme.id){ |
|
this.cardData = Object.assign(this.cardData,itme) |
|
} |
|
}) |
|
}) |
|
} |
|
}) |
|
// this.sendData.code = e |
|
// this.sendData.companyId = this.cardData.companyId |
|
// this.giveData |
|
// |
|
}, |
|
//打开弹窗 转number |
|
open() { |
|
/* |
|
this.sendData.occurAmount 交易金额(不得小于定义最小金额) |
|
this.giveData 转出对象参数 |
|
判断 金额不能为空,金额为数字,金额不为为0,金额不能大于余额,转出人不能为空 |
|
this.errText 报错提示 |
|
*/ |
|
console.log( Number(this.sendData.occurAmount)) |
|
if(this.sendData.occurAmount === ''|| Number(this.sendData.occurAmount)<5){ |
|
this.errText = '转出金额不能为空或不能低于五元' |
|
this.$refs.dialog.open() |
|
return |
|
} |
|
if(isNaN(Number(this.sendData.occurAmount))){ |
|
this.errText = '请输入正确金额' |
|
this.$refs.dialog.open() |
|
return |
|
} |
|
if(Number(this.cardData.balance)<Number(this.sendData.occurAmount)){ |
|
this.errText = '转出金额不能大于卡余额' |
|
this.$refs.dialog.open() |
|
return |
|
} |
|
if(this.giveData == null){ |
|
this.errText = '转出人不能为空' |
|
this.$refs.dialog.open() |
|
return |
|
} |
|
if(this.seachPhone!==this.giveData.phone){ |
|
this.errText = '检测到搜索手机号有变动,请先确认转出人' |
|
this.$refs.dialog.open() |
|
this.searchFn() |
|
return |
|
} |
|
//条件符合转number |
|
this.sendData.occurAmount = Number(this.sendData.occurAmount) |
|
// 打开发送验证码弹窗 |
|
this.send() |
|
|
|
}, |
|
//验证码填写完毕的回调 |
|
confirm(e) { |
|
// this.givefn(e) |
|
console.log('confirm',e) |
|
if(this.sendData.verifyCodeToken===''){ |
|
this.verifyCode='' |
|
return |
|
}else{ |
|
this.sendData.code = e |
|
this.givefn(e) |
|
} |
|
|
|
}, |
|
//关闭弹窗 |
|
close() { |
|
this.$refs.popupt.close() |
|
} |
|
} |
|
} |
|
</script> |
|
|
|
<style> |
|
.poput_tip { |
|
width: 85vw; |
|
height: 40vh; |
|
background-color: #F8F8F8; |
|
border-radius: 15rpx; |
|
overflow: hidden; |
|
} |
|
|
|
.success_img { |
|
height: 100%; |
|
width: 100%; |
|
} |
|
|
|
.container_img { |
|
height: 100rpx; |
|
width: 100rpx; |
|
overflow: hidden; |
|
border-radius: 50%; |
|
margin: 0 auto; |
|
margin-top: 50rpx; |
|
margin-bottom: 25rpx; |
|
} |
|
|
|
.xt__verify-code .xt__input-ground .xt__box-box.data-v-e4b72d00 { |
|
height: 100rpx !important; |
|
} |
|
|
|
.xt__verify-code { |
|
width: 90% !important; |
|
margin: 0 auto !important; |
|
|
|
} |
|
|
|
.popup_header { |
|
height: 20%; |
|
width: 100%; |
|
background-color: #FE0505; |
|
color: white; |
|
display: flex; |
|
justify-content: center; |
|
align-items: center; |
|
background-size: 100% 30vh; |
|
} |
|
|
|
.text { |
|
color: #666666; |
|
font-size: 23rpx; |
|
margin-top: 15rpx; |
|
} |
|
|
|
.oliout_butten { |
|
width: 90vw; |
|
margin: 0 auto; |
|
background-color: #FE0505; |
|
margin-top: 60rpx; |
|
color: #F0F0F0; |
|
} |
|
|
|
.card_input { |
|
width: 80%; |
|
height: 80rpx; |
|
font-size: 40rpx; |
|
font-weight: 600; |
|
} |
|
|
|
.company_user { |
|
width: 80rpx; |
|
height: 80rpx; |
|
background-color: #FF6D6E; |
|
border-radius: 50rpx; |
|
background-size: 100% 100%; |
|
} |
|
|
|
.company_phone { |
|
display: flex; |
|
align-items: center; |
|
justify-content: space-around; |
|
} |
|
|
|
.company { |
|
display: flex; |
|
justify-content: space-between; |
|
} |
|
|
|
.oliout .bg-main-oil { |
|
background-color: #FE0505 !important; |
|
} |
|
|
|
.name_card { |
|
display: flex; |
|
height: 250rpx; |
|
align-items: center; |
|
padding: 15rpx; |
|
border-bottom: 1px solid #F0F0F0; |
|
} |
|
|
|
.tiao { |
|
height: 5px; |
|
width: 100%; |
|
background: -webkit-linear-gradient(left, rgb(254, 5, 5, 1), rgb(254, 5, 5, .2), rgb(254, 5, 5, 0)); |
|
} |
|
|
|
.zc { |
|
width: max-content; |
|
/* border-image: linear-gradient(to left, rgb(254,5,5,0),rgb(254,5,5,.2),rgb(254,5,5,1)) 1; */ |
|
|
|
} |
|
|
|
.newcard_title { |
|
font-size: 30rpx; |
|
font-weight: 600; |
|
} |
|
|
|
.card_tiop { |
|
border-bottom: 1px solid #F0F0F0; |
|
padding: 20rpx 15rpx; |
|
color: #999999; |
|
font-size: 25rpx; |
|
} |
|
|
|
.card_body { |
|
width: 90vw; |
|
margin: 30rpx auto; |
|
border: 1px solid #F0F0F0; |
|
border-radius: 20rpx; |
|
box-shadow: 0 0 5px 3px #F0F0F0; |
|
padding: 25rpx; |
|
} |
|
|
|
.new_input { |
|
width: 80%; |
|
display: flex; |
|
align-items: center; |
|
border: 1px solid #f0f0f0; |
|
padding: 15rpx; |
|
} |
|
|
|
.new_card_flexone { |
|
width: 100%; |
|
height: max-content; |
|
} |
|
|
|
.new_card { |
|
width: 90vw; |
|
height: 20vh; |
|
position: relative; |
|
background-color: #FE0505; |
|
margin: 0 auto; |
|
margin-top: 50rpx; |
|
z-index: 99; |
|
background-size: 100% 100%; |
|
background-repeat: no-repeat; |
|
border-radius: 50rpx; |
|
display: flex; |
|
flex-wrap: wrap; |
|
padding: 40rpx; |
|
color: #FFFFFF; |
|
} |
|
|
|
.olibgclass { |
|
position: absolute; |
|
z-index: 1; |
|
background-color: #FE0505; |
|
width: 100vw; |
|
height: 12vh; |
|
border-radius: 0 0 35% 35%; |
|
} |
|
</style>
|
|
|