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

3.7 KiB
Raw Permalink Blame History

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.shopExpressTemplateIdModel 中定义了两个字段,实际后端只返回 id
  • 修复文件:
    • src/views/shop/shopExpressTemplate/index.vuerow-key、删除、批量删除均改为用 row.id
    • src/views/shop/shopExpressTemplateDetail/index.vue:同上
    • src/views/shop/shopExpressTemplateDetail/components/shopExpressTemplateDetailEdit.vue:下拉选择器 field-namesvalue 改为 'id'
  • 注意:该模块 Model 中 shopExpressTemplateIdid 并存,建议后续清理废弃字段