From ce8219d5f2ca188c209c112a23ebb35a8743a1f1 Mon Sep 17 00:00:00 2001
From: Hentua <wangdoubleone@gmail.com>
Date: Wed, 24 Jan 2024 00:42:35 +0800
Subject: [PATCH] fix

---
 src/main/java/cc/mrbird/febs/vip/controller/AdminMallVipConfigController.java |   17 ++
 src/main/resources/templates/febs/views/modules/vip/vipConfig-list.html       |   13 +
 src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java   |   20 ++
 src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java                    |    6 
 src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java           |    2 
 src/main/resources/templates/febs/views/modules/vip/vipConfig-add.html        |   32 ++-
 src/main/resources/templates/febs/views/modules/vip/vipConfig-edit.html       |  280 ++++++++++++++++++++++++++++++++++++++++
 src/main/java/cc/mrbird/febs/vip/controller/ViewVipConfigController.java      |   28 +++
 src/main/resources/templates/febs/views/modules/vip/goods-select-list.html    |    6 
 9 files changed, 383 insertions(+), 21 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/vip/controller/AdminMallVipConfigController.java b/src/main/java/cc/mrbird/febs/vip/controller/AdminMallVipConfigController.java
index 8e22c69..8906308 100644
--- a/src/main/java/cc/mrbird/febs/vip/controller/AdminMallVipConfigController.java
+++ b/src/main/java/cc/mrbird/febs/vip/controller/AdminMallVipConfigController.java
@@ -28,9 +28,20 @@
     }
 
 
-    @PostMapping(value = "/add")
-    public FebsResponse add(@RequestBody MallVipConfig config) {
-        mallVipConfigService.addVipConfig(config);
+    @PostMapping(value = "/addOrEdit")
+    public FebsResponse addOrEdit(@RequestBody MallVipConfig config) {
+        if (config.getType() == 1) {
+            config.setTimes(null);
+            config.setAmount(null);
+        } else {
+            config.setTargetId(null);
+        }
+
+        if (config.getId() == null) {
+            mallVipConfigService.addVipConfig(config);
+        } else {
+            mallVipConfigService.editVipConfig(config);
+        }
         return new FebsResponse().success().message("操作成功");
     }
 
diff --git a/src/main/java/cc/mrbird/febs/vip/controller/ViewVipConfigController.java b/src/main/java/cc/mrbird/febs/vip/controller/ViewVipConfigController.java
index 51a0f72..ac63ffa 100644
--- a/src/main/java/cc/mrbird/febs/vip/controller/ViewVipConfigController.java
+++ b/src/main/java/cc/mrbird/febs/vip/controller/ViewVipConfigController.java
@@ -7,8 +7,13 @@
 import cc.mrbird.febs.mall.mapper.MallGoodsCouponMapper;
 import cc.mrbird.febs.mall.service.IApiMallGoodsService;
 import cc.mrbird.febs.vip.entity.MallVipBenefits;
+import cc.mrbird.febs.vip.entity.MallVipConfig;
+import cc.mrbird.febs.vip.entity.MallVipConfigBenefits;
 import cc.mrbird.febs.vip.service.IMallVipBenefitsService;
+import cc.mrbird.febs.vip.service.IMallVipConfigBenefitsService;
+import cc.mrbird.febs.vip.service.IMallVipConfigService;
 import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -29,6 +34,8 @@
     private final IMallVipBenefitsService mallVipBenefitsService;
     private final IApiMallGoodsService apiMallGoodsService;
     private final MallGoodsCouponMapper mallGoodsCouponMapper;
+    private final IMallVipConfigService mallVipConfigService;
+    private final IMallVipConfigBenefitsService mallVipConfigBenefitsService;
 
     @GetMapping(value = "/benefitsList")
     public String benefitsList() {
@@ -120,8 +127,23 @@
         return FebsUtil.view("modules/vip/vipConfig-add");
     }
 
-    @GetMapping(value = "/levelEdit")
-    public String levelEdit() {
-        return FebsUtil.view("modules/vip/vipLevel-list");
+    @GetMapping(value = "/levelEdit/{id}")
+    public String levelEdit(@PathVariable("id") Long id, Model model) {
+        MallVipConfig vipConfig = mallVipConfigService.getById(id);
+        if (vipConfig.getType() == 1) {
+            MallGoods goods = apiMallGoodsService.getById(vipConfig.getTargetId());
+            vipConfig.setTargetId(goods.getId());
+            vipConfig.setTargetName(goods.getGoodsName());
+        }
+
+        LambdaQueryWrapper<MallVipConfigBenefits> configBenefitsQuery = new LambdaQueryWrapper<>();
+        configBenefitsQuery.eq(MallVipConfigBenefits::getConfigId, vipConfig.getId());
+        List<MallVipConfigBenefits> list = mallVipConfigBenefitsService.list(configBenefitsQuery);
+
+        List<Long> benefitsIds = list.stream().map(MallVipConfigBenefits::getBenefitsId).collect(Collectors.toList());
+        vipConfig.setBenefitsIdList(benefitsIds);
+
+        model.addAttribute("configData", vipConfig);
+        return FebsUtil.view("modules/vip/vipConfig-edit");
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java b/src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java
index 36d3eb6..1413cf6 100644
--- a/src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java
+++ b/src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java
@@ -57,8 +57,14 @@
     private Long targetId;
 
     @TableField(exist = false)
+    private String targetName;
+
+    @TableField(exist = false)
     private List<MallVipBenefits> benefits;
 
     @TableField(exist = false)
     private String benefitsIds;
+
+    @TableField(exist = false)
+    private List<Long> benefitsIdList;
 }
diff --git a/src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java b/src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java
index 38dfee9..2591223 100644
--- a/src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java
+++ b/src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java
@@ -15,5 +15,7 @@
 
     void addVipConfig(MallVipConfig config);
 
+    void editVipConfig(MallVipConfig config);
+
     void delVipConfig(Long id);
 }
diff --git a/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java b/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java
index d40e769..42db833 100644
--- a/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java
@@ -57,6 +57,26 @@
     }
 
     @Override
