fix
Hentua
2024-01-24 ce8219d5f2ca188c209c112a23ebb35a8743a1f1
fix
8 files modified
1 files added
404 ■■■■■ changed files
src/main/java/cc/mrbird/febs/vip/controller/AdminMallVipConfigController.java 17 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/vip/controller/ViewVipConfigController.java 28 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java 20 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/vip/goods-select-list.html 6 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/vip/vipConfig-add.html 32 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/vip/vipConfig-edit.html 280 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/vip/vipConfig-list.html 13 ●●●● patch | view | raw | blame | history
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("操作成功");
    }
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");
    }
}
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;
}
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);
}
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);
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]);
                }
            }
        })
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>
src/main/resources/templates/febs/views/modules/vip/vipConfig-edit.html
New file
@@ -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>
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) {