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