| ¶Ô±ÈÐÂÎļþ | 
 |  |  | 
 |  |  | <template> | 
 |  |  |   <GlobalWindow | 
 |  |  |     title="æ°å¢è®¿å®¢æ¥å¤" | 
 |  |  |     width="600px" | 
 |  |  |     :visible.sync="isShowModal" | 
 |  |  |     :confirm-working="isWorking" | 
 |  |  |     @confirm="confirm" | 
 |  |  |   > | 
 |  |  |     <el-form :model="param" ref="paramRef" :rules="rules"> | 
 |  |  |       <div class="title_tip">访客é¢çº¦</div> | 
 |  |  |       <el-form-item label="被访人" prop="startTime"> | 
 |  |  |         {{ userInfo.realname }} {{ userInfo.company.companyNamePath }} | 
 |  |  |       </el-form-item> | 
 |  |  |       <el-form-item label="å
¥åæ¶é´" prop="starttime"> | 
 |  |  |         <el-date-picker | 
 |  |  |           v-model="param.starttime" | 
 |  |  |           format="yyyy-MM-dd HH:mm" | 
 |  |  |           value-format="yyyy-MM-dd HH:mm:ss" | 
 |  |  |           type="datetime" | 
 |  |  |           default-time="08:00:00" | 
 |  |  |           :picker-options="startPickerOptions" | 
 |  |  |           @change="changeStarttime" | 
 |  |  |         /> | 
 |  |  |       </el-form-item> | 
 |  |  |       <el-form-item label="ç¦»åæ¶é´" prop="endtime"> | 
 |  |  |         <el-date-picker | 
 |  |  |           v-model="param.endtime" | 
 |  |  |           format="yyyy-MM-dd HH:mm" | 
 |  |  |           value-format="yyyy-MM-dd HH:mm:ss" | 
 |  |  |           type="datetime" | 
 |  |  |           default-time="08:00:00" | 
 |  |  |           :picker-options="endPickerOptions" | 
 |  |  |         /> | 
 |  |  |       </el-form-item> | 
 |  |  |  | 
 |  |  |       <div class="title_tip">访客信æ¯</div> | 
 |  |  |       <el-form-item label="è系人" prop="name"> | 
 |  |  |         <el-input | 
 |  |  |           v-model="param.name" | 
 |  |  |           placeholder="请è¾å
¥è系人çå§å" | 
 |  |  |         ></el-input> | 
 |  |  |       </el-form-item> | 
 |  |  |       <el-form-item label="ææºå·" prop="phone"> | 
 |  |  |         <el-input | 
 |  |  |           v-model="param.phone" | 
 |  |  |           placeholder="请è¾å
¥èç³»äººçææºå·" | 
 |  |  |         ></el-input> | 
 |  |  |       </el-form-item> | 
 |  |  |       <el-form-item label="æ¥è®¿åä½" prop="companyName"> | 
 |  |  |         <el-input | 
 |  |  |           v-model="param.companyName" | 
 |  |  |           placeholder="请è¾å
¥æ¥è®¿çåä½å
¨ç§°" | 
 |  |  |         ></el-input> | 
 |  |  |       </el-form-item> | 
 |  |  |       <el-form-item label="å
¥å车è¾" prop="carNos"> | 
 |  |  |         <el-input v-model="param.carNos" placeholder="请è¾å
¥è½¦çå·"></el-input> | 
 |  |  |       </el-form-item> | 
 |  |  |       <el-form-item label="é车人æ°" prop="memberNum"> | 
 |  |  |         <el-input | 
 |  |  |           v-model="param.memberNum" | 
 |  |  |           placeholder="请è¾å
