注册页面重构
This commit is contained in:
		
							parent
							
								
									1996d90a67
								
							
						
					
					
						commit
						db6e59df25
					
				| 
						 | 
				
			
			@ -1,185 +0,0 @@
 | 
			
		|||
<template>
 | 
			
		||||
    <div class="addPhoto-wrap">
 | 
			
		||||
        <div class="main-wrap">
 | 
			
		||||
            <!-- <div class="img-title">
 | 
			
		||||
                <span>请上传人脸照片</span>
 | 
			
		||||
            </div> -->
 | 
			
		||||
            <div class="main">
 | 
			
		||||
                <div class="img-item" >
 | 
			
		||||
                    <div class="template-wrap">
 | 
			
		||||
                        <!-- 使用背景图展示 -->
 | 
			
		||||
                        <!-- <div class="imgs" :style="{backgroundImage:`url(${photo.url})`}"></div> -->
 | 
			
		||||
                        <!-- 用image组件展示 -->
 | 
			
		||||
                        <div class="img-wrap">
 | 
			
		||||
                            <van-image
 | 
			
		||||
                            v-show="photo" 
 | 
			
		||||
                            class="imgs"
 | 
			
		||||
                            fit="contain"
 | 
			
		||||
                            :src="photo"
 | 
			
		||||
                            />
 | 
			
		||||
 | 
			
		||||
                            <div class="temp" v-show="!photo" >
 | 
			
		||||
                                <!-- <img class="cameraIcon" src="@/assets/image/camera-icon.png" alt=""> -->
 | 
			
		||||
                                <svg class="cameraIcon" viewBox="0 0 24 24"><path fill="currentColor" d="M20,4H16.83L15,2H9L7.17,4H4A2,2 0 0,0 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V6A2,2 0 0,0 20,4M20,18H4V6H8.05L9.88,4H14.12L15.95,6H20V18M12,7A5,5 0 0,0 7,12A5,5 0 0,0 12,17A5,5 0 0,0 17,12A5,5 0 0,0 12,7M12,15A3,3 0 0,1 9,12A3,3 0 0,1 12,9A3,3 0 0,1 15,12A3,3 0 0,1 12,15Z" /></svg>
 | 
			
		||||
                                <span>头像上传</span>
 | 
			
		||||
                            </div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <input :key="isKey" @change="onChange($event)" id="myInput" ref="myInput" type="file" accept="image/*">
 | 
			
		||||
                        <!-- <input :key="isKey" @change="onChange($event)" id="myInput" ref="myInput" type="file" accept="image/*"> -->
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <!-- 用来放添加按钮 -->
 | 
			
		||||
                <!-- <div class="img-item" v-show="!photo.url">
 | 
			
		||||
                    <div class="template-wrap">
 | 
			
		||||
                        <input :key="isKey" @change="onChange($event)" id="myInput" ref="myInput" type="file" accept="image/*" capture="camera">
 | 
			
		||||
                        <div class="img-wrap">
 | 
			
		||||
                            <div class="temp">
 | 
			
		||||
                                <img class="cameraIcon" src="@/assets/image/camera-icon.png" alt="">
 | 
			
		||||
                                <span>头像上传</span>
 | 
			
		||||
                            </div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div> -->
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { JudgeCompress, RotateImage, CheckFile, FiletoDataURL } from '@/utils/handleImage'
 | 
			
		||||
