CRM项目-- 基于SSM框架搭建V04

这一版本会将市场活动这个模块完成。主要包括:市场活动的删除操作;修改市场活动;查看市场活动明细,跳转到详细信息页;市场活动备注的增删改查等。

1.删除市场活动

因为市场活动表关联到了市场活动备注表,所以在执行删除操作的时候,要先删除子表中的内容(备注表),再删除主表(市场表)内容。另外,几个注意的点:
1)删除的时候至少选中一条记录,也可以一次删除多条。
2)删除之前要提示用户是否确定要删除(删除数据是比较危险的动作,必须提示!)

If(confirm(“确定删除吗?”)){
	Ajax请求扔里边。
}

3)删除市场活动的关联删除市场活动的备注。(要先删除备注表,再删除市场活动)

因为可能多条记录被选中,所以传递参数就不能使用以前那种方式了,因为现在id可能对应多个值,需要使用拼接的方式,拼好之后再传。

	    //为删除按钮绑定事件
        $("#deleteBtn").click(function (){
            //拿到打钩的复选框
            var $xuanze = $("input[name=xuanze]:checked");  //这是一个jQuery数组

            if ($xuanze.length==0){
                alert("请选择你要删除的市场活动~");
            }else {
                //可能选中的是多条记录,向后台发送请求,传递的id可能是多个,所以参数要使用拼接的方式
                var param = "";

                //遍历复选框,拿到里面的value,然后拼接
                for (var i=0; i<$xuanze.length; i++){
                    param += "id="+$($xuanze[i]).val();

                    if (i<$xuanze.length-1){
                        param += "&";
                    }
                }

                if (confirm("确认要删除吗?删除了就没有了哦~")){
                    $.ajax({
                        url:"workbench/activity/deleteActivityByIds.do",
                        data:param,
                        type:"POST",
                        dataType:"json",    //预期服务器返回的数据类型
                        success:function (data){
                            //data:   成功或失败?
                            if (data){
                                //刷列表
                                //pageList(1,2);
                                pageList(1,$("#activityPage").bs_pagination('getOption', 'rowsPerPage'));
                            }else {
                                alert("删除成功");
                            }
                        }
                    })
                }

            }
        })

在后台,controller里面使用request取得数组就行,在service里面,应该分多步进行。查看共需要删除多少条备注,和实际删除的备注信息条数进行对比。查看共删除了多少条市场活动,和需要删除多少条进行对比。

	@Override
    public Boolean deleteActivityByIds(String[] ids) {
        boolean flag = true;
        //获取要删除的备注的条数
        int count1= activityRemarkDao.getTotalByAids(ids);
        //删除市场活动备注
        int count2 = activityRemarkDao.deleteActivityRemarkByAids(ids);

        if (count1 != count2) {
            flag = false;
        }

        //删除市场活动
        int count3 = activityDao.deleteActivityByIds(ids);
        if (count3 != ids.length) {
            flag = false;
        }
        return flag;
    }

在sql的mapper文件里面,注意使用拼接字符串,如:

<select id="getTotalByAids" resultType="int">
        select count(*)
        from tbl_activity_remark
        where activityId in
        <foreach collection="array" item="aid" open="(" separator="," close=")">
            #{aid}
        </foreach>
    </select>

以上操作都不算太难。注意的点:
在每次执行删除操作后,应将全选按钮的√去除,这个也可以放在每次调用pageList()方法的时候去完成。

2.修改市场活动

一次只能修改一个。点击修改的时候,发送ajax get请求,提交市场活动id,根据id获取市场活动信息(需要activity对象和userList对象),展示modal。(所以要把id放到隐藏域中)

在实际的项目开发中,一定是按照先做添加,再做修改的这种顺序进行的。所以,为了节省开始时间,修改的操作一般直接copy添加的操作。

直接复制添加操作的就行,适当改改。

3.查看市场活动明细

点击某一条市场活动,会跳转到市场活动明细表,这个市场活动是我们拼接出来的。因为是跳转到一张全新的页面,肯定是全局刷新,即使这样,也可以有两种处理方式。
第一种是:直接跳转到那个页面,然后在那个页面自动发起ajax请求局部刷新,铺上那些数据。(传统的方式)
第二种是:先过一把后台,然后在后台把需要的数据取出来,扔到request域中,搭一个请求转发,跳转到新页面。这样处理,就可以在那个页面使用el表达式进行取值,非常的方便。所以使用第二种方式。
前端:

