基于elementui的年月日周时间控件

组件
<template>
	<div class="component_search_form_date clearfix">
		<el-radio-group v-model="curType" :size="moduleSize" style="float: left;" @change="radioChange">
			<el-radio-button v-for="item in showBtnList" :key="item.value" :label="item.value">{{ item.name }}</el-radio-button>
		</el-radio-group>
		&emsp;
		<div style="display: inline-block; float: left; margin-left: 5px;">
			<template v-if="dateType == 'daterange'">
				<!-- 日期 范围选择 -->
				<el-date-picker
					key="daterange"
					v-model="dataForm.rangeDate"
					type="daterange"
					value-format="yyyy-MM-dd HH:mm:ss"
					:picker-options="{ disabledDate: time => !(time.getTime() >= Date.now() - 31 * 8.64e7 && time.getTime() < Date.now() - 8.64e7) }"
					start-placeholder="开始日期"
					end-placeholder="结束日期"
					style="width: 240px;"
					@change="datePickerChage"
					:size="moduleSize"
				/>
			</template>
			<template v-else-if="dateType == 'weekrange'">
				<!-- 周 范围选择 -->
				<!-- <el-date-picker
					key="weekrange1"
					v-model="dataForm.dateStart"
					type="week"
					:picker-options="{ disabledDate: time => datePickerDisable(time, dataForm.dateEnd, '>='), 'firstDayOfWeek':1  }"
					value-format="yyyy-MM-dd"
					placeholder="选择周"
					format="yyyy 第 WW 周"
					style="width: 150px;"
					@change="datePickerChage"
					:size="moduleSize"
				/>
				-
				<el-date-picker
					key="weekrange2"
					v-model="dataForm.dateEnd"
					type="week"
					:picker-options="{ disabledDate: time => datePickerDisable(time, dataForm.dateStart, '<') || weekRangeNum(time, dataForm.dateStart), 'firstDayOfWeek':1  }"
					value-format="yyyy-MM-dd"
					placeholder="选择周"
					format="yyyy 第 WW 周"
					style="width: 150px;"
					@change="datePickerChage"
					:size="moduleSize"
				/> -->
				<el-date-picker
					key="weekrange1"
					v-model="weekValue1"
					type="week"
					:picker-options="{ disabledDate: time => datePickerDisable(time, weekValue2, '>='), 'firstDayOfWeek':1 }"
					value-format="yyyy-MM-dd"
					placeholder="选择周"
					format="yyyy 第 WW 周"
					style="width: 150px;"
					@change="weekRan"
					:size="moduleSize"
				/>
				-
				<el-date-picker
					key="weekrange2"
					v-model="weekValue2"
					type="week"
					:picker-options="{ disabledDate: time => datePickerDisable(time, weekValue1, '<') || weekRangeNum(time, dataForm.dateStart) , 'firstDayOfWeek':1 }"
					value-format="yyyy-MM-dd"
					placeholder="选择周"
					format="yyyy 第 WW 周"
					@change="weekRan"
					style="width: 150px;"
					:size="moduleSize"
				/>
			</template>
			
			<template v-else-if="dateType == 'monthrange'">
				<el-date-picker
					key="monthrange"
					v-model="dataForm.rangeDate"
					type="monthrange"
					placeholder="选择月度"
					:picker-options="{ disabledDate: time => monthDisableCheck(time), onPick: monthOnPick }"
					value-format="yyyy-MM-dd HH:mm:ss"
					start-placeholder="开始月度"
					end-placeholder="结束月度"
					format="yyyy 年 MM 月"
					style="width: 300px;"
					:size="moduleSize"
					@change="datePickerChage(1)"
				/>
			</template>

			<template v-else-if="dateType == 'yearrange'">
				<el-date-picker
					key="yearrange1"
					v-model="dataForm.dateStart"
					type="year"
					placeholder="选择年度"
					value-format="yyyy"
					format="yyyy 年"
					style="width: 120px;"
					@change="yearRan"
					:size="moduleSize"
				/>
				-
				<el-date-picker
					key="dateEnd"
					v-model="dataForm.dateEnd"
					type="year"
					placeholder="选择年度"
					value-format="yyyy"
					format="yyyy 年"
					style="width: 120px;"
					@change="yearRan"
					:size="moduleSize"
				/>
			</template>
		</div>
	</div>
