jinjian1.1/pages/mine/auth.vue

585 lines
18 KiB
Vue
Raw Permalink 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>
<view class="wrap" v-if="merchInfo.state==30">
<u-form ref="uForm">
<u-form-item label-position="left" label="商户名称" label-width="190">
<u-input v-model="authInfo.storeName" disabled type="text"></u-input>
</u-form-item>
<u-form-item label-position="left" v-if="authInfo.mercType!=2" label="联系人类型" label-width="190">
<u-radio-group shape="square" v-model="authInfo.merContactType" size='30' iconSize='26'>
<u-radio v-for="(item, index) in merContactTypeList" :key="index" :name="item.name">
{{item.label}}
</u-radio>
</u-radio-group>
</u-form-item>
<u-form-item label-position="left" v-if="authInfo.mercType==2" label="是否有门店" label-width="190">
<u-radio-group shape="square" v-model="authInfo.managementType" size='30' iconSize='26'>
<u-radio v-for="(item, index) in shopList" :key="index" :name="item.name">
{{item.label}}
</u-radio>
</u-radio-group>
</u-form-item>
<u-form-item label-position="left" label="联系人证件号" label-width="190">
<u-input v-model="authInfo.contactCorpId" type="text"></u-input>
</u-form-item>
<u-form-item label-position="left" label="联系人手机号" label-width="190">
<u-input v-model="authInfo.contactsTel" type="text"></u-input>
</u-form-item>
<u-form-item label="身份证开始日期" v-if="isCardShow" prop="idcard_back" labelWidth="290">
<view class="" @click="id_start_date=true">
<u--input v-model="authInfo.contIdValidDateBegin" disabled placeholder='请选择开始日期'
:placeholder-style="placeholderStyle" />
</view>
<u-popup :show="id_start_date" @close="closeTimeID">
<pdd-date-picker @closeTimeS='closeTimeID' ref="pDataSelect" @change="handleChangeDateID" />
</u-popup>
</u-form-item>
<u-form-item v-if="isCardShow" label="身份证是否永久有效" label-width="290" prop="isWitch">
<u-switch v-model="authInfo.isWitch" size='40'></u-switch>
</u-form-item>
<u-form-item label="身份证结束日期" v-if="isCardShow&&!authInfo.isWitch" prop="idcard_backend"
labelWidth="290">
<view class="" @click="id_end_date=true">
<u--input v-model="authInfo.contIdValidDateEnd" disabled placeholder='请选择结束日期'
:placeholder-style="placeholderStyle" />
</view>
<u-popup :show="id_end_date" @close="closeTimeIDEND">
<pdd-date-picker @closeTimeS='closeTimeIDEND' ref="pDataSelect"
@change="handleChangeDateIDEND" />
</u-popup>
</u-form-item>
<u-form-item label-position="left" label="联系人证件证面照片" label-width="190" v-if="isCardShow">
<u-upload :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" name="1" width="160"
height="160" :maxCount="1"></u-upload>
</u-form-item>
<u-form-item label-position="left" label=" 联系人证件反面照片" label-width="190" v-if="isCardShow">
<u-upload :fileList="fileList2" @afterRead="afterRead" @delete="deletePic" name="2" width="160"
height="160" :maxCount="1"></u-upload>
</u-form-item>
</u-form>
<u-button type="success" v-if="iswxcome" :disabled="wxIsAuth" class="subBtn"
@click="toAuth(0)">提交微信实名认证</u-button>
<u-button type="primary" v-if="isalicome" :disabled="aliIsAuth" class="subBtn"
@click="toAuth(1)">提交支付宝实名认证</u-button>
</view>
<view class="authRe" v-else-if="merchInfo.state==31">
<u-subsection :list="subList" :current="curNm" :animation="true" @change="sectionChange"
fontSize='26'></u-subsection>
<view class="" v-if="!isState">
<view>
<view class="tips">{{tip}}</view>
<view class="imgBox">
<image :src="'data:image/png;base64,'+bara" class="codeImg" v-if="!curNm"></image>
<image :src="bara" class="codeImg" v-if="curNm"></image>
</view>
</view>
<u-button type="success" class="reBtn" @click="getAuthStatus">重新获取实名认证申请状态</u-button>
<u-button type="primary" class="reBtn" @click="getStatus(1)">获取实名认证结果</u-button>
</view>
<view class="" v-else>
<u-form v-if="!curNm" ref="uForm">
<u-form-item label-position="left" label="实名认证结果:" prop="idcard_backend" labelWidth="250">
<u--input v-model="success" disabled type="text"
:placeholder-style="placeholderStyle"></u--input>
</u-form-item>
</u-form>
<u-form v-if="curNm" ref="uForm">
<u-form-item label-position="left" label="实名认证结果:" prop="idcard_backend" labelWidth="220">
<u--input v-model="success" disabled type="text"
:placeholder-style="placeholderStyle"></u--input>
</u-form-item>
</u-form>
<u-button type="success" class="reBtn" @click="getStatus">重新获取实名认证结果</u-button>
<u-button type="error" v-if="(isAuthwx&&!curNm)||(isAuthali&&curNm)" class="reBtn"
@click="deleteAuth">撤销实名认证</u-button>
<u-button type="primary" v-else class="reBtn" @click="toAuthAgin">重新发起实名认证</u-button>
</view>
</view>
<view class="wrap" v-if="merchInfo.state==32">
<u-subsection :list="subList" :current="curNm" :animation="true" @change="sectionChangeStatus"
fontSize='26'></u-subsection>
<u-form v-if="!curNm" ref="uForm">
<u-form-item label-position="left" label="实名认证结果:" prop="idcard_backend" labelWidth="250">
<u--input v-model="success" disabled type="text" :placeholder-style="placeholderStyle"></u--input>
</u-form-item>
</u-form>
<u-form v-if="curNm" ref="uForm">
<u-form-item label-position="left" label="实名认证结果:" prop="idcard_backend" labelWidth="220">
<u--input v-model="success" disabled type="text" :placeholder-style="placeholderStyle"></u--input>
</u-form-item>
</u-form>
<u-button type="primary" class="reBtn" @click="toAuthAgin">重新发起实名认证</u-button>
</view>
<view class="wrap" v-if="merchInfo.state==40">
<u-subsection :list="subList" :current="curNm" :animation="true" @change="sectionChangeStatus"
fontSize='26'></u-subsection>
<u-form v-if="!curNm" ref="uForm">
<u-form-item label-position="left" label="实名认证结果:" prop="idcard_backend" labelWidth="250">
<u--input v-model="success" disabled type="text" :placeholder-style="placeholderStyle"></u--input>
</u-form-item>
</u-form>
<u-form v-if="curNm" ref="uForm">
<u-form-item label-position="left" label="实名认证结果:" prop="idcard_backend" labelWidth="220">
<u--input v-model="success" disabled type="text" :placeholder-style="placeholderStyle"></u--input>
</u-form-item>
</u-form>
<u-button type="success" class="reBtn" @click="getStatus">重新获取实名认证结果</u-button>
<u-button type="error" v-if="(isAuthwx&&!curNm)||(isAuthali&&curNm)" class="reBtn"
@click="deleteAuth">撤销实名认证</u-button>
<u-button type="primary" v-else class="reBtn" @click="toAuthAgin">重新发起实名认证</u-button>
</view>
</view>
</template>
<script>
import {
wx_real_name,
ali_real_name,
uploadImg,
wx_real_name_status,
ali_real_name_detail,
wx_real_name_cancel,
ali_real_name_cancel,
wx_auth_status,
ali_auth_status
} from '@/utils/api.js'
import {
toBase64
} from '@/utils/imgtobase.js'
import ysDict from '@/pages/index/dictDatas.js'
import pddDatePicker from '@/uni_modules/pdd-date-picker/components/pdd-date-picker/pdd-date-picker.vue'
export default {
components: {
pddDatePicker
},
data() {
return {
isState: false, //如果用户状态是31还未点击查询实名结果
success: '实名认证成功',
error: '实名认证失败',
isAuthwx: false, //wx是否授权
isAuthali: false, //ali是否授权
id_start_date: false,
id_end_date: false,
placeholderStyle: 'font-size:22rpx;color:#c0c4cc;',
params: null,
merchInfo: {
mercType: '',
},
authInfo: {
merContactType: '65'
},
bara: "",
tip: "",
ysDict: null,
subList: [{
name: '微信'
},
{
name: '支付宝'
},
],
curNm: 0,
reBtnIsShow: false,
merContactTypeList: [{
name: '65',
label: '经营者/法人'
}],
isCardShow: false,
post_url: '',
idcard_front: {
'type': 'idcard',
'id_card_side': 'front'
}, //身份证正面
idcard_back: {
'type': 'idcard',
'id_card_side': 'back'
}, //身份证反面
isAgin: false,
wxIsAuth: false,
aliIsAuth: false,
shopList: [{
name: '00',
label: '是'
},
{
name: '01',
label: '否'
},
],
fileList1: [], //身份证正面
fileList2: [], //身份证反面
account_id: '', //编号
iswxcome: true,
isalicome: true,
}
},
onLoad(options) {
var option = JSON.parse(options.val)
// option.state =40
this.ysDict = ysDict
this.post_url = getApp().globalData.baidu_sdk_url
this.merchInfo = {
...this.merchInfo,
...option
}
this.params = option
if (parseInt(option.state) != '30' && parseInt(option.state) != '40' && parseInt(option.state) != '32') {
this.getAuthStatus()
} else {
this.initAuthInfo(option)
}
if (parseInt(option.state) == '40' || parseInt(option.state) == '32') {
this.getStatus()
}
},
watch: {
//是否是法人
'authInfo.merContactType': {
handler: function(n, o) {
this.isCardShow = !this.isCardShow
},
},
'merchInfo.mercType': {
handler: function(n, o) {
if (n === '2') { //小微
this.merContactTypeList = [{
name: '65',
label: '经营者/法人'
}]
} else {
this.merContactTypeList = [{
name: '65',
label: '经营者/法人'
}, {
name: '66',
label: '经办人'
}]
}
},
immediate: true
},
},
methods: {
//认证状态的值
initAuthInfo(params) {
console.log(params)
this.account_id = params.account_id
this.authInfo = {
ysMercId: JSON.parse(params.extend).merc_id, //“商户号"
mercId: JSON.parse(params.extend).merc_id, //“商户号"
contactCorpId: '', //联系人证件号码”
contactsTel: "", //联系人手机号
merContactType: '65', //65法人66非法人"
mercType: params.shop_type, //2 小微、3个体。4企业
managementType: '00', //00-门店场所、01-流动经营/便民服务(小微商户必填)"
storeName: params.shop_name, //门店名称(小微商户必填)
idTypeCd: '00', //
idFrontImg: '', //联系人证件正面照片(66必填)
idBackImg: '', //联系人证件反面照片(66必填)"
contIdValidDateBegin: '', //联系人证件有效期开始时间yyyy-MM-dd(66必填)
contIdValidDateEnd: '', //联系人证件有效期结束时间yyyy-MM-dd(66必填)著为永久传2999-12-31"
isWitch: true, //身份证是否一直有效
}
},
closeTimeID() {
this.id_start_date = false
},
handleChangeDateID(date) {
this.authInfo.contIdValidDateBegin = date
this.closeTimeID()
},
closeTimeIDEND() {
this.id_end_date = false
},
handleChangeDateIDEND(date) {
this.authInfo.contIdValidDateEnd = date
this.closeTimeIDEND()
},
//实名认证提交
toAuth(type) {
if (this.authInfo.mercType == 2 && this.authInfo.merContactType == '66') {
this.authInfo.idFrontImg = this.fileList1[0].url
this.authInfo.idBackImg = this.fileList2[0].url
if (this.authInfo.isWitch) {
this.authInfo.contIdValidDateEnd = '2999-12-31'
}
}
var authApi = type == 0 ? wx_real_name : ali_real_name
uni.showLoading({
title: '正在提交实名认证',
mask: true
})
var _this = this
console.log(this.authInfo);
const data = {
account_id: this.account_id,
info: JSON.stringify(this.authInfo)
}
authApi(data).then(res => {
if (res.code !== 200) {
uni.hideLoading()
_this.$u.toast(res.msg)
return
} else {
_this.$u.toast((type == 0 ? "微信" : "支付宝") + "实名认证已提交,等待审核")
if (type == 0) {
this.wxIsAuth = true
} else {
this.aliIsAuth = true
}
this.$refs.uForm.resetFields()
setTimeout(function() {
if (!this.wxIsAuth || !this.aliIsAuth) {
uni.navigateBack()
}
})
}
})
},
//重新去实名认证
toAuthAgin() {
this.merchInfo.state = 30
if (!this.curNm) {
this.iswxcome = true;
this.isalicome = false;
} else {
this.iswxcome = false;
this.isalicome = true;
}
this.initAuthInfo(this.params)
},
//切换平台
sectionChange(index) {
this.bara = ""
this.curNm = index;
if (index)
this.authInfo.contactCorpId = '';
this.authInfo.contactsTel = ''
if(!this.isState){
this.getAuthStatus();
}else{
this.getStatus()
}
},
//实名认证成功切换平台
sectionChangeStatus(index) {
this.bara = ""
this.curNm = index;
if (index)
this.authInfo.contactCorpId = '';
this.authInfo.contactsTel = ''
this.getStatus();
},
//撤销实名认证
deleteAuth() {
var getApi = this.curNm === 0 ? wx_real_name_cancel : ali_real_name_cancel
var params = {
apply_no: this.curNm === 0 ? JSON.parse(this.merchInfo.extend).wx_apply_no : JSON.parse(this
.merchInfo.extend).ali_apply_no,
//type===0?this.merchInfo.wxAuthNo:this.merchInfo.aliAuthNo
}
if (this.curNm === 1) {
params["merc_id"] = JSON.parse(this.merchInfo.extend).merc_id
}
getApi(params).then(r => {
if (r.code !== 200) {
this.$u.toast(r.msg)
return
} else {
this.$u.toast('撤销成功')
uni.navigateBack()
}
})
},
//获取商家授权状态(查询商户是否已完成实名认证)
getStatus(n) {
var getApi = this.curNm === 0 ? wx_auth_status : ali_auth_status
var params = {
merc_id: JSON.parse(this.merchInfo.extend).merc_id,
account_id: this.merchInfo.account_id
}
getApi(params).then(r => {
if (n) {
this.isState = true
}
if (r.code !== 200) {
this.$u.toast(r.msg)
return
} else {
if (!this.curNm) {
//已授权
if (r.data.authStateX == 'AUTHORIZE_STATE_AUTHORIZED') {
this.success = '实名认证成功'
this.isAuthwx = true
} else {
this.success = '实名认证失败'
this.isAuthwx = false
this.getAuthStatus()
}
} else {
//已授权
if (r.data.authState == '1') {
this.success = '实名认证成功'
this.isAuthali = true
} else {
this.success = '实名认证失败'
this.isAuthali = false
this.getAuthStatus()
}
}
this.$u.toast(r.msg)
}
})
},
//获取实名认证申请状态
getAuthStatus() {
var _this = this
// uni.showLoading({
// title: '正在查询相关数据',
// mask: true
// })
var getApi = this.curNm === 0 ? wx_real_name_status : ali_real_name_detail
var params = {
apply_no: this.curNm === 0 ? JSON.parse(this.merchInfo.extend).wx_apply_no : JSON.parse(this
.merchInfo.extend).ali_apply_no,
//type===0?this.merchInfo.wxAuthNo:this.merchInfo.aliAuthNo
}
console.log(params)
if (typeof params.apply_no === 'undefined' || params.apply_no === null) {
uni.hideLoading()
this.tip = "请先完成实名认证"
this.authText = "发起实名认证"
return
} else {
this.authText = "重新发起实名认证"
}
//支付宝
if (this.curNm === 1) {
params["merc_id"] = JSON.parse(this.merchInfo.extend).merc_id
}
getApi(params).then(r => {
console.log(r)
uni.hideLoading()
if (r.code !== 200) {
_this.tip = r.msg
return
}
_this.bara = r.data.qrcodeData
let key = r.data.applyState
if (['APPLYMENT_STATE_REJECTED',
'APPLYMENT_STATE_FREEZED',
'APPLYMENT_STATE_CANCELED',
'APPLYMENT_STATE_WAITTING_FOR_CONFIRM_CONTACT',
'AUDITING',
'CONTACT_CONFIRM',
'AUDIT_REJECT',
'AUDIT_FREEZE'
].includes(key)) {
_this.reBtnIsShow = true
}
let authMsg = this.ysDict.authResMsg()
if (['APPLYMENT_STATE_REJECTED', 'AUDIT_REJECT'].includes(key)) {
_this.tip = "审核被驳回:" + (this.curNm === 0 ? r.data.rejectReason : r.data.channelNote)
} else {
_this.tip = authMsg[key]
}
console.log(_this.tip);
})
},
afterRead(e) {
console.log(e);
const file = e.file;
const maxSize = 2 * 1024 * 1024; // 2MB
if (file.size > maxSize) {
uni.showToast({
title: '文件大小不能超过 2MB。',
duration: 2000,
icon: 'none'
});
return; // 终止后续操作
}
// 将上传图片处理成base64
toBase64(e.file.url).then(result => {
let myVariable = result
let license = {
file: 'data:image/png;base64,' + myVariable
}
this.uploadFilePromise(license, e)
})
.catch(error => {
console.error('There was an error!', error);
});
},
uploadFilePromise(img, e) {
uploadImg(img).then((res) => {
this[`fileList${e.name}`].push({
url: res.data.url
})
})
},
// 删除图片
deletePic(event) {
this[`fileList${event.name}`].splice(event.index, 1)
},
}
}
</script>
<style lang="scss">
.codeImg {
height: 300rpx;
width: 300rpx;
}
.wrap {
padding: 30rpx;
.u-size-default {
padding: 0rpx
}
.signature .inputs .explain {
width: 200rpx;
}
}
.authRe {
padding: 30rpx;
.u-size-default {
padding: 0rpx
}
}
.subBtn {
margin-top: 30rpx;
}
.reBtn {
margin-top: 30rpx;
width: 90%;
}
.tips {
font-size: 25rpx;
margin: 20rpx 0 0 13%;
}
.imgBox {
display: flex;
justify-content: center;
}
</style>