mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-05 19:41:42 +08:00
types(DatetimePicker): add DatetimePickerInstance type (#9208)
* types(DatetimePicker): add DatetimePickerInstance type * chore: fix
This commit is contained in:
parent
e544b9ffe1
commit
92c06b2700
@ -20,12 +20,10 @@ import {
|
|||||||
} from '../utils';
|
} from '../utils';
|
||||||
import {
|
import {
|
||||||
times,
|
times,
|
||||||
ColumnType,
|
|
||||||
pickerKeys,
|
pickerKeys,
|
||||||
sharedProps,
|
sharedProps,
|
||||||
getTrueValue,
|
getTrueValue,
|
||||||
getMonthEndDay,
|
getMonthEndDay,
|
||||||
DatetimePickerType,
|
|
||||||
} from './utils';
|
} from './utils';
|
||||||
|
|
||||||
// Composables
|
// Composables
|
||||||
@ -34,6 +32,9 @@ import { useExpose } from '../composables/use-expose';
|
|||||||
// Components
|
// Components
|
||||||
import { Picker } from '../picker';
|
import { Picker } from '../picker';
|
||||||
|
|
||||||
|
// Types
|
||||||
|
import { DatetimePickerColumnType, DatetimePickerType } from './types';
|
||||||
|
|
||||||
const currentYear = new Date().getFullYear();
|
const currentYear = new Date().getFullYear();
|
||||||
const [name] = createNamespace('date-picker');
|
const [name] = createNamespace('date-picker');
|
||||||
|
|
||||||
@ -125,7 +126,7 @@ export default defineComponent({
|
|||||||
currentDate.value || props.minDate
|
currentDate.value || props.minDate
|
||||||
);
|
);
|
||||||
|
|
||||||
let result: Array<{ type: ColumnType; range: number[] }> = [
|
let result: Array<{ type: DatetimePickerColumnType; range: number[] }> = [
|
||||||
{
|
{
|
||||||
type: 'year',
|
type: 'year',
|
||||||
range: [minYear, maxYear],
|
range: [minYear, maxYear],
|
||||||
@ -231,7 +232,7 @@ export default defineComponent({
|
|||||||
const { type } = props;
|
const { type } = props;
|
||||||
const indexes = picker.value!.getIndexes();
|
const indexes = picker.value!.getIndexes();
|
||||||
|
|
||||||
const getValue = (type: ColumnType) => {
|
const getValue = (type: DatetimePickerColumnType) => {
|
||||||
let index = 0;
|
let index = 0;
|
||||||
originColumns.value.forEach((column, columnIndex) => {
|
originColumns.value.forEach((column, columnIndex) => {
|
||||||
if (type === column.type) {
|
if (type === column.type) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { ref, defineComponent } from 'vue';
|
import { ref, defineComponent, ExtractPropTypes } from 'vue';
|
||||||
import { pick, createNamespace, ComponentInstance, extend } from '../utils';
|
import { pick, createNamespace, ComponentInstance, extend } from '../utils';
|
||||||
import { useExpose } from '../composables/use-expose';
|
import { useExpose } from '../composables/use-expose';
|
||||||
import TimePicker from './TimePicker';
|
import TimePicker from './TimePicker';
|
||||||
@ -8,13 +8,16 @@ const [name, bem] = createNamespace('datetime-picker');
|
|||||||
|
|
||||||
const timePickerProps = Object.keys(TimePicker.props);
|
const timePickerProps = Object.keys(TimePicker.props);
|
||||||
const datePickerProps = Object.keys(DatePicker.props);
|
const datePickerProps = Object.keys(DatePicker.props);
|
||||||
|
const props = extend({}, TimePicker.props, DatePicker.props, {
|
||||||
|
modelValue: [String, Date],
|
||||||
|
});
|
||||||
|
|
||||||
|
export type DatetimePickerProps = ExtractPropTypes<typeof props>;
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name,
|
name,
|
||||||
|
|
||||||
props: extend({}, TimePicker.props, DatePicker.props, {
|
props,
|
||||||
modelValue: [String, Date],
|
|
||||||
}),
|
|
||||||
|
|
||||||
setup(props, { attrs, slots }) {
|
setup(props, { attrs, slots }) {
|
||||||
const root = ref<ComponentInstance>();
|
const root = ref<ComponentInstance>();
|
||||||
|
@ -342,3 +342,16 @@ Use [ref](https://v3.vuejs.org/guide/component-template-refs.html) to get Dateti
|
|||||||
| Name | Description | Attribute | Return value |
|
| Name | Description | Attribute | Return value |
|
||||||
| --------- | ------------------- | --------- | ------------ |
|
| --------- | ------------------- | --------- | ------------ |
|
||||||
| getPicker | get Picker instance | - | - |
|
| getPicker | get Picker instance | - | - |
|
||||||
|
|
||||||
|
### Types
|
||||||
|
|
||||||
|
Get the type definition of the DatetimePicker instance through `DatetimePickerInstance`.
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import type { DatetimePickerInstance } from 'vant';
|
||||||
|
|
||||||
|
const datetimePickerRef = ref<DatetimePickerInstance>();
|
||||||
|
|
||||||
|
datetimePickerRef.value?.getPicker();
|
||||||
|
```
|
||||||
|
@ -352,6 +352,19 @@ export default {
|
|||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| getPicker | 获取 Picker 实例,用于调用 Picker 的[实例方法](#/zh-CN/picker#fang-fa) | - | - |
|
| getPicker | 获取 Picker 实例,用于调用 Picker 的[实例方法](#/zh-CN/picker#fang-fa) | - | - |
|
||||||
|
|
||||||
|
### 类型定义
|
||||||
|
|
||||||
|
通过 `DatetimePickerInstance` 获取 DatetimePicker 实例的类型定义。
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import type { DatetimePickerInstance } from 'vant';
|
||||||
|
|
||||||
|
const datetimePickerRef = ref<DatetimePickerInstance>();
|
||||||
|
|
||||||
|
datetimePickerRef.value?.getPicker();
|
||||||
|
```
|
||||||
|
|
||||||
## 常见问题
|
## 常见问题
|
||||||
|
|
||||||
### 设置 min-date 或 max-date 后出现页面卡死的情况?
|
### 设置 min-date 或 max-date 后出现页面卡死的情况?
|
||||||
|
@ -5,4 +5,4 @@ const DatetimePicker = withInstall<typeof _DatetimePicker>(_DatetimePicker);
|
|||||||
|
|
||||||
export default DatetimePicker;
|
export default DatetimePicker;
|
||||||
export { DatetimePicker };
|
export { DatetimePicker };
|
||||||
export type { DatetimePickerType } from './utils';
|
export type { DatetimePickerType, DatetimePickerInstance } from './types';
|
||||||
|
27
src/datetime-picker/types.ts
Normal file
27
src/datetime-picker/types.ts
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import { ComponentPublicInstance } from 'vue';
|
||||||
|
import type { PickerInstance } from '../picker';
|
||||||
|
import { DatetimePickerProps } from './DatetimePicker';
|
||||||
|
|
||||||
|
export type DatetimePickerColumnType =
|
||||||
|
| 'year'
|
||||||
|
| 'month'
|
||||||
|
| 'day'
|
||||||
|
| 'hour'
|
||||||
|
| 'minute';
|
||||||
|
|
||||||
|
export type DatetimePickerType =
|
||||||
|
| 'date'
|
||||||
|
| 'time'
|
||||||
|
| 'datetime'
|
||||||
|
| 'datehour'
|
||||||
|
| 'month-day'
|
||||||
|
| 'year-month';
|
||||||
|
|
||||||
|
export type DatetimePickerExpose = {
|
||||||
|
getPicker: () => PickerInstance;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type DatetimePickerInstance = ComponentPublicInstance<
|
||||||
|
DatetimePickerProps,
|
||||||
|
DatetimePickerExpose
|
||||||
|
>;
|
@ -1,20 +1,11 @@
|
|||||||
import { PropType } from 'vue';
|
import { PropType } from 'vue';
|
||||||
import { extend } from '../utils';
|
import { extend } from '../utils';
|
||||||
import { pickerProps } from '../picker/Picker';
|
import { pickerProps } from '../picker/Picker';
|
||||||
|
import type { DatetimePickerColumnType } from './types';
|
||||||
export type ColumnType = 'year' | 'month' | 'day' | 'hour' | 'minute';
|
|
||||||
|
|
||||||
export type DatetimePickerType =
|
|
||||||
| 'date'
|
|
||||||
| 'time'
|
|
||||||
| 'datetime'
|
|
||||||
| 'datehour'
|
|
||||||
| 'month-day'
|
|
||||||
| 'year-month';
|
|
||||||
|
|
||||||
export const sharedProps = extend({}, pickerProps, {
|
export const sharedProps = extend({}, pickerProps, {
|
||||||
filter: Function as PropType<(type: string, values: string[]) => string[]>,
|
filter: Function as PropType<(type: string, values: string[]) => string[]>,
|
||||||
columnsOrder: Array as PropType<ColumnType[]>,
|
columnsOrder: Array as PropType<DatetimePickerColumnType[]>,
|
||||||
formatter: {
|
formatter: {
|
||||||
type: Function as PropType<(type: string, value: string) => string>,
|
type: Function as PropType<(type: string, value: string) => string>,
|
||||||
default: (type: string, value: string) => value,
|
default: (type: string, value: string) => value,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user