custom-header.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <el-table :data="filterTableData" style="width: 100%">
  3. <el-table-column label="Date" prop="date" />
  4. <el-table-column label="Name" prop="name" />
  5. <el-table-column align="right">
  6. <template #header>
  7. <el-input v-model="search" size="small" placeholder="Type to search" />
  8. </template>
  9. <template #default="scope">
  10. <el-button size="small" @click="handleEdit(scope.$index, scope.row)"
  11. >Edit</el-button
  12. >
  13. <el-button
  14. size="small"
  15. type="danger"
  16. @click="handleDelete(scope.$index, scope.row)"
  17. >Delete</el-button
  18. >
  19. </template>
  20. </el-table-column>
  21. </el-table>
  22. </template>
  23. <script lang="ts" setup>
  24. import { computed, ref } from 'vue'
  25. interface User {
  26. date: string
  27. name: string
  28. address: string
  29. }
  30. const search = ref('')
  31. const filterTableData = computed(() =>
  32. tableData.filter(
  33. (data) =>
  34. !search.value ||
  35. data.name.toLowerCase().includes(search.value.toLowerCase())
  36. )
  37. )
  38. const handleEdit = (index: number, row: User) => {
  39. console.log(index, row)
  40. }
  41. const handleDelete = (index: number, row: User) => {
  42. console.log(index, row)
  43. }
  44. const tableData: User[] = [
  45. {
  46. date: '2016-05-03',
  47. name: 'Tom',
  48. address: 'No. 189, Grove St, Los Angeles',
  49. },
  50. {
  51. date: '2016-05-02',
  52. name: 'John',
  53. address: 'No. 189, Grove St, Los Angeles',
  54. },
  55. {
  56. date: '2016-05-04',
  57. name: 'Morgan',
  58. address: 'No. 189, Grove St, Los Angeles',
  59. },
  60. {
  61. date: '2016-05-01',
  62. name: 'Jessy',
  63. address: 'No. 189, Grove St, Los Angeles',
  64. },
  65. ]
  66. </script>