KKSU
2024-12-19 1689b64fe1352a7c7c1ce2a45b16058bf168dd83
feat(mall): 会员首页展示会员等级数量

- 新增 AdminVipIndexVo 类用于返回会员等级信息
- 修改 LoginController 中的 login 方法,添加会员等级数量查询逻辑
- 更新 index.html,增加会员等级数量展示区域
- 调整 runVipList.html 中的图片显示逻辑
1 files added
5 files modified
98 ■■■■■ changed files
src/main/java/cc/mrbird/febs/mall/vo/AdminVipIndexVo.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/system/controller/LoginController.java 28 ●●●● patch | view | raw | blame | history
src/main/resources/application-dev.yml 2 ●●● patch | view | raw | blame | history
src/main/resources/application.yml 2 ●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/index.html 51 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/runVip/runVipList.html 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/AdminVipIndexVo.java
New file
@@ -0,0 +1,13 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@Data
@ApiModel(value = "AdminVipIndexVo", description = "信息返回类")
public class AdminVipIndexVo {
    private String vipCode;
    private String vipName;
    private Integer memberCnt;
}
src/main/java/cc/mrbird/febs/system/controller/LoginController.java
@@ -3,21 +3,25 @@
import cc.mrbird.febs.common.annotation.Limit;
import cc.mrbird.febs.common.controller.BaseController;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
import cc.mrbird.febs.common.enumerates.OrderPayMethodEnum;
import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.service.ValidateCodeService;
import cc.mrbird.febs.common.utils.Md5Util;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.entity.RunVip;
import cc.mrbird.febs.mall.mapper.MallAchieveRecordMapper;
import cc.mrbird.febs.mall.mapper.MallMemberMapper;
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
import cc.mrbird.febs.mall.mapper.RunVipMapper;
import cc.mrbird.febs.mall.vo.AdminVipIndexVo;
import cc.mrbird.febs.monitor.entity.LoginLog;
import cc.mrbird.febs.monitor.service.ILoginLogService;
import cc.mrbird.febs.system.entity.User;
import cc.mrbird.febs.system.service.IUserService;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor;
import org.apache.shiro.authc.UsernamePasswordToken;
@@ -32,10 +36,7 @@
import javax.servlet.http.HttpSession;
import javax.validation.constraints.NotBlank;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * @author MrBird
@@ -51,6 +52,7 @@
    private final MallMemberMapper mallMemberMapper;
    private final MallOrderInfoMapper mallOrderInfoMapper;
    private final MallAchieveRecordMapper mallAchieveRecordMapper;
    private final RunVipMapper runVipMapper;
    @PostMapping("login")
    @Limit(key = "login", period = 60, count = 10, name = "登录接口", prefix = "limit")
@@ -112,6 +114,22 @@
        //会员数据
        data.put("totalMember",mallMemberMapper.selectCount(new QueryWrapper<>()) );
        List<AdminVipIndexVo> vipIndexVos = new ArrayList<>();
        List<RunVip> runVips = runVipMapper.selectList(null);
        if(CollUtil.isNotEmpty(runVips)){
            for(RunVip runVip : runVips){
                AdminVipIndexVo adminVipIndexVo = new AdminVipIndexVo();
                adminVipIndexVo.setVipCode(runVip.getVipCode());
                adminVipIndexVo.setVipName(runVip.getVipName());
                Integer selectCount = mallMemberMapper.selectCount(new LambdaQueryWrapper<MallMember>().eq(MallMember::getLevel, runVip.getVipCode()));
                adminVipIndexVo.setMemberCnt(selectCount);
                vipIndexVos.add(adminVipIndexVo);
            }
        }
        data.put("vipIndexVos",vipIndexVos);
//        QueryWrapper<MallMember> formalMember = new QueryWrapper<>();
//        formalMember.ne("level", AgentLevelEnum.ZERO_LEVEL.name());
//        data.put("formalMember",mallMemberMapper.selectCount(formalMember));
src/main/resources/application-dev.yml
@@ -2,7 +2,7 @@
  datasource:
    dynamic:
      # 是否开启 SQL日志输出,生产环境建议关闭,有性能损耗
      p6spy: false
      p6spy: true
      hikari:
        connection-timeout: 30000
        max-lifetime: 1800000
