# 客户管理页面重新设计实施计划 ## Summary 承接授权系统重构批次,前 6 项变更(后端续期 bug 修复、AuthorizationService 复用记录逻辑、UserService 联表查询、types/index.ts 字段扩展、Authorizations.vue/css 重新设计)已全部完成并验证。本计划仅聚焦最后一项剩余工作:**重新设计 `Customers.vue` + `Customers.css`**,让客户卡片显示当前授权状态,并将"授权"按钮的文案与行为根据授权状态动态化,与 `Authorizations.vue` 的蓝紫渐变设计语言保持一致。 ## Current State Analysis ### 已就绪的基础设施(无需重复实现) - **后端** `UserDto` 已新增 3 个字段:`AuthorizationId` / `AuthorizationStatus` / `AuthorizationEndTime`([Dtos.cs](file:///d:/TraeProject/MilliSim4/backend/MilliSim.Api/Common/Dtos/Dtos.cs#L49-L57)) - **后端** `UserService.GetUsersAsync` 已联表查询 `Authorizations` 表,按 UserId 分组取最新一条填充到 UserDto([UserService.cs](file:///d:/TraeProject/MilliSim4/backend/MilliSim.Api/Services/UserService.cs#L82-L98)) - **前端** `User` 接口已扩展 3 个可选字段([types/index.ts](file:///d:/TraeProject/MilliSim4/frontend/src/types/index.ts#L73-L78)) - **前端** `Authorizations.vue` 已建立设计语言基准(蓝紫渐变 + 统计栏 + 状态胶囊 + 卡片渐变背景层),可作为本页面的视觉参考 - **前端** `authorizationApi.renew(id, days)` 已发送 `{ days }` body,与后端 `[FromBody] RenewAuthorizationRequest` 修复匹配 - **后端** `CreateAuthorizationAsync` 已重构为"复用原记录"逻辑(存在任意状态授权时复用,不新建),因此客户卡片上的"为客户授权"和"重新授权"都可调用 `authorizationApi.create({ userId, days })` ### 当前 Customers.vue 的不足 1. **卡片不显示授权状态**:仅显示用户状态徽章(启用/禁用),无授权信息 2. **授权按钮文案固定**:"授权"图标按钮,无状态感知 3. **授权弹窗过于简单**:仅一个天数输入框,无快捷按钮、无续期后到期时间预览 4. **视觉设计缺乏设计感**:与重新设计后的 Authorizations.vue 风格不一致 5. **续期无法在此页面完成**:必须跳转到授权管理页面 ## Proposed Changes ### 文件 1: `d:\TraeProject\MilliSim4\frontend\src\views\admin\Customers.vue` **保留**:页头卡片、筛选区(关键词 + 用户状态 TabFilter)、新增/编辑客户弹窗(含头像上传、账号信息、联系方式、状态设置三个分区)、重置密码、删除客户逻辑。 **变更 1:卡片结构重新设计**(替换原 L59-L112 的 `data-grid` 内容) 新卡片结构: ```vue
{{ getAuthStatusLabel(row.authorizationStatus) }}
{{ row.nickname || row.username }}
@{{ row.username }}
用户状态 {{ row.status === 1 ? '启用' : '禁用' }}
手机 {{ row.phone }}
邮箱 {{ row.email }}
到期 {{ formatTime(row.authorizationEndTime) }} (剩 {{ remainingDays(row.authorizationEndTime) }} 天)
注册 {{ formatTime(row.createdAt) }}
``` **变更 2:脚本逻辑扩展**(在 `