data.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import type { OnActionClickFn, VxeTableGridOptions } from '#/adapter/vxe-table';
  2. import type { SystemMenuApi } from '#/api/system/menu';
  3. import { $t } from '#/locales';
  4. export function getMenuTypeOptions() {
  5. return [
  6. {
  7. color: 'processing',
  8. label: $t('system.menu.typeCatalog'),
  9. value: 'catalog',
  10. },
  11. { color: 'default', label: $t('system.menu.typeMenu'), value: 'menu' },
  12. { color: 'error', label: $t('system.menu.typeButton'), value: 'action' },
  13. {
  14. color: 'success',
  15. label: $t('system.menu.typeEmbedded'),
  16. value: 'embedded',
  17. },
  18. { color: 'warning', label: $t('system.menu.typeLink'), value: 'link' },
  19. ];
  20. }
  21. export function useColumns(
  22. onActionClick: OnActionClickFn<SystemMenuApi.SystemMenu>,
  23. ): VxeTableGridOptions<SystemMenuApi.SystemMenu>['columns'] {
  24. return [
  25. {
  26. align: 'left',
  27. field: 'meta.title',
  28. fixed: 'left',
  29. slots: { default: 'title' },
  30. title: $t('system.menu.menuTitle'),
  31. treeNode: true,
  32. width: 250,
  33. },
  34. {
  35. align: 'center',
  36. cellRender: { name: 'CellTag', options: getMenuTypeOptions() },
  37. field: 'type',
  38. title: $t('system.menu.type'),
  39. width: 100,
  40. },
  41. {
  42. field: 'authCode',
  43. title: $t('system.menu.authCode'),
  44. width: 200,
  45. },
  46. {
  47. align: 'left',
  48. field: 'path',
  49. title: $t('system.menu.path'),
  50. width: 200,
  51. },
  52. {
  53. align: 'left',
  54. field: 'component',
  55. formatter: ({ row }) => {
  56. switch (row.type) {
  57. case 'catalog':
  58. case 'menu': {
  59. return row.component ?? '';
  60. }
  61. case 'embedded': {
  62. return row.meta?.iframeSrc ?? '';
  63. }
  64. case 'link': {
  65. return row.meta?.link ?? '';
  66. }
  67. }
  68. return '';
  69. },
  70. minWidth: 200,
  71. title: $t('system.menu.component'),
  72. },
  73. {
  74. cellRender: { name: 'CellTag' },
  75. field: 'status',
  76. title: $t('system.menu.status'),
  77. width: 100,
  78. },
  79. {
  80. align: 'right',
  81. cellRender: {
  82. attrs: {
  83. nameField: 'name',
  84. onClick: onActionClick,
  85. },
  86. name: 'CellOperation',
  87. options: [
  88. {
  89. code: 'append',
  90. text: '新增下级',
  91. },
  92. 'edit', // 默认的编辑按钮
  93. 'delete', // 默认的删除按钮
  94. ],
  95. },
  96. field: 'operation',
  97. fixed: 'right',
  98. headerAlign: 'center',
  99. showOverflow: false,
  100. title: $t('system.menu.operation'),
  101. width: 200,
  102. },
  103. ];
  104. }