1 SPU规格维护
1.1 获取SPU规格
请求路径(GET):/product/attr/base/listforspu/{spuId}
响应数据:
{
"msg": "success",
"code": 0,
"data": [{
"id": 43,
"spuId": 11,
"attrId": 7,
"attrName": "入网型号",
"attrValue": "LIO-AL00",
"attrSort": null,
"quickShow": 1
}]
}
1、在AttrController
里创建baseAttrListForSpu
方法
@Autowired
ProductAttrValueService productAttrValueService;
@GetMapping("/base/listforspu/{spuId}")
public R baseAttrListForSpu(@PathVariable("spuId") Long spuId) {
List<ProductAttrValueEntity> entityList = productAttrValueService.baseAttrListForSpu(spuId);
return R.ok().put("data", entityList);
}
2、实现baseAttrListForSpu
方法
@Override
public List<ProductAttrValueEntity> baseAttrListForSpu(Long spuId) {
List<ProductAttrValueEntity> entities = this.baseMapper.selectList(new QueryWrapper<ProductAttrValueEntity>().eq("spu_id", spuId));
return entities;
}
3、重启服务测试
坑:点击规格按钮报400错误找不到页面
解决方法(转自评论区):
**方法一:**在数据库gulimall_admin执行以下sql再刷新页面:INSERT INTO sys_menu (menu_id, parent_id, name, url, perms, type, icon, order_num) VALUES (76, 37, '规格维护', 'product/attrupdate', '', 2, 'log', 0);
但是我执行了之后还是不行
**方法二:**在前端代码 src/router/index.js 文件中,定义 mainRoutes 时在 children 中定义一行路由(40 行):
{ path: '/product-attrupdate', component: _import('modules/product/attrupdate'), name: 'attr-update', meta: { title: '规格维护', isTab: true } }
改完后,成功看到规格页面
1.2 修改商品规格
请求路径(POST):/product/attr/update/{spuId}
请求参数:
[{
"attrId": 7,
"attrName": "入网型号",
"attrValue": "LIO-AL00",
"quickShow": 1
}, {
"attrId": 14,
"attrName": "机身材质工艺",
"attrValue": "玻璃",
"quickShow": 0
}, {
"attrId": 16,
"attrName": "CPU型号",
"attrValue": "HUAWEI Kirin 980",
"quickShow": 1
}]
响应数据:
{
"msg": "success",
"code": 0
}
1、在AttrController
中创建updateSpuAttr
方法
@PostMapping("/update/{spuId}")
public R updateSpuAttr(@PathVariable("spuId") Long spuId,
@RequestBody List<ProductAttrValueEntity> entityList) {
productAttrValueService.updateSpuAttr(spuId, entityList);
return R.ok();
}
2、实现updateSpuAttr
方法
雷神的方法是先删除全部再插入,会造成 id 变化。下面的方法就直接循环修改表了
@Override
public void updateSpuAttr(Long spuId, List<ProductAttrValueEntity> entityList) {
entityList.forEach(item -> {
productAttrValueDao.update(item, new UpdateWrapper<ProductAttrValueEntity>().eq("spu_id", spuId).eq("attr_id", item.getAttrId()));
});
}
3、重启服务测试
先到规格参数页面里多添加几个可选值
修改测试