目录
学习目标:
实现营销机会数据的增删改查功能
学习内容:
BUG解决
,parseData: function (res) { //res 即为原始返回的数据
return {
"code": res.code, //解析接口状态
"count": res.count, //解析表格数据总条数 eg:共100页
"data": res.date//解析table表格数据源
};
挺无语的,五行代码自己不会淘宝70块钱购买,一行价值15块。
去网上看了下
发现是自己Service中data打成了date,所以一直搜不到数据
淘宝解决是加了个强转,把date转换成data
真的被自己蠢哭了
营销机会模块
营销机会数据添加操作后端代码
思想:
添加营销机会 添加营销机会 1. 参数校验 customerName客户名称 非空 linkMan联系人 非空 linkPhone联系号码 非空,手机号码格式正确 2. 设置相关参数的默认值 createMan创建人 当前登录用户名 assignMan指派人 如果未设置指派人(默认) state分配状态 (0=未分配,1=已分配) 0 = 未分配 assignTime指派时间 设置为null devResult开发状态 (0=未开发,1=开发中,2=开发成功,3=开发失败) 0 = 未开发 (默认) 如果设置了指派人 state分配状态 (0=未分配,1=已分配) 1 = 已分配 assignTime指派时间 系统当前时间 devResult开发状态 (0=未开发,1=开发中,2=开发成功,3=开发失败) 1 = 开发中 isValid是否有效 (0=无效,1=有效) 设置为有效 1= 有效 createDate创建时间 默认是系统当前时间 updateDate 默认是系统当前时间 3. 执行添加操作,判断受影响的行数
Service层
@Transactional(propagation = Propagation.REQUIRED)
public void addSaleChance(SaleChance saleChance){
/* 1.校验参数 */
checkSaleChanceParams(saleChance.getCustomerName(),saleChance.getLinkMan(),saleChance.getLinkPhone());
/* 2. 设置相关字段的默认值 */
// isValid是否有效 (0=无效,1=有效) 设置为有效 1= 有效
saleChance.setIsValid(1);
//createDate创建时间,默认是系统当前时间
saleChance.setCreateDate(new Date());
//updateDate 默认是系统当前时间
saleChance.setUpdateDate(new Date());
//如果未设置指派人(默认)
if (StringUtils.isBlank(saleChance.getAssignMan())) {
//state分配状态 (0 = 未分配,1 = 已分配) 0 = 未分配
saleChance.setState(StateStatus.UNSTATE.getType());
//assignTime指派时间 设置为null
saleChance.setAssignTime(null);
//devResult开发状态 (0 = 未开发,1 = 开发中,2 = 开发成功,3 = 开发失败)0 = 未开发 (默认)
saleChance.setDevResult(DevResult.UNDEV.getStatus());
}else {//如果设置了指派人
//state分配状态 (0=未分配,1=已分配)1 = 已分配
saleChance.setState(StateStatus.STATUS.getType());
//assignTime指派时间 系统当前时间
saleChance.setAssignTime(new Date());
//devResult开发状态 (0=未开发,1=开发中,2=开发成功,3=开发失败)1 = 开发中
saleChance.setDevResult(DevResult.DEVING.getStatus());
}
//3. 执行添加操作,判断受影响的行数
AssertUtil.isTrue(saleChanceMapper.insertSelective(saleChance)!=1,"添加营销机会失败");
}
private void checkSaleChanceParams(String customerName,String linkMan ,String linkPhone) {
// customerName客户名称 非空
AssertUtil.isTrue(StringUtils.isBlank(customerName),"客户名称不能为空!");
// linkMan联系人 非空
AssertUtil.isTrue(StringUtils.isBlank(linkMan),"联系人不能为空!");
// linkPhone联系号码 非空
AssertUtil.isTrue(StringUtils.isBlank(linkPhone),"联系号码不能为空!");
// linkPhone联系号码 非空,手机号码格式正确
AssertUtil.isTrue(!PhoneUtil.isMobile(linkPhone),"联系号码格式不正确!");
}
Controller层
/**
* @author QQ星
* 添加营销机会
*
* @param saleChance
* @return com.github.pagehelper.PageInfo
* @Date 2022/3/4 17:08
*/
@PostMapping("add")
@ResponseBody
public ResultInfo addSaleChance(SaleChance saleChance, HttpServletRequest request){
//从Cookie中获取当前登录的用户名
String userName = CookieUtil.getCookieValue(request,"userName");
//设置用户名到指派人
saleChance.setAssignMan(userName);
//调用Service层方法
saleChanceService.addSaleChance(saleChance);
return success("营销机会数据添加成功!");
}
测试:
参数判断
添加成功![](https://img-blog.csdnimg.cn/97fc580e04e84fe9a7625f625bab6e56.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcG9wcGluZ1FR5pif,size_20,color_FFFFFF,t_70,g_se,x_16)
遇到问题:
assignMan没有进去,代码写错
添加数据前端代码
导入模板
书写JS
/**
* 打开添加/修改营销机会数据的窗口
* 如果营销机会ID为空,则为添加操作
* 如果营销机会ID不为空,则为修改操作
*/
function openSaleChanceDialog(saleChanceId) {
// 弹出层的标题
var title = "<h3>营销机会管理 - 添加营销机会</h3>";
var url = ctx + "/sale_chance/toSaleChancePage";
// 判断营销机会ID是否为空
if (saleChanceId != null && saleChanceId != '') {
// 更新操作
title = "<h3>营销机会管理 - 更新营销机会</h3>";
// 请求地址传递营销机会的ID
url += '?saleChanceId=' + saleChanceId;
}
// iframe层
layui.layer.open({
// 类型
type: 2,
// 标题
title: title,
// 宽高
area: ['500px', '620px'],
// url地址
content: url,
// 可以最大化与最小化
maxmin:true
});
}
controller层控制
@RequestMapping("toSaleChancePage")
public String toSaleChancePage(){
return "saleChance/add_update";
}
关闭弹出层
/**
* 关闭弹出层
*/
$("#closeBtn").click(function () {
// 当你在iframe页面关闭自身时
var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
parent.layer.close(index); //再执行关闭
});
监听表单sumit事件
/**
* 监听表单submit事件
form.on('submit(按钮元素的lay-filter属性值)', function (data) {
});
*/
form.on('submit(addOrUpdateSaleChance)', function (data) {
// 提交数据时的加载层 (https://layer.layui.com/)
var index = layer.msg("数据提交中,请稍后...",{
icon:16, // 图标
time:false, // 不关闭
shade:0.8 // 设置遮罩的透明度
});
// 发送ajax请求
var url = ctx + "/sale_chance/add"; // 添加操作
// 通过营销机会的ID来判断当前需要执行添加操作还是修改操作
// 如果营销机会的ID为空,则表示执行添加操作;如果ID不为空,则表示执行更新操作
// 通过获取隐藏域中的ID
var saleChanceId = $("[name='id']").val();
// 判断ID是否为空
if (saleChanceId != null && saleChanceId != '') {
// 更新操作
url = ctx + "/sale_chance/update";
}
//data.field拿到表单的所有数据
$.post(url, data.field, function (result) {
// 判断操作是否执行成功 200=成功
if (result.code == 200) {
// 成功
// 提示成功
layer.msg("操作成功!",{icon:6});
// 关闭加载层
layer.close(index);
// 关闭弹出层
layer.closeAll("iframe");
// 刷新父窗口,重新加载数据
parent.location.reload();
} else {
// 失败
layer.msg(result.msg, {icon:5});
}
});
// 阻止表单提交
return false;
});
营销机会数据更新后端代码
思路:
更新营销机会 1. 参数校验 营销机会ID 非空,数据库中对应的记录存在 customerName客户名称 非空 linkMan联系人 非空 linkPhone联系号码 非空,手机号码格式正确 2. 设置相关参数的默认值 updateDate更新时间 设置为系统当前时间 assignMan指派人 原始数据未设置 修改后未设置 不需要操作 修改后已设置 assignTime指派时间 设置为系统当前时间 分配状态 1=已分配 开发状态 1=开发中 原始数据已设置 修改后未设置 assignTime指派时间 设置为null 分配状态 0=未分配 开发状态 0=未开发 修改后已设置 判断修改前后是否是同一个指派人 如果是,则不需要操作 如果不是,则需要更新 assignTime指派时间 设置为系统当前时间 3. 执行更新操作,判断受影响的行数
dao层
因为指派人和指派时间可能会设置为null需要把条件去掉
<!--
不判断为空
-->
assign_man = #{assignMan,jdbcType=VARCHAR},
assign_time = #{assignTime,jdbcType=TIMESTAMP},
service层
@Transactional(propagation = Propagation.REQUIRED)
public void updateSaleChance(SaleChance saleChance) {
/* 1. 参数校验 */
// 营销机会ID 非空,数据库中对应的记录存在
AssertUtil.isTrue(null == saleChance.getId(), "待更新记录不存在!");
// 通过主键查询对象
SaleChance temp = saleChanceMapper.selectByPrimaryKey(saleChance.getId());
// 判断数据库中对应的记录存在
AssertUtil.isTrue(temp == null,"待更新记录不存在!");
// 参数校验
checkSaleChanceParams(saleChance.getCustomerName(),saleChance.getLinkMan(), saleChance.getLinkPhone());
/* 2. 设置相关参数的默认值 */
// updateDate更新时间 设置为系统当前时间
saleChance.setUpdateDate(new Date());
// assignMan指派人
// 判断原始数据是否存在
if (StringUtils.isBlank(temp.getAssignMan())) { // 不存在
// 判断修改后的值是否存在
if (!StringUtils.isBlank(saleChance.getAssignMan())) { // 修改前为空,修改后有值
// assignTime指派时间 设置为系统当前时间
saleChance.setAssignTime(new Date());
// 分配状态 1=已分配
saleChance.setState(StateStatus.STATED.getType());
// 开发状态 1=开发中
saleChance.setDevResult(DevResult.DEVING.getStatus());
}
} else { // 存在
// 判断修改后的值是否存在
if (StringUtils.isBlank(saleChance.getAssignMan())) { // 修改前有值,修改后无值
// assignTime指派时间 设置为null
saleChance.setAssignTime(null);
// 分配状态 0=未分配
saleChance.setState(StateStatus.UNSTATE.getType());
// 开发状态 0=未开发
saleChance.setDevResult(DevResult.UNDEV.getStatus());
} else { // 修改前有值,修改后有值
// 判断修改前后是否是同一个用户
if (!saleChance.getAssignMan().equals(temp.getAssignMan())) {
// 更新指派时间
saleChance.setAssignTime(new Date());
} else {
// 设置指派时间为修改前的时间
saleChance.setAssignTime(temp.getAssignTime());
}
}
}
/* 3. 执行更新操作,判断受影响的行数 */
AssertUtil.isTrue(saleChanceMapper.updateByPrimaryKeySelective(saleChance) != 1, "更新营销机会失败!");
}
controller层
书写返回ResultInfo的update方法
/**
* @author QQ星
* 更新营销机会
*
* @param saleChance
* @return com.xxxx.crm.base.ResultInfo
* @Date 2022/3/4 21:36
*/
@PostMapping("update")
@ResponseBody
public ResultInfo updateSaleChance(SaleChance saleChance) {
// 调用Service层的添加方法
saleChanceService.updateSaleChance(saleChance);
return success("营销机会数据更新成功!");
}
测试:
前端代码
打开添加/修改营销机会数据的窗口
/**
* 打开添加/修改营销机会数据的窗口
* 如果营销机会ID为空,则为添加操作
* 如果营销机会ID不为空,则为修改操作
*/
function openSaleChanceDialog(saleChanceId) {
// 弹出层的标题
var title = "<h3>营销机会管理 - 添加营销机会</h3>";
var url = ctx + "/sale_chance/toSaleChancePage";
// 判断营销机会ID是否为空
if (saleChanceId != null && saleChanceId != '') {
// 更新操作
title = "<h3>营销机会管理 - 更新营销机会</h3>";
// 请求地址传递营销机会的ID
url += '?saleChanceId=' + saleChanceId;
}
// iframe层
layui.layer.open({
// 类型
type: 2,
// 标题
title: title,
// 宽高
area: ['500px', '620px'],
// url地址
content: url,
// 可以最大化与最小化
maxmin:true
});
}
/**
* 行工具栏监听事件
table.on('tool(数据表格的lay-filter属性值)', function (data) {
});
*/
table.on('tool(saleChances)', function (data) {
// console.log(data);
// 判断类型
if (data.event == "edit") { // 编辑操作
// 得到营销机会的ID
var saleChanceId = data.data.id;
// 打开修改营销机会数据的窗口
openSaleChanceDialog(saleChanceId)
} else if (data.event == "del") {
}
});
ftl修改
需要把营销Id拿到然后传给后端去判断是添加还是更新操作
<#-- 设置营销机会ID的隐藏域 -->
<input type="hidden" name="id" value="${(saleChance.id)!}">
add.update.js修改
通过营销机会的ID来判断当前需要执行添加操作还是修改操作
// 通过营销机会的ID来判断当前需要执行添加操作还是修改操作
// 如果营销机会的ID为空,则表示执行添加操作;如果ID不为空,则表示执行更新操作
// 通过获取隐藏域中的ID
var saleChanceId = $("[name='id']").val();
// 判断ID是否为空
if (saleChanceId != null && saleChanceId != '') {
// 更新操作
url = ctx + "/sale_chance/update";
}
学习时间:
2022-3-4 9:30-12:19、16:34-18:11、19:05-20:12、21:34-23:26
心得
今天交学费了,自己data写错了写成date让前端一直接受不到数据,粗心写错还找了那么九都没有找出来,确实该交学费了,这样能更好的激励自己,还是太菜了,自己前端调试不怎么会,前端接受不到数据也没有仔细去看layui的table使用守则,还得努力