From c9a0817f7593135080ae814ec55faec903f39269 Mon Sep 17 00:00:00 2001
From: zhaoxiaoqiang <l287285524@qq.com>
Date: Thu, 04 Aug 2022 17:24:43 +0800
Subject: [PATCH] 1
---
src/views/user/login.vue | 568 +++++++++++++++++++++++++++++---------------------------
1 files changed, 294 insertions(+), 274 deletions(-)
diff --git a/src/views/user/login.vue b/src/views/user/login.vue
index ae7a3d3..52379a0 100644
--- a/src/views/user/login.vue
+++ b/src/views/user/login.vue
@@ -1,331 +1,351 @@
<!--
* @Author: 小明丶
- * @Date: 2019-08-15 10:20:56
+ * @Date: 2020-05-23 11:05:09
* @LastEditors: zxq
- * @LastEditTime: 2022-08-04 10:42:08
- * @Description: 登录页面
- -->
+ * @LastEditTime: 2022-07-08 14:54:57
+ * @Description: 上传身份证
+-->
<template>
- <div class="login-page">
- <div class="logo-box">
- <div class="logo-img-box">
- <img src="../../../static/img/logo.png" alt="logo" class="logo-pic" />
+ <div class="upload-IDcard-page">
+ <v-navbar title="订单申请"></v-navbar>
+ <div class="steps-box">
+ <div></div>
+ <div class="steps">
+ <p></p>
+ <div class="step-1">1</div>
+ <div class="step-2">2</div>
+ <div class="step-3">3</div>
</div>
- <p>爱享学</p>
</div>
- <h-ipt
- icon="iconxingming"
- :maxlength="11"
- type="text"
- :getClose="true"
- v-model="mblNo"
- placeholder="请输入手机号"
- class="myipt"
- ></h-ipt>
- <h-ipt icon="iconmima" :maxlength="6" v-model="verCode" placeholder="请输入短信验证码" class="myiptTwo">
- <template slot="right">
- <div>
- <button
- class="getcode"
- :disabled="btnDis"
- :style="btnDis?'color:#E6E6E6':'color:#62A0FF'"
- @click="sendCode"
- >{{btnText}}</button>
- </div>
- </template>
- </h-ipt>
- <div class="text-box">
- <van-checkbox v-model="checked" shape="round" icon-size="16px">
- <template #default>
- <p class="xieyi">
- <span>我已阅读并同意</span>
- <span @click.stop="showAgree(1)">《隐私政策》</span>
- <span @click.stop="showAgree(2)">《用户注册服务协议》</span>
- </p>
- </template>
- </van-checkbox>
+ <div class="tit-box">
+ <p>身份证照片上传</p>
+ <p>请确保照片清晰可见,以便顺利申请</p>
+ </div>
+ <div class="idcard-box">
+ <upLoadIdCard :cardBack="idCardMation.idBackUrl" :cardFont="idCardMation.idFrontUrl"></upLoadIdCard>
+ </div>
+ <div class="id-mation-box">
+ <div class="tit">
+ <p>请核对身份证信息</p>
+ </div>
+ <div class="mation">
+ <h-cell v-model="idCardMation.usrIdName" isMust label="姓名"></h-cell>
+ <h-cell v-model="idCardMation.usrIdCard" isMust readonly label="身份证号"></h-cell>
+ <h-cell v-model="idCardMation.sex" readonly isMust label="性别"></h-cell>
+ <h-cell v-model="idCardMation.idCardAddr" isMust label="身份证地址"></h-cell>
+ <h-cell v-model="idDate" readonly isLink isMust label="有效期" @click.native="isShoTime = true"></h-cell>
+ </div>
</div>
<div class="btn-box">
- <button @click="loginBut">登录</button>
+ <button @click="goNext">下一步</button>
</div>
- <!-- <div class="idcard-box">
- <upLoadIdCard :cardBack="idCardMation.idBackUrl" :cardFont="idCardMation.idFrontUrl"></upLoadIdCard>
- </div> -->
+ <van-popup v-model="isShoTime" position="bottom">
+ <div class="text-center-g flex-around-g time-label">
+ <p
+ class="flex-1-g"
+ :class="[timeIndex===0 ? 'active':'']"
+ @click="setTimeIndex(0)"
+ >开始:{{startDay}}</p>
+ <p
+ class="flex-1-g"
+ :class="[timeIndex===1 ? 'active':'']"
+ @click="setTimeIndex(1)"
+ >结束:{{endDay}}</p>
+ </div>
+ <van-datetime-picker
+ ref="timepicker"
+ item-height='45'
+ visible-item-count='4'
+ :show-toolbar="false"
+ v-model="currentDate"
+ @change="setTime"
+ :min-date="minDate"
+ :max-date="maxDate"
+ type="date"
+ />
+ <van-button class="btn-time" @click="refreshData">确定</van-button>
+ </van-popup>
</div>
</template>
-
<script>
-import { mapActions } from "vuex";
+import Bus from "../../bus";
import Vue from "vue";
-import { RadioGroup, Radio } from "vant";
-import { Checkbox, CheckboxGroup } from "vant";
+import { DatetimePicker } from "vant";
import { Popup } from "vant";
-import { Icon } from "vant";
-Vue.use(Icon);
-Vue.use(Popup);
-Vue.use(Checkbox);
-Vue.use(CheckboxGroup);
-Vue.use(Radio);
-Vue.use(RadioGroup);
+Vue.use(Popup);
+Vue.use(DatetimePicker);
export default {
data() {
return {
- checked: false, //协议勾选
- radio: "",
- //数据
- // 18108048791 1234qwer
- mblNo: "", //用户手机号
- verCode: "", //验证码
- openId: 456, //微信openId
- //点击显示密码为明文,眼睛的样式也是根据这个来判断的
- pwdType: "password",
- test: false,
- loginImg: "static/img/logo.png",
- timer: "",
- showSend: true,
- btnText: "发送验证码",
- btnDis: false,
- miao: 60,
- code: "",
- ShowAgreen: false, //协议展示框
- Agreend: "", //协议
+ readOnlyName: false,
+ readOnlyId: false,
+ readOnlySex: false,
+ minDate: new Date(1990, 0, 1),
+ maxDate: new Date(2030, 11, 31),
+ startDay: "", // 开始时间
+ endDay: "", //结束时间
+ timeIndex: 0,
+ isShoTime: false,
+ timePicker: null,
+ currentDate: new Date(1990, 0, 1),
+ idCardMation: {}, //身份证相关信息
+ //idCardUserInfo:{},//身份证照片信息
};
},
- created() {
- // 存储倒计时
- if(this.$route.query.whichPage && sessionStorage.beforeDate){
- this.miao = Math.round(new Date().getTime()/1000 - sessionStorage.beforeDate/1000)
- if(this.miao < 60){
- this.getSecond(60 - this.miao)
- }else{
- this.miao = 60
+ computed: {
+ idDate() {
+ if (
+ this.idCardMation.idCardValidBegin &&
+ this.idCardMation.idCardValidEnd
+ ) {
+ return (
+ this.idCardMation.idCardValidBegin +
+ "-" +
+ this.idCardMation.idCardValidEnd
+ );
}
- }
- if(sessionStorage.mblNo){
- this.mblNo = sessionStorage.mblNo
- }
- if(sessionStorage.verCode){
- this.verCode = sessionStorage.verCode
- }
+ },
+ // cardBack() {
+ // return this.idCardMation.idBackUrl;
+ // },
+ // cardFont() {
+ // return this.idCardMation.idFrontUrl;
+ // }
+ },
+ created() {
+ this.$api.createInitIdInfo().then(res => {
+ this.idCardMation = res.body;
+ if (this.idCardMation.usrIdName) {
+ this.readOnlyName = true;
+ }
+ if (this.idCardMation.usrIdCard) {
+ this.readOnlyId = true;
+ }
+ if (this.idCardMation.sex) {
+ this.readOnlySex = true;
+ }
+ });
+ },
+ beforeUpdate(){
+ let _this = this
+ Bus.$on('getIdUserInfo',(msg)=>{
+ _this.idCardMation = msg
+ })
},
methods: {
- ...mapActions(["login", "getVercode"]),
- //登录验证
- loginBut() {
- let v = this.$tool;
- if (v.checkValEmpty(this.mblNo)) {
- v.toast("请输入手机号");
- return;
+ //设置时间
+ setTime(picker, arr) {
+ if (!this.timepicker && picker) {
+ this.timePicker = picker;
}
- if (!v.checkPhone(this.mblNo)) {
- v.toast("请输入正确手机号");
- return;
- }
- if (v.checkValEmpty(this.verCode)) {
- v.toast("请输入验证码");
- return;
- }
- if (!this.checked) {
- v.toast("请确认并勾选用户协议");
- return;
- }
- this.login({
- vm: this,
- mblNo: this.mblNo,
- verCode: this.verCode,
- // openId: localStorage.axx_ins_client_openId
- });
- },
- sendCode() {
- let v = this.$tool;
- if (v.checkValEmpty(this.mblNo)) {
- v.toast("请输入手机号");
- return;
- }
- if (!v.checkPhone(this.mblNo)) {
- v.toast("请输入正确手机号");
- return;
- }
- this.$api.getVerCode({
- mblNo: this.mblNo,
- verCodeType: 1
- }).then(res=>{
- sessionStorage.beforeDate = new Date().getTime()
- this.getSecond(60);
- })
- },
- //发送验证码计时函数
- getSecond(wait) {
- let _this = this;
- let _wait = wait;
- if (wait == 0) {
- this.btnText = "获取验证码";
- wait = _wait;
- this.btnDis = false;
- clearTimeout(this.timer)
+ let v = arr ? arr : picker.getValues(),
+ time = v[0] + "." + v[1] + "." + v[2];
+ if (this.timeIndex === 0) {
+ this.startDay = time;
} else {
- this.btnDis = true;
- this.btnText = "验证码(" + wait + "s)";
- wait--;
- this.timer = setTimeout(function() {
- _this.getSecond(wait);
- }, 1000);
+ this.endDay = time;
}
},
- // 展示协议
- showAgree(which) {
- sessionStorage.mblNo = this.mblNo
- sessionStorage.verCode = this.verCode
- if(which == 1){
- this.$router.push({
- path:'/agreement',
- query:{
- from:'login',
- tit:'隐私协议',
- agrUrl:'./static/ys.pdf'
- }
- })
- }
- if(which == 2){
- this.$router.push({
- path:'/agreement',
- query:{
- from:'login',
- tit:'用户注册服务协议',
- agrUrl:'./static/zc.pdf'
- }
- })
+ setTimeIndex(index) {
+ this.timeIndex = index;
+ this.setPickerValue();
+ },
+ // 设置日期的值
+ setPickerValue() {
+ if (this.timePicker) {
+ let timeArr = [];
+ if (this.timeIndex === 0) {
+ timeArr = this.startDay;
+ } else {
+ timeArr = this.endDay;
+ }
+ this.currentDate = new Date(timeArr);
}
},
- },
-
- beforeRouteLeave (to, from, next) {
- // ...
- clearTimeout(this.timer)
- next()
+ // 时间切换刷新统计数据
+ refreshData() {
+ if (this.timePicker) {
+ let arr = this.timePicker.getValues();
+ this.setTime(null, arr);
+ this.idCardMation.idCardValidBegin = this.startDay;
+ this.idCardMation.idCardValidEnd = this.endDay;
+ }
+ this.isShoTime = false;
+ },
+ // 下一步
+ goNext() {
+ let v = this.$tool;
+ if(v.checkValEmpty(this.idCardMation.idFrontUrl)){
+ v.toast('请上传身份证正面')
+ return
+ }
+ if(v.checkValEmpty(this.idCardMation.idBackUrl)){
+ v.toast('请上传身份证反面')
+ return
+ }
+ if(v.checkValEmpty(this.idCardMation.idCardAddr)){
+ v.toast('请输入身份证详细地址')
+ return
+ }
+ // if(!v.checkValEmpty(this.idCardMation.idCardAddr)){
+ // v.toast('请输入正确的身份证详细地址')
+ // return
+ // }
+ this.$api.saveIdInfo({...this.idCardMation,}).then(res => {
+ let str = location.host
+ //保存成功后获取人脸识别地址
+ // this.$api.getFaceUrl({
+ // callbackUrl:`https://${str}/aic_cus/#/order-handling/face-recognition`
+ // }).then(res=>{
+ // window.location.href = res.body.faceUrl
+ // })
+ this.$router.push({
+ path: "/order-handling/face-recognition",
+ query: {isFaceBack:'1'}
+ });
+ });
+ }
}
};
</script>
<style lang="less" scoped>
-.login-page {
- padding-top: 42px;
- box-sizing: border-box;
- .logo-box {
+.upload-IDcard-page {
+ & {
+ min-height: 100vh;
+ }
+ .steps-box {
& {
- text-align: center;
- font-size: 18px;
- margin-bottom: 30px;
+ display: flex;
}
- img {
- width: 55px;
- height: 83px;
+ div {
+ width: 50%;
}
- .logo-img-box {
- display: inline-block;
- width: 100px;
- height: 100px;
+ .steps {
+ height: 65px;
+ position: relative;
+ p {
+ border-bottom: 1px dashed #b3b3b3;
+ height: 32px;
+ }
+ .step-1 {
+ text-align: center;
+ line-height: 30px;
+ color: #fff;
+ width: 30px;
+ height: 30px;
+ background: rgba(81, 148, 254, 1);
+ box-shadow: 0px 0px 8px 0px rgba(81, 148, 254, 0.64);
+ border-radius: 50%;
+ position: absolute;
+ left: -15px;
+ top: 19px;
+ }
+ .step-2 {
+ text-align: center;
+ line-height: 28px;
+ width: 28px;
+ height: 28px;
+ background: rgba(255, 255, 255, 1);
+ border: 1px solid rgba(113, 123, 133, 1);
+ border-radius: 50%;
+ position: absolute;
+ left: 55px;
+ top: 19px;
+ }
+ .step-3 {
+ text-align: center;
+ line-height: 28px;
+ width: 28px;
+ height: 28px;
+ background: rgba(255, 255, 255, 1);
+ border: 1px solid rgba(113, 123, 133, 1);
+ border-radius: 50%;
+ position: absolute;
+ left: 130px;
+ top: 19px;
+ }
+ }
+ }
+ .tit-box {
+ & {
+ width: 343px;
+ height: 75px;
background: rgba(255, 255, 255, 1);
- box-shadow: 0px 0px 12px 0px rgba(34, 105, 209, 0.2);
- border-radius: 15px;
+ box-shadow: 0px 0px 10px 0px rgba(47, 103, 192, 0.1);
+ border-radius: 5px;
+ margin: auto;
box-sizing: border-box;
- padding-top: 11px;
+ padding: 16px 17px;
}
- p {
- margin-top: 16px;
- font-size: 17px;
+ p:nth-of-type(1) {
+ margin-bottom: 10px;
+ font-size: 16px;
font-family: PingFang SC;
font-weight: 500;
color: rgba(51, 51, 51, 1);
}
- }
- .myipt {
- margin-top: 51px;
- }
- .myiptTwo {
- margin-top: 20px;
- margin-bottom: 17px;
- }
- .getcode {
- font-size: 13px;
- font-family: PingFang SC;
- font-weight: 500;
- text-decoration: underline;
- color: rgba(98, 160, 255, 1);
- outline: none;
- height: 30px;
- border: 0;
- background: #fff;
- }
- .text-box {
- & {
- width: 100%;
- padding: 0 10%;
- box-sizing: border-box;
+ p:nth-of-type(2) {
+ font-size: 12px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(153, 153, 153, 1);
}
- .xieyi {
- span:nth-of-type(1) {
- font-size: 12px;
- font-family: PingFang SC;
- font-weight: 500;
- color: rgba(153, 153, 153, 1);
- }
- span:nth-of-type(2) {
- font-size: 12px;
- font-family: PingFang SC;
- font-weight: 500;
- color: #5194fe;
- }
- span:nth-of-type(3) {
- font-size: 12px;
- font-family: PingFang SC;
- font-weight: 500;
- color: #5194fe;
- }
+ }
+ .idcard-box {
+ & {
+ margin-top: 29px;
+ }
+ }
+ .id-mation-box {
+ & {
+ box-sizing: border-box;
+ padding-left: 17px;
+ margin-top: 27px;
+ }
+ .tit {
+ font-size: 14px;
+ font-family: PingFang SC;
+ font-weight: 500;
+ color: rgba(51, 51, 51, 1);
+ }
+ .mation {
+ box-sizing: border-box;
+ padding: 0 26px;
}
}
.btn-box {
- & {
- width: 100%;
- text-align: center;
- margin-top: 37px;
- }
+ text-align: center;
+ margin-top: 32px;
+ padding-bottom: 37px;
button {
- width: 80%;
+ width: 320px;
height: 44px;
- background: linear-gradient(
- 90deg,
- rgba(82, 142, 255, 1),
- rgba(105, 167, 255, 1)
- );
- box-shadow: 0px 8px 15px 0px rgba(91, 152, 255, 0.28);
+ background: rgba(81, 148, 254, 1);
border-radius: 22px;
- outline: none;
- border: 0;
color: #fff;
+ border: 0;
+ outline: none;
}
}
- .agreenBox {
- width: 80vw;
- height: 70vh;
- padding: 60px 20px 30px 20px;
- position: relative;
- }
+ .time-label {
+ .lh(65px);
+ color: @c-text-999;
- .agreen-html {
- width: 100%;
- height: 100%;
- overflow: scroll;
- box-sizing: border-box;
- }
-
- .close-agreen {
- .lh(30px);
- .flex(center, center);
-
- .van-icon {
- font-size: @font-16;
+ .active {
+ color: @c-text-default;
}
+ }
+ .btn-time {
+ display: block;
+ text-align: center;
+ line-height: 40px;
+ width: 320px;
+ height: 40px;
+ background-color: @c-bg-default;
+ color: @c-text-fff;
+ border-radius: 22px;
+ margin: 15px auto;
}
}
-</style>
\ No newline at end of file
+</style>
--
Gitblit v1.8.0