index.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <template>
  2. <div class="page_item">
  3. <div class="page_search">
  4. <div class="search_content">
  5. <div class="content_left">
  6. <el-input v-model="keyWord" placeholder="请输入姓名或账号">
  7. <template #append>
  8. <el-button :icon="Search" @click="GoSearch()" />
  9. </template>
  10. </el-input>
  11. </div>
  12. <div class="content_right">
  13. <el-button>刷新</el-button>
  14. <el-button type="primary" @click="AddManager" >新增用户</el-button>
  15. </div>
  16. </div>
  17. </div>
  18. <div class="page_jg_20"></div>
  19. <div class="page_table">
  20. <el-table :data="tableData" stripe :key="tableKey" v-loading="tableLoading" element-loading-text="拼命加载中……"
  21. element-loading-spinner="el-icon-loading" element-loading-background="#ffffff" row-key="studentId">
  22. <el-table-column type="index" label="序号" align="center" width="50" />
  23. <el-table-column prop="username" label="账号" align="center" show-overflow-tooltip />
  24. <el-table-column prop="nickname" label="姓名" align="center" show-overflow-tooltip />
  25. <el-table-column prop="phoneNo" label="手机号" align="center" show-overflow-tooltip />
  26. <el-table-column prop="status" label="状态" align="center" show-overflow-tooltip>
  27. <template #default="scope">
  28. <div class="table_row_status">
  29. <!-- 正常 -->
  30. <div class="yes_release_icon" v-if="scope.row.status == 1"></div>
  31. <!-- 封禁 -->
  32. <div class="ready_close_icon" v-else-if="scope.row.status==2"></div>
  33. {{ scope.row.statusLabel }}
  34. </div>
  35. </template>
  36. </el-table-column>
  37. <el-table-column prop="lastLoginAt" label="最后登录时间" align="center" show-overflow-tooltip />
  38. <el-table-column label="操作" align="center" fixed="right" min-width="120">
  39. <template #default="scope">
  40. <div class="table_row_option">
  41. <div class="button_editor" @click="EditManager(scope.row)">编辑</div>
  42. <div class="button_editor" @click="EditPassword(scope.row)">重置密码</div>
  43. <div class="button_delete" @click="DeleteManager(scope.row)">删除</div>
  44. </div>
  45. </template>
  46. </el-table-column>
  47. </el-table>
  48. </div>
  49. <div class="page_dialog">
  50. <AddAdmin v-if="dialogData.showDialog" @update="RefTable" />
  51. <ResetPassword v-if="passwordDialog.dialogShow" />
  52. </div>
  53. </div>
  54. </template>
  55. <script lang="ts" setup>
  56. import { ref, reactive, onMounted, onBeforeUnmount, provide} from 'vue'
  57. import { Search } from '@element-plus/icons-vue'
  58. import { ElMessageBox, ElMessage } from 'element-plus'
  59. import { getUserList } from '@/api/school'
  60. import { deleteManager } from '@/api/manager'
  61. import AddAdmin from '@/views/manager/addAdmin.vue'
  62. import ResetPassword from '@/components/resetPassword.vue'
  63. const tableData = ref([]); // 表格数据
  64. const tableLoading = ref(false); //表 格加载loading
  65. const tableKey = ref(0); // 用于强制刷新table
  66. const keyWord = ref(''); // 搜索关键词
  67. const dialogData = reactive({
  68. showDialog: false,
  69. id: '',
  70. pageType: ''
  71. }) // 添加/修改用户弹窗数据
  72. const passwordDialog = reactive({
  73. dialogShow: false,
  74. id: '',
  75. name: '',
  76. label: '',
  77. remark: ''
  78. }) // 重置密码弹窗数据
  79. provide('dialogData', dialogData)
  80. provide('passwordDialog', passwordDialog)
  81. // 获取运维人员列表
  82. const GetUserList = async() => {
  83. try{
  84. tableLoading.value=true;
  85. const res = await getUserList({
  86. queryStr: keyWord.value
  87. })
  88. if(res.code == 200 && res.data) {
  89. const { data } = res
  90. tableData.value = data
  91. }
  92. } catch(error) {
  93. console.error('获取数据失败:', error)
  94. } finally {
  95. tableLoading.value = false
  96. }
  97. }
  98. const GoSearch = () => {
  99. GetUserList()
  100. }
  101. // 组件挂载时自动加载数据
  102. onMounted(() => {
  103. GetUserList()//加载表格数据
  104. })
  105. // 表格相关方法
  106. function GetIndexNumber(index) {
  107. return index + 1
  108. }
  109. const AddManager = () => {
  110. dialogData.showDialog = true
  111. dialogData.pageType = 'add'
  112. }
  113. const EditManager = (row) => {
  114. dialogData.showDialog = true
  115. dialogData.pageType = 'edit'
  116. dialogData.id = row.id
  117. }
  118. const RefTable = (val) => {
  119. dialogData.showDialog = val
  120. GetUserList()
  121. }
  122. const DeleteManager = (row) => {
  123. console.log(row)
  124. ElMessageBox.confirm('确定删除该学校吗?', '提示', {
  125. confirmButtonText: '确定',
  126. cancelButtonText: '取消',
  127. type: 'warning'
  128. }).then(async () => {
  129. const res = await deleteManager({ ids: [row.id] })
  130. if(res.code == 200) {
  131. ElMessage.success(res.msg)
  132. GetUserList()
  133. }else {
  134. ElMessage.error(res.msg)
  135. }
  136. })
  137. }
  138. const EditPassword = (row) => {
  139. console.log(row)
  140. passwordDialog.dialogShow = true
  141. passwordDialog.id = row.id
  142. passwordDialog.name = row.nickname
  143. passwordDialog.label = '用户姓名'
  144. passwordDialog.remark = '用户账号'
  145. }
  146. </script>
  147. <style>
  148. </style>