¥éè½¦äººåæ»æ°" | 
 |  |  |         ></el-input> | 
 |  |  |       </el-form-item> | 
 |  |  |       <el-form-item label="æ¥è®¿äºç±" prop="reason"> | 
 |  |  |         <el-select v-model="param.reason" placeholder="è¯·éæ©"> | 
 |  |  |           <el-option | 
 |  |  |             v-for="item in VisitReason" | 
 |  |  |             :key="item.id" | 
 |  |  |             :label="item.title" | 
 |  |  |             :value="item.title" | 
 |  |  |           /> | 
 |  |  |         </el-select> | 
 |  |  |       </el-form-item> | 
 |  |  |     </el-form> | 
 |  |  |   </GlobalWindow> | 
 |  |  | </template> | 
 |  |  |  | 
 |  |  | <script> | 
 |  |  | import BaseOpera from '@/components/base/BaseOpera' | 
 |  |  | import GlobalWindow from '@/components/common/GlobalWindow' | 
 |  |  | import UploadFaceImg from '@/components/common/UploadFaceImg' | 
 |  |  | import dayjs from 'dayjs' | 
 |  |  | import { createVisit, getVisitedVisitReason } from '@/api/business/visits' | 
 |  |  | export default { | 
 |  |  |   name: 'OperaVisitsHkWindow', | 
 |  |  |   extends: BaseOpera, | 
 |  |  |   components: { | 
 |  |  |     GlobalWindow, | 
 |  |  |     UploadFaceImg | 
 |  |  |   }, | 
 |  |  |   data () { | 
 |  |  |     return { | 
 |  |  |       isShowModal: false, | 
 |  |  |       param: { | 
 |  |  |         type: 2, | 
 |  |  |         starttime: '', | 
 |  |  |         endtime: '' | 
 |  |  |       }, | 
 |  |  |       userInfo: this.$store.state.userInfo, | 
 |  |  |  | 
 |  |  |       VisitReason: [], | 
 |  |  |       uploadData: { | 
 |  |  |         folder: 'member' | 
 |  |  |       }, | 
 |  |  |       startPickerOptions: { | 
 |  |  |         disabledDate (time) { | 
 |  |  |           return time.getTime() < Date.now() - 8.64e7 // ç¦ç¨è¶
è¿å½åæ¶é´çæ¥æ | 
 |  |  |         }, | 
 |  |  |         selectableRange: '00:00:00 - 23:59:59' // è¿ä¸ªå ä¸ä¹åï¼æ¶åç§ä¸é¢ææç¦æ¢éæ©åç°ï¼å¦æä¸å ï¼ä¹å¯ä»¥ç¦æ¢éæ©ï¼ä½æ¯ä¸ä¼åç° | 
 |  |  |       }, | 
 |  |  |       endPickerOptions: { | 
 |  |  |         disabledDate: (time) => { | 
 |  |  |           if (this.param.starttime) { | 
 |  |  |             return new Date(this.param.starttime).getTime() > time.getTime() + 8.64e7 // ç¦ç¨è¶
è¿å½åæ¶é´çæ¥æ | 
 |  |  |           } | 
 |  |  |         }, | 
 |  |  |         selectableRange: '00:00:00 - 23:59:59' | 
 |  |  |       }, | 
 |  |  |       rules: { | 
 |  |  |         starttime: [{ required: true, message: 'è¯·éæ©æ¥æ', trigger: 'change' }], | 
 |  |  |         endtime: [{ required: true, message: 'è¯·éæ©æ¥æ', trigger: 'change' }], | 
 |  |  |         reason: [{ required: true, message: 'è¯·éæ©', trigger: 'change' }], | 
 |  |  |         type: [{ required: true, message: 'è¯·éæ©', trigger: 'change' }], | 
 |  |  |         idcardType: [{ required: true, message: 'è¯·éæ©', trigger: 'change' }], | 
 |  |  |  | 
 |  |  |         memberNum: [{ required: true, message: '请è¾å
¥', trigger: 'blur' }], | 
 |  |  |         name: [{ required: true, message: '请è¾å
¥', trigger: 'blur' }], | 
 |  |  |         idcardNo: [{ required: true, message: '请è¾å
¥', trigger: 'blur' }], | 
 |  |  |         companyName: [{ required: true, message: '请è¾å
¥', trigger: 'blur' }], | 
 |  |  |         phone: [{ required: true, message: '请è¾å
¥', trigger: 'blur' }], | 
 |  |  |         carNos: [{ required: true, message: '请è¾å
¥', trigger: 'blur' }], | 
 |  |  |         constructionReason: [{ required: true, message: '请è¾å
¥', trigger: 'blur' }] | 
 |  |  |       } | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   created () { | 
 |  |  |     this.initData() | 
 |  |  |     this.$set(this.param, 'starttime', dayjs().format('YYYY-MM-DD HH:mm:ss')) | 
 |  |  |   }, | 
 |  |  |   watch: { | 
 |  |  |     'param.starttime': { | 
 |  |  |       handler (newValue, oldValue) { | 
 |  |  |         if (newValue) { | 
 |  |  |           const date = new Date() | 
 |  |  |           // const min = date.getMinutes() | 
 |  |  |           // date.setMinutes(min) // è¿éå 1åéï¼æ¯ä¸ºäºè§£å³å¼æ¹ååï¼ç³»ç»ç§æ°å°±è¿æéå¶äºï¼æ æ³ç¹å»âæ¤å»âæé®ï¼ å¦æç嬠âç³»ç»æ¶é´âçæ¹åï¼åä¼å½±åæ§è½ã | 
 |  |  |           const nowDate = dayjs(date).format('HH:mm:ss') | 
 |  |  |           let st = '' | 
 |  |  |           if (dayjs(date).format('yyyy-MM-DD') === dayjs(newValue).format('yyyy-MM-DD')) { | 
 |  |  |             const hh1 = dayjs(newValue).format('HH:mm:ss') | 
 |  |  |             // if (hh1 < nowDate) { | 
 |  |  |             //   this.param.starttime = new Date() | 
 |  |  |             // } | 
 |  |  |             st = nowDate | 
 |  |  |           } else { | 
 |  |  |             st = '00:00:00' | 
 |  |  |           } | 
 |  |  |           this.$set(this.startPickerOptions, 'selectableRange', st + ' - 23:59:59') | 
 |  |  |           // this.startPickerOptions = this.startPickerOptions | 
 |  |  |         } | 
 |  |  |       }, | 
 |  |  |       deep: true, | 
 |  |  |       immediate: true | 
 |  |  |     }, | 
 |  |  |     'param.endtime': { | 
 |  |  |       handler (newValue, oldValue) { | 
 |  |  |         if (newValue) { | 
 |  |  |           const nowDate = dayjs(this.param.starttime).format('HH:mm:ss') | 
 |  |  |           let st = '' | 
 |  |  |           if (dayjs(this.param.starttime).format('yyyy-MM-DD') === dayjs(newValue).format('yyyy-MM-DD')) { | 
 |  |  |             st = nowDate | 
 |  |  |           } else { | 
 |  |  |             st = '00:00:00' | 
 |  |  |           } | 
 |  |  |           this.$set(this.endPickerOptions, 'selectableRange', st + ' - 23:59:59') | 
 |  |  |           // this.startPickerOptions = this.startPickerOptions | 
 |  |  |         } | 
 |  |  |       }, | 
 |  |  |       deep: true, | 
 |  |  |       immediate: true | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   methods: { | 
 |  |  |     initData () { | 
 |  |  |       getVisitedVisitReason({}).then(res => { | 
 |  |  |         this.VisitReason = res || [] | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     changeStarttime (e) { | 
 |  |  |       this.$set(this.param, 'endtime', this.param.starttime) | 
 |  |  |     }, | 
 |  |  |     uploadAvatarSuccess (file) { | 
 |  |  |       this.$set(this.param, 'faceImg', file.imgurl) | 
 |  |  |       this.$set(this.param, 'faceImgUrl', file.imgurlfull) | 
 |  |  |     }, | 
 |  |  |     // åæ¥ä¿¡æ¯ | 
 |  |  |     confirm () { | 
 |  |  |       this.$refs.paramRef.validate((valid) => { | 
 |  |  |         if (!valid) { | 
 |  |  |           return | 
 |  |  |         } | 
 |  |  |         // è°ç¨æ°å»ºæ¥å£ | 
 |  |  |         this.isWorking = true | 
 |  |  |         createVisit({ | 
 |  |  |           ...this.param, | 
 |  |  |           receptMemberId: this.userInfo.memberId, | 
 |  |  |           receptMemberName: this.userInfo.realname | 
 |  |  |         }) | 
 |  |  |           .then(() => { | 
 |  |  |             this.visible = false | 
 |  |  |             this.$tip.apiSuccess('æäº¤æå') | 
 |  |  |             this.$emit('success') | 
 |  |  |             this.$emit('close') | 
 |  |  |           }) | 
 |  |  |           .catch(e => { | 
 |  |  |             this.$tip.apiFailed(e) | 
 |  |  |           }) | 
 |  |  |           .finally(() => { | 
 |  |  |             this.isWorking = false | 
 |  |  |           }) | 
 |  |  |       }) | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | </script> | 
 |  |  | <style lang="scss" scoped> | 
 |  |  | .title_tip { | 
 |  |  |   font-size: 18px; | 
 |  |  |   font-weight: 600; | 
 |  |  |   margin-bottom: 10px; | 
 |  |  | } | 
 |  |  | </style> |