From 2f8216198bcf091bf7758326aef222d6631b258f Mon Sep 17 00:00:00 2001 From: liukangdong <898885815@qq.com> Date: 星期二, 05 十一月 2024 14:00:11 +0800 Subject: [PATCH] ll --- admin/src/components/operation/OperCarUseBookParamWindow.vue | 301 ++++++++++++++++++++++--------------------------- 1 files changed, 134 insertions(+), 167 deletions(-) diff --git a/admin/src/components/operation/OperCarUseBookParamWindow.vue b/admin/src/components/operation/OperCarUseBookParamWindow.vue index fddb479..5e67444 100644 --- a/admin/src/components/operation/OperCarUseBookParamWindow.vue +++ b/admin/src/components/operation/OperCarUseBookParamWindow.vue @@ -1,92 +1,40 @@ <template> - <GlobalWindow - :title="title" - width="1000px" - :visible.sync="visible" - :confirm-working="isWorking" - @confirm="confirm" - > + <GlobalWindow :title="title" width="1000px" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm"> <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" @change="changeType" style="width: 80px" :label="0">甯傚唴鐢ㄨ溅</el-radio> + <el-radio v-model="form.type" @change="changeType" style="width: 80px" :label="1">甯傚鐢ㄨ溅</el-radio> </el-form-item> <el-form-item label="閫夋嫨杞﹁締" prop="carId"> <el-select v-model="form.carId" @change="clearTime" placeholder="閫夋嫨杞﹁締"> - <el-option - v-for="item in carsList" - :key="item.id" - :label="item.code" - :value="item.id" - > + <el-option v-for="item in carsList" :key="item.id" :label="item.code" :value="item.id"> </el-option> </el-select> </el-form-item> <el-form-item label="鐢ㄨ溅鏃堕棿" prop="startTime"> - <div - v-if="form.startTime && form.endTime" - class="sel_btn text" - @click="openTime" - > + <div v-if="form.startTime && form.endTime" class="sel_btn text" @click="openTime"> {{ form.startTime }}-{{ form.endTime }} </div> <div v-else class="sel_btn" @click="openTime">閫夋嫨鏃堕棿</div> </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" - value-format="yyyy-MM-dd HH:mm:ss" - :picker-options="pickerOptions" - default-time="08:00:00" - type="datetime" - placeholder="閫夋嫨鏃ユ湡鏃堕棿" - /> - <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-date-picker v-if="form.type == '0'" :disabled="!form.startTime" v-model="form.planUseDate" + format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm" type="datetime" placeholder="閫夋嫨鏃ユ湡鏃堕棿" /> + <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" type="datetime" placeholder="閫夋嫨鏃ユ湡鏃堕棿" /> </el-form-item> <el-form-item label="鐩殑鍦�" prop="addr"> <el-input v-model="form.addr" placeholder="璇疯緭鍏ュ唴瀹�"></el-input> </el-form-item> <el-form-item label="涔樿溅浜哄憳" prop="memberIds"> - <el-select - v-model="form.memberIds" - multiple - filterable - placeholder="璇烽�夋嫨" - > - <el-option - v-for="item in memberList" - :key="item.id" - :label="item.name" - :value="item.id" - > + <el-select v-model="form.memberIds" multiple filterable placeholder="璇烽�夋嫨"> + <el-option v-for="item in memberList" :key="item.id" :label="item.name" :value="item.id"> </el-option> </el-select> </el-form-item> <el-form-item label="鐢ㄨ溅浜嬬敱" prop="content"> - <el-input - v-model="form.content" - type="textarea" - placeholder="璇疯緭鍏�" - :rows="4" - ></el-input> + <el-input v-model="form.content" type="textarea" placeholder="璇疯緭鍏�" :rows="4"></el-input> </el-form-item> </el-form> <div class="tip_wrap"> @@ -103,42 +51,25 @@ </div> <!-- 甯傚唴 --> - <el-dialog - title="閫夋嫨鐢ㄨ溅鏃堕棿" - :visible.sync="isShowTime" - append-to-body - width="640px" - > + <el-dialog title="閫夋嫨鐢ㄨ溅鏃堕棿" :visible.sync="isShowTime" append-to-body width="640px"> <el-form :model="form" ref="modalRef" class="el_form" :rules="rules"> <el-form-item label="鐢ㄨ溅鏃ユ湡" prop="dateDay"> - <el-date-picker - v-model="form.dateDay" - value-format="yyyy-MM-dd" - type="date" - placeholder="閫夋嫨鏃ユ湡" + <el-date-picker v-model="form.dateDay" value-format="yyyy-MM-dd" type="date" placeholder="閫夋嫨鏃ユ湡" :picker-options="{ disabledDate(time) { - return time.getTime() < Date.now() - 8.64e7; + return time.getTime() < Date.now() - 8.64e7 * 7; }, - }" - @change="seletedDate" - > + }" @change="seletedDate"> </el-date-picker> </el-form-item> <el-form-item label="鐢ㄨ溅鏃堕棿" prop="dateDay"> <div> <div class="time_list"> - <div - class="item" - :class="{ - disable: item.isUse == 1, - active: item.checked == '1', - hasSub: item.carUseBookId, - }" - @click="datetimeClick(item, i)" - v-for="(item, i) in timeList" - :key="i" - > + <div class="item" :class="{ + disable: item.pastFlag, + active: item.checked == '1', + hasSub: item.carUseBookId, + }" @click="datetimeClick(item, i)" v-for="(item, i) in timeList" :key="i"> {{ item.startHours }} - {{ item.endHours }} </div> </div> @@ -152,41 +83,25 @@ </div> </div> <span slot="footer" class="dialog-footer"> - <div>宸查�夋嫨锛歿{ selDatetime }}</div> + <div style="text-align: left;"> + <div>宸查�夋嫨锛歿{ selDatetime }}</div> + <div class="red">{{ selPastDatetime }}</div> + </div> <div class="btn" @click="subTime">纭鏃堕棿</div> </span> </el-dialog> <!-- 甯傚 --> - <el-dialog - title="閫夋嫨鐢ㄨ溅鏃堕棿" - :visible.sync="isShowShiwai" - append-to-body - width="600px" - :before-close="clearTime" - > + <el-dialog title="閫夋嫨鐢ㄨ溅鏃堕棿" :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:ss" - value-format="yyyy-MM-dd HH:mm:ss" - type="datetime" - :default-time="defaultTime" - :picker-options="pickerOptionsNow" - @change="seletedShiwaiDate(1)" - > + <el-date-picker v-model="form.startTime" format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm" + type="datetime" :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:ss" - value-format="yyyy-MM-dd HH:mm:ss" - type="datetime" - :default-time="defaultTime" - :picker-options="pickerOptions" - @change="seletedShiwaiDate" - > + <el-date-picker v-model="form.endTime" format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm" + type="datetime" :default-time="defaultTime" :picker-options="pickerOptions" @change="seletedShiwaiDate"> </el-date-picker> </el-form-item> </el-form> @@ -202,8 +117,7 @@ <span> {{ item.startTime.slice(5, 16) }}鑷硔{ item.endTime.slice(5, 16) - }}</span - > + }}</span> </div> <div class="line"> <span>鐩殑鍦�</span> @@ -226,22 +140,18 @@ <span slot="footer" class="dialog-footer"> <div>宸查�夋嫨锛歿{ selDatetime }}</div> - <div class="btn" :class="{disable: info && info.length > 0}" @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" - > + <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 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> @@ -257,10 +167,11 @@ </div> <div class="line"> <div class="label">鐢宠浜�</div> - <div class="value">{{ activeInfo.memberName }} <span class="primaryColor ml12">{{ activeInfo.memberPhone }}</span></div> + <div class="value">{{ activeInfo.memberName }} <span class="primaryColor ml12">{{ activeInfo.memberPhone + }}</span></div> </div> </div> - </el-dialog> + </el-dialog> </GlobalWindow> </template> @@ -277,7 +188,7 @@ name: 'OperCarUseBookParamWindow', extends: BaseOpera, components: { GlobalWindow }, - data () { + data() { return { // 琛ㄥ崟鏁版嵁 isShowTime: false, @@ -287,6 +198,7 @@ timeList: [], defaultTime: dayjs().format('HH:mm:ss'), selDatetime: '', + selPastDatetime: '', colorOptions: [ { color: this.$store.state.primaryColor, name: '宸查�夋嫨' }, { color: '#F7F7F7', name: '鍙绾�' }, @@ -334,7 +246,7 @@ }, pickerOptionsNow: { disabledDate: (time) => { - return time.getTime() < Date.now() - 8.64e7; + return time.getTime() < Date.now() - 8.64e7 * 7 } }, // 楠岃瘉瑙勫垯 @@ -353,23 +265,23 @@ 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 () { + // watch: { + // 'form.planUseDate': { + // handler (newValue, oldValue) { + // if (newValue) { + // this.$set(this.pickerOptions, 'selectableRange', this.form.startTime.slice(11, 16) + ' - ' + this.form.endTime.slice(11, 16)) + // // this.startPickerOptions = this.startPickerOptions + // } + // }, + // deep: true, + // immediate: true + // } + // }, + created() { this.initData() }, methods: { - open () { + open() { this.title = '鏂板缓鍏姟杞︾敤杞︾敵璇�' this.form = { type: 0, @@ -380,7 +292,7 @@ }) this.visible = true }, - confirm () { + confirm() { const form = JSON.parse(JSON.stringify(this.form)) this.$refs.formRef.validate((valid) => { const memberList = [] @@ -394,6 +306,9 @@ form.memberNames = memberList.map(i => i.name).join(',') form.memberList = memberList form.memberIds = form.memberIds.join(',') + form.startTime = form.startTime + ':00' + form.planUseDate = form.planUseDate + ':00' + form.endTime = form.endTime + ':59' if (valid) { carUseBookCraete({ ...form @@ -404,7 +319,7 @@ } }) }, - openTime () { + openTime() { const { form } = this if (!form.carId) { return this.$tip.error('璇峰厛閫夋嫨杞﹁締') @@ -419,7 +334,15 @@ this.isShowShiwai = true } }, - clearTime () { + changeType() { + this.$set(this.form, 'startTime', '') + this.$set(this.form, 'endTime', '') + this.$set(this.form, 'planUseDate', '') + this.$nextTick(() => { + this.$refs.formRef.clearValidate() + }) + }, + clearTime() { this.isShowShiwai = false this.$set(this.form, 'startTime', '') this.$set(this.form, 'endTime', '') @@ -429,17 +352,17 @@ } }) }, - subTime () { + 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) { return this.$tip.error('璇峰厛閫夋嫨鐢ㄨ溅鏃堕棿娈�') } - this.$set(this.form, 'startTime', selTimeList[0].startTime) - this.$set(this.form, 'endTime', selTimeList[selTimeList.length - 1].endTime) + this.$set(this.form, 'startTime', selTimeList[0].startTime.slice(0, 16)) + this.$set(this.form, 'endTime', selTimeList[selTimeList.length - 1].endTime.slice(0, 16)) this.isShowTime = false - this.$set(this.form, 'planUseDate', null) + this.$set(this.form, 'planUseDate', selTimeList[0].startTime.slice(0, 16)) this.$forceUpdate() } else { this.$refs.modalRef.validate((valid) => { @@ -447,11 +370,15 @@ if (new Date(form.startTime).getTime() > new Date(form.endTime).getTime()) { return this.$tip.error('缁撴潫鏃堕棿搴斿ぇ浜庡紑濮嬫椂闂�') } + this.$set(this.form, 'planUseDate', form.startTime) + this.$forceUpdate() this.isShowShiwai = false }) } + console.log('form', this.form) + }, - datetimeClick (item, index) { + datetimeClick(item, index) { if (item.carUseBookId) { detail( item.carUseBookId @@ -497,30 +424,37 @@ // console.log('selTimeList', selTimeList); if (selTimeLists.length === 0) { this.selDatetime = '' + this.selPastDatetime = '' } else { + let pastList = selTimeLists.filter(i => i.pastFlag) + if(pastList.length > 0){ + this.selPastDatetime = '褰撳墠閫夋嫨鍖呭惈宸茬粡杩囧幓鏃堕棿锛岃纭鍚庡啀鎻愪氦锛�' + }else{ + this.selPastDatetime = '' + } this.selDatetime = this.form.dateDay.slice(5) + ' ' + selTimeLists[0].startHours + '-' + selTimeLists[selTimeLists.length - 1].endHours } }, - seletedDate (e) { + seletedDate(e) { this.gettimes() }, - seletedShiwaiDate (str) { + seletedShiwaiDate(str) { const { form } = this - if(str && str == 1){ + if (str && str == 1) { this.$set(this.form, 'endTime', '') } if (form.startTime && form.endTime) { this.selDatetime = form.startTime + ' - ' + form.endTime carUseBookList({ carId: form.carId, - startTime: form.startTime, - endTime: form.endTime + startTime: form.startTime + ':00', + endTime: form.endTime + ':59' }).then(res => { this.info = res || [] }) } }, - gettimes () { + gettimes() { const { form } = this carCanReservationDate({ dateDay: form.dateDay, @@ -528,12 +462,14 @@ }).then(res => { this.timeList = res || [] this.timeList.forEach((i, j) => { + i.pastFlag = new Date().getTime() > new Date(i.startTime).getTime() i.checked = '0', i.index = j }) + }) }, - initData () { + initData() { getCarList({ type: 0 }).then(res => { @@ -553,14 +489,18 @@ <style scoped lang="scss"> @import "@/assets/style/variables.scss"; + div { box-sizing: border-box; } + .modal_wrap { display: flex; padding: 20px 0; + .el_form { flex: 1; + .sel_btn { width: 100%; height: 32px; @@ -574,25 +514,31 @@ box-sizing: border-box; cursor: pointer; } + .text { color: #606266; } } + .tip_wrap { flex: 1; margin-left: 30px; padding: 0 30px; + h1 { margin-bottom: 20px; } + div { line-height: 28px; } - } + } } + .time_list { display: flex; flex-wrap: wrap; + .item { margin-right: 8px; margin-bottom: 8px; @@ -609,28 +555,33 @@ border: #cccccc solid 1px; cursor: pointer; } - .active { - border-color: $primary-color; - background-color: #f6f9fe; - color: $primary-color; - } + + .disable { color: #fff; border-color: #cccccc; background-color: #cccccc; } + .active { + border-color: $primary-color; + background-color: #f6f9fe; + color: $primary-color; + } .hasSub { border-color: #bed6f9; background-color: #bed6f9; color: #fff; - } + } } + .color_op { display: flex; + .item { display: flex; align-items: center; margin-right: 10px; + .box { margin-right: 4px; width: 16px; @@ -638,10 +589,12 @@ } } } + .dialog-footer { display: flex; align-items: center; justify-content: space-between; + .btn { height: 42px; line-height: 42px; @@ -651,21 +604,26 @@ text-align: center; cursor: pointer; } - .disable{ + + .disable { background: #cccccc; } } + .have_info { padding: 0 0 60px; + .tit { color: #ed4545; margin: 20px 0 12px; } + .content { background: #f7f7f7; border-radius: 8px; padding: 15px 15px 5px; margin-bottom: 10px; + .card { margin-bottom: 15px; font-weight: 500; @@ -674,14 +632,17 @@ background: #f7f7f7; padding: 0; } + .line { display: flex; margin-bottom: 10px; + span { &:nth-of-type(1) { width: 80px; color: #888888; } + &:nth-of-type(2) { flex: 1; } @@ -689,26 +650,32 @@ } } } + .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; } -- Gitblit v1.9.3