multi-select.vue 2.1 KB

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