index.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <template>
  2. <com-head :options="[{ name: '用户管理', value: '2' }]">
  3. <el-form label-width="84px">
  4. <el-form-item label="所属架构:">
  5. <com-company v-model="state.query.departmentId" />
  6. </el-form-item>
  7. <el-form-item label="用户账号:">
  8. <el-input v-model="state.query.userName" placeholder="请输入手机号"></el-input>
  9. </el-form-item>
  10. <el-form-item label="用户姓名:">
  11. <el-input v-model="state.query.nickName" placeholder="请输入"></el-input>
  12. </el-form-item>
  13. <el-form-item label="状态:">
  14. <el-select v-model="state.query.status" placeholder="全部">
  15. <el-option label="全部" :value="''"></el-option>
  16. <el-option label="启用" :value="1"></el-option>
  17. <el-option label="禁用" :value="0"></el-option>
  18. </el-select>
  19. </el-form-item>
  20. <el-form-item class="searh-btns">
  21. <el-button type="primary" @click="refresh">查询</el-button>
  22. <el-button type="primary" plain @click="queryReset">重置</el-button>
  23. </el-form-item>
  24. </el-form>
  25. </com-head>
  26. <div class="body-layer" style="padding-top: 8px">
  27. <div class="body-but">
  28. <el-button type="primary" v-pdpath="'add'" @click="addHandler">新增用户</el-button>
  29. </div>
  30. <el-table
  31. class="user-table"
  32. :data="state.table.rows"
  33. style="width: 100%; max-height: 480px"
  34. size="large"
  35. >
  36. <el-table-column label="序号" width="70" v-slot:default="{ $index }">
  37. <div style="text-align: center">
  38. {{ state.pag.size * (state.pag.currentPage - 1) + $index + 1 }}
  39. </div>
  40. </el-table-column>
  41. <el-table-column label="手机号(账号)" prop="userName"></el-table-column>
  42. <el-table-column label="用户名称" prop="nickName"></el-table-column>
  43. <el-table-column label="所属架构" prop="deptName"></el-table-column>
  44. <el-table-column label="角色" prop="roleName"></el-table-column>
  45. <el-table-column label="状态" v-slot:default="{ row }">
  46. {{ row.status ? "启用" : "禁用" }}
  47. </el-table-column>
  48. <el-table-column label="操作" v-slot:default="{ row }">
  49. <span
  50. class="oper-span"
  51. v-pddept="[row, 'edit']"
  52. :class="{ disable: row.type === 0 }"
  53. @click="editHandler(row)"
  54. >编辑</span
  55. >
  56. <span
  57. class="oper-span"
  58. @click="switchUserStatus(row)"
  59. :class="{ disable: user.info.id == row.id }"
  60. v-pddept="[row, 'disabled']"
  61. style="color: var(--primaryColor)"
  62. >{{ row.status ? "禁用" : "启用" }}</span
  63. >
  64. <span
  65. class="oper-span"
  66. style="color: var(--primaryColor)"
  67. @click="delInfo(row)"
  68. :class="{ disable: user.info.id == row.id }"
  69. v-pddept="[row, 'del']"
  70. >删除</span
  71. >
  72. </el-table-column>
  73. </el-table>
  74. <com-pagination
  75. @size-change="changPageSize"
  76. @current-change="changPageCurrent"
  77. :current-page="state.pag.currentPage"
  78. :page-size="state.pag.size"
  79. :total="state.pag.total"
  80. />
  81. </div>
  82. </template>
  83. <script setup lang="ts">
  84. import { usePagging } from "@/hook/pagging";
  85. import comHead from "@/components/head/index.vue";
  86. import comCompany from "@/components/company-select/index.vue";
  87. import comPagination from "@/components/pagination/index.vue";
  88. import { UserInfo, changeUserStatus, delUser, getUserPagging, user } from "@/store/user";
  89. import { ElMessage } from "element-plus";
  90. import { confirm } from "@/helper/message";
  91. import { addUser, editUser } from "./quisk";
  92. const { state, queryReset, refresh, changPageCurrent, changPageSize } = usePagging({
  93. get: getUserPagging,
  94. paramsTemlate: {
  95. nickName: "",
  96. status: "" as any,
  97. departmentId: "",
  98. userName: "",
  99. },
  100. });
  101. const delInfo = async (row: UserInfo) => {
  102. if (
  103. await confirm(
  104. "用户被删除后,无法登陆使用,无法编辑场景(可将该用户关联的相机绑定到其他管理员),确认要删除组织吗?"
  105. )
  106. ) {
  107. delUser(row.id);
  108. ElMessage.success("操作成功");
  109. refresh();
  110. }
  111. };
  112. const addHandler = async () => {
  113. (await addUser({})) && refresh();
  114. };
  115. const editHandler = async (row: UserInfo) => {
  116. if (!row.status) {
  117. return ElMessage.error("请先启用用户");
  118. }
  119. (await editUser({ user: row })) && refresh();
  120. };
  121. const switchUserStatus = async (row: UserInfo) => {
  122. const enable = !row.status;
  123. const msg = !enable
  124. ? `用户被禁用后,无法登录使用,无法编辑场景(可将该用户关联的相机绑定到其它管理员)。确定要禁用吗?`
  125. : `用户被启用后,可正常登录使用。确定要启用吗?`;
  126. if (enable || (await confirm(msg))) {
  127. await changeUserStatus(row);
  128. refresh();
  129. }
  130. };
  131. </script>
  132. <style scoped lang="scss"></style>