nutui中的datepicker组件应用了之后就必须选一个工夫,有时候,咱们心愿的是抉择空,代表抉择所有的工夫,这个组件仿佛没提供这个性能(如果我错了,感激斧正),所以应用了nutui中的picker组件本人做了一个工夫选择器
组件调用办法 只写了点简略的内容,按钮点击唤醒抉择弹窗没写
<com-date-picker :is-visible="datePicker.visible" title="请抉择日期" @close="datePicker.visible = false" @confirm="dateConfirm"></com-date-picker>-----data () { return { form: { date: '', }, // 工夫抉择 datePicker: { visible: false }, }},methods: { search () { // 申请逻辑--- }, // 工夫选择器 dateConfirm (data) { this.form.date = data; this.search(); // 申请数据 },}
组件
<!-- 公共工夫选择器 --><template> <nut-picker class="com-date-picker" :is-visible="isVisible" :list-data="list" :title="title" :default-value-data="defaultValue" @choose="change" @close="close" @confirm="confirm"> </nut-picker></template><script>export default { name: 'comDatePicker', data () { return { timer: null, // 是否是默认值扭转,默认值扭转会默认调用confirm对应办法 defaultTimer: null, list: [ // [ // {label: 2020, value: '2020年'}, // {label: 2019, value: '2019年'}, // {label: 2018, value: '2018年'}, // ], // [ // {label: 1, value: '1月'}, // {label: 2, value: '2月'}, // {label: 3, value: '3月'}, // {label: 4, value: '4月'}, // ], // [ // {label: 1, value: '1日'}, // {label: 2, value: '2日'}, // {label: 3, value: '3日'}, // {label: 4, value: '4日'}, // ] ], defaultValue: [], // 默认值 } }, props: { // 显隐 isVisible: { default: false }, // 题目 title: { default: '' }, // 1-year/2-month/3-day type: { default: 3 }, // 开始工夫 startDate: { default: '2000-01-01' }, // 完结工夫 endDate: { default: new Date().toLocaleDateString() }, // 默认值 default: { default: '' }, // 是否显示中文 isShowChinese: { default: true }, // 所有的文本 allText: { default: '默认' }, }, watch: { default (val) { this.setValue(val); // 设置默认值 } }, created () { this.setDateList(0, this.default); // 设置工夫列表 this.setValue(this.default); // 设置默认值 }, mounted () { }, methods: { // 设置默认值 setValue (sdate) { var res = []; if (sdate) { sdate = typeof sdate == 'number' ? '' + sdate : sdate; var arr = sdate.split('-'); var year = arr[0], month = '', day = ''; if (arr[1]) { month = arr[1]; if (arr[2] && arr[2] <= new Date(year, month, 0).getDate()) { day = arr[2]; } } // 年 if (this.type >= 1 && this.list.length > 0) { for (var i = 0; i < this.list[0].length; i++) { var item = this.list[0][i]; if (item.label == year) { res[0] = item; break; } } } // 月 if (this.type >= 2 && this.list.length > 1) { for (var i = 0; i < this.list[1].length; i++) { var item = this.list[1][i]; if (item.label == month) { res[1] = item; break; } } } // 日 if (this.type >= 3 && this.list.length > 2) { for (var i = 0; i < this.list[2].length; i++) { var item = this.list[2][i]; if (item.label == day) { res[2] = item; break; } } } } clearInterval(this.defaultTimer); this.defaultTimer = setTimeout(() => { this.defaultTimer = null; }, 200); this.defaultValue = res; }, // 顺次返回this、扭转的列数,扭转值,以后选中值 change (target, index, value, choise) { clearTimeout(this.timer); this.timer = setTimeout(() => { var type = index+1; var date = this.getChoise(choise); this.setDateList(type, date); this.setValue(date); }, 50); }, close () { this.$emit('close'); }, confirm (choise) { if (this.defaultTimer) { return; } var date = this.getChoise(choise); this.$emit('confirm', date); }, // 设置工夫列表 // type 1年扭转、2月扭转、3日扭转 setDateList (type, date) { type = type || 0; var y = '', m = '', d = ''; if (date) { var arr = date.split('-'); y = arr[0]; m = arr[1] ? arr[1] : ''; d = arr[2] ? arr[2] : ''; } var startDate = new Date(this.startDate), endDate = new Date(this.endDate); var startY = startDate.getFullYear(), startM = startDate.getMonth() + 1, startD = startDate.getDate(), startT = startDate.getTime(), endY = endDate.getFullYear(), endM = endDate.getMonth() + 1, endD = endDate.getDate(), endT = endDate.getTime(); var aYear = [ {label: '', value: this.allText} ]; var aMonth = [ {label: '', value: this.allText} ]; var aDay = [ {label: '', value:this.allText} ]; if (startT <= endT) { // 年 for (i = startY; i <= endY; i++) { aYear.push({ label: i, value: i + (this.isShowChinese ? '年' : '') }); } // 月 if (y && type <= 1 && this.type >= 2) { var minM = 1, maxM = 12; if (startY == endY) { minM = startM; } if (y == endY) { maxM = endM; } for (var i = minM; i <= maxM; i++) { aMonth.push({ label: i, value: i + (this.isShowChinese ? '月' : '') }) } } // 日 if (m && type <= 2 && this.type >= 3) { var minD = 1, maxD = 30; if (startY == endY && startM == endM) { minD = startD; } if (y == endY && m == endM) { maxD = endD; } else { maxD = new Date(y, m, 0).getDate(); } for (var i = minD; i <= maxD; i++) { aDay.push({ label: i, value: i + (this.isShowChinese ? '日' : '') }) } } } if (type == 0) { this.list[0] = aYear; } if (type <= 1 && this.type >= 2) { this.list[1] = aMonth; } if (type <= 2 && this.type >= 3) { this.list[2] = aDay; } }, // 以后选中工夫 getChoise (choise) { var date = ''; for (var i = 0; i < choise.length; i++) { var item = choise[i]; if (!item.label) { break; } if (i != 0 && item.label) { date += '-'; } date += this.$G.makeUpNum(item.label); } return date; }, }}</script>