From 0f6b38dfdfe93a1d630d984417af2fbb03c7e0ff Mon Sep 17 00:00:00 2001
From: PC-20250623MANY\Administrator <344137771@qq.com>
Date: Mon, 15 Sep 2025 15:29:26 +0800
Subject: [PATCH] 2
---
src/page/authentication/index.vue | 599 ++++++++++++++++++++++++++++++-----------------------------
1 files changed, 303 insertions(+), 296 deletions(-)
diff --git a/src/page/authentication/index.vue b/src/page/authentication/index.vue
index a90fd01..3b768aa 100644
--- a/src/page/authentication/index.vue
+++ b/src/page/authentication/index.vue
@@ -1,152 +1,170 @@
<template>
- <div class="bank_card_page">
- <div class="content">
- <div class="top_back">
- <div class="left_back_icon" @click="$router.go(-1)">
- <img src="../../assets/img/zuojiantou.png" alt />
- </div>
- </div>
- <div class="titles">
- <span>{{ '实名认证' }}</span>
- </div>
- <div class="bank_name">
- <div class="lefts">
- <span>{{ '真实姓名:' }}</span>
- </div>
- <div class="rights">
- <input type="text" v-model="form.name" />
- </div>
- </div>
- <div class="bank_name">
- <div class="lefts">
- <span>{{ '身份证号:' }}</span>
- </div>
- <div class="rights">
- <input type="text" v-model="form.idCard" />
- </div>
- </div>
- <div class="uploads">
- <div class="lefts">
- <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="!showBtn"
- >
- <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>
- </div>
- <div class="rights">
- <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="!showBtn"
- >
- <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>
- </div>
- </div>
- <div class="bank_name bind" @click="toSure" v-if="showBtn">
- <span>{{ '确定' }}</span>
- </div>
- <van-notify v-model="messFlag" type="primary">
- <div>
- <div class="eft">
- <span>{{ '认证失败,请重新认证' }}</span>
- </div>
- <div class="bft">
- <span>失败原因:{{this.$store.state.userInfo.authMsg}}</span>
- </div>
- </div>
- </van-notify>
+ <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: #777"></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="pass">
- <div class="top_t">
- <span v-if="this.$store.state.userInfo.isActive == 1" class="ise_pass">{{ '审核中' }}</span>
- <span v-if="!showBtn && this.$store.state.userInfo.isActive != 1">{{ '通过' }}</span>
- <span v-if="showBtn" class="ise_pass">{{ '未通过' }}</span>
- </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: #777"></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: #777"></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 apiUrl from "@/axios/api.url.js";
import { compress } from "@/utils/imgupload";
-
+import { isNull } from "@/utils/utils";
+import { Toast } from "vant";
export default {
- name: "bankCard",
+ name: 'Authentication',
data() {
return {
+ frontImage: '',
+ backImage: '',
+ isSubmitting: false,
+ auRadio: '1',
form: {
phone: "",
name: "",
idCard: "",
+ vaildNumber: "",
img1key: "",
img2key: "",
- img3key: ""
},
- img1Key: "",
- img2Key: "",
- img3Key: "",
- showBtn: true,
- admin: "",
imgStatus: false,
- imgStatus2: false,
- messFlag: this.$store.state.userInfo.isActive == 3 ? true : false
- };
+ admin: apiUrl.baseURL,
+ }
+ },
+ computed: {
+ //注册默认0 1.提交未实名 2.已实名 3.驳回, 状态1||2的时候屏蔽所有的输入
+ isActive() {
+ return this.$store.state.userInfo.isActive == 1 || this.$store.state.userInfo.isActive == 2;
+ // return false;
+ }
},
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;
- }
- },
- beforeDestroy() {
- if (this.$state.theme == "red") {
- document.body.classList.remove("red-bg");
- document.body.classList.add("black-bg");
- }
+ 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 = "";
- }
+ // 可以在这里加载用户已有的认证信息
+ // 如果用户已经提交过认证信息,可以显示认证状态
},
methods: {
+
+ toSure() {
+ if (this.isSubmitting || this.isActive) return // 防止重复提交
+ // 实名认证弹框
+ 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();
+ }
+ },
+ 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);
+ if (data.status === 0) {
+ Toast(this.$t("hj210"));
+ this.goBack();
+ } else {
+ 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" });
+ }
+ },
handleAvatarSuccess(res, file) {
this.imgStatus = false;
this.form.img1key = res.data.url;
@@ -163,200 +181,189 @@
},
beforeAvatarUpload2(file) {
this.imgStatus2 = true;
- // const _that = this
const isLt10M = file.size / 1024 / 1024 < 10;
if (!isLt10M) {
- this.$message.error("上传图片大小不能超过 10M!");
+ this.$message.error(this.$t("hj205"));
return false;
} else {
this.form.img2key = URL.createObjectURL(file);
- compress(file, function(val) {});
+ compress(file, function (val) { });
}
},
handleError2() {
this.imgStatus2 = false;
},
- handleAvatarSuccess3(res, file) {
- this.form.img3key = res.data.url; // URL.createObjectURL(file.raw);
- },
- beforeAvatarUpload3(file) {},
- // 上传
- 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);
- }
- },
- toSure() {
- // 实名认证弹框
- 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("请上传您的身份证照片");
- } else {
- // 显示确认弹窗
- this.toAuthentication();
- }
- },
- async toAuthentication() {
- let opts = {
- realName: this.form.name,
- idCard: this.form.idCard,
- img1key: this.form.img1key,
- img2key: this.form.img2key,
- img3key: this.form.img3key
- };
- let data = await api.userAuth(opts);
- if (data.status === 0) {
- Toast("提交成功!");
- this.goBack();
- } else {
- Toast(data.msg);
- }
- },
- goBack() {
- this.$router.back(-1);
- }
}
-};
+}
</script>
-<style scoped lang="less">
-.bank_card_page {
- width: 100%;
- height: 100%;
- background: #fff;
- position: relative;
- .content {
- width: 100%;
- height: 100%;
- padding: 0 0.6rem;
- .top_back {
- width: 100%;
- height: 2rem;
- > div {
- width: 10%;
- height: 100%;
- display: flex;
- align-items: center;
- }
- img {
- width: 0.6rem;
- height: 0.6rem;
- }
- }
- .titles {
- width: 100%;
- height: 1.5rem;
- font-size: 0.641rem;
- margin-top: 1rem;
- span {
- font-weight: 600;
- }
- }
- }
- .bank_name {
- width: 100%;
- height: 1.5rem;
- display: flex;
- padding: 0 0.2rem;
- background: rgb(247, 247, 247);
- border-radius: 0.2rem;
- margin-top: 0.3rem;
- .lefts {
- width: 25%;
- height: 100%;
- display: flex;
- align-items: center;
- font-size: 0.3846rem;
- span {
- font-weight: 600;
- }
- }
- .rights {
- width: 75%;
- height: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
- input {
- width: 100%;
- height: 100%;
- }
- }
- }
+<style lang="less" scoped>
+@green: #287dff;
+
+/deep/ .van-nav-bar__content {
+ height: 65px;
}
-.bank_name.bind {
+
+/deep/ .van-nav-bar__title {
+ font-family: "DINPro";
+ width: 100%;
+ height: 1.17333rem;
display: flex;
- align-items: center;
justify-content: center;
- background: #2d6ae9;
- font-size: 0.4103rem;
- color: #fff;
- span {
- font-weight: 600;
- }
-}
-.uploads {
- width: 100%;
- display: flex;
align-items: center;
- justify-content: space-between;
- margin-top: 0.3rem;
- > div {
- width: 48%;
- background: rgb(247, 247, 247);
- }
+ font-style: normal;
+ font-weight: 700;
+ font-size: 0.48rem;
+ color: #14181f;
}
-/deep/ .el-upload--picture-card {
- background: none;
- width: 100%;
- height: 1.6rem;
- line-height: 1.6rem;
-}
+
/deep/ .el-upload__input {
display: none;
}
-.pass {
- width: 70%;
- height: 4rem;
- position: absolute;
- top: 3.5rem;
- right: .2rem;
- opacity: 0.2;
- .top_t {
- width: 100%;
- height: 20%;
- display: flex;
- justify-content: flex-end;
- font-size: 3.2821rem;
- color: #99b8f5;
- align-items: flex-end;
+
+.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: @green;
+ color: #fff;
+ border-radius: 4px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ font-weight: normal;
+
+ span {
+ font-size: .4em;
}
- .ise_pass {
- font-size: 2.2rem;
- }
+}
+
+.disabled {
+ opacity: .5;
}
</style>
\ No newline at end of file
--
Gitblit v1.9.3