components.d.ts 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. import { CSSProperties } from 'vue'
  2. import { InputProps, AutocompleteProps, InputNumberProps } from 'element-plus'
  3. export enum ComponentNameEnum {
  4. RADIO = 'Radio',
  5. RADIO_BUTTON = 'RadioButton',
  6. CHECKBOX = 'Checkbox',
  7. CHECKBOX_BUTTON = 'CheckboxButton',
  8. INPUT = 'Input',
  9. AUTOCOMPLETE = 'Autocomplete',
  10. INPUT_NUMBER = 'InputNumber',
  11. SELECT = 'Select',
  12. CASCADER = 'Cascader',
  13. SWITCH = 'Switch',
  14. SLIDER = 'Slider',
  15. TIME_PICKER = 'TimePicker',
  16. DATE_PICKER = 'DatePicker',
  17. RATE = 'Rate',
  18. COLOR_PICKER = 'ColorPicker',
  19. TRANSFER = 'Transfer',
  20. DIVIDER = 'Divider',
  21. TIME_SELECT = 'TimeSelect',
  22. SELECT_V2 = 'SelectV2',
  23. INPUT_PASSWORD = 'InputPassword',
  24. EDITOR = 'Editor'
  25. }
  26. type CamelCaseComponentName = keyof typeof ComponentNameEnum extends infer K
  27. ? K extends string
  28. ? K extends `${infer A}_${infer B}`
  29. ? `${Capitalize<Lowercase<A>>}${Capitalize<Lowercase<B>>}`
  30. : Capitalize<Lowercase<K>>
  31. : never
  32. : never
  33. export type ComponentName = CamelCaseComponentName
  34. export interface InputComponentProps {
  35. value?: string | number
  36. maxlength?: number | string
  37. minlength?: number | string
  38. showWordLimit?: boolean
  39. placeholder?: string
  40. clearable?: boolean
  41. formatter?: (value: string | number) => string
  42. parser?: (value: string) => string
  43. showPassword?: boolean
  44. disabled?: boolean
  45. size?: InputProps['size']
  46. prefixIcon?: string | JSX.Element | ((formData: any) => string | JSX.Element)
  47. suffixIcon?: string | JSX.Element | ((formData: any) => string | JSX.Element)
  48. type?: InputProps['type']
  49. rows?: number
  50. autosize?: boolean | { Pows?: numer; maxRows?: number }
  51. autocomplete?: string
  52. name?: string
  53. readonly?: boolean
  54. max?: number | string
  55. min?: number | string
  56. step?: number | string
  57. resize?: InputProps['resize']
  58. autofocus?: boolean
  59. form?: string
  60. label?: string
  61. tabindex?: string | number
  62. validateEvent?: boolean
  63. inputStyle?: string | CSSProperties | CSSProperties[] | string[]
  64. on?: {
  65. blur?: (event: FocusEvent) => void
  66. focus?: (event: FocusEvent) => void
  67. change?: (value: string | number) => void
  68. clear?: () => void
  69. input?: (value: string | number) => void
  70. }
  71. slots?: {
  72. prefix?: JSX.Element | null | ((formData: any) => JSX.Element | null)
  73. suffix?: JSX.Element | null | ((formData: any) => JSX.Element | null)
  74. prepend?: JSX.Element | null | ((formData: any) => JSX.Element | null)
  75. append?: JSX.Element | null | ((formData: any) => JSX.Element | null)
  76. }
  77. style?: CSSProperties
  78. }
  79. export interface AutocompleteComponentProps {
  80. value?: string
  81. placeholder?: string
  82. clearable?: boolean
  83. disabled?: boolean
  84. valueKey?: string
  85. debounce?: number
  86. placement?: AutocompleteProps['placement']
  87. fetchSuggestions?: (queryString: string, callback: (data: string[]) => void) => void
  88. triggerOnFocus?: boolean
  89. selectWhenUnmatched?: boolean
  90. name?: string
  91. label?: string
  92. hideLoading?: boolean
  93. popperClass?: string
  94. popperAppendToBody?: boolean
  95. teleported?: boolean
  96. highlightFirstItem?: boolean
  97. fitInputWidth?: boolean
  98. on?: {
  99. select?: (item: any) => void
  100. change?: (value: string | number) => void
  101. }
  102. slots?: {
  103. default?: JSX.Element | null | ((formData: any) => JSX.Element | null)
  104. prefix?: JSX.Element | null | ((formData: any) => JSX.Element | null)
  105. suffix?: JSX.Element | null | ((formData: any) => JSX.Element | null)
  106. prepend?: JSX.Element | null | ((formData: any) => JSX.Element | null)
  107. append?: JSX.Element | null | ((formData: any) => JSX.Element | null)
  108. }
  109. style?: CSSProperties
  110. }
  111. export interface InputNumberComponentProps {
  112. value?: number
  113. min?: number
  114. max?: number
  115. step?: number
  116. stepStrictly?: boolean
  117. precision?: number
  118. size?: InputNumberProps['size']
  119. readonly?: boolean
  120. disabled?: boolean
  121. controls?: boolean
  122. controlsPosition?: InputNumberProps['controlsPosition']
  123. name?: string
  124. label?: string
  125. placeholder?: string
  126. id?: string
  127. valueOnClear?: number | null | 'min' | 'max'
  128. validateEvent?: boolean
  129. on?: {
  130. change?: (currentValue: number | undefined, oldValue: number | undefined) => void
  131. blur?: (event: FocusEvent) => void
  132. focus?: (event: FocusEvent) => void
  133. }
  134. style?: CSSProperties
  135. }
  136. interface SelectOption {
  137. label?: string
  138. disabled?: boolean
  139. value?: any
  140. key?: string | number
  141. options?: SelectOption[]
  142. [key: string]: any
  143. }
  144. export interface SelectComponentProps {
  145. value?: Array | string | number | boolean | Object
  146. multiple?: boolean
  147. disabled?: boolean
  148. valueKey?: string
  149. size?: InputNumberProps['size']
  150. clearable?: boolean
  151. collapseTags?: boolean
  152. collapseTagsTooltip?: number
  153. multipleLimit?: number
  154. name?: string
  155. effect?: string
  156. autocomplete?: string
  157. placeholder?: string
  158. filterable?: boolean
  159. allowCreate?: boolean
  160. filterMethod?: (query: string, item: any) => boolean
  161. remote?: boolean
  162. remoteMethod?: (query: string) => void
  163. remoteShowSuffix?: boolean
  164. loading?: boolean
  165. loadingText?: string
  166. noMatchText?: string
  167. noDataText?: string
  168. popperClass?: string
  169. reserveKeyword?: boolean
  170. defaultFirstOption?: boolean
  171. popperAppendToBody?: boolean
  172. teleported?: boolean
  173. persistent?: boolean
  174. automaticDropdown?: boolean
  175. clearIcon?: string | JSX.Element | ((formData: any) => string | JSX.Element)
  176. fitInputWidth?: boolean
  177. suffixIcon?: string | JSX.Element | ((formData: any) => string | JSX.Element)
  178. tagType?: 'success' | 'info' | 'warning' | 'danger'
  179. validateEvent?: boolean
  180. placement?:
  181. | 'top'
  182. | 'top-start'
  183. | 'top-end'
  184. | 'bottom'
  185. | 'bottom-start'
  186. | 'bottom-end'
  187. | 'left'
  188. | 'left-start'
  189. | 'left-end'
  190. | 'right'
  191. | 'right-start'
  192. | 'right-end'
  193. maxCollapseTags?: number
  194. /**
  195. * label别名
  196. */
  197. labelAlias?: string
  198. /**
  199. * value别名
  200. */
  201. valueAlias?: string
  202. /**
  203. * key别名
  204. */
  205. keyAlias?: string
  206. on?: {
  207. change?: (value: string | number | boolean | Object) => void
  208. visibleChange?: (visible: boolean) => void
  209. removeTag?: (tag: any) => void
  210. clear?: () => void
  211. blur?: (event: FocusEvent) => void
  212. focus?: (event: FocusEvent) => void
  213. }
  214. slots?: {
  215. default?: (options: SelectOption[]) => JSX.Element[] | null
  216. optionGroupDefault?: (item: SelectOption) => JSX.Element
  217. optionDefault?: (option: SelectOption) => JSX.Element | null
  218. prefix?: JSX.Element | null | ((formData: any) => JSX.Element | null)
  219. empty?: JSX.Element | null | ((formData: any) => JSX.Element | null)
  220. }
  221. options?: SelectOption[]
  222. style?: CSSProperties
  223. }
  224. export interface ColProps {
  225. span?: number
  226. xs?: number
  227. sm?: number
  228. md?: number
  229. lg?: number
  230. xl?: number
  231. tag?: string
  232. }
  233. export interface ComponentOptions extends Recordable {
  234. label?: string
  235. value?: any
  236. disabled?: boolean
  237. key?: string | number
  238. children?: ComponentOptions[]
  239. options?: ComponentOptions[]
  240. }
  241. export interface ComponentOptionsAlias {
  242. labelField?: string
  243. valueField?: string
  244. }
  245. export interface ComponentProps extends Recordable {
  246. optionsAlias?: ComponentOptionsAlias
  247. options?: ComponentOptions[]
  248. optionsSlot?: boolean
  249. }