接下来咱们作的是商品审核的功能:javascript
咱们到修改url的地址,而且给出对应controller的方法html
<li><a href="${path}/item/listAudit.do?auditStatus=0&showStatus=1"><samp class="t05"></samp>商品审核</a></li>
查询出未审核的商品其实就是条件查询的一种,所以该controller的代码和列出商品的代码几乎同样。java
@RequestMapping("/listAudit.do") public String listAudit(QueryCondition queryCondition,Model model) { //查询出全部的品牌 List<EbBrand> ebBrands = ebBrandService.selectBrand(); //若是是第一次访问的话,那么默认是没有当前页号的,所以赋值为1 if (queryCondition.getPageNo() == null) { queryCondition.setPageNo(1); } //获得分页数据 Page page = itemService.selectItemByCondition(queryCondition); model.addAttribute("page", page); model.addAttribute("ebBrands", ebBrands); //回显条件数据 model.addAttribute("queryCondition", queryCondition); return "item/listAudit"; }
处理下边的url而且随着条件,样式发生改变:sql
<h2 class="h2_ch"><span id="tabs" class="l"> <a id="label4" href="${base}/item/listAudit.do" title="所有实体商品" class="nor">所有</a> <a id="label1" href="${path}/item/listItem.do?auditStatus=0&showStatus=1" title="待审核实体商品" class="nor">待审核</a> <a id="label2" href="${path}/item/listItem.do?auditStatus=2&showStatus=1" title="审核不经过实体商品" class="nor">审核不经过</a> <a id="label3" href="${path}/item/listItem.do?auditStatus=1&showStatus=1" title="已审核实体商品" class="nor">已审核</a> </span></h2>
经过隐藏域拿到查询条件的值:数据库
<input type="hidden" id="auditStatus" name="auditStatus" value="${queryCondition.auditStatus}"/>
经过判断隐藏域的值来改变咱们的样式:markdown
$(document).ready(function () { if ($("#auditStatus").val() == '0') { $("#label1").attr("class", "here"); } else if ($("#auditStatus").val() == 2) { $("#label2").attr("class", "here"); } else if ($("#auditStatus").val() == 1) { $("#label3").attr("class", "here"); } else $("#label4").attr("class", "here"); })
查询条件以及回显:session
<p>查询: <ui:select name="catID" list="catList" rootId="0" defaulttext="全部分类" defaultvalue="" currentValue="${catID}"/> <select id="brandId" name="brandId""> <option value="">所有品牌</option> <c:forEach items="${ebBrands}" var="brand"> <option value="${brand.brandId}" <%--这是数据回显--%> <c:if test="${queryCondition.brandId==brand.brandId}"> selected </c:if> >${brand.brandName}</option> </c:forEach> <%-- </select><select id="stock" name="stock" style="display:none;"> <option value="-1" selected="">所有库存</option> <option value="0"<c:if test='${stock==0}'> selected</c:if>>已缺货</option> <option value="1"<c:if test='${stock==1}'> selected</c:if>>即将缺货</option> </select>--%> <%--模糊查询--%> <input type="text" id="searchText" name="itemName" value="${queryCondition.itemName}" title="" class="text20 medium gray"/> <input type="submit" id="goSearch" class="hand btn60x20" value="查询"/> </p>
根据审核条件的不一样,在显示商品的url中也应该是不一样的。app
处理审核:使用JavaScript方法来进行控制,把item的Id传递进去和审核对应的值。jsp
<c:if test="${item.auditStatus==0}"> <a href="javascript:void(0);" onclick="isPass(${item.itemId}, 1)">经过</a> <a href="javascript:void(0);" onclick="isPass(${item.itemId}, 2)">不经过</a> </c:if>
审核经过和不经过总会有理由的,对于咱们的理由咱们使用一张表来保存的。post
function isPass(itemId, auditStatus){ //修改浮动层的标题 $("#addItemNoteH2").html("商品审核"); //清空内容 $("#itemNote").val(""); tipShow("#addItemNote"); //给表单赋值 $("#itemId").val(itemId); $("#myAuditStatus").val(auditStatus); }
使用表单来处理咱们的操做。其中notes是咱们弹出框的数据。
<form action="${path }/item/auditItem.do" id="auditForm" method="post"> <input type="hidden" name="itemId" id="itemId"> <input type="hidden" name="auditStatus" id="myAuditStatus"> <input type="hidden" name="notes" id="notes"> </form>
响应事件,给表单赋值,提交表单
$("#addItemNoteConfirm").click(function(){ var notes = $("#itemNote").val(); //给表单赋值 $("#notes").val(notes); //提交表单 $("#auditForm").submit(); });
咱们是使用EB_CONSOLE_LOG这张数据表来保存咱们后台操做的日志记录的。
表的字段以下:
既然咱们要操做到表,咱们就得逆向工厂…
设置主键为自动增加
<insert id="insert" parameterType="com.rl.ecps.model.EbConsoleLog" > insert into EB_CONSOLE_LOG (CONSOLE_LOG_ID, ENTITY_NAME, ENTITY_ID, USER_ID, OP_TYPE, OP_TIME, NOTES, TABLE_NAME) values (seqconsolelogid.nextval, #{entityName,jdbcType=VARCHAR}, #{entityId,jdbcType=DECIMAL}, #{userId,jdbcType=DECIMAL}, #{opType,jdbcType=VARCHAR}, #{opTime,jdbcType=TIMESTAMP}, #{notes,jdbcType=VARCHAR}, #{tableName,jdbcType=VARCHAR}) </insert>
/** * 继承SqlSessionDaoSupport可以获得sessionFactory的引用,很是方便! */ @Repository public class EbConsoleLogDaoImpl extends SqlSessionDaoSupport implements EbConsoleLogDao { String nameSpace = "com.rl.ecps.sqlMap.EbConsoleLogMapper."; public void saveConsoleLog(EbConsoleLog ConsoleLog) { this.getSqlSession().insert(nameSpace + "insert", ConsoleLog); } }
修改商品的属性,因为修改的状态个数是未知的,所以咱们使用动态修改:
public void updateItem(EbItem ebItem) { this.getSqlSession().update(nameSpace + "updateByPrimaryKeySelective", ebItem); }
public void updateItem(Long itemId, Short auditStatus, String notes) { //设置item的属性 EbItem ebItem = new EbItem(); ebItem.setItemId(itemId); ebItem.setAuditStatus(auditStatus); ebItem.setCheckerUserId((long) 222); ebItem.setCheckTime(new Date()); //更新item itemDao.updateItem(ebItem); //操做日志 EbConsoleLog ebConsoleLog = new EbConsoleLog(); ebConsoleLog.setEntityId(itemId); ebConsoleLog.setEntityName("商品表"); ebConsoleLog.setNotes(notes); ebConsoleLog.setOpTime(new Date()); if(auditStatus == 1){ ebConsoleLog.setOpType("审核经过"); }else{ ebConsoleLog.setOpType("审核不经过"); } ebConsoleLog.setTableName("EB_ITEM"); ebConsoleLog.setUserId(1l); logDao.saveConsoleLog(ebConsoleLog); }
@RequestMapping("/auditItem.do") public String auditItem(Long itemId, Short auditStatus, String notes) throws IOException { itemService.updateItem(itemId, auditStatus, notes); return "redirect:listAudit.do"; }
把商品的状态修改了,而且已经把操做记录写到数据库表中了。
对于上下价和审核的逻辑基本是相同的…
根据不一样的状态给出不一样的超连接:
<a href="/ecps-console/shop/item/viewItem.jsp" title="查看">查看</a> <c:if test="${item.showStatus == 1 }"> <a href="/ecps-console/ecps/console/item/editItem.do?type=1&itemId=2384">编辑</a> <a href="javascript:void(0);" onclick="singleDel('2384')">删除</a> <a href="javascript:void(0);" onclick="isShow(${item.itemId}, 0)">上架</a> </c:if> <c:if test="${item.showStatus == 0 }"> <a href="javascript:void(0);" onclick="isShow(${item.itemId}, 1)">下架</a> <a href="javascript:void(0);">发布</a> </c:if>
给表单赋值
function isShow(itemId, showStatus) { tipShow("#confirm"); //给表单赋值 $("#itemId").val(itemId); $("#myShowStatus").val(showStatus); }
在弹出框中绑定提交事件,提交表单
$("#confirmOk").click(function () { $("#showForm").submit(); });
@RequestMapping("/showItem.do") public String showItem(Long itemId, Short showStatus) throws IOException { itemService.showItem(itemId, showStatus); return "redirect:listItem.do"; }
public void showItem(Long itemId, Short showStatus) { //设置item的属性 EbItem ebItem = new EbItem(); ebItem.setItemId(itemId); ebItem.setShowStatus(showStatus); ebItem.setCheckerUserId((long) 222); ebItem.setCheckTime(new Date()); //更新item itemDao.updateItem(ebItem); //操做日志 EbConsoleLog ebConsoleLog = new EbConsoleLog(); ebConsoleLog.setEntityId(itemId); ebConsoleLog.setEntityName("商品表"); ebConsoleLog.setOpTime(new Date()); if(showStatus == 1){ ebConsoleLog.setOpType("下架"); }else{ ebConsoleLog.setOpType("上架"); } ebConsoleLog.setTableName("EB_ITEM"); ebConsoleLog.setUserId(1l); logDao.saveConsoleLog(ebConsoleLog); }