components.d.ts 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486
  1. import { CSSProperties, VNodeProps, VNode } from 'vue'
  2. import {
  3. InputProps,
  4. AutocompleteProps,
  5. InputNumberProps,
  6. CascaderProps,
  7. CascaderNode,
  8. CascaderValue
  9. } from 'element-plus'
  10. import { ElementPlusSize, ElementPlusInfoType } from './elementPlus.d'
  11. export enum ComponentNameEnum {
  12. RADIO = 'Radio',
  13. RADIO_BUTTON = 'RadioButton',
  14. CHECKBOX = 'Checkbox',
  15. CHECKBOX_BUTTON = 'CheckboxButton',
  16. INPUT = 'Input',
  17. AUTOCOMPLETE = 'Autocomplete',
  18. INPUT_NUMBER = 'InputNumber',
  19. SELECT = 'Select',
  20. CASCADER = 'Cascader',
  21. SWITCH = 'Switch',
  22. SLIDER = 'Slider',
  23. TIME_PICKER = 'TimePicker',
  24. DATE_PICKER = 'DatePicker',
  25. RATE = 'Rate',
  26. COLOR_PICKER = 'ColorPicker',
  27. TRANSFER = 'Transfer',
  28. DIVIDER = 'Divider',
  29. TIME_SELECT = 'TimeSelect',
  30. SELECT_V2 = 'SelectV2',
  31. INPUT_PASSWORD = 'InputPassword',
  32. EDITOR = 'Editor'
  33. }
  34. type CamelCaseComponentName = keyof typeof ComponentNameEnum extends infer K
  35. ? K extends string
  36. ? K extends `${infer A}_${infer B}`
  37. ? `${Capitalize<Lowercase<A>>}${Capitalize<Lowercase<B>>}`
  38. : Capitalize<Lowercase<K>>
  39. : never
  40. : never
  41. export type ComponentName = CamelCaseComponentName
  42. export interface InputComponentProps {
  43. value?: string | number
  44. maxlength?: number | string
  45. minlength?: number | string
  46. showWordLimit?: boolean
  47. placeholder?: string
  48. clearable?: boolean
  49. formatter?: (value: string | number) => string
  50. parser?: (value: string) => string
  51. showPassword?: boolean
  52. disabled?: boolean
  53. size?: ElementPlusSize
  54. prefixIcon?: string | JSX.Element
  55. suffixIcon?: string | JSX.Element
  56. type?: InputProps['type']
  57. rows?: number
  58. autosize?: boolean | { Pows?: numer; maxRows?: number }
  59. autocomplete?: string
  60. name?: string
  61. readonly?: boolean
  62. max?: number | string
  63. min?: number | string
  64. step?: number | string
  65. resize?: InputProps['resize']
  66. autofocus?: boolean
  67. form?: string
  68. label?: string
  69. tabindex?: string | number
  70. validateEvent?: boolean
  71. inputStyle?: string | CSSProperties | CSSProperties[] | string[]
  72. on?: {
  73. blur?: (event: FocusEvent) => void
  74. focus?: (event: FocusEvent) => void
  75. change?: (value: string | number) => void
  76. clear?: () => void
  77. input?: (value: string | number) => void
  78. }
  79. slots?: {
  80. prefix?: (...args: any[]) => JSX.Element | null
  81. suffix?: (...args: any[]) => JSX.Element | null
  82. prepend?: (...args: any[]) => JSX.Element | null
  83. append?: (...args: any[]) => JSX.Element | null
  84. }
  85. style?: CSSProperties
  86. }
  87. export interface AutocompleteComponentProps {
  88. value?: string
  89. placeholder?: string
  90. clearable?: boolean
  91. disabled?: boolean
  92. valueKey?: string
  93. debounce?: number
  94. placement?: AutocompleteProps['placement']
  95. fetchSuggestions?: (queryString: string, callback: (data: string[]) => void) => void
  96. triggerOnFocus?: boolean
  97. selectWhenUnmatched?: boolean
  98. name?: string
  99. label?: string
  100. hideLoading?: boolean
  101. popperClass?: string
  102. popperAppendToBody?: boolean
  103. teleported?: boolean
  104. highlightFirstItem?: boolean
  105. fitInputWidth?: boolean
  106. on?: {
  107. select?: (item: any) => void
  108. change?: (value: string | number) => void
  109. }
  110. slots?: {
  111. default?: (...args: any[]) => JSX.Element | null
  112. prefix?: (...args: any[]) => JSX.Element | null
  113. suffix?: (...args: any[]) => JSX.Element | null
  114. prepend?: (...args: any[]) => JSX.Element | null
  115. append?: (...args: any[]) => JSX.Element | null
  116. }
  117. style?: CSSProperties
  118. }
  119. export interface InputNumberComponentProps {
  120. value?: number
  121. min?: number
  122. max?: number
  123. step?: number
  124. stepStrictly?: boolean
  125. precision?: number
  126. size?: ElementPlusSize
  127. readonly?: boolean
  128. disabled?: boolean
  129. controls?: boolean
  130. controlsPosition?: InputNumberProps['controlsPosition']
  131. name?: string
  132. label?: string
  133. placeholder?: string
  134. id?: string
  135. valueOnClear?: number | null | 'min' | 'max'
  136. validateEvent?: boolean
  137. on?: {
  138. change?: (currentValue: number | undefined, oldValue: number | undefined) => void
  139. blur?: (event: FocusEvent) => void
  140. focus?: (event: FocusEvent) => void
  141. }
  142. style?: CSSProperties
  143. }
  144. export interface SelectOption {
  145. label?: string
  146. disabled?: boolean
  147. value?: any
  148. key?: string | number
  149. options?: SelectOption[]
  150. [key: string]: any
  151. }
  152. export interface SelectComponentProps {
  153. value?: string | number | boolean | Object
  154. multiple?: boolean
  155. disabled?: boolean
  156. valueKey?: string
  157. size?: ElementPlusSize
  158. clearable?: boolean
  159. collapseTags?: boolean
  160. collapseTagsTooltip?: number
  161. multipleLimit?: number
  162. name?: string
  163. effect?: string
  164. autocomplete?: string
  165. placeholder?: string
  166. filterable?: boolean
  167. allowCreate?: boolean
  168. filterMethod?: (query: string, item: any) => boolean
  169. remote?: boolean
  170. remoteMethod?: (query: string) => void
  171. remoteShowSuffix?: boolean
  172. loading?: boolean
  173. loadingText?: string
  174. noMatchText?: string
  175. noDataText?: string
  176. popperClass?: string
  177. reserveKeyword?: boolean
  178. defaultFirstOption?: boolean
  179. popperAppendToBody?: boolean
  180. teleported?: boolean
  181. persistent?: boolean
  182. automaticDropdown?: boolean
  183. clearIcon?: string | JSX.Element | null
  184. fitInputWidth?: boolean
  185. suffixIcon?: string | JSX.Element | null
  186. tagType?: 'success' | 'info' | 'warning' | 'danger'
  187. validateEvent?: boolean
  188. placement?:
  189. | 'top'
  190. | 'top-start'
  191. | 'top-end'
  192. | 'bottom'
  193. | 'bottom-start'
  194. | 'bottom-end'
  195. | 'left'
  196. | 'left-start'
  197. | 'left-end'
  198. | 'right'
  199. | 'right-start'
  200. | 'right-end'
  201. maxCollapseTags?: number
  202. /**
  203. * 数据源的字段别名
  204. */
  205. props?: {
  206. key?: string
  207. value?: string
  208. label?: string
  209. children?: string
  210. }
  211. on?: {
  212. change?: (value: string | number | boolean | Object) => void
  213. visibleChange?: (visible: boolean) => void
  214. removeTag?: (tag: any) => void
  215. clear?: () => void
  216. blur?: (event: FocusEvent) => void
  217. focus?: (event: FocusEvent) => void
  218. }
  219. slots?: {
  220. default?: (options: SelectOption[]) => JSX.Element[] | null
  221. optionGroupDefault?: (item: SelectOption) => JSX.Element
  222. optionDefault?: (option: SelectOption) => JSX.Element | null
  223. prefix?: (...args: any[]) => JSX.Element | null
  224. empty?: (...args: any[]) => JSX.Element | null
  225. }
  226. options?: SelectOption[]
  227. style?: CSSProperties
  228. }
  229. export interface SelectV2ComponentProps {
  230. value?: string | number | boolean | Object
  231. multiple?: boolean
  232. disabled?: boolean
  233. valueKey?: string
  234. size?: ElementPlusSize
  235. clearable?: boolean
  236. clearIcon?: string | JSX.Element | null
  237. collapseTags?: boolean
  238. multipleLimit?: number
  239. name?: string
  240. effect?: string
  241. autocomplete?: string
  242. placeholder?: string
  243. filterable?: boolean
  244. allowCreate?: boolean
  245. reserveKeyword?: boolean
  246. noDataText?: string
  247. popperClass?: string
  248. teleported?: boolean
  249. persistent?: boolean
  250. popperOptions?: any
  251. automaticDropdown?: boolean
  252. height?: number
  253. scrollbarAlwaysOn?: boolean
  254. remote?: boolean
  255. remoteMethod?: (query: string) => void
  256. validateEvent?: boolean
  257. placement?: AutocompleteProps['placement']
  258. collapseTagsTooltip?: boolean
  259. on?: {
  260. change?: (value: string | number | boolean | Object) => void
  261. visibleChange?: (visible: boolean) => void
  262. removeTag?: (tag: any) => void
  263. clear?: () => void
  264. blur?: (event: FocusEvent) => void
  265. focus?: (event: FocusEvent) => void
  266. }
  267. options?: SelectOption[]
  268. slots?: {
  269. default?: (option: SelectOption) => JSX.Element | null
  270. }
  271. style?: CSSProperties
  272. }
  273. export interface CascaderComponentProps {
  274. value?: string | number | string[] | number[] | any
  275. options?: Record<string, unknown>[]
  276. props?: CascaderProps
  277. size?: ElementPlusSize
  278. placeholder?: string
  279. disabled?: boolean
  280. clearable?: boolean
  281. showAllLevels?: boolean
  282. collapseTags?: boolean
  283. collapseTagsTooltip?: boolean
  284. separator?: string
  285. filterable?: boolean
  286. filterMethod?: (node: CascaderNode, keyword: string) => boolean
  287. debounce?: number
  288. beforeFilter?: (value: string) => boolean
  289. popperClass?: string
  290. teleported?: boolean
  291. tagType?: ElementPlusInfoType
  292. validateEvent?: boolean
  293. on?: {
  294. change?: (value: CascaderValue) => void
  295. expandChange?: (value: CascaderValue) => void
  296. blur?: (event: FocusEvent) => void
  297. focus?: (event: FocusEvent) => void
  298. visibleChange?: (value: boolean) => void
  299. removeTag?: (value: CascaderNode['valueByOption']) => void
  300. }
  301. slots?: {
  302. default?: (...args: any[]) => JSX.Element | null
  303. empty?: (...args: any[]) => JSX.Element | null
  304. }
  305. style?: CSSProperties
  306. }
  307. export interface SwitchComponentProps {
  308. value?: boolean | string | number
  309. disabled?: boolean
  310. loading?: boolean
  311. size?: ElementPlusSize
  312. width?: number | string
  313. inlinePrompt?: boolean
  314. activeIcon?: string | JSX.Element | null
  315. inactiveIcon?: string | JSX.Element | null
  316. activeText?: string
  317. inactiveText?: string
  318. activeValue?: boolean | string | number
  319. inactiveValue?: boolean | string | number
  320. name?: string
  321. validateEvent?: boolean
  322. beforeChange?: (value: boolean) => boolean | Promise<boolean>
  323. on?: {
  324. change?: (value: boolean | string | number) => void
  325. }
  326. style?: CSSProperties
  327. }
  328. export interface RateComponentProps {
  329. value?: number
  330. max?: number
  331. size?: ElementPlusSize
  332. disabled?: boolean
  333. allowHalf?: boolean
  334. lowThreshold?: number
  335. highThreshold?: number
  336. colors?: string[] | Record<number, string>
  337. voidColor?: string
  338. disabledVoidColor?: string
  339. icons?: string[] | JSX.Element[] | Record<number, string | JSX.Element>
  340. voidIcon?: string | JSX.Element
  341. disabledVoidIcon?: string | JSX.Element
  342. showText?: boolean
  343. showScore?: boolean
  344. textColor?: string
  345. texts?: string[]
  346. scoreTemplate?: string
  347. clearable?: boolean
  348. id?: string
  349. label?: string
  350. on?: {
  351. change?: (value: number) => void
  352. }
  353. style?: CSSProperties
  354. }
  355. export interface ColorPickerComponentProps {
  356. value?: string
  357. disabled?: boolean
  358. size?: ElementPlusSize
  359. showAlpha?: boolean
  360. colorFormat?: 'hsl' | 'hsv' | 'hex' | 'rgb' | 'hex' | 'rgb'
  361. predefine?: string[]
  362. validateEvent?: boolean
  363. tabindex?: number | string
  364. label?: string
  365. id?: string
  366. on?: {
  367. change?: (value: string) => void
  368. activeChange?: (value: string) => void
  369. }
  370. style?: CSSProperties
  371. }
  372. export interface TransferComponentProps {
  373. value?: any[]
  374. data?: any[]
  375. filterable?: boolean
  376. filterPlaceholder?: string
  377. filterMethod?: (query: string, item: any) => boolean
  378. targetOrder?: string
  379. titles?: string[]
  380. buttonTexts?: string[]
  381. renderContent?: (
  382. h: (type: string, props: VNodeProps | null, children?: string) => VNode,
  383. option: any
  384. ) => JSX.Element
  385. format?: {
  386. noChecked?: string
  387. hasChecked?: string
  388. }
  389. props?: {
  390. label?: string
  391. key?: string
  392. disabled?: string
  393. }
  394. leftDefaultChecked?: any[]
  395. rightDefaultChecked?: any[]
  396. validateEvent?: boolean
  397. on?: {
  398. change?: (
  399. value: number | string,
  400. direction: 'left' | 'right',
  401. movedKeys: string[] | number[]
  402. ) => void
  403. leftCheckChange?: (value: any[]) => void
  404. rightCheckChange?: (value: any[]) => void
  405. }
  406. slots?: {
  407. default?: (...args: any[]) => JSX.Element | null
  408. leftFooter?: (...args: any[]) => JSX.Element | null
  409. rightFooter?: (...args: any[]) => JSX.Element | null
  410. }
  411. style?: CSSProperties
  412. }
  413. export interface RadioOption {
  414. label?: string
  415. value?: string | number | boolean
  416. disabled?: boolean
  417. [key: string]: any
  418. }
  419. export interface RadioComponentProps {
  420. value?: string | number | boolean
  421. label?: string | number | boolean
  422. disabled?: boolean
  423. border?: boolean
  424. size?: ElementPlusSize
  425. options?: RadioOption[]
  426. /**
  427. * 数据源的字段别名
  428. */
  429. props: {
  430. label?: string
  431. value?: string
  432. disabled?: string
  433. }
  434. name?: string
  435. on?: {
  436. change?: (value: string | number | boolean) => void
  437. }
  438. slots?: {
  439. default?: (...args: any[]) => JSX.Element | null
  440. }
  441. }
  442. export interface ColProps {
  443. span?: number
  444. xs?: number
  445. sm?: number
  446. md?: number
  447. lg?: number
  448. xl?: number
  449. tag?: string
  450. }
  451. export interface ComponentOptions extends Recordable {
  452. label?: string
  453. value?: any
  454. disabled?: boolean
  455. key?: string | number
  456. children?: ComponentOptions[]
  457. options?: ComponentOptions[]
  458. }
  459. export interface ComponentOptionsAlias {
  460. labelField?: string
  461. valueField?: string
  462. }
  463. export interface ComponentProps extends Recordable {
  464. optionsAlias?: ComponentOptionsAlias
  465. options?: ComponentOptions[]
  466. optionsSlot?: boolean
  467. }