Переглянути джерело

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

baolei 7 місяців тому
батько
коміт
b5fc14203a
16 змінених файлів з 448 додано та 47 видалено
  1. 28 4
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/product/controller/ProdController.java
  2. 8 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/product/mapper/ProdVoMapper.java
  3. 6 1
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/product/service/impl/ProdCommonService.java
  4. 13 12
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/tag/controller/TagController.java
  5. 9 5
      08.src/Xingxi/xingxi-admin/src/main/resources/mapper/ProdVoMapper.xml
  6. 1 3
      08.src/Xingxi/xingxi-admin/src/main/resources/static/ruoyi/js/common.js
  7. 1 0
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/include.html
  8. 92 2
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/product/prod/add.html
  9. 100 9
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/product/prod/edit.html
  10. 29 8
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/product/prod/prod.html
  11. 33 0
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/tag/add.html
  12. 34 0
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/tag/edit.html
  13. 63 0
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/tag/tag.html
  14. 22 0
      08.src/Xingxi/xingxi-common/src/main/java/com/xingxi/common/enums/EProdStatus.java
  15. 1 1
      08.src/Xingxi/xingxi-system/src/main/java/com/xingxi/master/tag/service/ITagService.java
  16. 8 2
      08.src/Xingxi/xingxi-system/src/main/java/com/xingxi/master/tag/service/impl/TagServiceImpl.java

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

@@ -5,8 +5,10 @@ import com.xingxi.common.core.controller.BaseController;
 import com.xingxi.common.core.domain.AjaxResult;
 import com.xingxi.common.core.page.TableDataInfo;
 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.web.controller.master.product.domain.ProdVo;
 import com.xingxi.web.controller.master.product.service.IProdVoService;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.stereotype.Controller;
