inlineEditTable.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <template>
  2. <div class="app-container">
  3. <el-table
  4. v-loading="listLoading"
  5. :data="list"
  6. :element-loading-text="elementLoadingText"
  7. >
  8. <el-table-column
  9. show-overflow-tooltip
  10. type="selection"
  11. width="55"
  12. ></el-table-column>
  13. <el-table-column show-overflow-tooltip label="序号" width="95">
  14. <template #default="scope">
  15. {{ scope.$index + 1 }}
  16. </template>
  17. </el-table-column>
  18. <el-table-column show-overflow-tooltip min-width="300px" label="标题">
  19. <template #default="{ row }">
  20. <template v-if="row.edit">
  21. <el-input v-model="row.title" style="width: 300px" />
  22. <el-button
  23. class="cancel-btn"
  24. type="warning"
  25. @click="cancelEdit(row)"
  26. >
  27. 取消
  28. </el-button>
  29. </template>
  30. <span v-else>{{ row.title }}</span>
  31. </template>
  32. </el-table-column>
  33. <el-table-column
  34. show-overflow-tooltip
  35. label="作者"
  36. prop="author"
  37. ></el-table-column>
  38. <el-table-column
  39. show-overflow-tooltip
  40. align="center"
  41. label="操作"
  42. width="200"
  43. >
  44. <template #default="{ row }">
  45. <el-button
  46. v-if="row.edit"
  47. type="success"
  48. size="small"
  49. @click="confirmEdit(row)"
  50. >
  51. 保存
  52. </el-button>
  53. <el-button
  54. v-else
  55. type="primary"
  56. size="small"
  57. icon="el-icon-edit"
  58. @click="row.edit = !row.edit"
  59. >
  60. 编辑
  61. </el-button>
  62. </template>
  63. </el-table-column>
  64. </el-table>
  65. </div>
  66. </template>
  67. <script>
  68. import { getList } from "@/api/table";
  69. export default {
  70. name: "InlineEditTable",
  71. data() {
  72. return {
  73. list: null,
  74. listLoading: true,
  75. elementLoadingText: "正在加载...",
  76. queryForm: {
  77. pageNo: 1,
  78. pageSize: 20,
  79. title: "",
  80. },
  81. };
  82. },
  83. created() {
  84. this.getList();
  85. },
  86. methods: {
  87. async getList() {
  88. this.listLoading = true;
  89. const { data } = await getList(this.queryForm);
  90. this.list = data.map((v) => {
  91. this.$set(v, "edit", false);
  92. v.originalTitle = v.title;
  93. return v;
  94. });
  95. this.listLoading = false;
  96. },
  97. cancelEdit(row) {
  98. row.title = row.originalTitle;
  99. row.edit = false;
  100. },
  101. confirmEdit(row) {
  102. row.edit = false;
  103. row.originalTitle = row.title;
  104. },
  105. },
  106. };
  107. </script>