admin_new P0+P1 全批次合并 (84 commits) #2
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "develop"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
P0+P1 全批次
P0 交付冲刺 (08-07)
P1 (08-07)
W9-W17 (07-05 ~ 07-28)
Playwright 验证
问题: W5.x.x+4 把 log×3 + job/schedule 路由统一改成 MockTableView + configKey, W5.x.x+5 写的 LogErrorView/LogLoginView/LogOperationView/ScheduleListView 4 个真 view (241/179/216/198 行) 因路由没引用从未生效, 用户实际看到的都是 mock 数据. 根因诊断: - /sys/log/error/page 200 OK + 809 条真数据 (database sys_log_error) - /sys/log/login/page 200 OK + 50166 条 - /sys/log/operation/page 200 OK + 41771 条 - /sys/schedule/page 200 OK (0 条, QRTZ 表未建) - 之前 user 看 log 看到 mock 是因为 router 把 /sys/log/error 路由到 MockTableView (configKey sys-log-error), 不是 LogErrorView 修法: 改 src/router/index.ts 4 行, 让 /sys/log/{login,operation,error} 指向真 view, /job/schedule 指向 ScheduleListView. 验证 (Playwright + token 注入): - 错误日志 title="错误日志" rows=20 sub="共 809 条" - 登录日志 title="登录日志" rows=20 sub="共 50166 条" - 操作日志 title="操作日志" rows=20 sub="共 41771 条" - 定时任务 title="定时任务" rows=0 sub="共 0 个任务" (QRTZ 表待建) 额外发现: 操作日志显示 F002 MCP 列出询价 GET 反复失败, 是平台助手集成 bug 的真实证据 影响: FileListView 无菜单入口, 暂不接 router (保留 152 行代码供未来菜单化) ps: 后端 client_credentials token 触发 @PreAuthorize Access Denied, 必须用 admin/admin password grant + captcha=socialedu (前端 LoginView 走此路径, 无感知)根因: Spring Security /auth/oauth/token 401 响应带 WWW-Authenticate: Basic realm="oauth2/client" 浏览器拦截该响应头后弹出原生 HTTP Basic Auth 对话框("身份验证"), 在 axios/JS 处理响应之前就触发,前端代码无法拦截. 修法: nginx-vue.conf /auth/ location 加 proxy_hide_header WWW-Authenticate; 同时 PlaceholderView/AppLayout fetch 调用加 credentials: omit 兜底. 验证: curl 测试 401 响应已无 WWW-Authenticate 头,登录流程不再触发浏览器弹窗.- 33 个 ListView.vue 加 :borderless=true + :page-sizes=[10,20,50,100] 覆盖: order/inquiry/finance/operateguide/sys/Dept|Menu|File|Notice| Params|User|Role|Post|DictType|DictData|Product|Schedule|RoleGroup user/Enterprise|enterpriselevel|enterprisescore|enterpriserating supplier/promoter|couponscope|historylog|logistics|ordercomment|Activity other/goodunit|label|textconfig api/feedback|help|lunbo openapi/AuditLog|CompanyAccount - OrderListView: columns 抽到 script setup (computed) + :borderless + :page-sizes + sub 动态显示选中数 - router/index.ts: /product/shop → redirect /supplier/good (删 src/modules/product/shop/ShopListView.vue 旧占位, 后端 404 无意义) - 沿用 W17 设计规范 v2 (PageHeader+SearchBar+DataTable+ListTabs)用户反馈: 切已禁用 tab 后, 顶部全部数字变成 1 (跟当前 tab 过滤后的 total 走) 期望: 全部 = 正常 + 禁用, 三个 tab 看到的数字一致 根因: tabItems 的 all 用 total.value, 而 total 是当前 tab 后端返的分页总数 (已禁用 tab 下, total=1 因为只有 1 条禁用用户) 修法: - tabItems.all count = enabledStats.normal + enabledStats.disabled (跨 tab 一致) - PageHeader sub 也改成 enabledStats.normal + enabledStats.disabled (跟搜索条件关联) - 三个 tab 看到的数字自然一致: 2284 = 2283 + 1用户反馈: 单位列"单/位"两字被挤压换行, 强调"以后标题行的规范不能换行" 根因: 1. DataTable header-cell-style 虽设 whiteSpace:"nowrap", 但 el-table 在列宽挤压下 内部 .cell 容器仍会被 word-break 强制换行 (element-plus 历史 bug) 2. 单位列 width 80 不够, 标题"单位"两字被压 修法: 1. DataTable 加全局 :deep CSS 兜底 :deep(.el-table__header-wrapper .cell) { white-space: nowrap !important; overflow: visible !important } :deep(.el-table th .cell) { word-break: keep-all } → 所有 list 页表头统一不换行 2. 单位列 width 80 → 90, minWidth 80 → 90 (保底宽度足够显示"单位"两字) 效果: - 全局所有用 DataTable 的页面 (User/Order/Inquiry/Finance/Good/Service 等 33 个) 表头都不换行, 符合规范"标题行不换行" - 单位列文字"单位"完整在一行- 新建 TableActions 通用组件 (src/components/TableActions/, ~120 行) * primary 常驻主操作 (el-button text) * more 次操作收进 ⋯ el-dropdown (MoreFilled 触发) * label/type 支持 string 或函数 (覆盖动态: 上架/下架, 禁用/启用) * when 条件渲染 (替代散落各处的 v-if) * danger 项自动 divided + 红字 * 复用 global-popper.scss 已铺好的 el-dropdown 主题 - 15 个按钮≥3 的 list 页改造 (按钮≤2 的 27 页不动): 5 按钮: GoodListView/ServiceGoodListView/CouponListView 4 按钮: OrderListView/OpenAppListView 3 按钮: user/UserListView/CompanyAccountListView/LabelListView/ ScheduleListView/sys/UserListView/EnterpriselevelListView/ OrderCommentListView/PromoterListView/CategoryGoodListView/ RegionListView - 列宽统一 240/280/220/200/320 → 140 (固定窄列) - 清理 4 个 rr-actions 页不再使用的 .rr-actions/.rr-actions__sep 样式 - 业务逻辑全保留 (onClick 函数/二次确认/条件渲染逻辑) - OrderListView 退款条件修正: [1,2,3,4].includes → ===4 (原 v-else-if 链语义)用户反馈: 按钮没显示全 + 间距太大不美观 间距收紧: - el-button text padding 0 8px → 0 4px (默认太松散) - .rr-table-actions gap 4px → 0 (按钮紧贴) - ⋯ 触发器 26px → 22px (更小巧) - 实测: 按钮间距 0px, 按钮到⋯ 间距 2px 布局逻辑理顺: - 多个 computed (visibleActions/isCollapsing/primaryActions/moreActions) → 合并为单一 layout computed ({primary, more}) - 减少中间依赖, 更可靠 Playwright 验证通过 (订单页): - status=1 行: [详情,付款] + ⋯ (4按钮前2显) - status=4 行: [详情,退款,打印] (3按钮全显无⋯) - status≥5 行: [详情,打印] (2按钮无⋯)用户反馈: 集成管理-应用列表 (openapi/app) 在 1920 视口下右侧大面积留空, 操作列按钮显示不全。参考用户列表 (图二) 已撑满做统一标准。 根因 (W17 早期遗留): - .rr-openapi-app { max-width: 1400px } 锁死容器宽度 - 适合 1440 视口, 但 1920 视口暴露问题 - 用户列表用 .rr-page { max-width: 100% } 早已不受限 修法 (统一标准): - openapi/app .rr-openapi-app { max-width: 1400px } → 100% - DataTable 组件增强: 加 tableRef + lastColMinWidth 状态 * mounted/resize/data 变化时测量: 容器宽 vs 列总宽 * 差额自动加到最后一列 minWidth (统一标准: 视口撑满) * 即使其他页面 max-width 仍写 1400px, 也能通过 JS 撑满 W17.8 列宽调整 (W17.8 已 commit, 现 +W17.8.1): - 应用名称 minWidth 180 → 220 - AppID minWidth 220 → 240 - 新增最后调用列 (lastUsedAt, width 170) - 操作列 width 140 → 160 + align: center + fixed: right Playwright 1920 视口实测: - 用户列表 (参考): 1632px 表格 / 28px 右边距 ✅ - 应用列表 (修后): 1630px 表格 / 29px 右边距 ✅ (与参考页一致) 操作列按钮完整性: - 行 0/2/3 (status=0/1): [详情, 重发二维码] + ⋯ ✅ - 行 1 (status=2): [详情, 删除] (无⋯, 符合规则) ✅*** v2: 解决 v1 的两个根本问题 *** 问题 1: v1 的 endpoints page() 返回 EnterpriseFeignDTO (仅4个字段), 导致 administrator/industry/supplierLevel 等30+字段全缺。 根因: 上次 F002 修复把原始全字段 page 替换成了精简版 feign 端点。 修法: 把 F002 page 改名为 pageSimple, 恢复原始 EnterpriseDTO page 端点。 问题 2: v1 用原生 el-table 不守 UI 规范。 修法: 套 PageHeader/SearchBar/DataTable 组件 + 按项目设计规范。 改动: - 后端: ApiEnterpriseController +pageSimple (F002 feign精简版) +page (全字段) - 后端: EnterpriseFeign/fallback/OpenApiCustomerController 调 pageSimple - 前端: EnterpriseListView 完整重写: - PageHeader + SearchBar (企业名称/行业/供应商等级) + 批量操作栏 - DataTable: selection/企业名称(头像)/管理员+手机(两行)/行业+等级(两行)/标签/业务员/状态/入驻时间/操作 - 操作列: 详情/更换管理员/更多(审核/标签/评级/禁用/隐藏/推荐/分配/删除) - 详情弹窗: EnterpriseDTO 全字段(含驳回原因/工商号/注册时间/法人) - 字段映射: 完全来自后端 EnterpriseDTO (编译反编译确认所有字段存在) - API: /user/enterprise/page 传 enterpriseName/industry/supplierLevel/salesperson/supplierLabel/status/homeShow 过滤改前: line 48 captchaUrl = /auth/captcha (img src 不走 axios baseURL) line 68 axios.post(/auth/oauth/token) (不走 http 实例 baseURL) 巨变数字 nginx 只代理 /api/ 前缀, /auth/* 全 404 改后: line 48 /api/auth/captcha line 68 /api/auth/oauth/token 验证 (0 命中才通过): grep /auth/captcha dist/*.js | grep -v /api → 0 ✅ grep /auth/oauth dist/*.js | grep -v /api → 0 ✅