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