Bladeren bron

Merge remote-tracking branch 'origin/dev' into dev

baolei 7 maanden geleden
bovenliggende
commit
b0874df835

+ 0 - 18
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/product/controller/ProdController.java

@@ -8,12 +8,9 @@ import com.xingxi.common.enums.BusinessType;
 import com.xingxi.common.enums.EProdStatus;
 import com.xingxi.common.utils.poi.ExcelUtil;
 import com.xingxi.master.product.domain.Prod;
-import com.xingxi.master.product.service.IProdService;
 import com.xingxi.web.controller.master.product.domain.ProdAttrVo;
-import com.xingxi.web.controller.master.product.domain.ProdTagVo;
 import com.xingxi.web.controller.master.product.domain.ProdVo;
 import com.xingxi.web.controller.master.product.service.IProdAttrVoService;
-import com.xingxi.web.controller.master.product.service.IProdTagVoService;
 import com.xingxi.web.controller.master.product.service.IProdVoService;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.stereotype.Controller;
@@ -37,8 +34,6 @@ public class ProdController extends BaseController {
     @Resource
     private IProdVoService prodVoService;
     @Resource
-    private IProdTagVoService prodTagVoService;
-    @Resource
     private IProdAttrVoService prodAttrVoService;
 
     @RequiresPermissions("master:product:view")
@@ -158,17 +153,4 @@ public class ProdController extends BaseController {
         mMap.put("prodAttrVo", prodAttrVo);
         return prefix + "/editAttr";
     }
-
-    /**
-     * 修改商品属性
-     */
-    @RequiresPermissions("master:product:editTag")
-    @GetMapping("/editTag/{id}")
-    public String editTag(@PathVariable("id") Long id, ModelMap mMap) {
-        ProdTagVo cond = new ProdTagVo();
-        cond.setProdId(id);
-        List<ProdTagVo> prodTagVoList = prodTagVoService.selectProdTagVoList(cond);
-        mMap.put("prodTagVoList", prodTagVoList);
-        return prefix + "/editTag";
-    }
 }

+ 4 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/product/domain/ProdTagVo.java

@@ -16,4 +16,8 @@ import lombok.ToString;
 @ToString
 public class ProdTagVo extends ProdTag {
     private static final long serialVersionUID = 1L;
+    //检索用标签名称
+    private String tagName;
+    //选中的标签集合
+    private String tagIds;
 }

+ 8 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/product/mapper/ProdTagVoMapper.java

@@ -21,4 +21,12 @@ public interface ProdTagVoMapper extends ProdTagMapper {
      * @return 商品标签集合
      */
     List<ProdTagVo> selectProdTagVoList(ProdTagVo prodTagVo);
+
+    /**
+     * 删除商品标签
+     *
+     * @param prodTagVo 商品标签Vo
+     * @return 影响行数
+     */
+    int logicDeleteProdTagByCondition(ProdTagVo prodTagVo);
 }

+ 16 - 1
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/product/service/IProdTagVoService.java

@@ -1,6 +1,5 @@
 package com.xingxi.web.controller.master.product.service;
 
-import com.xingxi.master.product.service.IProdTagService;
 import com.xingxi.web.controller.master.product.domain.ProdTagVo;
 
 import java.util.List;
@@ -19,4 +18,20 @@ public interface IProdTagVoService {
      * @return 商品集合
      */
     List<ProdTagVo> selectProdTagVoList(ProdTagVo prodTagVo);
+
+    /**
+     * 添加商品标签
+     *
+     * @param prodTagVo 商品标签Vo
+     * @return 影响行数
+     */
+    int addProdTags(ProdTagVo prodTagVo);
+
+    /**
+     * 删除商品标签
+     *
+     * @param prodTagVo 商品标签Vo
+     * @return 影响行数
+     */
+    int logicDeleteProdTagByCondition(ProdTagVo prodTagVo);
 }

+ 45 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/product/service/impl/ProdTagVoServiceImpl.java

@@ -1,11 +1,18 @@
 package com.xingxi.web.controller.master.product.service.impl;
 
