overlay.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <template>
  2. <el-table-v2
  3. :columns="columns"
  4. :data="data"
  5. :row-height="40"
  6. :width="700"
  7. :height="400"
  8. >
  9. <template #overlay>
  10. <div
  11. class="el-loading-mask"
  12. style="display: flex; align-items: center; justify-content: center"
  13. >
  14. <el-icon class="is-loading" color="var(--el-color-primary)" :size="26">
  15. <loading-icon />
  16. </el-icon>
  17. </div>
  18. </template>
  19. </el-table-v2>
  20. </template>
  21. <script lang="ts" setup>
  22. import { Loading as LoadingIcon } from '@element-plus/icons-vue'
  23. const generateColumns = (length = 10, prefix = 'column-', props?: any) =>
  24. Array.from({ length }).map((_, columnIndex) => ({
  25. ...props,
  26. key: `${prefix}${columnIndex}`,
  27. dataKey: `${prefix}${columnIndex}`,
  28. title: `Column ${columnIndex}`,
  29. width: 150,
  30. }))
  31. const generateData = (
  32. columns: ReturnType<typeof generateColumns>,
  33. length = 200,
  34. prefix = 'row-'
  35. ) =>
  36. Array.from({ length }).map((_, rowIndex) => {
  37. return columns.reduce(
  38. (rowData, column, columnIndex) => {
  39. rowData[column.dataKey] = `Row ${rowIndex} - Col ${columnIndex}`
  40. return rowData
  41. },
  42. {
  43. id: `${prefix}${rowIndex}`,
  44. parentId: null,
  45. }
  46. )
  47. })
  48. const columns = generateColumns(10)
  49. const data = generateData(columns, 200)
  50. </script>
  51. <style>
  52. .example-showcase .el-table-v2__overlay {
  53. z-index: 9;
  54. }
  55. </style>