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.
1 lines
30 KiB
1 lines
30 KiB
{"ast":null,"code":"import { ref, computed, onMounted, reactive } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { useStore } from 'vuex';\nimport { ElMessage, ElMessageBox } from 'element-plus';\nimport { Search } from '@element-plus/icons-vue';\nimport { getAllUsers, updateUserRole, deleteUser, getUserList } from '@/api/auth';\nexport default {\n __name: 'UserManagement',\n setup(__props, {\n expose: __expose\n }) {\n __expose();\n const router = useRouter();\n const store = useStore();\n const loading = ref(false);\n const userList = ref([]);\n const currentPage = ref(1);\n const pageSize = ref(10);\n const total = ref(0);\n\n // 搜索表单\n const searchForm = reactive({\n username: '',\n realName: '',\n roleCode: ''\n });\n\n // 角色选项\n const roleOptions = [{\n label: '系统管理员',\n value: 'ROLE_ADMIN'\n }, {\n label: '物流管理员',\n value: 'ROLE_LOGISTICS_ADMIN'\n }, {\n label: '仓库管理员',\n value: 'ROLE_WAREHOUSE_ADMIN'\n }, {\n label: '普通用户',\n value: 'ROLE_USER'\n }];\n\n // 获取角色标签类型\n const getRoleTagType = roleCode => {\n const typeMap = {\n 'ROLE_ADMIN': 'danger',\n 'ROLE_LOGISTICS_ADMIN': 'warning',\n 'ROLE_WAREHOUSE_ADMIN': 'success',\n 'ROLE_USER': 'info'\n };\n return typeMap[roleCode] || 'info';\n };\n\n // 获取角色显示文本\n const getRoleLabel = roleCode => {\n const labelMap = {\n 'ROLE_ADMIN': '系统管理员',\n 'ROLE_LOGISTICS_ADMIN': '物流管理员',\n 'ROLE_WAREHOUSE_ADMIN': '仓库管理员',\n 'ROLE_USER': '普通用户'\n };\n return labelMap[roleCode] || roleCode;\n };\n const loadUsers = async () => {\n loading.value = true;\n try {\n // 确保传递正确的分页参数\n const params = {\n pageNum: currentPage.value,\n pageSize: pageSize.value,\n username: searchForm.username || undefined,\n realName: searchForm.realName || undefined,\n roleCode: searchForm.roleCode || undefined\n };\n console.log('请求参数:', params); // 添加日志\n const res = await getUserList(params);\n if (res.code === 200 && res.data) {\n // 直接使用后端返回的数据\n userList.value = res.data.records; // 当前页的记录\n total.value = res.data.total; // 总记录数\n currentPage.value = res.data.current; // 当前页码\n pageSize.value = res.data.size; // 每页条数\n\n console.log('分页数据:', {\n currentPage: res.data.current,\n pageSize: res.data.size,\n total: res.data.total,\n recordsCount: res.data.records.length\n });\n }\n } catch (error) {\n console.error('加载用户列表失败:', error);\n ElMessage.error(error.message || '加载用户列表失败');\n } finally {\n loading.value = false;\n }\n };\n\n // 处理每页条数变化\n const handleSizeChange = val => {\n pageSize.value = val;\n currentPage.value = 1; // 重置到第一页\n loadUsers();\n };\n\n // 处理页码变化\n const handleCurrentChange = val => {\n currentPage.value = val;\n loadUsers();\n };\n\n // 处理搜索\n const handleSearch = () => {\n currentPage.value = 1; // 搜索时重置为第一页\n loadUsers();\n };\n\n // 重置搜索\n const resetSearch = () => {\n searchForm.username = '';\n searchForm.realName = '';\n searchForm.roleCode = '';\n currentPage.value = 1; // 重置时回到第一页\n pageSize.value = 10; // 重置每页条数\n loadUsers();\n };\n\n // 修改角色相关\n const dialogVisible = ref(false);\n const currentUser = ref(null);\n const roleForm = reactive({\n roleCode: '' // 改回使用 roleCode\n });\n const handleUpdateRole = user => {\n currentUser.value = user;\n roleForm.roleCode = getRoleCodeByName(user.realName);\n dialogVisible.value = true;\n };\n const confirmUpdateRole = async () => {\n try {\n // 检查是否选择了相同的角色\n if (getRoleCodeByName(currentUser.value.realName) === roleForm.roleCode) {\n ElMessage.warning('用户已经是该角色');\n return;\n }\n const newRoleName = getRoleNameByCode(roleForm.roleCode);\n await ElMessageBox.confirm(`确定要将用户 ${currentUser.value.username} 的角色从 ${currentUser.value.realName} 更改为 ${newRoleName} 吗?`, '提示', {\n type: 'warning',\n confirmButtonText: '确定',\n cancelButtonText: '取消'\n });\n const res = await updateUserRole(currentUser.value.id, roleForm.roleCode);\n if (res.code === 200) {\n ElMessage.success('角色更新成功');\n dialogVisible.value = false;\n // 直接更新当前用户的角色名称\n currentUser.value.realName = res.data.realName;\n // 更新列表中对应用户的数据\n const index = userList.value.findIndex(user => user.id === currentUser.value.id);\n if (index !== -1) {\n userList.value[index].realName = res.data.realName;\n }\n }\n } catch (error) {\n if (error === 'cancel') return;\n console.error('更新角色失败:', error);\n if (error.response?.status === 401) {\n ElMessage.error('登录已过期,请重新登录');\n router.push('/login');\n } else if (error.response?.status === 403) {\n ElMessage.error('没有权限执行此操作');\n } else if (error.response?.status === 400) {\n if (error.response.data?.message) {\n ElMessage.error(error.response.data.message);\n } else {\n ElMessage.error('用户已有该角色或角色不存在');\n }\n } else {\n ElMessage.error(error.message || '更新角色失败');\n }\n }\n };\n\n // 判断当前用户是否是超级管理员\n const isAdmin = computed(() => {\n return store.state.userInfo?.roles?.includes('ROLE_ADMIN');\n });\n\n // 处理删除用户\n const handleDelete = async user => {\n try {\n await ElMessageBox.confirm(`确定要删除用户 ${user.username} 吗?此操作不可恢复!`, '警告', {\n type: 'warning',\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n confirmButtonClass: 'el-button--danger'\n });\n const res = await deleteUser(user.id);\n if (res.code === 200) {\n ElMessage.success('用户删除成功');\n // 从列表中移除该用户\n userList.value = userList.value.filter(item => item.id !== user.id);\n // 更新总数\n total.value -= 1;\n // 如果当前页没有数据了,且不是第一页,则跳转到上一页\n if (userList.value.length === 0 && currentPage.value > 1) {\n currentPage.value -= 1;\n loadUsers();\n }\n }\n } catch (error) {\n if (error === 'cancel') return;\n console.error('删除用户失败:', error);\n if (error.response?.status === 401) {\n ElMessage.error('登录已过期,请重新登录');\n router.push('/login');\n } else if (error.response?.status === 403) {\n ElMessage.error('没有权限执行此操作');\n } else if (error.response?.status === 404) {\n ElMessage.error('用户不存在');\n } else {\n ElMessage.error(error.response?.data?.message || '删除用户失败');\n }\n }\n };\n onMounted(() => {\n loadUsers();\n });\n const __returned__ = {\n router,\n store,\n loading,\n userList,\n currentPage,\n pageSize,\n total,\n searchForm,\n roleOptions,\n getRoleTagType,\n getRoleLabel,\n loadUsers,\n handleSizeChange,\n handleCurrentChange,\n handleSearch,\n resetSearch,\n dialogVisible,\n currentUser,\n roleForm,\n handleUpdateRole,\n confirmUpdateRole,\n isAdmin,\n handleDelete,\n ref,\n computed,\n onMounted,\n reactive,\n get useRouter() {\n return useRouter;\n },\n get useStore() {\n return useStore;\n },\n get ElMessage() {\n return ElMessage;\n },\n get ElMessageBox() {\n return ElMessageBox;\n },\n get Search() {\n return Search;\n },\n get getAllUsers() {\n return getAllUsers;\n },\n get updateUserRole() {\n return updateUserRole;\n },\n get deleteUser() {\n return deleteUser;\n },\n get getUserList() {\n return getUserList;\n }\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n};","map":{"version":3,"names":["ref","computed","onMounted","reactive","useRouter","useStore","ElMessage","ElMessageBox","Search","getAllUsers","updateUserRole","deleteUser","getUserList","router","store","loading","userList","currentPage","pageSize","total","searchForm","username","realName","roleCode","roleOptions","label","value","getRoleTagType","typeMap","getRoleLabel","labelMap","loadUsers","params","pageNum","undefined","console","log","res","code","data","records","current","size","recordsCount","length","error","message","handleSizeChange","val","handleCurrentChange","handleSearch","resetSearch","dialogVisible","currentUser","roleForm","handleUpdateRole","user","getRoleCodeByName","confirmUpdateRole","warning","newRoleName","getRoleNameByCode","confirm","type","confirmButtonText","cancelButtonText","id","success","index","findIndex","response","status","push","isAdmin","state","userInfo","roles","includes","handleDelete","confirmButtonClass","filter","item"],"sources":["D:/language/VScode/Front-end logistics/src/views/admin/UserManagement.vue"],"sourcesContent":["<template>\r\n <div class=\"user-management\">\r\n <el-card>\r\n <template #header>\r\n <div class=\"card-header\">\r\n <span class=\"title\">用户管理</span>\r\n <div class=\"search-area\">\r\n <el-form :inline=\"true\" :model=\"searchForm\" class=\"search-form\">\r\n <div class=\"search-row\">\r\n <el-form-item label=\"用户名\">\r\n <el-input\r\n v-model=\"searchForm.username\"\r\n placeholder=\"请输入用户名\"\r\n clearable\r\n @clear=\"handleSearch\"\r\n />\r\n </el-form-item>\r\n \r\n <el-form-item label=\"真实姓名\">\r\n <el-input\r\n v-model=\"searchForm.realName\"\r\n placeholder=\"请输入真实姓名\"\r\n clearable\r\n @clear=\"handleSearch\"\r\n />\r\n </el-form-item>\r\n \r\n <el-form-item label=\"用户角色\">\r\n <el-select \r\n v-model=\"searchForm.roleCode\"\r\n placeholder=\"请选择角色\"\r\n clearable\r\n @clear=\"handleSearch\"\r\n >\r\n <el-option\r\n v-for=\"role in roleOptions\"\r\n :key=\"role.value\"\r\n :label=\"role.label\"\r\n :value=\"role.value\"\r\n />\r\n </el-select>\r\n </el-form-item>\r\n \r\n <div class=\"search-buttons\">\r\n <el-button type=\"primary\" @click=\"handleSearch\">搜索</el-button>\r\n <el-button @click=\"resetSearch\">重置</el-button>\r\n </div>\r\n </div>\r\n </el-form>\r\n </div>\r\n </div>\r\n </template>\r\n \r\n <el-table\r\n v-loading=\"loading\"\r\n :data=\"userList\"\r\n style=\"width: 100%\"\r\n >\r\n <el-table-column prop=\"id\" label=\"ID\" width=\"80\" />\r\n <el-table-column prop=\"username\" label=\"用户名\" />\r\n <el-table-column prop=\"realName\" label=\"真实姓名\" />\r\n <el-table-column prop=\"email\" label=\"邮箱\" />\r\n <el-table-column prop=\"roles\" label=\"角色\">\r\n <template #default=\"{ row }\">\r\n <el-tag \r\n :type=\"getRoleTagType(row.roleCode)\"\r\n class=\"role-tag\"\r\n >\r\n {{ getRoleLabel(row.roleCode) }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"status\" label=\"状态\" width=\"100\">\r\n <template #default=\"{ row }\">\r\n <el-tag :type=\"row.status === 1 ? 'success' : 'danger'\">\r\n {{ row.status === 1 ? '启用' : '禁用' }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"createTime\" label=\"创建时间\" width=\"180\" />\r\n </el-table>\r\n \r\n <div class=\"pagination\">\r\n <el-pagination\r\n v-model:current-page=\"currentPage\"\r\n v-model:page-size=\"pageSize\"\r\n :page-sizes=\"[10, 20, 50]\"\r\n :total=\"total\"\r\n layout=\"total, sizes, prev, pager, next\"\r\n @size-change=\"handleSizeChange\"\r\n @current-change=\"handleCurrentChange\"\r\n />\r\n </div>\r\n </el-card>\r\n\r\n <!-- 添加修改角色的对话框 -->\r\n <el-dialog\r\n v-model=\"dialogVisible\"\r\n title=\"修改用户角色\"\r\n width=\"400px\"\r\n >\r\n <el-form :model=\"roleForm\" label-width=\"80px\">\r\n <el-form-item label=\"用户\">\r\n <span>{{ currentUser?.username }}</span>\r\n </el-form-item>\r\n <el-form-item label=\"角色\">\r\n <el-select v-model=\"roleForm.roleCode\" placeholder=\"请选择角色\">\r\n <el-option \r\n label=\"普通用户\" \r\n value=\"ROLE_USER\"\r\n :disabled=\"currentUser?.realName === '普通用户'\"\r\n />\r\n <el-option \r\n label=\"仓库管理员\" \r\n value=\"ROLE_WAREHOUSE_ADMIN\"\r\n :disabled=\"currentUser?.realName === '仓库管理员'\"\r\n />\r\n <el-option \r\n label=\"物流管理员\" \r\n value=\"ROLE_LOGISTICS_ADMIN\"\r\n :disabled=\"currentUser?.realName === '物流管理员'\"\r\n />\r\n <el-option \r\n label=\"超级管理员\" \r\n value=\"ROLE_ADMIN\"\r\n :disabled=\"currentUser?.realName === '系统管理员'\"\r\n />\r\n </el-select>\r\n </el-form-item>\r\n </el-form>\r\n <template #footer>\r\n <span class=\"dialog-footer\">\r\n <el-button @click=\"dialogVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" @click=\"confirmUpdateRole\">确定</el-button>\r\n </span>\r\n </template>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, computed, onMounted, reactive } from 'vue'\r\nimport { useRouter } from 'vue-router'\r\nimport { useStore } from 'vuex'\r\nimport { ElMessage, ElMessageBox } from 'element-plus'\r\nimport { Search } from '@element-plus/icons-vue'\r\nimport { getAllUsers, updateUserRole, deleteUser, getUserList } from '@/api/auth'\r\n\r\nconst router = useRouter()\r\nconst store = useStore()\r\nconst loading = ref(false)\r\nconst userList = ref([])\r\nconst currentPage = ref(1)\r\nconst pageSize = ref(10)\r\nconst total = ref(0)\r\n\r\n// 搜索表单\r\nconst searchForm = reactive({\r\n username: '',\r\n realName: '',\r\n roleCode: ''\r\n})\r\n\r\n// 角色选项\r\nconst roleOptions = [\r\n { label: '系统管理员', value: 'ROLE_ADMIN' },\r\n { label: '物流管理员', value: 'ROLE_LOGISTICS_ADMIN' },\r\n { label: '仓库管理员', value: 'ROLE_WAREHOUSE_ADMIN' },\r\n { label: '普通用户', value: 'ROLE_USER' }\r\n]\r\n\r\n// 获取角色标签类型\r\nconst getRoleTagType = (roleCode) => {\r\n const typeMap = {\r\n 'ROLE_ADMIN': 'danger',\r\n 'ROLE_LOGISTICS_ADMIN': 'warning',\r\n 'ROLE_WAREHOUSE_ADMIN': 'success',\r\n 'ROLE_USER': 'info'\r\n }\r\n return typeMap[roleCode] || 'info'\r\n}\r\n\r\n// 获取角色显示文本\r\nconst getRoleLabel = (roleCode) => {\r\n const labelMap = {\r\n 'ROLE_ADMIN': '系统管理员',\r\n 'ROLE_LOGISTICS_ADMIN': '物流管理员',\r\n 'ROLE_WAREHOUSE_ADMIN': '仓库管理员',\r\n 'ROLE_USER': '普通用户'\r\n }\r\n return labelMap[roleCode] || roleCode\r\n}\r\n\r\nconst loadUsers = async () => {\r\n loading.value = true\r\n try {\r\n // 确保传递正确的分页参数\r\n const params = {\r\n pageNum: currentPage.value,\r\n pageSize: pageSize.value,\r\n username: searchForm.username || undefined,\r\n realName: searchForm.realName || undefined,\r\n roleCode: searchForm.roleCode || undefined\r\n }\r\n \r\n console.log('请求参数:', params) // 添加日志\r\n const res = await getUserList(params)\r\n \r\n if (res.code === 200 && res.data) {\r\n // 直接使用后端返回的数据\r\n userList.value = res.data.records // 当前页的记录\r\n total.value = res.data.total // 总记录数\r\n currentPage.value = res.data.current // 当前页码\r\n pageSize.value = res.data.size // 每页条数\r\n \r\n console.log('分页数据:', {\r\n currentPage: res.data.current,\r\n pageSize: res.data.size,\r\n total: res.data.total,\r\n recordsCount: res.data.records.length\r\n })\r\n }\r\n } catch (error) {\r\n console.error('加载用户列表失败:', error)\r\n ElMessage.error(error.message || '加载用户列表失败')\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\n// 处理每页条数变化\r\nconst handleSizeChange = (val) => {\r\n pageSize.value = val\r\n currentPage.value = 1 // 重置到第一页\r\n loadUsers()\r\n}\r\n\r\n// 处理页码变化\r\nconst handleCurrentChange = (val) => {\r\n currentPage.value = val\r\n loadUsers()\r\n}\r\n\r\n// 处理搜索\r\nconst handleSearch = () => {\r\n currentPage.value = 1 // 搜索时重置为第一页\r\n loadUsers()\r\n}\r\n\r\n// 重置搜索\r\nconst resetSearch = () => {\r\n searchForm.username = ''\r\n searchForm.realName = ''\r\n searchForm.roleCode = ''\r\n currentPage.value = 1 // 重置时回到第一页\r\n pageSize.value = 10 // 重置每页条数\r\n loadUsers()\r\n}\r\n\r\n// 修改角色相关\r\nconst dialogVisible = ref(false)\r\nconst currentUser = ref(null)\r\nconst roleForm = reactive({\r\n roleCode: '' // 改回使用 roleCode\r\n})\r\n\r\nconst handleUpdateRole = (user) => {\r\n currentUser.value = user\r\n roleForm.roleCode = getRoleCodeByName(user.realName)\r\n dialogVisible.value = true\r\n}\r\n\r\nconst confirmUpdateRole = async () => {\r\n try {\r\n // 检查是否选择了相同的角色\r\n if (getRoleCodeByName(currentUser.value.realName) === roleForm.roleCode) {\r\n ElMessage.warning('用户已经是该角色')\r\n return\r\n }\r\n\r\n const newRoleName = getRoleNameByCode(roleForm.roleCode)\r\n\r\n await ElMessageBox.confirm(\r\n `确定要将用户 ${currentUser.value.username} 的角色从 ${currentUser.value.realName} 更改为 ${newRoleName} 吗?`,\r\n '提示',\r\n {\r\n type: 'warning',\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消'\r\n }\r\n )\r\n \r\n const res = await updateUserRole(currentUser.value.id, roleForm.roleCode)\r\n if (res.code === 200) {\r\n ElMessage.success('角色更新成功')\r\n dialogVisible.value = false\r\n // 直接更新当前用户的角色名称\r\n currentUser.value.realName = res.data.realName\r\n // 更新列表中对应用户的数据\r\n const index = userList.value.findIndex(user => user.id === currentUser.value.id)\r\n if (index !== -1) {\r\n userList.value[index].realName = res.data.realName\r\n }\r\n }\r\n } catch (error) {\r\n if (error === 'cancel') return\r\n\r\n console.error('更新角色失败:', error)\r\n if (error.response?.status === 401) {\r\n ElMessage.error('登录已过期,请重新登录')\r\n router.push('/login')\r\n } else if (error.response?.status === 403) {\r\n ElMessage.error('没有权限执行此操作')\r\n } else if (error.response?.status === 400) {\r\n if (error.response.data?.message) {\r\n ElMessage.error(error.response.data.message)\r\n } else {\r\n ElMessage.error('用户已有该角色或角色不存在')\r\n }\r\n } else {\r\n ElMessage.error(error.message || '更新角色失败')\r\n }\r\n }\r\n}\r\n\r\n// 判断当前用户是否是超级管理员\r\nconst isAdmin = computed(() => {\r\n return store.state.userInfo?.roles?.includes('ROLE_ADMIN')\r\n})\r\n\r\n// 处理删除用户\r\nconst handleDelete = async (user) => {\r\n try {\r\n await ElMessageBox.confirm(\r\n `确定要删除用户 ${user.username} 吗?此操作不可恢复!`,\r\n '警告',\r\n {\r\n type: 'warning',\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n confirmButtonClass: 'el-button--danger'\r\n }\r\n )\r\n \r\n const res = await deleteUser(user.id)\r\n if (res.code === 200) {\r\n ElMessage.success('用户删除成功')\r\n // 从列表中移除该用户\r\n userList.value = userList.value.filter(item => item.id !== user.id)\r\n // 更新总数\r\n total.value -= 1\r\n // 如果当前页没有数据了,且不是第一页,则跳转到上一页\r\n if (userList.value.length === 0 && currentPage.value > 1) {\r\n currentPage.value -= 1\r\n loadUsers()\r\n }\r\n }\r\n } catch (error) {\r\n if (error === 'cancel') return\r\n \r\n console.error('删除用户失败:', error)\r\n if (error.response?.status === 401) {\r\n ElMessage.error('登录已过期,请重新登录')\r\n router.push('/login')\r\n } else if (error.response?.status === 403) {\r\n ElMessage.error('没有权限执行此操作')\r\n } else if (error.response?.status === 404) {\r\n ElMessage.error('用户不存在')\r\n } else {\r\n ElMessage.error(error.response?.data?.message || '删除用户失败')\r\n }\r\n }\r\n}\r\n\r\nonMounted(() => {\r\n loadUsers()\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.user-management {\r\n min-height: 100%;\r\n}\r\n\r\n.card-header {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 20px;\r\n}\r\n\r\n.title {\r\n font-size: 18px;\r\n font-weight: bold;\r\n}\r\n\r\n.search-area {\r\n background-color: #f8f9fa;\r\n padding: 15px;\r\n border-radius: 4px;\r\n}\r\n\r\n.search-form {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 15px;\r\n}\r\n\r\n.search-row {\r\n display: flex;\r\n align-items: center;\r\n gap: 20px;\r\n}\r\n\r\n.search-row :deep(.el-form-item) {\r\n margin-bottom: 0;\r\n margin-right: 0;\r\n}\r\n\r\n.search-buttons {\r\n margin-left: auto;\r\n}\r\n\r\n:deep(.el-input),\r\n:deep(.el-select) {\r\n width: 200px;\r\n}\r\n\r\n.role-tag {\r\n margin-right: 5px;\r\n}\r\n\r\n.pagination {\r\n margin-top: 20px;\r\n display: flex;\r\n justify-content: flex-end;\r\n}\r\n</style> "],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|