| | |
| | | > |
| | | </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" |
| | |
| | | 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"> |
| | |
| | | :picker-options="{ |
| | | disabledDate(time) { |
| | | return time.getTime() < Date.now() - 8.64e7; |
| | | } |
| | | }, |
| | | }" |
| | | @change="seletedDate" |
| | | > |
| | |
| | | :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> |
| | |
| | | </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: '已选择' }, |
| | |
| | | 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 = new Date(this.form.endTime).getTime() |
| | | const maxTime = this.form.endTime ? new Date(this.form.endTime).getTime() : '' |
| | | return ( |
| | | time.getTime() < minTime || time.getTime() > maxTime |
| | | // maxTime ? time.getTime() < minTime || time.getTime() > maxTime : time.getTime() < minTime |
| | | time.getTime() < minTime |
| | | ) |
| | | } else { |
| | | return time.getTime() < Date.now() - 8.64e7 |
| | | } |
| | | }, |
| | | selectableRange: '00:00:00 - 23:59:59' |
| | | } |
| | | }, |
| | | pickerOptions2: { |
| | | disabledDate: (time) => { |
| | |
| | | const minTime = new Date(this.form.startTime).getTime() |
| | | const maxTime = new Date(this.form.endTime).getTime() |
| | | return ( |
| | | time.getTime() < minTime || time.getTime() > maxTime |
| | | 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; |
| | | } |
| | | }, |
| | | // 验证规则 |
| | | rules: { |
| | |
| | | content: [{ required: true, message: '请输入', trigger: 'blur' }] |
| | | } |
| | | } |
| | | }, |
| | | computed: { |
| | | |
| | | }, |
| | | watch: { |
| | | 'form.planUseDate': { |
| | |
| | | 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 || [] |
| | | }) |
| | |
| | | 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 { |
| | |
| | | } |
| | | } |
| | | } |
| | | .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> |