</template>

<script>
import cloneDeep from 'lodash/cloneDeep'
export default {
	name: 'search-form-date',
	model: {
		prop: 'curData',
		event: 'change'
	},
	props: {
		curData: { required: true, type: Object } /* v-modal 绑定数据... */,
		isHistory: { type: Boolean, default: true } /* 是否可以选择未来时间 */,
		noList: { type: Array, default: () => [] } /* 选择不展示的列表数据 */,
		outObj: { type: Object, default: () => ({ s: 'start', e: 'end', t: 'type' }) } /*, 输出模块字段定义 */,
		moduleSize: { type: String, default: '--' }
	},
	data() {
		var now = new Date();
		return {
			btnList: [
				{ value: 1, name: '按日', dateType: 'daterange' },
				{ value: 2, name: '按周', dateType: 'weekrange' },

				{ value: 3, name: '按月', dateType: 'monthrange' },
				{ value: 4, name: '按年', dateType: 'yearrange' },
				// { value: 5, name: '季度', dateType: 'quarrange' },
				// { value: 6, name: '半年', dateType: 'halfrange' }
			],
			curType: 1,
			weekValue1:'',
			weekValue2:'',
			dateType: '',
			monthDisableDate: {},
			dataForm: {
				date: '',
				rangeDate: [],
				dateStart:'',
				dateEnd:'',
			}
		};
	},
	watch: {
		curType: {
			immediate: true,
			handler(newVal, oldVal){
				if (newVal == 1) this.dateType = `daterange`;
				else if (newVal == 2) this.dateType = `weekrange`;
				else if (newVal == 3) this.dateType = `monthrange`;
				else if (newVal == 4) this.dateType = `yearrange`;
			}
		},

		curData: {
			immediate: true,
			handler(newVal, oldVal){
				// 外部入参处理
				if( Object.keys(newVal).length != 0) {
					if (newVal.type)  this.curType = newVal.type
					if(newVal.dateRange && newVal.dateRange.beginTime){
						this.dataForm.rangeDate = [newVal.dateRange.beginTime, newVal.dateRange.endTime] 
					}else{
						let data={}
						var currentDateStamp = new Date().getTime();
						var date = new Date(currentDateStamp-86400000*7); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
						let Y = date.getFullYear() + '-';
						let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
						let D = date.getDate() + ' ';

						var date2 = new Date(currentDateStamp-86400000*1); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
						let Y2 = date2.getFullYear() + '-';
						let M2 = (date2.getMonth() + 1 < 10 ? '0' + (date2.getMonth() + 1) : date2.getMonth() + 1) + '-';
						let D2 = date2.getDate() + ' ';
						var start = Y + M + D +'00:'+'00:'+'00'
						var end = Y2 + M2 + D2 +'23:'+'59:'+'59'
						this.dataForm.rangeDate = [start + '',end + ''] 
						this.curData.dateRange.beginTime=start + ''
						this.curData.dateRange.endTime=end + ''
					}
				}
			}
		}
	},
	computed: {
		showBtnList: {
			get(){
				return this.btnList.filter(e => !this.noList.includes(+e.value))
			},
			set(val){
				this.curType = val[0]['value']
			}
		},
	},
	mounted() {
	},
	created(){
		this.changeTimeType();
	},
	methods: {
		changeTimeType(){
			let data={}
			var currentDateStamp = new Date().getTime();
			// if(curType=1){
			data = {start:this.timestampToTime(currentDateStamp-86400000*15),end:this.timestampToTime(currentDateStamp-86400000*1)}
			this.dataForm.start = data.start;
			this.dataForm.end = data.end;
			var returnData={
				cType:1,
				beginTime:data.start,
				endTime:data.end,
			}
			
			this.curData.dateRange.beginTime=data.start
			this.curData.dateRange.endTime=data.end
			this.dataForm.rangeDate = [ this.curData.dateRange.beginTime ,this.curData.dateRange.endTime] 
			this.$emit('child',returnData)
		},
		clear() {
			this.dataForm = cloneDeep(this.$options.data().dataForm);

			this.$emit('change', { type: this.curType, dateRange: null });
		},
		timestampToTime(timestamp) {
  			var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
			let Y = date.getFullYear() + '-';
			let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
			let D = date.getDate() + ' ';
			return Y + M + D+''+'00:'+'00:'+'00';
		},
		weekRan(){
			let data={}
			if(this.weekValue1) data.start =this.getFirstDayOfWeek2(new Date(this.weekValue1))
			if(this.weekValue2) data.end = this.getFirstDayOfWeek1(new Date(this.weekValue2))
			  var returnData={
				cType:2,
				beginTime:data.start,
				endTime:data.end,
			  }
			  if(data.start && data.end){
			  		this.$emit('child',returnData);
			  }

		},
		//type为字符串类型,有两种选择,"s"代表开始,"e"代表结束,dates为数字类型,不传或0代表本周,-1代表上周,1代表下周
		getweeks(type, dates) {
			var now = new Date();
			var nowTime = now.getTime();
			var day = now.getDay();
			var longTime = 24 * 60 * 60 * 1000;
			var n = longTime * 7 * (dates || 0);
			if (type == "s") {
				var dd = nowTime - (day - 2) * longTime + n;
			};
			if (type == "e") {
				var dd = nowTime + (7 - day) * longTime + n;
			};
			dd = new Date(dd);
			var y = dd.getFullYear();
			var m = dd.getMonth() + 1;
			var d = dd.getDate();
			m = m < 10 ? "0" + m: m;
			d = d < 10 ? "0" + d: d;
			var day = y + "-" + m + "-" + d;
			return day;
},
		yearRan(){
			console.log(this.dataForm.dateStart,9997)
			console.log(this.dataForm.dateEnd,9999)
			  var returnData={
				cType:4,
				beginTime:this.dataForm.dateStart+'-01-01 00:00:00',
				endTime:this.dataForm.dateEnd + '-12-31 23:59:59',
			  }
			  if(this.dataForm.dateEnd && this.dataForm.dateStart){
			  		this.$emit('child',returnData);
			  }
		},

		/* 12周数量限制 */
		weekRangeNum(time, date) {
			if (!date) return false;
			if (time.getTime() > new Date(date).getTime() + 8.64e7 * 85) return true;
			return false;
		},
		/* start使用  >=;   end  < */
		/* 参数中不应用 >= 或 < 符号. 应用参数传入的位置不同来控制参数 */
		datePickerDisable(time, date, com = '>=') {
			if (this.isHistory && time.getTime() > Date.now()) return true;
			if(com=='>=') {
				// 开始周
			}
			if (date) {
				if(com=='>=') {
					// 开始周
					let endDate = this.getFirstDayOfWeek1(new Date(date))
					return eval(`${time.getTime()} ${com} ${new Date(endDate).getTime()}`);
				}else {
					// 结束周
					let startDate = this.getFirstDayOfWeek2(new Date(date))
					return eval(`${time.getTime()} ${com} ${new Date(startDate).getTime()}`);
				}
			} 
			return false;
		},
		outMonth() {
			var { monthDateS = 1, monthDateE } = this.dataForm;
			var mOptions = { 1: '01-01', 2: '04-01', 3: '07-01', 4: '10-01' },
				mEndOptions = { 1: '03-31', 2: '06-30', 3: '06-30', 4: '12-31' },
				yOptions = { 1: '01-01', 2: '07-01' },
				yEndOptions = { 1: '06-30', 2: '12-31' };
			var s, e;

			if (!monthDateS) monthDateS = 1;

			return { s, e };
		},
		datePickerChage(int) {
			/* 当前数据变化 */
			var data = {};
			var cType = this.curType;
			var { date = '', dateStart = '', dateEnd = '', rangeDate = [], monthDateS, monthDateE } = this.dataForm;
			var monthDate = this.outMonth();

			/* 准备重构数据整合............  可复用性高. */
			/* 1: 单日,2: 单周,3: 年度,4: 月度,99: 自定义 */
			/* 判断是否是范围选择 */
			if (cType == 1 && rangeDate) {
				data = { start: rangeDate[0], end: rangeDate[1] };
			} else if (cType == 2) {
				if (dateStart) data.start = this.getFirstDayOfWeek(new Date(dateStart));
				if (dateEnd) data.end = this.getFirstDayOfWeek(new Date(dateEnd));
				// data = { start: dateStart, end: dateEnd };
			} else if (cType == 4) {
				if (dateStart) data.start = `${dateStart}-01-01 00:00:00`
				if (dateEnd) data.end = `${dateEnd}-01-01 00:00:00`
			} else if (cType == 3 && rangeDate) {
			
				if(int){
					var mon = rangeDate[1].slice(5,7)
					var year = rangeDate[1].slice(0,4)
					var lastDay= new Date(year,mon,0).getDate()
				console.log(rangeDate[1]	,"222222222222222222");
					rangeDate[1]=year+'-'+mon+'-'+lastDay+' 00:00:00'
					console.log(rangeDate[1]	,"222222222222222222");
				}

				data = { start: rangeDate[0], end: rangeDate[1] };
				
			} 
			var outData = {
				...this.curData,
				dateRange: { beginTime: data.start, endTime: data.end }
	  };
	  var returnData={
		  cType:this.curType,
		  beginTime:data.start,
		  endTime:data.end,
	  }
      this.dataForm.dateStart = data.start
      this.dataForm.dateEnd = data.end
			
			if (data.start && data.end) this.$emit('searchFinish', outData);
			this.$emit('change', outData);
			this.$emit('child',returnData);
			
		},
		monthDisableCheck(time) {
			if (this.isHistory && time.getTime() > Date.now()) return true;
			var { minDate } = this.monthDisableDate
			if (minDate) {
				var cur = new Date(minDate).getTime()
				var timeN = time.getTime()
				
				var month12 = 365 * 8.64e7;
				if (cur - month12 + 31 * 8.64e7 >= timeN) return true
				else if (cur + month12 - 30 * 8.64e7 < timeN) return true
			}
			
			return false;
		},
		getFirstDayOfWeek(date) {
		    var day = date.getDay() || 7;
		    var out = new Date(date.getFullYear(), date.getMonth(), date.getDate() +1 - day);
			return `${out.getFullYear()}-${out.getMonth() + 1}-${out.getDate()} 00:00:00`
		},
		getFirstDayOfWeek1(date){
			var day = date.getDay() || 7 ;
			var out = new Date(date.getFullYear(),date.getMonth(),date.getDate()+7-day);
			return `${out.getFullYear()}-${out.getMonth() + 1}-${out.getDate()} 00:00:00` 
		},
		getFirstDayOfWeek2(date){
			var day = date.getDay() || 7 ;
			var out = new Date(date.getFullYear(),date.getMonth(),date.getDate()-1);
			return `${out.getFullYear()}-${out.getMonth() + 1}-${out.getDate()} 00:00:00` 
		},
		getFirstDayOfWeek3(date){
			var day = date.getDay() || 7 ;
			var out = new Date(date.getFullYear(),date.getMonth(),date.getDate()+7-day);
			return `${out.getFullYear()}-${out.getMonth() + 2}-${out.getDate()} 00:00:00` 
		},
		getFirstDayOfWeek4(date){
			var day = date.getDay() || 7 ;
			var out = new Date(date.getFullYear(),date.getMonth(),date.getDate()-1);
			return `${out.getFullYear()}-${out.getMonth() + 2}-${out.getDate()} 00:00:00` 
		},
		getFirstDayOfWeek5(date) {
		    var day = 7;
		    var out = new Date(date.getFullYear(), date.getMonth(), date.getDate() +1 - day);
			return `${out.getFullYear()}-${out.getMonth() + 1}-${out.getDate()} 00:00:00`
		},
		monthOnPick(date) {
			if (!date.mxaDate) this.monthDisableDate = date
			else this.monthDisableDate = {}
		},
		reset(){
			this.curType=1;
			this.changeTimeType(); 
			this.curData.dateRange.beginTime=this.dataForm.start + '';
			this.curData.dateRange.endTime=this.dataForm.end + '';

		},
		//获取本周
		getWeekDays(date){
			let firstDay=new Date(date.getFullYear(),0,1)
			let dayOfWeek=firstDay.getDay()
			let spendDay=1
			if(dayOfWeek!=0){
				spendDay=7-dayOfWeek+1
			}
			firstDay=new Date(val.getFullYear(),0,1+spendDay)
			let d=Math.ceil((val.valueOf()-firstDay.valueOf())/86400000)
			let result=Math.ceil(d/7)
			let year = val.getFullYear()
			let week =result+2
			return year+'第'+week+'周'			
		},
		//获取本月

		/* 单选change */
		radioChange() {
			this.dataForm.rangeDate=[]
			let data={}
				// var date=new Date()
				var date=new Date()
				var nowTime=date.getTime();
				var day=date.getTime()||7;
				var y=date.getFullYear()
				var m=date.getMonth()+1
				var d=date.getDate()
				var week= y+'-'+m+'-'+d+' '+'00'+':'+'00'+':'+'00'
				var monthStart=y+'-'+m+'-'+'01'+' '+'00'+':'+'00'+':'+'00'
				var monthEnd=y+'-'+m+'-'+d+' '+'00'+':'+'00'+':'+'00'
		
			if(this.curType==1){
				this.changeTimeType()
			}else if(this.curType==2){
				this.weekValue1=this.getweeks("s",-1),
				this.weekValue2=this.getweeks("e",-1),
				this.weekRan()
			}else if(this.curType==3){
				// data.start =monthStart
				// data.end = monthEnd
				this.dataForm.rangeDate[0]=monthStart;
				this.dataForm.rangeDate[1]=monthEnd
				this.datePickerChage()
			}else if(this.curType==4){
				this.dataForm.dateStart=y+''
				this.dataForm.dateEnd=y+''
				this.yearRan()
			}
			this.$emit('change', { ...this.curData, [this.outObj.t]: this.curType })
			// this.clear()
		}
	}
};
</script>

