From dd7e72d1bfe3dddac21a31c71f62096906c2bf46 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Mon, 04 Dec 2023 10:55:02 +0800 Subject: [PATCH] 用户留言 --- src/main/java/cc/mrbird/febs/mall/entity/MallMemberSpeak.java | 6 + src/main/java/cc/mrbird/febs/mall/service/impl/MallNewsInfoServiceImpl.java | 8 + src/main/resources/mapper/modules/MallProductSellMapper.xml | 17 +++ src/main/resources/templates/febs/views/modules/news/productMemberSpeak.html | 179 +++++++++++++++++++++++++++++++++++ src/main/java/cc/mrbird/febs/mall/mapper/MallProductSellMapper.java | 4 src/main/java/cc/mrbird/febs/mall/controller/AdminNewsInfoController.java | 24 ++++ src/main/java/cc/mrbird/febs/mall/controller/ViewNewsController.java | 9 + src/main/java/cc/mrbird/febs/mall/service/IMallNewsInfoService.java | 2 8 files changed, 249 insertions(+), 0 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminNewsInfoController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminNewsInfoController.java index 0cab0c6..c1eee71 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/AdminNewsInfoController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminNewsInfoController.java @@ -8,6 +8,7 @@ import cc.mrbird.febs.common.enumerates.ProductEnum; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.*; +import cc.mrbird.febs.mall.mapper.MallMemberSpeakMapper; import cc.mrbird.febs.mall.mapper.MallProductNftMapper; import cc.mrbird.febs.mall.service.ICommonService; import cc.mrbird.febs.mall.service.IMallNewsInfoService; @@ -37,9 +38,32 @@ private final IMallNewsInfoService mallNewsInfoService; private final MallProductNftMapper mallProductNftMapper; + private final MallMemberSpeakMapper mallMemberSpeakMapper; private final ICommonService commonService; /** + * 用户留言 + */ + @GetMapping("getSpeakList") + public FebsResponse getSpeakList(MallMemberSpeak mallMemberSpeak, QueryRequest request) { + Map<String, Object> data = getDataTable(mallNewsInfoService.getSpeakList(mallMemberSpeak, request)); + return new FebsResponse().success().data(data); + } + + /** + * 用户留言 + * @param id + * @return + */ + @PostMapping(value = "/speakState/{id}") + public FebsResponse speakState(@PathVariable Long id) { + MallMemberSpeak mallMemberSpeak = mallMemberSpeakMapper.selectById(id); + mallMemberSpeak.setState(ProductEnum.SPEAK_DEAL.getValue()); + mallMemberSpeakMapper.updateById(mallMemberSpeak); + return new FebsResponse().success(); + } + + /** * NFT预约产品 */ @GetMapping("getProductNFTList") diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewNewsController.java b/src/main/java/cc/mrbird/febs/mall/controller/ViewNewsController.java index 4669428..4e2bcc9 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ViewNewsController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewNewsController.java @@ -36,6 +36,15 @@ private final DataDictionaryCustomMapper dataDictionaryCustomMapper; /** + * 用户留言 + */ + @GetMapping("productMemberSpeak") + @RequiresPermissions("productMemberSpeak:view") + public String productMemberSpeak() { + return FebsUtil.view("modules/news/productMemberSpeak"); + } + + /** * NFT预约产品 */ @GetMapping("productNFTList") diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMemberSpeak.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberSpeak.java index 8587fb5..f9fd383 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallMemberSpeak.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberSpeak.java @@ -1,8 +1,11 @@ package cc.mrbird.febs.mall.entity; import cc.mrbird.febs.common.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; + +import java.math.BigDecimal; @Data @TableName("mall_member_speak") @@ -13,4 +16,7 @@ private Integer state;//状态 1:已处理 0:未处理 private String description; + + @TableField(exist = false) + private String accountLogin; } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallProductSellMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductSellMapper.java index 89f3f32..e90cd79 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallProductSellMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductSellMapper.java @@ -1,11 +1,13 @@ package cc.mrbird.febs.mall.mapper; import cc.mrbird.febs.mall.dto.ApiOrderListDto; +import cc.mrbird.febs.mall.entity.MallMemberSpeak; import cc.mrbird.febs.mall.entity.MallProductSell; import cc.mrbird.febs.mall.vo.ApiOrderListVo; import cc.mrbird.febs.mall.vo.ApiOrderSellInfoVo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; public interface MallProductSellMapper extends BaseMapper<MallProductSell> { @@ -13,4 +15,6 @@ IPage<ApiOrderListVo> selectListInPage(IPage<ApiOrderListVo> page, @Param("record")ApiOrderListDto apiOrderListDto); ApiOrderSellInfoVo selectSellInfoById(@Param("id")Long productSellId); + + IPage<MallMemberSpeak> getSpeakListInPage(Page<MallMemberSpeak> page, @Param("record")MallMemberSpeak mallMemberSpeak); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IMallNewsInfoService.java b/src/main/java/cc/mrbird/febs/mall/service/IMallNewsInfoService.java index 236939b..24a0ded 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IMallNewsInfoService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IMallNewsInfoService.java @@ -58,4 +58,6 @@ FebsResponse buyRecordConfirm(Long id); FebsResponse buyRecordCancel(Long id); + + IPage<MallMemberSpeak> getSpeakList(MallMemberSpeak mallMemberSpeak, QueryRequest request); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MallNewsInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MallNewsInfoServiceImpl.java index b4e3807..f202122 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/MallNewsInfoServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MallNewsInfoServiceImpl.java @@ -53,6 +53,7 @@ private final MallProductBuyRecordMapper mallProductBuyRecordMapper; private final IMallMoneyFlowService mallMoneyFlowService; private final AgentProducer agentProducer; + private final MallMemberSpeakMapper mallMemberSpeakMapper; @Override public IPage<AdminMallNewsInfoVo> getNewInfoList(MallNewsInfo mallNewsInfo, QueryRequest request) { @@ -417,4 +418,11 @@ mallProductSellMapper.updateById(mallProductSell); return new FebsResponse().success(); } + + @Override + public IPage<MallMemberSpeak> getSpeakList(MallMemberSpeak mallMemberSpeak, QueryRequest request) { + Page<MallMemberSpeak> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<MallMemberSpeak> adminMallNewsInfoVoIPage = mallProductSellMapper.getSpeakListInPage(page, mallMemberSpeak); + return adminMallNewsInfoVoIPage; + } } diff --git a/src/main/resources/mapper/modules/MallProductSellMapper.xml b/src/main/resources/mapper/modules/MallProductSellMapper.xml index 51ebf42..a574e65 100644 --- a/src/main/resources/mapper/modules/MallProductSellMapper.xml +++ b/src/main/resources/mapper/modules/MallProductSellMapper.xml @@ -16,4 +16,21 @@ where a.id = #{id} </select> + <select id="getSpeakListInPage" resultType="cc.mrbird.febs.mall.entity.MallMemberSpeak"> + select a.*,b.account_login accountLogin + from mall_member_speak a + left join mall_member b on a.member_id = b.id + <where> + <if test="record != null" > + <if test="record.accountLogin!=null and record.accountLogin!=''"> + and b.account_login like concat('%', #{record.accountLogin},'%') + </if> + <if test="record.state != null"> + and a.state = #{record.state} + </if> + </if> + </where> + order by a.CREATED_TIME desc + </select> + </mapper> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/news/productMemberSpeak.html b/src/main/resources/templates/febs/views/modules/news/productMemberSpeak.html new file mode 100644 index 0000000..47973bc --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/news/productMemberSpeak.html @@ -0,0 +1,179 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-speak" lay-title="用户留言"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <form class="layui-form layui-table-form" lay-filter="speak-table-form"> + <div class="layui-row"> + <div class="layui-col-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <label class="layui-form-label">登录账户:</label> + <div class="layui-input-inline"> + <input type="text" placeholder="登录账户" name="accountLogin" autocomplete="off" class="layui-input"> + </div> + + <label class="layui-form-label">处理状态:</label> + <div class="layui-input-inline"> + <select name="state"> + <option value="">请选择</option> + <option value="0">未处理</option> + <option value="1">已处理</option> + </select> + </div> + </div> + </div> + </div> + <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> +<!-- <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="add">--> +<!-- 新增--> +<!-- </div>--> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="speakInfoTable" lay-data="{id: 'speakInfoTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<style> + .layui-table-cell { + height: auto; + } + .layui-form-onswitch { + background-color: #5FB878 !important; + } +</style> +<script type="text/html" id="isState"> + {{# if(d.state === 1) { }} + <input type="checkbox" value={{d.id}} lay-text="已处理|未处理" checked lay-skin="switch" lay-filter="isState"> + {{# } else { }} + <input type="checkbox" value={{d.id}} lay-text="已处理|未处理" lay-skin="switch" lay-filter="isState"> + {{# } }} +</script> +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="user:view,user:update,user:delete"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="edit" shiro:hasPermission="user:update"><i + class="layui-icon febs-edit-area febs-blue"></i></a> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use([ 'jquery', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + febs = layui.febs, + form = layui.form, + table = layui.table, + $view = $('#febs-speak'), + $query = $view.find('#query'), + $add = $view.find('#add'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'phone', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initSpeakTable(); + + // 初始化表格操作栏各个按钮功能 + table.on('tool(speakInfoTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + if (layEvent === 'productNFTUpdate') { + febs.modal.open('编辑', 'modules/news/productNFTUpdate/' + data.id, { + btn: ['提交', '取消'], + yes: function (index, layero) { + $('#nftInfo-update').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } + if (layEvent === 'delNFT') { + febs.modal.confirm('删除', '确认删除?', function () { + delNFT(data.id); + }); + } + }); + + function delNFT(id) { + febs.get(ctx + 'admin/news/delNFT/' + id, null, function () { + febs.alert.success('操作成功'); + $query.click(); + }); + } + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + + $add.on('click', function () { + febs.modal.open('新增', 'modules/news/productNFTAdd/', { + btn: ['提交', '取消'], + yes: function (index, layero) { + $('#productNFT-add').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + }); + + function initSpeakTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'speakInfoTable', + url: ctx + 'admin/news/getSpeakList', + cols: [[ + {field: 'id', title: 'ID', minWidth: 120,align:'center'}, + {field: 'accountLogin', title: '登录账户', minWidth: 120,align:'center'}, + {field: 'description', title: '留言内容', minWidth: 120,align:'center'}, + {field: 'createdTime', title: '创建时间', minWidth: 120,align:'center'}, + {templet: '#isState', title: '处理状态', minWidth: 120,align:'center'}, + ]] + }); + } + + // 获取查询参数 + function getQueryParams() { + return { + accountLogin: $searchForm.find('input[name="accountLogin"]').val().trim(), + state: $searchForm.find("select[name='state']").val(), + }; + } + + form.on('switch(isState)', function (data) { + if (data.elem.checked) { + febs.post(ctx + 'admin/news/speakState/' + data.value, null, function () { + febs.alert.success('操作成功'); + $query.click(); + }); + } else { + febs.alert.success('留言已经处理完毕。'); + $query.click(); + } + }) + }) +</script> \ No newline at end of file -- Gitblit v1.9.1