京淘项目实战开发-06 [工具栏的实现、商品的增删改查、上下架、商品详情回显]

1.商品后台业务操作

1.1 工具栏实现

在这里插入图片描述

1.1.1 工具栏入门案例

/*定义工具栏  */
			toolbar: [{  		
				  iconCls: 'icon-edit',  	//图标的样式	
				  handler: function(){alert("点击工具栏")}  	//回显的弹窗
				  },'-',{  		
				  iconCls: 'icon-help',  	//图标的样式	
				  handler: function(){alert('帮助工具栏')}  	
				  },'-',{
					  iconCls: 'icon-save',		//图标的样式	
					  handler: function(){alert('保存工具栏')}
				  }],  

1.2 商品分类名称回显

分析商品回显:

 function getSelectionsIds(){
        //选中的是所有表格数据的信息
    	var itemList = $("#itemList");//商品目录
        //获取用户选中元素
    	var sels = itemList.datagrid("getSelections");
    	//console.log(sels);
    	var ids = [];
    	//in i index下标  of  对象
    	for(var i in sels){
    	    //将用户获取的id封装到新的数组中
    		ids.push(sels[i].id);
    	}
        //设定连接符,拼接字符串[1,2,3,4,5] => 1,2,3,4,5
        //回后续做考虑,1,2,3能打包向后传,数组则不能
    	ids = ids.join(",");
    	return ids;
    }

编辑页面JS

item-list.jsp

//根据id 动态获取商品分类名称
					var cid = data.cid;
					//通过ajax请求程序动态获取用户数据
					$.get("/itemCat/findItemCatById",{id: cid},function(data){
						var name = data.name
						//如何将name属性绑定到分类表格中?
						//.val("xxxx") value属性值    .text("xxxxx") 标签中间的文本值
						$("#itemeEditForm input[name='cid']").prev().text(name)
					})

在这里插入图片描述

页面效果:
在这里插入图片描述

1.3 商品更新操作

1.3.1 页面分析

在这里插入图片描述

1.3.2 页面JS分析

$("#itemeEditForm [name=itemParams]").val(paramJson);
		//data 回调函数
		$.post("/item/update",$("#itemeEditForm").serialize(), function(data){
			if(data.status == 200){ //如果回调函数=200
				$.messager.alert('提示','修改商品成功!','info',function(){//就提示 修改商品成功
					$("#itemEditWindow").window('close'); //关闭弹窗
					$("#itemList").datagrid("reload"); //刷新
				});
			}else{
				$.message.alert("提示",data.msg); 
			}
		});

1.3.3 编辑ItemController

/**
	 * 完成商品修改操作
	 * url地址:	http://localhost:8091/item/update
	 * 参数:    form表单
	 * 返回值:  SysResult对象
	 */
	@RequestMapping("/update")
	public SysResult updateItem(Item item){

		itemService.updateItem(item);
		return SysResult.success();
	}

1.3.4 编辑ItemServiceImpl

	@Override
	@Transactional
	public void updateItem(Item item) {

		itemMapper.updateById(item);
	}

在这里插入图片描述

在这里插入图片描述

1.4 商品删除

1.4.1 页面URL分析

在这里插入图片描述

1.4.2 页面参数

在这里插入图片描述

1.4.3 页面JS

        	$.messager.confirm('确认','确定删除ID为 '+ids+' 的商品吗?',function(r){
        	    if (r){
        	    	var params = {"ids":ids};
                	$.post("/item/delete",params, function(data){
            			if(data.status == 200){
            				$.messager.alert('提示','删除商品成功!',undefined,function(){
            					$("#itemList").datagrid("reload");
            				});
            			}else{
            				$.messager.alert("提示",data.msg);
            			}
            		});
            	}
        	});

1.4.4 编辑ItemController

/**
	 * 批量删除商品
	 * url地址:	http://localhost:8091/item/delete
	 * 参数:    ids=100,101,102
	 * 返回值:  SysResult对象
	 * 简化操作: 当参数采用,号分隔时,会自动的转化为数组.
	 * SpringMVC 底层实现servlet
	 */
	@RequestMapping("/delete")
	public SysResult deleteItems(Long... ids){

		itemService.deleteItems(ids);
		return SysResult.success();
	}