<style lang="scss">
.el-select .el-input {
	width: 100% !important;
}
</style>

使用
<template>
	<div>
	<SearchFormDate
          :curData="curData"
          ref="resetCommon"
          @child="child"
        ></SearchFormDate>
	</div>
</template>
<script>
import SearchFormDate from "@/components/SearchFormDate";
export default {
  components: {
    SearchFormDate,
  },
  data() {
  return {
  	curData: {
        type: 1,
        dateRange: {
          beginTime: "",
          endTime: "",
        },
      },
      params: {
        queryType: 1,
        startDate: "",
        endDate: "",
      },
  }
  },
  methods: {
  child(objArgu, weekTime) {
      this.objArgu = objArgu;
      this.params.queryType = objArgu.cType;
      this.params.startDate = objArgu.beginTime;
      this.params.endDate = objArgu.endTime;
      this.weekTime = weekTime;
      this.getDataList();
    },
 }
  }
</script>

原文地址:https://blog.csdn.net/qq_42882723/article/details/116206876

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


el-menu 有个属性 :default-active="curActive"  el-menu-item有个属性:index=“home”这2个属性值对上号就自动定位了data(){ return{ curActive:"home" }; },
基础用法1<el-inputv-model="input1"palcehoder="请输入"></el-input>23varMain={4data(){5return{6input1:''7}8}9}10varCtor=Vue.extend(Main)11newCtor().$mount('#app&#03
 1.安装element-uinpminstallelement-ui-S 2.在main.js中importElementUIfrom'element-ui'import'element-ui/libheme-chalk/index.css'Vue.use(ElementUI)注意index.css的路径不要出错:在node_modules文件夹里node_modules\element-ui\lib\theme-c
layout布局通过基础的24分栏,可进行快速布局基础布局使用单一分栏创建基础的栅格布局,通过span属性指定每栏的大小<el-col:span="8"></el-col>1<el-row>2<el-col:span="8"><divclass="grid-contentbg-purple"></div>&
 今天做一个选择年份的功能,直接调用了ElementUI里面的DatePicker组件,官网上有该组件的用法介绍,讲得很清楚。 我的代码: 官网说明: 奇怪的事情发生了,我明明按照例子写了  value-format="yyyy" 可是获得的值却一直还是Date对象 仔细检查后,我突然发现我的v-model
  that.end 即为结束日期
vueelementUitree懒加载使用详情2018年11月21日11:17:04开心大表哥阅读数:3513 https://blog.csdn.net/a419419/article/details/84315751 背景:vue下使用elementUI文档:http://element-cn.eleme.io/#/zh-CN/componentree#tree-shu-xing-kong-jian需求:只保存二
环境搭建说明:1、全局安装angluar脚手架npminstall-g@angular/cli2、初始化项目(支持scss)ngnew项目名称--style=scss//进入项目cd项目名称运行代码可以是:serve或者npminstall(安装依赖)npmstart(运行)3、安装elementnpm
1、在写埋点监控项目的时候,需求是表格里面的数据后台传递过来为0,但是要求显示的时候为—,在elementUI判断,将prop去掉在下面加上<templateslot-scope="scope"><emplate>里面在写vue的判断,因为通过Scopedslot可以获取到row,column,$index和store(table内容的状态管理)的数据。2、
<el-table-columnprop="pubArea"//表格data中对应的字段column-key="pubArea"//过滤条件变化时根据此key判断是哪个表头的过滤label="报修类型"align="center"width=
1.npminstallbabel-plugin-component-D   然后.babelrc替换plugins 文件就在根目录下  2.组件中英文及自定义中英文importVueI18nfrom'vue-i18n'importenLocalefrom'element-ui/lib/locale/lang/en'importzhLocalefrom'element-ui/lib/locale/lang/zh-C
 <el-treeref="tree":data="menu.treeData":props="menu.defaultProps":filter-node-method="filterNode":expand-on-click-node=&quot
2019独角兽企业重金招聘Python工程师标准>>>使用vue+elementui的tree组件,elementui官网elementui的tree组件问题描述:tree层级过多时左右不可滚动问题解决:修改overflow属性值.el-tree-node>.el-tree-node_children{overflow:visible;} 其他相关链接:css--ov
首先elementUI的导航栏中的选中项的高亮显示时的字体颜色可以在属性中设置,但是高亮时的背景颜色不能设置,所以要自己修改高亮的背景颜色.el-menu-item.is-active{background-color:#00b4aa!important;} 在使用elementUI构建vue项目的时候会遇到页面刷新的时候子路由会保
1.首先创建Vue项目(使用vue-cli进行创建)创建项目文章指导地址: https://blog.csdn.net/assiduous_me/article/details/892086492.ElementUI:一套为开发者、设计师和产品经理准备的基于Vue2.0的桌面端组件库 链接地址:http://element.eleme.io/#/zh-CN3.正式开
使用vue开发项目,用到elementUI,根据官网的写法,我们可以自定义主题来适应我们的项目要求,下面来介绍一下两种方法实现的具体步骤,(可以参考官方文档自定义主题官方文档),先说项目中没有使用scss编写,用主题工具的方法(使用的较多)第一种方法:使用命令行主题工具使用vue-cli安装完项目并引
每页显示的序号都是一样的:<el-table:data="tableData"highlight-current-row@current-change="handleCurrentChange"><el-table-columntype="index"width="50"></el-table-column><el-table>根据
  记录一下自己踩的坑,控制element内的table的某列显示隐藏不能用v-show,而是要用v-if具体网上百度了,看一下v-show和v-if的区别吧猜测:由于el-table-column会生成多行标签元素,根据v-show是不支持template语法的,推断v-show不能显示隐藏多个元素 
样式重置单vue文件中重置全局重置多写一个style不加scrop,可能会影响全局样式待补充table单价数量小计3252?在ElementUI中,我需要获取row内的数据并进行计算,需要用到v-slot<el-table-columnlabel="小计"><templatev-slot="scope">{{scop
工作需要做一个带滑块效果的导航栏,初步想法是用element的导航组件去做,后面摸坑结合各位大佬的博客初步实现效果,话不多说,直接上代码,记录一下爬坑之旅1<template>2<divclass="y-nav">3<el-rowclass="nav">4<el-menu5:default-active="$route.