| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | title="æ°å¢è®¿å®¢æ¥å¤" |
| | | width="600px" |
| | | :visible.sync="isShowModal" |
| | | :confirm-working="isWorking" |
| | | @confirm="confirm" |
| | | @close="close" |
| | | > |
| | | <el-form :model="param" ref="paramRef" :rules="rules"> |
| | | <div class="title_tip">访客é¢çº¦</div> |
| | | <el-form-item label="被访人" prop="startTime"> |
| | | {{ userInfo.realname }} <template v-if="userInfo.company && userInfo.company.companyNamePath">{{ userInfo.company.companyNamePath }}</template> |
| | | </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" |
| | | maxlength="11" |
| | | 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.trim="param.carNos" placeholder="请è¾å
¥è½¦çå·"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="é车人æ°" prop="memberNum"> |
| | | <el-input |
| | | v-model="param.memberNum" |
| | | oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 6)" |
| | | 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 { |
| | | 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) |
| | | }, |
| | | close () { |
| | | this.isShowModal = false |
| | | this.$emit('close') |
| | | }, |
| | | // åæ¥ä¿¡æ¯ |
| | | confirm () { |
| | | this.$refs.paramRef.validate((valid) => { |
| | | if (!valid) { |
| | | return |
| | | } |
| | | const { param } = this |
| | | if(param.carNos){ |
| | | param.carNos = param.carNos.replace(/\s*/g,"") |
| | | param.carNos = param.carNos.replace(/[\r\n]/g, "") |
| | | } |
| | | // è°ç¨æ°å»ºæ¥å£ |
| | | 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 => { |
| | | |
| | | }) |
| | | .finally(() => { |
| | | this.isWorking = false |
| | | }) |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style lang="scss" scoped> |
| | | .title_tip { |
| | | font-size: 18px; |
| | | font-weight: 600; |
| | | margin-bottom: 10px; |
| | | } |
| | | </style> |