index.vue 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <template>
  2. <div>
  3. <el-alert
  4. effect="dark"
  5. :closable="false"
  6. title="基于 Element 的 Table 组件进行二次封装,实现数据驱动,支持所有 Table 参数 -- 自定义表头"
  7. type="info"
  8. style="margin-bottom: 20px"
  9. />
  10. <com-table
  11. v-loading="loading"
  12. :columns="columns"
  13. :data="
  14. tableData.filter(
  15. (data) => !search || data.name.toLowerCase().includes(search.toLowerCase())
  16. )
  17. "
  18. >
  19. <template #actionHeader>
  20. <el-input v-model="search" size="mini" placeholder="输入关键字搜索" />
  21. </template>
  22. <template #action="scope">
  23. <el-button size="mini" @click="handleEdit(scope.$index, scope.row)">Edit</el-button>
  24. <el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)"
  25. >Delete</el-button
  26. >
  27. </template>
  28. </com-table>
  29. </div>
  30. </template>
  31. <script setup lang="ts" name="CustomHeader">
  32. import { ref } from 'vue'
  33. const columns = [
  34. {
  35. field: 'date',
  36. label: '日期'
  37. },
  38. {
  39. field: 'name',
  40. label: '姓名'
  41. },
  42. {
  43. field: 'action',
  44. slots: {
  45. header: 'actionHeader',
  46. default: 'action'
  47. }
  48. }
  49. ]
  50. const tableData = [
  51. {
  52. date: '2016-05-02',
  53. name: '王小虎1',
  54. address: '上海市普陀区金沙江路 1518 弄'
  55. },
  56. {
  57. date: '2016-05-04',
  58. name: '王小虎2',
  59. address: '上海市普陀区金沙江路 1517 弄'
  60. },
  61. {
  62. date: '2016-05-01',
  63. name: '王小虎3',
  64. address: '上海市普陀区金沙江路 1519 弄'
  65. },
  66. {
  67. date: '2016-05-03',
  68. name: '王小虎4',
  69. address: '上海市普陀区金沙江路 1516 弄'
  70. }
  71. ]
  72. const loading = ref<boolean>(true)
  73. setTimeout(() => {
  74. loading.value = false
  75. }, 1000)
  76. const search = ref<string>('')
  77. function handleEdit(index: number, row: any) {
  78. console.log(index, row)
  79. }
  80. function handleDelete(index: number, row: any) {
  81. console.log(index, row)
  82. }
  83. </script>
  84. <style></style>