From 0f326acd413279d2c3fccb27ee1a5723e1387bcf Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Tue, 07 Jul 2020 15:34:35 +0800 Subject: [PATCH] 20200707 代码提交 --- src/main/resources/mapper/modules/MemberQuickBuySaleMapper.xml | 13 src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java | 4 src/main/resources/templates/index.html | 2 src/main/resources/mapper/modules/AgentFriendRelationMapper.xml | 25 src/main/resources/mapper/modules/MemberCoinChargeMapper.xml | 4 src/main/resources/templates/error/404.html | 82 +- src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java | 11 src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinWithdrawMapper.java | 2 src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml | 4 src/main/resources/templates/febs/views/modules/member/agentInfo.html | 109 +++ src/main/java/com/xcong/excoin/modules/member/mapper/MemberQuickBuySaleMapper.java | 4 src/main/resources/mapper/modules/MemberMapper.xml | 4 src/main/resources/templates/error/403.html | 78 +- src/main/resources/templates/febs/views/index.html | 708 +++++++++-------------- src/main/java/com/xcong/excoin/modules/member/controller/ViewController.java | 10 src/main/java/com/xcong/excoin/modules/member/entity/AgentFriendRelationEntity.java | 91 +++ src/main/java/com/xcong/excoin/modules/member/service/IMemberService.java | 3 src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java | 70 ++ src/main/java/com/xcong/excoin/modules/member/mapper/AgentFriendRelationMapper.java | 19 src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinChargeMapper.java | 2 src/main/resources/templates/error/500.html | 82 +- src/main/resources/templates/febs/views/layout.html | 354 ++++++------ src/main/resources/templates/febs/views/login.html | 2 23 files changed, 955 insertions(+), 728 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java b/src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java index 71bcd61..c1a018b 100644 --- a/src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java +++ b/src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java @@ -6,6 +6,7 @@ import com.xcong.excoin.common.entity.QueryRequest; import com.xcong.excoin.modules.member.dto.MemberDataInfoDto; import com.xcong.excoin.modules.member.dto.MemberDetailConfirmDto; +import com.xcong.excoin.modules.member.entity.AgentFriendRelationEntity; import com.xcong.excoin.modules.member.entity.MemberCoinChargeEntity; import com.xcong.excoin.modules.member.entity.MemberCoinWithdrawEntity; import com.xcong.excoin.modules.member.entity.MemberEntity; @@ -38,6 +39,16 @@ public class MemberController extends BaseController { private final IMemberService memberService; + + /** + * 代理关系---列表 + * @return + */ + @GetMapping("agentInfoList") + public FebsResponse agentInfoList(AgentFriendRelationEntity agentFriendRelationEntity, QueryRequest request) { + Map<String, Object> data = getDataTable(memberService.findAgentInfoListInPage(agentFriendRelationEntity, request)); + return new FebsResponse().success().data(data); + } @GetMapping("getList") public FebsResponse getList(MemberEntity member, QueryRequest request) { diff --git a/src/main/java/com/xcong/excoin/modules/member/controller/ViewController.java b/src/main/java/com/xcong/excoin/modules/member/controller/ViewController.java index 9c84436..a88a9c9 100644 --- a/src/main/java/com/xcong/excoin/modules/member/controller/ViewController.java +++ b/src/main/java/com/xcong/excoin/modules/member/controller/ViewController.java @@ -28,6 +28,16 @@ private final IMemberService memberService; /** + * 代理关系 + * @return + */ + @GetMapping("agentInfo") + @RequiresPermissions("agentInfo:view") + public String agentInfo() { + return FebsUtil.view("modules/member/agentInfo"); + } + + /** * 个人信息 * @return */ diff --git a/src/main/java/com/xcong/excoin/modules/member/entity/AgentFriendRelationEntity.java b/src/main/java/com/xcong/excoin/modules/member/entity/AgentFriendRelationEntity.java new file mode 100644 index 0000000..1c65244 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/entity/AgentFriendRelationEntity.java @@ -0,0 +1,91 @@ +package com.xcong.excoin.modules.member.entity; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.entity.BaseEntity; + +import lombok.Data; + +@Data +@TableName("agent_friend_relation") +public class AgentFriendRelationEntity extends BaseEntity {/** + * + */ + private static final long serialVersionUID = 1L; + + /** + * 后台用户ID + */ + private Long userId; + /** + * 会员ID + */ + private Long memberId; + /** + * 会员邀请码 + */ + private String inviteId; + /** + * 上级会员ID + */ + private Long refererMemberId; + /** + * 上级邀请码 + */ + private String refererId; + /** + * 上级链 + */ + private String refererIds; + /** + * 返佣比例 + */ + private BigDecimal returnRatio; + /** + * 代理等级 + */ + private int levelId; + /** + * 手续费是否设置自己 1是2否 + */ + private int feeIsSelf; + + /** + * 查询条件:第一查询条件 + */ + @TableField(exist = false) + private String account; + /** + * 手机号(包含国际手机号) + */ + @TableField(exist = false) + private String phone; + /** + * 邮箱 + */ + @TableField(exist = false) + private String email; + /** + * 推广人数 + */ + @TableField(exist = false) + private int promotionNumber; + /** + * 总充值 + */ + @TableField(exist = false) + private String totalRecharge; + /** + * 总提现 + */ + @TableField(exist = false) + private String totalWithdrawal; + /** + * 总业绩 + */ + @TableField(exist = false) + private String totalPerformance; + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/mapper/AgentFriendRelationMapper.java b/src/main/java/com/xcong/excoin/modules/member/mapper/AgentFriendRelationMapper.java new file mode 100644 index 0000000..22bd6dc --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/member/mapper/AgentFriendRelationMapper.java @@ -0,0 +1,19 @@ +package com.xcong.excoin.modules.member.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.excoin.modules.member.entity.AgentFriendRelationEntity; + +public interface AgentFriendRelationMapper extends BaseMapper<AgentFriendRelationEntity> { + + IPage<AgentFriendRelationEntity> findAgentFriendRelationListInPage(Page<AgentFriendRelationEntity> page, + @Param("record")AgentFriendRelationEntity agentFriendRelationEntity); + + List<AgentFriendRelationEntity> selectAgentFriendRelationByMap(@Param("inviteId")String inviteId); + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinChargeMapper.java b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinChargeMapper.java index 5595658..306e078 100644 --- a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinChargeMapper.java +++ b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinChargeMapper.java @@ -13,4 +13,6 @@ IPage<MemberCoinChargeVo> findMemberApplyCoinListInPage(Page<MemberCoinChargeEntity> page, @Param("record")MemberCoinChargeEntity memberCoinChargeEntity); + String selectCBByMemberId(String memberId); + } diff --git a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinWithdrawMapper.java b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinWithdrawMapper.java index f9e4afc..798e8b6 100644 --- a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinWithdrawMapper.java +++ b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberCoinWithdrawMapper.java @@ -13,4 +13,6 @@ IPage<MemberCoinWithdrawVo> findmemberWithdrawCoinListInPage(Page<MemberCoinWithdrawEntity> page, @Param("record")MemberCoinWithdrawEntity memberCoinWithdrawEntity); + String selectTBByMemberId(@Param("memberId")String memberId); + } diff --git a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java index 30f4b47..891d980 100644 --- a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java +++ b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java @@ -7,6 +7,8 @@ import com.xcong.excoin.modules.member.vo.MemberDataInfoVo; import com.xcong.excoin.modules.trademanage.vo.MemberAccountInfoVo; +import java.util.List; + import org.apache.ibatis.annotations.Param; /** @@ -58,5 +60,7 @@ String selectHYZCForBasicRealData(); String selectDLZCForBasicRealData(); + + List<String> selectMemberBylowLevelInviteId(String lowLevelInviteId); } diff --git a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberQuickBuySaleMapper.java b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberQuickBuySaleMapper.java index 7e13f2b..f5219c5 100644 --- a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberQuickBuySaleMapper.java +++ b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberQuickBuySaleMapper.java @@ -17,4 +17,8 @@ IPage<MemberQuickSaleVo> findmemberQuickSaleListInPage(Page<MemberQuickBuySaleEntity> page, @Param("record")MemberQuickBuySaleEntity memberQuickBuySaleEntity); + String selectCZByMemberId(@Param("memberId")String memberId); + + String selectTXByMemberId(@Param("memberId")String memberId); + } diff --git a/src/main/java/com/xcong/excoin/modules/member/service/IMemberService.java b/src/main/java/com/xcong/excoin/modules/member/service/IMemberService.java index c1c466c..8e966b0 100644 --- a/src/main/java/com/xcong/excoin/modules/member/service/IMemberService.java +++ b/src/main/java/com/xcong/excoin/modules/member/service/IMemberService.java @@ -10,6 +10,7 @@ import com.xcong.excoin.common.entity.FebsResponse; import com.xcong.excoin.common.entity.QueryRequest; import com.xcong.excoin.modules.member.dto.MemberDetailConfirmDto; +import com.xcong.excoin.modules.member.entity.AgentFriendRelationEntity; import com.xcong.excoin.modules.member.entity.MemberCoinChargeEntity; import com.xcong.excoin.modules.member.entity.MemberCoinWithdrawEntity; import com.xcong.excoin.modules.member.entity.MemberEntity; @@ -60,4 +61,6 @@ FebsResponse memberDataInfoList(@NotNull(message = "{required}") long id); + IPage<AgentFriendRelationEntity> findAgentInfoListInPage(AgentFriendRelationEntity agentFriendRelationEntity, QueryRequest request); + } diff --git a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java b/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java index 2f2f735..66030ec 100644 --- a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java @@ -7,6 +7,7 @@ import com.xcong.excoin.common.entity.FebsResponse; import com.xcong.excoin.common.entity.QueryRequest; import com.xcong.excoin.modules.member.dto.MemberDetailConfirmDto; +import com.xcong.excoin.modules.member.entity.AgentFriendRelationEntity; import com.xcong.excoin.modules.member.entity.MemberAccountMoneyChangeEntity; import com.xcong.excoin.modules.member.entity.MemberCoinAddressEntity; import com.xcong.excoin.modules.member.entity.MemberCoinChargeEntity; @@ -14,6 +15,7 @@ import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.modules.member.entity.MemberQuickBuySaleEntity; import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity; +import com.xcong.excoin.modules.member.mapper.AgentFriendRelationMapper; import com.xcong.excoin.modules.member.mapper.MemberAccountMoneyChangeMapper; import com.xcong.excoin.modules.member.mapper.MemberAuthenticationMapper; import com.xcong.excoin.modules.member.mapper.MemberCoinAddressMapper; @@ -32,10 +34,13 @@ import lombok.RequiredArgsConstructor; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import javax.validation.Valid; import javax.validation.constraints.NotNull; @@ -66,6 +71,71 @@ private final MemberAuthenticationMapper memberAuthenticationMapper; + private final AgentFriendRelationMapper agentFriendRelationMapper; + + @Override + public IPage<AgentFriendRelationEntity> findAgentInfoListInPage(AgentFriendRelationEntity agentFriendRelationEntity, + QueryRequest request) { + Page<AgentFriendRelationEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<AgentFriendRelationEntity> findmemberQuickBuySaleListInPage = agentFriendRelationMapper.findAgentFriendRelationListInPage(page, agentFriendRelationEntity); + List<AgentFriendRelationEntity> records = findmemberQuickBuySaleListInPage.getRecords(); + + if(records != null && records.size() > 0) { + for(AgentFriendRelationEntity agentFriendRelation : records) { + List<String> arrayList = new ArrayList<>(); + String inviteId = agentFriendRelation.getInviteId(); + String inviteIdCZ = null; + String inviteIdTX = null; + String inviteIdSY = null; + // 当前邀请码下的所有代理MemberID + List<AgentFriendRelationEntity> lowLevelList = agentFriendRelationMapper.selectAgentFriendRelationByMap(inviteId); + + List<String> memberLevel = memberMapper.selectMemberBylowLevelInviteId(inviteId); + arrayList.addAll(memberLevel); + if(lowLevelList != null && lowLevelList.size() > 0) { + for(AgentFriendRelationEntity lowLevelMemberId : lowLevelList) { + Long memberId = lowLevelMemberId.getMemberId(); + arrayList.add(memberId.toString()); + List<String> memberlowLevel = memberMapper.selectMemberBylowLevelInviteId(lowLevelMemberId.getInviteId()); + arrayList.addAll(memberlowLevel); + } + Set<String> set = new HashSet<>(); + List<String> newList = new ArrayList<>(); + set.addAll(arrayList); + newList.addAll(set); + //获取对应的充值提现 + double czNumber = 0; + double txNumber = 0; + if(newList != null && newList.size() > 0) { + agentFriendRelation.setPromotionNumber(newList.size()); + for(String memberId : newList) { + //充币 + String selectCBByMemberId = memberCoinChargeMapper.selectCBByMemberId(memberId); + //充值 + String selectCZByMemberI = memberQuickBuySaleMapper.selectCZByMemberId(memberId); + //提币 + String selectTBByMemberId = memberCoinWithdrawMapper.selectTBByMemberId(memberId); + //提现 + String selectTXByMemberId = memberQuickBuySaleMapper.selectTXByMemberId(memberId); + + czNumber = czNumber + (selectCBByMemberId == null ? 0 : Double.parseDouble(selectCBByMemberId)); + czNumber = czNumber + (selectCZByMemberI == null ? 0 : Double.parseDouble(selectCZByMemberI)); + txNumber = txNumber + (selectTBByMemberId == null ? 0 : Double.parseDouble(selectTBByMemberId)); + txNumber = txNumber + (selectTXByMemberId == null ? 0 : Double.parseDouble(selectTXByMemberId)); + } + } + inviteIdCZ = czNumber+""; + inviteIdTX = txNumber+""; + inviteIdSY = (czNumber-txNumber)+""; + } + agentFriendRelation.setTotalRecharge(inviteIdCZ == null ? "0.0" : inviteIdCZ); + agentFriendRelation.setTotalWithdrawal(inviteIdTX == null ? "0.0" : inviteIdTX); + agentFriendRelation.setTotalPerformance(inviteIdSY == null ? "0.0" : inviteIdSY); + } + } + return findmemberQuickBuySaleListInPage; + } + @Override public IPage<MemberEntity> findMemberListInPage(MemberEntity memberEntity, QueryRequest request) { diff --git a/src/main/resources/mapper/modules/AgentFriendRelationMapper.xml b/src/main/resources/mapper/modules/AgentFriendRelationMapper.xml new file mode 100644 index 0000000..e08a891 --- /dev/null +++ b/src/main/resources/mapper/modules/AgentFriendRelationMapper.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.excoin.modules.member.mapper.AgentFriendRelationMapper"> + + <select id="findAgentFriendRelationListInPage" resultType="com.xcong.excoin.modules.member.entity.AgentFriendRelationEntity"> + select * from agent_friend_relation s left join member m on m.id = s.member_id + <where> + <if test="record != null" > + <if test="record.account!=null and record.account!=''"> + and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account}) + </if> + </if> + </where> + </select> + + <select id="selectAgentFriendRelationByMap" resultType="com.xcong.excoin.modules.member.entity.AgentFriendRelationEntity"> + SELECT + * + FROM + agent_friend_relation + WHERE + FIND_IN_SET(#{inviteId}, referer_ids) + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MemberCoinChargeMapper.xml b/src/main/resources/mapper/modules/MemberCoinChargeMapper.xml index 0017314..c5a078e 100644 --- a/src/main/resources/mapper/modules/MemberCoinChargeMapper.xml +++ b/src/main/resources/mapper/modules/MemberCoinChargeMapper.xml @@ -16,5 +16,9 @@ </where> order by s.create_time desc </select> + + <select id="selectCBByMemberId" resultType="java.lang.String"> + select IFNULL(sum(amount),'0') from member_coin_charge where member_id = #{memberId} + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml b/src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml index 8782239..5bcc7ff 100644 --- a/src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml +++ b/src/main/resources/mapper/modules/MemberCoinWithdrawMapper.xml @@ -22,5 +22,9 @@ </where> order by s.create_time desc </select> + + <select id="selectTBByMemberId" resultType="java.lang.String"> + select IFNULL(sum(amount),'0') from member_coin_withdraw where member_id = #{memberId} and status = 2 + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MemberMapper.xml b/src/main/resources/mapper/modules/MemberMapper.xml index 9ee4ce5..3e3b6a5 100644 --- a/src/main/resources/mapper/modules/MemberMapper.xml +++ b/src/main/resources/mapper/modules/MemberMapper.xml @@ -346,4 +346,8 @@ ) </select> + <select id="selectMemberBylowLevelInviteId" resultType="java.lang.String"> + select id from member where FIND_IN_SET(#{inviteId},referer_ids) + </select> + </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MemberQuickBuySaleMapper.xml b/src/main/resources/mapper/modules/MemberQuickBuySaleMapper.xml index d6b9f41..62c7d50 100644 --- a/src/main/resources/mapper/modules/MemberQuickBuySaleMapper.xml +++ b/src/main/resources/mapper/modules/MemberQuickBuySaleMapper.xml @@ -2,6 +2,19 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xcong.excoin.modules.member.mapper.MemberQuickBuySaleMapper"> + <select id="selectCZByMemberId" resultType="java.lang.String"> + select IFNULL(sum(amount_usdt),'0') from member_quick_buy_sale s + where s.order_type = 'B' + and s.member_id = #{memberId} + and s.order_status = 3 + </select> + + <select id="selectTXByMemberId" resultType="java.lang.String"> + select IFNULL(sum(amount_usdt),'0') from member_quick_buy_sale s + where s.order_type = 'S' + and s.member_id = #{memberId} + and s.order_status = 3 + </select> <select id="findmemberQuickBuySaleListInPage" resultType="com.xcong.excoin.modules.member.vo.MemberQuickBuySaleVo"> select * from member_quick_buy_sale s left join member m on m.id = s.member_id diff --git a/src/main/resources/templates/error/403.html b/src/main/resources/templates/error/403.html index dd959d4..09a5349 100644 --- a/src/main/resources/templates/error/403.html +++ b/src/main/resources/templates/error/403.html @@ -1,40 +1,40 @@ -<!DOCTYPE html> -<html xmlns:th="http://www.thymeleaf.org"> -<head> - <meta charset="utf-8"> - <title>FEBS 权限系统</title> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> - <meta name="renderer" content="webkit"> - <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> - <meta name="viewport" - content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"> - <link rel="stylesheet" th:href="@{layui/css/layui.css}" media="all"> - <link rel="stylesheet" th:href="@{febs/css/febs.css}" media="all"> - <link rel="icon" th:href="@{febs/images/favicon.ico}" type="image/x-icon"/> -</head> -<body> -<div class="layui-fluid" id="febs-error-403" lay-title="403"> - <div class="layui-row layui-col-space10" style="margin-top:100px"> - <div class="layui-col-xs3 layui-col-xs-offset2"> - <img data-th-src="@{febs/images/error/403.svg}" alt="" width="85%"/> - </div> - <div class="layui-col-xs7"> - <h1 style="font-size: 60px">403</h1> - <h2 class="febs-mar-b20 febs-c-gray">抱歉,你无权访问该页面</h2> - <button class="layui-btn layui-btn-normal" id="home">返回首页</button> - </div> - </div> -</div> -<script th:src="@{layui/layui.js}"></script> -<script data-th-inline="javascript" type="text/javascript"> - layui.use(['jquery'], function () { - var $ = layui.jquery, - ctx = [[@{/}]], - $view = $('#febs-error-403'); - $view.on('click', 'button', function () { - window.location.href = ctx + 'index'; - }); - }); -</script> -</body> +<!DOCTYPE html> +<html xmlns:th="http://www.thymeleaf.org"> +<head> + <meta charset="utf-8"> + <title>Biue 后台系统</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" + content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"> + <link rel="stylesheet" th:href="@{layui/css/layui.css}" media="all"> + <link rel="stylesheet" th:href="@{febs/css/febs.css}" media="all"> + <link rel="icon" th:href="@{febs/images/favicon.ico}" type="image/x-icon"/> +</head> +<body> +<div class="layui-fluid" id="febs-error-403" lay-title="403"> + <div class="layui-row layui-col-space10" style="margin-top:100px"> + <div class="layui-col-xs3 layui-col-xs-offset2"> + <img data-th-src="@{febs/images/error/403.svg}" alt="" width="85%"/> + </div> + <div class="layui-col-xs7"> + <h1 style="font-size: 60px">403</h1> + <h2 class="febs-mar-b20 febs-c-gray">抱歉,你无权访问该页面</h2> + <button class="layui-btn layui-btn-normal" id="home">返回首页</button> + </div> + </div> +</div> +<script th:src="@{layui/layui.js}"></script> +<script data-th-inline="javascript" type="text/javascript"> + layui.use(['jquery'], function () { + var $ = layui.jquery, + ctx = [[@{/}]], + $view = $('#febs-error-403'); + $view.on('click', 'button', function () { + window.location.href = ctx + 'index'; + }); + }); +</script> +</body> </html> \ No newline at end of file diff --git a/src/main/resources/templates/error/404.html b/src/main/resources/templates/error/404.html index c099153..9593794 100644 --- a/src/main/resources/templates/error/404.html +++ b/src/main/resources/templates/error/404.html @@ -1,42 +1,42 @@ -<!DOCTYPE html> -<html xmlns:th="http://www.thymeleaf.org"> -<head> - <meta charset="utf-8"> - <title>FEBS 权限系统</title> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> - <meta name="renderer" content="webkit"> - <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> - <meta name="viewport" - content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"> - <link rel="stylesheet" th:href="@{layui/css/layui.css}" media="all"> - <link rel="stylesheet" th:href="@{febs/css/febs.css}" media="all"> - <link rel="icon" th:href="@{febs/images/favicon.ico}" type="image/x-icon"/> -</head> -<body> -<div class="layui-fluid" id="febs-error-404" lay-title="页面不存在"> - <div class="layui-row layui-col-space10" style="margin-top:100px"> - <div class="layui-col-xs3 layui-col-xs-offset2"> - <img data-th-src="@{febs/images/error/404.svg}" alt="" width="85%"/> - </div> - <div class="layui-col-xs7"> - <h1 style="font-size: 60px">404</h1> - <h2 class="febs-mar-b20 febs-c-gray">抱歉,你访问的页面不存在</h2> - <button class="layui-btn layui-btn-normal"> - 返回首页 - </button> - </div> - </div> -</div> -<script th:src="@{layui/layui.js}"></script> -<script data-th-inline="javascript" type="text/javascript"> - layui.use(['jquery'], function () { - var $ = layui.jquery, - ctx = [[@{/}]], - $view = $('#febs-error-404'); - $view.on('click', 'button', function () { - window.location.href = ctx + 'index'; - }); - }); -</script> -</body> +<!DOCTYPE html> +<html xmlns:th="http://www.thymeleaf.org"> +<head> + <meta charset="utf-8"> + <title>Biue 后台系统</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" + content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"> + <link rel="stylesheet" th:href="@{layui/css/layui.css}" media="all"> + <link rel="stylesheet" th:href="@{febs/css/febs.css}" media="all"> + <link rel="icon" th:href="@{febs/images/favicon.ico}" type="image/x-icon"/> +</head> +<body> +<div class="layui-fluid" id="febs-error-404" lay-title="页面不存在"> + <div class="layui-row layui-col-space10" style="margin-top:100px"> + <div class="layui-col-xs3 layui-col-xs-offset2"> + <img data-th-src="@{febs/images/error/404.svg}" alt="" width="85%"/> + </div> + <div class="layui-col-xs7"> + <h1 style="font-size: 60px">404</h1> + <h2 class="febs-mar-b20 febs-c-gray">抱歉,你访问的页面不存在</h2> + <button class="layui-btn layui-btn-normal"> + 返回首页 + </button> + </div> + </div> +</div> +<script th:src="@{layui/layui.js}"></script> +<script data-th-inline="javascript" type="text/javascript"> + layui.use(['jquery'], function () { + var $ = layui.jquery, + ctx = [[@{/}]], + $view = $('#febs-error-404'); + $view.on('click', 'button', function () { + window.location.href = ctx + 'index'; + }); + }); +</script> +</body> </html> \ No newline at end of file diff --git a/src/main/resources/templates/error/500.html b/src/main/resources/templates/error/500.html index bb38464..9496dbc 100644 --- a/src/main/resources/templates/error/500.html +++ b/src/main/resources/templates/error/500.html @@ -1,42 +1,42 @@ -<!DOCTYPE html> -<html xmlns:th="http://www.thymeleaf.org"> -<head> - <meta charset="utf-8"> - <title>FEBS 权限系统</title> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> - <meta name="renderer" content="webkit"> - <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> - <meta name="viewport" - content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"> - <link rel="stylesheet" th:href="@{layui/css/layui.css}" media="all"> - <link rel="stylesheet" th:href="@{febs/css/febs.css}" media="all"> - <link rel="icon" th:href="@{febs/images/favicon.ico}" type="image/x-icon"/> -</head> -<body> -<div class="layui-fluid" id="febs-error-500" lay-title="500"> - <div class="layui-row layui-col-space10" style="margin-top:100px"> - <div class="layui-col-xs4 layui-col-xs-offset2"> - <img data-th-src="@{febs/images/error/500.svg}" alt="" width="85%"/> - </div> - <div class="layui-col-xs6"> - <h1 style="font-size: 60px">500</h1> - <h2 class="febs-mar-b20 febs-c-gray">抱歉,服务器出错了</h2> - <button class="layui-btn layui-btn-normal"> - 返回首页 - </button> - </div> - </div> -</div> -<script th:src="@{layui/layui.js}"></script> -<script data-th-inline="javascript" type="text/javascript"> - layui.use(['jquery'], function () { - var $ = layui.jquery, - ctx = [[@{/}]], - $view = $('#febs-error-500'); - $view.on('click', 'button', function () { - window.location.href = ctx + 'index'; - }); - }); -</script> -</body> +<!DOCTYPE html> +<html xmlns:th="http://www.thymeleaf.org"> +<head> + <meta charset="utf-8"> + <title>Biue 后台系统</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" + content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"> + <link rel="stylesheet" th:href="@{layui/css/layui.css}" media="all"> + <link rel="stylesheet" th:href="@{febs/css/febs.css}" media="all"> + <link rel="icon" th:href="@{febs/images/favicon.ico}" type="image/x-icon"/> +</head> +<body> +<div class="layui-fluid" id="febs-error-500" lay-title="500"> + <div class="layui-row layui-col-space10" style="margin-top:100px"> + <div class="layui-col-xs4 layui-col-xs-offset2"> + <img data-th-src="@{febs/images/error/500.svg}" alt="" width="85%"/> + </div> + <div class="layui-col-xs6"> + <h1 style="font-size: 60px">500</h1> + <h2 class="febs-mar-b20 febs-c-gray">抱歉,服务器出错了</h2> + <button class="layui-btn layui-btn-normal"> + 返回首页 + </button> + </div> + </div> +</div> +<script th:src="@{layui/layui.js}"></script> +<script data-th-inline="javascript" type="text/javascript"> + layui.use(['jquery'], function () { + var $ = layui.jquery, + ctx = [[@{/}]], + $view = $('#febs-error-500'); + $view.on('click', 'button', function () { + window.location.href = ctx + 'index'; + }); + }); +</script> +</body> </html> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/index.html b/src/main/resources/templates/febs/views/index.html index a46deb5..b47aa0d 100644 --- a/src/main/resources/templates/febs/views/index.html +++ b/src/main/resources/templates/febs/views/index.html @@ -1,428 +1,280 @@ -<style> - #febs-index .welcome-info { - border: 1px solid #f1f1f1; - margin-bottom: .5rem; - padding: .5rem; - } - - #febs-index .welcome-info-wrapper { - padding: .2rem; - display: inline-block - } - - #febs-index .welcome-info-wrapper .user-header { - display: inline-block; - vertical-align: middle - } - - #febs-index .welcome-info-wrapper .user-header img { - width: 5rem; - margin: .5rem 1rem; - border-radius: 50% - } - - #febs-index .welcome-info-wrapper .user-info { - display: inline-block; - vertical-align: middle - } - - #febs-index .welcome-info-wrapper .user-info .random-message { - font-size: 1rem; - margin-bottom: .2rem; - max-width: 21rem - } - - #febs-index .welcome-info-wrapper .user-info .user-dept, #febs-index .welcome-info-wrapper .user-info .user-login-info { - color: rgba(0, 0, 0, 0.45); - } - - #febs-index .login-count-table { - width: 100%; - margin: 1rem; - } - - #febs-index .login-count-table .count { - padding-top: .8rem; - font-size: 1rem; - font-weight: 600; - color: #1890ff - } - - #febs-index .project-table { - padding: .5rem; - border: 1px solid #f1f1f1; - width: 100% - } - - #febs-index .project-table-td { - padding: .5rem 0.7rem; - border: 1px solid #f1f1f1; - } - - #febs-index .project-table-td a { - color: #42b983; - font-size: .9rem; - font-weight: 600; - } - - #febs-index .project-desc { - color: rgba(0, 0, 0, 0.45); - } -</style> -<div class="layui-fluid layui-anim febs-anim-up" id="febs-index" lay-title="系统首页"> - <div class="layui-row layui-col-space8 febs-container"> - <div class="layui-col-md12 layui-col-sm12 layui-col-xs12"> - <div class="layui-card"> - <div class="layui-card-body layui-anim layui-anim-fadein"> - <div class="layui-row welcome-info"> - <div class="layui-col-md6 layui-col-sm12 layui-col-xs12"> - <div class="layui-row welcome-info-wrapper"> - <div class="user-header"> - <img alt="头像" id="user-avatar" data-th-src="@{febs/images/avatar/empty.jpg}"> - </div> - <div class="user-info"> - <div class="layui-row"> - <div class="random-message"> - <span id="welcome-message"></span> - </div> - <div class="user-dept"> - <span id="user-dept"></span> | <span id="user-role"></span> - </div> - <div class="user-login-info"> - 上次登录时间:<span id="last-login-time">2019-05-23 18:45:12</span> - </div> - </div> - </div> - </div> - </div> - <div class="layui-col-md6 layui-col-sm12 layui-col-xs12"> - <div class="layui-col-md-offset5"> - <table class="login-count-table"> - <tr> - <td>注册用户数量</td> - <td>持仓用户数量</td> - <td>当前平台总金额</td> - </tr> - <tr> - <td class="count" id="today-ip"> - 0 - </td> - <td class="count" id="today-visit-count"> - 0 - </td> - <td class="count" id="total-visit-count"> - 0 - </td> - </tr> - </table> - </div> - </div> - </div> - </div> - </div> - </div> - <div class="layui-col-md6 layui-col-sm6 layui-col-xs12"> - <div class="layui-card"> - <div class="layui-card-body"> - <div id="chart" style="height: 350px"></div> - </div> - </div> - </div> - <div class="layui-col-md6 layui-col-sm6 layui-col-xs12"> - <div class="layui-card"> - <div class="layui-card-body"> - <table class="project-table"> - <tr> - <td style="padding: .8rem;">进行中的项目</td> - <td style="padding: .8rem;text-align: right"> - <a target="_blank" href="https://github.com/wuyouzhuguli?tab=repositories">所有项目</a> - </td> - </tr> - <tr> - <td class="project-table-td"> - <div class="layui-row"> - <div class="layui-col-md12 layui-col-xs12"> - <div class="layui-row"> - <div class="layui-col-md12"> - <a target="_blank" href="https://github.com/wuyouzhuguli/FEBS-Cloud">FEBS - Cloud</a> - </div> - <div class="project-desc"> - Spring Cloud 微服务权限管理系统。 - </div> - </div> - </div> - </div> - </td> - <td class="project-table-td"> - <div class="layui-row"> - <div class="layui-col-md12 layui-col-xs12"> - <div class="layui-row"> - <div class="layui-col-md12"> - <a target="_blank" href="https://github.com/wuyouzhuguli/FEBS-Cloud-Web">FEBS - Cloud Web</a> - </div> - <div class="project-desc"> - FEBS-Cloud前端,使用 vue-element-admin 构建。 - </div> - </div> - </div> - </div> - </td> - </tr> - <tr> - <td class="project-table-td"> - <div class="layui-row"> - <div class="layui-col-md12 layui-col-xs12"> - <div class="layui-row"> - <div class="layui-col-md12"> - <a target="_blank" href="https://github.com/wuyouzhuguli/FEBS-Shiro">FEBS - Shiro</a> - </div> - <div class="project-desc"> - Spring Boot 2.0.4 & Shiro1.4.0 权限管理系统。 - </div> - </div> - </div> - </div> - </td> - <td class="project-table-td"> - <div class="layui-row"> - <div class="layui-col-md12 layui-col-xs12"> - <div class="layui-row"> - <div class="layui-col-md12"> - <a target="_blank" href="https://github.com/wuyouzhuguli/FEBS-Security">FEBS - Security</a> - </div> - <div class="project-desc"> - Spring Boot 2.0.4 & Spring Security 5.0.7 权限管理系统。 - </div> - </div> - </div> - </div> - </td> - </tr> - <tr> - <td class="project-table-td"> - <div class="layui-row"> - <div class="layui-col-md12 layui-col-xs12"> - <div class="layui-row"> - <div class="layui-col-md12"> - <a target="_blank" href="https://github.com/wuyouzhuguli/FEBS-Actuator">FEBS - Cloud K8S</a> - </div> - <div class="project-desc"> - FEBS Cloud K8S集群部署脚本。 - </div> - </div> - </div> - </div> - </td> - <td class="project-table-td"> - <div class="layui-row"> - <div class="layui-col-md12 layui-col-xs12"> - <div class="layui-row"> - <div class="layui-col-md12"> - <a target="_blank" href="https://github.com/wuyouzhuguli/SpringAll">SpringAll</a> - </div> - <div class="project-desc"> - 循序渐进学习Spring Boot、Spring Cloud与Spring Security。 - </div> - </div> - </div> - </div> - </td> - </tr> - <tr> - <td class="project-table-td"> - <div class="layui-row"> - <div class="layui-col-md12 layui-col-xs12"> - <div class="layui-row"> - <div class="layui-col-md12"> - <a target="_blank" href="https://github.com/wuyouzhuguli/FEBS-Vue">FEBS - Vue</a> - </div> - <div class="project-desc"> - FEBS-Shiro前后端分离版本,前端架构采用Vue全家桶。 - </div> - </div> - </div> - </div> - </td> - <td class="project-table-td"> - <div class="layui-row"> - <div class="layui-col-md12 layui-col-xs12"> - <div class="layui-row"> - <div class="layui-col-md12"> - <a target="_blank" href="https://github.com/wuyouzhuguli/FEBS-Actuator">FEBS Actuator</a> - </div> - <div class="project-desc"> - 使用Spring Boot Admin 2.0.2构建,用于监控FEBS。 - </div> - </div> - </div> - </div> - </td> - </tr> - </table> - </div> - </div> - </div> - </div> -</div> -<script data-th-inline="javascript" type="text/javascript"> - layui.use(['apexcharts', 'febs', 'jquery', 'util'], function () { - var $ = layui.jquery, - util = layui.util, - $view = $('#febs-index'), - febs = layui.febs; - - febs.get(ctx + 'index/' + currentUser.username, null, function (r) { - handleSuccess(r.data); - }); - - function handleSuccess(data) { - var hour = new Date().getHours(); - var time = hour < 6 ? '早上好' : (hour <= 11 ? '上午好' : (hour <= 13 ? '中午好' : (hour <= 18 ? '下午好' : '晚上好'))); - var welcomeArr = [ - '喝杯咖啡休息下吧☕', - '要不要和朋友打局LOL', - '今天又写了几个Bug呢', - '今天在群里吹水了吗', - '今天吃了什么好吃的呢', - '今天您微笑了吗😊', - '今天帮助别人了吗', - '准备吃些什么呢', - '周末要不要去看电影?' - ]; - var index = Math.floor((Math.random() * welcomeArr.length)); - var welcomeMessage = time + ',<a id="febs-index-user">' + currentUser.username + '</a>,' + welcomeArr[index]; - $view.find('#today-ip').text(data.todayIp).end() - .find('#today-visit-count').text(data.todayVisitCount).end() - .find('#total-visit-count').text(data.totalVisitCount).end() - .find('#user-dept').text(currentUser.deptName ? currentUser.deptName : '暂无所属部门').end() - .find('#user-role').text(currentUser.roleName ? currentUser.roleName : '暂无角色').end() - .find('#last-login-time').text(currentUser.lastLoginTime ? currentUser.lastLoginTime : '第一次访问系统').end() - .find('#welcome-message').html(welcomeMessage).end() - .find('#user-avatar').attr('src', ctx + "febs/images/avatar/" + currentUser.avatar); - - var currentTime = new Date().getTime(); - var yourVisitCount = []; - var totalVisitCount = []; - var lastTenDays = [ - util.toDateString(new Date(currentTime - 1000 * 9 * 86400), 'MM-dd'), - util.toDateString(new Date(currentTime - 1000 * 8 * 86400), 'MM-dd'), - util.toDateString(new Date(currentTime - 1000 * 7 * 86400), 'MM-dd'), - util.toDateString(new Date(currentTime - 1000 * 6 * 86400), 'MM-dd'), - util.toDateString(new Date(currentTime - 1000 * 5 * 86400), 'MM-dd'), - util.toDateString(new Date(currentTime - 1000 * 4 * 86400), 'MM-dd'), - util.toDateString(new Date(currentTime - 1000 * 3 * 86400), 'MM-dd'), - util.toDateString(new Date(currentTime - 1000 * 2 * 86400), 'MM-dd'), - util.toDateString(new Date(currentTime - 1000 * 86400), 'MM-dd'), - util.toDateString(new Date(currentTime), 'MM-dd') - ]; - - - layui.each(lastTenDays, function (k, i) { - var contain = false; - layui.each(data.lastSevenUserVisitCount, function (key, item) { - if (i === item.days) { - yourVisitCount.push(item.count); - contain = true; - } - }); - if (!contain) yourVisitCount.push(0); - contain = false; - layui.each(data.lastSevenVisitCount, function (key, item) { - if (i === item.days) { - totalVisitCount.push(item.count); - contain = true; - } - }); - if (!contain) totalVisitCount.push(0); - }); - - var options = { - chart: { - height: 350, - type: 'area', - toolbar: { - show: false - } - }, - colors: ['#1890ff', '#0acf97'], - plotOptions: { - bar: { - horizontal: false, - columnWidth: '32rem' - } - }, - dataLabels: { - enabled: false - }, - stroke: { - width: [3, 3], - curve: 'smooth' - }, - series: [{ - name: '总数', - data: totalVisitCount - }, { - name: '您', - data: yourVisitCount - }], - xaxis: { - categories: lastTenDays, - axisTicks: { - show: true - }, - axisBorder: { - show: true, - color: '#f1f1f1' - } - }, - fill: { - type: 'gradient', - gradient: { - shadeIntensity: 1, - inverseColors: false, - opacityFrom: 0.5, - opacityTo: 0, - stops: [0, 90, 100] - } - }, - title: { - text: '近10天系统访问记录', - align: 'left', - style: { - color: 'rgba(0, 0, 0, .65)' - } - }, - tooltip: { - y: { - formatter: function (val) { - return "访问次数 " + val + " 次" - } - } - }, - grid: { - row: { - colors: ['transparent', 'transparent'], - opacity: 0.2 - }, - borderColor: '#f1f1f1' - } - }; - - new ApexCharts( - document.querySelector("#chart"), - options - ).render(); - } - - $view.on('click', '#febs-index-user',function () { - febs.navigate("/user/profile"); - }) - - }); -</script> +<style> + #febs-index .welcome-info { + border: 1px solid #f1f1f1; + margin-bottom: .5rem; + padding: .5rem; + } + + #febs-index .welcome-info-wrapper { + padding: .2rem; + display: inline-block + } + + #febs-index .welcome-info-wrapper .user-header { + display: inline-block; + vertical-align: middle + } + + #febs-index .welcome-info-wrapper .user-header img { + width: 5rem; + margin: .5rem 1rem; + border-radius: 50% + } + + #febs-index .welcome-info-wrapper .user-info { + display: inline-block; + vertical-align: middle + } + + #febs-index .welcome-info-wrapper .user-info .random-message { + font-size: 1rem; + margin-bottom: .2rem; + max-width: 21rem + } + + #febs-index .welcome-info-wrapper .user-info .user-dept, #febs-index .welcome-info-wrapper .user-info .user-login-info { + color: rgba(0, 0, 0, 0.45); + } + + #febs-index .login-count-table { + width: 100%; + margin: 1rem; + } + + #febs-index .login-count-table .count { + padding-top: .8rem; + font-size: 1rem; + font-weight: 600; + color: #1890ff + } + + #febs-index .project-table { + padding: .5rem; + border: 1px solid #f1f1f1; + width: 100% + } + + #febs-index .project-table-td { + padding: .5rem 0.7rem; + border: 1px solid #f1f1f1; + } + + #febs-index .project-table-td a { + color: #42b983; + font-size: .9rem; + font-weight: 600; + } + + #febs-index .project-desc { + color: rgba(0, 0, 0, 0.45); + } +</style> +<div class="layui-fluid layui-anim febs-anim-up" id="febs-index" lay-title="系统首页"> + <div class="layui-row layui-col-space8 febs-container"> + <div class="layui-col-md12 layui-col-sm12 layui-col-xs12"> + <div class="layui-card"> + <div class="layui-card-body layui-anim layui-anim-fadein"> + <div class="layui-row welcome-info"> + <div class="layui-col-md6 layui-col-sm12 layui-col-xs12"> + <div class="layui-row welcome-info-wrapper"> + <div class="user-header"> + <img alt="头像" id="user-avatar" data-th-src="@{febs/images/avatar/empty.jpg}"> + </div> + <div class="user-info"> + <div class="layui-row"> + <div class="random-message"> + <span id="welcome-message"></span> + </div> + <div class="user-dept"> + <span id="user-dept"></span> | <span id="user-role"></span> + </div> + <div class="user-login-info"> + 上次登录时间:<span id="last-login-time">2019-05-23 18:45:12</span> + </div> + </div> + </div> + </div> + </div> + <div class="layui-col-md6 layui-col-sm12 layui-col-xs12"> + <div class="layui-col-md-offset5"> + <table class="login-count-table"> + <tr> + <td>注册用户数量</td> + </tr> + <tr> + <td class="count" id="today-ip"> + 0 + </td> + </tr> + </table> + </div> + </div> + </div> + </div> + </div> + </div> + <div class="layui-col-md6 layui-col-sm6 layui-col-xs12"> + <div class="layui-card"> + <div class="layui-card-body"> + <div id="chart" style="height: 350px"></div> + </div> + </div> + </div> + </div> +</div> +<script data-th-inline="javascript" type="text/javascript"> + layui.use(['apexcharts', 'febs', 'jquery', 'util'], function () { + var $ = layui.jquery, + util = layui.util, + $view = $('#febs-index'), + febs = layui.febs; + + febs.get(ctx + 'index/' + currentUser.username, null, function (r) { + handleSuccess(r.data); + }); + + function handleSuccess(data) { + var hour = new Date().getHours(); + var time = hour < 6 ? '早上好' : (hour <= 11 ? '上午好' : (hour <= 13 ? '中午好' : (hour <= 18 ? '下午好' : '晚上好'))); + var welcomeArr = [ + '喝杯咖啡休息下吧☕', + '要不要和朋友打局LOL', + '今天又写了几个Bug呢', + '今天在群里吹水了吗', + '今天吃了什么好吃的呢', + '今天您微笑了吗😊', + '今天帮助别人了吗', + '准备吃些什么呢', + '周末要不要去看电影?' + ]; + var index = Math.floor((Math.random() * welcomeArr.length)); + var welcomeMessage = time + ',<a id="febs-index-user">' + currentUser.username + '</a>,' + welcomeArr[index]; + $view.find('#today-ip').text(data.todayIp).end() + .find('#today-visit-count').text(data.todayVisitCount).end() + .find('#total-visit-count').text(data.totalVisitCount).end() + .find('#user-dept').text(currentUser.deptName ? currentUser.deptName : '暂无所属部门').end() + .find('#user-role').text(currentUser.roleName ? currentUser.roleName : '暂无角色').end() + .find('#last-login-time').text(currentUser.lastLoginTime ? currentUser.lastLoginTime : '第一次访问系统').end() + .find('#welcome-message').html(welcomeMessage).end() + .find('#user-avatar').attr('src', ctx + "febs/images/avatar/" + currentUser.avatar); + + var currentTime = new Date().getTime(); + var yourVisitCount = []; + var totalVisitCount = []; + var lastTenDays = [ + util.toDateString(new Date(currentTime - 1000 * 9 * 86400), 'MM-dd'), + util.toDateString(new Date(currentTime - 1000 * 8 * 86400), 'MM-dd'), + util.toDateString(new Date(currentTime - 1000 * 7 * 86400), 'MM-dd'), + util.toDateString(new Date(currentTime - 1000 * 6 * 86400), 'MM-dd'), + util.toDateString(new Date(currentTime - 1000 * 5 * 86400), 'MM-dd'), + util.toDateString(new Date(currentTime - 1000 * 4 * 86400), 'MM-dd'), + util.toDateString(new Date(currentTime - 1000 * 3 * 86400), 'MM-dd'), + util.toDateString(new Date(currentTime - 1000 * 2 * 86400), 'MM-dd'), + util.toDateString(new Date(currentTime - 1000 * 86400), 'MM-dd'), + util.toDateString(new Date(currentTime), 'MM-dd') + ]; + + + layui.each(lastTenDays, function (k, i) { + var contain = false; + layui.each(data.lastSevenUserVisitCount, function (key, item) { + if (i === item.days) { + yourVisitCount.push(item.count); + contain = true; + } + }); + if (!contain) yourVisitCount.push(0); + contain = false; + layui.each(data.lastSevenVisitCount, function (key, item) { + if (i === item.days) { + totalVisitCount.push(item.count); + contain = true; + } + }); + if (!contain) totalVisitCount.push(0); + }); + + var options = { + chart: { + height: 350, + type: 'area', + toolbar: { + show: false + } + }, + colors: ['#1890ff', '#0acf97'], + plotOptions: { + bar: { + horizontal: false, + columnWidth: '32rem' + } + }, + dataLabels: { + enabled: false + }, + stroke: { + width: [3, 3], + curve: 'smooth' + }, + series: [{ + name: '总数', + data: totalVisitCount + }, { + name: '您', + data: yourVisitCount + }], + xaxis: { + categories: lastTenDays, + axisTicks: { + show: true + }, + axisBorder: { + show: true, + color: '#f1f1f1' + } + }, + fill: { + type: 'gradient', + gradient: { + shadeIntensity: 1, + inverseColors: false, + opacityFrom: 0.5, + opacityTo: 0, + stops: [0, 90, 100] + } + }, + title: { + text: '近10天系统访问记录', + align: 'left', + style: { + color: 'rgba(0, 0, 0, .65)' + } + }, + tooltip: { + y: { + formatter: function (val) { + return "访问次数 " + val + " 次" + } + } + }, + grid: { + row: { + colors: ['transparent', 'transparent'], + opacity: 0.2 + }, + borderColor: '#f1f1f1' + } + }; + + new ApexCharts( + document.querySelector("#chart"), + options + ).render(); + } + + $view.on('click', '#febs-index-user',function () { + febs.navigate("/user/profile"); + }) + + }); +</script> diff --git a/src/main/resources/templates/febs/views/layout.html b/src/main/resources/templates/febs/views/layout.html index 430a48e..82bcbfa 100644 --- a/src/main/resources/templates/febs/views/layout.html +++ b/src/main/resources/templates/febs/views/layout.html @@ -1,178 +1,178 @@ -<div class="layui-layout layui-layout-admin" id="febs-layout"> - <div class="layui-header layui-anim febs-anim-down" id="app-header"> - <script type="text/html" - template - lay-done="layui.element.render('nav','febs-header')"> - <ul class="layui-nav layui-layout-left" lay-filter="febs-header"> - <li class="layui-nav-item" lay-unselect> - <a febs-event="flexible" title="侧边伸缩"> - <i class="layui-icon layui-icon-shrink-right"></i> - </a> - </li> - <span class="febs-breadcrumb"></span> - </ul> - <ul class="layui-nav layui-layout-right" lay-filter="febs-header"> - <li class="layui-nav-item layui-hide-xs" id="fullscreen" lay-unselect> - <a title="切换全屏"> - <i class="layui-icon layui-icon-screen-full"></i> - </a> - </li> - <li class="layui-nav-item layui-user" lay-unselect> - <a> - <img style="width: 1.9rem;margin-right:.5rem;border-radius: 50%" - src="{{= ctx + 'febs/images/avatar/' + currentUser.avatar }}" title="头像"> - {{ currentUser.username }} - </a> - <dl class="layui-nav-child"> - <dd><a class="layui-nav-child-href" id="user-profile">个人中心</a></dd> - <dd><a class="layui-nav-child-href" id="password-update">密码修改</a></dd> - <dd><a class="layui-nav-child-href" data-th-href="@{logout}">退出登录</a></dd> - </dl> - </li> - </ul> - </script> - </div> - - <div class="febs-tabs-hidden"> - <script type="text/html" id="TPL-app-tabsmenu" template> - {{# if(layui.conf.viewTabs){ }} - <div class="febs-tabs-wrap"> - <span class="febs-tabs-btn febs-tabs-action febs-tabs-prev" data-type="prev"> - <i class="layui-icon layui-icon-left"></i> - </span> - <span class="febs-tabs-btn febs-tabs-action febs-tabs-next" data-type="next"> - <i class="layui-icon layui-icon-right"></i> - </span> - <span class="febs-tabs-btn febs-tabs-action febs-tabs-down" data-type="down"> - <i class="layui-icon layui-icon-close"></i> - </span> - <ul class="febs-tabs-menu"> - {{# layui.each(layui.view.tab.data,function(i, item){ }} - <li data-type="page" class="febs-tabs-btn" lay-url="{{item.fileurl}}"> - <i class="febs-tabs-ball"></i>{{ item.title }}<b class="layui-icon layui-icon-close febs-tabs-close"></b> - </li> - {{# }) }} - </ul> - </div> - {{# } }} - </script> - </div> - - <!-- 侧边菜单 --> - <div class="layui-side" id="app-sidebar"> - <div class="layui-side-scroll"> - <div class="layui-logo" style="cursor: pointer"> - <img data-th-src="@{febs/images/logo.png}"> - <span>ExCoin 管理系统</span> - </div> - <script - type="text/html" - template - lay-api="getMenus" - lay-done="layui.element.render('nav','febs-sidebar');layui.febs.sidebarFocus()"> - <ul class="layui-nav layui-nav-tree" lay-filter="febs-sidebar" lay-shrink="all"> - {{# - function __createSlidebar(data,index){ - if(!data || data.length == 0) return ''; - var html = ' - <dl class="layui-nav-child">'; - layui.each(data, function(i, child) { - var left = index == 0 ? 50 : 50 + index * 20; - var title = child.title; - if (child.icon) { - title = '<i class="layui-icon '+child.icon+'"></i>' + child.title - } - html += ' - <dd><a style="padding-left:' + left + 'px" target="'+(child.target||'')+'" - lay-href="'+ (child.href||'') +'">' + title + '</a>'; - if(child.childs) html += __createSlidebar(child.childs,index+1); - html += '</dd>'; - }); - html = html +'</dl>'; - return html; - } - layui.each(d.childs, function(i,child){ - }} - <li class="layui-nav-item"> - <a lay-href="{{child.href||''}}" target="{{child.target||''}}" title="{{child.title}}"><i - class="layui-icon {{child.icon}}"></i>{{child.title}} {{# if(child.notice){ }}<span - class="layui-badge">{{ child.notice }}</span>{{# } }}</a> - {{ __createSlidebar(child.childs,0) }} - </li> - {{# }) }} - </ul> - </script> - </div> - </div> - <!-- 主体内容 --> - <div class="layui-body" id="febs-body"></div> -</div> -<script data-th-inline="javascript" type="text/javascript"> - layui.use(['jquery', 'febs', 'element'], function () { - var $ = layui.jquery, - $view = $('#febs-layout'), - febs = layui.febs; - - var element = layui.element; - - initTheme(); - - $view.find('#user-avatar').attr('src', ctx + "febs/images/avatar/" + currentUser.avatar); - - $view.on('click', '.layui-logo', function () { - febs.navigate("/index"); - }); - - $view.on('click', '#fullscreen', function () { - var $this = $(this); - var normalCls = 'layui-icon-screen-full'; - var activeCls = 'layui-icon-screen-restore'; - var ico = $this.find('.layui-icon'); - - if (ico.hasClass(normalCls)) { - var a = document.body; - a.webkitRequestFullScreen - ? a.webkitRequestFullScreen() - : a.mozRequestFullScreen - ? a.mozRequestFullScreen() - : a.requestFullScreen && a.requestFullscreen(); - ico.removeClass(normalCls).addClass(activeCls) - } else { - var b = document; - b.webkitCancelFullScreen - ? b.webkitCancelFullScreen() - : b.mozCancelFullScreen - ? b.mozCancelFullScreen() - : b.cancelFullScreen - ? b.cancelFullScreen() - : b.exitFullscreen && b.exitFullscreen(); - ico.removeClass(activeCls).addClass(normalCls) - } - }); - - $view.on('click', '#password-update', function () { - febs.modal.view('密码修改', 'password/update', { - area: $(window).width() <= 750 ? '90%' : '500px', - btn: ['确定'], - yes: function () { - $('#user-password-update').find('#submit').trigger('click'); - } - }); - }); - - $view.on('click', '#user-profile', function () { - febs.navigate("/user/profile"); - }); - - function initTheme() { - var theme = currentUser.theme; - var $sidebar = $('#app-sidebar'); - if (theme === 'black') { - $sidebar.removeClass('febs-theme-white'); - } - if (theme === 'white') { - $sidebar.addClass('febs-theme-white'); - } - } - }); +<div class="layui-layout layui-layout-admin" id="febs-layout"> + <div class="layui-header layui-anim febs-anim-down" id="app-header"> + <script type="text/html" + template + lay-done="layui.element.render('nav','febs-header')"> + <ul class="layui-nav layui-layout-left" lay-filter="febs-header"> + <li class="layui-nav-item" lay-unselect> + <a febs-event="flexible" title="侧边伸缩"> + <i class="layui-icon layui-icon-shrink-right"></i> + </a> + </li> + <span class="febs-breadcrumb"></span> + </ul> + <ul class="layui-nav layui-layout-right" lay-filter="febs-header"> + <li class="layui-nav-item layui-hide-xs" id="fullscreen" lay-unselect> + <a title="切换全屏"> + <i class="layui-icon layui-icon-screen-full"></i> + </a> + </li> + <li class="layui-nav-item layui-user" lay-unselect> + <a> + <img style="width: 1.9rem;margin-right:.5rem;border-radius: 50%" + src="{{= ctx + 'febs/images/avatar/' + currentUser.avatar }}" title="头像"> + {{ currentUser.username }} + </a> + <dl class="layui-nav-child"> + <dd><a class="layui-nav-child-href" id="user-profile">个人中心</a></dd> + <dd><a class="layui-nav-child-href" id="password-update">密码修改</a></dd> + <dd><a class="layui-nav-child-href" data-th-href="@{logout}">退出登录</a></dd> + </dl> + </li> + </ul> + </script> + </div> + + <div class="febs-tabs-hidden"> + <script type="text/html" id="TPL-app-tabsmenu" template> + {{# if(layui.conf.viewTabs){ }} + <div class="febs-tabs-wrap"> + <span class="febs-tabs-btn febs-tabs-action febs-tabs-prev" data-type="prev"> + <i class="layui-icon layui-icon-left"></i> + </span> + <span class="febs-tabs-btn febs-tabs-action febs-tabs-next" data-type="next"> + <i class="layui-icon layui-icon-right"></i> + </span> + <span class="febs-tabs-btn febs-tabs-action febs-tabs-down" data-type="down"> + <i class="layui-icon layui-icon-close"></i> + </span> + <ul class="febs-tabs-menu"> + {{# layui.each(layui.view.tab.data,function(i, item){ }} + <li data-type="page" class="febs-tabs-btn" lay-url="{{item.fileurl}}"> + <i class="febs-tabs-ball"></i>{{ item.title }}<b class="layui-icon layui-icon-close febs-tabs-close"></b> + </li> + {{# }) }} + </ul> + </div> + {{# } }} + </script> + </div> + + <!-- 侧边菜单 --> + <div class="layui-side" id="app-sidebar"> + <div class="layui-side-scroll"> + <div class="layui-logo" style="cursor: pointer"> + <img data-th-src="@{febs/images/logo.png}"> + <span>Biue 管理系统</span> + </div> + <script + type="text/html" + template + lay-api="getMenus" + lay-done="layui.element.render('nav','febs-sidebar');layui.febs.sidebarFocus()"> + <ul class="layui-nav layui-nav-tree" lay-filter="febs-sidebar" lay-shrink="all"> + {{# + function __createSlidebar(data,index){ + if(!data || data.length == 0) return ''; + var html = ' + <dl class="layui-nav-child">'; + layui.each(data, function(i, child) { + var left = index == 0 ? 50 : 50 + index * 20; + var title = child.title; + if (child.icon) { + title = '<i class="layui-icon '+child.icon+'"></i>' + child.title + } + html += ' + <dd><a style="padding-left:' + left + 'px" target="'+(child.target||'')+'" + lay-href="'+ (child.href||'') +'">' + title + '</a>'; + if(child.childs) html += __createSlidebar(child.childs,index+1); + html += '</dd>'; + }); + html = html +'</dl>'; + return html; + } + layui.each(d.childs, function(i,child){ + }} + <li class="layui-nav-item"> + <a lay-href="{{child.href||''}}" target="{{child.target||''}}" title="{{child.title}}"><i + class="layui-icon {{child.icon}}"></i>{{child.title}} {{# if(child.notice){ }}<span + class="layui-badge">{{ child.notice }}</span>{{# } }}</a> + {{ __createSlidebar(child.childs,0) }} + </li> + {{# }) }} + </ul> + </script> + </div> + </div> + <!-- 主体内容 --> + <div class="layui-body" id="febs-body"></div> +</div> +<script data-th-inline="javascript" type="text/javascript"> + layui.use(['jquery', 'febs', 'element'], function () { + var $ = layui.jquery, + $view = $('#febs-layout'), + febs = layui.febs; + + var element = layui.element; + + initTheme(); + + $view.find('#user-avatar').attr('src', ctx + "febs/images/avatar/" + currentUser.avatar); + + $view.on('click', '.layui-logo', function () { + febs.navigate("/index"); + }); + + $view.on('click', '#fullscreen', function () { + var $this = $(this); + var normalCls = 'layui-icon-screen-full'; + var activeCls = 'layui-icon-screen-restore'; + var ico = $this.find('.layui-icon'); + + if (ico.hasClass(normalCls)) { + var a = document.body; + a.webkitRequestFullScreen + ? a.webkitRequestFullScreen() + : a.mozRequestFullScreen + ? a.mozRequestFullScreen() + : a.requestFullScreen && a.requestFullscreen(); + ico.removeClass(normalCls).addClass(activeCls) + } else { + var b = document; + b.webkitCancelFullScreen + ? b.webkitCancelFullScreen() + : b.mozCancelFullScreen + ? b.mozCancelFullScreen() + : b.cancelFullScreen + ? b.cancelFullScreen() + : b.exitFullscreen && b.exitFullscreen(); + ico.removeClass(activeCls).addClass(normalCls) + } + }); + + $view.on('click', '#password-update', function () { + febs.modal.view('密码修改', 'password/update', { + area: $(window).width() <= 750 ? '90%' : '500px', + btn: ['确定'], + yes: function () { + $('#user-password-update').find('#submit').trigger('click'); + } + }); + }); + + $view.on('click', '#user-profile', function () { + febs.navigate("/user/profile"); + }); + + function initTheme() { + var theme = currentUser.theme; + var $sidebar = $('#app-sidebar'); + if (theme === 'black') { + $sidebar.removeClass('febs-theme-white'); + } + if (theme === 'white') { + $sidebar.addClass('febs-theme-white'); + } + } + }); </script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/login.html b/src/main/resources/templates/febs/views/login.html index 14dcf9b..927e443 100644 --- a/src/main/resources/templates/febs/views/login.html +++ b/src/main/resources/templates/febs/views/login.html @@ -19,7 +19,7 @@ <div class="layui-container"> <div class="layui-row"> <div class="layui-col-xs12 layui-col-lg4 layui-col-lg-offset4 febs-tc"> - <div class="layui-logo"><span><b>ExCoin</b> 后台系统</span></div> + <div class="layui-logo"><span><b>Biue</b> 后台系统</span></div> </div> <div class="layui-col-xs12 layui-col-lg4 layui-col-lg-offset4" id="login-div"> <div class="layui-form" lay-filter="login-form"> diff --git a/src/main/resources/templates/febs/views/modules/member/agentInfo.html b/src/main/resources/templates/febs/views/modules/member/agentInfo.html new file mode 100644 index 0000000..2f83ccf --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/member/agentInfo.html @@ -0,0 +1,109 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-user" 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="user-table-form"> + <div class="layui-row"> + <div class="layui-col-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input type="text" placeholder="手机号/邮箱/邀请码" name="account" autocomplete="off" class="layui-input"> + </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-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="userTable" lay-data="{id: 'userTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + laydate = layui.laydate, + febs = layui.febs, + form = layui.form, + table = layui.table, + dropdown = layui.dropdown, + $view = $('#febs-user'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'createTime', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initTable(); + + // 查询按钮 + $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}); + }); + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'userTable', + url: ctx + 'member/agentInfoList', + totalRow: true, + cols: [[ + {field: 'phone', title: '手机号码', minWidth: 120,align:'left',totalRowText: '合计'}, + {field: 'email', title: '邮箱', minWidth: 200,align:'left'}, + {field: 'inviteId', title: '邀请码UID', minWidth: 80,align:'center'}, + {field: 'returnRatio', title: '返佣比例', minWidth: 200,align:'center'}, + + {field: 'promotionNumber', title: '推广人数', minWidth: 200,align:'center'}, + {field: 'totalRecharge', title: '总充值', minWidth: 200,align:'center'}, + {field: 'totalWithdrawal', title: '总提现', minWidth: 200,align:'center'}, + {field: 'totalPerformance', title: '总业绩', minWidth: 200,align:'center'}, + + {field: 'levelId', title: '代理等级', + templet: function (d) { + return '<span style="color:green;">第'+d.levelId+'级</span>' + }, minWidth: 200,align:'center'}, + {field: 'feeIsSelf', title: '手续费是否设置自己', + templet: function (d) { + if(d.feeIsSelf === 1){ + return '<span style="color:green;">是</span>' + }else{ + return '<span style="color:red;">否</span>' + } + }, minWidth: 200,align:'center'}, + ]] + }); + } + + // 获取查询参数 + function getQueryParams() { + return { + account: $searchForm.find('input[name="account"]').val().trim(), + }; + } + + }) +</script> \ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index d9965c6..91ebb2c 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -3,7 +3,7 @@ xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> <head> <meta charset="utf-8"> - <title>ExCoin 后台系统</title> + <title>Biue 后台系统</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> -- Gitblit v1.9.1