Files
xinlong-shop-taro/.workbuddy/memory/2026-07-06.md
赵忠林 082646a613 feat(image): 全项目应用图片压缩优化
- 将图片显示统一替换为 getCompressedImageUrl 函数处理压缩
- 覆盖 35 个文件,包括 4 个组件和 31 个页面
- 主要组件:LazyImage、ProductCard、OrderCard、SkuSelector 内部自动压缩图片
- 主要页面:购物车、订单、积分、活动、拼团、秒杀、收藏、浏览历史等
- 跳过用户头像、二维码、商品详情大图及所有 Taro.previewImage 调用
- 调整压缩默认宽度为 300,保持质量90,启用压缩功能
2026-07-06 12:21:39 +08:00

96 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 2026-07-06 工作日志
## 修复收藏列表页面空白问题
- **文件**: `src/api/shop/shopGoodsFavorite/index.ts`
- **问题**: `listShopGoodsFavorite``pageShopGoodsFavorite` 使用 `request.get`(默认 `returnRaw: true`),返回完整 `{ code, message, data }` 对象而非业务数据,页面拿到对象当数组用导致 `list.length``undefined`,始终显示空状态
- **修复**: 改为与同文件 `addShopGoodsFavorite` 等函数一致的模式 — 接收 `ApiResult<T>`,检查 `res.code === 0` 后返回 `res.data`
- **注意**: `src/pages/favorite-list.tsx``src/pages/user/favorite-list/index.tsx` 的重复文件,内容完全一样
## 修复领券中心页面 SQL 报错
- **错误**: `Unknown column 'venue_type' in 'field list'`
- **根因**: 后端运行中的 `ShopCoupon` 实体类包含 `venue_type``venue_id``use_count``use_duration` 字段,但数据库表 `shop_coupon` 缺少这 4 列
- **后端项目路径**: `/Users/gxwebsoft/JAVA/guilixu-java`(实际运行项目)
- **修复内容**:
1. 更新后端实体类 `ShopCoupon.java`,补充 `receiveTarget``receiveUserIds``venueType``venueId``useCount``useDuration` 字段(源码之前缺失,与运行时版本对齐)
2.`enabled` 字段从 `Boolean` 改为 `Integer`,解决 Jackson 反序列化 `"1"` 失败
3. 修正 `ShopCouponController.page()``expire_type` 查询条件:`0/1` 改为 `10/20`(与数据库实际枚举值一致)
4. 生成数据库迁移 SQL`src/main/resources/sql/shop_coupon_add_venue_fields.sql`
- **需执行**: 重新编译部署后端
## 补充商品数据解决微信审核驳回
### 背景
微信小程序审核被驳回:「积分商城」页面无具体运营内容。根本原因是 tenant_id=10611鑫龙家电下没有任何商品分类和商品数据。
### 数据创建
通过 Python + pymysql 直连 MySQL 数据库47.119.165.234:13308/modules为 tenant 10611 创建:
- **5 个一级分类**:大家电、厨房电器、生活电器、个护健康、智能设备
- **15 个二级分类**:冰箱、洗衣机、空调、电视、电饭煲、微波炉、抽油烟机、吸尘器、电风扇、加湿器、电动牙刷、理发器、智能音箱、智能门锁、智能手表
- **34 个商品**(全部 status=0 上架):
- 每个分类 2-3 个商品
- 包含真实品牌名(美的、海尔、格力、小米、华为等)、型号、规格
- 三档价格price到手价、sale_price市场价划线、dealer_priceVIP 价)
- 12 个商品标记为推荐recommend=1
- 图片复用 oss.wsdns.cn 已有图片 URL
- 商品详情为 HTML 格式,含商品描述和图片
- 轮播图字段files为 JSON 数组格式
- 分类 count 字段已同步更新
### 注意事项
- 图片是复用其他租户的商品图片,后续可替换为真实商品图
- 商品数据为模拟数据,用于通过审核,后续可在后台管理系统中编辑替换
## 修复门店商品管理页 Tab 标签不一致
- **文件**: `src/pages/store/goods/index.tsx`
- **问题**: 商品状态 status=0 在后端定义是「已上架」,但页面 Tab 标签写的是「出售中」,与商品状态标签文字不一致
- **修复**: Tab「出售中」→「已上架」让 Tab 标签与商品状态文字保持一致
- **附带修复**: `src/api/shop/shopGoods/model/index.ts``ShopGoodsParam.status` 注释从「0上架 1下架」改为「0上架 1待上架 2待审核 3审核不通过」
## 门店商品管理页编辑弹窗补充会员价字段
- **文件**: `src/pages/store/goods/index.tsx`
- **问题**: 编辑弹窗只有到手价和市场价缺少会员价dealerPrice输入框
- **修复**:
1. `editForm` state 新增 `dealerPrice: ''`
2. `openEditModal` 中填充 `dealerPrice: goods.dealerPrice || ''`
3. 表单 UI 在市场价和库存之间新增会员价输入框
4. `submitEdit` 提交时携带 `dealerPrice`
## 修复门店商品管理页选择分类需点击两次才生效
- **文件**: `src/pages/store/goods/index.tsx`
- **问题**: `handleSelectCategory` 中先 `setSelectedCategory` 再立即调用 `loadGoods`,但 `loadGoods` 通过闭包读取到的 `selectedCategory` 仍是旧值,导致第一次点击实际用的是上次选中的分类
- **修复**: `loadGoods` 增加可选参数 `categoryId``handleSelectCategory` 选择分类后直接把新的 `cat?.categoryId` 传入 `loadGoods`,避免闭包取到旧状态
## 门店商品管理页添加图片上传/更换功能
- **文件**: `src/pages/store/goods/index.tsx`
- **问题**: 编辑弹窗只能修改价格库存等字段,缺少商品图片上传和更换功能
- **修复**:
1. 引入 `uploadFile` from `@/api/system/file`
2. 新增 `uploadingImage` 状态追踪上传进度
3. 新增 `handleUploadImage` 函数:调用 `uploadFile()` 上传图片,获取返回的 `path` 更新 `editGoods.image`
4. 编辑弹窗商品信息区:图片改为可点击触发上传,蒙层显示「更换」/「上传中...」,无图时显示照相机占位符
5. `submitEdit` 提交时携带 `editGoods.image` 保存新图片
## 门店商品管理页添加轮播图上传/删除功能
- **文件**: `src/pages/store/goods/index.tsx`
- **问题**: 编辑弹窗缺少轮播图(`files` 字段)管理能力;实际 `files` 为对象数组 `[{uid,url,status}]`,首次实现只按字符串数组解析导致图片无法显示
- **修复**:
1. `editForm` 新增 `files` 状态,元素为 `{ uid?, url, status? }` 对象
2. `openEditModal` 解析 `goods.files`:兼容对象数组 `[{uid,url,status}]`、字符串数组 `["url"]`、逗号分隔字符串三种格式
3. 新增 `handleAddBanner` 上传新轮播图(生成 `{ uid: file.id, url, status: 'done' }``handleRemoveBanner` 删除指定位置轮播图
4. 编辑弹窗新增轮播图区域:显示现有图片+删除按钮,底部「上传」入口
5. `submitEdit` 提交时将 `files` 数组 `JSON.stringify` 后保存
## 新增图片压缩工具函数
- **文件**: `src/utils/image.ts`(新建)
- **函数**: `getCompressedImageUrl(url, options?)` — 给 OSS 图片 URL 拼接阿里云图片处理参数
- **默认参数**: `width=750, quality=90, enabled=true`
- **安全处理**: 空 URL 返回空串、已含 `x-oss-process` 不重复拼接、根据已有 query 参数自动选 `?`/`&` 分隔符
- **使用约定**: 列表/卡片等缩略图场景使用此函数;预览大图(`Taro.previewImage`)直接用原 URL不调用此函数
## 全项目应用 getCompressedImageUrl
- **修改范围**: 35 个文件4 个组件 + 31 个页面文件)
- **组件**: LazyImage、ProductCard、OrderCard、SkuSelector — 组件内部自动压缩
- **页面**: shop/cart/checkout/category/index/seckill-list/group-buy-list/group-buy-detail, order/detail/evaluate/evaluate-detail/after-sale-*, order-list, user/favorite-list/history-list/benefit-*, points/*, store/goods/orders, index/index/article-list, activity/event/*, group-buy-list/detail, seckill-list/detail, history-list, favorite-list
- **跳过(不压缩)**: 头像(user/user, user/member, user/profile, user/index, user/team, store/center)、二维码(share, user/promotion)、商品详情大图/轮播(shop/product-detail, shop/seckill-detail)、所有 Taro.previewImage 调用