• 移动商城第十篇【商品审核和上下价】


    商品审核

    接下来我们做的是商品审核的功能:

    这里写图片描述

    我们到修改url的地址,并且给出对应controller的方法

    
    <li><a href="${path}/item/listAudit.do?auditStatus=0&showStatus=1"><samp class="t05"></samp>商品审核</a></li>
    

    查询出未审核的商品其实就是条件查询的一种,因此该controller的代码和列出商品的代码几乎一样。

    
        @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并且随着条件,样式发生改变:

    这里写图片描述

    
            <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}"/>

    通过判断隐藏域的值来改变我们的样式:

    
            $(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");
            })

    这里写图片描述

    查询条件以及回显:

    
                    <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中也应该是不同的。

    • 只要在遍历的时候,判断对应的状态就行了。

    这里写图片描述

    处理审核

    处理审核:使用JavaScript方法来进行控制,把item的Id传递进去和审核对应的值。

    
        <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>

    审核通过和不通过总会有理由的,对于我们的理由我们使用一张表来保存的。

            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>
    

    编写dao

    
    
    /**
     * 继承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);
        }

    编写service

    
        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);
    
        }

    controller

    
        @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();
    });

    编写controller和service

    
        @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);
        }

    这里写图片描述

  • 相关阅读:
    第二周教学设计反思
    uni-app,一套代码应用在多个平台
    新CMS
    学习js
    关于数据库
    自己写的一段jquery实现当滚动条滑动到某个位置实现向中间移动
    js平滑滚动到顶部、底部、指定地方
    统一一个帝国中搜索页面的模板
    帝国CMS的总结
    回到顶部的功能
  • 原文地址:https://www.cnblogs.com/zhong-fucheng/p/7554323.html
Copyright © 2020-2023  润新知