TableTools.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <script setup lang="ts">
  2. import type { TableFieldInfo, TableToolsConfig } from '@/types/table'
  3. interface TableToolsProps {
  4. // 工具栏配置
  5. toolsConfig?: TableToolsConfig
  6. // 筛选
  7. filterFields?: boolean
  8. // 工具图标大小
  9. toolsIconSize?: number
  10. // 表格字段信息
  11. tableFieldsInfo: TableFieldInfo[]
  12. }
  13. const props = withDefaults(defineProps<TableToolsProps>(), {
  14. toolsConfig: () => {
  15. return {
  16. add: false,
  17. download: false,
  18. refresh: false,
  19. filterFields: false
  20. }
  21. },
  22. filterFields: false,
  23. toolsIconSize: 25
  24. })
  25. /**
  26. * 此处没有做响应式,因为工具栏一般不会动态变化
  27. *
  28. */
  29. const { add, download, filterFields, refresh } = props.toolsConfig
  30. const emits = defineEmits(['add', 'refresh', 'download'])
  31. </script>
  32. <template>
  33. <div class="tableToolsContainer">
  34. <div class="leftTools">
  35. <div class="leftToolsGroup" style="display: flex">
  36. <el-button v-if="add" class="leftToolBtn" color="#165dff" @click="emits('add')">
  37. <el-icon>
  38. <Plus />
  39. </el-icon>
  40. 新增
  41. </el-button>
  42. </div>
  43. </div>
  44. <div class="rightTools">
  45. <el-button
  46. v-if="download"
  47. color="#f0f1f3"
  48. size="default"
  49. class="rightToolsItem"
  50. @click="emits('download')"
  51. >
  52. <el-icon>
  53. <Download />
  54. </el-icon>
  55. 下载
  56. </el-button>
  57. <RefreshBtn
  58. v-if="refresh"
  59. @refresh-table="emits('refresh')"
  60. :icon-size="toolsIconSize"
  61. ></RefreshBtn>
  62. <FilterPopover
  63. v-if="filterFields"
  64. :table-fields-info="tableFieldsInfo"
  65. :icon-size="toolsIconSize"
  66. ></FilterPopover>
  67. </div>
  68. </div>
  69. </template>
  70. <style scoped>
  71. .tableToolsContainer {
  72. width: 98%;
  73. display: flex;
  74. justify-content: space-between;
  75. margin: 1% auto 0;
  76. }
  77. .leftTools,
  78. .rightTools {
  79. width: 10%;
  80. display: flex;
  81. align-items: center;
  82. justify-content: space-between;
  83. }
  84. .leftToolBtn {
  85. margin-right: 5px;
  86. }
  87. </style>