| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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="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="idcardType"> |
| | | <el-select v-model="param.idcardType" placeholder="è¯·éæ©"> |
| | | <el-option label="身份è¯" :value="0" /> |
| | | <el-option label="港澳è¯ä»¶" :value="1" /> |
| | | <el-option label="æ¤ç
§" :value="2" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="è¯ä»¶å·ç " prop="idcardNo"> |
| | | <el-input |
| | | maxlength="18" |
| | | v-model="param.idcardNo" |
| | | 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="faceImgUrl"> |
| | | <div class="upload_wrap"> |
| | | <UploadFaceImg |
| | | :file="{ imgurlfull: param.faceImgUrl, imgurl: param.faceImg }" |
| | | :uploadData="uploadData" |
| | | @uploadSuccess="uploadAvatarSuccess" |
| | | @uploadEnd="isUploading = false" |
| | | @uploadBegin="isUploading = true" |
| | | /> |
| | | <div class="content"> |
| | | <div>1ãè¯·éæ©æµ
è²æä¸æ§èæ¯ï¼ä½¿ç¨ååå
线æç
§ã</div> |
| | | <div>2ãè¯·ä¿æé¢é¨æ£å¯¹é头ï¼å¿é®æ¡é¢é¨ï¼ä¿æä¸ç«è¡¨æ
ã</div> |
| | | <div>3ã请é¿å
åæä¿®å¾ï¼ç¡®ä¿äººè¸è½®å»æ¸
æ°ã宿´ï¼å°½å¯è½åå°éè¸é¨å
å®¹å æ¯ã</div> |
| | | </div> |
| | | </div> |
| | | </el-form-item> |
| | | |
| | | <div class="title_tip" style="margintop: 60px">访客é¢çº¦</div> |
| | | <el-form-item label="被访人" prop="receptMemberId"> |
| | | <el-select v-model="param.receptMemberId" disabled placeholder="è¯·éæ©"> |
| | | <el-option |
| | | v-for="item in memberList" |
| | | :key="item.id" |
| | | :label="item.name + ' ' + item.companyName" |
| | | :value="item.id" |
| | | /> |
| | | </el-select> |
| | | </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" |
| | | :picker-options="endPickerOptions" |
| | | default-time="08:00:00" |
| | | /> |
| | | </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-item label="æ¯å¦æ½å·¥ä½ä¸"> |
| | | <el-switch |
| | | style="width: 200px" |
| | | v-model="param.type" |
| | | :active-value="1" |
| | | :inactive-value="0" |
| | | > |
| | | </el-switch> |
| | | </el-form-item> |
| | | <el-form-item v-if="param.type == 1" label="æ½å·¥å
容"> |
| | | <el-input |
| | | v-model="param.constructionReason" |
| | | placeholder="请è¾å
¥æ½å·¥å
容" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="éè¡è½¦è¾"> |
| | | <el-input v-model.trim="param.carNos" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" placeholder="请è¾å
¥è½¦çå·"></el-input> |
| | | </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 { createFk, getVisitedVisitReason, getVisitedMember } from '@/api/business/visits' |
| | | export default { |
| | | extends: BaseOpera, |
| | | components: { |
| | | GlobalWindow, |
| | | UploadFaceImg |
| | | }, |
| | | |
| | | data () { |
| | | return { |
| | | isShowModal: false, |
| | | param: { |
| | | type: 0, |
| | | idcardType: 0, |
| | | starttime: '', |
| | | endtime: '' |
| | | }, |
| | | VisitReason: [], |
| | | memberList: [], |
| | | uploadData: { |
| | | folder: 'member', |
| | | isFace: 0 |
| | | }, |
| | | 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' }], |
| | | receptMemberId: [{ required: true, message: 'è¯·éæ©', trigger: 'change' }], |
| | | idcardType: [{ required: true, message: 'è¯·éæ©', trigger: 'change' }], |
| | | faceImgUrl: [{ required: true, message: '请ä¸ä¼ ', trigger: 'change' }], |
| | | |
| | | 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.$set(this.param, 'receptMemberId', this.$store.state.userInfo.memberId) |
| | | this.$set(this.param, 'starttime', dayjs().format('YYYY-MM-DD HH:mm:ss')) |
| | | this.initData() |
| | | }, |
| | | 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: { |
| | | close () { |
| | | this.isShowModal = false |
| | | this.$emit('close') |
| | | }, |
| | | initData () { |
| | | getVisitedVisitReason({}).then(res => { |
| | | this.VisitReason = res || [] |
| | | }) |
| | | getVisitedMember({}).then(res => { |
| | | this.memberList = res || [] |
| | | console.log('memberList', this.memberList) |
| | | }) |
| | | }, |
| | | uploadAvatarSuccess (file) { |
| | | this.$set(this.param, 'faceImg', file.imgurl) |
| | | this.$set(this.param, 'faceImgUrl', file.imgurlfull) |
| | | }, |
| | | changeStarttime (e) { |
| | | // this.$set(this.param, 'endtime', this.param.starttime) |
| | | }, |
| | | // åæ¥ä¿¡æ¯ |
| | | 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, "") |
| | | } |
| | | if (param.starttime.slice(0, 10) !== param.endtime.slice(0, 10)) return this.$tip.error('å
¥åæ¶é´åç¦»åæ¶é´ä¸å¯è·¨å¤©') |
| | | // è°ç¨æ°å»ºæ¥å£ |
| | | this.isWorking = true |
| | | createFk({ |
| | | ...this.param |
| | | }) |
| | | .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; |
| | | } |
| | | .upload_wrap{ |
| | | display: flex; |
| | | align-items: center; |
| | | .avatar-uploader{ |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | } |
| | | ::v-deep .avatar{ |
| | | max-width: 90px; |
| | | max-height: 90px; |
| | | } |
| | | .content{ |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | font-size: 12px; |
| | | color: #999999; |
| | | margin-left: 12px; |
| | | line-height: 24px; |
| | | } |
| | | } |
| | | </style> |