src/main/resources/application.yml
@@ -40,4 +40,4 @@
          core:
            metadata:
              TableInfoHelper: error
    cc.mrbird.febs: debug
    cc.mrbird.febs: info
src/main/resources/templates/febs/views/index.html
@@ -135,24 +135,8 @@
                <div class="layui-card-body layui-anim layui-anim-fadein">
                    <div class="layui-row">
                        <div class="m-title">订单付款</div>
                        <div class="layui-row layui-col-space15">
                            <div class="layui-col-md3">
                                <div class="layui-panel">
                                    <div class="box">
                                        <p class="name">微信支付</p>
                                        <p class="num"><span id="wechatPay"></span></p>
                                    </div>
                                </div>
                            </div>
                            <div class="layui-col-md3">
                                <div class="layui-panel">
                                    <div class="box">
                                        <p class="name">余额支付</p>
                                        <p class="num"><span id="balancePay"></span></p>
                                    </div>
                                </div>
                            </div>
                        <div class="m-title">会员</div>
                        <div class="layui-row layui-col-space15" id = "memberLevelCounts">
                        </div>
                    </div>
                </div>
@@ -208,12 +192,27 @@
        </div>
    </div>
</div>
<script type="text/html" id="memberLevelCount">
    {{#  layui.each(d, function(index, item){ }}
    <div class="layui-col-md3">
        <div class="layui-panel">
            <div class="box">
                <p class="name">{{item.vipName}}</p>
                <p class="num">{{item.memberCnt}}</p>
            </div>
        </div>
    </div>
    {{# }) }}
</script>
<script data-th-inline="javascript" type="text/javascript">
    layui.use(['apexcharts', 'febs', 'jquery', 'util'], function () {
    layui.use(['apexcharts', 'febs', 'jquery', 'util', 'laytpl'], function () {
        var $ = layui.jquery,
            util = layui.util,
            $view = $('#febs-index'),
            febs = layui.febs;
            memberLevelCountHtml = memberLevelCount.innerHTML,
            $memberLevelCounts = $("#memberLevelCounts"),
                laytpl = layui.laytpl,
                    febs = layui.febs;
        febs.get(ctx + 'index/' + currentUser.username, null, function (r) {
            handleSuccess(r.data);
@@ -235,22 +234,20 @@
            ];
            var index = Math.floor((Math.random() * welcomeArr.length));
            var welcomeMessage = time + ',<a id="febs-index-user">' + currentUser.username + '</a>,' + welcomeArr[index];
            laytpl(memberLevelCountHtml).render(data.vipIndexVos, function(html) {
                $memberLevelCounts.append(html);
            })
            $view.find('#today').text(data.today).end()
                .find('#lastDay').text(data.lastDay).end()
                .find('#thisMonth').text(data.thisMonth).end()
                .find('#lastMonth').text(data.lastMonth).end()
                //会员信息
                .find('#totalMember').text(data.totalMember).end()
                // .find('#formalMember').text(data.formalMember).end()
                // .find('#informalMember').text(data.informalMember).end()
                .find('#todayMember').text(data.todayMember).end()
                .find('#thisMonthMember').text(data.thisMonthMember).end()
                .find('#lastMonthMember').text(data.lastMonthMember).end()
                .find('#wechatPay').text(data.wechatPay).end()
                // .find('#alipayPay').text(data.alipayPay).end()
                // .find('#scorePay').text(data.scorePay).end()
                .find('#balancePay').text(data.balancePay).end()
                .find('#user-dept').text(currentUser.deptName ? currentUser.deptName : '暂无所属部门').end()
                .find('#user-role').text(currentUser.roleName ? currentUser.roleName : '暂无角色').end()
src/main/resources/templates/febs/views/modules/runVip/runVipList.html
@@ -128,7 +128,7 @@
                    {
                        field: 'vipPng', title: '主图',
                        templet: function (d) {
                            return '<a lay-event="seeImgThumb"><img id="seeImgThumb'+d.id+'" src="'+d.thumb+'" alt=""></a>';
                            return '<a lay-event="seeImgThumb"><img id="seeImgThumb'+d.id+'" src="'+d.vipPng+'" alt=""></a>';
                        }, minWidth: 150, align: 'center'
                    },
                    {field: 'originalPrice', title: '原价', minWidth: 120, align: 'center'},