@kine-design/core 0.0.1-beta.1 → 0.0.1-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/style/global.css +1 -0
- package/assets/style/var/Wuxing.css +71 -0
- package/assets/style/var.css +23 -0
- package/components/base/affix/api.ts +16 -0
- package/components/base/affix/index.ts +17 -0
- package/components/base/affix/props.d.ts +34 -0
- package/components/base/affix/useAffix.ts +123 -0
- package/components/base/alert/api.ts +18 -0
- package/components/base/alert/index.ts +15 -0
- package/components/base/alert/props.d.ts +50 -0
- package/components/base/anchor/api.ts +20 -0
- package/components/base/anchor/index.ts +18 -0
- package/components/base/anchor/props.d.ts +46 -0
- package/components/base/anchor/useAnchor.ts +83 -0
- package/components/base/autoComplete/api.ts +24 -0
- package/components/base/autoComplete/index.ts +17 -0
- package/components/base/autoComplete/props.d.ts +75 -0
- package/components/base/autoComplete/useAutoComplete.ts +149 -0
- package/components/base/avatar/api.ts +17 -0
- package/components/base/avatar/avatar.css +61 -0
- package/components/base/avatar/index.ts +15 -0
- package/components/base/avatar/props.d.ts +37 -0
- package/components/base/backTop/api.ts +17 -0
- package/components/base/backTop/index.ts +17 -0
- package/components/base/backTop/props.d.ts +38 -0
- package/components/base/backTop/useBackTop.ts +62 -0
- package/components/base/badge/api.ts +22 -0
- package/components/base/badge/index.ts +15 -0
- package/components/base/badge/props.d.ts +50 -0
- package/components/base/button/api.ts +28 -0
- package/components/base/button/button.css +34 -0
- package/components/base/button/index.ts +17 -0
- package/components/base/button/props.d.ts +64 -0
- package/components/base/button/useButton.ts +37 -0
- package/components/base/card/api.ts +17 -0
- package/components/base/card/index.ts +15 -0
- package/components/base/card/props.d.ts +37 -0
- package/components/base/carousel/api.ts +28 -0
- package/components/base/carousel/index.ts +17 -0
- package/components/base/carousel/props.d.ts +72 -0
- package/components/base/carousel/useCarousel.ts +149 -0
- package/components/base/cascader/api.ts +23 -0
- package/components/base/cascader/index.ts +18 -0
- package/components/base/cascader/props.d.ts +103 -0
- package/components/base/cascader/useCascader.ts +334 -0
- package/components/base/checkbox/api.ts +24 -0
- package/components/base/checkbox/checkbox.css +0 -0
- package/components/base/checkbox/index.ts +17 -0
- package/components/base/checkbox/props.d.ts +77 -0
- package/components/base/checkbox/useCheckbox.ts +42 -0
- package/components/base/collapse/api.ts +21 -0
- package/components/base/collapse/index.ts +18 -0
- package/components/base/collapse/props.d.ts +45 -0
- package/components/base/collapse/useCollapse.ts +80 -0
- package/components/base/datePicker/api.ts +18 -0
- package/components/base/datePicker/index.ts +19 -0
- package/components/base/datePicker/props.d.ts +60 -0
- package/components/base/datePicker/useDatePicker.ts +392 -0
- package/components/base/divider/api.ts +15 -0
- package/components/base/divider/divider.css +11 -0
- package/components/base/divider/index.ts +15 -0
- package/components/base/divider/props.d.ts +30 -0
- package/components/base/dropdown/api.ts +33 -0
- package/components/base/dropdown/index.ts +18 -0
- package/components/base/dropdown/props.d.ts +60 -0
- package/components/base/dropdown/useDropdown.ts +123 -0
- package/components/base/empty/api.ts +15 -0
- package/components/base/empty/index.ts +15 -0
- package/components/base/empty/props.d.ts +26 -0
- package/components/base/image/api.ts +25 -0
- package/components/base/image/index.ts +18 -0
- package/components/base/image/props.d.ts +67 -0
- package/components/base/image/useImage.ts +119 -0
- package/components/base/input/api.ts +19 -0
- package/components/base/input/index.ts +17 -0
- package/components/base/input/input.css +19 -0
- package/components/base/input/props.d.ts +60 -0
- package/components/base/input/useInput.ts +53 -0
- package/components/base/inputNumber/api.ts +21 -0
- package/components/base/inputNumber/index.ts +17 -0
- package/components/base/inputNumber/props.d.ts +64 -0
- package/components/base/inputNumber/useInputNumber.ts +140 -0
- package/components/base/li/api.ts +15 -0
- package/components/base/li/index.ts +15 -0
- package/components/base/li/props.d.ts +30 -0
- package/components/base/list/api.ts +16 -0
- package/components/base/list/index.ts +17 -0
- package/components/base/list/props.d.ts +33 -0
- package/components/base/list/useList.ts +36 -0
- package/components/base/loading/api.ts +17 -0
- package/components/base/loading/index.ts +15 -0
- package/components/base/loading/props.d.ts +38 -0
- package/components/base/popover/api.ts +28 -0
- package/components/base/popover/index.ts +17 -0
- package/components/base/popover/props.d.ts +73 -0
- package/components/base/popover/usePopover.ts +192 -0
- package/components/base/progress/api.ts +18 -0
- package/components/base/progress/index.ts +17 -0
- package/components/base/progress/props.d.ts +53 -0
- package/components/base/progress/useProgress.ts +28 -0
- package/components/base/radio/api.ts +19 -0
- package/components/base/radio/index.ts +19 -0
- package/components/base/radio/props.d.ts +59 -0
- package/components/base/radio/useRadio.ts +11 -0
- package/components/base/rate/api.ts +18 -0
- package/components/base/rate/index.ts +17 -0
- package/components/base/rate/props.d.ts +49 -0
- package/components/base/rate/useRate.ts +75 -0
- package/components/base/result/api.ts +20 -0
- package/components/base/result/index.ts +15 -0
- package/components/base/result/props.d.ts +36 -0
- package/components/base/select/api.ts +31 -0
- package/components/base/select/index.ts +18 -0
- package/components/base/select/props.d.ts +132 -0
- package/components/base/select/select.css +7 -0
- package/components/base/select/useSelect.ts +280 -0
- package/components/base/select/useSelectTools.ts +60 -0
- package/components/base/skeleton/api.ts +18 -0
- package/components/base/skeleton/index.ts +15 -0
- package/components/base/skeleton/props.d.ts +41 -0
- package/components/base/slider/api.ts +20 -0
- package/components/base/slider/index.ts +17 -0
- package/components/base/slider/props.d.ts +65 -0
- package/components/base/slider/useSlider.ts +83 -0
- package/components/base/space/api.ts +17 -0
- package/components/base/space/index.ts +15 -0
- package/components/base/space/props.d.ts +39 -0
- package/components/base/steps/api.ts +30 -0
- package/components/base/steps/index.ts +22 -0
- package/components/base/steps/props.d.ts +88 -0
- package/components/base/steps/useSteps.ts +101 -0
- package/components/base/switch/api.ts +22 -0
- package/components/base/switch/index.ts +19 -0
- package/components/base/switch/props.d.ts +66 -0
- package/components/base/switch/useSwitch.tsx +79 -0
- package/components/base/tabs/api.ts +23 -0
- package/components/base/tabs/index.ts +18 -0
- package/components/base/tabs/props.d.ts +41 -0
- package/components/base/tabs/useTabs.ts +66 -0
- package/components/base/tag/api.ts +17 -0
- package/components/base/tag/index.ts +15 -0
- package/components/base/tag/props.d.ts +49 -0
- package/components/base/timePicker/api.ts +21 -0
- package/components/base/timePicker/index.ts +18 -0
- package/components/base/timePicker/props.d.ts +66 -0
- package/components/base/timePicker/useTimePicker.ts +161 -0
- package/components/base/timeline/api.ts +24 -0
- package/components/base/timeline/index.ts +16 -0
- package/components/base/timeline/props.d.ts +60 -0
- package/components/base/tooltip/api.ts +19 -0
- package/components/base/tooltip/index.ts +17 -0
- package/components/base/tooltip/props.d.ts +34 -0
- package/components/base/tooltip/useTooltip.ts +89 -0
- package/components/base/transfer/api.ts +18 -0
- package/components/base/transfer/index.ts +17 -0
- package/components/base/transfer/props.d.ts +63 -0
- package/components/base/transfer/useTransfer.ts +207 -0
- package/components/base/tree/api.ts +47 -0
- package/components/base/tree/index.ts +29 -0
- package/components/base/tree/props.d.ts +108 -0
- package/components/base/tree/tree.ts +263 -0
- package/components/base/tree/useTree.ts +114 -0
- package/components/message/confirm/api.ts +21 -0
- package/components/message/confirm/index.ts +15 -0
- package/components/message/confirm/props.d.ts +69 -0
- package/components/message/dialog/api.ts +19 -0
- package/components/message/dialog/index.ts +15 -0
- package/components/message/dialog/props.d.ts +55 -0
- package/components/message/drawer/api.ts +32 -0
- package/components/message/drawer/index.ts +15 -0
- package/components/message/drawer/props.d.ts +73 -0
- package/components/message/message/api.ts +27 -0
- package/components/message/message/index.ts +20 -0
- package/components/message/message/props.d.ts +54 -0
- package/components/message/message/useMessage.ts +61 -0
- package/components/message/notification/api.ts +23 -0
- package/components/message/notification/index.ts +19 -0
- package/components/message/notification/props.d.ts +64 -0
- package/components/message/notification/useNotification.ts +79 -0
- package/components/message/popover/MPopover.tsx +94 -0
- package/components/message/popover/api.ts +54 -0
- package/components/message/popover/index.ts +17 -0
- package/components/message/popover/popover.css +21 -0
- package/components/message/popover/props.d.ts +76 -0
- package/components/message/popover/usePopover.ts +234 -0
- package/components/other/darkMode/api.ts +17 -0
- package/components/other/darkMode/index.ts +17 -0
- package/components/other/darkMode/props.d.ts +37 -0
- package/components/other/darkMode/useDarkMode.ts +129 -0
- package/components/template/border/api.ts +18 -0
- package/components/template/border/index.ts +15 -0
- package/components/template/border/props.d.ts +41 -0
- package/components/template/breadcrumb/api.ts +15 -0
- package/components/template/breadcrumb/index.ts +15 -0
- package/components/template/breadcrumb/props.d.ts +45 -0
- package/components/template/descriptions/api.ts +23 -0
- package/components/template/descriptions/index.ts +16 -0
- package/components/template/descriptions/props.d.ts +54 -0
- package/components/template/form/api.ts +23 -0
- package/components/template/form/index.ts +20 -0
- package/components/template/form/props.d.ts +60 -0
- package/components/template/grid/api.ts +20 -0
- package/components/template/grid/index.ts +15 -0
- package/components/template/grid/props.d.ts +48 -0
- package/components/template/menu/api.ts +26 -0
- package/components/template/menu/index.ts +18 -0
- package/components/template/menu/props.d.ts +93 -0
- package/components/template/menu/useMenu.ts +155 -0
- package/components/template/pagination/api.ts +22 -0
- package/components/template/pagination/index.ts +19 -0
- package/components/template/pagination/props.d.ts +65 -0
- package/components/template/pagination/usePagination.ts +186 -0
- package/components/template/table/api.ts +18 -0
- package/components/template/table/index.ts +18 -0
- package/components/template/table/props.d.ts +36 -0
- package/components/template/table/useTable.ts +138 -0
- package/components/template/tableColumn/api.ts +17 -0
- package/components/template/tableColumn/index.ts +15 -0
- package/components/template/tableColumn/props.d.ts +32 -0
- package/components/template/virtualList/api.ts +16 -0
- package/components/template/virtualList/index.ts +17 -0
- package/components/template/virtualList/props.d.ts +25 -0
- package/components/template/virtualList/useVirtualList.ts +237 -0
- package/components/types/hook.d.ts +13 -0
- package/components/types/props.d.ts +52 -0
- package/components/types/template.d.ts +59 -0
- package/compositions/common/defineCore.ts +55 -0
- package/compositions/common/useDebounceFn.ts +27 -0
- package/compositions/common/useDrag.ts +65 -0
- package/compositions/common/useElementSize.ts +37 -0
- package/compositions/common/useEventListener.ts +48 -0
- package/compositions/common/usePopover.ts +45 -0
- package/compositions/common/useResizeObserver.ts +43 -0
- package/compositions/common/useTeleport.ts +24 -0
- package/compositions/input/useBooleanInput.ts +52 -0
- package/compositions/modal/useModal.ts +72 -0
- package/compositions/popper/useClickAway.ts +41 -0
- package/compositions/popper/usePopper.ts +63 -0
- package/compositions/utils/filters.ts +135 -0
- package/compositions/virtualList/enums.ts +52 -0
- package/compositions/virtualList/useContainerObserver.ts +89 -0
- package/compositions/virtualList/useEntries.ts +248 -0
- package/compositions/virtualList/useHeightCache.ts +83 -0
- package/compositions/virtualList/useSentinelObserver.ts +81 -0
- package/dist/components/base/affix/index.d.ts +2 -1
- package/dist/components/base/affix/useAffix.d.ts +6 -5
- package/dist/components/base/anchor/index.d.ts +2 -1
- package/dist/components/base/anchor/useAnchor.d.ts +2 -2
- package/dist/components/base/autoComplete/useAutoComplete.d.ts +12 -4
- package/dist/components/base/avatar/index.d.ts +1 -0
- package/dist/components/base/backTop/index.d.ts +2 -1
- package/dist/components/base/backTop/useBackTop.d.ts +2 -2
- package/dist/components/base/button/index.d.ts +3 -21
- package/dist/components/base/button/useButton.d.ts +5 -2
- package/dist/components/base/carousel/useCarousel.d.ts +6 -3
- package/dist/components/base/cascader/useCascader.d.ts +23 -11
- package/dist/components/base/checkbox/index.d.ts +2 -1
- package/dist/components/base/checkbox/useCheckbox.d.ts +4 -3
- package/dist/components/base/collapse/index.d.ts +2 -1
- package/dist/components/base/collapse/useCollapse.d.ts +3 -3
- package/dist/components/base/datePicker/useDatePicker.d.ts +140 -8
- package/dist/components/base/dropdown/index.d.ts +2 -1
- package/dist/components/base/dropdown/useDropdown.d.ts +12 -6
- package/dist/components/base/image/useImage.d.ts +5 -5
- package/dist/components/base/input/index.d.ts +2 -1
- package/dist/components/base/input/useInput.d.ts +1 -2
- package/dist/components/base/inputNumber/index.d.ts +2 -1
- package/dist/components/base/inputNumber/useInputNumber.d.ts +3 -3
- package/dist/components/base/li/index.d.ts +1 -0
- package/dist/components/base/list/index.d.ts +2 -1
- package/dist/components/base/list/useList.d.ts +1 -1
- package/dist/components/base/popover/index.d.ts +2 -1
- package/dist/components/base/popover/usePopover.d.ts +9 -9
- package/dist/components/base/progress/index.d.ts +2 -1
- package/dist/components/base/progress/useProgress.d.ts +2 -2
- package/dist/components/base/rate/index.d.ts +2 -1
- package/dist/components/base/rate/useRate.d.ts +2 -2
- package/dist/components/base/select/useSelect.d.ts +8 -8
- package/dist/components/base/slider/index.d.ts +2 -1
- package/dist/components/base/slider/useSlider.d.ts +4 -4
- package/dist/components/base/steps/index.d.ts +1 -1
- package/dist/components/base/steps/useSteps.d.ts +5 -5
- package/dist/components/base/switch/index.d.ts +2 -1
- package/dist/components/base/switch/useSwitch.d.ts +8 -3
- package/dist/components/base/tabs/index.d.ts +1 -1
- package/dist/components/base/tabs/useTabs.d.ts +3 -3
- package/dist/components/base/tag/index.d.ts +1 -0
- package/dist/components/base/timePicker/useTimePicker.d.ts +14 -6
- package/dist/components/base/tooltip/index.d.ts +1 -1
- package/dist/components/base/tooltip/useTooltip.d.ts +15 -5
- package/dist/components/base/transfer/useTransfer.d.ts +15 -15
- package/dist/components/base/tree/index.d.ts +1 -1
- package/dist/components/base/tree/useTree.d.ts +2 -1
- package/dist/components/message/drawer/index.d.ts +2 -2
- package/dist/components/message/message/useMessage.d.ts +11 -1
- package/dist/components/message/notification/useNotification.d.ts +17 -1
- package/dist/components/message/popover/MPopover.d.ts +6 -1
- package/dist/components/message/popover/index.d.ts +1 -1
- package/dist/components/message/popover/usePopover.d.ts +6 -6
- package/dist/components/other/darkMode/useDarkMode.d.ts +1 -1
- package/dist/components/template/menu/index.d.ts +0 -1
- package/dist/components/template/menu/useMenu.d.ts +2 -1
- package/dist/components/template/pagination/index.d.ts +2 -1
- package/dist/components/template/virtualList/index.d.ts +0 -1
- package/dist/components/template/virtualList/useVirtualList.d.ts +10 -7
- package/dist/compositions/common/useDrag.d.ts +1 -1
- package/dist/compositions/common/useElementSize.d.ts +2 -2
- package/dist/compositions/common/useTeleport.d.ts +4 -2
- package/dist/compositions/modal/useModal.d.ts +1 -1
- package/dist/core.js +6147 -4186
- package/dist/runtime/defineHook.d.ts +1 -1
- package/index.css +1 -0
- package/index.ts +71 -0
- package/package.json +19 -16
- package/runtime/defineHook.ts +21 -0
- package/tools/empty.ts +81 -0
- package/tools/index.ts +15 -0
- package/tools/types.ts +11 -0
- package/tsconfig.json +8 -0
- package/types/common/common.d.ts +25 -0
- package/types/common/model.d.ts +25 -0
- package/types/index.d.ts +11 -0
- package/types/props.d.ts +13 -0
- package/vite.config.build.ts +41 -0
- package/dist/vite.config.build.d.ts +0 -2
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description datePicker core 导出
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/25
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
import { props } from './api';
|
|
10
|
+
import { useDatePicker } from './useDatePicker';
|
|
11
|
+
|
|
12
|
+
export const DatePickerCore = {
|
|
13
|
+
props,
|
|
14
|
+
useDatePicker,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export type { DatePickerProps, CalendarType, DateRefType, CalendarItem } from './props';
|
|
18
|
+
export { useDatePicker, toDayjs, BASE_WEEK_NAME, BASE_MONTH_NAME, generateTimeColumn } from './useDatePicker';
|
|
19
|
+
export type { TimeRefType } from './useDatePicker';
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description datePicker props 类型定义
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/25
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export declare type DatePickerProps = {
|
|
11
|
+
/**
|
|
12
|
+
* @description 日期值
|
|
13
|
+
* @type string | Date
|
|
14
|
+
* @default ''
|
|
15
|
+
*/
|
|
16
|
+
modelValue?: string | Date;
|
|
17
|
+
/**
|
|
18
|
+
* @description 提示文字
|
|
19
|
+
* @type string
|
|
20
|
+
* @default '请选择日期...'
|
|
21
|
+
*/
|
|
22
|
+
placeholder?: string;
|
|
23
|
+
/**
|
|
24
|
+
* @description 日期格式
|
|
25
|
+
* @type string
|
|
26
|
+
* @default undefined
|
|
27
|
+
*/
|
|
28
|
+
format?: string;
|
|
29
|
+
/**
|
|
30
|
+
* @description 选择类型:date 按日选择,month 按月选择,datetime 日期时间选择
|
|
31
|
+
* @type 'date' | 'month' | 'datetime'
|
|
32
|
+
* @default 'date'
|
|
33
|
+
*/
|
|
34
|
+
type?: 'date' | 'month' | 'datetime';
|
|
35
|
+
/**
|
|
36
|
+
* @description 是否禁用
|
|
37
|
+
* @type boolean
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
40
|
+
disabled?: boolean;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/** 日历面板的显示模式 */
|
|
44
|
+
export type CalendarType = 'date' | 'month' | 'year';
|
|
45
|
+
|
|
46
|
+
/** 日历内部日期引用 */
|
|
47
|
+
export type DateRefType = {
|
|
48
|
+
year: number;
|
|
49
|
+
month: number;
|
|
50
|
+
day: number;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/** 日历单元格数据 */
|
|
54
|
+
export type CalendarItem = {
|
|
55
|
+
day: number | string;
|
|
56
|
+
isCurrentMonth: boolean;
|
|
57
|
+
isCurrent?: boolean;
|
|
58
|
+
month: number;
|
|
59
|
+
year: number;
|
|
60
|
+
};
|
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description datePicker 核心 composable
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/25
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*
|
|
9
|
+
* 从 lib/useDatePicker 移植,去掉 usePopover / useBorder 依赖。
|
|
10
|
+
* 纯日历数据管理,不含任何 popover 逻辑。
|
|
11
|
+
*/
|
|
12
|
+
import dayjs from 'dayjs';
|
|
13
|
+
import { computed, ref, Ref } from 'vue';
|
|
14
|
+
import { DatePickerProps, CalendarType, DateRefType, CalendarItem } from './props';
|
|
15
|
+
|
|
16
|
+
/** 时间部分的内部状态 */
|
|
17
|
+
export type TimeRefType = {
|
|
18
|
+
hours: number;
|
|
19
|
+
minutes: number;
|
|
20
|
+
seconds: number;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/** 基础星期头(汉字显示) */
|
|
24
|
+
export const BASE_WEEK_NAME: Array<{ day: string; isCurrentMonth: boolean }> = [
|
|
25
|
+
{ day: '日', isCurrentMonth: true },
|
|
26
|
+
{ day: '壹', isCurrentMonth: true },
|
|
27
|
+
{ day: '贰', isCurrentMonth: true },
|
|
28
|
+
{ day: '叁', isCurrentMonth: true },
|
|
29
|
+
{ day: '肆', isCurrentMonth: true },
|
|
30
|
+
{ day: '伍', isCurrentMonth: true },
|
|
31
|
+
{ day: '陆', isCurrentMonth: true },
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
/** 月份名称 */
|
|
35
|
+
export const BASE_MONTH_NAME = [
|
|
36
|
+
'1月', '2月', '3月', '4月', '5月', '6月',
|
|
37
|
+
'7月', '8月', '9月', '10月', '11月', '12月',
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* 将 string | Date 转换为 dayjs 对象。
|
|
42
|
+
* headless 组件需要用此函数更新 currentRef。
|
|
43
|
+
*/
|
|
44
|
+
export const toDayjs = (value: string | Date | undefined) => {
|
|
45
|
+
return dayjs(value);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/** 简单的空值判断,内联避免从 lib 导入 */
|
|
49
|
+
const isEmpty = (value: unknown): boolean => {
|
|
50
|
+
return value === '' || value === null || value === undefined;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* 生成 0..max-1(step 步进)的数字数组,用于时间列渲染。
|
|
55
|
+
* @param max 最大值(不含),如 24、60
|
|
56
|
+
* @param step 步长
|
|
57
|
+
*/
|
|
58
|
+
export const generateTimeColumn = (max: number, step: number): number[] => {
|
|
59
|
+
const result: number[] = [];
|
|
60
|
+
for (let i = 0; i < max; i += step) {
|
|
61
|
+
result.push(i);
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export function useDatePicker(props: DatePickerProps) {
|
|
67
|
+
const today = dayjs();
|
|
68
|
+
|
|
69
|
+
/** 当前日历视图所在年月日 */
|
|
70
|
+
const dateRef = ref<DateRefType>({
|
|
71
|
+
year: today.year(),
|
|
72
|
+
month: today.month() + 1,
|
|
73
|
+
day: today.date(),
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
/** trigger 显示的格式化文本 */
|
|
77
|
+
const displayValue = ref('');
|
|
78
|
+
|
|
79
|
+
/** trigger span 的 class 列表(含 placeholder 状态) */
|
|
80
|
+
const spanClass = ref<Array<string | undefined>>([]);
|
|
81
|
+
|
|
82
|
+
/** 当前选中的日期(dayjs 对象),用于日历格高亮) */
|
|
83
|
+
const currentRef = ref(toDayjs(props.modelValue));
|
|
84
|
+
|
|
85
|
+
/** 日历面板显示模式:date / month / year(datetime 类型初始显示 date 模式) */
|
|
86
|
+
const calendarTypeRef = ref<CalendarType>(
|
|
87
|
+
props.type === 'datetime' ? 'date' : (props.type ?? 'date'),
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
/** 年份选择模式下展示的 12 个年份 */
|
|
91
|
+
const yearsRef = ref<number[]>([]);
|
|
92
|
+
|
|
93
|
+
/** 是否处于 placeholder 状态 */
|
|
94
|
+
let needPlaceholder = false;
|
|
95
|
+
|
|
96
|
+
/** 根据 type 和 format prop 计算实际使用的日期格式 */
|
|
97
|
+
const format = computed(() => {
|
|
98
|
+
if (props.format) return props.format;
|
|
99
|
+
switch (props.type) {
|
|
100
|
+
case 'month': return 'YYYY-MM';
|
|
101
|
+
case 'datetime': return 'YYYY-MM-DD HH:mm:ss';
|
|
102
|
+
case 'date':
|
|
103
|
+
default: return 'YYYY-MM-DD';
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
/** datetime 模式下的时间状态(时/分/秒) */
|
|
108
|
+
const timeRef = ref<TimeRefType>({ hours: 0, minutes: 0, seconds: 0 });
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* 根据传入值更新内部状态(dateRef、displayValue、spanClass)。
|
|
112
|
+
* 空值时显示 placeholder,有效日期时解析并同步。
|
|
113
|
+
*/
|
|
114
|
+
const updateDateRef = (value: string | Date | undefined) => {
|
|
115
|
+
if (isEmpty(value)) {
|
|
116
|
+
displayValue.value = props.placeholder ?? '请选择日期...';
|
|
117
|
+
needPlaceholder = true;
|
|
118
|
+
} else {
|
|
119
|
+
needPlaceholder = false;
|
|
120
|
+
const dayjsValue = dayjs(value as string | Date);
|
|
121
|
+
if (dayjsValue.isValid()) {
|
|
122
|
+
displayValue.value = dayjsValue.format(format.value).toString();
|
|
123
|
+
dateRef.value = {
|
|
124
|
+
year: dayjsValue.year(),
|
|
125
|
+
month: dayjsValue.month() + 1,
|
|
126
|
+
day: dayjsValue.date(),
|
|
127
|
+
};
|
|
128
|
+
// datetime 模式下同步时间部分
|
|
129
|
+
if (props.type === 'datetime') {
|
|
130
|
+
timeRef.value = {
|
|
131
|
+
hours: dayjsValue.hour(),
|
|
132
|
+
minutes: dayjsValue.minute(),
|
|
133
|
+
seconds: dayjsValue.second(),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// 无效日期时保持原状,不做处理
|
|
138
|
+
}
|
|
139
|
+
spanClass.value = [
|
|
140
|
+
'm-date-picker-span',
|
|
141
|
+
needPlaceholder ? 'm-date-picker-placeholder' : undefined,
|
|
142
|
+
];
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
// 初始化
|
|
146
|
+
updateDateRef(props.modelValue);
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* 生成 6×7 日历网格数据。
|
|
150
|
+
* 返回按 7 天分组的二维数组,每格包含日期信息。
|
|
151
|
+
*/
|
|
152
|
+
const getCalendar = (MDateRefValue: Ref<DateRefType>): CalendarItem[][] => {
|
|
153
|
+
const dr = MDateRefValue.value;
|
|
154
|
+
|
|
155
|
+
// 当月第一天的 dayjs
|
|
156
|
+
const monthDayjs = dayjs().set('year', dr.year).set('month', dr.month - 1);
|
|
157
|
+
const dateDayjs = monthDayjs.set('date', dr.day);
|
|
158
|
+
const firstDayWeek = dateDayjs.startOf('month');
|
|
159
|
+
const firstDayWeekDay = firstDayWeek.day();
|
|
160
|
+
|
|
161
|
+
// 上个月信息
|
|
162
|
+
const prevDaysYear = dr.month === 1 ? dr.year - 1 : dr.year;
|
|
163
|
+
const lastMonthDayjs = dateDayjs.subtract(1, 'month');
|
|
164
|
+
const lastMonth = lastMonthDayjs.month() + 1;
|
|
165
|
+
|
|
166
|
+
// 填充上月日期(到当月第一天前的周日)
|
|
167
|
+
const prevDays: CalendarItem[] = Array.from({ length: firstDayWeekDay }, (_, i) => {
|
|
168
|
+
const day = firstDayWeek.subtract(firstDayWeekDay - i, 'day').date();
|
|
169
|
+
return { day, isCurrentMonth: false, month: lastMonth, year: prevDaysYear };
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// 判断某日是否是当前选中日
|
|
173
|
+
const isCurrent = (dayNum: number): boolean => {
|
|
174
|
+
if (dr.year !== currentRef.value.year()) return false;
|
|
175
|
+
if (dr.month !== currentRef.value.month() + 1) return false;
|
|
176
|
+
return dayNum === currentRef.value.date();
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
// 当月所有日期
|
|
180
|
+
const currentDays: CalendarItem[] = Array.from({ length: monthDayjs.daysInMonth() }, (_, i) => ({
|
|
181
|
+
day: i + 1,
|
|
182
|
+
isCurrentMonth: true,
|
|
183
|
+
isCurrent: isCurrent(i + 1),
|
|
184
|
+
month: dr.month,
|
|
185
|
+
year: dr.year,
|
|
186
|
+
}));
|
|
187
|
+
|
|
188
|
+
// 下个月信息:填充到当月最后一天所在周的周六
|
|
189
|
+
const nextDaysYear = dr.month === 12 ? dr.year + 1 : dr.year;
|
|
190
|
+
const lastDayOfMonth = dayjs(`${dr.year}-${dr.month}`).daysInMonth();
|
|
191
|
+
const lastDayWeekDay = dayjs(`${dr.year}-${dr.month}-${lastDayOfMonth}`).day();
|
|
192
|
+
const nextDays: CalendarItem[] = Array.from({ length: 6 - lastDayWeekDay }, (_, i) => ({
|
|
193
|
+
day: i + 1,
|
|
194
|
+
isCurrentMonth: false,
|
|
195
|
+
month: dr.month === 12 ? 1 : dr.month + 1,
|
|
196
|
+
year: nextDaysYear,
|
|
197
|
+
}));
|
|
198
|
+
|
|
199
|
+
// 总格数不足 42(6 行)时补齐
|
|
200
|
+
if (prevDays.length + currentDays.length + nextDays.length < 42) {
|
|
201
|
+
if (firstDayWeekDay === 0) {
|
|
202
|
+
// 当月第一天是周日,需在前面多补一行上月日期
|
|
203
|
+
const lastMonthDays = lastMonthDayjs.daysInMonth();
|
|
204
|
+
prevDays.unshift(...Array.from({ length: 7 }, (_, i) => ({
|
|
205
|
+
day: lastMonthDays - 6 + i,
|
|
206
|
+
isCurrentMonth: false,
|
|
207
|
+
month: lastMonth,
|
|
208
|
+
year: prevDaysYear,
|
|
209
|
+
})));
|
|
210
|
+
} else {
|
|
211
|
+
// 末尾补充下月日期,补足一行
|
|
212
|
+
const nextMonth = dateDayjs.add(1, 'month');
|
|
213
|
+
const nextMonthFirstDayWeek = nextMonth.set('date', 1).day();
|
|
214
|
+
const baseDay = nextMonthFirstDayWeek === 0 ? 0 : (6 - nextMonthFirstDayWeek);
|
|
215
|
+
nextDays.push(...Array.from({ length: 7 }, (_, i) => ({
|
|
216
|
+
day: i + baseDay + 1,
|
|
217
|
+
isCurrentMonth: false,
|
|
218
|
+
month: dr.month === 12 ? 1 : dr.month + 1,
|
|
219
|
+
year: nextDaysYear,
|
|
220
|
+
})));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// 按 7 天一组切分为二维数组
|
|
225
|
+
const allDays = [...prevDays, ...currentDays, ...nextDays];
|
|
226
|
+
const result: CalendarItem[][] = [];
|
|
227
|
+
for (let i = 0; i < allDays.length; i += 7) {
|
|
228
|
+
result.push(allDays.slice(i, i + 7) as CalendarItem[]);
|
|
229
|
+
}
|
|
230
|
+
return result;
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
/** 切换到上一个月 */
|
|
234
|
+
const toPrevMonth = () => {
|
|
235
|
+
if (!dateRef.value) return;
|
|
236
|
+
dateRef.value.month -= 1;
|
|
237
|
+
if (dateRef.value.month === 0) {
|
|
238
|
+
dateRef.value.month = 12;
|
|
239
|
+
dateRef.value.year -= 1;
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
/** 切换到下一个月 */
|
|
244
|
+
const toNextMonth = () => {
|
|
245
|
+
if (!dateRef.value) return;
|
|
246
|
+
dateRef.value.month += 1;
|
|
247
|
+
if (dateRef.value.month === 13) {
|
|
248
|
+
dateRef.value.month = 1;
|
|
249
|
+
dateRef.value.year += 1;
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
/** 切换到下一年 */
|
|
254
|
+
const toNextYear = () => {
|
|
255
|
+
if (!dateRef.value) return;
|
|
256
|
+
dateRef.value.year += 1;
|
|
257
|
+
// 年份选择模式下,若当前年不在范围内则重新生成年份列表
|
|
258
|
+
if (calendarTypeRef.value === 'year') {
|
|
259
|
+
if (!yearsRef.value.includes(dateRef.value.year)) {
|
|
260
|
+
const startYear = dateRef.value.year;
|
|
261
|
+
yearsRef.value = Array.from({ length: 12 }, (_, i) => startYear + i);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
/** 切换到上一年 */
|
|
267
|
+
const toPrevYear = () => {
|
|
268
|
+
if (!dateRef.value) return;
|
|
269
|
+
dateRef.value.year -= 1;
|
|
270
|
+
if (calendarTypeRef.value === 'year') {
|
|
271
|
+
if (!yearsRef.value.includes(dateRef.value.year)) {
|
|
272
|
+
const startYear = dateRef.value.year - 11;
|
|
273
|
+
yearsRef.value = Array.from({ length: 12 }, (_, i) => startYear + i);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* 根据日历格数据生成格式化后的日期字符串值。
|
|
280
|
+
* datetime 模式下会同时拼接当前时间状态。
|
|
281
|
+
*/
|
|
282
|
+
const getValue = (item: CalendarItem): string => {
|
|
283
|
+
let d = dayjs()
|
|
284
|
+
.set('year', item.year)
|
|
285
|
+
.set('month', (item.month as number) - 1)
|
|
286
|
+
.set('date', Number(item.day));
|
|
287
|
+
// datetime 模式下附加时间部分
|
|
288
|
+
if (props.type === 'datetime') {
|
|
289
|
+
d = d
|
|
290
|
+
.set('hour', timeRef.value.hours)
|
|
291
|
+
.set('minute', timeRef.value.minutes)
|
|
292
|
+
.set('second', timeRef.value.seconds);
|
|
293
|
+
}
|
|
294
|
+
return d.format(format.value);
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* 生成 datetime 模式的完整值(使用当前 dateRef + timeRef)。
|
|
299
|
+
* 在用户点击「确定」时调用。
|
|
300
|
+
*/
|
|
301
|
+
const getDateTimeValue = (): string => {
|
|
302
|
+
return dayjs()
|
|
303
|
+
.set('year', dateRef.value.year)
|
|
304
|
+
.set('month', dateRef.value.month - 1)
|
|
305
|
+
.set('date', dateRef.value.day)
|
|
306
|
+
.set('hour', timeRef.value.hours)
|
|
307
|
+
.set('minute', timeRef.value.minutes)
|
|
308
|
+
.set('second', timeRef.value.seconds)
|
|
309
|
+
.format(format.value);
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
/** datetime 模式:选择小时 */
|
|
313
|
+
const selectHour = (hour: number) => {
|
|
314
|
+
timeRef.value = { ...timeRef.value, hours: hour };
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
/** datetime 模式:选择分钟 */
|
|
318
|
+
const selectMinute = (minute: number) => {
|
|
319
|
+
timeRef.value = { ...timeRef.value, minutes: minute };
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
/** datetime 模式:选择秒 */
|
|
323
|
+
const selectSecond = (second: number) => {
|
|
324
|
+
timeRef.value = { ...timeRef.value, seconds: second };
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* 点击头部年份文字 → 切换到年份选择模式,生成以 year 为中心的 12 个年份列表。
|
|
329
|
+
*/
|
|
330
|
+
const clickCurrentYear = (year: number) => {
|
|
331
|
+
calendarTypeRef.value = 'year';
|
|
332
|
+
const startYear = year - 6;
|
|
333
|
+
const endYear = year + 5;
|
|
334
|
+
yearsRef.value = Array.from({ length: endYear - startYear + 1 }, (_, i) => startYear + i);
|
|
335
|
+
};
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* 点击年份列表中某一年 → 更新 dateRef.year 并根据 type 切换模式。
|
|
339
|
+
*/
|
|
340
|
+
const clickYearItem = (year: number) => {
|
|
341
|
+
if (!dateRef.value) return;
|
|
342
|
+
dateRef.value.year = year;
|
|
343
|
+
if (props.type === 'date' || props.type === 'datetime') calendarTypeRef.value = 'date';
|
|
344
|
+
else if (props.type === 'month') calendarTypeRef.value = 'month';
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* 点击头部月份文字 → 切换到月份选择模式。
|
|
349
|
+
*/
|
|
350
|
+
const clickCurrentMonth = (_month: number) => {
|
|
351
|
+
calendarTypeRef.value = 'month';
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* 点击月份列表中某一月 → 更新 dateRef.month,若 type="date" 则切换回日期模式。
|
|
356
|
+
*/
|
|
357
|
+
const clickMonthItem = (month: number) => {
|
|
358
|
+
dateRef.value.month = month;
|
|
359
|
+
if (props.type === 'date' || props.type === 'datetime') calendarTypeRef.value = 'date';
|
|
360
|
+
};
|
|
361
|
+
|
|
362
|
+
return {
|
|
363
|
+
// 状态
|
|
364
|
+
dateRef,
|
|
365
|
+
displayValue,
|
|
366
|
+
spanClass,
|
|
367
|
+
currentRef,
|
|
368
|
+
calendarTypeRef,
|
|
369
|
+
yearsRef,
|
|
370
|
+
// datetime 时间状态
|
|
371
|
+
timeRef,
|
|
372
|
+
// 方法
|
|
373
|
+
updateDateRef,
|
|
374
|
+
getCalendar,
|
|
375
|
+
toPrevMonth,
|
|
376
|
+
toNextMonth,
|
|
377
|
+
toPrevYear,
|
|
378
|
+
toNextYear,
|
|
379
|
+
getValue,
|
|
380
|
+
getDateTimeValue,
|
|
381
|
+
clickCurrentYear,
|
|
382
|
+
clickYearItem,
|
|
383
|
+
clickCurrentMonth,
|
|
384
|
+
clickMonthItem,
|
|
385
|
+
// datetime 时间选择方法
|
|
386
|
+
selectHour,
|
|
387
|
+
selectMinute,
|
|
388
|
+
selectSecond,
|
|
389
|
+
// 工具
|
|
390
|
+
toDayjs,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description divider api
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/27
|
|
5
|
+
* @version v1.1.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
import { MCOPO, MPropType } from '../../types/props';
|
|
10
|
+
import { DividerProps } from './props';
|
|
11
|
+
|
|
12
|
+
export const props: MCOPO<DividerProps> = {
|
|
13
|
+
vertical: { type: Boolean, default: false },
|
|
14
|
+
align: { type: String as unknown as MPropType<NonNullable<DividerProps['align']>>, default: 'center' },
|
|
15
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description divider core 导出
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/25
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
import { props } from './api';
|
|
10
|
+
|
|
11
|
+
export const DividerCore = {
|
|
12
|
+
props,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export type { DividerProps } from './props';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description divider api type
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/27
|
|
5
|
+
* @version v1.1.0
|
|
6
|
+
*
|
|
7
|
+
* @name m-divider
|
|
8
|
+
* @docDescription Divider component with shuimo-ui style.
|
|
9
|
+
* 水墨组件的分割线组件。
|
|
10
|
+
* @docUrl https://shuimo.design/divider
|
|
11
|
+
*
|
|
12
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
export declare type DividerProps = {
|
|
16
|
+
/**
|
|
17
|
+
* @description divider is vertical or not
|
|
18
|
+
* 是否为垂直分割线
|
|
19
|
+
* @type boolean
|
|
20
|
+
* @default false
|
|
21
|
+
*/
|
|
22
|
+
vertical?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* @description text alignment when slot content exists (horizontal only)
|
|
25
|
+
* 内容文字对齐方式,仅水平分割线有效
|
|
26
|
+
* @type 'left' | 'center' | 'right'
|
|
27
|
+
* @default 'center'
|
|
28
|
+
*/
|
|
29
|
+
align?: 'left' | 'center' | 'right';
|
|
30
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description dropdown 运行时 props
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/26
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
import { MCOPO, MPropType } from '../../types/props';
|
|
10
|
+
import { DropdownItemProps, DropdownProps } from './props';
|
|
11
|
+
|
|
12
|
+
export const props: MCOPO<DropdownProps> = {
|
|
13
|
+
trigger: {
|
|
14
|
+
type: String as MPropType<'click' | 'hover'>,
|
|
15
|
+
default: 'click',
|
|
16
|
+
},
|
|
17
|
+
placement: {
|
|
18
|
+
type: String as MPropType<'bottom' | 'bottom-start' | 'bottom-end' | 'top' | 'top-start' | 'top-end'>,
|
|
19
|
+
default: 'bottom',
|
|
20
|
+
},
|
|
21
|
+
disabled: { type: Boolean, default: false },
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const itemProps: MCOPO<DropdownItemProps> = {
|
|
25
|
+
label: { type: String, default: '' },
|
|
26
|
+
disabled: { type: Boolean, default: false },
|
|
27
|
+
divided: { type: Boolean, default: false },
|
|
28
|
+
command: { type: [String, Number], default: undefined },
|
|
29
|
+
type: {
|
|
30
|
+
type: String as MPropType<'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info'>,
|
|
31
|
+
default: 'default',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description dropdown core 导出
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/26
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
import { props, itemProps } from './api';
|
|
10
|
+
import { useDropdown } from './useDropdown';
|
|
11
|
+
|
|
12
|
+
export const DropdownCore = {
|
|
13
|
+
props,
|
|
14
|
+
itemProps,
|
|
15
|
+
useDropdown,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export type { DropdownProps, DropdownItemProps } from './props';
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description dropdown api type
|
|
3
|
+
* @author 阿怪
|
|
4
|
+
* @date 2026/2/26
|
|
5
|
+
* @version v1.0.0
|
|
6
|
+
*
|
|
7
|
+
* 江湖的业务千篇一律,复杂的代码好几百行。
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export declare type DropdownProps = {
|
|
11
|
+
/**
|
|
12
|
+
* @description 触发方式
|
|
13
|
+
* @type 'click' | 'hover'
|
|
14
|
+
* @default 'click'
|
|
15
|
+
*/
|
|
16
|
+
trigger?: 'click' | 'hover';
|
|
17
|
+
/**
|
|
18
|
+
* @description 弹出位置
|
|
19
|
+
* @type string
|
|
20
|
+
* @default 'bottom'
|
|
21
|
+
*/
|
|
22
|
+
placement?: 'bottom' | 'bottom-start' | 'bottom-end' | 'top' | 'top-start' | 'top-end';
|
|
23
|
+
/**
|
|
24
|
+
* @description 是否禁用
|
|
25
|
+
* @type boolean
|
|
26
|
+
* @default false
|
|
27
|
+
*/
|
|
28
|
+
disabled?: boolean;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export declare type DropdownItemProps = {
|
|
32
|
+
/**
|
|
33
|
+
* @description 选项文本
|
|
34
|
+
* @type string
|
|
35
|
+
*/
|
|
36
|
+
label?: string;
|
|
37
|
+
/**
|
|
38
|
+
* @description 是否禁用该选项
|
|
39
|
+
* @type boolean
|
|
40
|
+
* @default false
|
|
41
|
+
*/
|
|
42
|
+
disabled?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* @description 是否在此项上方显示分割线
|
|
45
|
+
* @type boolean
|
|
46
|
+
* @default false
|
|
47
|
+
*/
|
|
48
|
+
divided?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* @description 点击触发的指令值
|
|
51
|
+
* @type string | number
|
|
52
|
+
*/
|
|
53
|
+
command?: string | number;
|
|
54
|
+
/**
|
|
55
|
+
* @description 选项色彩类型
|
|
56
|
+
* @type 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info'
|
|
57
|
+
* @default 'default'
|
|
58
|
+
*/
|
|
59
|
+
type?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info';
|
|
60
|
+
};
|