+import com.xingxi.common.core.text.Convert;
+import com.xingxi.common.enums.EDelFlag;
+import com.xingxi.common.utils.DateUtils;
+import com.xingxi.common.utils.ShiroUtils;
+import com.xingxi.master.product.domain.ProdTag;
+import com.xingxi.master.product.mapper.ProdTagMapper;
 import com.xingxi.web.controller.master.product.domain.ProdTagVo;
 import com.xingxi.web.controller.master.product.mapper.ProdTagVoMapper;
 import com.xingxi.web.controller.master.product.service.IProdTagVoService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -18,6 +25,8 @@ import java.util.List;
 public class ProdTagVoServiceImpl implements IProdTagVoService {
     @Resource
     private ProdTagVoMapper prodTagVoMapper;
+    @Resource
+    private ProdTagMapper prodTagMapper;
 
     /**
      * 查询商品标签列表
@@ -27,6 +36,42 @@ public class ProdTagVoServiceImpl implements IProdTagVoService {
      */
     @Override
     public List<ProdTagVo> selectProdTagVoList(ProdTagVo prodTagVo) {
+        prodTagVo.setDelFlag(EDelFlag.NO.getVal());
         return prodTagVoMapper.selectProdTagVoList(prodTagVo);
     }
+
+    /**
+     * 添加商品标签
+     *
+     * @param prodTagVo 商品标签Vo
+     * @return 影响行数
+     */
+    @Override
+    public int addProdTags(ProdTagVo prodTagVo) {
+        List<ProdTag> prodTagVos = new ArrayList<>();
+        String[] tagIds = Convert.toStrArray(prodTagVo.getTagIds());
+        for (String tagId : tagIds) {
+            ProdTag prodTag = new ProdTag();
+            prodTag.setProdId(prodTagVo.getProdId());
+            prodTag.setTagId(Long.parseLong(tagId));
+            prodTag.setDelFlag(EDelFlag.NO.getVal());
+            prodTag.setCreateUser(ShiroUtils.getLoginName());
+            prodTag.setCreateTime(DateUtils.getNowDate());
+            prodTagVos.add(prodTag);
+        }
+        return prodTagMapper.batchInsertProdTag(prodTagVos);
+    }
+
+    /**
+     * 删除商品标签
+     *
+     * @param prodTagVo 商品标签Vo
+     * @return 影响行数
+     */
+    @Override
+    public int logicDeleteProdTagByCondition(ProdTagVo prodTagVo) {
+        prodTagVo.setUpdateUser(ShiroUtils.getLoginName());
+        prodTagVo.setUpdateTime(DateUtils.getNowDate());
+        return prodTagVoMapper.logicDeleteProdTagByCondition(prodTagVo);
+    }
 }

+ 19 - 2
08.src/Xingxi/xingxi-admin/src/main/resources/mapper/ProdTagVoMapper.xml

@@ -8,18 +8,35 @@
     </resultMap>
 
     <sql id="selectProdTagVo">
-        select m_prod_tag.prodId
+        select m_prod_tag.id
+             , m_prod_tag.prodId
              , m_prod_tag.tagId
              , m_tag.tagName
         from m_prod
         inner join m_prod_tag on m_prod.id = m_prod_tag.prodId
-        inner join m_tag on m_prod_tag.tagId = m_prod_tag.tagId
+        inner join m_tag on m_tag.tagId = m_prod_tag.tagId
     </sql>
 
     <select id="selectProdTagVoList" parameterType="ProdTagVo" resultMap="ProdTagResult">
         <include refid="selectProdTagVo"/>
         <where>
             <if test="prodId != null "> and m_prod_tag.prodId = #{prodId}</if>
+            <if test="tagId != null "> and m_prod_tag.tagId = #{tagId}</if>
+            <if test="delFlag != null  and delFlag != ''"> and m_prod_tag.delFlag = #{delFlag}</if>
         </where>
     </select>
+
+    <update id="logicDeleteProdTagByCondition" parameterType="ProdTag">
+        update m_prod_tag
+        <trim prefix="SET" suffixOverrides=",">
+            delFlag = '1',
+            <if test="updateUser != null">updateUser = #{updateUser},</if>
+            <if test="updateTime != null">updateTime = #{updateTime},</if>
+        </trim>
+        <where>
+            <if test="prodId != null "> and prodId = #{prodId}</if>
+            <if test="id != null "> and id = #{id}</if>
+            <if test="tagId != null "> and tagId = #{tagId}</if>
+        </where>
+    </update>
 </mapper>

