Files
guilixu-admin/.workbuddy/memory/2026-07-07.md
赵忠林 6118e2be01 fix(expressTemplate): 修正运费模板计费方式类型及删除报错
- 将运费模板和详情模型中的计费方式 type 从 string 改为 boolean 类型
- 修改相关页面中计费方式显示及选择控件为布尔值 true/false 表示按件/按重量
- 统一删除操作使用后端返回的主键 id 替代废弃的 shopExpressTemplateId
- 修复删除运费模板时报错“参数格式错误: id 的值 'undefined' 无法转换为 Integer”
- ele-modal 关闭按钮定位修复,兼容最大化按钮时的偏移问题
- 小程序端 checkout 运费模板接入,支持动态计算显示运费费用
- 优化编辑表单中首件/续件数量或重量的动态标签和占位提示逻辑
2026-07-07 15:03:06 +08:00

59 lines
3.7 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-07 工作日志
## 运费模板模块优化shopExpressTemplate & shopExpressTemplateDetail
### 问题分析
两个模块存在大量代码生成器遗留问题:
1. 空列标题、数据库注释当列标题
2. 状态语义冲突标题写0=已发布/1=待审核实际显示0=显示/1=隐藏)
3. deleted/updateTime 不应在表单中可编辑
4. 表单验证规则无效(引用了不存在的字段名 shopExpressTemplateName
5. 价格/数量字段用 a-input 而非 a-input-number
6. type 计费方式用文本输入而非 radio
7. search.vue 导入了错误的 GradeParam 类型,缺少搜索框和批量删除按钮
8. 行选择未启用(用了 :selection 而非 v-model:selection
9. 大量未使用变量loading/showMove/images/chooseImage等
### 优化内容
- **Model**: 补充 shopExpressTemplateId / shopExpressTemplateDetailId 主键字段,完善注释
- **index.vue**: 修正列标题、移除 deleted 列、启用 v-model:selection、清理无用变量、type 列用 tag 展示
- **Edit.vue**: 修正表单标签、修复验证规则title 等必填字段)、价格用 a-input-number、type 用 radio、移除 updateTime/deleted 编辑项、添加 confirm-loading
- **search.vue**: 修正类型导入、添加搜索输入框、添加批量删除按钮disabled 联动 selection
- **Detail Edit**: templateId 改为下拉选择(从 listShopExpressTemplate 加载选项)
- 修复 rules 类型错误reactive<Record<string, any>>
### Bug 修复
- **JSON 反序列化错误**: 后端 type 字段为 Java Boolean前端 radio 值从字符串 "0"/"1" 改为 true/falseModel 中 type 类型从 string 改为 boolean
- **ele-modal X按钮错位**: component.less 添加 ele-modal 关闭按钮定位修复,有最大化按钮时右移 56px
- **shopExpressTemplate/index.vue**: selection 绑定从 `:selection` 修正为 `v-model:selection`
## 小程序端运费模板接入guilixu-taro checkout
### 现状分析
- checkout.tsx 运费硬编码"免运费",零处 import shopExpressTemplate API
- ShopGoods 模型中有 expressTemplateId 字段,运费模板与商品关联
- ShopExpressTemplate 有 firstNum/firstAmount/extraNum/extraAmount 定价字段
- 地址模型只有 province/city 字符串名,无数字 ID地区匹配暂不可行
### 实现方案
采用主模板定价方案(不依赖地区匹配):
- 创建 src/utils/expressFee.tscomputeExpressFee() 工具函数
- 按模板分组、合并同模板商品数量、应用计费公式
- fee = firstAmount + extraAmount * ceil(max(0, Q - firstNum) / extraNum)
- 修改 checkout.tsx添加 expressFee 状态 + useEffect 自动计算 + 动态显示运费 + 纳入总价
### 注意事项
- 购物车 items 不包含 product 嵌套对象cart checkout 时 expressTemplateId 为 undefined运费显示为 0免运费
- buyNow 流程 items 包含 product 数据,运费计算正常工作
- 后端创建订单时会独立计算运费,前端仅用于展示预览
## 修复 shopExpressTemplate 删除报错
- 问题:删除运费模板时报错 "参数格式错误: id 的值 'undefined' 无法转换为 Integer"
- 根因:后端返回的主键字段是 `id`,但前端代码用了 `row.shopExpressTemplateId`Model 中定义了两个字段,实际后端只返回 `id`
- 修复文件:
- `src/views/shop/shopExpressTemplate/index.vue``row-key`、删除、批量删除均改为用 `row.id`
- `src/views/shop/shopExpressTemplateDetail/index.vue`:同上
- `src/views/shop/shopExpressTemplateDetail/components/shopExpressTemplateDetailEdit.vue`:下拉选择器 `field-names``value` 改为 `'id'`
- 注意:该模块 Model 中 `shopExpressTemplateId``id` 并存,建议后续清理废弃字段