index.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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. 添加
  7. </el-button>
  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 #default="{ 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 show-overflow-tooltip label="操作" width="200">
  64. <template #default="{ row }">
  65. <el-button type="text" @click="handleEdit(row)">编辑</el-button>
  66. <el-button type="text" @click="handleDelete(row)">删除</el-button>
  67. </template>
  68. </el-table-column>
  69. </el-table>
  70. <el-pagination
  71. background
  72. :current-page="queryForm.pageNo"
  73. :page-size="queryForm.pageSize"
  74. :layout="layout"
  75. :total="total"
  76. @size-change="handleSizeChange"
  77. @current-change="handleCurrentChange"
  78. ></el-pagination>
  79. <edit ref="edit" @fetch-data="fetchData"></edit>
  80. </div>
  81. </template>
  82. <script>
  83. import { getList, doDelete } from "@/api/userManagement";
  84. import Edit from "./components/UserManagementEdit";
  85. export default {
  86. name: "UserManagement",
  87. components: { Edit },
  88. data() {
  89. return {
  90. list: null,
  91. listLoading: true,
  92. layout: "total, sizes, prev, pager, next, jumper",
  93. total: 0,
  94. selectRows: "",
  95. elementLoadingText: "正在加载...",
  96. queryForm: {
  97. pageNo: 1,
  98. pageSize: 10,
  99. username: "",
  100. },
  101. };
  102. },
  103. created() {
  104. this.fetchData();
  105. },
  106. methods: {
  107. setSelectRows(val) {
  108. this.selectRows = val;
  109. },
  110. handleEdit(row) {
  111. if (row.id) {
  112. this.$refs["edit"].showEdit(row);
  113. } else {
  114. this.$refs["edit"].showEdit();
  115. }
  116. },
  117. handleDelete(row) {
  118. if (row.id) {
  119. this.$baseConfirm("你确定要删除当前项吗", null, async () => {
  120. const { msg } = await doDelete({ ids: row.id });
  121. this.$baseMessage(msg, "success");
  122. this.fetchData();
  123. });
  124. } else {
  125. if (this.selectRows.length > 0) {
  126. const ids = this.selectRows.map((item) => item.id).join();
  127. this.$baseConfirm("你确定要删除选中项吗", null, async () => {
  128. const { msg } = await doDelete({ ids });
  129. this.$baseMessage(msg, "success");
  130. this.fetchData();
  131. });
  132. } else {
  133. this.$baseMessage("未选中任何行", "error");
  134. return false;
  135. }
  136. }
  137. },
  138. handleSizeChange(val) {
  139. this.queryForm.pageSize = val;
  140. this.fetchData();
  141. },
  142. handleCurrentChange(val) {
  143. this.queryForm.pageNo = val;
  144. this.fetchData();
  145. },
  146. queryData() {
  147. this.queryForm.pageNo = 1;
  148. this.fetchData();
  149. },
  150. async fetchData() {
  151. this.listLoading = true;
  152. const { data, totalCount } = await getList(this.queryForm);
  153. this.list = data;
  154. this.total = totalCount;
  155. setTimeout(() => {
  156. this.listLoading = false;
  157. }, 300);
  158. },
  159. },
  160. };
  161. </script>