+ 0 - 102
08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/product/prod/editTag.html

@@ -1,102 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
-<head>
-    <th:block th:include="include :: header('修改推荐商品')" />
-    <th:block th:include="include :: select2-css" />
-    <th:block th:include="include :: bootstrap-select-css" />
-    <th:block th:include="include :: summernote-css" />
-</head>
-<body class="white-bg">
-    <div class="wrapper wrapper-content animated fadeInRight ibox-content">
-        <form class="form-horizontal m" id="form-prod-edit" th:object="${prodVo}">
-            <input name="id" th:field="*{id}" type="hidden">
-            <ul>
-                <li>
-                    <label>品牌名:</label>
-                    <input type="text" name="ipName"/>
-                </li>
-                <li>
-                    <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
-                    <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
-                </li>
-            </ul>
-        </form>
-    </div>
-    <th:block th:include="include :: footer" />
-    <th:block th:include="include :: select2-js" />
-    <th:block th:include="include :: bootstrap-select-js" />
-    <th:block th:include="include :: summernote-js" />
-    <script th:inline="javascript">
-        var prefix = ctx + "master/product/prod"
-        $(".summernote").summernote({
-            lang: 'zh-CN',
-            callbacks:{
-                onImageUpload: function (files) {
-                    var fileSize = 0;
-                    fileSize = files[0].size;
-                    fileSize=Math. round( fileSize/1024*100)/100;
-
-                    if(fileSize>2048){
-                        layer.msg('上传文件不得大于2M,请重新上传。', {time: 3000, icon:6});
-                        return false;
-                    }
-
-                    if (!/image\/\w+/.test(files[0].type)) {
-                        layer.msg('上传的不是图片文件,请重新上传。', {time: 3000, icon:6});
-                        return false;
-                    }
-
-                    var formData = new FormData();
-                    formData.append('imageFile', files[0]);
-                    $.ajax({
-                        url : ctx + "common/upload/file/image",
-                        type : 'POST',
-                        data : formData,
-                        processData : false,
-                        contentType : false,
-                        success : function(result) {
-                            $('.summernote').summernote('insertImage', result.imageUrl);
-                        },error:function(){
-                            $.modal.alertError("上传失败");
-                        }
-                    });
-                }
-            },
-            height: 600,
-            toolbar: [
-                ['style', ['fontname', 'bold', 'italic', 'underline', 'clear']],
-                ['font', ['strikethrough', 'superscript', 'subscript']],
-                ['fontsize', ['fontsize', 'undo', 'redo']],
-                ['color', ['color']],
-                ['para', ['ul', 'ol', 'paragraph']],
-                ['height', ['height']],
-                ['insert', ['picture', 'table']],
-                ['search', ['findnreplace', 'changecolor']]
-            ],
-        });
-        $('.summernote').summernote('code', [[${prodVo.description}]]);
-
-        $("#form-prod-edit").validate({
-            focusCleanup: true
-        });
-
-        function submitHandler() {
-            if ($.validate.form()) {
-                var form = document.getElementById("form-prod-edit");
-                var formData = new FormData(form);
-                formData.append("description", $('#summernote').summernote('code'));
-                $.ajax({
-                    url: prefix + "/edit",
-                    data: formData,
-                    type: "post",
-                    processData: false,
-                    contentType: false,
-                    success: function(result) {
-                        $.operate.successCallback(result);
-                    }
-                });
-            }
-        }
-    </script>
-</body>
-</html>

+ 2 - 2
08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/product/prod/prod.html

