import { AsyncDataProps, AsyncDataPropsEmits, AsyncDataPropsExpose } from '../../hooks/useGetAsyncData'; import { Component } from 'vue'; export type SelectValueType = string | number | boolean | Array | object; export interface OptionItem { value: SelectValueType; label: string | number; disabled?: boolean; component?: Component; [key: string]: any; } export interface SelectProps extends Partial, 'defaultData'>> { /** * 与派发SELECT:CHANGE:ROWS事件有关 */ name?: string; /** * 多选 */ multiple?: boolean; /** * 默认的Options, 会与远程获取到的Options合并,主要场景是编辑回显 */ defaultOptions?: OptionItem[]; /** * select下拉组件的选项 */ options?: OptionItem[]; /** * 可搜索 */ filterable?: boolean; /** * 远程搜索 */ remoteFilter?: boolean; /** * 远程数据获取时机 * - remoteFilter = true 时 popper-visible 会重新请求 * - remoteFilter = false 时 mount: 组件挂载(默认);popper-visible: 弹框第一次显示 */ obtainDataNode?: 'mount' | 'popper-visible'; /** * 组件大小 */ size?: 'large' | 'small' | 'default'; /** * 选择Option项, 也是使用value作为匹配规则 */ selectOption?: boolean; } export type SelectExpose = { focus: () => void; blur: () => void; } & AsyncDataPropsExpose; export type SelectEmits = { /** * 下拉框出现/隐藏时触发 */ visibleChange: [visible: boolean]; } & AsyncDataPropsEmits; export type SelectSlot = { /** 默认插槽内容, 默认插槽存在时 options, defaultOptions 选项无效 */ default: () => any; /** 下拉列表顶部的内容 */ header: () => any; /** 下拉列表底部的内容 */ footer: () => any; /** Select 组件头部内容 */ prefix: () => any; /** 无选项时的列表 远程搜索是会传递错误信息 */ empty: (props: { error: any; }) => any; /** select 组件自定义标签内容 */ tag: () => any; /** select 组件自定义 loading内容 */ loading: () => any; /** select 组件自定义标签内容 */ label: () => any; };