Mixins:Element-ui日期时间禁用 最强封装 datePicker、datetimePicker。 picker-options=“minxins函数“ 。

Element-ui datePicker与datetimePicker时间禁用,搭配dayjs使用。

适用各种场景。

各种使用场景

	例如:type="date"  type="dateTime" 均可直接使用。
		一:时间段选择:
			A1:只能选择“当前”日期之前(或之后)某一段时间
			A2:任意选择某一段时间
		二:时间点选择:
			B1:只能选择“当前”日期之前(或之后)的时间
			B2:只能选择“自定义的”日期之前(或之后)的时间
		
		*说明:对 type=datetime  的时分秒 未做具体禁用。*

mixins代码块

import dayjs from 'dayjs';
export default {
	data(){
		return{
			todayStart:dayjs().format("YYYY-MM-DD 00:00:00"),
			todayEnd:dayjs().format("YYYY-MM-DD 23:59:59"),
			yesterdayEnd:dayjs().subtract(1,"day").format("YYYY-MM-DD 23:59:59")
		}
	},
	methods:{
		// 超强type="date" type="datetime"禁用函数:  可同天、可今天、需配合下一个方法 endDatePicker 使用
		/* 参数:1:endTime   传入结束时间   
				2:type      1 禁用当前时间之前, 2 禁用当前时间之后, 3 不禁用,可选任意时间段[today参数不起作用]
				3: today:    true/false 是否可选今天(默认可选) */
		startDatePicker(endTime,type,today=true) {
			let endDayEnd = dayjs(endTime).format("YYYY-MM-DD 23:59:59");
			return {
				disabledDate:(time)=> {
					if(type == 1){ // 禁用之前
						if(endTime){
							return time.getTime() > new Date(endDayEnd).getTime() || time.getTime() < new Date(today?this.todayStart:this.todayEnd).getTime();
						}else{
							return time.getTime() < new Date(today?this.todayStart:this.todayEnd).getTime();
						}
					}else if(type==2){ // 禁用之后
						if (endTime) { 
							return time.getTime() > new Date(endDayEnd).getTime() || time.getTime() > new Date(today?this.todayEnd:this.yesterdayEnd).getTime();
						} else {
							return time.getTime() > new Date(today?this.todayEnd:this.yesterdayEnd).getTime();
						}
					}else if(type ==3){ // 不禁用前后选任意时间段
						if (endTime){
							return time.getTime() > new Date(endDayEnd).getTime();
						}
					}
				}
			}
		},
		// 参数:同 startDatePicker 对应传入开始时间 startTime
		endDatePicker(startTime,type,today=true) {
			let startDayStart = dayjs(startTime).format("YYYY-MM-DD 00:00:00");
			return {
				disabledDate:(time)=> {
					if(type == 1){
						if (startTime) { // 禁用之前
							return time.getTime() < new Date(startDayStart).getTime() || time.getTime() < new Date(today?this.todayStart:this.todayEnd).getTime();
						} else {
							return time.getTime() < new Date(today?this.todayStart:this.todayEnd).getTime();
						}
					}else if(type==2){
						if (startTime) {  // 禁用之后
							return time.getTime() < new Date(startDayStart).getTime() || time.getTime() > new Date(today?this.todayEnd:this.yesterdayEnd).getTime();
						} else {
							return time.getTime() > new Date(today?this.todayEnd:this.yesterdayEnd).getTime();
						}
					}else if(type ==3){ // 不禁用前后选任意时间段
						if (startTime){
							return time.getTime() < new Date(startDayStart).getTime();
						}
					}
				}
			}
		},
		// 超强禁用 某个时间 之前||之后
		/* 参数:1:chooseTime   传入某个时间(传null默认今天)   
				2:type      1 禁用传入时间之前, 2 禁用传入时间之后
				3: today:    true/false 是否禁用选择时间 (默认不禁用) */
		chooseDatePicker(chooseTime,type,today=true){
			let chooseDayStart = dayjs(chooseTime).format("YYYY-MM-DD 00:00:00");
			let chooseDayEnd = dayjs(chooseTime).format("YYYY-MM-DD 23:59:59");
			let chooseYesterdayEnd = dayjs(chooseTime).subtract(1,"day").format("YYYY-MM-DD 23:59:59");
			let chooseTomorrowStart = dayjs(chooseTime).add(1,"day").format("YYYY-MM-DD 00:00:00");
			return {
				disabledDate:(time)=>{
					if(type ==1){ // 禁用之前
						if(today){ // 包含今天 || 包含选择时间
							return time.getTime() <  new Date(chooseTime?chooseDayStart:this.todayStart).getTime();
						}else{
							return time.getTime() < new Date(chooseTime?chooseTomorrowStart:this.todayEnd).getTime();
						}
					}else if(type==2){  // 禁用之后
						if(today){ // 包含今天 || 包含选择时间
							return time.getTime() >  new Date(chooseTime?chooseDayEnd:this.todayEnd).getTime();
						}else{
							return time.getTime() >  new Date(chooseTime?chooseYesterdayEnd:this.yesterdayEnd).getTime();
						}
					}
				}
			}
		},
	}
}