@@ -138,11 +138,11 @@
         });
 
         function editAttr(id) {
-            $.modal.openTab("商品属性信息",prefix + "/editAttr/" + id);
+            $.modal.openTab("商品属性信息",ctx + "master/product/prodAttr/editAttr/" + id);
         }
 
         function editTag(id) {
-            $.modal.openTab("商品标签信息",prefix + "/editTag/" + id);
+            $.modal.openTab("商品标签信息", ctx + "master/product/prodTag/editTag/" + id);
         }
 
         function approve(id) {

+ 115 - 0
08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/product/prodTag/editTag.html

@@ -0,0 +1,115 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
+<head>
+    <th:block th:include="include :: header('编辑商品标签')" />
+    <style>
+        .custom-btn {
+            cursor: pointer;
+        }
+    </style>
+</head>
+<body class="white-bg">
+    <input id="prodId" th:value="${prodId}" type="hidden">
+    <div class="wrapper wrapper-content animated fadeInRight">
+        <div class="row" id="ibox-container">
+        </div>
+    </div>
+    <!-- 设置快递单类型区域 -->
+    <script id="addNewTagDiv" type="text/template">
+        <div class="col-sm-12 select-table table-striped">
+            <table id="newTag-table"></table>
+        </div>
+    </script>
+    <th:block th:include="include :: footer" />
+    <script th:inline="javascript">
+        var prefix = ctx + "master/product/prodTag";
+        var prodTagVoList = [[${prodTagVoList}]];
+        prodTagVoList.forEach(item => {
+            var card = "<div class='col-sm-1'><div class='ibox'><div class='ibox-title'><i class='fa fa-remove pull-right custom-btn' onclick='removeTag(" + item.id + ")'></i><h5>"+item.tagName+"</h5></div></div></div>";
+            $("#ibox-container").append(card);
+        });
+        var newTagcard = "<div class='col-sm-1'><div class='ibox'><div class='ibox-title custom-btn' onclick='addNewTag()'><h5>添加新标签</h5></div></div></div>";
+        $("#ibox-container").append(newTagcard);
+
+        $("#form-prod-edit").validate({
+            focusCleanup: true
+        });
+
+        function removeTag(prodTagId) {
+            var data = {
+                "prodId": $("#prodId").val(),
+                "id": prodTagId,
+            };
+            $.operate.post(prefix + "/remove", data, refreshTab);
+        }
+
+        function refreshTab() {
+            location.reload();
+        }
+
+        function addNewTag() {
+            var content = $('#addNewTagDiv').html();
+            layer.open({
+                type: 1,
+                fix: false,
+                maxmin: false,
+                shade: 0.3,
+                area: ['600px', '480px'],
+                title: '添加标签',
+                // 弹层外区域关闭
+                shadeClose: true,
+                success: function(layero, index){
+                    var addTagOptions = {
+                        id: "newTag-table",
+                        url: ctx + "master/tag/list",
+                        showSearch: false,
+                        showRefresh: false,
+                        showColumns: false,
+                        showToggle: false,
+                        pagination: false,
+                        modalName: "用户避雷标签",
+                        columns: [
+                            {
+                                checkbox: true
+                            },
+                            {
+                                field: 'tagName',
+                                title: '标签'
+                            }
+                        ]
+                    };
+                    $.table.init(addTagOptions);
+                },
+                content: content,
+                btn: ['<i class="fa fa-check"></i> 确定', '<i class="fa fa-remove"></i> 关闭'],
+                btn1: function() {
+                    var tagIds = $.table.selectColumns("tagId");
+                    var url = prefix + "/addTags";
+                    var data = {
+                        "prodId": $("#prodId").val(),
+                        "tagIds": tagIds,
+                    };
+
+                    $.post(url, data, function(result) {
+                        if (result.code === web_status.SUCCESS) {
+                            $.modal.closeAll();
+                            $.modal.enable();
+                            $.modal.alertSuccess("添加成功。");
+                            refreshTab();
+                        } else if (result.code === web_status.WARNING) {
+                            $.modal.closeAll();
+                            $.modal.enable();
+                            $.modal.alertWarning(result.msg)
+                        } else {
+                            $.modal.closeAll();
+                            $.modal.enable();
+                            $.modal.alertError(result.msg);
+                        }
+                    });
+                    layer.closeAll();
+                }
+            });
+        }
+    </script>
+</body>
+</html>

+ 0 - 3
08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/tag/tag.html

@@ -38,9 +38,6 @@
                 modalName: "用户避雷标签",
                 columns: [
                     {
-                        checkbox: true
-                    },
-                    {
                         field: 'tagName',
                         title: '标签名称'
                     },