@@ -42,9 +44,9 @@ public class ProdController extends BaseController {
     @RequiresPermissions("master:product:list")
     @PostMapping("/list")
     @ResponseBody
-    public TableDataInfo list(Prod prod) {
+    public TableDataInfo list(ProdVo prodVo) {
         startPage();
-        List<Prod> list = prodVoService.selectProdList(prod);
+        List<ProdVo> list = prodVoService.selectProdVoList(prodVo);
         return getDataTable(list);
     }
 
@@ -86,8 +88,8 @@ public class ProdController extends BaseController {
     @RequiresPermissions("master:product:edit")
     @GetMapping("/edit/{id}")
     public String edit(@PathVariable("id") Long id, ModelMap mMap) {
-        Prod prod = prodVoService.selectProdById(id);
-        mMap.put("prod", prod);
+        ProdVo prodVo = prodVoService.selectProdVoById(id);
+        mMap.put("prodVo", prodVo);
         return prefix + "/edit";
     }
 
@@ -112,4 +114,26 @@ public class ProdController extends BaseController {
     public AjaxResult remove(String ids) {
         return toAjax(prodVoService.logicDeleteProdByIds(ids));
     }
+
+    /**
+     * 审核商品
+     */
+    @RequiresPermissions("master:product:approve")
+    @PostMapping("/approve")
+    @ResponseBody
+    public AjaxResult approve(Prod prod) {
+        prod.setProdStatus(EProdStatus.APPROVED.getVal());
+        return toAjax(prodVoService.updateProd(prod));
+    }
+
+    /**
+     * 审核商品
+     */
+    @RequiresPermissions("master:product:approve")
+    @PostMapping("/reject")
+    @ResponseBody
+    public AjaxResult reject(Prod prod) {
+        prod.setProdStatus(EProdStatus.REJECTED.getVal());
+        return toAjax(prodVoService.updateProd(prod));
+    }
 }

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

@@ -1,5 +1,6 @@
 package com.xingxi.web.controller.master.product.mapper;
 
+import com.xingxi.master.designer.domain.Designer;
 import com.xingxi.master.product.domain.ProdClass;
 import com.xingxi.master.product.mapper.ProdMapper;
 import com.xingxi.web.controller.master.product.domain.ProdVo;
@@ -37,4 +38,11 @@ public interface ProdVoMapper extends ProdMapper {
      * @return 商品分类列表
      */
     List<ProdClass> selectProdClassList();
+
+    /**
+     * 查询设计师列表
+     *
+     * @return 设计师列表
+     */
+    List<Designer> selectDesignerList();
 }

+ 6 - 1
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/product/service/impl/ProdCommonService.java

@@ -1,5 +1,6 @@
 package com.xingxi.web.controller.master.product.service.impl;
 
+import com.xingxi.master.designer.domain.Designer;
 import com.xingxi.master.product.domain.ProdClass;
 import com.xingxi.web.controller.master.product.mapper.ProdVoMapper;
 import org.springframework.stereotype.Component;
@@ -20,7 +21,11 @@ public class ProdCommonService {
         this.prodVoMapper = prodVoMapper;
     }
 
-    public List<ProdClass> getProdClasses(){
+    public List<ProdClass> getProdClasses() {
         return prodVoMapper.selectProdClassList();
     }
+
+    public List<Designer> getDesigners() {
+        return prodVoMapper.selectDesignerList();
+    }
 }

+ 13 - 12
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/tag/controller/TagController.java

@@ -5,6 +5,7 @@ import com.xingxi.common.core.controller.BaseController;
 import com.xingxi.common.core.domain.AjaxResult;
 import com.xingxi.common.core.page.TableDataInfo;
 import com.xingxi.common.enums.BusinessType;
+import com.xingxi.common.enums.EDelFlag;
 import com.xingxi.common.utils.poi.ExcelUtil;
 import com.xingxi.master.tag.domain.Tag;
 import com.xingxi.master.tag.service.ITagService;
@@ -19,7 +20,7 @@ import java.util.List;
 /**
  * 标签Controller
  *
- * @author ruoyi
+ * @author xingxi
  * @date 2025-03-09
  */
 @Controller
@@ -42,9 +43,9 @@ public class TagController extends BaseController {
     @RequiresPermissions("master:tag:list")
     @PostMapping("/list")
     @ResponseBody
-    public TableDataInfo list(Tag mTag) {
+    public TableDataInfo list(Tag tag) {
         startPage();
-        List<Tag> list = tagService.selectTagList(mTag);
+        List<Tag> list = tagService.selectTagList(tag);
         return getDataTable(list);
     }
 
@@ -55,8 +56,8 @@ public class TagController extends BaseController {
     @Log(title = "标签", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     @ResponseBody
-    public AjaxResult export(Tag mTag) {
-        List<Tag> list = tagService.selectTagList(mTag);
+    public AjaxResult export(Tag tag) {
+        List<Tag> list = tagService.selectTagList(tag);
         ExcelUtil<Tag> util = new ExcelUtil<>(Tag.class);
         return util.exportExcel(list, "标签数据");
     }
@@ -76,8 +77,8 @@ public class TagController extends BaseController {
     @Log(title = "标签", businessType = BusinessType.INSERT)
     @PostMapping("/add")
     @ResponseBody
-    public AjaxResult addSave(Tag mTag) {
-        return toAjax(tagService.insertTag(mTag));
+    public AjaxResult addSave(Tag tag) {
+        return toAjax(tagService.insertTag(tag));
     }
 
     /**
@@ -86,8 +87,8 @@ public class TagController extends BaseController {
     @RequiresPermissions("master:tag:edit")
     @GetMapping("/edit/{tagId}")
     public String edit(@PathVariable("tagId") Long tagId, ModelMap mMap) {
-        Tag mTag = tagService.selectTagByTagId(tagId);
-        mMap.put("mTag", mTag);
+        Tag tag = tagService.selectTagByTagId(tagId);
+        mMap.put("tag", tag);
         return prefix + "/edit";
     }
 
@@ -98,8 +99,8 @@ public class TagController extends BaseController {
     @Log(title = "标签", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
     @ResponseBody
-    public AjaxResult editSave(Tag mTag) {
-        return toAjax(tagService.updateTag(mTag));
+    public AjaxResult editSave(Tag tag) {
+        return toAjax(tagService.updateTag(tag));
     }
 
     /**
@@ -110,6 +111,6 @@ public class TagController extends BaseController {
     @PostMapping("/remove")
     @ResponseBody
     public AjaxResult remove(String ids) {
-        return toAjax(tagService.deleteTagByTagIds(ids));
+        return toAjax(tagService.logicDeleteTagByTagIds(ids));
     }
 }

+ 9 - 5
08.src/Xingxi/xingxi-admin/src/main/resources/mapper/ProdVoMapper.xml

@@ -15,13 +15,13 @@
         <result property="createTime"           column="createTime"         />
         <result property="updateUser"           column="updateUser"         />
         <result property="updateTime"           column="updateTime"         />
-        <result property="prodClass"            column="prodClass"          />
+        <result property="prodClass"            column="className"          />
         <result property="ipName"               column="ipName"             />
         <result property="designerName"         column="designerName"       />
     </resultMap>
 
     <sql id="selectProdVo">
-        select id
+        select m_prod.id
              , m_prod.prodClassId
              , m_prod.prodName
              , m_prod.ipId
@@ -40,7 +40,7 @@
 
     <select id="selectProdVoList" parameterType="ProdVo" resultMap="ProdResult">
         <include refid="selectProdVo"/>
-        <where>  
+        <where>
             <if test="prodClassId != null "> and m_prod.prodClassId = #{prodClassId}</if>
             <if test="prodName != null  and prodName != ''"> and m_prod.prodName like concat('%', #{prodName}, '%')</if>
             <if test="ipId != null "> and ipId = #{ipId}</if>
@@ -49,7 +49,7 @@
             <if test="prodStatus != null  and prodStatus != ''"> and m_prod.prodStatus = #{prodStatus}</if>
             <if test="thirdIdConfirmFlag != null  and thirdIdConfirmFlag != ''"> and m_prod.thirdIdConfirmFlag = #{thirdIdConfirmFlag}</if>
             <if test="delFlag != null  and delFlag != ''"> and m_prod.delFlag = #{delFlag}</if>
-            <if test="className != null  and className != ''"> and m_prod_class.className like concat('%', #{className}, '%')</if>
+            <if test="prodClass != null  and prodClass != ''"> and m_prod_class.className like concat('%', #{prodClass}, '%')</if>
             <if test="designerName != null  and designerName != ''"> and m_designer.designerName like concat('%', #{designerName}, '%')</if>
             <if test="ipName != null  and ipName != ''"> and m_ipinfo.ipName like concat('%', #{ipName}, '%')</if>
         </where>
@@ -57,10 +57,14 @@
     
     <select id="selectProdVoById" parameterType="Long" resultMap="ProdResult">
         <include refid="selectProdVo"/>
-        where id = #{id}
+        where m_prod.id = #{id}
     </select>
 
     <select id="selectProdClassList" parameterType="String" resultType="ProdClass">
         select * from m_prod_class where delFlag = '0'
     </select>
+
+    <select id="selectDesignerList" parameterType="String" resultType="Designer">
+        select * from m_designer where delFlag = '0'
+    </select>
 </mapper>

+ 1 - 3
08.src/Xingxi/xingxi-admin/src/main/resources/static/ruoyi/js/common.js

@@ -2,13 +2,11 @@
  * 通用方法封装处理
  * Copyright (c) 2019 ruoyi 
  */
-
 var startLayDate;
 var endLayDate;
 var isScrollToTop = parent.isScrollToTop;
 
 $(function() {
-	
     // 回到顶部绑定
     if ($.fn.toTop !== undefined) {
         $('#scroll-up').toTop();
@@ -36,7 +34,7 @@ $(function() {
 	
     // 取消回车自动提交表单
     $(document).on("keypress", ":input:not(textarea):not([type=submit])", function(event) {
-        if (event.keyCode == 13) {
+        if (event.keyCode === 13) {
             event.preventDefault();
         }
     });

+ 1 - 0
08.src/Xingxi/xingxi-admin/src/main/resources/templates/include.html

@@ -36,6 +36,7 @@
     <script th:src="@{/ajax/libs/iCheck/icheck.min.js?v=1.0.3}"></script>
 	<script th:src="@{/ajax/libs/layer/layer.min.js?v=3.7.0}"></script>
 	<script th:src="@{/ajax/libs/layui/layui.min.js?v=2.8.18}"></script>
+	<!-- 共通插件 -->
 	<script th:src="@{/ruoyi/js/common.js?v=4.7.9}"></script>
 	<script th:src="@{/ruoyi/js/ry-ui.js?v=4.7.9}"></script>
 </div>

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

@@ -2,6 +2,9 @@
 <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">
@@ -10,7 +13,7 @@
                 <div class="form-group">
                     <label class="col-sm-3 control-label">商品分类:</label>
                     <div class="col-sm-8">
-                        <select name="prodClass" class="form-control m-b" th:with="prodClasses=${@product.getProdClasses()}" >
+                        <select name="prodClassId" class="form-control" th:with="prodClasses=${@product.getProdClasses()}" >
                             <option value="">所有</option>
                             <option th:each="prodClass : ${prodClasses}" th:text="${prodClass.className}" th:value="${prodClass.prodClassId}"></option>
                         </select>
@@ -36,18 +39,105 @@
                     </div>
                 </div>
             </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">设计师:</label>
+                    <div class="col-sm-8">
+                        <select name="designerId" class="form-control m-b" th:with="designers=${@product.getDesigners()}" th:field="*{designerId}" >
+                            <option value="">所有</option>
+                            <option th:each="designer : ${designers}" th:text="${designer.designerName}" th:value="${designer.id}"></option>
+                        </select>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">商品描述:</label>
+                    <div class="col-sm-10" style="margin-left: 80px;">
+                        <div class="summernote" style="border: red;" id="summernote"></div>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <input type="button" onclick="test()">
+            </div>
         </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"
         $("#form-prod-add").validate({
             focusCleanup: true
         });
 
+        $(document).ready(function () {
+            // 富文本框
+            $(".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']]
+                ],
+            });
+        });
+
         function submitHandler() {
             if ($.validate.form()) {
-                $.operate.save(prefix + "/add", $('#form-prod-add').serialize());
+                var form = document.getElementById("form-prod-add");
+                var formData = new FormData(form);
+                formData.append("description", $('#summernote').summernote('code'));
+                $.ajax({
+                    url: prefix + "/add",
+                    data: formData,
+                    type: "post",
+                    processData: false,
+                    contentType: false,
+                    success: function(result) {
+                        $.operate.successCallback(result);
+                    }
+                });
             }
         }
     </script>

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

@@ -2,47 +2,138 @@
 <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="${tSuggestProd}">
+        <form class="form-horizontal m" id="form-prod-edit" th:object="${prodVo}">
             <input name="id" th:field="*{id}" type="hidden">
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label">商品ID:</label>
+                    <label class="col-sm-3 control-label">商品分类:</label>
                     <div class="col-sm-8">
-                        <input name="prodId" th:field="*{prodId}" class="form-control" type="text">
+                        <select name="prodClassId" class="form-control" th:with="prodClasses=${@product.getProdClasses()}" th:field="*{prodClassId}" >
+                            <option value="">所有</option>
+                            <option th:each="prodClass : ${prodClasses}" th:text="${prodClass.className}" th:value="${prodClass.prodClassId}"></option>
+                        </select>
                     </div>
                 </div>
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label">顺序:</label>
+                    <label class="col-sm-3 control-label">商品名称:</label>
                     <div class="col-sm-8">
-                        <input name="sort" th:field="*{sort}" class="form-control" type="text">
+                        <input name="prodName" class="form-control" type="text" th:field="*{prodName}">
                     </div>
                 </div>
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label">删除标志:</label>
+                    <label class="col-sm-3 control-label">文创名称:</label>
                     <div class="col-sm-8">
-                        <input name="delFlag" th:field="*{delFlag}" class="form-control" type="text">
+                        <select name="ipId" class="form-control m-b" th:with="ipInfos=${@ipInfo.getIpInfos()}" th:field="*{ipId}" >
+                            <option value="">所有</option>
+                            <option th:each="ipInfo : ${ipInfos}" th:text="${ipInfo.ipName}" th:value="${ipInfo.ipId}"></option>
+                        </select>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">设计师:</label>
+                    <div class="col-sm-8">
+                        <select name="designerId" class="form-control m-b" th:with="designers=${@product.getDesigners()}" th:field="*{designerId}" >
+                            <option value="">所有</option>
+                            <option th:each="designer : ${designers}" th:text="${designer.designerName}" th:value="${designer.id}"></option>
+                        </select>
+                    </div>
+                </div>
+            </div>
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">商品描述:</label>
+                    <div class="col-sm-10" style="margin-left: 80px">
+                        <div class="summernote" style="border: red;" id="summernote"></div>
                     </div>
                 </div>
             </div>
         </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 + "system/prod";
+        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()) {
-                $.operate.save(prefix + "/edit", $('#form-prod-edit').serialize());
+                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>

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

@@ -75,8 +75,11 @@
     <th:block th:include="include :: footer" />
     <script th:inline="javascript">
         var editFlag = [[${@permission.hasPermi('master:product:prod:edit')}]];
-        var removeFlag = [[${@permission.hasPermi('master:product:prod:add:remove')}]];
+        var removeFlag = [[${@permission.hasPermi('master:product:prod:remove')}]];
+        var approveFlag = [[${@permission.hasPermi('master:product:prod:approve')}]];
         var prefix = ctx + "master/product/prod";
+        var prodStatuses = [[${@dict.getType('prod_status')}]];
+        console.log(prodStatuses)
 
         $(function() {
             var options = {
@@ -104,20 +107,26 @@
                         title: '设计师名称'
                     },
                     {
-                        field: 'prodDesc',
-                        title: '商品描述'
-                    },
-                    {
                         field: 'prodStatus',
-                        title: '商品状态'
+                        title: '商品状态',
+                        formatter: function (value, row, index) {
+                            return $.table.selectDictLabel(prodStatuses, value);
+                        }
                     },
                     {
                         title: '操作',
                         align: 'center',
                         formatter: function(value, row, index) {
                             var actions = [];
-                            actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
-                            actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>');
+                            if (row.prodStatus === 'SAVED') {
+                                actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
+                                actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a> ');
+                                actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
+                            }
+                            if (row.prodStatus === 'SUBMITTED') {
+                                actions.push('<a class="btn btn-warning btn-xs ' + approveFlag + '" href="javascript:void(0)" onclick="approve(\'' + row.id + '\')"><i class="fa fa-thumbs-o-up"></i>审核</a> ');
+                                actions.push('<a class="btn btn-warning btn-xs ' + approveFlag + '" href="javascript:void(0)" onclick="reject(\'' + row.id + '\')"><i class="fa fa-thumbs-o-down"></i>驳回</a>');
+                            }
                             return actions.join('');
                         }
                     }
@@ -125,6 +134,18 @@
             };
             $.table.init(options);
         });
+
+        function approve(id) {
+            $.modal.confirm("确认同意该商品的申请吗?", function() {
+                $.operate.post(prefix + "/approve", {"id": id});
+            });
+        }
+
+        function reject(id) {
+            $.modal.confirm("确认驳回该商品的申请吗?", function() {
+                $.operate.post(prefix + "/reject/", {"id": id});
+            });
+        }
     </script>
 </body>
 </html>

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

@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
+<head>
+    <th:block th:include="include :: header('新增用户避雷标签')" />
+</head>
+<body class="white-bg">
+    <div class="wrapper wrapper-content animated fadeInRight ibox-content">
+        <form class="form-horizontal m" id="form-tag-add">
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">标签:</label>
+                    <div class="col-sm-8">
+                        <input name="tagName" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+        </form>
+    </div>
+    <th:block th:include="include :: footer" />
+    <script th:inline="javascript">
+        var prefix = ctx + "master/tag"
+        $("#form-tag-add").validate({
+            focusCleanup: true
+        });
+
+        function submitHandler() {
+            if ($.validate.form()) {
+                $.operate.save(prefix + "/add", $('#form-tag-add').serialize());
+            }
+        }
+    </script>
+</body>
+</html>

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

@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
+<head>
+    <th:block th:include="include :: header('修改用户避雷标签')" />
+</head>
+<body class="white-bg">
+    <div class="wrapper wrapper-content animated fadeInRight ibox-content">
+        <form class="form-horizontal m" id="form-tag-edit" th:object="${tag}">
+            <input name="userRefuseid" th:field="*{tagId}" type="hidden">
+            <div class="col-xs-12">
+                <div class="form-group">
+                    <label class="col-sm-3 control-label">标签ID:</label>
+                    <div class="col-sm-8">
+                        <input name="tagName" th:field="*{tagName}" class="form-control" type="text">
+                    </div>
+                </div>
+            </div>
+        </form>
+    </div>
+    <th:block th:include="include :: footer" />
+    <script th:inline="javascript">
+        var prefix = ctx + "master/tag";
+        $("#form-tag-edit").validate({
+            focusCleanup: true
+        });
+
+        function submitHandler() {
+            if ($.validate.form()) {
+                $.operate.save(prefix + "/edit", $('#form-tag-edit').serialize());
+            }
+        }
+    </script>
+</body>
+</html>

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

@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
+<head>
+    <th:block th:include="include :: header('用户避雷标签列表')" />
+</head>
+<body class="gray-bg">
+     <div class="container-div">
+        <div class="row">
+            <div class="btn-group-sm" id="toolbar" role="group">
+                <a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:tag:add">
+                    <i class="fa fa-plus"></i> 添加
+                </a>
+                <a class="btn btn-primary single disabled" onclick="$.operate.edit()" shiro:hasPermission="system:tag:edit">
+                    <i class="fa fa-edit"></i> 修改
+                </a>
+                <a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="system:tag:remove">
+                    <i class="fa fa-remove"></i> 删除
+                </a>
+            </div>
+            <div class="col-sm-12 select-table table-striped">
+                <table id="bootstrap-table"></table>
+            </div>
+        </div>
+    </div>
+    <th:block th:include="include :: footer" />
+    <script th:inline="javascript">
+        var editFlag = [[${@permission.hasPermi('master:tag:edit')}]];
+        var removeFlag = [[${@permission.hasPermi('master:tag:remove')}]];
+        var prefix = ctx + "master/tag";
+
+        $(function() {
+            var options = {
+                url: prefix + "/list",
+                createUrl: prefix + "/add",
+                updateUrl: prefix + "/edit/{id}",
+                removeUrl: prefix + "/remove",
+                exportUrl: prefix + "/export",
+                modalName: "用户避雷标签",
+                columns: [
+                    {
+                        checkbox: true
+                    },
+                    {
+                        field: 'tagName',
+                        title: '标签名称'
+                    },
+                    {
+                        title: '操作',
+                        align: 'center',
+                        formatter: function(value, row, index) {
+                            var actions = [];
+                            actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.tagId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
+                            actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.tagId + '\')"><i class="fa fa-remove"></i>删除</a>');
+                            return actions.join('');
+                        }
+                    }
+                ]
+            };
+            $.table.init(options);
+        });
+    </script>
+</body>
+</html>

+ 22 - 0
08.src/Xingxi/xingxi-common/src/main/java/com/xingxi/common/enums/EProdStatus.java

@@ -0,0 +1,22 @@
+package com.xingxi.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @program: xingxi
+ * @description: prod status
+ * @author: dong
+ * @create: 2020-01-12 19:40
+ */
+@AllArgsConstructor
+@Getter
+public enum EProdStatus {
+    SAVED("SAVED", "已保存"),
+    DELETED("DELETED", "已删除"),
+    SUBMITTED("SUBMITTED", "已提交"),
+    APPROVED("APPROVED", "审核通过"),
+    REJECTED("REJECTED", "已驳回");
+    private String val;
+    private String desc;
+}

+ 1 - 1
08.src/Xingxi/xingxi-system/src/main/java/com/xingxi/master/tag/service/ITagService.java

@@ -81,7 +81,7 @@ public interface ITagService {
      * @param tagIds 需要删除的数据主键集合
      * @return 结果
      */
-    int logicDeleteTagByTagIds(String[] tagIds);
+    int logicDeleteTagByTagIds(String tagIds);
 
     /**
      * 逻辑批量删除标签

+ 8 - 2
08.src/Xingxi/xingxi-system/src/main/java/com/xingxi/master/tag/service/impl/TagServiceImpl.java

@@ -1,7 +1,9 @@
 package com.xingxi.master.tag.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.tag.domain.Tag;
 import com.xingxi.master.tag.mapper.TagMapper;
 import com.xingxi.master.tag.service.ITagService;
@@ -40,6 +42,7 @@ public class TagServiceImpl implements ITagService {
      */
     @Override
     public List<Tag> selectTagList(Tag tag) {
+        tag.setDelFlag(EDelFlag.NO.getVal());
         return tagMapper.selectTagList(tag);
     }
 
@@ -51,6 +54,8 @@ public class TagServiceImpl implements ITagService {
      */
     @Override
     public int insertTag(Tag tag) {
+        tag.setDelFlag(EDelFlag.NO.getVal());
+        tag.setCreateUser(ShiroUtils.getLoginName());
         tag.setCreateTime(DateUtils.getNowDate());
         return tagMapper.insertTag(tag);
     }
@@ -74,6 +79,7 @@ public class TagServiceImpl implements ITagService {
      */
     @Override
     public int updateTag(Tag tag) {
+        tag.setUpdateUser(ShiroUtils.getLoginName());
         tag.setUpdateTime(DateUtils.getNowDate());
         return tagMapper.updateTag(tag);
     }
@@ -118,8 +124,8 @@ public class TagServiceImpl implements ITagService {
      * @return 结果
      */
     @Override
-    public int logicDeleteTagByTagIds(String[] tagIds) {
-        return tagMapper.logicDeleteTagByTagIds(tagIds);
+    public int logicDeleteTagByTagIds(String tagIds) {
+        return tagMapper.logicDeleteTagByTagIds(Convert.toStrArray(tagIds));
     }
 
     /**