mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-24 02:16:12 +08:00
feat(Calendar): add max-range、range-prompt prop (#5583)
This commit is contained in:
parent
cfd40f2eaf
commit
670b346963
@ -221,6 +221,8 @@ Set `poppable` to `false`, the calendar will be displayed directly on the page i
|
|||||||
| safe-area-inset-bottom | Whether to enable bottom safe area adaptation | *boolean* | `true` |
|
| safe-area-inset-bottom | Whether to enable bottom safe area adaptation | *boolean* | `true` |
|
||||||
| confirm-text | Confirm button text | *string* | `Confirm` |
|
| confirm-text | Confirm button text | *string* | `Confirm` |
|
||||||
| confirm-disabled-text | Confirm button text when disabled | *string* | `Confirm` |
|
| confirm-disabled-text | Confirm button text when disabled | *string* | `Confirm` |
|
||||||
|
| max-range | max range of day | *number* | `null` |
|
||||||
|
| range-prompt | err message when the select range over max range | *string* | `选择天数不能超过 xx 天` |
|
||||||
|
|
||||||
### Data Structure of Day
|
### Data Structure of Day
|
||||||
|
|
||||||
|
@ -221,6 +221,8 @@ export default {
|
|||||||
| safe-area-inset-bottom | 是否开启底部安全区适配,[详细说明](#/zh-CN/quickstart#di-bu-an-quan-qu-gua-pei) | *boolean* | `true` |
|
| safe-area-inset-bottom | 是否开启底部安全区适配,[详细说明](#/zh-CN/quickstart#di-bu-an-quan-qu-gua-pei) | *boolean* | `true` |
|
||||||
| confirm-text | 确认按钮的文字 | *string* | `确定` |
|
| confirm-text | 确认按钮的文字 | *string* | `确定` |
|
||||||
| confirm-disabled-text | 确认按钮处于禁用状态时的文字 | *string* | `确定` |
|
| confirm-disabled-text | 确认按钮处于禁用状态时的文字 | *string* | `确定` |
|
||||||
|
| max-range | 日期区间最大范围天数 | *number* | `null` |
|
||||||
|
| range-prompt | 选择超过区间最大范围天数时错误提示 | *string* | `选择天数不能超过 xx 天` |
|
||||||
|
|
||||||
### Day 数据结构
|
### Day 数据结构
|
||||||
|
|
||||||
|
@ -7,11 +7,13 @@ import {
|
|||||||
compareDay,
|
compareDay,
|
||||||
compareMonth,
|
compareMonth,
|
||||||
createComponent,
|
createComponent,
|
||||||
|
calcDateNum,
|
||||||
ROW_HEIGHT
|
ROW_HEIGHT
|
||||||
} from './utils';
|
} from './utils';
|
||||||
|
|
||||||
import Popup from '../popup';
|
import Popup from '../popup';
|
||||||
import Button from '../button';
|
import Button from '../button';
|
||||||
|
import Toast from '../toast';
|
||||||
import Month from './components/Month';
|
import Month from './components/Month';
|
||||||
import Header from './components/Header';
|
import Header from './components/Header';
|
||||||
|
|
||||||
@ -72,6 +74,16 @@ export default createComponent({
|
|||||||
closeOnClickOverlay: {
|
closeOnClickOverlay: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true
|
default: true
|
||||||
|
},
|
||||||
|
maxRange: {
|
||||||
|
type: Number,
|
||||||
|
default: null
|
||||||
|
},
|
||||||
|
rangePrompt: {
|
||||||
|
type: String,
|
||||||
|
default() {
|
||||||
|
return t('rangePromptText', this.maxRange);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -254,7 +266,11 @@ export default createComponent({
|
|||||||
},
|
},
|
||||||
|
|
||||||
onConfirm() {
|
onConfirm() {
|
||||||
|
if (this.maxRange && calcDateNum(this.currentDate) > this.maxRange) {
|
||||||
|
Toast(this.rangePrompt);
|
||||||
|
} else {
|
||||||
this.$emit('confirm', this.currentDate);
|
this.$emit('confirm', this.currentDate);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
genMonth(date, index) {
|
genMonth(date, index) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { compareDay, compareMonth, getNextDay } from '../utils';
|
import { compareDay, compareMonth, getNextDay, calcDateNum } from '../utils';
|
||||||
|
|
||||||
const date1 = new Date(2010, 0, 1);
|
const date1 = new Date(2010, 0, 1);
|
||||||
const date2 = new Date(2010, 0, 2);
|
const date2 = new Date(2010, 0, 2);
|
||||||
@ -24,3 +24,8 @@ test('getNextDay', () => {
|
|||||||
expect(getNextDay(date1).getDate()).toEqual(2);
|
expect(getNextDay(date1).getDate()).toEqual(2);
|
||||||
expect(getNextDay(date2).getDate()).toEqual(3);
|
expect(getNextDay(date2).getDate()).toEqual(3);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('calcDateNum', () => {
|
||||||
|
expect(calcDateNum([date1, date2])).toEqual(2);
|
||||||
|
expect(calcDateNum([date1, date3])).toEqual(32);
|
||||||
|
});
|
||||||
|
@ -42,3 +42,9 @@ export function getNextDay(date: Date) {
|
|||||||
|
|
||||||
return date;
|
return date;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function calcDateNum(date: [Date, Date]) {
|
||||||
|
const day1 = date[0].getTime();
|
||||||
|
const day2 = date[1].getTime();
|
||||||
|
return (day2 - day1) / (1000 * 60 * 60 * 24) + 1;
|
||||||
|
}
|
||||||
|
@ -17,7 +17,8 @@ export default {
|
|||||||
start: 'Start',
|
start: 'Start',
|
||||||
title: 'Calendar',
|
title: 'Calendar',
|
||||||
weekdays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
weekdays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
||||||
monthTitle: (year: number, month: number) => `${year}/${month}`
|
monthTitle: (year: number, month: number) => `${year}/${month}`,
|
||||||
|
rangePromptText: (maxRange: Number) => `Choose no more than ${maxRange} days`
|
||||||
},
|
},
|
||||||
vanContactCard: {
|
vanContactCard: {
|
||||||
addText: 'Add contact info'
|
addText: 'Add contact info'
|
||||||
|
@ -17,7 +17,8 @@ export default {
|
|||||||
start: 'Comienzo',
|
start: 'Comienzo',
|
||||||
title: 'Calendario',
|
title: 'Calendario',
|
||||||
weekdays: ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'],
|
weekdays: ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'],
|
||||||
monthTitle: (year: number, month: number) => `${year}/${month}`
|
monthTitle: (year: number, month: number) => `${year}/${month}`,
|
||||||
|
rangePromptText: (maxRange: Number) => `Elija no más de ${maxRange} días`
|
||||||
},
|
},
|
||||||
vanContactCard: {
|
vanContactCard: {
|
||||||
addText: 'Añadir información de contacto'
|
addText: 'Añadir información de contacto'
|
||||||
|
@ -17,7 +17,8 @@ export default {
|
|||||||
start: 'Başlat',
|
start: 'Başlat',
|
||||||
title: 'Takvim',
|
title: 'Takvim',
|
||||||
weekdays: ['Paz', 'Pzt', 'Sal', 'Çar', 'Per', 'Cum', 'Cmt'],
|
weekdays: ['Paz', 'Pzt', 'Sal', 'Çar', 'Per', 'Cum', 'Cmt'],
|
||||||
monthTitle: (year: number, month: number) => `${year}/${month}`
|
monthTitle: (year: number, month: number) => `${year}/${month}`,
|
||||||
|
rangePromptText: (maxRange: Number) => `En fazla ${maxRange} gün seçin`
|
||||||
},
|
},
|
||||||
vanContactCard: {
|
vanContactCard: {
|
||||||
addText: 'Kişi bilgisi ekle'
|
addText: 'Kişi bilgisi ekle'
|
||||||
|
@ -18,7 +18,8 @@ export default {
|
|||||||
title: '日期选择',
|
title: '日期选择',
|
||||||
confirm: '确定',
|
confirm: '确定',
|
||||||
weekdays: ['日', '一', '二', '三', '四', '五', '六'],
|
weekdays: ['日', '一', '二', '三', '四', '五', '六'],
|
||||||
monthTitle: (year: number, month: number) => `${year}年${month}月`
|
monthTitle: (year: number, month: number) => `${year}年${month}月`,
|
||||||
|
rangePromptText: (maxRange: Number) => `选择天数不能超过 ${maxRange} 天`
|
||||||
},
|
},
|
||||||
vanContactCard: {
|
vanContactCard: {
|
||||||
addText: '添加联系人'
|
addText: '添加联系人'
|
||||||
|
@ -18,7 +18,8 @@ export default {
|
|||||||
title: '日期選擇',
|
title: '日期選擇',
|
||||||
confirm: '確定',
|
confirm: '確定',
|
||||||
weekdays: ['日', '壹', '二', '三', '四', '五', '六'],
|
weekdays: ['日', '壹', '二', '三', '四', '五', '六'],
|
||||||
monthTitle: (year: number, month: number) => `${year}年${month}月`
|
monthTitle: (year: number, month: number) => `${year}年${month}月`,
|
||||||
|
rangePromptText: (maxRange: Number) => `選擇天數不能超過 ${maxRange} 天`
|
||||||
},
|
},
|
||||||
vanContactCard: {
|
vanContactCard: {
|
||||||
addText: '添加聯系人'
|
addText: '添加聯系人'
|
||||||
|
@ -18,7 +18,8 @@ export default {
|
|||||||
title: '日期選擇',
|
title: '日期選擇',
|
||||||
confirm: '確定',
|
confirm: '確定',
|
||||||
weekdays: ['日', '壹', '二', '三', '四', '五', '六'],
|
weekdays: ['日', '壹', '二', '三', '四', '五', '六'],
|
||||||
monthTitle: (year: number, month: number) => `${year}年${month}月`
|
monthTitle: (year: number, month: number) => `${year}年${month}月`,
|
||||||
|
rangePromptText: (maxRange: Number) => `選擇天數不能超過 ${maxRange} 天`
|
||||||
},
|
},
|
||||||
vanContactCard: {
|
vanContactCard: {
|
||||||
addText: '新增聯絡人'
|
addText: '新增聯絡人'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user