| <template>  | 
|     <view class="container">  | 
|         <view class="visitor-form">  | 
|             <view class="cell">  | 
|                 <view class="title"><b>*</b>姓名</view>  | 
|                 <view class="content">  | 
|                     <input class="input" @focus="showKeyboard = true" @blur="showKeyboard = false"  | 
|                         placeholder-style="color: #999999;" maxlength="30" v-model="visitorData.name" placeholder="请输入您的真实姓名" />  | 
|                 </view>  | 
|             </view>  | 
|             <view class="cell">  | 
|                 <view class="title"><b>*</b>手机号</view>  | 
|                 <view class="content">  | 
|                     <input type="number" @focus="showKeyboard = true" @blur="showKeyboard = false" class="input" maxlength="11"  | 
|                         placeholder-style="color: #999999;" v-model="visitorData.phone" placeholder="请输入您的手机号" />  | 
|                 </view>  | 
|             </view>  | 
|             <view class="cell">  | 
|                 <view class="title"><b>*</b>证件类型</view>  | 
|                 <view class="content" @click="show = true">  | 
|                     <text  | 
|                         :style="{color: visitorData.idcardTypeName ? '#000000' : ''}">{{visitorData.idcardTypeName ? visitorData.idcardTypeName : '请选择'}}</text>  | 
|                     <u-icon name="arrow-right" color="#CCCCCC" size="16" class="ml6"></u-icon>  | 
|                 </view>  | 
|             </view>  | 
|             <view class="cell">  | 
|                 <view class="title"><b>*</b>证件号码</view>  | 
|                 <view class="content">  | 
|                     <input class="input" maxlength="18" @focus="showKeyboard = true" @blur="showKeyboard = false"  | 
|                         placeholder-style="color: #999999;" v-model="visitorData.idcardNo" placeholder="请输入您的证件号码" />  | 
|                 </view>  | 
|             </view>  | 
|             <view class="empty"></view>  | 
|             <view class="cell">  | 
|                 <view class="title"><b>*</b>公司名称</view>  | 
|                 <view class="content">  | 
|                     <input class="input" maxlength="50" @focus="showKeyboard = true" @blur="showKeyboard = false"  | 
|                         placeholder-style="color: #999999;" v-model="visitorData.companyName" placeholder="请输入您的公司名称" />  | 
|                 </view>  | 
|             </view>  | 
|             <view class="cell">  | 
|                 <view class="title1">  | 
|                     <text class="title1_a"><b>*</b>人脸照片</text>  | 
|                     <text class="title1_b">1、请提供五官清晰,人脸居中的正面人脸免冠照片;</text>  | 
|                     <text class="title1_b">2、照片无逆光、无PS、无过度美颜处理</text>  | 
|                 </view>  | 
|                 <view class="content">  | 
|                     <view class="content_uplaod" @click="upload('faceImg')" v-if="!visitorData.faceImgUrl">  | 
|                         <u-icon name="plus" color="rgb(153, 153, 153)" size="20"></u-icon>  | 
|                     </view>  | 
|                     <view class="content_uplaod" @click="upload('faceImg')" v-else>  | 
|                         <image :src="visitorData.faceImgUrl" mode="widthFix"></image>  | 
|                     </view>  | 
|                 </view>  | 
|             </view>  | 
|             <view style="height: 20rpx; background-color: #F7F7F7;"></view>  | 
|             <!-- <view class="cell">  | 
|                 <view class="title">健康证<b v-if="visit === '1'">*</b></view>  | 
|                 <view class="content">  | 
|                     <view class="content_uplaod" @click="upload('imgurl')" v-if="!visitorData.imgurlUrl">  | 
|                         <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>  | 
|                     </view>  | 
|                     <view class="content_uplaod" @click="upload('imgurl')" v-else>  | 
|                         <image :src="visitorData.imgurlUrl" mode="widthFix"></image>  | 
|                     </view>  | 
|                 </view>  | 
|             </view> -->  | 
|         </view>  | 
|         <view v-if="!showKeyboard" class="footer-box">  | 
|             <view class="submit-button" @click="submit">下一步</view>  | 
|         </view>  | 
|         <!-- <tly-picture-cut ref="tlyPictureCut" :pictureSrc="photoSrc" @createImg="uploadImg"></tly-picture-cut> -->  | 
|         <u-picker :show="show" :columns="columns" keyName="name" @cancel="show = false" @confirm="confirm"></u-picker>  | 
|         <qf-image-cropper ref="cropper" :width="280" :height="280" :radius="0" fileType="jpg"  | 
|             @crop="uploadImg"></qf-image-cropper>  | 
|     </view>  | 
| </template>  | 
|   | 
| <script>  | 
|     import tlyPictureCut from "@/components/tly-picture-cut/tlyPictureCut.vue";  | 
|     import QfImageCropper from '@/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue';  | 
|     import {  | 
|         mapState  | 
|     } from 'vuex'  | 
|     import {  | 
|         uploadAvatar  | 
|     } from "@/utils/config"  | 
|     import {  | 
|         getSystemDictData,  | 
|         visitorSub  | 
|     } from '@/api'  | 
|     export default {  | 
|         data() {  | 
|             return {  | 
|                 photoSrc: "",  | 
|                 show: false,  | 
|                 showKeyboard: false,  | 
|                 visit: '',  | 
|                 type: '',  | 
|                 columns: [  | 
|                     [{  | 
|                         name: '身份证',  | 
|                         id: 0  | 
|                     }, {  | 
|                         name: '港澳证件',  | 
|                         id: 1  | 
|                     }, {  | 
|                         name: '护照',  | 
|                         id: 2  | 
|                     }]  | 
|                 ],  | 
|                 fileList: [],  | 
|                 visitorData: {  | 
|                     userAnswerId: '',  | 
|                     name: '',  | 
|                     phone: '',  | 
|                     idcardType: 0,  | 
|                     idcardTypeName: '身份证',  | 
|                     idcardNo: '',  | 
|                     faceImg: '',  | 
|                     faceImgUrl: '',  | 
|                     imgurl: '',  | 
|                     imgurlUrl: '',  | 
|                     companyName: ''  | 
|                 }  | 
|             }  | 
|         },  | 
|         components: {  | 
|             tlyPictureCut,  | 
|             QfImageCropper  | 
|         },  | 
|   | 
|         onLoad(option) {  | 
|             const visitorData = uni.getStorageSync('member')  | 
|             if (visitorData.faceImg) {  | 
|                 visitorData.faceImgUrl = visitorData.prefixUrl + visitorData.faceImg  | 
|             }  | 
|             if (visitorData && visitorData.name) {  | 
|                 this.visitorData = visitorData  | 
|             }  | 
|             this.visitorData.companyName = visitorData.visitCompanyName  | 
|             this.visitorData.idcardNo = visitorData.idcardDecode  | 
|             if (this.visitorData.idcardType === 0) {  | 
|                 this.visitorData.idcardTypeName = '身份证'  | 
|             } else if (this.visitorData.idcardType === 1) {  | 
|                 this.visitorData.idcardTypeName = '港澳证件'  | 
|             } else if (this.visitorData.idcardType === 2) {  | 
|                 this.visitorData.idcardTypeName = '护照'  | 
|             } | 
|             if (this.visitorData.imgurl) { | 
|                     this.visitorData.imgurlUrl = this.visitorData.prefixUrl + this.visitorData.imgurl | 
|                 }  | 
|             // if (this.member ) {  | 
|             //     this.visitorData.name = this.member.name  | 
|             //     this.visitorData.phone = this.member.phone  | 
|             //     this.visitorData.idcardNo = this.member.idcardDecode  | 
|             //     this.visitorData.companyName = this.member.visitCompanyName  | 
|             //     this.visitorData.faceImg = this.member.faceImg  | 
|             //     if (this.member.faceImg) {  | 
|             //         this.visitorData.faceImgUrl = this.member.prefixUrl + this.member.faceImg  | 
|             //     }  | 
|             //     this.visitorData.imgurl = this.member.imgurl  | 
|             //     if (this.member.imgurl) {  | 
|             //         this.visitorData.imgurlUrl = this.member.prefixUrl + this.member.imgurl  | 
|             //     }  | 
|             //     this.visitorData.idcardType = this.member.idcardType  | 
|             //     if (this.member.idcardType === 0) {  | 
|             //         this.visitorData.idcardTypeName = '身份证'  | 
|             //     } else if (this.member.idcardType === 1) {  | 
|             //         this.visitorData.idcardTypeName = '港澳证件'  | 
|             //     } else if (this.member.idcardType === 2) {  | 
|             //         this.visitorData.idcardTypeName = '护照'  | 
|             //     }  | 
|             // }  | 
|             this.visitorData.userAnswerId = option.answerId || ''  | 
|             // this.getVisit()  | 
|             // uni.$on('update', (data) => {  | 
|             //     this.uploadImg(data.tempFilePath)  | 
|             // })  | 
|         },  | 
|   | 
|         methods: {  | 
|             submit() {  | 
|                 const {  | 
|                     visitorData  | 
|                 } = this  | 
|                 if (!this.visitorData.name) return uni.showToast({  | 
|                     title: '姓名不能为空',  | 
|                     icon: 'none'  | 
|                 })  | 
|                 if (!this.visitorData.phone) return uni.showToast({  | 
|                     title: '手机号不能为空',  | 
|                     icon: 'none'  | 
|                 })  | 
|                 const regExp = /^1[3456789]\d{9}$/;  | 
|                 if (!regExp.test(this.visitorData.phone)) return uni.showToast({  | 
|                     title: '手机号格式错误',  | 
|                     icon: 'none'  | 
|                 })  | 
|                 if (!String(this.visitorData.idcardType)) return uni.showToast({  | 
|                     title: '证件类型不能为空',  | 
|                     icon: 'none'  | 
|                 })  | 
|                 if (!this.visitorData.idcardNo) return uni.showToast({  | 
|                     title: '证件号码不能为空',  | 
|                     icon: 'none'  | 
|                 })  | 
|                 if (this.visitorData.idcardType === 0) {  | 
|                     const regex = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[\dxX]$/;  | 
|                     if (!regex.test(this.visitorData.idcardNo)) return uni.showToast({  | 
|                         title: '证件号码格式错误',  | 
|                         icon: 'none'  | 
|                     })  | 
|                 }  | 
|                 if (!this.visitorData.companyName) return uni.showToast({  | 
|                     title: '公司不能为空',  | 
|                     icon: 'none'  | 
|                 })  | 
|                 if (!this.visitorData.faceImg) return uni.showToast({  | 
|                     title: '人脸照片不能为空',  | 
|                     icon: 'none'  | 
|                 })  | 
|                 // if (this.visit === '1') {  | 
|                 //     if (!this.visitorData.imgurl) return uni.showToast({  | 
|                 //         title: '健康证不能为空',  | 
|                 //         icon: 'none'  | 
|                 //     })  | 
|                 // }  | 
|                 uni.setStorageSync('visitorData', this.visitorData)  | 
|                 uni.navigateTo({  | 
|                     url: `/pages/visitorApplication/visitorApplication?data=${JSON.stringify(this.visitorData)}`  | 
|                 });  | 
|             },  | 
|             getVisit() {  | 
|                 // 是否需要 健康证  | 
|                 getSystemDictData({  | 
|                     dictCode: 'SYSTEM',  | 
|                     label: 'HEALTH_CARD'  | 
|                 }).then(res => {  | 
|                     if (res.code === 200) {  | 
|                         this.visit = res.data.code  | 
|                     }  | 
|                 })  | 
|             },  | 
|             uploadImg(file) {  | 
|                 var that = this  | 
|                 that.$refs.cropper.close()  | 
|                 uni.showLoading({  | 
|                     title: '上传中',  | 
|                     mask: true  | 
|                 });  | 
|                 uni.uploadFile({  | 
|                     url: uploadAvatar,  | 
|                     filePath: file.tempFilePath,  | 
|                     name: 'file',  | 
|                     formData: {  | 
|                         folderCode: 'MEMBER_IMG',  | 
|                         isFace: 0  | 
|                     },  | 
|                     success: (uploadFileRes) => {  | 
|                         let res = JSON.parse(uploadFileRes.data) | 
|                         if(res.code !== 200){ | 
|                             return this.showToast(res.message) | 
|                         }  | 
|                         this.visitorData.faceImg = res.data.halfPath  | 
|                         this.visitorData.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath  | 
|                     },  | 
|                     fail: (err) => {  | 
|                         // this.showToast(err)  | 
|                     },  | 
|                     complete() {  | 
|                         uni.hideLoading();  | 
|                     }  | 
|                 });  | 
|             },  | 
|             upload(type) {  | 
|                 var that = this  | 
|                 that.type = type  | 
|                 if (type === 'faceImg') {  | 
|                     that.$refs.cropper.chooseImage()  | 
|                     return  | 
|                 }  | 
|                 uni.chooseImage({  | 
|                     count: 1,  | 
|                     success: (chooseImageRes) => {  | 
|                         // if (type === 'faceImg') {  | 
|                         //     that.photoSrc = chooseImageRes.tempFilePaths[0];  | 
|                         //     that.$refs.tlyPictureCut.showPop();  | 
|                         // }  | 
|                         if (type === 'imgurl') {  | 
|                             uni.showLoading({  | 
|                                 title: '上传中',  | 
|                                 mask: true  | 
|                             });  | 
|                             uni.uploadFile({  | 
|                                 url: uploadAvatar,  | 
|                                 filePath: chooseImageRes.tempFilePaths[0],  | 
|                                 name: 'file',  | 
|                                 formData: {  | 
|                                     folderCode: 'MEMBER_IMG'  | 
|                                 },  | 
|                                 timeout: 60000,  | 
|                                 success: (uploadFileRes) => {  | 
|                                     let res = JSON.parse(uploadFileRes.data)  | 
|                                     that.visitorData.imgurl = res.data.halfPath  | 
|                                     that.visitorData.imgurlUrl = res.data.prefixPath + res.data.folder + res.data.halfPath  | 
|                                 },  | 
|                                 complete() {  | 
|                                     uni.hideLoading();  | 
|                                 }  | 
|                             });  | 
|                         }  | 
|                     },  | 
|                     fail(err) {  | 
|                         alert('api报错')  | 
|                     }  | 
|                 });  | 
|             },  | 
|             confirm(e) {  | 
|                 this.visitorData.idcardType = e.value[0].id  | 
|                 this.visitorData.idcardTypeName = e.value[0].name  | 
|                 this.show = false  | 
|             }  | 
|         }  | 
|     }  | 
| </script>  | 
|   | 
| <style lang="scss">  | 
|     page {  | 
|         background-color: #F7F7F7 !important;  | 
|     }  | 
|   | 
|     .u-upload__button {  | 
|         margin: 0 !important;  | 
|     }  | 
|   | 
|     .content_uplaod {  | 
|         width: 120rpx;  | 
|         height: 120rpx;  | 
|         background: #F7F7F7;  | 
|         border-radius: 8rpx;  | 
|         border: 2rpx solid #E5E5E5;  | 
|         display: flex;  | 
|         align-items: center;  | 
|         justify-content: center;  | 
|         overflow: hidden;  | 
|     }  | 
|   | 
|     .content_uplaod image {  | 
|         width: 100%;  | 
|         height: 100%;  | 
|     }  | 
|   | 
|     .empty {  | 
|         width: 750rpx;  | 
|         height: 20rpx;  | 
|         margin: 0 -30rpx;  | 
|         background-color: #f7f7f7;  | 
|         ;  | 
|     }  | 
|   | 
|     .title {  | 
|         font-size: 30rpx;  | 
|         font-weight: 400;  | 
|         color: #222222;  | 
|         display: flex;  | 
|         align-items: center;  | 
|     }  | 
|   | 
|     .title b {  | 
|         color: #E42D2D;  | 
|         margin-right: 4rpx;  | 
|     }  | 
|   | 
|     .title1 {  | 
|         display: flex;  | 
|         flex-direction: column;  | 
|   | 
|         .title1_a {  | 
|             font-size: 30rpx !important;  | 
|             font-weight: 400;  | 
|             color: #222222;  | 
|             display: flex;  | 
|             align-items: center;  | 
|             margin-bottom: 20rpx;  | 
|   | 
|             b {  | 
|                 color: #E42D2D;  | 
|                 margin-right: 4rpx;  | 
|   | 
|             }  | 
|         }  | 
|   | 
|         .title1_b {  | 
|             font-size: 24rpx !important;  | 
|             font-weight: 400;  | 
|             color: #999999;  | 
|         }  | 
|     }  | 
|   | 
|     .add-other {  | 
|         border: 1rpx solid #4d99a8;  | 
|         color: #4d99a8;  | 
|         font-size: 11rpx;  | 
|         padding: 0 12rpx;  | 
|         height: 32rpx;  | 
|         line-height: 32rpx;  | 
|         width: 120rpx;  | 
|         text-align: center;  | 
|         border-radius: 24rpx;  | 
|         margin: 20rpx auto;  | 
|     }  | 
|   | 
|     .footer-box {  | 
|         width: 100%;  | 
|         position: fixed;  | 
|         bottom: 30rpx;  | 
|         height: 80rpx;  | 
|         display: flex;  | 
|         justify-content: center;  | 
|         align-items: center;  | 
|     }  | 
|   | 
|     .submit-button {  | 
|         width: calc(100% - 60rpx);  | 
|         height: 88rpx;  | 
|         line-height: 88rpx;  | 
|         background: #4d99a8;  | 
|         border-radius: 4rpx;  | 
|         color: #fff;  | 
|         border-radius: 44rpx;  | 
|         font-size: 32rpx;  | 
|         display: flex;  | 
|         align-items: center;  | 
|         justify-content: center;  | 
|     }  | 
| </style>  | 
|   | 
| <style lang="scss" scoped>  | 
|     .popup-content {  | 
|         padding: 20rpx;  | 
|         height: 100%;  | 
|         overflow: hidden;  | 
|         display: flex;  | 
|         flex-flow: column;  | 
|   | 
|         .input {  | 
|             border: 1rpx solid #ccc;  | 
|             border-radius: 4rpx;  | 
|             padding: 4rpx 12rpx;  | 
|             font-size: 28rpx;  | 
|             font-weight: 400;  | 
|             color: #333333;  | 
|         }  | 
|   | 
|         .respondent-item {  | 
|             padding: 10rpx;  | 
|             border-bottom: 1rpx solid #eee;  | 
|             cursor: pointer;  | 
|   | 
|             &:hover {  | 
|                 background-color: #eee;  | 
|             }  | 
|         }  | 
|   | 
|         .van-list {  | 
|             flex: 1;  | 
|             overflow: auto;  | 
|         }  | 
|     }  | 
| </style> |