# 2026-07-12 工作日志 ## 用户审核弹窗与列表增加店名/姓名/地区信息 针对用户管理 `system/user` 的审核功能做信息补全: ### 1. 新增字段 - `src/api/system/user/model/index.ts`:在 `User` 接口增加 `storeName?: string`(店名)。 ### 2. 用户列表增加「店名」列 - `src/views/system/user/index.vue`: - 列配置在「昵称」后新增 `storeName` 列(`title: '店名'`,`align: 'center'`,`ellipsis: true`)。 - `bodyCell` 渲染分支:空值显示 `-`,保留 `title` 提示完整店名。 ### 3. 审核弹窗展示用户关键信息 - 新增响应式变量 `currentAuditUser`。 - `openAudit(row)` 时把当前行记录赋给 `currentAuditUser`;`openBatchAudit` 时清空(批量审核不展示单条信息)。 - 审核弹窗顶部增加信息区(仅单条审核时展示): - **店名**:`currentAuditUser.storeName || '-'` - **姓名**:`currentAuditUser.realName || currentAuditUser.nickname || '-'`(真实姓名优先,无则取昵称) - **所在地区**:`province + city + region` 拼接,空则显示 `-` ### 验证 - `vue-tsc --noEmit` 类型检查:本次改动文件无新增错误(列出的报错均为项目既有错误:`$router`、`getPageTitle`、`loginUser`/`updateIsAdmin` 未使用、导出数组隐式 any 等,与本次无关)。 - 落地核对:模型 `storeName` 1 处、页面列配置 1 处、`bodyCell` 渲染 1 处、`currentAuditUser` 变量 7 处、弹窗信息区字段各 1 处。 ## 待审核用户专用页 `/system/user/pending` 精简 `src/views/system/user/pending/index.vue` 已存在(基于 user 列表的副本)。按用户要求改造: ### 1. 只显示待审核用户 - `datasource` 改为固定 `auditStatus: 0`,不再读取筛选条件。 ### 2. 删除高级筛选区(角色/注册来源/类型/审核状态 4个下拉 + 搜索/重置按钮) - 模板删除整个 `` 高级筛选区。 - 脚本删除 `searchWhere` reactive、`resetSearch`、`roles` 变量、`filters()` 调用。 - 删除已无用的 `listRoles` import。 - 顶部关键词搜索框(`a-input-search`)保留。 ### 注意点(待用户确认) - 列表的「角色」列、「注册来源」列、「审核状态」列均**保留**(用户要求删除的是筛选"功能",非列表展示列)。其中「审核状态」列在待审核页全会显示"待审核",若用户也想删列表列需再告知。 - 工具栏「新建/修改/重置密码/批量审核/批量删除/导入/导出」按钮保留未动。 ### 验证 - `vue-tsc --noEmit`:本页面无新增类型错误(残留报错均为项目既有问题)。 - 落地核对:高级筛选残留 0、searchWhere/resetSearch/roles/filters/listRoles 残留 0、datasource 固定 auditStatus:0 = 1。 ## 用户列表「头像/手机号/真实姓名」合并为「用户信息」列 `src/views/system/user/index.vue`: 1. **列定义**:删除原来的 `avatar`(头像)、`mobile`(手机号码)、`realName`(真实姓名)三列,新增一列 `userInfo`(用户信息),宽度 220px。 2. **渲染模板**:新 `bodyCell` 分支 `key='userInfo'`,使用 flex 布局: - 左侧:36px 头像(a-avatar) - 右侧上下排列:真实姓名(加粗)+ 手机号码(灰色小字) - 保留 superAdmin 权限判断逻辑(phone vs mobile) 3. **样式**:更新 `.user-box` 样式,增加 gap、user-name 加粗、user-mobile 灰色小字。 ## 按审核状态拆分 user / pending 列表(前后端) 需求:`/system/user/pending` 只显示待审核(0)与被驳回(2);`/system/user` 只显示已通过(1)。后端在 `/Users/gxwebsoft/JAVA/com.gxwebsoft.core`。 ### 后端改动 - `src/main/java/com/gxwebsoft/common/system/param/UserParam.java`: - 给 `auditStatus` 字段补 `@QueryField(type = QueryType.EQ)` 注解(原缺失,不参与查询)。 - 新增 `private Boolean auditPending`(带 `@TableField(exist=false)`)语义字段:是否查询"待处理审核"(待审核0/被驳回2)。 - `src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml`:主查询 `` 在 `status` 条件后追加: - ` AND a.audit_status = #{param.auditStatus} `(单值,user 页用) - ` AND a.audit_status IN (0, 2) `(多值,pending 页用) - 未采用数组参数方案(`auditStatusList: [0,2]`):因 `UserController.page` 是 GET 且 Spring 绑定 `UserParam` 对象,axios 默认把数组序列化为 `key[]=v` 形式,Spring MVC 默认不识别,存在序列化风险。改用语义布尔字段彻底规避。 ### 前端改动 - `src/views/system/user/index.vue`:datasource 固定 `auditStatus: 1`;清理未绑定的死代码 `searchWhere.auditStatus`(定义 + resetSearch)。 - `src/views/system/user/pending/index.vue`:datasource 由 `auditStatus: 0` 改为 `auditPending: true`;审核按钮 `v-if` 由仅 `auditStatus===0` 扩展为 `===0 || ===2`(被驳回用户也可重新审核)。 ### 验证 - 前端 `vue-tsc --noEmit`:user/pending 两页无新增实质类型错误(残留均为项目既有噪音:$router、getPageTitle、TS6133 未使用、TS7053 导出数组索引)。 - 后端落地核对:UserParam auditPending 字段=1、XML 两条件各=1,片段上下文正确。SELECT 用 `a.*` 会返回 `audit_status`(驼峰映射 auditStatus),列表标签正常。 ## 修复 shopGoods 编辑弹窗视频裂图问题 `src/views/shop/shopGoods/components/shopGoodsEdit.vue` 商品图片(400x400) 预览区域: - **问题**:`form.image` 存视频 URL 时 `` 组件无法渲染,显示裂图 - **修复**:新增 `isVideo()` 函数(通过扩展名 .mp4/.webm/.mov 等判断),模板分两个分支: - 视频 → `