<template> <view class="content padding-b-30"> <view class="listBox" @click="navCroper(480,640,'upimg')"> <view class="list"> <view class="flex listItem"> <view class="titleBox"> <view class="title">正面照</view> <view class="font-color-gray font-size-sm"> 上传您的正面照 </view> </view> <view class="right flex"> <!-- #ifdef H5 --> <image class="userRenzheng" :src="upimg||this.urlFile + '/static/image/realUser.png'" mode="widthFix"></image> <!-- #endif --> <!-- #ifndef H5 --> <image class="userRenzheng" :src="upimg||'/static/image/realUser.png'" mode="widthFix"></image> <!-- #endif --> </view> </view> </view> </view> <view class="listBox" @click="navCroper(400,300,'sfzZm')"> <view class="list"> <view class="flex listItem"> <view class="titleBox"> <view class="title">身份证正面</view> <view class="font-color-gray font-size-sm"> 上传您的身份证正面 </view> </view> <view class="right flex"> <!-- #ifdef H5 --> <image class="userRenzheng" :src="sfzZm||this.urlFile + '/static/image/realZm.png'" mode="widthFix"></image> <!-- #endif --> <!-- #ifndef H5 --> <image class="userRenzheng" :src="sfzZm||'/static/image/realZm.png'" mode="widthFix"></image> <!-- #endif --> </view> </view> </view> </view> <view class="listBox" @click="navCroper(400,300,'sfzFm')"> <view class="list"> <view class="flex listItem"> <view class="titleBox"> <view class="title">身份证反面</view> <view class="font-color-gray font-size-sm"> 上传您的身份证反面 </view> </view> <view class="right flex"> <!-- #ifdef H5 --> <image class="userRenzheng" :src="sfzFm||this.urlFile + '/static/image/realBm.png'" mode="widthFix"></image> <!-- #endif --> <!-- #ifndef H5 --> <image class="userRenzheng" :src="sfzFm||'/static/image/realBm.png'" mode="widthFix"></image> <!-- #endif --> </view> </view> </view> </view> <view class="listBox"> <view class="list"> <view class="flex listItem"> <view class="flex titleBox"> <text class="title">真实姓名</text> </view> <view class="right flex"> <input class="input" v-model="name" type="text" placeholder="请填写真实姓名" placeholder-class="placeholder" /> </view> </view> <view class="flex listItem"> <view class="flex titleBox"> <text class="title">身份证号</text> </view> <view class="right flex"> <input class="input" v-model="cardId" type="text" placeholder="请填写身份证号" placeholder-class="placeholder" /> </view> </view> </view> </view> <view class="base-buttom" :class="{ 'bg-gray': loding }" @click="loding ? '' : confirm()">提交</view> </view> </template> <script> import { real_name } from '@/api/user.js'; import { mapState } from "vuex" export default { data() { return { name: '', //用户名称 cardId: '', //身份证号 upimg: '', //图片地址 xyfImg: '', //信用分图片 sfzZm: '', //身份证正面 sfzFm: '', //身份证反面 loding: false, //是否载入中 }; }, onLoad(options) {}, computed: { // #ifdef H5 ...mapState(['urlFile']), // #endif ...mapState(['baseURL']), }, methods: { upLoad(path) { // #ifdef H5 console.log(path,'h5'); // #endif uni.showLoading({ title: '图片上传中', mask: true }); return new Promise((resolve, error) => { uni.uploadFile({ url: this.baseURL + '/api/upload/image', //仅为示例,非真实的接口地址 filePath: path, name: 'file', header: { "Authori-zation": 'Bearer ' + uni.getStorageSync('token') }, success: (uploadFileRes) => { if ("string" === typeof uploadFileRes.data) { resolve(JSON.parse(uploadFileRes.data).data) } else { resolve(uploadFileRes.data.data) } }, complete() { uni.hideLoading() } }); }) }, // 图片裁切 /** * @param {Number} w 裁切宽度比例 * @param {Number} h 裁切高度比例 * @param {Number} mw 图片最小宽度 * @param {Number} mh 图片最小高度 * @param {String} url url修改 */ navCroper(w, h, type) { let that = this; let tt = (type=='upimg'?2:1) this.onImg(tt).then((url) => { uni.navigateTo({ url: `./cropper?width=${w}&height=${h}`, events: { uploadSuccess(res) { that.upLoad(res).then((urldata) => { that[type] = urldata.url; }) // console.log(e, '接受数据'); } }, success: function(res) { // 通过eventChannel向被打开页面传送数据 res.eventChannel.emit('urlNext', { url }) } }) }) }, onImg(type) { const _this = this return new Promise((ok, erro) => { // 判断是否需要选择 if(type==1){ uni.showActionSheet({ itemList: ['拍照', '选择一张照片'], success: function(res) { _this.chooseImage(res.tapIndex).then((url) => { ok(url) }).catch((res) => { erro(res) }) }, fail: function(res) { erro(res) console.log(res.errMsg); } }); } // 判断是否只需要拍照 if(type==2){ _this.chooseImage(0).then((url) => { ok(url) }).catch((res) => { erro(res) }) } }) }, chooseImage: function(index) { const _this = this return new Promise((ok, error) => { // 从相册/相机选择 // 如需直接开相机或直接选相册,请只使用一个选项 const sourceType = index === 0 ? ['camera'] : ['album'] uni.chooseImage({ count: 1, //默认9 sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 sourceType: sourceType, success: function(res) { ok(res.tempFilePaths[0]) }, fail(e) { uni.showModal({ title: '文件打开错误', content: '请设置授权文件存储权限', showCancel: false, }); error(e) } }); }) }, // 实名认证 confirm(e) { if (!this.name) { uni.showModal({ title: '错误', content: '请填写姓名', showCancel: false, }); return } if (!this.cardId) { uni.showModal({ title: '错误', content: '请填写身份证号', showCancel: false, }); return } if (!this.upimg) { uni.showModal({ title: '错误', content: '请上传正面照', showCancel: false, }); return } if (!this.sfzZm) { uni.showModal({ title: '错误', content: '请上传身份证正面照', showCancel: false, }); return } if (!this.sfzFm) { uni.showModal({ title: '错误', content: '请上传身份证反面照', showCancel: false, }); return } /* if (!this.xyfImg) { uni.showModal({ title: '错误', content: '上传您的信用分截图', showCancel: false, }); return }*/ this.loding = true; real_name({ real_name: this.name, id_card: this.cardId, face_image: this.upimg.replace('data:image/jpeg;base64,', ''), id_card_front_image: this.sfzZm.replace('data:image/jpeg;base64,', ''), id_card_back_image: this.sfzFm.replace('data:image/jpeg;base64,', ''), pay_points: this.xyfImg.replace('data:image/jpeg;base64,', ''), }) .then((e) => { this.loding = false; if (e.msg == '已实名') { uni.showModal({ title: '提示', content: '恭喜您实名认证成功', showCancel: false, complete: () => { uni.switchTab({ url: '/pages/user/user' }) } }); } else { this.$api.msg('认证失败'); } }) .catch(err => { this.loding = false; console.log(err); }); } } }; </script> <style lang="scss"> .content, page { min-height: 100%; } .listBox { margin: $page-row-spacing; margin-top: 30rpx; border-radius: 20rpx; overflow: hidden; background-color: #FFFFFF; } .list { .input { text-align: right; font-size: $font-base; color: $color-gray; width: 100%; } .listItem { padding: 35rpx 40rpx; border-bottom: 1px solid $page-color-light; } .listIconImg { width: 36rpx; } .right { color: $font-color-light; font-size: $font-base; flex-grow: 1; justify-content: flex-end; .userRenzheng { width: 400rpx; } .img { width: 26rpx; } } .titleBox { .title { color: $font-color-base; font-size: $font-base; } } } .bg-gray { background-color: $color-gray; } .base-buttom { position: relative; bottom: auto; right: auto; left: auto; } </style>