index.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <template>
  2. <div class="userManagement-container">
  3. <vab-query-form>
  4. <vab-query-form-left-panel :span="12">
  5. <el-button icon="el-icon-plus" type="primary" @click="handleEdit"
  6. >添加</el-button
  7. >
  8. <el-button icon="el-icon-delete" type="danger" @click="handleDelete"
  9. >批量删除
  10. </el-button>
  11. </vab-query-form-left-panel>
  12. <vab-query-form-right-panel :span="12">
  13. <el-form :inline="true" :model="queryForm" @submit.native.prevent>
  14. <el-form-item>
  15. <el-input
  16. v-model.trim="queryForm.username"
  17. placeholder="请输入用户名"
  18. clearable
  19. />
  20. </el-form-item>
  21. <el-form-item>
  22. <el-button icon="el-icon-search" type="primary" @click="queryData"
  23. >查询
  24. </el-button>
  25. </el-form-item>
  26. </el-form>
  27. </vab-query-form-right-panel>
  28. </vab-query-form>
  29. <el-table
  30. v-loading="listLoading"
  31. :data="list"
  32. :element-loading-text="elementLoadingText"
  33. @selection-change="setSelectRows"
  34. >
  35. <el-table-column show-overflow-tooltip type="selection"></el-table-column>
  36. <el-table-column
  37. show-overflow-tooltip
  38. prop="id"
  39. label="id"
  40. ></el-table-column>
  41. <el-table-column
  42. show-overflow-tooltip
  43. prop="username"
  44. label="用户名"
  45. ></el-table-column>
  46. <el-table-column
  47. show-overflow-tooltip
  48. prop="email"
  49. label="邮箱"
  50. ></el-table-column>
  51. <el-table-column show-overflow-tooltip label="权限">
  52. <template v-slot="{ row }">
  53. <el-tag v-for="(item, index) in row.permissions" :key="index">{{
  54. item
  55. }}</el-tag>
  56. </template>
  57. </el-table-column>
  58. <el-table-column
  59. show-overflow-tooltip
  60. prop="datatime"
  61. label="修改时间"
  62. ></el-table-column>
  63. <el-table-column
  64. show-overflow-tooltip
  65. fixed="right"
  66. label="操作"
  67. width="200"
  68. >
  69. <template v-slot="scope">
  70. <el-button type="text" @click="handleEdit(scope.row)"
  71. >编辑
  72. </el-button>
  73. <el-button type="text" @click="handleDelete(scope.row)"
  74. >删除
  75. </el-button>
  76. </template>
  77. </el-table-column>
  78. </el-table>
  79. <el-pagination
  80. background
  81. :current-page="queryForm.pageNo"
  82. :page-size="queryForm.pageSize"
  83. :layout="layout"
  84. :total="total"
  85. @size-change="handleSizeChange"
  86. @current-change="handleCurrentChange"
  87. >
  88. </el-pagination>
  89. <edit ref="edit" @fetchData="fetchData"></edit>
  90. </div>
  91. </template>
  92. <script>
  93. import { getList, doDelete } from "@/api/userManagement";
  94. import Edit from "./components/UserManagementEdit";
  95. export default {
  96. name: "UserManagement",
  97. components: { Edit },
  98. data() {
  99. return {
  100. list: null,
  101. listLoading: true,
  102. layout: "total, sizes, prev, pager, next, jumper",
  103. total: 0,
  104. selectRows: "",
  105. elementLoadingText: "正在加载...",
  106. queryForm: {
  107. pageNo: 1,
  108. pageSize: 10,
  109. username: "",
  110. },
  111. };
  112. },
  113. created() {
  114. this.fetchData();
  115. },
  116. methods: {
  117. setSelectRows(val) {
  118. this.selectRows = val;
  119. },
  120. handleEdit(row) {
  121. if (row.id) {
  122. this.$refs["edit"].showEdit(row);
  123. } else {
  124. this.$refs["edit"].showEdit();
  125. }
  126. },
  127. handleDelete(row) {
  128. if (row.id) {
  129. this.$baseConfirm("你确定要删除当前项吗", null, async () => {
  130. const { msg } = await doDelete({ ids: row.id });
  131. this.$baseMessage(msg, "success");
  132. this.fetchData();
  133. });
  134. } else {
  135. if (this.selectRows.length > 0) {
  136. const ids = this.selectRows.map((item) => item.id).join();
  137. this.$baseConfirm("你确定要删除选中项吗", null, async () => {
  138. const { msg } = await doDelete({ ids });
  139. this.$baseMessage(msg, "success");
  140. this.fetchData();
  141. });
  142. } else {
  143. this.$baseMessage("未选中任何行", "error");
  144. return false;
  145. }
  146. }
  147. },
  148. handleSizeChange(val) {
  149. this.queryForm.pageSize = val;
  150. this.fetchData();
  151. },
  152. handleCurrentChange(val) {
  153. this.queryForm.pageNo = val;
  154. this.fetchData();
  155. },
  156. queryData() {
  157. this.queryForm.pageNo = 1;
  158. this.fetchData();
  159. },
  160. async fetchData() {
  161. this.listLoading = true;
  162. const { data, totalCount } = await getList(this.queryForm);
  163. this.list = data;
  164. this.total = totalCount;
  165. setTimeout(() => {
  166. this.listLoading = false;
  167. }, 300);
  168. },
  169. },
  170. };
  171. </script>