html += '<td><a style="text-decoration: none; cursor: pointer;" οnclick="window.location.href=\'workbench/activity/detail.do?id='+n.id+'\';">'+n.name+'</a></td>';

在controller里面,因为既需要数据也需要视图,所以返回一个ModelAndView对象,这个对象不用加@ResponseBody注解。

	@RequestMapping("/workbench/activity/detail.do")  //返回ModelAndView不需要加 @ResponseBody 注解
    public ModelAndView detail(HttpServletRequest request, String id){
        System.out.println("========市场活动控制器,执行跳转到市场活动详细信息页操作======");
        Activity activity = activityService.detail(id);
        ModelAndView mv = new ModelAndView();
        mv.addObject("activity",activity);
        mv.setViewName("/workbench/activity/detail.jsp");
        return mv;
    }

其他内容正常去取就行,还是比较简单。在前端(即:detail.jsp),使用el表达式把需要的值铺上即可。然后下面其他的内容,就是一张全新的前端页面了。不过很多内容还是重复的。

4.市场活动的编辑和删除操作


在这个页面也可以对市场活动进行修改和删除操作,可以直接使用前面已经做过的代码。
修改操作,因为永远只能修改一条,所以这个可以直接使用前面的代码,不用这里处理之后,是需要返回修改后的市场活动对象的,而之前则是去调用pageList()方法刷新列表。然后下面是我的思路,应该是可行的,看了后面的课,我更加坚信了我的观点,就是要修改的内容太多,处理起来有点麻烦,我就没做:

//应该刷新关闭页面后的市场活动的信息---但是这些值都是使用el表达式进行取值的,怎么更新呢???
//我的思路就是给下面这些内容都取一个id,然后修改里面的内容,如果这样的话,数据库返回的就应该是更新后的市场活动了
//上面说的办法应该是可行的。

关于删除操作,和前面不同的是,这里的删除操作只能删除一条,前面的代码就不能复用了,需要重新写,重新写也就是代码复制过来,删除一部门就行了,因为之前的是针对多条信息进行操作的。还有删除成功之后,应该跳转回之前的index页面。这个部分还是比较简单,内容重复了。

5.自动刷新备注信息

在这里插入图片描述
1)详细信息页是包含这条市场活动关联的备注信息的。我们这里是页面加载完毕后,自动发起ajax请求去处理、拼接处这部分内容,和之前的pageList()方法差不多。
2)生成的备注信息,以before的形式添加在备注输入框的上方。(也可以和以前一样,自己在那里建一个div,取id,但是前面做过很多了,所以不用这种方式了)
3)使用editFlag来操控显示的创建/修改时间创建/修改人。这是拼接的内容里面的具体的处理
4)在拼接的内容上,还要使用 on操控动态生成的备注的修改和删除按钮,鼠标划入划出操作。
找到那个div,把id加上,原来是没有的。
(在页面信息加载完毕后,执行了备注信息自动刷新操作后,的下方加)

$("#remarkBody").on("mouseover",".remarkDiv",function(){
			$(this).children("div").children("div").show();
		})
		$("#remarkBody").on("mouseout",".remarkDiv",function(){
			$(this).children("div").children("div").hide();
})