import { Image } from 'vant'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
    name:'AddPhoto',
 | 
			
		||||
    // props:{
 | 
			
		||||
    //     photo:Object,
 | 
			
		||||
    // },
 | 
			
		||||
    components:{
 | 
			
		||||
        [Image.name]:Image,
 | 
			
		||||
    },
 | 
			
		||||
    data(){
 | 
			
		||||
        return {
 | 
			
		||||
            isKey:0,
 | 
			
		||||
            compressSize:100,
 | 
			
		||||
            photo:'',
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    methods:{
 | 
			
		||||
        onChange(e) {
 | 
			
		||||
            if(!e.target.files[0]){      //用户可能取消选择,此时啥都不用做
 | 
			
		||||
                return 
 | 
			
		||||
            }
 | 
			
		||||
            this.$emit('readyHandle')    //告诉父级已经开始处理.
 | 
			
		||||
            this.photo = ''
 | 
			
		||||
            let file = e.target.files[0];
 | 
			
		||||
            let _this = this
 | 
			
		||||
            if(file){
 | 
			
		||||
                var imageFile = CheckFile(file);
 | 
			
		||||
                if(!imageFile){
 | 
			
		||||
                    this.$Toast.error('文件格式错误!')
 | 
			
		||||
                    return
 | 
			
		||||
                }else{
 | 
			
		||||
                    RotateImage(imageFile).then(res =>{         //传入文件,旋转后返回文件进行压缩
 | 
			
		||||
                        JudgeCompress(res,this.compressSize,0.95).then(res => {    //传入文件,压缩返回压缩后的文件
 | 
			
		||||
                            FiletoDataURL(res).then(res => {    //传入文件,返回base64 DataURL
 | 
			
		||||
                                _this.photo = res
 | 
			
		||||
                                _this.$emit('changePhoto', res)    
 | 
			
		||||
                                _this.isKey = (new Date()).getTime()    //修改key以防止重新选择同一张图不触发change
 | 
			
		||||
                            })
 | 
			
		||||
                        })
 | 
			
		||||
                    })
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="stylus" scoped>
 | 
			
		||||
.addPhoto-wrap
 | 
			
		||||
    width 100%
 | 
			
		||||
    position relative
 | 
			
		||||
    z-index 999
 | 
			
		||||
    .main-wrap
 | 
			
		||||
        width 100%
 | 
			
		||||
        padding 0
 | 
			
		||||
        box-sizing border-box
 | 
			
		||||
        .img-title
 | 
			
		||||
            // background rgb(64,158,255)
 | 
			
		||||
            padding 10px
 | 
			
		||||
            text-align center
 | 
			
		||||
            font-size 14px
 | 
			
		||||
            align-items center
 | 
			
		||||
            color black
 | 
			
		||||
            padding-left 5px
 | 
			
		||||
        .main
 | 
			
		||||
            width 100%
 | 
			
		||||
            box-sizing border-box
 | 
			
		||||
            padding 40px 5px
 | 
			
		||||
            display flex
 | 
			
		||||
            justify-content center
 | 
			
		||||
            .img-item
 | 
			
		||||
                width 50%
 | 
			
		||||
                height 0
 | 
			
		||||
                padding-bottom 50%
 | 
			
		||||
                position relative
 | 
			
		||||
                overflow hidden
 | 
			
		||||
                box-sizing border-box
 | 
			
		||||
                display inline-block
 | 
			
		||||
                .template-wrap
 | 
			
		||||
                    box-sizing border-box
 | 
			
		||||
                    position absolute
 | 
			
		||||
                    overflow hidden
 | 
			
		||||
                    bottom 5px
 | 
			
		||||
                    top 5px
 | 
			
		||||
                    left 5px
 | 
			
		||||
                    overflow hidden
 | 
			
		||||
                    right 5px
 | 
			
		||||
                    // background rgba(0,133,208,0.7)
 | 
			
		||||
                    padding 5px
 | 
			
		||||
                    .img-wrap
 | 
			
		||||
                        box-sizing border-box
 | 
			
		||||
                        width 100%
 | 
			
		||||
                        height 100%
 | 
			
		||||
                        border-radius 5px
 | 
			
		||||
                        overflow hidden
 | 
			
		||||
                    .imgs
 | 
			
		||||
                        width 100%
 | 
			
		||||
                        height 100%
 | 
			
		||||
                    .temp
 | 
			
		||||
                        position absolute 
 | 
			
		||||
                        top 5px
 | 
			
		||||
                        bottom 5px
 | 
			
		||||
                        left 5px
 | 
			
		||||
                        right 5px
 | 
			
		||||
                        border-radius 5px
 | 
			
		||||
                        overflow hidden
 | 
			
		||||
                        position absolute 
 | 
			
		||||
                        left 50%
 | 
			
		||||
                        top 50%
 | 
			
		||||
                        transform translate(-50%, -50%)
 | 
			
		||||
                        display flex
 | 
			
		||||
                        flex-direction column
 | 
			
		||||
                        justify-content center
 | 
			
		||||
                        align-items center
 | 
			
		||||
                        span 
 | 
			
		||||
                            color black
 | 
			
		||||
                            margin-top 10px
 | 
			
		||||
                            font-size 14px
 | 
			
		||||
                        .cameraIcon
 | 
			
		||||
                            width 60px
 | 
			
		||||
                            height 60px
 | 
			
		||||
                            color black
 | 
			
		||||
                    #myInput
 | 
			
		||||
                        position absolute 
 | 
			
		||||
                        left 0
 | 
			
		||||
                        top 0 
 | 
			
		||||
                        z-index 500
 | 
			
		||||
                        display inline-block
 | 
			
		||||
                        opacity 0
 | 
			
		||||
                        width 100%
 | 
			
		||||
                        height 100%
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -3,89 +3,106 @@
 | 
			
		|||
        <div class="background-wrap">
 | 
			
		||||
            <img class="background-image" src="@/assets/image/track.jpg" />
 | 
			
		||||
        </div>
 | 
			
		||||
        <!-- <div class="top-bgimg-wrap">
 | 
			
		||||
            <img class="top-img" src="@/assets/image/bgimg-top.png"/>
 | 
			
		||||
            <div class="logo-wrap">
 | 
			
		||||
                <img class="yidong-img" src="@/assets/image/yidong.png"/>
 | 
			
		||||
                <img class="fiveG-img" src="@/assets/image/5g.png"/>
 | 
			
		||||
        <div class="top-brand-wrap">
 | 
			
		||||
            <h1 class="title">注册</h1>
 | 
			
		||||
        </div>
 | 
			
		||||
        </div> -->
 | 
			
		||||
        <div class="info-card flex-container">
 | 
			
		||||
            <add-photo @changePhoto="changePhoto" @readyHandle='readyHandle'></add-photo>
 | 
			
		||||
            <van-form class="form">
 | 
			
		||||
        <div class="card flex-container">
 | 
			
		||||
            <!-- <add-photo @changePhoto="changePhoto" @readyHandle='readyHandle'></add-photo> -->
 | 
			
		||||
            <van-form>
 | 
			
		||||
                <van-cell-group inset>
 | 
			
		||||
                    <van-field required name="uploader" label="照片">
 | 
			
		||||
                        <template #input>
 | 
			
		||||
                            <van-uploader v-model="photoList" :after-read="readyHandle" :max-count="1" />
 | 
			
		||||
                        </template>
 | 
			
		||||
                    </van-field>
 | 
			
		||||
                    <van-field required v-model="formData.Name" name="姓名" label="姓名" clearable placeholder="请输入姓名" />
 | 
			
		||||
                    <van-field required type='number' v-model="formData.Phone" name="手机号" label="手机号" clearable placeholder="请输入手机号" />
 | 
			
		||||
                </van-cell-group>
 | 
			
		||||
                <van-button type="primary" block round @click="onSubmit">提交</van-button>
 | 
			
		||||
            </van-form>
 | 
			
		||||
            <div class="button" @click="onSubmit">提交</div>
 | 
			
		||||
        </div>
 | 
			
		||||
        <!-- <div class="hint">
 | 
			
		||||
            温馨提示:请使用只包含本人正面头像的清晰照片进行注册
 | 
			
		||||
        </div> -->
 | 
			
		||||
        <!-- <img class="bottom-img" src="@/assets/image/bgimg-bottom.png" alt=""> -->
 | 
			
		||||
        <!-- <van-image-preview v-model="showPreview" :images="images"> </van-image-preview> -->
 | 
			
		||||
    </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import addPhoto from "./components/addPhoto"
 | 
			
		||||
import { Field, Dialog } from 'vant';
 | 
			
		||||
import { Runnerverify} from 'api/home'
 | 
			
		||||
import { Form, Field, CellGroup, Dialog, Toast, Button, Uploader } from 'vant'
 | 
			
		||||
import { JudgeCompress, RotateImage, CheckFile, FiletoDataURL } from '@/utils/handleImage'
 | 
			
		||||
import { Runnerverify } from 'api/home'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
    name:'Home',
 | 
			
		||||
    name: 'Home',
 | 
			
		||||
    components:{
 | 
			
		||||
        addPhoto,
 | 
			
		||||
        [Field.name]:Field,
 | 
			
		||||
        [Dialog.name]:Dialog 
 | 
			
		||||
        [Form.name]: Form,
 | 
			
		||||
        [Field.name]: Field,
 | 
			
		||||
        [Dialog.name]: Dialog,
 | 
			
		||||
        [Toast.name]: Toast,
 | 
			
		||||
        [CellGroup.name]: CellGroup,
 | 
			
		||||
        [Button.name]: Button,
 | 
			
		||||
        [Uploader.name]: Uploader
 | 
			
		||||
    },
 | 
			
		||||
    activated(){
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
    watch:{
 | 
			
		||||
    watch: {
 | 
			
		||||
        Code(val){
 | 
			
		||||
            sessionStorage.Code = val
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    data(){
 | 
			
		||||
        return {
 | 
			
		||||
            photo:'',
 | 
			
		||||
            formData:{
 | 
			
		||||
                Name:'',
 | 
			
		||||
                Phone:'',
 | 
			
		||||
                Code:''
 | 
			
		||||
            photo: '',
 | 
			
		||||
            formData: {
 | 
			
		||||
                Name: '',
 | 
			
		||||
                Phone: '',
 | 
			
		||||
                Code: ''
 | 
			
		||||
            },
 | 
			
		||||
            Code:null,            //存入本地的code
 | 
			
		||||
            Code: null,
 | 
			
		||||
            photoList: []
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    methods:{
 | 
			
		||||
        changePhoto(imgBase64){
 | 
			
		||||
            this.photo = imgBase64
 | 
			
		||||
            this.$Loading.hidden()
 | 
			
		||||
        },
 | 
			
		||||
        readyHandle(){
 | 
			
		||||
            this.$Loading.show('正在处理图片...')
 | 
			
		||||
    methods: {
 | 
			
		||||
       readyHandle(file) {
 | 
			
		||||
            let _this = this
 | 
			
		||||
            if (file.file){
 | 
			
		||||
                var imageFile = CheckFile(file.file)
 | 
			
		||||
                if (!imageFile){
 | 
			
		||||
                    Toast.fail('图片文件格式错误!')
 | 
			
		||||
                    return
 | 
			
		||||
                } else {
 | 
			
		||||
                    RotateImage(imageFile).then(res => {         //传入文件,旋转后返回文件进行压缩
 | 
			
		||||
                        JudgeCompress(res, this.compressSize,0.95).then(res => {    //传入文件,压缩返回压缩后的文件
 | 
			
		||||
                            FiletoDataURL(res).then(res => {    //传入文件,返回base64 DataURL
 | 
			
		||||
                                _this.photo = res
 | 
			
		||||
                                _this.photoList = [{url: res, isImage: true}]
 | 
			
		||||
                            })
 | 
			
		||||
                        })
 | 
			
		||||
                    })
 | 
			
		||||
                    Toast.success('上传成功')
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        onSubmit(){
 | 
			
		||||
            if(this.verifyForm()){
 | 
			
		||||
            if (this.verifyForm()){
 | 
			
		||||
                let data = {
 | 
			
		||||
                    Name: this.formData.Name,
 | 
			
		||||
                    facePic: this.photo,
 | 
			
		||||
                    Phone:this.formData.Phone
 | 
			
		||||
                    Phone: this.formData.Phone
 | 
			
		||||
                }
 | 
			
		||||
                this.$Loading.show('正在注册...')
 | 
			
		||||
                Toast.loading({
 | 
			
		||||
                    message: '正在注册……',
 | 
			
		||||
                    forbidClick: true,
 | 
			
		||||
                });
 | 
			
		||||
                Runnerverify(data).then(res => {
 | 
			
		||||
                    if(res.code === 0){
 | 
			
		||||
                        this.$Toast.success('注册成功!')
 | 
			
		||||
                    if (res.code === 0){
 | 
			
		||||
                        Toast.success('注册成功!')
 | 
			
		||||
                        this.$router.push('/photos')
 | 
			
		||||
                        localStorage.images = JSON.stringify(res.data)
 | 
			
		||||
                    }else if(res.code === 2004){     //号码已被使用
 | 
			
		||||
                    } else if (res.code === 2004){     //号码已被使用
 | 
			
		||||
                        Dialog.alert({
 | 
			
		||||
                            title: '温馨提示',
 | 
			
		||||
                            message: '号码已被占用,请使用新的手机号码进行注册!'
 | 
			
		||||
                            title: '提示',
 | 
			
		||||
                            message: '号码已注册。请使用新的手机号码进行注册,或使用此号码登录。'
 | 
			
		||||
                        });
 | 
			
		||||
                    }else if(res.code == 2021){      //如果返回没有照片则提示用户
 | 
			
		||||
                    } else if (res.code === 2021){      //如果返回没有照片则提示用户
 | 
			
		||||
                        localStorage.images = []
 | 
			
		||||
                        this.$router.push({
 | 
			
		||||
                            path:'/photos',
 | 
			
		||||
| 
						 | 
				
			
			@ -93,29 +110,27 @@ export default {
 | 
			
		|||
                                type:'hintPage'
 | 
			
		||||
                            }
 | 
			
		||||
                        })
 | 
			
		||||
                    }else{
 | 
			
		||||
                        this.$Toast.error('注册失败:' + res.msg)
 | 
			
		||||
                    } else {
 | 
			
		||||
                        Toast.fail('注册失败:' + res.msg)
 | 
			
		||||
                    }
 | 
			
		||||
                    this.$Loading.hidden()
 | 
			
		||||
                    Toast.clear()
 | 
			
		||||
                }).catch(err => {
 | 
			
		||||
                    this.$Loading.hidden()
 | 
			
		||||
                    Toast.fail('错误:' + err)
 | 
			
		||||
                    Toast.clear()
 | 
			
		||||
                })
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        verifyForm(){                   //表单校验
 | 
			
		||||
            // let idcardReg = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X|x)$/;
 | 
			
		||||
            // let IDcardFlag = idcardReg.test(this.formData.IDcard) ? true : false;
 | 
			
		||||
            let NameFlag = this.formData.Name.length && this.formData.Name.length > 0 ? true : false
 | 
			
		||||
            if(!this.photo){
 | 
			
		||||
                this.$Toast.error('请上传人脸照片!')
 | 
			
		||||
        verifyForm(){
 | 
			
		||||
            if (!this.photo){
 | 
			
		||||
                Toast.fail('请上传人脸照片!')
 | 
			
		||||
                return
 | 
			
		||||
            }else if(!NameFlag){
 | 
			
		||||
                this.$Toast.error('请填写姓名!')
 | 
			
		||||
            } else if (!this.formData.Name.length){
 | 
			
		||||
                Toast.fail('请填写姓名!')
 | 
			
		||||
                return
 | 
			
		||||
            }else if(this.formData.Phone.length !== 11){
 | 
			
		||||
                this.$Toast.error('请填写正确的手机号码!')
 | 
			
		||||
            } else if (this.formData.Phone.length !== 11){
 | 
			
		||||
                Toast.fail('请填写正确的手机号码!')
 | 
			
		||||
                return
 | 
			
		||||
            }else{
 | 
			
		||||
            } else {
 | 
			
		||||
                return true
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue