custom-column.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <template>
  2. <el-table :data="tableData" style="width: 100%">
  3. <el-table-column label="Date" width="180">
  4. <template #default="scope">
  5. <div style="display: flex; align-items: center">
  6. <el-icon><timer /></el-icon>
  7. <span style="margin-left: 10px">{{ scope.row.date }}</span>
  8. </div>
  9. </template>
  10. </el-table-column>
  11. <el-table-column label="Name" width="180">
  12. <template #default="scope">
  13. <el-popover effect="light" trigger="hover" placement="top" width="auto">
  14. <template #default>
  15. <div>name: {{ scope.row.name }}</div>
  16. <div>address: {{ scope.row.address }}</div>
  17. </template>
  18. <template #reference>
  19. <el-tag>{{ scope.row.name }}</el-tag>
  20. </template>
  21. </el-popover>
  22. </template>
  23. </el-table-column>
  24. <el-table-column label="Operations">
  25. <template #default="scope">
  26. <el-button size="small" @click="handleEdit(scope.$index, scope.row)"
  27. >Edit</el-button
  28. >
  29. <el-button
  30. size="small"
  31. type="danger"
  32. @click="handleDelete(scope.$index, scope.row)"
  33. >Delete</el-button
  34. >
  35. </template>
  36. </el-table-column>
  37. </el-table>
  38. </template>
  39. <script lang="ts" setup>
  40. import { Timer } from '@element-plus/icons-vue'
  41. interface User {
  42. date: string
  43. name: string
  44. address: string
  45. }
  46. const handleEdit = (index: number, row: User) => {
  47. console.log(index, row)
  48. }
  49. const handleDelete = (index: number, row: User) => {
  50. console.log(index, row)
  51. }
  52. const tableData: User[] = [
  53. {
  54. date: '2016-05-03',
  55. name: 'Tom',
  56. address: 'No. 189, Grove St, Los Angeles',
  57. },
  58. {
  59. date: '2016-05-02',
  60. name: 'Tom',
  61. address: 'No. 189, Grove St, Los Angeles',
  62. },
  63. {
  64. date: '2016-05-04',
  65. name: 'Tom',
  66. address: 'No. 189, Grove St, Los Angeles',
  67. },
  68. {
  69. date: '2016-05-01',
  70. name: 'Tom',
  71. address: 'No. 189, Grove St, Los Angeles',
  72. },
  73. ]
  74. </script>