From ecb536f101ffd390022426299e348997211121aa Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 9 Apr 2026 12:49:06 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=88=97=E8=A1=A8=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=8A=BD=E5=B1=89=E6=95=88=E6=9E=9C=E8=AF=A6=E7=BB=86?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/styles/ruoyi.scss | 52 +++++++ src/layout/components/TagsView/index.vue | 10 +- src/views/system/user/index.vue | 14 +- src/views/system/user/view.vue | 179 +++++++++++++++++++++++ 4 files changed, 249 insertions(+), 6 deletions(-) create mode 100644 src/views/system/user/view.vue diff --git a/src/assets/styles/ruoyi.scss b/src/assets/styles/ruoyi.scss index 87bdf3d..01e49cd 100644 --- a/src/assets/styles/ruoyi.scss +++ b/src/assets/styles/ruoyi.scss @@ -241,6 +241,58 @@ } /** 详细卡片样式 */ +.detail-drawer { + .el-drawer__body { + padding: 0; + } + .el-drawer__header { + margin-bottom: 6px; + padding: 8px 12px 6px; + font-size: 15px; + color: #303133; + background: #f8f8f8; + } + .section-header { + font-size: 15px; + color: #6379bb; + border-bottom: 1px solid #ddd; + margin: 12px 0 16px 0; + padding-bottom: 8px; + } + .drawer-content { + padding: 0 20px 20px 20px; + .info-item { + display: flex; + align-items: flex-start; + padding: 8px 0; + min-height: 40px; + } + .info-label { + flex-shrink: 0; + width: 200px; + color: #606266; + font-size: 13px; + line-height: 1.6; + padding-top: 4px; + text-align: right; + margin-right: 14px; + } + .info-value { + flex: 1; + color: #303133; + font-size: 13px; + font-weight: 500; + line-height: 1.6; + word-break: break-all; + padding-top: 4px; + min-height: 1.6em; + &.plaintext { + border-bottom: 1px dashed #dde1e6; + } + } + } +} + .detail-wrap { padding: 0 4px; } .detail-card { diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue index 75817b6..3c26a64 100644 --- a/src/layout/components/TagsView/index.vue +++ b/src/layout/components/TagsView/index.vue @@ -251,14 +251,13 @@ function toggleFullscreen() { const mainContainer = document.querySelector('.main-container') as HTMLElement | null const navbar = document.querySelector('.navbar') as HTMLElement | null const sidebar = document.querySelector('.sidebar-container') as HTMLElement | null - const tagsActionBtn = document.querySelector('.tags-action-btn') if (!mainContainer) return if (!isFullscreen.value) { mainContainer.classList.add('fullscreen-mode') document.body.style.overflow = 'hidden' const elementsToHide = [{ el: navbar, originalDisplay: navbar?.style.display || '' }, { el: sidebar, originalDisplay: sidebar?.style.display || '' }] - elementsToHide.forEach((item :any) => { + elementsToHide.forEach(item => { if (item.el && item.el.style.display !== 'none') { item.originalDisplay = item.el.style.display item.el.style.display = 'none' @@ -269,13 +268,14 @@ function toggleFullscreen() { } else { mainContainer.classList.remove('fullscreen-mode') document.body.style.overflow = '' - hiddenElements.value.forEach((item :any) => { + hiddenElements.value.forEach((item: any) => { if (item.el) { item.el.style.display = item.originalDisplay } }) - hiddenElements.value = ref([]) - tagsActionBtn?.blur() + hiddenElements.value = [] + const tagsBtn = document.querySelector('.tags-action-btn') as HTMLElement | null + tagsBtn?.blur() isFullscreen.value = false } } diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index 3bb8878..c829ff7 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -46,7 +46,11 @@ - + + + @@ -172,6 +176,8 @@ + + @@ -182,6 +188,7 @@ import { getToken } from "@/utils/auth" import useAppStore from '@/store/modules/app' import TreePanel from "@/components/TreePanel" import ExcelImportDialog from "@/components/ExcelImportDialog" +import UserViewDrawer from "./view" import { changeUserStatus, listUser, resetUserPwd, delUser, getUser, updateUser, addUser, deptTreeSelect } from "@/api/system/user" import type { SysUser, UserQueryParams, UserFormDataResult } from '@/types/api/system/user' import type { SysRole } from '@/types/api/system/role' @@ -370,6 +377,11 @@ function handleSelectionChange(selection: SysUser[]) { multiple.value = !selection.length } +/** 详情按钮操作 */ +function handleViewData(row: SysUser) { + proxy.$refs["userViewRef"].open(row.userId) +} + /** 导入按钮操作 */ function handleImport() { proxy.$refs["importUserRef"].open() diff --git a/src/views/system/user/view.vue b/src/views/system/user/view.vue new file mode 100644 index 0000000..a150490 --- /dev/null +++ b/src/views/system/user/view.vue @@ -0,0 +1,179 @@ + + +