一. 需求分析
- 把 02资料/章节207商品删除 中内容拷贝到项目中
- 页面支持多条删除.客户端向服务端传递的是拼接好的字符串,服务端需要对内容进行拆分
- 根据数据库中tb_item表设计,数据删除是逻辑删除,即删除时修改tb_item中status为3
- 商品的删除,下架,上架都是修改status列的值,dao编写时要考虑复用
- 服务器接收后删除多条数据,返回EgoResult对应的JSON数据,客户端根据返回数据的Status判断是否删除成功
$.post("/item/delete",{"ids":ids},function (data) {
if (data.Status==200){
$.messager.show({
title:'系统消息',
msg:'删除'+ids+'成功',
showType:'show',
showType:'slide'
});
$("#item_table").datagrid("reload")
}else{
$.messager.show({
title:'系统消息',
msg:'删除失败',
showType:'show',
showType:'slide'
});
}
})
- 在页面中Datagrid中已经编写了代码,根据不同status值显示不同效果
{field: 'Status', title: '状态', width: 100,formatter: function(value,row,index){
if (value==1){
return "正常";
}else if (value==2){
return "<span style='color:blue'>下架</span>";
}else if (value==3){
return "<span style='color:red'>删除</span>";
}
}
},
二.代码实现
/*
返回值如果小于0表示更新失败
*/
func updStatusByIdsDao(ids []string,status int) int{
if len(ids)<=0{
return -1
}
sql:="update tb_item set status=? where "
for i:=0;i<len(ids);i++{
sql+=" id="+ids[i]
if i<len(ids)-1{
sql+=" or "
}
}
count,err := commons.Dml(sql,status)
if err!=nil{
fmt.Println(err)
return -1
}
return int(count)
}
//删除商品
func delByIdsService(ids string) (e commons.EgoResult){
count:=updStatusByIdsDao(strings.Split(ids,","),3)
if count>0{
e.Status=200
}
return
}
- 在TbItemController.go中添加函数,并修改ItemHandler()函数内容
//商品删除
func delByIdsController(w http.ResponseWriter, r *http.Request) {
ids:=r.FormValue("ids")
er:=delByIdsService(ids)
b,_:=json.Marshal(er)
w.Header().Set("Content-Type","application/json;charset=utf-8")
w.Write(b)
}
func ItemHandler() {
commons.Router.HandleFunc("/showItem", showItemController)
commons.Router.HandleFunc("/item/delete", delByIdsController)
}