+    public void editVipConfig(MallVipConfig config) {
+        this.baseMapper.updateById(config);
+
+        LambdaQueryWrapper<MallVipConfigBenefits> delQuery = new LambdaQueryWrapper<>();
+        delQuery.eq(MallVipConfigBenefits::getConfigId, config.getId());
+        mallVipConfigBenefitsService.remove(delQuery);
+
+        List<MallVipConfigBenefits> configBenefitsList = new ArrayList<>();
+        List<String> benefitsIds = StrUtil.split(config.getBenefitsIds(), ',');
+        benefitsIds.forEach(item -> {
+            MallVipConfigBenefits configBenefits = new MallVipConfigBenefits();
+            configBenefits.setConfigId(config.getId());
+            configBenefits.setBenefitsId(Long.parseLong(item));
+            configBenefitsList.add(configBenefits);
+        });
+
+        mallVipConfigBenefitsService.saveBatch(configBenefitsList);
+    }
+
+    @Override
     @Transactional
     public void delVipConfig(Long id) {
         this.baseMapper.deleteById(id);
diff --git a/src/main/resources/templates/febs/views/modules/vip/goods-select-list.html b/src/main/resources/templates/febs/views/modules/vip/goods-select-list.html
index b711d4f..1b33eab 100644
--- a/src/main/resources/templates/febs/views/modules/vip/goods-select-list.html
+++ b/src/main/resources/templates/febs/views/modules/vip/goods-select-list.html
@@ -211,7 +211,11 @@
         $("#goods-select-form-submit").on('click', function() {
             var checkData = table.checkStatus(tableSelect).data;
             if (checkData.length > 0) {
-                parent.setGoodsSelect(tableIndex, checkData[0]);
+                if (tableIndex != -1) {
+                    parent.setGoodsSelect(tableIndex, checkData[0]);
+                } else {
+                    parent.setConfigGoodsSelect(tableIndex, checkData[0]);
+                }
             }
         })
 
diff --git a/src/main/resources/templates/febs/views/modules/vip/vipConfig-add.html b/src/main/resources/templates/febs/views/modules/vip/vipConfig-add.html
index 3f3e1ef..b69b68e 100644
--- a/src/main/resources/templates/febs/views/modules/vip/vipConfig-add.html
+++ b/src/main/resources/templates/febs/views/modules/vip/vipConfig-add.html
@@ -83,8 +83,8 @@
             <div class="layui-col-lg6" id="targetGoods">
                 <label class="layui-form-label febs-form-item-require">指定商品:</label>
                 <div class="layui-input-block">
-                    <input type="text" name="targetName" placeholder="点击选择商品" autocomplete="off" class="layui-input" >
-                    <input type="text" name="targetId" placeholder="点击选择商品" autocomplete="off" class="layui-input febs-hide" >
+                    <input type="text" id="selectGoods" name="targetName" placeholder="点击选择商品" autocomplete="off" class="layui-input" >
+                    <input type="text" id="selectGoodsId" name="targetId" placeholder="点击选择商品" autocomplete="off" class="layui-input febs-hide" >
                 </div>
             </div>
 
@@ -140,15 +140,6 @@
 
         //(下拉框)
         $.get(ctx + 'admin/vip/benefits/findAllBenefits', function (data) {
-            var arr = data.data;
-            // for (let i = 0; i < arr.length; i++) {
-            //     $(".vip-benefits-list").append("<option value='" + arr[i].id + "'>" + arr[i].name + "</option>");
-            // }
-            // layui.use('form', function () {
-            //     var form = layui.form;
-            //     form.render();
-            // });
-
             benefitsList.update({
                 data : data.data,
                 autoRow: true,
@@ -161,7 +152,7 @@
         form.on('submit(vipConfig-add-form-submit)', function (data) {
             data.field.benefitsIds = benefitsList.getValue('valueStr');
             $.ajax({
-                'url':ctx + 'admin/vip/config/add',
+                'url':ctx + 'admin/vip/config/addOrEdit',
                 'type':'post',
                 'dataType':'json',
                 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
@@ -235,5 +226,22 @@
                 }
             });
         }
+
+        $("#selectGoods").on('click', function() {
+            febs.modal.open('选择商品', 'modules/vip/config/goodsSelect/' + -1, {
+                btn: ['提交', '取消'],
+                yes: function (index, layero) {
+                    $('#febs-select-goods').find('#goods-select-form-submit').trigger('click');
+                    layer.close(index);
+                },
+                btn2: function () {
+                }
+            });
+        })
+
+        window.setConfigGoodsSelect = function(tableIndex, data) {
+            $("#selectGoods").val(data.goodsName);
+            $("#selectGoodsId").val(data.id);
+        }
     });
 </script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/vip/vipConfig-edit.html b/src/main/resources/templates/febs/views/modules/vip/vipConfig-edit.html
new file mode 100644
index 0000000..ee32f49
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/vip/vipConfig-edit.html
@@ -0,0 +1,280 @@
+<style>
+    #vipConfig-edit {
+        padding: 20px 25px 25px 0;
+    }
+
+    #vipConfig-edit .layui-treeSelect .ztree li a, .ztree li span {
+        margin: 0 0 2px 3px !important;
+    }
+    #vipConfig-edit #data-permission-tree-block {
+        border: 1px solid #eee;
+        border-radius: 2px;
+        padding: 3px 0;
+    }
+    #vipConfig-edit .layui-treeSelect .ztree li span.button.switch {
+        top: 1px;
+        left: 3px;
+    }
+    #vipConfig-edit img{
+        max-width:100px
+    }
+
+</style>
+<div class="layui-fluid" id="febs-vipConfig-edit">
+    <form class="layui-form" action="" lay-filter="vipConfig-edit-form">
+        <div class="layui-form-item">
+            <input type="text" name="id" lay-verify="required" autocomplete="off" class="layui-input febs-hide" >
+            <div class="layui-col-lg6">
+                <label class="layui-form-label febs-form-item-require">会员名称:</label>
+                <div class="layui-input-block">
+                    <input type="text" name="name" lay-verify="required" autocomplete="off" class="layui-input" >
+                </div>
+            </div>
+
+            <div class="layui-col-lg6">
+                <label class="layui-form-label febs-form-item-require">会员等级:</label>
+                <div class="layui-input-block">
+                    <input type="number" name="level" lay-verify="required" autocomplete="off" class="layui-input" >
+                </div>
+            </div>
+        </div>
+
+        <div class="layui-form-item">
+            <label class="layui-form-label">主图:</label>
+            <div class="layui-input-block">
+                <button type="button" class="layui-btn" id="imageUpload" style="background-color: #009688; margin-bottom: 2px">图片上传</button>
+                <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+                    <div class=" layui-upload-list view-images" id="thumbImage">
+                    </div>
+                </blockquote>
+                <div class="febs-hide">
+                    <input type="text" id="thumb"  name="thumb" autocomplete="off" class="layui-input" readonly>
+                </div>
+            </div>
+        </div>
+
+        <div class="layui-form-item">
+            <div class="layui-col-lg4">
+                <label class="layui-form-label febs-form-item-require">有效期:</label>
+                <div class="layui-input-block">
+                    <input type="number" name="validTime" lay-verify="required" autocomplete="off" class="layui-input" >
+                </div>
+            </div>
+            <div class="layui-col-lg2">
+                <select name="validType" class="valid-type" lay-filter="valid-type-select">
+                    <option value="day">日</option>
+                    <option value="month">月</option>
+                    <option value="year">年</option>
+                </select>
+            </div>
+        </div>
+
+        <div id="layui-form-item">
+            <div class="layui-col-lg6">
+                <label class="layui-form-label febs-form-item-require">成为会员条件:</label>
+                <div class="layui-input-block">
+                    <select name="type" class="valid-type" lay-filter="type-select">
+                        <option value="1">指定商品</option>
+                        <option value="2">时间区间内消费金额</option>
+                    </select>
+                </div>
+            </div>
+
+            <div class="layui-col-lg6" id="targetGoods">
+                <label class="layui-form-label febs-form-item-require">指定商品:</label>
+                <div class="layui-input-block">
+                    <input type="text" id="selectGoods" name="targetName" placeholder="点击选择商品" autocomplete="off" class="layui-input" >
+                    <input type="text" id="selectGoodsId" name="targetId" placeholder="点击选择商品" autocomplete="off" class="layui-input febs-hide" >
+                </div>
+            </div>
+
+            <div class="layui-col-lg6 febs-hide" id="targetShopping">
+                <div class="layui-input-inline layui-col-lg2">
+                    <input type="text" name="times" autocomplete="off" class="layui-input" >
+                </div>
+                <div class="layui-form-mid">月内,消费</div>
+                <div class="layui-input-inline layui-col-lg2">
+                    <input type="text" name="amount" autocomplete="off" class="layui-input" >
+                </div>
+                <div class="layui-form-mid">金额</div>
+            </div>
+        </div>
+
+        <div class="layui-form-item">
+            <label class="layui-form-label febs-form-item-require">选择会员权益:</label>
+            <div class="layui-input-block">
+<!--                <select name="benefitsIds" class="vip-benefits-list" id="vip-benefits-list">-->
+<!--                </select>-->
+                <div id="vip-benefits-list"></div>
+            </div>
+        </div>
+
+        <div class="layui-form-item febs-hide">
+            <button class="layui-btn" lay-submit="" lay-filter="vipConfig-edit-form-submit" id="submit"></button>
+        </div>
+    </form>
+</div>
+
+<script data-th-inline="javascript">
+    layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','layedit', 'laydate', 'upload', 'xmSelect'], function () {
+        var $ = layui.$,
+            febs = layui.febs,
+            layer = layui.layer,
+            upload = layui.upload,
+            formSelects = layui.formSelects,
+            form = layui.form,
+            laydate = layui.laydate,
+            layedit = layui.layedit,
+            vipConfigData = [[${configData}]]
+            $view = $('#vipConfig-edit'),
+            validate = layui.validate;
+
+        var benefitsList = xmSelect.render({
+            el: '#vip-benefits-list',
+            prop: {
+                name: 'name',
+                value: 'id',
+            },
+            data: []
+        })
+
+
+        //(下拉框)
+        $.get(ctx + 'admin/vip/benefits/findAllBenefits', function (data) {
+            benefitsList.update({
+                data : data.data,
+                autoRow: true,
+            });
+
+            initValue();
+        });
+
+        form.render();
+
+        formSelects.render();
+        form.on('submit(vipConfig-edit-form-submit)', function (data) {
+            data.field.benefitsIds = benefitsList.getValue('valueStr');
+            $.ajax({
+                'url':ctx + 'admin/vip/config/addOrEdit',
+                'type':'post',
+                'dataType':'json',
+                'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+                'traditional': true,//ajax传递数组必须添加属性
+                'data':JSON.stringify(data.field),
+                'success':function (data) {
+                    if(data.code==200){
+                        layer.closeAll();
+                        febs.alert.success(data.message);
+                        $('#febs-vip-level').find('#reset').click();
+                    }else{
+                        febs.alert.warn(data.message);
+                    }
+                },
+                'error':function () {
+                    febs.alert.warn('服务器繁忙');
+                }
+            })
+            return false;
+        });
+
+        form.on('select(type-select)', function(data) {
+            if (data.value == 1) {
+                $("#targetGoods").show();
+                $("#targetShopping").hide();
+            } else {
+                $("#targetGoods").hide();
+                $("#targetShopping").show();
+            }
+        })
+
+        upload.render({
+            elem: '#imageUpload'
+            ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+            ,multiple: false
+            ,before: function(obj){
+                //预读本地文件示例,不支持ie8
+                obj.preview(function(index, file, result){
+                    $('#thumbImage').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img" style="width: 100px">')
+                });
+            }
+            ,done: function(res){
+                $("#thumb").val(res.data.src);
+            }
+        });
+
+
+        bindUpload();
+        function bindUpload() {
+            upload.render({
+                elem: '.upload'
+                ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+                ,accept: 'file'
+                ,before: function(obj){
+                    layer.msg('上传中', {icon: 16, time: 0});
+                }
+                ,done: function(res){
+                    var item = this.item;
+                    //如果上传失败
+                    if(res.code !== 0){
+                        return layer.msg('上传失败');
+                    }
+
+                    // $(item).parent().prev().find('input').val(res.data[0]);
+                    $("#videoUrl").val(res.data.src);
+                    layer.msg('上传完毕', {icon: 1});
+                }
+                ,error: function(err){
+                    return layer.msg('上传失败');
+                }
+            });
+        }
+
+        $("#selectGoods").on('click', function() {
+            febs.modal.open('选择商品', 'modules/vip/config/goodsSelect/' + -1, {
+                btn: ['提交', '取消'],
+                yes: function (index, layero) {
+                    $('#febs-select-goods').find('#goods-select-form-submit').trigger('click');
+                    layer.close(index);
+                },
+                btn2: function () {
+                }
+            });
+        })
+
+        window.setConfigGoodsSelect = function(tableIndex, data) {
+            $("#selectGoods").val(data.goodsName);
+            $("#selectGoodsId").val(data.id);
+        }
+
+        function initValue() {
+            form.val("vipConfig-edit-form", {
+                "id": vipConfigData.id,
+                "name": vipConfigData.name,
+                "level": vipConfigData.level,
+                "type" : vipConfigData.type,
+                "validTime": vipConfigData.validTime,
+                "validType": vipConfigData.validType,
+                "targetName":vipConfigData.targetName,
+                "targetId":vipConfigData.targetId,
+                "times" : vipConfigData.times,
+                "amount" : vipConfigData.amount,
+            });
+
+            $('#thumbImage').html('<img src="'+ vipConfigData.thumb +'" class="layui-upload-img" style="width: 100px">')
+            $("#thumb").val(vipConfigData.thumb);
+
+            if (vipConfigData.type == 1) {
+                $("#targetGoods").show();
+                $("#targetShopping").hide();
+            } else {
+                $("#targetGoods").hide();
+                $("#targetShopping").show();
+            }
+
+            var arr = []
+            arr.push(vipConfigData.benefitsIdList)
+            console.log(vipConfigData.benefitsIdList)
+            benefitsList.setValue(vipConfigData.benefitsIdList);
+        }
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/vip/vipConfig-list.html b/src/main/resources/templates/febs/views/modules/vip/vipConfig-list.html
index 871a4bc..76c8edc 100644
--- a/src/main/resources/templates/febs/views/modules/vip/vipConfig-list.html
+++ b/src/main/resources/templates/febs/views/modules/vip/vipConfig-list.html
@@ -50,6 +50,15 @@
     <span>年</span>
     {{# } }}
 </script>
+
+
+<script type="text/html" id="typeFormat">
+    {{# if(d.validType == "day") { }}
+    <span>指定商品</span>
+    {{# } else { }}
+    <span>周期内消费指定金额</span>
+    {{# } }}
+</script>
 <!-- 表格操作栏 end -->
 <script data-th-inline="none" type="text/javascript">
     // 引入组件并初始化
@@ -76,7 +85,7 @@
             var data = obj.data,
                 layEvent = obj.event;
             if (layEvent === 'benefitsUpdate') {
-                febs.modal.open('编辑', 'modules/vip/config/editBenefits/' + data.id, {
+                febs.modal.open('编辑', 'modules/vip/config/levelEdit/' + data.id, {
                     btn: ['提交', '取消'],
                     yes: function (index, layero) {
                         $('#febs-vipConfig-edit').find('#submit').trigger('click');
@@ -141,7 +150,7 @@
                     {field: 'level', title: '等级', minWidth: 120, align: 'center'},
                     {field: 'validTime', title: '有效时长', minWidth: 120, align: 'center'},
                     {templet:"#validTypeFormat",title: '有效类型', minWidth: 120, align: 'center'},
-                    {field: 'type', title: '成为会员条件', minWidth: 120, align: 'center'},
+                    {templet:"#typeFormat", title: '成为会员条件', minWidth: 120, align: 'center'},
                     {
                         title: '操作',
                         templet: function (d) {

--
Gitblit v1.9.1