|  |  | 
 |  |  |     <div class="modal_wrap"> | 
 |  |  |       <el-form :model="form" ref="formRef" class="el_form" :rules="rules"> | 
 |  |  |         <el-form-item label="用车范围" prop="type"> | 
 |  |  |           <el-radio v-model="form.type" style="width: 80px;" :label="0">市内用车</el-radio> | 
 |  |  |           <el-radio v-model="form.type" style="width: 80px;" :label="1">市外用车</el-radio> | 
 |  |  |           <el-radio v-model="form.type" style="width: 80px" :label="0" | 
 |  |  |             >市内用车</el-radio | 
 |  |  |           > | 
 |  |  |           <el-radio v-model="form.type" style="width: 80px" :label="1" | 
 |  |  |             >市外用车</el-radio | 
 |  |  |           > | 
 |  |  |         </el-form-item> | 
 |  |  |         <el-form-item label="选择车辆" prop="carId"> | 
 |  |  |           <el-select v-model="form.carId" placeholder="选择车辆"> | 
 |  |  |           <el-select v-model="form.carId" @change="clearTime" placeholder="选择车辆"> | 
 |  |  |             <el-option | 
 |  |  |               v-for="item in carsList" | 
 |  |  |               :key="item.id" | 
 |  |  | 
 |  |  |         </el-form-item> | 
 |  |  |         <el-form-item label="预计出发时间" prop="planUseDate"> | 
 |  |  |           <el-date-picker | 
 |  |  |             v-if="form.type == '0'" | 
 |  |  |             :disabled="!form.startTime" | 
 |  |  |             v-model="form.planUseDate" | 
 |  |  |             format="yyyy-MM-dd HH:mm:ss" | 
 |  |  |             format="yyyy-MM-dd HH:mm" | 
 |  |  |             value-format="yyyy-MM-dd HH:mm:ss" | 
 |  |  |             :picker-options="pickerOptions" | 
 |  |  |             default-time="08:00:00" | 
 |  |  |             type="datetime" | 
 |  |  |             placeholder="选择日期时间" | 
 |  |  |           > | 
 |  |  |           </el-date-picker> | 
 |  |  |           /> | 
 |  |  |           <el-date-picker | 
 |  |  |             v-if="form.type == '1'" | 
 |  |  |             :disabled="!form.startTime" | 
 |  |  |             v-model="form.planUseDate" | 
 |  |  |             format="yyyy-MM-dd HH:mm" | 
 |  |  |             value-format="yyyy-MM-dd HH:mm:ss" | 
 |  |  |             :picker-options="pickerOptions2" | 
 |  |  |             default-time="08:00:00" | 
 |  |  |             type="datetime" | 
 |  |  |             placeholder="选择日期时间" | 
 |  |  |           /> | 
 |  |  |         </el-form-item> | 
 |  |  |         <el-form-item label="目的地" prop="addr"> | 
 |  |  |           <el-input v-model="form.addr" placeholder="请输入内容"></el-input> | 
 |  |  | 
 |  |  |         <h1>注意事项:</h1> | 
 |  |  |         <div>1、公司车辆外出需办理用车申请表,经批准后方可外出(借出)。</div> | 
 |  |  |         <div>2、市外用车需领导审核。</div> | 
 |  |  |         <div>3、借出车辆必须遵守交通规则,安全行驶。对于车辆发生交通意外,对当事人及第三方造成人身伤害及损失,公司可以协助处理保险公司赔偿相关事宜,但不承担任何责任和费用。</div> | 
 |  |  |         <div>4、公司借给申请人用车,申请借车人为第一责任人,不允许转借给其他人使用,若要借给他人使用。责任人要承担全部责任。</div> | 
 |  |  |         <!-- <div> | 
 |  |  |           3、借出车辆必须遵守交通规则,安全行驶。对于车辆发生交通意外,对当事人及第三方造成人身伤害及损失,公司可以协助处理保险公司赔偿相关事宜,但不承担任何责任和费用。 | 
 |  |  |         </div> | 
 |  |  |         <div> | 
 |  |  |           4、公司借给申请人用车,申请借车人为第一责任人,不允许转借给其他人使用,若要借给他人使用。责任人要承担全部责任。 | 
 |  |  |         </div> --> | 
 |  |  |       </div> | 
 |  |  |     </div> | 
 |  |  |  | 
 |  |  | 
 |  |  |       title="选择用车时间" | 
 |  |  |       :visible.sync="isShowTime" | 
 |  |  |       append-to-body | 
 |  |  |       width="600px" | 
 |  |  |       width="640px" | 
 |  |  |     > | 
 |  |  |       <el-form :model="form" ref="modalRef" class="el_form" :rules="rules"> | 
 |  |  |         <el-form-item label="用车日期" prop="dateDay"> | 
 |  |  | 
 |  |  |             value-format="yyyy-MM-dd" | 
 |  |  |             type="date" | 
 |  |  |             placeholder="选择日期" | 
 |  |  |             :picker-options="{ | 
 |  |  |               disabledDate(time) { | 
 |  |  |                 return time.getTime() < Date.now() - 8.64e7; | 
 |  |  |               }, | 
 |  |  |             }" | 
 |  |  |             @change="seletedDate" | 
 |  |  |           > | 
 |  |  |           </el-date-picker> | 
 |  |  | 
 |  |  |                 :class="{ | 
 |  |  |                   disable: item.isUse == 1, | 
 |  |  |                   active: item.checked == '1', | 
 |  |  |                   hasSub: item.carUseBookId, | 
 |  |  |                 }" | 
 |  |  |                 @click="datetimeClick(item, i)" | 
 |  |  |                 v-for="(item, i) in timeList" | 
 |  |  |                 :key="i" | 
 |  |  |               > | 
 |  |  |                 {{ item.startHours }}-{{ item.endHours }} | 
 |  |  |                 {{ item.startHours }} - {{ item.endHours }} | 
 |  |  |               </div> | 
 |  |  |             </div> | 
 |  |  |           </div> | 
 |  |  | 
 |  |  |       :visible.sync="isShowShiwai" | 
 |  |  |       append-to-body | 
 |  |  |       width="600px" | 
 |  |  |       :before-close="clearTime" | 
 |  |  |     > | 
 |  |  |       <el-form :model="form" ref="modalRef" class="el_form" :rules="rules"> | 
 |  |  |         <el-form-item label="用车开始时间" prop="startTime"> | 
 |  |  |           <el-date-picker | 
 |  |  |             v-model="form.startTime" | 
 |  |  |             format="yyyy-MM-dd HH:mm" | 
 |  |  |             format="yyyy-MM-dd HH:mm:ss" | 
 |  |  |             value-format="yyyy-MM-dd HH:mm:ss" | 
 |  |  |             type="datetime" | 
 |  |  |             :picker-options="pickerOptions" | 
 |  |  |             default-time="08:00:00" | 
 |  |  |             @change="seletedShiwaiDate" | 
 |  |  |             :default-time="defaultTime" | 
 |  |  |             :picker-options="pickerOptionsNow" | 
 |  |  |             @change="seletedShiwaiDate(1)" | 
 |  |  |           > | 
 |  |  |           </el-date-picker> | 
 |  |  |         </el-form-item> | 
 |  |  |         <el-form-item label="用车结束时间" prop="endTime"> | 
 |  |  |           <el-date-picker | 
 |  |  |             v-model="form.endTime" | 
 |  |  |             format="yyyy-MM-dd HH:mm" | 
 |  |  |             format="yyyy-MM-dd HH:mm:ss" | 
 |  |  |             value-format="yyyy-MM-dd HH:mm:ss" | 
 |  |  |             type="datetime" | 
 |  |  |             :default-time="defaultTime" | 
 |  |  |             :picker-options="pickerOptions" | 
 |  |  |             default-time="08:00:00" | 
 |  |  |             @change="seletedShiwaiDate" | 
 |  |  |           > | 
 |  |  |           </el-date-picker> | 
 |  |  | 
 |  |  |       <div class="have_info" v-if="info && info.length > 0"> | 
 |  |  |         <div class="tit">您申请的用车时段已有车辆预约</div> | 
 |  |  |         <div class="content" v-for="(item, i) in info" :key="i"> | 
 |  |  |           <div class="card">{{ item.carCode }}</div> | 
 |  |  |           <div class="df_sb"> | 
 |  |  |             <span class="card" v-if="item.carCode">{{ item.carCode }}</span> | 
 |  |  |             <span>{{ i + 1 }}/{{ info.length }}</span> | 
 |  |  |           </div> | 
 |  |  |           <div class="line"> | 
 |  |  |             <span>用车时段</span> | 
 |  |  |             <span> | 
 |  |  | 
 |  |  |             <span>{{ item.memberIds.split(",").length }}人</span> | 
 |  |  |           </div> | 
 |  |  |           <div class="line"> | 
 |  |  |             <text>用车事由</text> | 
 |  |  |             <text>{{ item.content }}</text> | 
 |  |  |             <span>用车事由</span> | 
 |  |  |             <span>{{ item.content }}</span> | 
 |  |  |           </div> | 
 |  |  |           <div class="line"> | 
 |  |  |             <span>申请人</span> | 
 |  |  |             <span>{{ item.memberName }} {{ item.memberMobile }}</span> | 
 |  |  |             <span>{{ item.memberName }} <span class="primaryColor">{{ item.memberMobile }}</span></span> | 
 |  |  |           </div> | 
 |  |  |         </div> | 
 |  |  |       </div> | 
 |  |  |  | 
 |  |  |       <span slot="footer" class="dialog-footer"> | 
 |  |  |         <div>已选择:{{ selDatetime }}</div> | 
 |  |  |         <div class="btn" @click="subTime">确认时间</div> | 
 |  |  |         <div class="btn" :class="{disable: info && info.length > 0}" @click="subTime">确认时间</div> | 
 |  |  |       </span> | 
 |  |  |     </el-dialog> | 
 |  |  |     <!-- 详情 --> | 
 |  |  |      <el-dialog | 
 |  |  |       title="选择用车时间" | 
 |  |  |       :visible.sync="isShowDetail" | 
 |  |  |       append-to-body | 
 |  |  |       width="600px" | 
 |  |  |     > | 
 |  |  |       <div class="detail_modal"> | 
 |  |  |         <div class="title">车辆预约情况</div> | 
 |  |  |         <div class="h1" v-if="activeInfo.carCode">{{ activeInfo.carCode }}</div> | 
 |  |  |         <div class="line"> | 
 |  |  |           <div class="label">预计用车时段</div> | 
 |  |  |           <div class="value" v-if="activeInfo.startTime">{{ activeInfo.startTime.slice(5, 16) }} - {{ activeInfo.endTime.slice(5, 16) }}</div> | 
 |  |  |         </div> | 
 |  |  |         <div class="line"> | 
 |  |  |           <div class="label">目的地</div> | 
 |  |  |           <div class="value">{{ activeInfo.addr }}</div> | 
 |  |  |         </div> | 
 |  |  |         <div class="line"> | 
 |  |  |           <div class="label">乘车人数</div> | 
 |  |  |           <div class="value" v-if="activeInfo.memberIds">{{ activeInfo.memberIds.split(',').length }}人</div> | 
 |  |  |         </div> | 
 |  |  |         <div class="line"> | 
 |  |  |           <div class="label">用车事由</div> | 
 |  |  |           <div class="value">{{ activeInfo.content || '' }}</div> | 
 |  |  |         </div> | 
 |  |  |         <div class="line"> | 
 |  |  |           <div class="label">申请人</div> | 
 |  |  |           <div class="value">{{ activeInfo.memberName }} <span class="primaryColor ml12">{{ activeInfo.memberPhone }}</span></div> | 
 |  |  |         </div> | 
 |  |  |       </div> | 
 |  |  |      </el-dialog> | 
 |  |  |   </GlobalWindow> | 
 |  |  | </template> | 
 |  |  |  | 
 |  |  | 
 |  |  | import GlobalWindow from '@/components/common/GlobalWindow' | 
 |  |  | import { allList } from '@/api/business/member' | 
 |  |  | import { allList as getCarList } from '@/api/business/cars' | 
 |  |  | import { carCanReservationDate, carUseBookCraete, carUseBookList } from '@/api/business/carUseBook' | 
 |  |  | import { carCanReservationDate, carUseBookCraete, carUseBookList, detail } from '@/api/business/carUseBook' | 
 |  |  | import { findTypeMemberInfo } from '@/api/business/memberCard' | 
 |  |  | import dayjs from 'dayjs' | 
 |  |  |  | 
 |  |  | export default { | 
 |  |  |   name: 'OperCarUseBookParamWindow', | 
 |  |  |   extends: BaseOpera, | 
 |  |  | 
 |  |  |  | 
 |  |  |       memberList: [], | 
 |  |  |       timeList: [], | 
 |  |  |       defaultTime: dayjs().format('HH:mm:ss'), | 
 |  |  |       selDatetime: '', | 
 |  |  |       colorOptions: [ | 
 |  |  |         { color: this.$store.state.primaryColor, name: '已选择' }, | 
 |  |  | 
 |  |  |       carsList: [], | 
 |  |  |       form: { | 
 |  |  |         type: 0, | 
 |  |  |         startTime: '', | 
 |  |  |         endTime: '', | 
 |  |  |         memberIds: [] | 
 |  |  |       }, | 
 |  |  |       activeInfo: {}, | 
 |  |  |       isShowDetail: false, | 
 |  |  |       carBookInfo: {}, | 
 |  |  |       pickerOptions: { | 
 |  |  |         disabledDate: (time) => { | 
 |  |  |           if (this.form.startTime && this.form.endTime) { | 
 |  |  |           if (this.form.startTime) { | 
 |  |  |             const minTime = new Date(this.form.startTime).getTime() - 8.64e7 | 
 |  |  |             const maxTime = this.form.endTime ? new Date(this.form.endTime).getTime() : '' | 
 |  |  |             return ( | 
 |  |  |               // maxTime ? time.getTime() < minTime || time.getTime() > maxTime : time.getTime() < minTime | 
 |  |  |               time.getTime() < minTime | 
 |  |  |             ) | 
 |  |  |           } else { | 
 |  |  |             return time.getTime() < Date.now() - 8.64e7 | 
 |  |  |           } | 
 |  |  |         } | 
 |  |  |       }, | 
 |  |  |       pickerOptions2: { | 
 |  |  |         disabledDate: (time) => { | 
 |  |  |           if (this.form.startTime && this.form.endTime) { | 
 |  |  |             const minTime = new Date(this.form.startTime).getTime() | 
 |  |  |             const maxTime = new Date(this.form.endTime).getTime() | 
 |  |  |             return ( | 
 |  |  |               time.getTime() < minTime - 8.64e7 || time.getTime() > maxTime | 
 |  |  |             ) | 
 |  |  |           } else { | 
 |  |  |             return time.getTime() < Date.now() - 8.64e7 | 
 |  |  |           } | 
 |  |  |         }, | 
 |  |  |         selectableRange: '00:00:00 - 23:59:59' | 
 |  |  |       }, | 
 |  |  |       pickerOptionsNow: { | 
 |  |  |         disabledDate: (time) => { | 
 |  |  |           return time.getTime() < Date.now() - 8.64e7; | 
 |  |  |         } | 
 |  |  |       }, | 
 |  |  |       // 验证规则 | 
 |  |  | 
 |  |  |         memberIds: [{ type: 'array', required: true, message: '请选择', trigger: 'change' }], | 
 |  |  |         content: [{ required: true, message: '请输入', trigger: 'blur' }] | 
 |  |  |       } | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   computed: { | 
 |  |  |  | 
 |  |  |   }, | 
 |  |  |   watch: { | 
 |  |  |     'form.planUseDate': { | 
 |  |  |       handler (newValue, oldValue) { | 
 |  |  |         if (newValue) { | 
 |  |  |           this.$set(this.pickerOptions, 'selectableRange', this.form.startTime.slice(11, 19) + ' - ' + this.form.endTime.slice(11, 19)) | 
 |  |  |           // this.startPickerOptions = this.startPickerOptions | 
 |  |  |         } | 
 |  |  |       }, | 
 |  |  |       deep: true, | 
 |  |  |       immediate: true | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   created () { | 
 |  |  | 
 |  |  |         return this.$tip.error('请先选择车辆') | 
 |  |  |       } | 
 |  |  |       if (this.form.type === 0) { | 
 |  |  |         this.$set(this.form, 'dateDay', '') | 
 |  |  |         this.timeList = [] | 
 |  |  |         this.isShowTime = true | 
 |  |  |       } else { | 
 |  |  |         this.clearTime() | 
 |  |  |         this.selDatetime = '' | 
 |  |  |         this.isShowShiwai = true | 
 |  |  |       } | 
 |  |  |     }, | 
 |  |  |     clearTime () { | 
 |  |  |       this.isShowShiwai = false | 
 |  |  |       this.$set(this.form, 'startTime', '') | 
 |  |  |       this.$set(this.form, 'endTime', '') | 
 |  |  |       this.$nextTick(() => { | 
 |  |  |         if (this.$refs.modalRef) { | 
 |  |  |           this.$refs.modalRef.clearValidate() | 
 |  |  |         } | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     subTime () { | 
 |  |  |       if (this.info && this.info.length > 0) return | 
 |  |  |       if (this.form.type === 0) { | 
 |  |  |         const selTimeList = this.timeList.filter(i => i.checked == '1') | 
 |  |  |         if (selTimeList.length === 0) { | 
 |  |  | 
 |  |  |         this.$forceUpdate() | 
 |  |  |       } else { | 
 |  |  |         this.$refs.modalRef.validate((valid) => { | 
 |  |  |           const { form } = this | 
 |  |  |           if (new Date(form.startTime).getTime() > new Date(form.endTime).getTime()) { | 
 |  |  |             return this.$tip.error('结束时间应大于开始时间') | 
 |  |  |           } | 
 |  |  |           this.isShowShiwai = false | 
 |  |  |         }) | 
 |  |  |       } | 
 |  |  |     }, | 
 |  |  |     datetimeClick (item, index) { | 
 |  |  |       if (item.carUseBookId) { | 
 |  |  |         detail( | 
 |  |  |           item.carUseBookId | 
 |  |  |         ).then(res => { | 
 |  |  |           this.activeInfo = res | 
 |  |  |           this.isShowDetail = true | 
 |  |  |         }) | 
 |  |  |         return | 
 |  |  |       } | 
 |  |  |       if (item.isUse == '1') return | 
 |  |  |       const { timeList } = this | 
 |  |  |       const selTimeList = timeList.filter(i => i.checked == '1') | 
 |  |  | 
 |  |  |     seletedDate (e) { | 
 |  |  |       this.gettimes() | 
 |  |  |     }, | 
 |  |  |     seletedShiwaiDate () { | 
 |  |  |     seletedShiwaiDate (str) { | 
 |  |  |       const { form } = this | 
 |  |  |       if(str && str == 1){ | 
 |  |  |         this.$set(this.form, 'endTime', '') | 
 |  |  |       } | 
 |  |  |       if (form.startTime && form.endTime) { | 
 |  |  |         this.selDatetime = form.startTime + '-' + form.endTime | 
 |  |  |         this.selDatetime = form.startTime + ' - ' + form.endTime | 
 |  |  |         carUseBookList({ | 
 |  |  |           carId: form.carId, | 
 |  |  |           startTime: form.startTime, | 
 |  |  | 
 |  |  |     }, | 
 |  |  |     initData () { | 
 |  |  |       getCarList({ | 
 |  |  |         type: 1 | 
 |  |  |         type: 0 | 
 |  |  |       }).then(res => { | 
 |  |  |         this.carsList = res | 
 |  |  |       }) | 
 |  |  |       findTypeMemberInfo({ | 
 |  |  |         type: '2' | 
 |  |  |         type: '2', | 
 |  |  |         companyType: 1 | 
 |  |  |       }).then(res => { | 
 |  |  |         this.memberList = res || [] | 
 |  |  |       }) | 
 |  |  | 
 |  |  |  | 
 |  |  | <style scoped lang="scss"> | 
 |  |  | @import "@/assets/style/variables.scss"; | 
 |  |  | div{ | 
 |  |  | div { | 
 |  |  |   box-sizing: border-box; | 
 |  |  | } | 
 |  |  | .modal_wrap { | 
 |  |  | 
 |  |  |     flex: 1; | 
 |  |  |     margin-left: 30px; | 
 |  |  |     padding: 0 30px; | 
 |  |  |     h1{ | 
 |  |  |     h1 { | 
 |  |  |       margin-bottom: 20px; | 
 |  |  |     } | 
 |  |  |     div{ | 
 |  |  |     div { | 
 |  |  |       line-height: 28px; | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  |   }  | 
 |  |  | } | 
 |  |  | .time_list { | 
 |  |  |   display: flex; | 
 |  |  |   justify-content: space-between; | 
 |  |  |   flex-wrap: wrap; | 
 |  |  |   .item { | 
 |  |  |     width: 154px; | 
 |  |  |     height: 32px; | 
 |  |  |     line-height: 32px; | 
 |  |  |     text-align: center; | 
 |  |  |     background: #f7f7f7; | 
 |  |  |     border-radius: 4px; | 
 |  |  |     margin-bottom: 10px; | 
 |  |  |     margin-right: 8px; | 
 |  |  |     margin-bottom: 8px; | 
 |  |  |     font-size: 14px; | 
 |  |  |     font-weight: 400; | 
 |  |  |     line-height: 14px; | 
 |  |  |     width: 124px; | 
 |  |  |     height: 36px; | 
 |  |  |     display: flex; | 
 |  |  |     justify-content: center; | 
 |  |  |     align-items: center; | 
 |  |  |     border-radius: 5px; | 
 |  |  |     color: #111; | 
 |  |  |     border: #cccccc solid 1px; | 
 |  |  |     cursor: pointer; | 
 |  |  |   } | 
 |  |  |   .active { | 
 |  |  |     background-color: $primary-color; | 
 |  |  |     color: #fff; | 
 |  |  |     border-color: $primary-color; | 
 |  |  |     background-color: #f6f9fe; | 
 |  |  |     color: $primary-color; | 
 |  |  |   } | 
 |  |  |   .disable { | 
 |  |  |     color: #fff; | 
 |  |  |     border-color: #cccccc; | 
 |  |  |     background-color: #cccccc; | 
 |  |  |     color: #999999; | 
 |  |  |   } | 
 |  |  |   .hasSub { | 
 |  |  |     border-color: #bed6f9; | 
 |  |  |     background-color: #bed6f9; | 
 |  |  |     color: #fff; | 
 |  |  |     } | 
 |  |  | } | 
 |  |  | .color_op { | 
 |  |  |   display: flex; | 
 |  |  | 
 |  |  |     color: #fff; | 
 |  |  |     width: 120px; | 
 |  |  |     text-align: center; | 
 |  |  |     cursor: pointer; | 
 |  |  |   } | 
 |  |  |   .disable{ | 
 |  |  |     background: #cccccc; | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | .have_info { | 
 |  |  |   padding: 0 0 120px; | 
 |  |  |   padding: 0 0 60px; | 
 |  |  |   .tit { | 
 |  |  |     color: #ed4545; | 
 |  |  |     margin: 20px 0 12px; | 
 |  |  | 
 |  |  |     .line { | 
 |  |  |       display: flex; | 
 |  |  |       margin-bottom: 10px; | 
 |  |  |       text { | 
 |  |  |       span { | 
 |  |  |         &:nth-of-type(1) { | 
 |  |  |           width: 80px; | 
 |  |  |           color: #888888; | 
 |  |  | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | .detail_modal { | 
 |  |  |   padding: 20px 15px; | 
 |  |  |   .title { | 
 |  |  |     text-align: center; | 
 |  |  |     font-weight: 600; | 
 |  |  |     font-size: 16px; | 
 |  |  |     margin-bottom: 20px; | 
 |  |  |   } | 
 |  |  |   .h1 { | 
 |  |  |     font-weight: 600; | 
 |  |  |     font-size: 16px; | 
 |  |  |     margin-bottom: 16px; | 
 |  |  |   } | 
 |  |  |   .line { | 
 |  |  |     display: flex; | 
 |  |  |     margin-bottom: 10px; | 
 |  |  |     .label { | 
 |  |  |       width: 120px; | 
 |  |  |       color: #888888; | 
 |  |  |     } | 
 |  |  |     .value { | 
 |  |  |       color: #333333; | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | </style> |