111
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

<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>