multi-select.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <template>
  2. <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" @selection-change="handleSelectionChange">
  3. <el-table-column type="selection" width="55" />
  4. <el-table-column label="Date" width="120">
  5. <template #default="scope">{{ scope.row.date }}</template>
  6. </el-table-column>
  7. <el-table-column property="name" label="Name" width="120" />
  8. <el-table-column property="address" label="Address" show-overflow-tooltip />
  9. </el-table>
  10. <div style="margin-top: 20px">
  11. <el-button @click="toggleSelection([tableData[1], tableData[2]])">Toggle selection status of second and third rows</el-button>
  12. <el-button @click="toggleSelection()">Clear selection</el-button>
  13. </div>
  14. </template>
  15. <script lang="ts" setup>
  16. import { ref } from 'vue'
  17. import type { ElTable } from 'element-plus'
  18. interface User {
  19. date: string
  20. name: string
  21. address: string
  22. }
  23. const multipleTableRef = ref<InstanceType<typeof ElTable>>()
  24. const multipleSelection = ref<User[]>([])
  25. const toggleSelection = (rows?: User[]) => {
  26. if (rows) {
  27. rows.forEach(row => {
  28. // TODO: improvement typing when refactor table
  29. // eslint-disable-next-line @typescript-eslint/ban-ts-comment
  30. // @ts-expect-error
  31. multipleTableRef.value!.toggleRowSelection(row, undefined)
  32. })
  33. } else {
  34. multipleTableRef.value!.clearSelection()
  35. }
  36. }
  37. const handleSelectionChange = (val: User[]) => {
  38. multipleSelection.value = val
  39. }
  40. const tableData: User[] = [
  41. {
  42. date: '2016-05-03',
  43. name: 'Tom',
  44. address: 'No. 189, Grove St, Los Angeles',
  45. },
  46. {
  47. date: '2016-05-02',
  48. name: 'Tom',
  49. address: 'No. 189, Grove St, Los Angeles',
  50. },
  51. {
  52. date: '2016-05-04',
  53. name: 'Tom',
  54. address: 'No. 189, Grove St, Los Angeles',
  55. },
  56. {
  57. date: '2016-05-01',
  58. name: 'Tom',
  59. address: 'No. 189, Grove St, Los Angeles',
  60. },
  61. {
  62. date: '2016-05-08',
  63. name: 'Tom',
  64. address: 'No. 189, Grove St, Los Angeles',
  65. },
  66. {
  67. date: '2016-05-06',
  68. name: 'Tom',
  69. address: 'No. 189, Grove St, Los Angeles',
  70. },
  71. {
  72. date: '2016-05-07',
  73. name: 'Tom',
  74. address: 'No. 189, Grove St, Los Angeles',
  75. },
  76. ]
  77. </script>