消毒机设备
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
4.0 KiB

2 months ago
2 months ago
2 months ago
3 weeks ago
3 weeks ago
2 months ago
2 months ago
2 months ago
3 weeks ago
2 months ago
2 months ago
3 weeks ago
2 months ago
3 weeks ago
2 months ago
3 weeks ago
3 weeks ago
3 weeks ago
3 weeks ago
2 months ago
3 weeks ago
2 months ago
2 months ago
3 weeks ago
3 weeks ago
2 months ago
3 weeks ago
3 weeks ago
2 months ago
  1. <script lang="ts" setup>
  2. import { syncSendCmd } from 'apis/system'
  3. import { FtMessage } from 'libs/message'
  4. import { FtMessageBox } from 'libs/messageBox'
  5. import { onMounted, ref } from 'vue'
  6. import { useSettingStore } from '@/stores/settingStore'
  7. import AddUser from './AddUser.vue'
  8. import ModifyPwd from './ModifyPwd.vue'
  9. const settingStore = useSettingStore()
  10. const tableData = ref(settingStore.userList)
  11. const selectedUserList = ref<User.UserItem[]>([])
  12. const userData = localStorage.getItem('user')
  13. const userInfo = userData ? JSON.parse(userData) : {}
  14. onMounted(() => {
  15. queryUserList()
  16. })
  17. const queryUserList = () => {
  18. const userParams = {
  19. className: 'UserMgrService',
  20. fnName: 'getAllUser',
  21. params: {},
  22. }
  23. syncSendCmd(userParams).then((res) => {
  24. if (res.ackcode === 0) {
  25. tableData.value = res.rely
  26. }
  27. })
  28. }
  29. const updatePwd = (userItem: User.UserItem) => {
  30. // 判断登录是否管理员,非管理员不可修改密码
  31. if (userInfo.roleType !== 'admin' && userInfo.id !== userItem.id) {
  32. FtMessage.error('无权限修改密码')
  33. return
  34. }
  35. settingStore.updateCurrentEditUser(userItem)
  36. settingStore.updatePwdVisible(true)
  37. }
  38. const onAddUser = () => {
  39. settingStore.updateUserModalState('add')
  40. settingStore.updateVisible(true)
  41. }
  42. const onDelUser = (user: User.UserItem) => {
  43. // 自己不是管理员,要删除管理账号,不允许
  44. if (user.id === userInfo.id) {
  45. FtMessage.warning('自己不可删除自己')
  46. return
  47. }
  48. // 禁止删除超级管理员
  49. if (user.name === 'admin') {
  50. FtMessage.warning('不可删除超级管理员用户')
  51. return
  52. }
  53. FtMessageBox.warning('请确认是否删除?').then(() => {
  54. const delParams = {
  55. className: 'UserMgrService',
  56. fnName: 'delUser',
  57. params: {
  58. id: user.id,
  59. },
  60. }
  61. syncSendCmd(delParams).then((res) => {
  62. if (res.ackcode === 0) {
  63. FtMessage.success('删除成功')
  64. queryUserList()
  65. }
  66. })
  67. })
  68. }
  69. const handleSelectionChange = (users: User.UserItem[]) => {
  70. selectedUserList.value = users
  71. }
  72. </script>
  73. <template>
  74. <div class="user">
  75. <div class="add-user">
  76. <bt-button type="primary" button-text="新增用户" @click="onAddUser" />
  77. </div>
  78. <div class="user-table">
  79. <el-table :data="tableData" style="width: 100%" height="100%" @selection-change="handleSelectionChange">
  80. <el-table-column prop="name" label="用户名" />
  81. <el-table-column prop="roleType" label="角色">
  82. <template #default="{ row }">
  83. <span v-if="row.roleType === 'admin'"> 管理员 </span>
  84. <span v-else>普通用户</span>
  85. </template>
  86. </el-table-column>
  87. <el-table-column prop="detail" label="操作" width="250" align="center">
  88. <template #default="scoped">
  89. <div class="user-opera">
  90. <el-button class="view-button" @click.stop="updatePwd(scoped.row)">
  91. 修改密码
  92. </el-button>
  93. <el-button class="delete-button" @click.stop="onDelUser(scoped.row)">
  94. </el-button>
  95. </div>
  96. </template>
  97. </el-table-column>
  98. </el-table>
  99. </div>
  100. <AddUser @refresh="queryUserList" />
  101. <ModifyPwd @refresh="queryUserList" />
  102. </div>
  103. </template>
  104. <style lang="scss" scoped>
  105. .user {
  106. height: 100%;
  107. overflow: hidden;
  108. background: $gradient-color;
  109. .add-user {
  110. display: flex;
  111. align-items: center;
  112. height: 50px;
  113. }
  114. .user-table {
  115. height: calc(100% - 50px);
  116. }
  117. }
  118. .user-opera {
  119. display: flex;
  120. align-items: center;
  121. }
  122. .view-button,
  123. .delete-button {
  124. border: none;
  125. padding: 4px 8px;
  126. border-radius: 3px;
  127. cursor: pointer;
  128. margin-right: 5px;
  129. transition: all 0.3s;
  130. font-family: serif;
  131. }
  132. .view-button {
  133. background-color: #e6f0ff;
  134. color: #1890ff;
  135. }
  136. .view-button:hover {
  137. background-color: #1890ff;
  138. color: white;
  139. }
  140. .delete-button {
  141. background-color: #ffe6e6;
  142. color: #ff4d4f;
  143. }
  144. .delete-button:hover {
  145. background-color: #ff4d4f;
  146. color: white;
  147. }
  148. </style>