前端:

	//根据市场活动id查询市场活动备注集合
	function showRemarkList(){
		$.ajax({
			url:"workbench/activity/getActivityRemarkListByAid.do",
			data:{"id":"${activity.id}"},
			type:"GET",
			dataType:"json",    //预期服务器返回的数据类型
			success:function (data){
				//data:   [{备注1},{备注2},{备注3}...]
				var html = "";
				$.each(data,function (i,n){
					html += '<div id="'+n.id+'" class="remarkDiv" style="height: 60px;">';
					html += '<img title="zhangsan" src="image/user-thumbnail.png" style="width: 30px; height:30px;">';
					html += '<div style="position: relative; top: -40px; left: 40px;" >';
					html += '<h5 id="h'+n.id+'">'+n.noteContent+'</h5>';
					html += '<font color="gray">市场活动</font> <font color="gray">-</font> <b>${activity.name}</b> <small style="color: gray;" id="s'+n.id+'"> '+(n.editFlag==0?n.createTime:n.editTime)+' 由'+(n.editFlag==0?n.createBy:n.editBy)+'</small>';
					html += '<div style="position: relative; left: 500px; top: -30px; height: 30px; width: 100px; display: none;">';
					html += '<a class="myHref" href="javascript:void(0);" οnclick="editRemark(\''+n.id+'\')"><span class="glyphicon glyphicon-edit" style="font-size: 20px; color: #FF0000;"></span></a>';
					html += '&nbsp;&nbsp;&nbsp;&nbsp;';
					html += '<a class="myHref" href="javascript:void(0);" οnclick="deleteRemark(\''+n.id+'\')"><span class="glyphicon glyphicon-remove" style="font-size: 20px; color: #FF0000;"></span></a>';
					html += '</div>';
					html += '</div>';
					html += '</div>';
				})

				//铺上备注
				$("#remarkDiv").before(html);


			}
		})
	}

后台去查就行了,比较简单。

6.删除备注操作

因为删除和修改都是前端的bootstrap插件来的,要触发事件,使用的是:删除信息直接在动态生成信息的删除图片超链接上触发事件,可以查看上面的代码,onclick()方法,在下面也给出

html += '<a class="myHref" href="javascript:void(0);" οnclick="deleteRemark(\''+n.id+'\')"><span class="glyphicon glyphicon-remove" style="font-size: 20px; color: #FF0000;"></span></a>';

注意上面拼方法里面id的方式,必须要这样拼,规定是这样的。
在后台,根据id删除备注就行了,比较简单。删除之后,需要将该备注信息相关div组件移除,我们使用的方式是给相关的div取一个id,然后使用remove()方法删除,注意,这里的div是拼出来的,别找错地方了。

7.添加备注操作

1)添加前验证备注信息不能为空。
2)发送ajax post请求添加备注。
3)添加备注成功之后前端页面动态添加一个div
和之前一样,使用before进行追加
4)添加备注成功之后清空用户填写的备注信息。

8.修改备注操作

里面修改和上面的删除一样,是图片来的,也是使用图片超链接进行处理。
1)点击修改按钮之后,弹出修改备注的modal窗口。
2)修改备注的modal窗口上显示备注信息。(正常情况下,需要过后台,但是这里使用不过后台的方式,起id的方式拿到内容)。这里一个注意的点是,因为我们需要对多个地方起id,如果id重复,就可以在n.id前面加入一个字母,这样可以解决问题。
3)点击更新之后,前端的页面也是局部刷的,这也是将需要刷的地方起id,给里面的内容赋值。

	//修改市场活动备注信息====此处的id为备注的id
	function editRemark(id){
		//拿到修改前的备注信息
		var noteContent = $("#h"+id).html();
		//铺上信息
		$("#noteContent").val(noteContent);
		$("#remarkId").val(id);

		//打开备注模态窗口
		$("#editRemarkModal").modal("show");
	}
		//为更新按钮绑定事件,更新市场活动备注
		$("#updateRemarkBtn").click(function (){
			var noteContent = $("#noteContent").val();
			var id = $("#remarkId").val();

			$.ajax({
				url:"workbench/activity/updateActivityRemarkById.do",
				data:{"noteContent":noteContent,"id":id},
				type:"POST",
				dataType:"json",
				success:function (data){
					//data: 成功或失败;  更新后的备注信息ar
					if (data.success){
						//关闭窗口
						$("#editRemarkModal").modal("hide");

						//局部刷新备注信息,修改人和修改时间
						$("#h"+id).html(data.ar.noteContent);
						$("#s"+id).html(data.ar.editTime+" 由"+data.ar.editBy);
					}else {
						alert("更新备注失败~");
					}
				}
			})
		})

后端正常操作就行了。

以上就是市场活动的全部内容了。下面一个版本是一个全新的模块。

最后挺多烦心事的=======================AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
加油吧~
过两天2021了,一切顺利啊~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值