| <template> | 
|   <view class="visit"> | 
|     <!-- <view class="head">拜访信息</view> --> | 
|     <view class="list"> | 
|       <view class="list_item"> | 
|         <view class="list_item_label"> | 
|           <text>*</text> | 
|           <text>被访人</text> | 
|         </view> | 
|         <view class="list_item_content" @click="showName = true"> | 
|           <text :style="{ color: form1.receptMemberName ? '#000000' : '' }">{{ | 
|             form1.receptMemberName ? form1.receptMemberName : "请选择" | 
|           }}</text> | 
|           <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon> | 
|         </view> | 
|       </view> | 
|       <view class="list_item"> | 
|         <view class="list_item_label"> | 
|           <text>*</text> | 
|           <text>入园时间</text> | 
|         </view> | 
|         <view class="list_item_content" @click="show4 = true"> | 
|           <text :style="{ color: form1.starttime ? '#000000' : '' }">{{ | 
|             form1.starttime ? form1.starttime : "请选择" | 
|           }}</text> | 
|           <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon> | 
|         </view> | 
|       </view> | 
|       <view class="list_item"> | 
|         <view class="list_item_label"> | 
|           <text>*</text> | 
|           <text>离园时间</text> | 
|         </view> | 
|         <view class="list_item_content" @click="openLC"> | 
|           <text :style="{ color: form1.endtime ? '#000000' : '' }">{{ | 
|             form1.endtime ? form1.endtime : "请选择" | 
|           }}</text> | 
|           <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon> | 
|         </view> | 
|       </view> | 
|       <!-- <view class="list_item" v-if="accessControl === '1'" @click="show = true"> | 
|                 <view class="list_item_label"> | 
|                     <text>访问门禁</text> | 
|                     <text>*</text> | 
|                 </view> | 
|                 <view class="list_item_content"> | 
|                     <text :style="{color: form1.doorSelectName ? '#000000' : ''}">{{form1.doorSelectName ? form1.doorSelectName : '请选择'}}</text> | 
|                     <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon> | 
|                 </view> | 
|             </view> --> | 
|       <div class="empty"></div> | 
|       <view class="list_item"> | 
|         <view class="list_item_label"> | 
|           <text>*</text> | 
|           <text>拜访事由</text> | 
|         </view> | 
|         <view class="list_item_content" @click="showReason = true"> | 
|           <text :style="{ color: form1.reason ? '#000000' : '' }">{{ | 
|             form1.reason ? form1.reason : "请选择拜访事由" | 
|           }}</text> | 
|           <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon> | 
|         </view> | 
|       </view> | 
|       <view class="list_item"> | 
|         <view class="list_item_label"> | 
|           <text></text> | 
|           <text>是否施工作业</text> | 
|         </view> | 
|         <view class="list_item_content"> | 
|           <switch | 
|             color="#4e99a9" | 
|             style="transform: scale(0.8)" | 
|             @change="constructionChange" | 
|           /> | 
|         </view> | 
|       </view> | 
|       <view v-if="form1.type == '1'" class="list_item"> | 
|         <view class="list_item_label"> | 
|           <text></text> | 
|           <text>施工内容</text> | 
|           <!-- <text>*</text> --> | 
|         </view> | 
|         <view class="list_item_content"> | 
|           <input | 
|             type="text" | 
|             v-model="form1.constructionReason" | 
|             placeholder="请输入施工内容" | 
|             placeholder-style="color: #999999;" | 
|           /> | 
|         </view> | 
|       </view> | 
|       <view class="list_item"> | 
|         <view class="list_item_label"> | 
|           <text></text> | 
|           <text>随行车辆</text> | 
|         </view> | 
|         <view class="list_item_content" @click="openInput(1)"> | 
|           <text :style="{ color: form1.carNos ? '#000000' : '' }">{{ | 
|             form1.carNos ? form1.carNos : "请输入车牌号码" | 
|           }}</text> | 
|           <!-- <input type="text" placeholder="请输入车牌号" v-model="form1.carNos" maxlength="8" placeholder-style="color: #999999;" /> --> | 
|         </view> | 
|       </view> | 
|     </view> | 
|     <view class="zw"></view> | 
|     <view class="footer"> | 
|       <view class="footer_btn" @click="onSubmit">提交</view> | 
|     </view> | 
|     <!-- 入园时间 --> | 
|     <u-datetime-picker | 
|       :show="show4" | 
|       :minDate="new Date().getTime()" | 
|       mode="datetime" | 
|       @cancel="show4 = false" | 
|       @confirm="setstarttime" | 
|     ></u-datetime-picker> | 
|     <!-- 离园时间 --> | 
|     <u-datetime-picker | 
|       v-if="form1.starttime" | 
|       :show="show5" | 
|       :minDate="formatTimeStamp(form1.starttime)" | 
|       :maxDate="formatTimeStamp(form1.starttime.slice(0,10) + ' 23:59')" | 
|       mode="datetime" | 
|       @cancel="show5 = false" | 
|       @confirm="setendtime" | 
|     ></u-datetime-picker> | 
|     <!-- 门禁 --> | 
|     <u-popup | 
|       :show="show" | 
|       :round="10" | 
|       :safeAreaInsetBottom="true" | 
|       :closeable="true" | 
|       mode="bottom" | 
|       @close="closeMJ" | 
|     > | 
|       <view class="menjin"> | 
|         <view class="respondent-title"> 选择门禁 </view> | 
|         <scroll-view scroll-y class="list"> | 
|           <view | 
|             class="list_item" | 
|             v-for="(item, index) in columns" | 
|             :key="index" | 
|             @click="seleMJ(index)" | 
|           > | 
|             <text>{{ item.name }}</text> | 
|             <image | 
|               src="@/static/checkbox@2x.png" | 
|               mode="widthFix" | 
|               v-show="!item.active" | 
|             ></image> | 
|             <image | 
|               src="@/static/checkbo1x_sel@2x.png" | 
|               mode="widthFix" | 
|               v-show="item.active" | 
|             ></image> | 
|           </view> | 
|         </scroll-view> | 
|         <view class="menjin_footer"> | 
|           <view class="menjin_footer_item" @click="closeMJ">取消</view> | 
|           <view class="menjin_footer_item" @click="submitMJ">确认</view> | 
|         </view> | 
|       </view> | 
|     </u-popup> | 
|     <!-- 选择随行人员 --> | 
|     <u-popup | 
|       :show="show1" | 
|       :round="10" | 
|       :safeAreaInsetBottom="true" | 
|       :closeable="true" | 
|       mode="bottom" | 
|       @close="show1 = false" | 
|     > | 
|       <view class="popup-content"> | 
|         <view class="respondent-title"> 选择随行人员 </view> | 
|         <view class="search-box"> | 
|           <view class="search-box-top"> | 
|             <view class="search-box-top-ipt"> | 
|               <image src="@/static/ic_search@2x.png" mode="widthFix"></image> | 
|               <input type="text" placeholder="搜索姓名/手机号" /> | 
|             </view> | 
|             <text | 
|               @click=" | 
|                 show1 = false; | 
|                 show3 = true; | 
|               " | 
|               >新增</text | 
|             > | 
|           </view> | 
|           <view class="search-box-total">共0条数据</view> | 
|         </view> | 
|         <scroll-view scroll-y class="list"> | 
|           <view class="item" v-for="(item, index) in 8" :key="index"> | 
|             <view class="item_a"> | 
|               <!-- <image src="@/static/checkbox.png" mode="widthFix" v-if="!item.active" /> --> | 
|               <image src="@/static/checkbox_sel@2x.png" mode="widthFix" /> | 
|             </view> | 
|             <view class="item_b"> | 
|               <image src="@/static/ic_mima@2x.png" mode="widthFix" /> | 
|             </view> | 
|             <view class="item_c"> | 
|               <text>用户名</text> | 
|               <text>已拉黑</text> | 
|             </view> | 
|           </view> | 
|         </scroll-view> | 
|         <view class="footer1"> | 
|           <view class="footer_left"> | 
|             <text class="footer_left_a">已选择:0人</text> | 
|             <text class="footer_left_b">李伟;</text> | 
|           </view> | 
|           <view class="footer_btn">确认 0/0</view> | 
|         </view> | 
|       </view> | 
|     </u-popup> | 
|     <!-- 车辆 --> | 
|     <u-popup | 
|       :show="show2" | 
|       :round="10" | 
|       :safeAreaInsetBottom="true" | 
|       :closeable="true" | 
|       mode="bottom" | 
|       @close="show2 = false" | 
|     > | 
|       <view class="addcar"> | 
|         <view class="addcar_head">添加车辆</view> | 
|         <view class="addcar_ipt"> | 
|           <input type="text" v-model="carName" placeholder="请输入车牌号" /> | 
|         </view> | 
|         <view class="addcar_footer"> | 
|           <view class="addcar_footer_item" @click="show2 = false">取消</view> | 
|           <view class="addcar_footer_item t" @click="submitCart">提交</view> | 
|         </view> | 
|       </view> | 
|     </u-popup> | 
|     <!-- 添加随行人员 --> | 
|     <u-popup | 
|       :show="show3" | 
|       :round="10" | 
|       :safeAreaInsetBottom="true" | 
|       :closeable="true" | 
|       mode="bottom" | 
|       @close="show3 = false" | 
|     > | 
|       <view class="adduser"> | 
|         <view class="adduser_head">随行人员</view> | 
|         <view class="adduser_list"> | 
|           <view class="adduser_list_item"> | 
|             <view class="adduser_list_item_label"> | 
|               <text>姓名</text> | 
|               <text>*</text> | 
|             </view> | 
|             <view class="adduser_list_item_ipt"> | 
|               <input | 
|                 type="text" | 
|                 v-model="withUserList.name" | 
|                 placeholder-style="color: #999999;font-size: 28rpx;" | 
|                 placeholder="请输入真实姓名" | 
|               /> | 
|             </view> | 
|           </view> | 
|           <view class="adduser_list_item"> | 
|             <view class="adduser_list_item_label"> | 
|               <text>手机号</text> | 
|               <text>*</text> | 
|             </view> | 
|             <view class="adduser_list_item_ipt"> | 
|               <input | 
|                 type="number" | 
|                 v-model="withUserList.phone" | 
|                 maxlength="11" | 
|                 placeholder-style="color: #999999;font-size: 28rpx;" | 
|                 placeholder="请输入手机号" | 
|               /> | 
|             </view> | 
|           </view> | 
|           <view class="adduser_list_item"> | 
|             <view class="adduser_list_item_label"> | 
|               <text>证件类型</text> | 
|               <text>*</text> | 
|             </view> | 
|             <view class="adduser_list_item_ipt" @click="show6 = true"> | 
|               <text | 
|                 :style="{ color: withUserList.idcardTypeName ? '#000000' : '' }" | 
|                 >{{ | 
|                   withUserList.idcardTypeName | 
|                     ? withUserList.idcardTypeName | 
|                     : "请选择" | 
|                 }}</text | 
|               > | 
|               <u-icon name="arrow-right" color="#CCCCCC" size="16"></u-icon> | 
|             </view> | 
|           </view> | 
|           <view class="adduser_list_item"> | 
|             <view class="adduser_list_item_label"> | 
|               <text>证件号码</text> | 
|               <text>*</text> | 
|             </view> | 
|             <view class="adduser_list_item_ipt"> | 
|               <input | 
|                 type="text" | 
|                 v-model="withUserList.idcardNo" | 
|                 maxlength="18" | 
|                 placeholder-style="color: #999999;font-size: 28rpx;" | 
|                 placeholder="请输入证件号码" | 
|               /> | 
|             </view> | 
|           </view> | 
|           <view class="adduser_list_item"> | 
|             <view class="adduser_list_item_label"> | 
|               <text>*</text> | 
|               <text>公司</text> | 
|             </view> | 
|             <view class="adduser_list_item_ipt"> | 
|               <input | 
|                 type="text" | 
|                 v-model="withUserList.companyName" | 
|                 placeholder-style="color: #999999;font-size: 28rpx;" | 
|                 placeholder="请输入公司名称" | 
|               /> | 
|             </view> | 
|           </view> | 
|           <view class="adduser_list_item"> | 
|             <view class="adduser_list_item_label"> | 
|               <text></text> | 
|               <text>随行车辆</text> | 
|             </view> | 
|             <view class="adduser_list_item_ipt" @click="openInput(2)"> | 
|               <text :style="{ color: withUserList.carNos ? '#000000' : '' }">{{ | 
|                 withUserList.carNos ? withUserList.carNos : "请输入车牌号码" | 
|               }}</text> | 
|               <!-- <input type="text" v-model="withUserList.carNos" disabled placeholder-style="color: #999999;font-size: 28rpx;" placeholder="请输入车牌号" /> --> | 
|             </view> | 
|           </view> | 
|           <view class="adduser_list_item"> | 
|             <view class="adduser_list_item_label1"> | 
|               <text class="cc">人脸照片<b>*</b></text> | 
|               <text class="aa" | 
|                 >1、请提供五官清晰,人脸居中的正面人脸免冠照片;</text | 
|               > | 
|               <text class="aa">2、照片无逆光、无PS、无过度美颜处理;</text> | 
|             </view> | 
|             <view class="adduser_list_item_ipt"> | 
|               <view | 
|                 class="adduser_list_item_ipt1_upload" | 
|                 @click="upload('faceImg')" | 
|                 v-if="!withUserList.faceImgUrl" | 
|               > | 
|                 <u-icon | 
|                   name="plus" | 
|                   color="rgb(153, 153, 153)" | 
|                   size="28" | 
|                 ></u-icon> | 
|               </view> | 
|               <view | 
|                 class="adduser_list_item_ipt1_upload" | 
|                 @click="upload('faceImg')" | 
|                 v-else | 
|               > | 
|                 <image :src="withUserList.faceImgUrl" mode="widthFix"></image> | 
|               </view> | 
|             </view> | 
|           </view> | 
|           <view class="adduser_list_item"> | 
|             <view class="adduser_list_item_label"> | 
|               <text>健康证照片</text> | 
|               <text v-if="visit === '1'">*</text> | 
|             </view> | 
|             <view class="adduser_list_item_ipt"> | 
|               <view | 
|                 class="adduser_list_item_ipt1_upload" | 
|                 @click="upload('imgurl')" | 
|                 v-if="!withUserList.imgurlUrl" | 
|               > | 
|                 <u-icon | 
|                   name="plus" | 
|                   color="rgb(153, 153, 153)" | 
|                   size="28" | 
|                 ></u-icon> | 
|               </view> | 
|               <view | 
|                 class="adduser_list_item_ipt1_upload" | 
|                 @click="upload('imgurl')" | 
|                 v-else | 
|               > | 
|                 <image :src="withUserList.imgurlUrl" mode="widthFix"></image> | 
|               </view> | 
|             </view> | 
|           </view> | 
|         </view> | 
|         <view class="adduser_footer"> | 
|           <view class="adduser_footer_item" @click="show3 = false">取消</view> | 
|           <view class="adduser_footer_item t" @click="submitUser">提交</view> | 
|         </view> | 
|       </view> | 
|     </u-popup> | 
|     <u-picker | 
|       keyName="name" | 
|       :show="show6" | 
|       :columns="columns1" | 
|       @confirm="seleIdcard" | 
|       @cancel="show6 = false" | 
|     ></u-picker> | 
|     <u-picker | 
|       keyName="name" | 
|       :show="showName" | 
|       :columns="VisitPoeple" | 
|       @confirm="selectedName" | 
|       @cancel="showName = false" | 
|     ></u-picker> | 
|     <u-picker | 
|       keyName="title" | 
|       :show="showReason" | 
|       :columns="VisitReason" | 
|       @confirm="selectedReason" | 
|       @cancel="showReason = false" | 
|     ></u-picker> | 
|     <!-- <tly-picture-cut ref="tlyPictureCut" :pictureSrc="photoSrc" @createImg="uploadImg"></tly-picture-cut> --> | 
|     <keyboardInput ref="keyboard" @export="setPlate" @close="closeInput" /> | 
|     <qf-image-cropper | 
|       ref="cropper" | 
|       :width="280" | 
|       :height="280" | 
|       :radius="30" | 
|       @crop="uploadImg" | 
|     ></qf-image-cropper> | 
|   </view> | 
| </template> | 
|   | 
| <script> | 
| import tlyPictureCut from "@/components/tly-picture-cut/tlyPictureCut.vue" | 
| import keyboardInput from "@/components/keyboard-input/keyboard-input.vue" | 
| import QfImageCropper from '@/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue' | 
| import { getDaysAfterDate } from '@/utils/utils.js' | 
| import { | 
|   getVisitedMember, | 
|   getSystemDictData, | 
|   getVisitedVisitReason, | 
|   createFk | 
| } from '@/api' | 
| export default { | 
|   data() { | 
|     return { | 
|       photoSrc: '', | 
|       type: '', | 
|       inputType: '', | 
|       showName: false, | 
|       show: false, | 
|       show1: false, | 
|       show2: false, | 
|       show3: false, | 
|       show4: false, | 
|       show5: false, | 
|       show6: false, | 
|       show7: false, | 
|       showReason: false, | 
|       fileList: [], | 
|       columns1: [ | 
|         [{ name: '身份证', id: 0 }, { name: '港澳证件', id: 1 }, { name: '护照', id: 2 }], | 
|       ], | 
|       VisitReason: [], | 
|       VisitPoeple: [], | 
|       columns: [], | 
|       cars: [], | 
|       day: null, | 
|       maxTime: '', | 
|       carName: '', | 
|       personnel: [], | 
|       userAnswerId: '', | 
|       form1: { | 
|         phone1: '', | 
|         receptMemberId: '', | 
|         receptMemberName: '', | 
|         starttime: '', | 
|         endtime: '', | 
|         doors: '', | 
|         doorSelectName: '', | 
|         reason: '', | 
|         carNos: '', | 
|         type: 0 | 
|       }, | 
|       withUserList: { | 
|         name: '', | 
|         phone: '', | 
|         idcardType: '', | 
|         idcardTypeName: '', | 
|         companyName: '', | 
|         idcardNo: '', | 
|         faceImg: '', | 
|         faceImgUrl: '', | 
|         imgurl: '', | 
|         imgurlUrl: '' | 
|       }, | 
|       visit: '', | 
|       form: {}, | 
|       accessControl: '', | 
|       verify: '' | 
|     } | 
|   }, | 
|   components: { tlyPictureCut, keyboardInput, QfImageCropper }, | 
|   onLoad(options) { | 
|     if (options.data) { | 
|       this.form = JSON.parse(options.data) | 
|     } | 
|     // this.getvisit() | 
|     // this.getVisit1() | 
|     // this.getUserValid() | 
|     this.getUser() | 
|   }, | 
|   methods: { | 
|     openInput(type) { | 
|       this.inputType = type | 
|       this.$refs.keyboard.open() | 
|     }, | 
|     setPlate(e) { | 
|       if (this.inputType === 1) { | 
|         this.form1.carNos = e | 
|       } else if (this.inputType === 2) { | 
|         this.withUserList.carNos = e | 
|       } | 
|       this.$forceUpdate() | 
|       this.closeInput() | 
|     }, | 
|     closeInput() { | 
|       this.$refs.keyboard.close() | 
|     }, | 
|     constructionChange(e) { | 
|       console.log(e.detail.value) | 
|       this.form1.type = Number(e.detail.value) | 
|       console.log(this.form1.type) | 
|     }, | 
|     uploadImg(file) { | 
|       this.$refs.cropper.close() | 
|       uni.showLoading({ title: '上传中', mask: true }) | 
|       uni.uploadFile({ | 
|         url: `${this.$baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`, | 
|         filePath: file.tempFilePath, | 
|         name: 'file', | 
|         formData: { | 
|           folderCode: 'MEMBER_IMG' | 
|         }, | 
|         success: (uploadFileRes) => { | 
|           let res = JSON.parse(uploadFileRes.data) | 
|           this.withUserList.faceImg = res.data.halfPath | 
|           this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath | 
|         }, | 
|         complete() { | 
|           uni.hideLoading() | 
|         } | 
|       }) | 
|     }, | 
|     closeMJ() { | 
|       this.show = false | 
|       this.columns.forEach(item => { | 
|         item.active = false | 
|       }) | 
|     }, | 
|     onSubmit() { | 
|       if (!this.form1.receptMemberId) return uni.showToast({ | 
|         title: '请填写有效的访问人', | 
|         icon: 'none' | 
|       }) | 
|       if (!this.form1.starttime) return uni.showToast({ | 
|         title: '入园时间不能为空', | 
|         icon: 'none' | 
|       }) | 
|       if (!this.form1.endtime) return uni.showToast({ | 
|         title: '离园时间不能为空', | 
|         icon: 'none' | 
|       }) | 
|       if (!this.form1.doorSelectName && this.accessControl == 1) return uni.showToast({ | 
|         title: '访问门禁不能为空', | 
|         icon: 'none' | 
|       }) | 
|       if (!this.form1.reason) return uni.showToast({ | 
|         title: '拜访事由不能为空', | 
|         icon: 'none' | 
|       }) | 
|       // this.form1.starttime = this.form1.starttime + ':00' | 
|       // this.form1.endtime = this.form1.endtime + ':00' | 
|       let data = JSON.parse(JSON.stringify(this.form1)) | 
|       data.starttime = data.starttime + ':00' | 
|       data.endtime = data.endtime + ':00' | 
|       createFk({ | 
|         ...this.form, | 
|         ...data, | 
|         openid: this.$store.state.openId, | 
|         withUserList: this.personnel | 
|       }).then(res => { | 
|         if (res.code === 200) { | 
|           uni.navigateTo({ | 
|             url: `/pages/appointmentDetails/appointmentDetails?id=${res.data}` | 
|           }) | 
|         } | 
|       }) | 
|     }, | 
|     deleUser(i) { | 
|       this.personnel.splice(i, 1) | 
|     }, | 
|     getVisit1() { | 
|       // 是否需要答题 | 
|       this.$u.api.getSystemDictData({ | 
|         dictCode: 'SYSTEM', | 
|         label: 'HEALTH_CARD' | 
|       }).then(res => { | 
|         if (res.code === 200) { | 
|           this.visit = res.data.code | 
|         } | 
|       }) | 
|       // 起始时间时长 | 
|       getSystemDictData({ | 
|         dictCode: 'VISIT_CONFIG', | 
|         label: 'VALIDATE_VISIT' | 
|       }).then(res => { | 
|         if (res.code === 200) { | 
|           this.day = Number(res.data.code) | 
|           // console.log(nextDay('after', true, this.day)) | 
|         } | 
|       }) | 
|     }, | 
|     submitUser() { | 
|       if (!this.withUserList.name) return uni.showToast({ | 
|         title: '姓名不能为空', | 
|         icon: 'none' | 
|       }) | 
|       if (!this.withUserList.phone) return uni.showToast({ | 
|         title: '手机号不能为空', | 
|         icon: 'none' | 
|       }) | 
|       const regExp = /^1[3456789]\d{9}$/ | 
|       if (!regExp.test(this.withUserList.phone)) return uni.showToast({ | 
|         title: '手机号格式错误', | 
|         icon: 'none' | 
|       }) | 
|       if (!String(this.withUserList.idcardType)) return uni.showToast({ | 
|         title: '证件类型不能为空', | 
|         icon: 'none' | 
|       }) | 
|       if (!this.withUserList.idcardNo) return uni.showToast({ | 
|         title: '证件号码不能为空', | 
|         icon: 'none' | 
|       }) | 
|       if (this.withUserList.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.withUserList.idcardNo)) return uni.showToast({ | 
|           title: '证件号码格式错误', | 
|           icon: 'none' | 
|         }) | 
|       } | 
|       if (!this.withUserList.companyName) return uni.showToast({ | 
|         title: '公司不能为空', | 
|         icon: 'none' | 
|       }) | 
|       if (!this.withUserList.faceImg) return uni.showToast({ | 
|         title: '人脸照片不能为空', | 
|         icon: 'none' | 
|       }) | 
|       if (this.visit === '1') { | 
|         if (!this.withUserList.imgurl) return uni.showToast({ | 
|           title: '人脸照片不能为空', | 
|           icon: 'none' | 
|         }) | 
|       } | 
|       let arr = JSON.parse(JSON.stringify(this.withUserList)) | 
|       this.personnel.push(arr) | 
|       this.show3 = false | 
|       this.withUserList.name = '' | 
|       this.withUserList.phone = '' | 
|       this.withUserList.idcardType = '' | 
|       this.withUserList.idcardTypeName = '' | 
|       this.withUserList.companyName = '' | 
|       this.withUserList.idcardNo = '' | 
|       this.withUserList.faceImg = '' | 
|       this.withUserList.faceImgUrl = '' | 
|       this.withUserList.imgurl = '' | 
|       this.withUserList.imgurlUrl = '' | 
|     }, | 
|     upload(type) { | 
|       this.type = type | 
|       if (type === 'faceImg') { | 
|         this.$refs.cropper.open() | 
|         return | 
|       } | 
|       uni.chooseImage({ | 
|         success: (chooseImageRes) => { | 
|           uni.showLoading({ title: '上传中', mask: true }) | 
|           for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) { | 
|             uni.uploadFile({ | 
|               url: `${this.$baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`, | 
|               filePath: chooseImageRes.tempFilePaths[i], | 
|               name: 'file', | 
|               formData: { | 
|                 folderCode: 'MEMBER_IMG' | 
|               }, | 
|               success: (uploadFileRes) => { | 
|                 let res = JSON.parse(uploadFileRes.data) | 
|                 if (type === 'faceImg') { | 
|                   this.withUserList.faceImg = res.data.halfPath | 
|                   this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath | 
|                 } else { | 
|                   this.withUserList.imgurl = res.data.halfPath | 
|                   this.withUserList.imgurlUrl = res.data.prefixPath + res.data.folder + res.data.halfPath | 
|                 } | 
|               }, | 
|               complete() { | 
|                 if (i === chooseImageRes.tempFilePaths.length - 1) { | 
|                   uni.hideLoading() | 
|                 } | 
|               } | 
|             }) | 
|           } | 
|         } | 
|       }) | 
|     }, | 
|     seleIdcard(e) { | 
|       this.withUserList.idcardType = e.value[0].id | 
|       this.withUserList.idcardTypeName = e.value[0].name | 
|       this.show6 = false | 
|     }, | 
|     selectedName(e) { | 
|       this.form1.receptMemberName = e.value[0].name | 
|       this.form1.receptMemberId = e.value[0].id | 
|       this.form1.receptMemberDepartment = e.value[0].companyId | 
|       this.showName = false | 
|     }, | 
|     selectedReason(e) { | 
|       this.form1.reason = e.value[0].title | 
|       console.log(e.value[0].title) | 
|       this.showReason = false | 
|     }, | 
|     submitCart() { | 
|       if (!this.carName) return uni.showToast({ | 
|         title: '请输入车牌号码', | 
|         icon: 'none' | 
|       }) | 
|       this.cars.push(this.carName) | 
|       this.form1.carNos = this.cars.join(',') | 
|       this.carName = '' | 
|       this.show2 = false | 
|     }, | 
|     deleCars(i) { | 
|       this.cars.splice(i, 1) | 
|       this.form1.carNos = this.cars.join(',') | 
|     }, | 
|     submitMJ() { | 
|       let arr = [] | 
|       let names = [] | 
|       this.columns.forEach(item => { | 
|         if (item.active) { | 
|           arr.push(item.id) | 
|           names.push(item.name) | 
|         } | 
|       }) | 
|       if (arr.length === 0) return uni.showToast({ | 
|         title: '请选择门禁', | 
|         icon: 'none' | 
|       }) | 
|       this.form1.doorSelectName = names.join(',') | 
|       this.form1.doors = arr.join(',') | 
|       this.show = false | 
|     }, | 
|     seleMJ(i) { | 
|       this.columns.forEach((item, index) => { | 
|         if (index === i) { | 
|           item.active = !item.active | 
|         } | 
|       }) | 
|     }, | 
|     openLC() { | 
|       if (!this.form1.starttime) return uni.showToast({ | 
|         title: '请先选择入园时间', | 
|         icon: 'none' | 
|       }) | 
|       this.show5 = true | 
|     }, | 
|     setstarttime(e) { | 
|       this.form1.starttime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM') | 
|       // this.maxTime = getDaysAfterDate(uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM'), this.day) | 
|       this.maxTime = this.form1.starttime | 
|       console.log(this.form1.starttime.slice(0,10)) | 
|       this.show4 = false | 
|     }, | 
|     setendtime(e) { | 
|       this.form1.endtime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM') | 
|       this.show5 = false | 
|     }, | 
|     formatTimeStamp(date) { | 
|       return Date.parse(new Date(`${date}`)) || Date.parse(new Date(`${date.replace(/-/g, '/')}`)) | 
|     }, | 
|     // 查询用户 | 
|     getUser() { | 
|       getVisitedMember().then(res => { | 
|         this.VisitPoeple = [res.data || []] | 
|       }) | 
|       getVisitedVisitReason({}).then(res => { | 
|         this.VisitReason = [res.data || []] | 
|       }) | 
|     }, | 
|     // 被拜访人信息校验方式(0手机号单独校验 1手机号和姓名组合校验) | 
|     getUserValid() { | 
|       getSystemDictData({ | 
|         dictCode: 'SYSTEM', | 
|         label: 'BEVISITED_USER_VALID' | 
|       }).then(res => { | 
|         if (res.code === 200) { | 
|           this.verify = res.data.code | 
|         } | 
|       }) | 
|     }, | 
|     // 获取是否需要选择门禁/门禁列表 | 
|     getvisit() { | 
|       getSystemDictData({ | 
|         dictCode: 'SYSTEM', | 
|         label: 'SELECT_DOORS_VISIT_REQUIRED' | 
|       }).then(res => { | 
|         if (res.code === 200) { | 
|           this.accessControl = res.data.code | 
|           if (res.data.code === '1') { | 
|             this.$u.api.deviceRoleList({ type: 1 }) | 
|               .then(device => { | 
|                 if (device.code === 200) { | 
|                   if (device.data.length > 0) { | 
|                     device.data.forEach(item => { | 
|                       item.active = false | 
|                     }) | 
|                     this.columns = device.data | 
|                   } | 
|                 } | 
|               }) | 
|           } | 
|         } | 
|       }) | 
|     }, | 
|     confirm(e) { | 
|       this.show = false | 
|     } | 
|   } | 
| } | 
| </script> | 
| <style> | 
| page { | 
|   background-color: #f7f7f7 !important; | 
| } | 
| .u-upload__button { | 
|   margin: 0 !important; | 
| } | 
| </style> | 
| <style lang="scss" scoped> | 
| .visit { | 
|   width: 100%; | 
|   .menjin { | 
|     width: 100%; | 
|     .respondent-title { | 
|       width: 100%; | 
|       height: 100rpx; | 
|       line-height: 100rpx; | 
|       text-align: center; | 
|       font-size: 32rpx; | 
|       font-weight: 600; | 
|       color: #222222; | 
|     } | 
|     .list { | 
|       width: 100%; | 
|       height: 400rpx; | 
|       display: flex; | 
|       flex-direction: column; | 
|       .list_item { | 
|         width: 100%; | 
|         display: flex; | 
|         align-items: center; | 
|         justify-content: space-between; | 
|         text { | 
|           font-size: 28rpx; | 
|           color: #000000; | 
|         } | 
|         image { | 
|           width: 30rpx; | 
|           height: 30rpx; | 
|         } | 
|       } | 
|     } | 
|     .menjin_footer { | 
|       width: 100%; | 
|       padding: 30rpx; | 
|       box-sizing: border-box; | 
|       display: flex; | 
|       align-items: center; | 
|       justify-content: space-between; | 
|       .menjin_footer_item { | 
|         flex: 1; | 
|         height: 80rpx; | 
|         display: flex; | 
|         align-items: center; | 
|         justify-content: center; | 
|         border-radius: 10rpx; | 
|         background-color: $uni-color-primary; | 
|         color: #ffffff; | 
|         font-size: 26rpx; | 
|         margin-left: 30rpx; | 
|         &:first-child { | 
|           margin-left: 0 !important; | 
|         } | 
|       } | 
|     } | 
|   } | 
|   .adduser { | 
|     padding: 30rpx; | 
|     width: 100%; | 
|     box-sizing: border-box; | 
|     .adduser_head { | 
|       width: 100%; | 
|       text-align: center; | 
|       font-size: 32rpx; | 
|       font-family: PingFangSC, PingFang SC; | 
|       font-weight: 600; | 
|       color: #222222; | 
|     } | 
|     .adduser_list { | 
|       width: 100%; | 
|       margin-top: 40rpx; | 
|       .adduser_list_item { | 
|         width: 100%; | 
|         padding: 24rpx 0; | 
|         box-sizing: border-box; | 
|         border-bottom: 1rpx solid #e5e5e5; | 
|         display: flex; | 
|         align-items: center; | 
|         justify-content: space-between; | 
|         .adduser_list_item_label1 { | 
|           flex: 1; | 
|           display: flex; | 
|           flex-direction: column; | 
|           .cc { | 
|             font-size: 30rpx; | 
|             font-family: PingFangSC, PingFang SC; | 
|             font-weight: 400; | 
|             color: #222222; | 
|             margin-bottom: 20rpx; | 
|             b { | 
|               font-size: 30rpx; | 
|               font-family: PingFangSC, PingFang SC; | 
|               font-weight: 400; | 
|               color: #e0312a; | 
|             } | 
|           } | 
|           .aa { | 
|             font-size: 24rpx; | 
|             font-weight: 400; | 
|             color: #999999; | 
|           } | 
|         } | 
|         .adduser_list_item_label { | 
|           flex-shrink: 0; | 
|           display: flex; | 
|           align-items: center; | 
|           font-family: PingFangSC, PingFang SC; | 
|           font-size: 30rpx; | 
|           text { | 
|             &:nth-child(1) { | 
|               color: #e0312a; | 
|             } | 
|             &:nth-child(2) { | 
|               color: #222222; | 
|             } | 
|           } | 
|         } | 
|         .adduser_list_item_ipt { | 
|           flex-shrink: 0; | 
|           text-align: right; | 
|           font-size: 28rpx; | 
|           font-family: PingFangSC, PingFang SC; | 
|           font-weight: 400; | 
|           color: #333333; | 
|           margin-left: 30rpx; | 
|           display: flex; | 
|           align-items: center; | 
|           justify-content: flex-end; | 
|           .adduser_list_item_ipt1_upload { | 
|             width: 120rpx; | 
|             height: 120rpx; | 
|             background-color: #ececec; | 
|             display: flex; | 
|             align-items: center; | 
|             justify-content: center; | 
|             overflow: hidden; | 
|             image { | 
|               width: 100%; | 
|               height: 100%; | 
|             } | 
|           } | 
|           text { | 
|             font-size: 28rpx; | 
|             font-family: PingFangSC, PingFang SC; | 
|             font-weight: 400; | 
|             color: #999999; | 
|           } | 
|         } | 
|       } | 
|     } | 
|     .adduser_footer { | 
|       width: 100%; | 
|       margin-top: 60rpx; | 
|       display: flex; | 
|       align-items: center; | 
|       justify-content: space-between; | 
|       .t { | 
|         background: #4d99a9 !important; | 
|         color: #ffffff !important; | 
|       } | 
|       .adduser_footer_item { | 
|         width: 336rpx; | 
|         height: 88rpx; | 
|         line-height: 88rpx; | 
|         text-align: center; | 
|         border-radius: 44rpx; | 
|         border: 1rpx solid #4d99a9; | 
|         font-size: 32rpx; | 
|         font-family: PingFangSC, PingFang SC; | 
|         font-weight: 400; | 
|         color: #4d99a9; | 
|         margin-right: 18rpx; | 
|         &:last-child { | 
|           margin: 0 !important; | 
|         } | 
|       } | 
|     } | 
|   } | 
|   | 
|   .addcar { | 
|     padding: 30rpx; | 
|     width: 100%; | 
|     box-sizing: border-box; | 
|     .addcar_head { | 
|       text-align: center; | 
|       font-size: 32rpx; | 
|       font-family: PingFangSC, PingFang SC; | 
|       font-weight: 600; | 
|       color: #222222; | 
|     } | 
|     .addcar_ipt { | 
|       width: 100%; | 
|       height: 100rpx; | 
|       line-height: 100rpx; | 
|       text-align: center; | 
|       background: #f7f7f7; | 
|       border-radius: 50rpx; | 
|       margin-top: 60rpx; | 
|       input { | 
|         width: 100%; | 
|         height: 100%; | 
|         font-size: 28rpx; | 
|         font-weight: 400; | 
|         color: #000000; | 
|         text-align: center; | 
|       } | 
|     } | 
|     .addcar_footer { | 
|       width: 100%; | 
|       display: flex; | 
|       align-items: center; | 
|       justify-content: space-between; | 
|       margin-top: 60rpx; | 
|       .t { | 
|         background: #4d99a9 !important; | 
|         color: #ffffff !important; | 
|       } | 
|       .addcar_footer_item { | 
|         flex: 1; | 
|         height: 88rpx; | 
|         line-height: 88rpx; | 
|         font-size: 32rpx; | 
|         font-weight: 400; | 
|         color: #025eef; | 
|         text-align: center; | 
|         border-radius: 44rpx; | 
|         border: 1rpx solid #025eef; | 
|         margin-right: 18rpx; | 
|         &:last-child { | 
|           margin-right: 0 !important; | 
|         } | 
|       } | 
|     } | 
|   } | 
|   | 
|   .popup-content { | 
|     padding: 30rpx 30rpx 0 30rpx; | 
|     overflow: hidden; | 
|     display: flex; | 
|     flex-flow: column; | 
|     .respondent-title { | 
|       width: 100%; | 
|       text-align: center; | 
|       font-size: 32rpx; | 
|       font-weight: 600; | 
|       color: #222222; | 
|     } | 
|     .search-box { | 
|       width: 100%; | 
|       margin-top: 40rpx; | 
|       .search-box-top { | 
|         width: 100%; | 
|         height: 68rpx; | 
|         display: flex; | 
|         align-items: center; | 
|         .search-box-top-ipt { | 
|           flex: 1; | 
|           height: 100%; | 
|           padding: 0 30rpx; | 
|           box-sizing: border-box; | 
|           background: #f7f7f7; | 
|           border-radius: 4rpx; | 
|           display: flex; | 
|           align-items: center; | 
|           image { | 
|             width: 36rpx; | 
|             height: 36rpx; | 
|             flex-shrink: 0; | 
|             margin-right: 22rpx; | 
|           } | 
|           input { | 
|             flex: 1; | 
|             height: 100%; | 
|             font-size: 26rpx; | 
|             font-weight: 400; | 
|             color: #b2b2b2; | 
|           } | 
|         } | 
|         text { | 
|           flex-shrink: 0; | 
|           margin-left: 30rpx; | 
|           font-size: 28rpx; | 
|           font-weight: 400; | 
|           color: #025eef; | 
|         } | 
|       } | 
|       .search-box-total { | 
|         font-size: 26rpx; | 
|         font-weight: 400; | 
|         color: #666666; | 
|         margin-top: 24rpx; | 
|       } | 
|     } | 
|     .list { | 
|       width: 100%; | 
|       height: 800rpx; | 
|       margin-top: 30rpx; | 
|       padding: 0 !important; | 
|       .item { | 
|         width: 100%; | 
|         height: 102rpx; | 
|         display: flex; | 
|         align-items: center; | 
|         border-bottom: 1rpx solid #e5e5e5; | 
|         .item_a { | 
|           flex-shrink: 0; | 
|           width: 36rpx; | 
|           height: 36rpx; | 
|           margin-right: 24rpx; | 
|           image { | 
|             width: 100%; | 
|             height: 100%; | 
|           } | 
|         } | 
|         .item_b { | 
|           flex-shrink: 0; | 
|           width: 80rpx; | 
|           height: 80rpx; | 
|           display: flex; | 
|           align-items: center; | 
|           justify-content: center; | 
|           overflow: hidden; | 
|           margin-right: 24rpx; | 
|           image { | 
|             width: 100%; | 
|             height: 100%; | 
|           } | 
|         } | 
|         .item_c { | 
|           flex: 1; | 
|           display: flex; | 
|           align-items: center; | 
|           text { | 
|             &:nth-child(1) { | 
|               font-size: 30rpx; | 
|               font-family: PingFangSC, PingFang SC; | 
|               font-weight: 400; | 
|               color: #222222; | 
|             } | 
|             &:nth-child(2) { | 
|               font-size: 20rpx; | 
|               font-family: PingFangSC, PingFang SC; | 
|               font-weight: 400; | 
|               color: #999999; | 
|               padding: 1rpx 4rpx; | 
|               box-sizing: border-box; | 
|               background-color: #eeeeee; | 
|               margin-left: 12rpx; | 
|             } | 
|           } | 
|         } | 
|       } | 
|     } | 
|     .footer1 { | 
|       width: 100%; | 
|       height: 100rpx; | 
|       display: flex; | 
|       align-items: center; | 
|       justify-content: space-between; | 
|       padding: 14rpx 0 0 0; | 
|       box-sizing: border-box; | 
|       .footer_left { | 
|         flex: 1; | 
|         display: flex; | 
|         flex-direction: column; | 
|         .footer_left_a { | 
|           font-size: 26rpx; | 
|           font-family: PingFangSC, PingFang SC; | 
|           font-weight: 400; | 
|           color: #333333; | 
|         } | 
|         .footer_left_b { | 
|           font-size: 24rpx; | 
|           font-family: PingFangSC, PingFang SC; | 
|           font-weight: 400; | 
|           color: #999999; | 
|         } | 
|       } | 
|       .footer_btn { | 
|         flex-shrink: 0; | 
|         width: 216rpx; | 
|         height: 72rpx; | 
|         line-height: 72rpx; | 
|         text-align: center; | 
|         background: #025eef; | 
|         border-radius: 8rpx; | 
|         font-size: 28rpx; | 
|         font-weight: 600; | 
|         color: #ffffff; | 
|       } | 
|     } | 
|   } | 
|   | 
|   .head { | 
|     width: 100%; | 
|     padding: 20rpx 30rpx; | 
|     box-sizing: border-box; | 
|     font-size: 28rpx; | 
|     font-weight: 400; | 
|     color: #666666; | 
|   } | 
|   | 
|   .list { | 
|     width: 100%; | 
|     padding: 0 30rpx; | 
|     box-sizing: border-box; | 
|     background-color: #ffffff; | 
|     .empty { | 
|       width: 750rpx; | 
|       height: 20rpx; | 
|       background-color: #f7f7f7; | 
|       margin: 0 -30rpx; | 
|     } | 
|     .list_item { | 
|       width: 100%; | 
|       // min-height: 98rpx; | 
|       padding: 30rpx 0; | 
|       box-sizing: border-box; | 
|       display: flex; | 
|       align-items: center; | 
|       justify-content: space-between; | 
|       border-bottom: 1rpx solid #e5e5e5; | 
|   | 
|       .list_item_label { | 
|         flex-shrink: 0; | 
|         display: flex; | 
|         align-items: center; | 
|   | 
|         text { | 
|           &:nth-child(1) { | 
|             font-size: 30rpx; | 
|             font-weight: 400; | 
|             color: #e42d2d; | 
|           } | 
|   | 
|           &:nth-child(2) { | 
|             font-size: 30rpx; | 
|             font-weight: 400; | 
|             color: #222222; | 
|           } | 
|         } | 
|       } | 
|   | 
|       .list_item_content { | 
|         flex: 1; | 
|         height: 100%; | 
|         margin-left: 30rpx; | 
|         display: flex; | 
|         align-items: center; | 
|         justify-content: flex-end; | 
|   | 
|         text { | 
|           font-size: 28rpx; | 
|           font-weight: 400; | 
|           color: #999999; | 
|           margin-right: 6rpx; | 
|         } | 
|   | 
|         input { | 
|           width: 100%; | 
|           height: 100%; | 
|           text-align: right; | 
|           font-size: 28rpx; | 
|           font-weight: 400; | 
|           color: #222222; | 
|         } | 
|       } | 
|     } | 
|   } | 
|   | 
|   .cate { | 
|     width: 100%; | 
|     padding: 30rpx; | 
|     box-sizing: border-box; | 
|     background-color: #ffffff; | 
|     .cate_head { | 
|       font-size: 32rpx; | 
|       font-family: PingFangSC, PingFang SC; | 
|       font-weight: 600; | 
|       color: #222222; | 
|     } | 
|   | 
|     .cate_list { | 
|       width: 100%; | 
|       display: flex; | 
|       align-items: center; | 
|       flex-wrap: wrap; | 
|       margin-top: 30rpx; | 
|   | 
|       .cate_list_item { | 
|         height: 64rpx; | 
|         padding: 0 20rpx; | 
|         box-sizing: border-box; | 
|         background-color: #eeeeee; | 
|         border-radius: 4rpx; | 
|         margin-right: 20rpx; | 
|         margin-bottom: 20rpx; | 
|         display: flex; | 
|         align-items: center; | 
|   | 
|         &:last-child { | 
|           margin-right: 0 !important; | 
|         } | 
|   | 
|         text { | 
|           font-size: 26rpx; | 
|           font-family: PingFangSC, PingFang SC; | 
|           font-weight: 400; | 
|           color: #333333; | 
|           margin-right: 30rpx; | 
|         } | 
|       } | 
|     } | 
|   | 
|     .cate_add { | 
|       width: 200rpx; | 
|       height: 50rpx; | 
|       display: flex; | 
|       align-items: center; | 
|       justify-content: center; | 
|       background: rgba(2, 94, 239, 0); | 
|       border-radius: 25rpx; | 
|       border: 1rpx solid #4c99a8; | 
|       font-size: 22rpx; | 
|       font-family: PingFangSC, PingFang SC; | 
|       font-weight: 400; | 
|       margin-top: 20rpx; | 
|       color: #4c99a8; | 
|       margin: 0 auto; | 
|     } | 
|   } | 
|   | 
|   .zw { | 
|     width: 100%; | 
|     height: calc(env(safe-area-inset-bottom) + 118rpx); | 
|   } | 
|   | 
|   .footer { | 
|     width: 100%; | 
|     padding: 0 30rpx; | 
|     padding-bottom: env(safe-area-inset-bottom); | 
|     box-sizing: border-box; | 
|     position: fixed; | 
|     left: 0; | 
|     bottom: 30rpx; | 
|   | 
|     .footer_btn { | 
|       width: 100%; | 
|       height: 88rpx; | 
|       line-height: 88rpx; | 
|       text-align: center; | 
|       background: #4c99a8; | 
|       border-radius: 44rpx; | 
|       font-size: 32rpx; | 
|       font-weight: 600; | 
|       color: #ffffff; | 
|     } | 
|   } | 
| } | 
| </style> |