1.4.5 编辑ItemService

	@Transactional
	@Override
	public void deleteItems(Long[] ids) {

		itemMapper.deleteIds(ids);
	}

1.4.6 编辑XML映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jt.mapper.ItemMapper">

	<!--
		提示:void deleteIds(Long[] ids);
		原理:
			1.Mybatis原生支持单值传参
			2.如果遇到多值传参,则Mybatis会将多值封装为单值.
			  利用Map集合进行封装
			3.Mybatis升级之后,会自动的封装数据.
		原则:
			1.如果mybatis 进行单值传参
				数据:   	collection="array"
				list集合: 	collection="list"
				Map集合:	collection="Map中的key"
	-->
	<delete id="deleteIds">
		delete from tb_item where id in 
		<foreach collection="array" open="(" close=")"
				 			separator="," item="id">
			#{id}
		</foreach>
	</delete>
</mapper>

在这里插入图片描述

1.5 商品上架/下架操作

1.5.1 页面URL分析

需求: 能否利用一个方法,实现通用的上架/下架操作.
1.下架操作
在这里插入图片描述
2).上架操作
在这里插入图片描述
3).参数分析
在这里插入图片描述
4).页面JS分析

$.messager.confirm('确认','确定下架ID为 '+ids+' 的商品吗?',function(r){
        	    if (r){
        	    	var params = {"ids":ids};
                	$.post("/item/instock",params, function(data){
            			if(data.status == 200){
            				$.messager.alert('提示','下架商品成功!',undefined,function(){
            					$("#itemList").datagrid("reload");
            				});
            			}
            		});

1.5.2 restFul风格优化

将页面URL路径封装为restFul风格,之后动态获取参数,实现状态的更新。

/item/updateStatus/1

$.messager.confirm('确认','确定上架ID为 '+ids+' 的商品吗?',function(r){
        	    if (r){
        	    	var params = {"ids":ids};
                	$.post("/item/updateStatus/1",params, function(data){
            			if(data.status == 200){
            				$.messager.alert('提示','上架商品成功!',undefined,function(){
            					$("#itemList").datagrid("reload");
            				});
            			}
            		});

1.5.3 编辑ItemController

/**
	 * 实现上架/下架通用操作
	 * 	url: /item/reshelf   上架操作 status=1
	 * 	url: /item/instock   下架操作 status=2
	 * 	restFUl操作方法
	 * 	URL优化: url: /item/updateStatus/2
	 */
	@RequestMapping("/updateStatus/{status}")
	public SysResult updateStatus(@PathVariable Integer status,Long... ids){

		itemService.updateStatus(status,ids);
		return SysResult.success();
	}

1.5.4 编辑ItemService

/**
	 * Sql: update tb_item set updated = #{updated},status = #{status}
	 * 		where id in (xx,xx,xx,xx)
	 * @param status
	 * @param ids
	 */
	@Override
	public void updateStatus(Integer status, Long[] ids) {
		//参数1:实体对象  将要修改的数据封装
		Item item = new Item();
		item.setStatus(status);

		//参数2:条件构造器  动态拼接where条件
		UpdateWrapper updateWrapper = new UpdateWrapper();
		List<Long> idList = Arrays.asList(ids);
		updateWrapper.in("id", idList);
		itemMapper.update(item,updateWrapper);
	}

在这里插入图片描述

1.6 富文本编辑器实现

1.6.1 商品与商品分类表结构

在这里插入图片描述

1.6.2 入门案例

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="/js/kindeditor-4.1.10/themes/default/default.css" type="text/css" rel="stylesheet">
<script type="text/javascript" charset="utf-8" src="/js/kindeditor-4.1.10/kindeditor-all-min.js"></script>
<script type="text/javascript" charset="utf-8" src="/js/kindeditor-4.1.10/lang/zh_CN.js"></script>
<script type="text/javascript" charset="utf-8" src="/js/jquery-easyui-1.4.1/jquery.min.js"></script>

<script type="text/javascript">
	$(function(){
		KindEditor.ready(function(){
			KindEditor.create("#editor")
		})
	})
</script>
</head>
<body>
<h1>富文本编辑器</h1>
<textarea style="width:700px;height:350px" id="editor"></textarea>
</body>
</html>

1.6.3 封装商品详情信息

@TableName("tb_item_desc")
@Data
@Accessors(chain = true)
public class ItemDesc extends BasePojo{

    @TableId
    private Long itemId;        //itemId与商品表的Id值一致.
    private String itemDesc;    //商品详情信息

}

1.6.4 编辑 ItemDescMapper

package com.jt.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.pojo.ItemDesc;

public interface ItemDescMapper extends BaseMapper<ItemDesc> {
}

1.7 重构商品新增操作

1.7.1 参数分析

在这里插入图片描述

1.7.2 编辑ItemController

	/**
	 * 业务说明: 商品新增
	 * 	URL地址: 	http://localhost:8091/item/save
	 * 	请求参数: 	form表单 item对象接收
	 * 	返回值:		SysResult对象
	 */
	@RequestMapping("/save")
	public SysResult saveItem(Item item, ItemDesc itemDesc){
		try {
			itemService.saveItem(item,itemDesc);
			return SysResult.success();
		}catch (Exception e){
			e.printStackTrace();
			return SysResult.fail();
		}
	}

1.7.3 编辑ItemService

	/**
	 *<insert id="xxxxx"  useGeneratedKeys="true" keyProperty="itemId" keyColumn="item_id">
	 *
	 * </insert>
	 */
	@Transactional    //标记方式使用事务控制
	@Override
	public void saveItem(Item item, ItemDesc itemDesc) {
		//主键自增 入库之后才有主键,问题:如何将对象的主键动态的回显?
		//利用mybatis的主键自动回显的功能实现。。。
		item.setStatus(1);	//设定启动状态
				//.setCreated(new Date())
				//.setUpdated(item.getCreated());
		itemMapper.insert(item);

		//商品详情表中的主键应该与商品表中的主键一致
		itemDesc.setItemId(null);
		itemDescMapper.insert(itemDesc);
	}

1.8 重构商品管理删除操作

1.8.1 业务说明

由于商品与商品详情是一对一的关联关系,所以当删除商品时,应该关联删除商品详情.

1.8.2 关联删除商品

	@Override
	@Transactional//事务控制
	public void deleteItems(Long[] ids) {
		//删除商品信息
		itemMapper.deleteIds(ids);
		//删除商品详细信息
		List<Long> idList= Arrays.asList(ids);
		itemDescMapper.deleteBatchIds(idList);
	}

1.9 商品详情回显

1.9.1 业务说明

当点击商品编辑按钮时,应该根据Id,查询商品详情信息.之后将html代码片段,以html的展现形式给用户展现。

1.9.2 编辑页面JS

item-list.jsp

// 加载商品描述
        			$.getJSON('/item/query/item/desc/'+data.id,function(_data){
        				if(_data.status == 200){
        				//系统返回值对象
        				console.log(_data);
        				//服务器返回的业务数据
        				console.log(_data.data);
        				//获取html数据信息
        				console.log(_data.data.itemDesc)

        					itemEditEditor.html(_data.data.itemDesc);//html的代码片段
        				}
        			});

1.9.3 编辑ItemController

/**
	 * 根据id查询商品分类名称
	 * URL地址: /item/query/item/desc/'+data.id
	 * 参数:	id
	 * 返回值:  SysResult对象(itemDesc对象)
	 */
	@RequestMapping("/query/item/desc/{id}")
	public SysResult findItemDescById(@PathVariable Long id){

		ItemDesc itemDesc = itemService.findItemDescById(id);
		return SysResult.success(itemDesc);
	}

1.9.4 编辑ItemService

	@Override
	public ItemDesc findItemDescById(Long id) {

		return itemDescMapper.selectById(id);
	}

1.10 重构商品编辑

1.10.1 页面分析

1.页面URL
在这里插入图片描述
2.提交参数
在这里插入图片描述

1.10.2 编辑ItemController

/**
	 * 完成商品修改操作
	 * url地址:	http://localhost:8091/item/update
	 * 参数:    form表单
	 * 返回值:  SysResult对象
	 */
	@RequestMapping("/update")
	public SysResult updateItem(Item item,ItemDesc itemDesc){

		itemService.updateItem(item,itemDesc);
		return SysResult.success();
	}

1.10.3 编辑ItemService

@Override
	@Transactional	//注意事务控制
	public void updateItem(Item item, ItemDesc itemDesc) {

		itemMapper.updateById(item);
		itemDesc.setItemId(item.getId());
		itemDescMapper.updateById(itemDesc);
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值