具体使用

首先引入注册mixins:
import disabledDate from ‘@/mixins/disabledDate’;
mixins:[disabledDate],
在这里插入图片描述
配置好过后就可以在VUE文件里面直接使用啦!!!!!!!

配置好mixins后日期选择组件的使用

用例一:datePicker(日期禁用)

时间段在两个datePicker开始函数与结束函数配合使用:

	<el-date-picker :picker-options="startDatePicker(endTime,1,true)" 
	 v-model="beginTime" type="date"  
	 value-format="yyyy-MM-dd" format="yyyy-MM-dd" placeholder="选择开始时间"/> 
       
	<el-date-picker :picker-options="endDatePicker(beginTime,1,true)" 
	 v-model="endTime" type="date"  
	 value-format="yyyy-MM-dd" format="yyyy-MM-dd" placeholder="选择结束时间"/>
用例二:dateTimePicker (日期时间选择禁用)

时间段在两个datePicker开始函数与结束函数配合使用:

    <el-date-picker
      :picker-options="startDateTimeFull(endTime,2,true)" 
      v-model="startTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"  
      format="yyyy-MM-dd HH:mm:ss" placeholder="选择开始时间"/>    
       
    <el-date-picker :picker-options="endDatePicker(startTime,2,true)" 
      v-model="endTime" type="datetime"  
      value-format="yyyy-MM-dd HH:mm:ss" default-time="23:59:59"
      format="yyyy-MM-dd HH:mm:ss" placeholder="选择结束时间"/>
用例三:HTML组件实例代码 (单个时间节点前后前后)
	<el-date-picker :picker-options="chooseDatePicker(chooseTime,1,false)" 
	    v-model="formS.showTime" type="daterange"  
	    value-format="yyyy-MM-dd" format="yyyy-MM-dd" placeholder="选择时间"/> 
      //注意:chooseTime传 null 则默认今天
有问题联系作者 QQ:505005519@qq.com
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Vue-element-admin 是一个基于 Vue.jsElement UI 的后台管理系统解决方案,它提供了一些常用的封装组件和工具函数,使得开发者可以快速地构建出一个功能完善、美观易用的后台管理系统。 在 Vue-element-admin 中,封装字典的方法是通过一个名为 `DictMixin` 的 mixin 实现的。这个 mixin 提供了一些常用的字典操作方法,包括获取字典列表、获取字典项、添加字典项、编辑字典项和删除字典项等。 具体实现方法如下: 1. 在 `src/mixins/dict.js` 文件中定义 `DictMixin`: ```javascript export default { data() { return { dictList: [] // 存储字典列表 }; }, methods: { // 获取字典列表 async getDictList() { const { data } = await this.$http.get('/dict'); this.dictList = data; }, // 获取字典项 getDictItem(dictType, dictValue) { const dict = this.dictList.find(dict => dict.dictType === dictType); if (dict) { const item = dict.dictItems.find(item => item.dictValue === dictValue); if (item) { return item.dictLabel; } } return ''; }, // 添加字典项 async addDictItem(dictType, dictItem) { const dict = this.dictList.find(dict => dict.dictType === dictType); if (dict) { dict.dictItems.push(dictItem); await this.$http.put(`/dict/${dict.id}`, dict); } }, // 编辑字典项 async editDictItem(dictType, dictItem) { const dict = this.dictList.find(dict => dict.dictType === dictType); if (dict) { const item = dict.dictItems.find(item => item.dictValue === dictItem.dictValue); if (item) { Object.assign(item, dictItem); await this.$http.put(`/dict/${dict.id}`, dict); } } }, // 删除字典项 async deleteDictItem(dictType, dictValue) { const dict = this.dictList.find(dict => dict.dictType === dictType); if (dict) { const index = dict.dictItems.findIndex(item => item.dictValue === dictValue); if (index >= 0) { dict.dictItems.splice(index, 1); await this.$http.put(`/dict/${dict.id}`, dict); } } } } }; ``` 2. 在需要使用字典的组件中引入 `DictMixin`: ```javascript import DictMixin from '@/mixins/dict'; export default { mixins: [DictMixin], mounted() { this.getDictList(); }, methods: { // 使用字典项 handleUseDict(dictType, dictValue) { const dictLabel = this.getDictItem(dictType, dictValue); // ... }, // 添加字典项 async handleAddDictItem(dictType, dictItem) { await this.addDictItem(dictType, dictItem); this.getDictList(); }, // 编辑字典项 async handleEditDictItem(dictType, dictItem) { await this.editDictItem(dictType, dictItem); this.getDictList(); }, // 删除字典项 async handleDeleteDictItem(dictType, dictValue) { await this.deleteDictItem(dictType, dictValue); this.getDictList(); } } }; ``` 这样,就可以在组件中方便地使用字典,并且可以通过调用 mixin 中提供的方法来实现对字典的增删改操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值