StdTableTransformer.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import type { JSX } from 'vue/jsx-runtime'
  2. import { Tag } from 'ant-design-vue'
  3. // text, record, index, column
  4. import dayjs from 'dayjs'
  5. import { get } from 'lodash'
  6. export interface CustomRenderProps {
  7. // eslint-disable-next-line ts/no-explicit-any
  8. text: any
  9. // eslint-disable-next-line ts/no-explicit-any
  10. record: any
  11. // eslint-disable-next-line ts/no-explicit-any
  12. index: any
  13. // eslint-disable-next-line ts/no-explicit-any
  14. column: any
  15. isExport?: boolean
  16. isDetail?: boolean
  17. }
  18. export function datetime(args: CustomRenderProps) {
  19. return dayjs(args.text).format('YYYY-MM-DD HH:mm:ss')
  20. }
  21. export function date(args: CustomRenderProps) {
  22. return args.text ? dayjs(args.text).format('YYYY-MM-DD') : '-'
  23. }
  24. // Used in Export
  25. date.isDate = true
  26. datetime.isDatetime = true
  27. // eslint-disable-next-line ts/no-explicit-any
  28. export function mask(maskObj: any): (args: CustomRenderProps) => JSX.Element {
  29. return (args: CustomRenderProps) => {
  30. // eslint-disable-next-line ts/no-explicit-any
  31. let v: any
  32. if (typeof maskObj?.[args.text] === 'function')
  33. v = maskObj[args.text]()
  34. else if (typeof maskObj?.[args.text] === 'string')
  35. v = maskObj[args.text]
  36. else v = args.text
  37. return v ?? '-'
  38. }
  39. }
  40. export function arrayToTextRender(args: CustomRenderProps) {
  41. return args.text?.join(', ')
  42. }
  43. export function actualValueRender(args: CustomRenderProps, actualDataIndex: string | string[]) {
  44. return get(args.record, actualDataIndex)
  45. }
  46. export function longTextWithEllipsis(len: number): (args: CustomRenderProps) => JSX.Element {
  47. return (args: CustomRenderProps) => {
  48. if (args.isExport || args.isDetail)
  49. return args.text
  50. return args.text.length > len ? `${args.text.substring(0, len)}...` : args.text
  51. }
  52. }
  53. export function year(args: CustomRenderProps) {
  54. return dayjs(args.text).format('YYYY')
  55. }
  56. // eslint-disable-next-line ts/no-explicit-any
  57. export function maskRenderWithColor(maskObj: any) {
  58. return (args: CustomRenderProps) => {
  59. let label: string
  60. if (typeof maskObj[args.text] === 'function')
  61. label = maskObj[args.text]()
  62. else if (typeof maskObj[args.text] === 'string')
  63. label = maskObj[args.text]
  64. else label = args.text
  65. if (args.isExport)
  66. return label
  67. const colorMap = {
  68. 0: '',
  69. 1: 'blue',
  70. 2: 'green',
  71. 3: 'red',
  72. 4: 'cyan',
  73. }
  74. return args.text ? h(Tag, { color: colorMap[args.text] }, maskObj[args.text]) : '-'
  75. }
  76. }