MetaQuestionNoteList.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <template>
  2. <div class="list-view">
  3. <page-title>
  4. <el-button
  5. @click="download"
  6. icon="el-icon-upload2"
  7. :loading="downloading"
  8. :disabled="fetchingData"
  9. class="filter-item"
  10. >
  11. 导出
  12. </el-button>
  13. </page-title>
  14. <div class="filters-container">
  15. <el-input
  16. placeholder="搜索..."
  17. v-model="search"
  18. clearable
  19. class="filter-item search"
  20. @keyup.enter.native="getData"
  21. >
  22. <el-button @click="getData" slot="append" icon="el-icon-search"> </el-button>
  23. </el-input>
  24. </div>
  25. <el-table
  26. :data="tableData"
  27. row-key="id"
  28. ref="table"
  29. header-row-class-name="table-header-row"
  30. header-cell-class-name="table-header-cell"
  31. row-class-name="table-row"
  32. cell-class-name="table-cell"
  33. :height="tableHeight"
  34. v-loading="fetchingData"
  35. >
  36. <el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
  37. <el-table-column prop="id" label="ID" width="100"> </el-table-column>
  38. <el-table-column prop="userId" label="用户ID"> </el-table-column>
  39. <el-table-column prop="questionId" label="题目ID"> </el-table-column>
  40. <el-table-column label="操作" align="center" fixed="right" width="150">
  41. <template slot-scope="{ row }">
  42. <el-button @click="editRow(row)" type="primary" size="mini" plain> 编辑 </el-button>
  43. <el-button @click="deleteRow(row)" type="danger" size="mini" plain> 删除 </el-button>
  44. </template>
  45. </el-table-column>
  46. </el-table>
  47. <div class="pagination-wrapper">
  48. <!-- <div class="multiple-mode-wrapper">
  49. <el-button v-if="!multipleMode" @click="toggleMultipleMode(true)"> 批量编辑 </el-button>
  50. <el-button-group v-else>
  51. <el-button @click="operation1"> 批量操作1 </el-button>
  52. <el-button @click="operation2"> 批量操作2 </el-button>
  53. <el-button @click="toggleMultipleMode(false)"> 取消 </el-button>
  54. </el-button-group>
  55. </div> -->
  56. <el-pagination
  57. background
  58. @size-change="onSizeChange"
  59. @current-change="onCurrentChange"
  60. :current-page="page"
  61. :page-sizes="[10, 20, 30, 40, 50]"
  62. :page-size="pageSize"
  63. layout="total, sizes, prev, pager, next, jumper"
  64. :total="totalElements"
  65. >
  66. </el-pagination>
  67. </div>
  68. </div>
  69. </template>
  70. <script>
  71. import { mapState } from 'vuex';
  72. import pageableTable from '@/mixins/pageableTable';
  73. export default {
  74. name: 'MetaQuestionNoteList',
  75. mixins: [pageableTable],
  76. data() {
  77. return {
  78. multipleMode: false,
  79. search: '',
  80. url: '/metaQuestionNote/all',
  81. downloading: false
  82. };
  83. },
  84. computed: {
  85. selection() {
  86. return this.$refs.table.selection.map(i => i.id);
  87. }
  88. },
  89. methods: {
  90. beforeGetData() {
  91. return { search: this.search, query: { del: false } };
  92. },
  93. toggleMultipleMode(multipleMode) {
  94. this.multipleMode = multipleMode;
  95. if (!multipleMode) {
  96. this.$refs.table.clearSelection();
  97. }
  98. },
  99. addRow() {
  100. this.$router.push({
  101. path: '/metaQuestionNoteEdit',
  102. query: {
  103. ...this.$route.query
  104. }
  105. });
  106. },
  107. editRow(row) {
  108. this.$router.push({
  109. path: '/metaQuestionNoteEdit',
  110. query: {
  111. id: row.id
  112. }
  113. });
  114. },
  115. download() {
  116. this.downloading = true;
  117. this.$axios
  118. .get('/metaQuestionNote/excel', {
  119. responseType: 'blob',
  120. params: { size: 10000 }
  121. })
  122. .then(res => {
  123. console.log(res);
  124. this.downloading = false;
  125. const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
  126. const link = document.createElement('a');
  127. link.href = downloadUrl;
  128. link.setAttribute('download', res.headers['content-disposition'].split('filename=')[1]);
  129. document.body.appendChild(link);
  130. link.click();
  131. link.remove();
  132. })
  133. .catch(e => {
  134. console.log(e);
  135. this.downloading = false;
  136. this.$message.error(e.error);
  137. });
  138. },
  139. operation1() {
  140. this.$notify({
  141. title: '提示',
  142. message: this.selection
  143. });
  144. },
  145. operation2() {
  146. this.$message('操作2');
  147. },
  148. deleteRow(row) {
  149. this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
  150. .then(() => {
  151. return this.$http.post(`/metaQuestionNote/del/${row.id}`);
  152. })
  153. .then(() => {
  154. this.$message.success('删除成功');
  155. this.getData();
  156. })
  157. .catch(e => {
  158. if (e !== 'cancel') {
  159. this.$message.error(e.error);
  160. }
  161. });
  162. }
  163. }
  164. };
  165. </script>
  166. <style lang="less" scoped>
  167. </style>