4.4 KiB
4.4 KiB
账户列表受控头像展示操作日志
操作时间:2026-08-11 11:32:28 操作类型:扩展 影响模块:平台总后台工作人员、用户账户、平台账户列表
操作前状态
- 工作人员、用户和平台账户资源定义均包含
avatar字段,通用列表据此生成“头像”列。 - 后端安全投影会从通用列表和详情响应中删除
avatar,前端又把空值格式化为“-”,因此头像列无法显示图片。 - 独立账户资料页已有按账户身份读取头像的鉴权接口,但列表没有缩略图组件、懒加载、并发控制或 Blob URL 回收逻辑。
具体操作
- 扩展
frontend/platform_admin/src/api/avatar.ts,为头像读取增加可选取消信号,原调用方式保持兼容。 - 新增受控列表头像加载器:
- 仅允许
staff_account、user_account、platform_account三类资源。 - 当前列表生命周期内按“资源+唯一标识”缓存请求。
- 同时最多执行 6 个头像请求。
- 刷新、翻页、筛选、资源切换或离开列表时取消任务并清理缓存。
- 仅允许
- 新增 32px 圆形头像缩略图组件:
- 默认先展示资料页现有默认头像。
- 接近可视区域时才调用现有鉴权接口。
- 404 保持默认头像;权限、网络或图片解码异常回退默认头像并显示“头像暂不可用”提示。
- 组件卸载或记录变化时取消请求并释放 Blob URL。
- 修改通用列表头像单元格,保持头像列位于联系电话之后、角色之前,列宽调整为 72px并居中;头像不增加跳转或弹层操作。
- 把列表样式提取到独立 Less 文件,控制通用列表组件体积。
操作后状态
- 工作人员、用户和平台账户列表可在不暴露头像 URI的前提下显示真实头像缩略图。
- 没有头像的账户稳定显示默认头像,异步加载不会改变表格行高。
- 气站账户、配送点账户和生产商账户没有头像字段及受控读取接口,继续不显示头像列。
- 通用列表与详情响应的敏感字段保护规则、后端接口和数据库结构均未改变。
代码变更
frontend/platform_admin/src/api/avatar.ts:头像读取支持取消信号。frontend/platform_admin/src/views/shared/ProtectedAvatarThumbnail.vue:列表缩略图、懒加载、异常回退与资源回收。frontend/platform_admin/src/views/shared/protected-list-avatar-loader.ts:资源白名单、限流、缓存和任务取消。frontend/platform_admin/src/views/shared/CrudListPage.vue:接入受控头像单元格。frontend/platform_admin/src/views/shared/CrudListPage.less:列表布局样式。docs/05-平台总后台需求.md、docs/11-数据接口与安全.md、docs/项目文档_标准资源全页管理_v1.0.md:同步功能和安全边界。
验证结果
npm.cmd run type:check:通过。npm.cmd run build:通过,Vite 生产构建完成。npm.cmd run resource-pages:check:通过,覆盖详情 46 类、新建 25 类、编辑 23 类。npm.cmd run account-roles:check:通过,三套后台既有角色和账户摘要规则保持完整。npm.cmd run contract:check:通过,48 个资源契约一致。- 浏览器回归:
- 安装人员列表真实头像通过 Blob URL加载,原图
220×168,表格中按32×32圆形展示,头像列左右各保留 20px并居中。 - 用户账户列表共10条记录,其中1条显示真实头像、9条无头像记录显示默认头像,所有缩略图均为32px。
- 点击列表“刷新”后真实头像生成新的 Blob URL,确认当前页缓存已清除并重新读取。
- 平台账户列表保留头像列,无头像的 root 账户显示默认头像;工作人员、用户和平台账户替代文本均包含显示名称。
- 工作人员、用户和平台账户列表控制台均无警告或错误,页面无额外横向溢出。
- 安装人员列表真实头像通过 Blob URL加载,原图
风险评估
- 当前列表每页最多 50 条记录;懒加载和最多6个并发请求可降低数据库与网络瞬时压力,但首次滚动仍会产生按记录读取请求。
- 头像 Blob仅在当前列表生命周期内缓存,避免跨页面长期占用内存;刷新会重新请求最新头像。
- 平台账户头像接口仍执行现有对象权限校验,权限不足时只显示“头像暂不可用”,不会通过列表接口绕过限制。
- 本次不新增批量头像接口、公开静态资源或头像 URI投影,现有安全契约保持不变。