From ac710c180120efd1f6d61d200140d9905395f107 Mon Sep 17 00:00:00 2001 From: ZhangAo Date: Mon, 21 Sep 2026 17:33:45 +0800 Subject: [PATCH] 20260921173344 --- .../src/views/system/user/UserPowerDrawer.vue | 69 +- .../src/views/system/user/UserPowerPanel.vue | 610 ++++++++++-------- .../tests/views/user-power-drawer.spec.js | 22 +- .../tests/views/user-power-panel.spec.js | 317 ++++++--- code/fms/分配权限抽屉布局草图.html | 389 +++++++++++ 5 files changed, 1000 insertions(+), 407 deletions(-) create mode 100644 code/fms/分配权限抽屉布局草图.html diff --git a/code/fms/fms-vue/src/views/system/user/UserPowerDrawer.vue b/code/fms/fms-vue/src/views/system/user/UserPowerDrawer.vue index 190b6448..76c410cb 100644 --- a/code/fms/fms-vue/src/views/system/user/UserPowerDrawer.vue +++ b/code/fms/fms-vue/src/views/system/user/UserPowerDrawer.vue @@ -6,15 +6,15 @@ * s_user_field_power 字段权限(按模块 × 字段的 查看 / 编辑 / 查询 / 导出) * s_user_data_power 数据范围(按模块 × 操作的范围类型与条件) * - * 布局:右侧 Drawer,头部只有一行页签(不渲染标题),关闭按钮由 ui/Drawer 固定在最右端。 + * 布局:右侧 Drawer。头部是常规形态 —— 左侧账号标识(给谁配)、右侧关闭按钮; + * 三个页签在内容区顶部,与模块管理页的配置区同一形态(页签只管导航, + * 内容由下方 v-show 面板承载,切换页签不销毁已挂载的面板)。 * 账号级的「全授权 / 全禁用」在功能权限面板自己的工具栏里(见 UserPowerPanel), * 不占头部,也不会在切到其它页签时仍显示。 - * 页签用 nav-only(Tabs 只管导航),内容由下方 v-show 面板承载 —— 与模块管理的 - * 配置区同一形态,切换页签不销毁已挂载的面板。 * * 当前「功能权限」已接入;字段权限与数据范围仍为空面板。 */ -import { ref, watch } from 'vue' +import { computed, ref, watch } from 'vue' import { Button, Drawer, Message, Tabs } from '@/components/ui' import { loadDataApi, saveObjectApi } from '@/services/api' import UserPowerPanel from './UserPowerPanel.vue' @@ -27,6 +27,21 @@ const props = defineProps({ const emit = defineEmits(['update:open']) +/* ---------- 头部账号标识 ---------- */ +/** 当前账号:用户名 + 编码(名称缺失时只用编码) */ +const userLabel = computed(() => { + const name = String(props.user?.b_name ?? '').trim() + const id = String(props.user?.b_id ?? '').trim() + if (name && id) return `${name}(${id})` + return name || id || '' +}) + +/** + * 抽屉标题。列表行操作点进来后,抽屉里再没有第二条账号线索(页签与面板都只有模块、 + * 菜单、权限点),关掉抽屉才能核对是给谁配的权限,所以把账号提到头部。 + */ +const drawerTitle = computed(() => (userLabel.value ? `分配权限 · ${userLabel.value}` : '分配权限')) + /* ---------- 页签 ---------- */ const activeTab = ref('power') @@ -198,15 +213,15 @@ async function save() {