From 7043590a8a1d24a4c86472051c103a8e4dc2ddb4 Mon Sep 17 00:00:00 2001
From: PC-20250623MANY\Administrator <344137771@qq.com>
Date: Sat, 09 Aug 2025 17:34:01 +0800
Subject: [PATCH] 1
---
src/page/authentication/index.vue | 764 +++++++++++++++++++++++++---------------------------------
1 files changed, 328 insertions(+), 436 deletions(-)
diff --git a/src/page/authentication/index.vue b/src/page/authentication/index.vue
index cc92791..30b19d7 100644
--- a/src/page/authentication/index.vue
+++ b/src/page/authentication/index.vue
@@ -1,477 +1,369 @@
<template>
- <div class="wrapper">
- <div class="header">
- <div class="left_back" @click="handleGoToBack()">
- <img src="../../assets/img/zuojiantou.png" alt="">
- </div>
- <div class="header_titles">
- <span>{{ '实名认证' }}</span>
- </div>
- </div>
- <div class="boxs"></div>
- <div class="box transaction">
- <div class="box-contain clearfix">
- <div class="empty text-center">
- <!-- 您已通过实名认证 -->
- <i v-if="this.$store.state.userInfo.isActive == 1" style="color:red;font-size: 1.5rem;"
- class="iconfont icon-shenhezhong"></i>
- <i v-if="!showBtn && this.$store.state.userInfo.isActive != 1" style="color:red;font-size: 1.5rem;"
- class="iconfont icon-tongguo1"></i>
- <i v-if="showBtn" style="color:red;font-size: 1.5rem;" class="iconfont icon-icon-test"></i>
- </div>
- </div>
- </div>
- <div class="form-block">
- <div class="auth-msg" v-if="this.$store.state.userInfo.isActive == 3">
- <p>认证失败,请重新认证</p>
- <div>
- 失败原因:{{this.$store.state.userInfo.authMsg}}
- </div>
- </div>
- <!-- <mt-field label="手机号" placeholder="请输入您的手机号" v-model="form.phone"></mt-field> -->
- <mt-field label="真实姓名" placeholder="请输入您的真实姓名" type="text" v-model="form.name"></mt-field>
- <mt-field label="身份证号" placeholder="请输入您的身份证号" type="text" v-model="form.idCard"></mt-field>
- </div>
- <div class="upload-box clearfix">
- <!-- <form action=""> -->
- <div class="upload-btn">
- <el-upload
- :with-credentials='true'
- class="avatar-uploader"
- :action="admin+'/user/upload.do'"
- list-type="picture-card"
- name="upload_file"
- :show-file-list="false"
- :on-success="handleAvatarSuccess"
- :on-error='handleError'
- :before-upload="beforeAvatarUpload">
- <img v-if="form.img1key" :src="form.img1key" class="id-img avatar">
- <i v-else class="iconfont icon-zhaopian"></i>
- <span v-if="!form.img1key && !imgStatus" class="btn-title">身份证正面</span>
- <span v-if="imgStatus" class="btn-title">正在上传中...</span>
- </el-upload>
- <!-- <i class="iconfont icon-tupian"></i> -->
- <!-- <span class="btn-title">身份证正面</span> -->
- <!-- <input class="btn-hidden" type="file" accept="image/jpeg, image/png, image/jpg" @change="handleFile"/> -->
- <!-- <img class="id-img" :src="this.form.img2Key" alt=""> -->
- </div>
- <div class="upload-btn">
- <el-upload
- :with-credentials='true'
- class="avatar-uploader"
- :action="admin+'/user/upload.do'"
- list-type="picture-card"
- name="upload_file"
- :show-file-list="false"
- :on-success="handleAvatarSuccess2"
- :on-error='handleError2'
- :before-upload="beforeAvatarUpload2">
- <img v-if="form.img2key" :src="form.img2key" class="id-img avatar">
- <i v-else class="iconfont icon-zhaopian"></i>
- <span v-if="!form.img2key && !imgStatus2" class="btn-title">身份证背面</span>
- <span v-if="imgStatus2" class="btn-title">正在上传中...</span>
- </el-upload>
- <!--
- :auto-upload="false"
- 身份证背面 -->
- </div>
- <!-- <div class="upload-btn">
- <el-upload
- :with-credentials='true'
- class="avatar-uploader"
- :action="admin+'/user/upload.do'"
- list-type="picture-card"
- name="upload_file"
- :show-file-list="false"
- :on-success="handleAvatarSuccess3"
- :before-upload="beforeAvatarUpload3">
- <img v-if="form.img3key" :src="form.img3key" class="id-img avatar">
- <i v-else class="iconfont icon-zhaopian"></i>
- <span v-if="!form.img3key" class="btn-title">手持身份证</span>
- </el-upload>
- </div> -->
- </div>
- <div class="rule-box">
- <div class="title">认证规则:</div>
- <ul>
- <li>1、新用户注册后必须通过实名认证审核。</li>
- <li>2、姓名和身份证号码一经认证不予修改,修改请联系客服。</li>
- <li>3、真实姓名必须和出金银行卡户名一致。</li>
- </ul>
- </div>
- <div v-if="showBtn" class="btnbox">
- <span class="" @click="toSure">确定</span>
+ <div class="authentication-container">
+ <van-nav-bar :placeholder="true" :safe-area-inset-top="true" :title="$t('rnv')" left-arrow
+ @click-left="$router.go(-1)">
+ </van-nav-bar>
+
+ <div style="width: 100%; height: .25em; background-color: #f8f8f8"></div>
+
+ <div class="form-group" :class="{ 'disabled': isSubmitting || isActive }">
+ <label class="required-label">{{ $t('hj195') }}</label>
+ <input type="text" v-model="form.name" class="form-input" :disabled="isActive" />
</div>
+ <div class="form-group" :class="{ 'disabled': isSubmitting || isActive }">
+ <label class="required-label">{{ $t('it1') }}</label>
+ <van-radio-group v-model="auRadio" direction="horizontal" disabled style="font-size: 3.5vw;margin-top: 1em;">
+ <van-radio name="1">{{ $t('dl1') }}</van-radio>
+ <van-radio name="2">{{ $t('pa1') }}</van-radio>
+ <van-radio name="3">{{ $t('ot1') }}</van-radio>
+ </van-radio-group>
+ </div>
+
+ <div class="form-group" :class="{ 'disabled': isSubmitting || isActive }">
+ <label class="required-label">{{ $t('in1') }}</label>
+ <input type="text" v-model="form.idCard" class="form-input" :disabled="isActive" />
+ </div>
+
+ <div class="form-group" :class="{ 'disabled': isSubmitting || isActive }">
+ <label class="required-label">{{ $t("电话号码") }}</label>
+ <input type="text" v-model="form.vaildNumber" class="form-input" :disabled="isActive" />
+ </div>
+
+ <div style="width: 100%; height: .25em; background-color: #f8f8f8"></div>
+
+ <div class="form-group flex-between" :class="{ 'disabled': isSubmitting || isActive }">
+ <label class="required-label">{{ $t('fsi1') }}</label>
+
+ <el-upload :with-credentials="true" class="avatar-uploader" :action="admin + 'user/upload.do'"
+ list-type="picture-card" name="upload_file" :show-file-list="false" :on-success="handleAvatarSuccess"
+ :on-error="handleError" :before-upload="beforeAvatarUpload" :disabled="isActive">
+ <img v-if="form.img1key" :src="form.img1key" class="id-img avatar" style="width: 100%; height: 100%" />
+ <i v-else class="iconfont icon-zhaopian"></i>
+ </el-upload>
+ </div>
+
+ <div class="form-group flex-between" :class="{ 'disabled': isSubmitting || isActive }">
+ <label class="required-label">{{ $t('bsi1') }}</label>
+
+ <el-upload :with-credentials="true" class="avatar-uploader" :action="admin + 'user/upload.do'"
+ list-type="picture-card" name="upload_file" :show-file-list="false" :on-success="handleAvatarSuccess2"
+ :on-error="handleError2" :before-upload="beforeAvatarUpload2" :disabled="isActive">
+ <img v-if="form.img2key" :src="form.img2key" class="id-img avatar" style="width: 100%; height: 100%" />
+ <i v-else class="iconfont icon-zhaopian"></i>
+ </el-upload>
+ </div>
+
+ <div style="width: 100%; height: .25em; background-color: #f8f8f8"></div>
+
+ <div class="submit-button" :class="{ 'disabled': isSubmitting || isActive }" @click="toSure">
+ <span>{{ $t("uv1") }}</span>
+ </div>
</div>
</template>
<script>
-import * as api from '@/axios/api'
-import { Toast } from 'mint-ui'
-import { isNull, idCardReg, isName } from '@/utils/utils'
-import { compress } from '@/utils/imgupload'
-
+import * as api from "@/axios/api";
+import apiUrl from "@/axios/api.url.js";
+import { compress } from "@/utils/imgupload";
+import { isNull } from "@/utils/utils";
+import { Toast } from "vant";
export default {
- components: {},
- props: {},
- data () {
+ name: 'Authentication',
+ data() {
return {
+ frontImage: '',
+ backImage: '',
+ isSubmitting: false,
+ auRadio: '1',
form: {
- phone: '',
- name: '',
- idCard: '',
- img1key: '',
- img2key: '',
- img3key: ''
+ phone: "",
+ name: "",
+ idCard: "",
+ vaildNumber: "",
+ img1key: "",
+ img2key: "",
},
- img1Key: '',
- img2Key: '',
- img3Key: '',
- showBtn: true,
- admin: '',
imgStatus: false,
- imgStatus2: false
+ admin: apiUrl.baseURL,
}
},
- watch: {},
- computed: {},
- created () {
- if (this.$store.state.userInfo.isActive === 1 || this.$store.state.userInfo.isActive === 2) {
- this.form.idCard = this.$store.state.userInfo.idCard
- this.form.name = this.$store.state.userInfo.realName
- this.form.img1key = this.$store.state.userInfo.img1Key
- this.form.img2key = this.$store.state.userInfo.img2Key
- // this.form.img3key = this.$store.state.userInfo.img3Key
- this.showBtn = false
+ computed: {
+ //注册默认0 1.提交未实名 2.已实名 3.驳回, 状态1||2的时候屏蔽所有的输入
+ isActive() {
+ return this.$store.state.userInfo.isActive == 1 || this.$store.state.userInfo.isActive == 2;
+ // return false;
}
},
- beforeDestroy () {
- if (this.$state.theme =='red') {
- document.body.classList.remove('red-bg')
- document.body.classList.add('black-bg')
- }
+ created() {
+ this.getUserInfo();
},
- mounted () {
- if (this.$state.theme =='red') {
- document.body.classList.remove('black-bg')
- document.body.classList.add('red-bg')
- }
- this.admin = process.env.API_HOST
- if (this.admin === undefined) {
- this.admin = ''
- }
+ mounted() {
+ // 可以在这里加载用户已有的认证信息
+ // 如果用户已经提交过认证信息,可以显示认证状态
},
methods: {
- handleAvatarSuccess (res, file) {
- this.imgStatus = false
- this.form.img1key = res.data.url
- },
- handleGoToBack() {
- this.$router.go(-1);
- },
- beforeAvatarUpload (file) {
- this.imgStatus = true
- // const isJPG = file.type === 'image/jpg' || file.type === 'image/jpeg' || file.type === 'image/png';
- // const isLt2M = file.size / 1024 / 1024 < 20;
- // if (!isJPG) {
- // Toast('请选择jpg或者png的图片格式!');
- // }
- // // if (!isLt2M) {
- // // Toast('上传头像图片大小不能超过 2MB!');
- // // }
- // return isJPG && isLt2M;
- },
- handleError () {
- this.imgStatus = false
- },
- handleAvatarSuccess2 (res, file) {
- this.imgStatus2 = false
- this.form.img2key = res.data.url // URL.createObjectURL(file.raw);
- },
- // 自动义图片上传 uploadFileFun2
- // async uploadFileFun2 (params) {
- // console.log('uploadFile', params)
- // const _that = this
- // const isLt10M = file.size / 1024 / 1024 < 10
- // if (!isLt10M) {
- // this.$message.error('上传图片大小不能超过 10M!')
- // return false
- // } else {
- // this.form.img2key = URL.createObjectURL(file.raw)
- // compress(file.raw, function (val) {
- // _that.form.img2key = val
- // })
- // }
- // // 通过 FormData 对象上传文件
- // const _file = params.file
- // var formData = new FormData()
- // formData.append('upload_file', _file)
- // let data = await api.uploadimg(formData)
- // if (data.status === 0) {
- // this.form.img2key = data.data
- // } else {
- // Toast(data.msg)
- // }
- // },
- beforeAvatarUpload2 (file) {
- this.imgStatus2 = true
- // const _that = this
- const isLt10M = file.size / 1024 / 1024 < 10
- if (!isLt10M) {
- this.$message.error('上传图片大小不能超过 10M!')
- return false
- } else {
- this.form.img2key = URL.createObjectURL(file)
- compress(file, function (val) {
- // _that.theForm.picUrl = val
- // _that.imgFile = val
- // _that.showDelete = true
- // _that.$refs['addBuildingForm'].validateField('picUrl')
- })
- }
- // const isJPG = file.type === 'image/jpeg' || file.type === 'image/png';
- // const isLt2M = file.size / 1024 / 1024 < 20;
- // return isJPG && isLt2M;
- },
- handleError2 () {
- this.imgStatus2 = false
- },
- handleAvatarSuccess3 (res, file) {
- this.form.img3key = res.data.url // URL.createObjectURL(file.raw);
- },
- beforeAvatarUpload3 (file) {
- // const isJPG = file.type === 'image/jpeg' || file.type === 'image/jpeg' || file.type === 'image/png';
- // const isLt2M = file.size / 1024 / 1024 < 20;
- // if (!isJPG) {
- // Toast('请选择jpg或者png的图片格式!');
- // }
- // return isJPG && isLt2M;
- },
- // 上传
- handleFile: function (e) {
- // var that = this
- let $target = e.target || e.srcElement
- let file = $target.files[0]
- // if(file.size > 1024 * 1024 *20){
- console.log(file, 'file')
- let i = false
- if (i) {
- Toast('您上传的照片过大,请选择20M以下的图片')
- } else {
- // Indicator.open('Loading...')
- this.img1Key = file
- // this.$refs.formDate.submit()
- // this.uploadIdImg({upload_file:file})
- var reader = new FileReader()
- reader.onload = (data) => {
- let res = data.target || data.srcElement
- this.form.img1Key = res.result
- // Indicator.close()
- }
- // reader.onloadend = () => {
- // Indicator.close()
- // }
- reader.readAsDataURL(file)
- }
- },
- // async uploadIdImg(){
- // let imgformData = new FormData()
-
- // imgformData.append('upload_file', this.img1Key)
- // let data = await api.uploadFile({upload_file:this.img1Key})
- // if(data.status == 0){
- // Toast('认证成功!')
- // }else{
- // Toast(data.msg)
- // }
- // },
- toSure () {
+ toSure() {
+ if (this.isSubmitting || this.isActive) return // 防止重复提交
// 实名认证弹框
- if (isNull(this.form.name) || !isName(this.form.name)) {
- Toast('请输入您的真实姓���')
- } else if (isNull(this.form.idCard) || !idCardReg(this.form.idCard)) {
- Toast('请输入您的正确的身份证号码')
- } else if (isNull(this.form.img1key) || isNull(this.form.img2key)) {
- Toast('请上传您的身份证照片')
+ if (isNull(this.form.name)) {
+ Toast(this.$t("hj207"));
+ } else if (isNull(this.form.idCard)) {
+ Toast(this.$t("hj208"));
+ } else if (!this.form.img1key) {
+ Toast(this.$t("hj209"));
+ } else if (!this.form.img2key) {
+ Toast(this.$t("hj209"));
} else {
// 显示确认弹窗
- this.toAuthentication()
+ this.toAuthentication();
}
},
- async toAuthentication () {
+ async toAuthentication() {
+ this.isSubmitting = true
+
let opts = {
realName: this.form.name,
idCard: this.form.idCard,
+ vaildNumber: this.form.vaildNumber,
img1key: this.form.img1key,
img2key: this.form.img2key,
- img3key: this.form.img3key
- }
- let data = await api.userAuth(opts)
+ img3key: this.form.img3key,
+ };
+ let data = await api.userAuth(opts);
if (data.status === 0) {
- Toast('提交成功!')
- this.goBack()
+ Toast(this.$t("hj210"));
+ this.goBack();
} else {
- Toast(data.msg)
+ Toast(data.msg);
+ }
+ this.isSubmitting = false
+ },
+ async getUserInfo() {
+ // 获取用户信息
+ let data = await api.getUserInfodata();
+ if (data.status === 0) {
+ // 判断是否登录
+ this.$store.commit("dialogVisible", false);
+ this.$store.state.userInfo = data.data;
+ this.userInfo = data.data;
+ if (
+ this.$store.state.userInfo.isActive === 1 ||
+ this.$store.state.userInfo.isActive === 2
+ ) {
+ this.form.idCard = this.$store.state.userInfo.idCard;
+ this.form.vaildNumber = this.$store.state.userInfo.vaildNumber;
+ this.form.name = this.$store.state.userInfo.realName;
+ this.form.img1key = this.$store.state.userInfo.img1Key;
+ this.form.img2key = this.$store.state.userInfo.img2Key;
+ this.showBtn = false;
+ }
+ } else {
+ //this.$store.commit('dialogVisible',true);
+ //跳转到login
+ this.$router.push({ path: "/login" });
}
},
- goBack () {
- this.$router.back(-1)
- }
+ handleAvatarSuccess(res, file) {
+ this.imgStatus = false;
+ this.form.img1key = res.data.url;
+ },
+ beforeAvatarUpload(file) {
+ this.imgStatus = true;
+ },
+ handleError() {
+ this.imgStatus = false;
+ },
+ handleAvatarSuccess2(res, file) {
+ this.imgStatus2 = false;
+ this.form.img2key = res.data.url; // URL.createObjectURL(file.raw);
+ },
+ beforeAvatarUpload2(file) {
+ this.imgStatus2 = true;
+ const isLt10M = file.size / 1024 / 1024 < 10;
+ if (!isLt10M) {
+ this.$message.error(this.$t("hj205"));
+ return false;
+ } else {
+ this.form.img2key = URL.createObjectURL(file);
+ compress(file, function (val) { });
+ }
+ },
+ handleError2() {
+ this.imgStatus2 = false;
+ },
}
}
</script>
+
<style lang="less" scoped>
- .transaction {
- color: rgba(100, 100, 100, 0.78);
+@green: #c4d600;
- .empty {
- width: 100%;
- // height: 1.34rem;
- font-size: 0.43rem;
- color: #888888;
- text-align: center;
- line-height: 2rem;
- // background: url('../../assets/img/thingsOk.png') no-repeat center center;
- background-size: 70%;
- }
+/deep/ .van-nav-bar__content {
+ height: 65px;
+}
+
+/deep/ .van-nav-bar__title {
+ font-family: "DINPro";
+ width: 100%;
+ height: 1.17333rem;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ font-style: normal;
+ font-weight: 700;
+ font-size: 0.48rem;
+ color: #14181f;
+}
+
+/deep/ .el-upload__input {
+ display: none;
+}
+
+.authentication-container {
+ /* padding: 20px; */
+ background-color: #ffffff;
+ min-height: 100vh;
+ font-size: 10vw;
+}
+
+.form-group {
+ margin-bottom: .25em;
+ padding: .25em .25em 0;
+}
+
+label {
+ display: block;
+ margin-bottom: 8px;
+ color: #999;
+ font-size: 16px;
+ font-weight: normal;
+}
+
+.required-label {
+ color: #333;
+ font-weight: bold;
+ font-size: .4em;
+}
+
+.required-label::before {
+ content: '*';
+ color: #ff4d4f;
+ margin-right: 4px;
+}
+
+.form-input {
+ width: 100%;
+ height: 3em;
+ border: 1px solid #e8e8e8;
+ border-radius: 4px;
+ padding: 0 15px;
+ font-size: .4em;
+ box-sizing: border-box;
+ color: #333;
+}
+
+.id-type-options {
+ display: flex;
+ justify-content: space-between;
+}
+
+.option {
+ display: flex;
+ align-items: center;
+ padding: 10px 15px;
+ border: 1px solid #e8e8e8;
+ border-radius: 4px;
+ background-color: #fff;
+ flex: 1;
+ margin-right: 10px;
+}
+
+.option:last-child {
+ margin-right: 0;
+}
+
+.option.selected {
+ border-color: #4a90e2;
+}
+
+.radio-circle {
+ width: 24px;
+ height: 24px;
+ border-radius: 50%;
+ border: 1px solid #ccc;
+ margin-right: 8px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: #f5f5f5;
+}
+
+.option.selected .radio-circle {
+ border-color: #4a90e2;
+ background-color: #fff;
+}
+
+.radio-inner {
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background-color: #4a90e2;
+}
+
+.upload-box {
+ width: 100%;
+ height: 120px;
+ border: 1px solid #e8e8e8;
+ border-radius: 4px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: #fafafa;
+ cursor: pointer;
+ overflow: hidden;
+}
+
+.upload-placeholder {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+
+.upload-icon {
+ width: 40px;
+ height: 40px;
+ margin-bottom: 8px;
+ opacity: 0.5;
+}
+
+.preview-image {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+}
+
+.submit-button {
+ width: 9.5em;
+ margin: .4em auto 0;
+ height: 1.2em;
+ background-color: #e6e254;
+ color: #fff;
+ border-radius: 4px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ font-weight: normal;
+
+ span {
+ font-size: .4em;
}
+}
- .rule-box {
- padding: 0.2rem 0.3rem;
-
- .title {
- font-size: 0.3rem;
- height: 0.5rem;
- line-height: 0.5rem;
- margin-bottom: 0.2rem;
- }
-
- ul {
- li {
- color: #999;
- line-height: 0.5rem;
- }
- }
- }
-
- .upload-box {
- padding: 0.5rem;
-
- .upload-btn {
- // border: 1px solid #ddd;
- border-radius: 4px;
- width: 40%;
- height: 1.6rem;
- margin-bottom: 10px;
- float: left;
- margin: 0.2rem 5%;
- text-align: center;
- position: relative;
-
- .btn-hidden {
- height: 100%;
- width: 100%;
- position: absolute;
- top: 0;
- left: 0;
- z-index: 3;
- opacity: 0;
- }
-
- .id-img {
- max-width: 100%;
- max-height: 100%;
- }
-
- /deep/ .el-upload--picture-card {
- background: none;
- width: 100%;
- height: 1.6rem;
- line-height: 1.6rem;
- }
-
- .btn-title {
- position: absolute;
- top: 23px;
- left: 0;
- width: 100%;
- }
-
- /deep/ .el-upload__input {
- display: none;
- }
-
- }
-
- }
-
- .auth-msg {
- padding: 0.2rem 0.6rem;
- line-height: 0.4rem;
-
- p {
- color: red;
- }
-
- div {
- color: #ddd;
- }
- }
- .header {
- width: 100%;
- height: 1.5rem;
- background: #fff;
- position: fixed;
- z-index: 999;
- border-radius: 0 0 .15rem .15rem;
- .left_back {
- width: 1rem;
- height: 100%;
- left: 0;
- position: absolute;
- display: flex;
- justify-content: center;
- align-items: center;
- img {
- width: .6rem;
- height: .6rem;
- }
- }
- .header_titles {
- width: 100%;
- height: 100%;
- text-align: center;
- font-size: .4615rem;
- line-height: 1.5rem;
- span {
- font-weight: 600;
- }
- }
- }
- .boxs {
- width: 100%;
- height: 1.7rem;
- }
- .btnbox {
- width: 100%;
- height: 1rem;
- padding: 0 .3rem;
- font-size: .4615rem;
- color: #fff;
- display: flex;
- align-items: center;
- justify-content: center;
- span {
- display: inline-block;
- width: 100%;
- height: 1rem;
- line-height: 1rem;
- background: #2d6ae9;
- text-align: center;
- font-weight: 600;
- border-radius: .12rem;
- }
- }
-</style>
+.disabled {
+ opacity: .5;
+}
+</style>
\ No newline at end of file
--
Gitblit v1.9.3