BaseTable.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <template>
  2. <div>
  3. <div class="crumbs">
  4. <el-breadcrumb separator="/">
  5. <el-breadcrumb-item>
  6. <i class="el-icon-lx-cascades"></i> 基础表格
  7. </el-breadcrumb-item>
  8. </el-breadcrumb>
  9. </div>
  10. <div class="container">
  11. <div class="handle-box">
  12. <el-button
  13. type="primary"
  14. icon="el-icon-delete"
  15. class="handle-del mr10"
  16. @click="delAllSelection"
  17. >批量删除</el-button>
  18. <el-select v-model="query.address" placeholder="地址" class="handle-select mr10">
  19. <el-option key="1" label="广东省" value="广东省"></el-option>
  20. <el-option key="2" label="湖南省" value="湖南省"></el-option>
  21. </el-select>
  22. <el-input v-model="query.name" placeholder="用户名" class="handle-input mr10"></el-input>
  23. <el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
  24. </div>
  25. <el-table
  26. :data="tableData"
  27. border
  28. class="table"
  29. ref="multipleTable"
  30. header-cell-class-name="table-header"
  31. @selection-change="handleSelectionChange"
  32. >
  33. <el-table-column type="selection" width="55" align="center"></el-table-column>
  34. <el-table-column prop="id" label="ID" width="55" align="center"></el-table-column>
  35. <el-table-column prop="name" label="用户名"></el-table-column>
  36. <el-table-column label="账户余额">
  37. <template slot-scope="scope">¥{{scope.row.money}}</template>
  38. </el-table-column>
  39. <el-table-column label="头像(查看大图)" align="center">
  40. <template slot-scope="scope">
  41. <el-image
  42. class="table-td-thumb"
  43. :src="scope.row.thumb"
  44. :preview-src-list="[scope.row.thumb]"
  45. ></el-image>
  46. </template>
  47. </el-table-column>
  48. <el-table-column prop="address" label="地址"></el-table-column>
  49. <el-table-column label="状态" align="center">
  50. <template slot-scope="scope">
  51. <el-tag
  52. :type="scope.row.state==='成功'?'success':(scope.row.state==='失败'?'danger':'')"
  53. >{{scope.row.state}}</el-tag>
  54. </template>
  55. </el-table-column>
  56. <el-table-column prop="date" label="注册时间"></el-table-column>
  57. <el-table-column label="操作" width="180" align="center">
  58. <template slot-scope="scope">
  59. <el-button
  60. type="text"
  61. icon="el-icon-edit"
  62. @click="handleEdit(scope.$index, scope.row)"
  63. >编辑</el-button>
  64. <el-button
  65. type="text"
  66. icon="el-icon-delete"
  67. class="red"
  68. @click="handleDelete(scope.$index, scope.row)"
  69. >删除</el-button>
  70. </template>
  71. </el-table-column>
  72. </el-table>
  73. <div class="pagination">
  74. <el-pagination
  75. background
  76. layout="total, prev, pager, next"
  77. :current-page="query.pageIndex"
  78. :page-size="query.pageSize"
  79. :total="pageTotal"
  80. @current-change="handlePageChange"
  81. ></el-pagination>
  82. </div>
  83. </div>
  84. <!-- 编辑弹出框 -->
  85. <el-dialog title="编辑" :visible.sync="editVisible" width="30%">
  86. <el-form ref="form" :model="form" label-width="70px">
  87. <el-form-item label="用户名">
  88. <el-input v-model="form.name"></el-input>
  89. </el-form-item>
  90. <el-form-item label="地址">
  91. <el-input v-model="form.address"></el-input>
  92. </el-form-item>
  93. </el-form>
  94. <span slot="footer" class="dialog-footer">
  95. <el-button @click="editVisible = false">取 消</el-button>
  96. <el-button type="primary" @click="saveEdit">确 定</el-button>
  97. </span>
  98. </el-dialog>
  99. </div>
  100. </template>
  101. <script>
  102. import { fetchData } from '../../api/index';
  103. export default {
  104. name: 'basetable',
  105. data() {
  106. return {
  107. query: {
  108. address: '',
  109. name: '',
  110. pageIndex: 1,
  111. pageSize: 10
  112. },
  113. tableData: [],
  114. multipleSelection: [],
  115. delList: [],
  116. editVisible: false,
  117. pageTotal: 0,
  118. form: {},
  119. idx: -1,
  120. id: -1
  121. };
  122. },
  123. created() {
  124. this.getData();
  125. },
  126. methods: {
  127. // 获取 easy-mock 的模拟数据
  128. getData() {
  129. fetchData(this.query).then(res => {
  130. this.tableData = res.list;
  131. this.pageTotal = res.pageTotal || 50;
  132. });
  133. },
  134. // 触发搜索按钮
  135. handleSearch() {
  136. this.$set(this.query, 'pageIndex', 1);
  137. this.getData();
  138. },
  139. // 删除操作
  140. handleDelete(index, row) {
  141. // 二次确认删除
  142. this.$confirm('确定要删除吗?', '提示', {
  143. type: 'warning'
  144. })
  145. .then(() => {
  146. this.$message.success('删除成功');
  147. this.tableData.splice(index, 1);
  148. })
  149. .catch(() => {});
  150. },
  151. // 多选操作
  152. handleSelectionChange(val) {
  153. this.multipleSelection = val;
  154. },
  155. delAllSelection() {
  156. const length = this.multipleSelection.length;
  157. let str = '';
  158. this.delList = this.delList.concat(this.multipleSelection);
  159. for (let i = 0; i < length; i++) {
  160. str += this.multipleSelection[i].name + ' ';
  161. }
  162. this.$message.error(`删除了${str}`);
  163. this.multipleSelection = [];
  164. },
  165. // 编辑操作
  166. handleEdit(index, row) {
  167. this.idx = index;
  168. this.form = row;
  169. this.editVisible = true;
  170. },
  171. // 保存编辑
  172. saveEdit() {
  173. this.editVisible = false;
  174. this.$message.success(`修改第 ${this.idx + 1} 行成功`);
  175. this.$set(this.tableData, this.idx, this.form);
  176. },
  177. // 分页导航
  178. handlePageChange(val) {
  179. this.$set(this.query, 'pageIndex', val);
  180. this.getData();
  181. }
  182. }
  183. };
  184. </script>
  185. <style scoped>
  186. .handle-box {
  187. margin-bottom: 20px;
  188. }
  189. .handle-select {
  190. width: 120px;
  191. }
  192. .handle-input {
  193. width: 300px;
  194. display: inline-block;
  195. }
  196. .table {
  197. width: 100%;
  198. font-size: 14px;
  199. }
  200. .red {
  201. color: #ff0000;
  202. }
  203. .mr10 {
  204. margin-right: 10px;
  205. }
  206. .table-td-thumb {
  207. display: block;
  208. margin: auto;
  209. width: 40px;
  210. height: 40px;
  211. }
  212. </style>