table.d.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. import type { TagProps, ButtonType, ElForm, FormInstance, ButtonProps } from 'element-plus'
  2. import { Component, ComponentPublicInstance } from 'vue'
  3. import Table from '/@/components/table/index.vue'
  4. import { TableColumnCtx } from 'element-plus/es/components/table/src/table-column/defaults'
  5. import type { PopconfirmProps } from 'element-plus'
  6. import { Mutable } from 'element-plus/es/utils'
  7. declare global {
  8. /* baTable */
  9. interface BaTable {
  10. // 表格 ref,通常在 页面onMounted 时赋值
  11. ref?: typeof Table
  12. // 表格对应数据表的主键字段
  13. pk?: string
  14. // 表格数据,通过getIndex加载
  15. data?: TableRow[]
  16. // 路由 remark,后台菜单规则备注信息
  17. remark?: string | null
  18. // 表格加载状态
  19. loading?: boolean
  20. // 当前选中行
  21. selection?: TableRow[]
  22. // 表格列定义
  23. column: TableColumn[]
  24. // 数据总量
  25. total?: number
  26. // 字段搜索,快速搜索,分页等数据
  27. filter?: {
  28. page?: number
  29. limit?: number
  30. order?: string
  31. quick_search?: string
  32. search?: comSearchData[]
  33. [key: string]: any
  34. }
  35. // 默认排序字段和排序方式
  36. defaultOrder?: { prop: string; order: string }
  37. // 拖动排序限位字段:例如拖动行pid=1,那么拖动目的行pid也需要为1
  38. dragSortLimitField?: string
  39. // 接受url的query参数并自动触发通用搜索
  40. acceptQuery?: boolean
  41. // 显示公共搜索
  42. showComSearch?: boolean
  43. // 不需要'双击编辑'的字段,type=selection的列为 undefined
  44. dblClickNotEditColumn?: (string | undefined)[]
  45. // 是否展开所有子项,树状表格专用属性
  46. expandAll?: boolean
  47. // 表格扩展数据,随意定义,以便一些自定义数据可以随baTable实例传递
  48. extend?: anyObj
  49. }
  50. interface TableRenderPublicInstance extends ComponentPublicInstance {
  51. $attrs: {
  52. renderValue: any
  53. renderRow: TableRow
  54. renderField: TableColumn
  55. }
  56. }
  57. /* baTableForm */
  58. interface BaTableForm {
  59. // 表单ref,实例化表格时通常无需传递
  60. ref?: InstanceType<typeof ElForm> | undefined
  61. // 表单项label的宽度
  62. labelWidth?: number
  63. // 当前操作:add=添加,edit=编辑
  64. operate?: string
  65. // 被操作数据ID,支持批量编辑:add=[0],edit=[1,2,n]
  66. operateIds?: string[]
  67. // 表单数据,内含用户输入
  68. items?: anyObj
  69. // 提交按钮状态
  70. submitLoading?: boolean
  71. // 默认表单数据(添加时)
  72. defaultItems?: anyObj
  73. // 表单加载状态
  74. loading?: boolean
  75. // 表单扩展数据,随意定义,以便一些自定义数据可以随baTable实例传递
  76. extend?: anyObj
  77. }
  78. /* BaTable前置处理函数(前置埋点) */
  79. interface BaTableBefore {
  80. // 获取表格数据前
  81. getIndex?: () => boolean | void
  82. // 删除前
  83. postDel?: ({ ids }: { ids: string[] }) => boolean | void
  84. // 编辑请求前
  85. requestEdit?: ({ id }: { id: string }) => boolean | void
  86. // 双击表格具体操作执行前
  87. onTableDblclick?: ({ row, column }: { row: TableRow; column: TableColumn }) => boolean | void
  88. // 表单切换前
  89. toggleForm?: ({ operate, operateIds }: { operate: string; operateIds: string[] }) => boolean | void
  90. // 表单提交前
  91. onSubmit?: ({ formEl, operate, items }: { formEl: FormInstance | undefined; operate: string; items: anyObj }) => boolean | void
  92. // 表格内事件响应前
  93. onTableAction?: ({ event, data }: { event: string; data: anyObj }) => boolean | void
  94. // 表格顶部菜单事件响应前
  95. onTableHeaderAction?: ({ event, data }: { event: string; data: anyObj }) => boolean | void
  96. // 表格初始化前
  97. mount?: () => boolean | void
  98. [key: string]: Function | undefined
  99. }
  100. /* BaTable后置处理函数(后置埋点) */
  101. interface BaTableAfter {
  102. // 表格数据请求后
  103. getIndex?: ({ res }: { res: ApiResponse }) => void
  104. // 删除请求后
  105. postDel?: ({ res }: { res: ApiResponse }) => void
  106. // 编辑表单请求后
  107. requestEdit?: ({ res }: { res: ApiResponse }) => void
  108. // 双击单元格操作执行后
  109. onTableDblclick?: ({ row, column }: { row: TableRow; column: TableColumn }) => void
  110. // 表单切换后
  111. toggleForm?: ({ operate, operateIds }: { operate: string; operateIds: string[] }) => void
  112. // 表单提交后
  113. onSubmit?: ({ res }: { res: ApiResponse }) => void
  114. // 表格事件响应后
  115. onTableAction?: ({ event, data }: { event: string; data: anyObj }) => void
  116. // 表格顶部事件菜单响应后
  117. onTableHeaderAction?: ({ event, data }: { event: string; data: anyObj }) => void
  118. [key: string]: Function | undefined
  119. }
  120. interface ComSearch {
  121. form: anyObj
  122. fieldData: Map<string, any>
  123. }
  124. /* 表格列 */
  125. interface TableColumn extends ElTableColumn {
  126. // 是否显示
  127. show?: boolean
  128. // 是否在下拉菜单的复选框显示 默认为true显示
  129. enableColumnDisplayControl?: boolean
  130. // 渲染为:icon|switch|image|images|tag|url|datetime|buttons|customTemplate|customRender
  131. render?:
  132. | 'icon'
  133. | 'switch'
  134. | 'image'
  135. | 'images'
  136. | 'tag'
  137. | 'tags'
  138. | 'url'
  139. | 'datetime'
  140. | 'color'
  141. | 'buttons'
  142. | 'customTemplate'
  143. | 'customRender'
  144. // 操作按钮组
  145. buttons?: OptButton[]
  146. // 渲染为Tag时:el-tag 组件的主题
  147. effect?: TagProps['effect']
  148. // 渲染为Tag时:el-tag 组件的size
  149. size?: TagProps['size']
  150. // 自定义数据:比如渲染为Tag时,可以指定不同值时的Tag的Type属性 { open: 'success', close: 'info' }
  151. custom?: any
  152. // 谨慎使用:自定义渲染模板,方法可返回html内容,请确保返回内容是xss安全的
  153. customTemplate?: (row: TableRow, field: TableColumn, value: any, column: TableColumnCtx<TableRow>, index: number) => string
  154. // 自定义组件/函数渲染
  155. customRender?: string | Component
  156. // 渲染为链接时,链接的打开方式
  157. target?: aTarget
  158. // 渲染为:url 时的点击事件
  159. click?: (row: TableRow, field: TableColumn, value: any, column: TableColumnCtx<TableRow>, index: number) => any
  160. // 渲染为 datetime 时的格式化方式,字母可以自由组合:y=年,m=月,d=日,h=时,M=分,s=秒,默认:yyyy-mm-dd hh:MM:ss
  161. timeFormat?: string
  162. // 默认值
  163. default?: any
  164. // 值替换数据,如{open: '开'}
  165. replaceValue?: any
  166. // 使用了 render 属性时,渲染前对字段值的预处理方法,请返回新值
  167. renderFormatter?: (row: TableRow, field: TableColumn, value: any, column: TableColumnCtx<TableRow>, index: number) => any
  168. // 通用搜索操作符,默认值为=,false禁用此字段通用搜索,支持的操作符见下定义
  169. operator?: boolean | OperatorStr
  170. // 通用搜索框的placeholder
  171. operatorPlaceholder?: string
  172. // 公共搜索渲染方式:上方的 render=tag|switch 时公共搜索也会渲染为下拉,数字会渲染为范围筛选,时间渲染为时间选择器等
  173. comSearchRender?: 'remoteSelect' | 'select' | 'date' | 'customRender'
  174. // 公共搜索自定义组件/函数渲染
  175. comSearchCustomRender?: string | Component
  176. // 远程属性
  177. remote?: {
  178. pk?: string
  179. field?: string
  180. params?: anyObj
  181. multiple?: boolean
  182. remoteUrl: string
  183. }
  184. }
  185. /* 表格右侧操作按钮 */
  186. interface OptButton {
  187. // 渲染方式:tipButton=带tip的按钮,confirmButton=带确认框的按钮,moveButton=移动按钮,basicButton=普通按钮
  188. render: 'tipButton' | 'confirmButton' | 'moveButton' | 'basicButton'
  189. name: string
  190. // 自动使用 t() 包裹,请使用语言翻译key,比如 admin.infoBtn
  191. title?: string
  192. text?: string
  193. class?: string
  194. type: ButtonType
  195. icon: string
  196. popconfirm?: Partial<Mutable<PopconfirmProps>>
  197. disabledTip?: boolean
  198. // 自定义点击事件
  199. click?: (row: TableRow, field: TableColumn) => void
  200. // 按钮是否显示,请返回布尔值
  201. display?: (row: TableRow, field: TableColumn) => boolean
  202. // 按钮是否禁用,请返回布尔值
  203. disabled?: (row: TableRow, field: TableColumn) => boolean
  204. // 自定义el-button属性
  205. attr?: Partial<Mutable<ButtonProps>>
  206. }
  207. /* 表格行 */
  208. interface TableRow extends anyObj {
  209. children?: TableRow[]
  210. }
  211. /* 表头支持的按钮 */
  212. type HeaderOptButton = 'refresh' | 'add' | 'edit' | 'delete' | 'unfold' | 'recycle bin' | 'comSearch' | 'quickSearch' | 'columnDisplay'
  213. /* 通用搜索操作符支持的值 */
  214. type OperatorStr =
  215. | '=' // 等于,默认值
  216. | '<>'
  217. | '>'
  218. | '>='
  219. | '<'
  220. | '<='
  221. | 'LIKE'
  222. | 'NOT LIKE'
  223. | 'IN'
  224. | 'NOT IN'
  225. | 'RANGE' // 范围,将生成两个输入框 以输入最小值和最大值
  226. | 'NOT RANGE'
  227. | 'NULL' // 是否为NULL,将生成单个复选框
  228. | 'NOT NULL'
  229. | 'FIND_IN_SET'
  230. /* 链接打开方式 */
  231. type aTarget = '_blank' | '_self'
  232. /* 通用搜索事件返回的Data */
  233. interface comSearchData {
  234. field: string
  235. val: string
  236. operator: string
  237. render?: string
  238. }
  239. interface ElTreeData {
  240. label: string
  241. children?: ElTreeData[]
  242. }
  243. }
  244. /*
  245. * ElTableColumn可用属性
  246. * 未找到方法直接导出tableColumn的props类型定义
  247. * https://element-plus.org/zh-CN/component/table.html#table-column-attributes
  248. */
  249. interface ElTableColumn {
  250. type?: 'selection' | 'index' | 'expand'
  251. index?: number | Function
  252. label?: string
  253. 'column-key'?: string
  254. prop?: string
  255. width?: string | number
  256. 'min-width'?: string | number
  257. fixed?: string | boolean
  258. 'render-header'?: Function
  259. sortable?: string | boolean
  260. 'sort-method'?: Function
  261. 'sort-by'?: Function
  262. 'sort-orders'?: string[] | null[]
  263. resizable?: boolean
  264. formatter?: Function
  265. 'show-overflow-tooltip'?: boolean
  266. align?: 'left' | 'center' | 'right'
  267. 'header-align'?: 'left' | 'center' | 'right'
  268. 'class-name'?: string
  269. 'label-class-name'?: string
  270. selectable?: Function
  271. 'reserve-selection'?: boolean
  272. filters?: { key: string; value: string }[]
  273. 'filter-placement'?: string
  274. 'filter-multiple'?: boolean
  275. 'filter-method'?: Function
  276. 'filtered-value'?: any[]
  277. }