diff --git a/docs/操作日志_平台角色菜单分配宽度优化_20260817.md b/docs/操作日志_平台角色菜单分配宽度优化_20260817.md new file mode 100644 index 0000000..e032236 --- /dev/null +++ b/docs/操作日志_平台角色菜单分配宽度优化_20260817.md @@ -0,0 +1,41 @@ +# 平台角色菜单分配宽度优化操作日志 + +操作时间:2026-08-17 +操作类型:修改 +影响模块:平台总后台 / 平台管理 / 平台角色 / 分配菜单 + +## 操作前状态 + +- 业务动作弹窗中的关系多选容器没有明确宽度。 +- 菜单权限选择器按内容宽度收缩,下拉项中的中文菜单名称只能显示单个字。 + +## 具体操作 + +1. 关系控件容器增加 `width: 100%` 和 `min-width: 0`。 +2. 关系选择器统一占满容器,下拉面板跟随正常触发器宽度。 +3. 增加静态契约检查,防止全宽样式被误删。 + +## 操作后状态 + +- “分配菜单”的多选控件占满弹窗表单区域。 +- 菜单名称可按正常横向空间展示,搜索、多选和清空行为保持不变。 +- 其他单选、多选关系字段同步获得稳定的容器宽度。 + +## 代码变更 + +- `frontend/platform_admin/src/views/resource/ResourceFieldForm.vue`:修正关系选择控件宽度。 +- `frontend/platform_admin/scripts/check-resource-display-contracts.mjs`:增加多选关系全宽契约。 +- `docs/项目文档_平台资源中文展示统一_v1.0.md`:记录 v1.22 变更。 + +## 验证结果 + +- `pnpm resource-display-contracts:check`:通过。 +- `pnpm contract:check`:通过,48 个资源契约正常。 +- `pnpm type:check`:通过。 +- `pnpm build`:通过。 +- Biome 针对变更文件检查退出码为 0;Vue 模板引用被报为现有未使用警告,本次未引入新的格式或语法错误。 + +## 风险评估 + +- 仅调整前端关系选择器布局,不修改接口、菜单分配数据或权限校验。 +- 小屏页面继续使用原有响应式单列布局。 diff --git a/docs/项目文档_平台资源中文展示统一_v1.0.md b/docs/项目文档_平台资源中文展示统一_v1.0.md index 983bab1..245d1dc 100644 --- a/docs/项目文档_平台资源中文展示统一_v1.0.md +++ b/docs/项目文档_平台资源中文展示统一_v1.0.md @@ -84,3 +84,4 @@ frontend/platform_admin/ - v1.19:客服工单详情的气站、配送点和处理人员统一展示关系名称;未分派、未开始、未完成及未提交结果等空值改用明确业务状态,不再显示裸 `-`。 - v1.20:平台账户接口补回真实创建时间和更新时间;root 未填写联系电话时显示“未填写”,不生成虚假号码。 - v1.21:编辑 root 平台账户时保留 root 角色只读展示,但更新请求不再提交受保护角色;普通账户角色编辑能力保持不变。 +- v1.22:菜单分配等多选关系控件统一占满表单内容区,中文菜单名称和已选项不再被压缩为单字列。 diff --git a/frontend/platform_admin/scripts/check-resource-display-contracts.mjs b/frontend/platform_admin/scripts/check-resource-display-contracts.mjs index 8c6d203..7f27d9c 100644 --- a/frontend/platform_admin/scripts/check-resource-display-contracts.mjs +++ b/frontend/platform_admin/scripts/check-resource-display-contracts.mjs @@ -1,6 +1,6 @@ /** * 功能描述:校验平台48类资源均具备中文展示字段,并防止列表、详情退回数据库ID或动态英文列。 - * 版本:v1.3.0 + * 版本:v1.3.1 */ import fs from 'node:fs'; import path from 'node:path'; @@ -27,6 +27,7 @@ const listPage = read('src/views/shared/CrudListPage.vue'); const listFieldDisplay = read('src/views/shared/resource-list-field-display.ts'); const treePage = read('src/views/shared/TreePage.vue'); const identityText = read('src/components/IdentityText.vue'); +const resourceFieldForm = read('src/views/resource/ResourceFieldForm.vue'); const resourceNames = [...resources.matchAll(/\bdefine\('([^']+)'/g)].map( (match) => match[1], @@ -389,6 +390,17 @@ assertIncludes( "f('phone', { emptyText: '未填写' })", '平台账户联系电话为空时必须显示业务文案', ); +for (const menuRelationLayoutContract of [ + '.relation-control {', + 'width: 100%;', + '.relation-control :deep(.arco-select)', +]) { + assertIncludes( + resourceFieldForm, + menuRelationLayoutContract, + `菜单权限等多选关系控件缺少全宽布局契约:${menuRelationLayoutContract}`, + ); +} for (const rootAccountContract of [ "String(row.platform_role_code ?? '') === 'root'", "visibleKeys.add('platform_role_code')", diff --git a/frontend/platform_admin/src/views/resource/ResourceFieldForm.vue b/frontend/platform_admin/src/views/resource/ResourceFieldForm.vue index f0775d7..bac3267 100644 --- a/frontend/platform_admin/src/views/resource/ResourceFieldForm.vue +++ b/frontend/platform_admin/src/views/resource/ResourceFieldForm.vue @@ -1,6 +1,6 @@