From 2812309093cc6fd31a75d10f62bc52abb7588f56 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Mon, 06 Jan 2025 17:16:57 +0800 Subject: [PATCH] feat(mall): 后台活动列表添加分页和搜索功能 - 在 ActivityServiceImpl 中实现 getAdminListInPage 方法,支持分页和搜索 - 在 AdminActivityController 中添加 list 接口,返回分页数据 - 在 IActivityService 中定义 getAdminListInPage 接口 - 更新前端模板,根据活动状态控制按钮显示 --- src/main/java/cc/mrbird/febs/mall/controller/ViewActivityController.java | 29 +++ src/main/java/cc/mrbird/febs/mall/entity/MallActivity.java | 8 src/main/java/cc/mrbird/febs/mall/service/impl/ActivityServiceImpl.java | 10 + src/main/resources/templates/febs/views/modules/activity/discountUpdate.html | 152 +++++++++++++++++++ src/main/resources/templates/febs/views/modules/activity/list.html | 2 src/main/resources/templates/febs/views/modules/activity/add.html | 210 ++++++++++++++++++++++++++ src/main/java/cc/mrbird/febs/mall/controller/AdminActivityController.java | 15 + src/main/java/cc/mrbird/febs/mall/service/IActivityService.java | 2 8 files changed, 420 insertions(+), 8 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminActivityController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminActivityController.java index e6adbd2..9db62f5 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/AdminActivityController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminActivityController.java @@ -1,5 +1,6 @@ package cc.mrbird.febs.mall.controller; +import cc.mrbird.febs.common.annotation.ControllerEndpoint; import cc.mrbird.febs.common.controller.BaseController; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; @@ -8,10 +9,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; import java.util.Map; @Slf4j @@ -29,4 +29,13 @@ Map<String, Object> data = getDataTable(iActivityService.getAdminListInPage(mallActivity, request)); return new FebsResponse().success().data(data); } + + /** + * 活动-新增 + */ + @PostMapping("add") + @ControllerEndpoint(operation = "新增", exceptionMessage = "新增失败") + public FebsResponse addActivity(@RequestBody @Valid MallActivity mallActivity) { + return iActivityService.addActivity(mallActivity); + } } diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewActivityController.java b/src/main/java/cc/mrbird/febs/mall/controller/ViewActivityController.java index 0a3f20c..cc7f772 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ViewActivityController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewActivityController.java @@ -3,11 +3,14 @@ import cc.mrbird.febs.common.controller.BaseController; import cc.mrbird.febs.common.entity.FebsConstant; import cc.mrbird.febs.common.utils.FebsUtil; +import cc.mrbird.febs.mall.entity.MallActivity; import cc.mrbird.febs.mall.service.IActivityService; import lombok.RequiredArgsConstructor; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @Controller("activityView") @@ -26,4 +29,30 @@ public String activityList() { return FebsUtil.view("modules/activity/list"); } + + /** + * 新增 + */ + @GetMapping("activityAdd") + @RequiresPermissions("activityAdd:add") + public String activityAdd() { + return FebsUtil.view("modules/activity/add"); + } + + /** + * 修改 + */ + @GetMapping("activityUpdate/{id}") + @RequiresPermissions("activityUpdate:update") + public String activityUpdate(@PathVariable long id, Model model) { + MallActivity mallActivity = iActivityService.getBaseMapper().selectById(id); + model.addAttribute("activity", mallActivity); + if(mallActivity.getType() == 1){//折扣页面 + return FebsUtil.view("modules/activity/discountUpdate"); + }else if(mallActivity.getType() == 2){//优惠卷页面 + return FebsUtil.view("modules/activity/couponUpdate"); + }else{ + return FebsUtil.view("error/404"); + } + } } diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallActivity.java b/src/main/java/cc/mrbird/febs/mall/entity/MallActivity.java index 3c4df30..61db229 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallActivity.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallActivity.java @@ -14,16 +14,16 @@ private String name; //活动编码 private String code; - //活动大图 - private String maxImage; - //活动小图 - private String minImage; //开始时间 @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date startTime; //结束时间 @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date endTime; + //活动大图 + private String maxImage; + //活动小图 + private String minImage; //活动状态 1-开启 0-关闭 private Integer state; //活动说明 diff --git a/src/main/java/cc/mrbird/febs/mall/service/IActivityService.java b/src/main/java/cc/mrbird/febs/mall/service/IActivityService.java index 64cc497..3c4eb88 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IActivityService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IActivityService.java @@ -1,5 +1,6 @@ package cc.mrbird.febs.mall.service; +import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; import cc.mrbird.febs.mall.entity.MallActivity; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -9,4 +10,5 @@ IPage<MallActivity> getAdminListInPage(MallActivity mallActivity, QueryRequest request); + FebsResponse addActivity(MallActivity mallActivity); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ActivityServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ActivityServiceImpl.java index 5e5db7e..8f32a07 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ActivityServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ActivityServiceImpl.java @@ -1,6 +1,8 @@ package cc.mrbird.febs.mall.service.impl; +import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; +import cc.mrbird.febs.common.utils.MallUtils; import cc.mrbird.febs.mall.entity.MallActivity; import cc.mrbird.febs.mall.mapper.MallActivityMapper; import cc.mrbird.febs.mall.service.IActivityService; @@ -35,4 +37,12 @@ Page<MallActivity> mallActivityPage = this.baseMapper.selectPage(page, mallActivityLambdaQueryWrapper); return mallActivityPage; } + + @Override + public FebsResponse addActivity(MallActivity mallActivity) { + String hd = MallUtils.getOrderNum("HD"); + mallActivity.setCode(hd); + this.baseMapper.insert(mallActivity); + return null; + } } diff --git a/src/main/resources/templates/febs/views/modules/activity/add.html b/src/main/resources/templates/febs/views/modules/activity/add.html new file mode 100644 index 0000000..99ecea9 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/activity/add.html @@ -0,0 +1,210 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-activity-add" lay-title="新增"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-fluid" id="activity-add"> + <form class="layui-form" action="" lay-filter="activity-add-form"> + <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> + <ul class="layui-tab-title"> + <li class="layui-this">基础信息</li> + </ul> + <div class="layui-tab-content"> + <div class="layui-tab-item layui-show"> + + <div class="layui-row layui-col-space10 layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">名称:</label> + <div class="layui-input-block"> + <input type="text" name="actName" lay-verify="required" + placeholder="" autocomplete="off" class="layui-input"> + </div> + </div> + </div> + + <div class="layui-row layui-col-space10 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="award-type" lay-filter="award-type-select"> + <option value="1">折扣</option> + <option value="2">优惠卷</option> + </select> + </div> + </div> + </div> + + <div class="layui-form-item"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">开始时间:</label> + <div class="layui-input-block"> + <input type="text" name="actStartTime" id="febs-form-group-date-start" lay-verify="date" + placeholder="yyyy-MM-dd" 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="text" name="actEndTime" id="febs-form-group-date-end" lay-verify="date" + placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input"> + </div> + </div> + </div> + + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">大图:</label> + <div class="layui-input-block"> + <div class="layui-upload"> + <button type="button" class="layui-btn layui-btn-normal layui-btn" id="testMax">上传</button> + <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;"> + <div class="layui-upload-list"> + <img class="layui-upload-img" id="demoMax" style="width: 100px" > + </div> + </blockquote> + </div> + </div> + </div> + + <div class="layui-form-item febs-hide"> + <label class="layui-form-label">大图链接:</label> + <div class="layui-input-block"> + <input type="text" id="maxImage" lay-verify="required" name="maxImage" autocomplete="off" class="layui-input" readonly> + </div> + </div> + + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">小图:</label> + <div class="layui-input-block"> + <div class="layui-upload"> + <button type="button" class="layui-btn layui-btn-normal layui-btn" id="testMin">上传</button> + <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;"> + <div class="layui-upload-list"> + <img class="layui-upload-img" id="demoMin" style="width: 100px" > + </div> + </blockquote> + </div> + </div> + </div> + + <div class="layui-form-item febs-hide"> + <label class="layui-form-label">小图链接:</label> + <div class="layui-input-block"> + <input type="text" id="minImage" lay-verify="required" name="minImage" autocomplete="off" class="layui-input" readonly> + </div> + </div> + + <div class="layui-form-item"> + <label class="layui-form-label">活动说明:</label> + <div class="layui-input-block"> + <label> + <textarea name="actRemark" rows="5" autocomplete="off" class="layui-textarea" ></textarea> + </label> + </div> + </div> + + </div> + </div> + </div> + + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="activity-add-form-submit" id="submit">保存</button> + </div> + </form> + </div> + </div> + </div> +</div> +<style> + .blue-border { + border-left-color: #2db7f5; + font-size: 18px; + } + .layui-table-cell { + height:auto; + } +</style> +<script type="text/html" id="toolbar"> + <div class="layui-btn-container"> + <button class="layui-btn layui-btn-danger layui-btn-sm" type="button" lay-event="delAct">删除</button> + </div> +</script> +<script type="text/html" id="awardtableImgUpload"> + <div class="layui-upload"> + <button type="button" class="layui-btn layui-btn-normal layui-btn-xs sku-img" id="awardImg{{d.index}}">上传</button></br> + <img class="layui-upload-img" id="awardImageUrls{{d.index}}" style="width: 100px; display:none;" src="{{d.awardImage}}" > + <input type="text" id="awardImage{{d.index}}" name="awardImage{{d.index}}" autocomplete="off" value="{{d.awardImage}}" class="layui-input febs-hide"> + </div> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="javascript"> + layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect'], function () { + var $ = layui.jquery, + febs = layui.febs, + layer = layui.layer, + table = layui.table, + formSelects = layui.formSelects, + treeSelect = layui.treeSelect, + form = layui.form, + laydate = layui.laydate, + eleTree = layui.eleTree, + $view = $('#activity-add'), + layedit = layui.layedit, + upload = layui.upload, + validate = layui.validate, + element = layui.element; + + form.render(); + + laydate.render({ + elem: '#febs-form-group-date-start' + }); + + laydate.render({ + elem: '#febs-form-group-date-end' + }); + + formSelects.render(); + + //图片上传 + upload.render({ + elem: '#testMax' + ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口 + ,done: function(res){ + $('#demoMax').attr('src', res.data.src); + $("#maxImage").val(res.data.src); + } + }); + + //图片上传 + upload.render({ + elem: '#testMin' + ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口 + ,done: function(res){ + $('#demoMin').attr('src', res.data.src); + $("#minImage").val(res.data.src); + } + }); + + form.on('submit(activity-add-form-submit)', function (data) { + $.ajax({ + 'url':ctx + 'admin/activity/add', + '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-activity').find('#reset').click(); + }else{ + febs.alert.warn(data.message); + } + }, + 'error':function () { + febs.alert.warn('服务器繁忙'); + } + }) + return false; + }); + }); +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/activity/discountUpdate.html b/src/main/resources/templates/febs/views/modules/activity/discountUpdate.html new file mode 100644 index 0000000..50ff7aa --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/activity/discountUpdate.html @@ -0,0 +1,152 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-activity-discount" lay-title="折扣活动"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-fluid" id="activity-discount-update"> + <form class="layui-form" action="" lay-filter="activity-discount-update-form"> + <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> + <ul class="layui-tab-title"> + <li class="layui-this">折扣活动</li> + </ul> + <div class="layui-tab-content"> + <div class="layui-tab-item layui-show"> + + <input type="text" name="id" placeholder="" autoComplete="off" class="layui-input febs-hide"> + + <blockquote class="layui-elem-quote blue-border">折扣</blockquote> + + <blockquote class="layui-elem-quote blue-border">参与商品</blockquote> + <div class="layui-form-item coupon-rule"> + <div class="layui-col-lg6"> + <label class="layui-form-label febs-form-item-require">商品:</label> + <div class="layui-input-block"> + <div id="coupon-rule"></div> + </div> + </div> + </div> + + </div> + </div> + </div> + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="activity-discount-update-form-submit" id="submit">保存</button> + </div> + </form> + </div> + </div> + </div> +</div> +<style> + .blue-border { + border-left-color: #2db7f5; + font-size: 18px; + } +</style> +<script type="text/html" id="toolbar"> + <div class="layui-btn-container"> + <button class="layui-btn layui-btn-danger layui-btn-sm" type="button" lay-event="delSku">删除</button> + </div> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="javascript"> + layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect'], function () { + var $ = layui.jquery, + febs = layui.febs, + layer = layui.layer, + table = layui.table, + formSelects = layui.formSelects, + treeSelect = layui.treeSelect, + form = layui.form, + laydate = layui.laydate, + eleTree = layui.eleTree, + $view = $('#activity-discount-update'), + layedit = layui.layedit, + couponRule = [[${couponRule}]], + upload = layui.upload, + validate = layui.validate, + element = layui.element; + + form.render(); + + var couponRuleGoodsIds = xmSelect.render({ + el: '#coupon-rule', + language: 'zn', + prop : { + value : 'id', + children : 'child' + }, + iconfont: { + parent: 'hidden', + }, + toolbar: { + show: true, + }, + // radio: true, + clickClose: true, + tree: { + show: true, + //非严格模式 + strict: false, + }, + data: [] + }) + + febs.get(ctx + 'admin/goods/goodsTreeSet', null, function(res) { + couponRuleGoodsIds.update({ + data : res.data, + autoRow: true, + }); + initValue(); + }) + + + function initValue() { + form.val("activity-discount-update-form", { + "id": couponRule.id, + "name": couponRule.name, + "type": couponRule.type, + "expireDay": couponRule.expireDay, + "costAmount": couponRule.costAmount, + "realAmount": couponRule.realAmount + }); + couponRuleGoodsIds.setValue(couponRule.goodsIds); + } + + form.on('submit(activity-discount-update-form-submit)', function (data) { + let type = data.field.type; + let costAmount = data.field.costAmount; + if(type == 2 && costAmount <= 0){ + febs.alert.warn("累计满减卷,满足金额不能为0"); + return false; + } + let couponRuleList = couponRuleGoodsIds.getValue(); + if (couponRuleList.length > 0) { + var couponIds = []; + layui.each(couponRuleList, function (key, item) { + couponIds.push(item.id) + }); + data.field.goodsIds=couponIds; + } + $.ajax({ + 'url':ctx + 'admin/goods/couponUpdate', + '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-coupon-rule').find('#reset').click(); + }else{ + febs.alert.warn(data.message); + } + }, + 'error':function () { + febs.alert.warn('服务器繁忙'); + } + }) + return false; + }); + }); +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/activity/list.html b/src/main/resources/templates/febs/views/modules/activity/list.html index 5cff36a..761988c 100644 --- a/src/main/resources/templates/febs/views/modules/activity/list.html +++ b/src/main/resources/templates/febs/views/modules/activity/list.html @@ -173,7 +173,7 @@ }); $add.on('click', function () { - febs.modal.open('新增活动', 'modules/act/actAddNew/', { + febs.modal.open('新增活动', 'modules/activity/add/', { btn: ['提交', '取消'], area:['100%','100%'], yes: function (index, layero) { -- Gitblit v1.9.1