在线交流平台

  系统介绍

        系统将使用Tomcat服务器部署Java环境,使用Eclipse开发软件,系统采用B/S架构,采用面向对象编程思想,对系统进行分层,通过MVC模式将系统分为控制器,视图及模型三部分,后台使用Java语言在WEB平台上用spring+spring mvc+mybatis为核心技术框架将其整合完成相关设计;模型层通过JDBC技术连接MySQL数据库,进行持久化数据存储,对使用架构模块进行分析验证和问题总结,在分析总结的基础上对网站中涉及到的功能需求进行技术选择,以求构建一个功能完善的网站。

    功能模块    系统主要包含管理员和用户两类用户,管理员拥有以下功能。

  1. 公告模块:主要实现撰写公告通知、发布活动消息等。
  2. 审核模块:主要包括对用户帖子内容进行审核,对涉及不良信息的帖子及所属账号进行处理。
  3. 权限管理模块:主要实现赋予管理员权限,对VIP用户,版主,普通用户,游客等进行相应的等级升降并赋予不同的操作权限。
  4. 统计模块:注册总人数、当前贴子总数、贴子点击总数、当前在线人数,版面点击数等进行统计,更直观的表现一些实时信息。

用户拥有以下功能:

  1. 登录/注册模块:主要实现用户注册、登录账号。
  2. 个人信息模块:主要实现对用户基本信息以及用户头像的显示以及修改功能,可充值‘论坛币’以进行打赏帖子。
  3. 帖子分类模块:主要实现帖子信息的大体展示,帖子分类展示或根据导航栏现实的分类进行跳转,主要进行单一类别帖子的展示功能。
  4. 帖子详情模块:主要实现某条帖子详情的展示,包括多级评论回复功能,还包括点赞、收藏、打赏、举报等小功能。
  5. 撰帖/删贴模块:主要实现帖子的编写并发帖;还包含草稿箱功能:未写完的帖子可以存入草稿箱,或从草稿箱中读取曾经保存的草稿。删除已经无用的帖子等功能。

    文章管理模块的控制:

@Controller
@RequestMapping("articleComplaint")
public class ArticleComplaintController {

    @Autowired
    private ArticleComplaintService articleComplaintService;
    @Autowired
    private UserService userService;
    @Autowired
    private ArticleService articleService;
    /**
     * 投诉
     * @param articleComplaintEntity
     * @return
     * @throws Exception
     */
    @RequestMapping("insert.htmx")
    @ResponseBody
    public Result insert(ArticleComplaintEntity articleComplaintEntity, HttpSession session)throws Exception{
        UserEntity userEntity = (UserEntity) session.getAttribute("user");
        articleComplaintEntity.setId(IdWorker.get32UUID());
        articleComplaintEntity.setTime(new Date());
        articleComplaintEntity.setStatus(1);
        articleComplaintEntity.setUid(userEntity.getId());
        articleComplaintService.insert(articleComplaintEntity);
        return Result.success("感谢您的投诉,我们将尽快处理");
    }



    /**
     * 列表
     * @param model
     * @return
     * @throws Exception
     */
    @GetMapping("indexPage.htm")
    public String indexPage(Model model)throws Exception{
        return "articleComplaint/list";
    }


    /**
     * 分页
     * @param model
     * @return
     * @throws Exception
     */
    @GetMapping("page.htm")
    @ResponseBody
    public PageVo indexPage(Model model, int page , int limit)throws Exception{

        EntityWrapper entityWrapper = new EntityWrapper();
        entityWrapper.orderBy("status",true).orderBy("time",false);
        Page< ArticleComplaintEntity> paged = new Page();
        paged.setSize(limit);
        paged.setCurrent(page);
        Page<ArticleComplaintEntity> userTablePage = articleComplaintService.selectPage(paged, entityWrapper);

        List<ArticleComplaintEntity> list =userTablePage.getRecords();
        if(list!=null){
            for (ArticleComplaintEntity entity : list) {
                UserEntity userEntity = userService.selectById(entity.getUid());
                if(userEntity!=null){
                    entity.setName(userEntity.getName());
                }
                ArticleEntity articleEntity = articleService.selectById(entity.getAid());
                if(articleEntity!=null){
                    entity.setTitle(articleEntity.getTitle());
                }
            }
        }
        PageVo<ArticleComplaintEntity> pageVo = new PageVo<>();
        pageVo.setCode(0);
        pageVo.setCount(paged.getTotal());
        pageVo.setData(userTablePage.getRecords());
        pageVo.setPageNum(limit);
        pageVo.setPageSize(page);
        return pageVo;

    }

    /**
     * 保存
     * @param model
     * @return
     */
    @PostMapping("save.htm")
    @ResponseBody
    public Result savePage(Model model , ArticleComplaintEntity entity){
        articleComplaintService.updateById(entity);
        return Result.success("用户保存成功");
    }




}

 系统的首页展示:

<head>
    <meta charset="utf-8">
    <title>在线交流平台</title>
    <link rel="stylesheet" href="/resources/res/layui/css/layui.css">
    <link rel="stylesheet" href="/resources/res/css/global.css">
</head>
<body  style="">

<div class="fly-header layui-bg-black">
    <div class="layui-container">
        <a class="fly-logo" href="/">
            <img src="/resources/images/logo.jpg" style="height: 40px;" alt="layui">
        </a>
        <ul class="layui-nav fly-nav-user">
            <li class="layui-hide-xs layui-hide-sm layui-show-md-inline-block" ><input type="text"  value="${title}" id="title" class="layui-input"></li>
            <li class="layui-hide-xs layui-hide-sm layui-show-md-inline-block" style="margin-left: 15px;"><a class="layui-btn layui-btn-primary" onclick="sunsec()">搜索</a></li>
            <!-- 未登入的状态 -->
            <c:if test="${loginFlag== false}">
                <li class="layui-nav-item">
                    <a class="iconfont icon-touxiang layui-hide-xs" onclick="login()"></a>
                </li>
                <li class="layui-nav-item">
                    <a style="cursor:pointer"  onclick="login()" >登入</a>
                </li>
                <li class="layui-nav-item">
                    <a style="cursor:pointer"  onclick="reg()">注册</a>
                </li>
            </c:if>
            <c:if test="${loginFlag== true}">
                <input type="hidden" id="userLv" value="${user.lv}">
                <li class="layui-nav-item">
                    <a class="fly-nav-avatar" href="javascript:;">
                        <cite class="layui-hide-xs">${user.name}</cite>
                        <c:if test="${user.lv<3}">
                            <i class="layui-badge fly-badge-vip layui-hide-xs" onclick="vip()">升级VIP</i>
                        </c:if>
                        <c:if test="${user.lv==3}">
                            <i class="layui-badge fly-badge-vip layui-hide-xs">${user.integralName}</i>
                        </c:if>
                        <img src="${user.headerImg}">
                    </a>
                    <dl class="layui-nav-child">
                        <dd><a href="/userInfo/info.htmx"><i class="layui-icon" style="margin-left: 2px; font-size: 22px;">&#xe68e;</i>我的主页</a></dd>
                        <hr style="margin: 5px 0;">
                        <dd><a href="/logOut.htmx" style="text-align: center;">退出</a></dd>
                    </dl>
                </li>
            </c:if>
        </ul>
    </div>
</div>
<div style="height: 10px;">
</div>
<div class="fly-panel"  style="position: absolute;right: 50px;width: 200px;height: 300px;">
    <div class="fly-panel-title fly-filter" style="background-color: #AFCEED">
        <a>站长统计</a>
    </div>
    <ul style="text-align: center;">
        <li style="margin-top: 20px;">
            <span style="color: #01AAED"> 帖子点击总量:</span>  ${countA}
        </li>
        <li style="margin-top: 20px;">
            <span style="color: #01AAED">注册人数:</span> ${countUser}
        </li>
        <li style="margin-top: 20px;">
            <span style="color: #01AAED">平台帖子总数:</span> ${countActivity}
        </li>

    </ul>
</div>
<div class="layui-container" >
    <div class="layui-row layui-col-space15">
        <div class="layui-col-md12" >



            <c:if test="${content!=''}">
                <div class="fly-panel" >
                    <div class="fly-panel-title fly-filter">
                        <a>公告</a>
                    </div>
                    <ul class="fly-list">
                        <li>
                            <div class="fly-list-info">
                                <a   >
                                    <cite>${content}</cite>
                                </a>
                            </div>
                        </li>
                    </ul>
                </div>
            </c:if>
            <div class="fly-panel">
                <div class="fly-panel-title fly-filter">
                    <a>置顶</a>
                </div>
                <ul class="fly-list">
                    <c:forEach items="${topArticle}" var="article">
                        <li>
                            <a href="/article/info.htmx?id=${article.id}" class="fly-avatar">
                                <img src="${article.cover}" >
                            </a>
                            <h2>
                                <a class="layui-badge">置顶</a>
                                <a href="/article/info.htmx?id=${article.id}" target="view_window" >${article.title}</a>
                            </h2>
                            <div class="fly-list-info">
                                <a href="#" target="view_window"  >
                                    <cite>${article.userName}</cite>
                                    <c:if test="${article.userId != '-1'}">
                                        <i class="layui-badge fly-badge-vip">${article.integralName}</i>
                                    </c:if>
                                </a>
                                <span>${article.time}</span>
                                <span class="fly-list-nums"><i class="iconfont icon-pinglun1" title="评论"></i> ${article.num}</span>
                            </div>
                        </li>
                    </c:forEach>
                </ul>
            </div>
            <div class="fly-panel" style="margin-bottom: 0;">
                <div class="fly-panel-title fly-filter">
                    <a style="cursor:pointer"  class="layui-this types" onclick="typek(this,'')" >综合</a>
                    <c:forEach items="${childTypes}" var="childType">
                        <span class="fly-mid"></span>
                        <a style="cursor:pointer"  class="types" onclick="typek(this,'${childType.id}')"  >${childType.name}</a>
                    </c:forEach>
                    <span class="fly-filter-right layui-hide-xs"><a href="" class="layui-this">按最新排序</a><span class="fly-mid"></span></span>
                </div>
                <ul class="fly-list">
                    <c:forEach items="${articleEntities}" var="article">
                        <li class=" article ${article.childType}">
                            <a href="/article/info.htmx?id=${article.id}" class="fly-avatar">
                                <img src="${article.cover}" >
                            </a>
                            <h2>
                                <a class="layui-badge" >${article.childName}</a>
                                <a href="/article/info.htmx?id=${article.id}" target="view_window" >${article.title}</a>
                            </h2>
                            <div class="fly-list-info">
                                <a href="#" target="view_window">
                                    <cite  >${article.userName}</cite>
                                    <c:if test="${article.userId != '-1'}">
                                        <i class="layui-badge fly-badge-vip">${article.integralName}</i>
                                    </c:if>
                                </a>
                                <span>${article.time}</span>
                                <span class="fly-list-nums">
                                <i class="iconfont icon-pinglun1" title="评论数量"></i> ${article.num}
                            </span>
                            </div>
                        </li>
                    </c:forEach>
                </ul>
            </div>
        </div>
    </div>
</div>

<div class="fly-footer" style="background-color: black;color: white">
    <p><a  target="_blank">博客</a> 2020 &copy; <a target="_blank">xxxx 出品</a></p>
</div>

<script src="/resources/res/layui/layui.js"></script>
<script src="/resources/jquery-2.2.4.js"></script>
<script src="/resources/base.js"></script>
<script>
    layui.config({
        version: "3.0.0"
        ,base: '/resources/res/mods/' //这里实际使用时,建议改成绝对路径
    }).extend({
        fly: 'index'
    }).use(['fly','layer'],function () {

    });
    function sunsec(){
        window.location.href="/?title="+$("#title").val();
    }

    
    $(function () {
        setTimeout(userLv,1000)

    });
    
    function userLv() {
        var userLv =$("#userLv").val();
        if(userLv==1){
            //自定页
            layer.alert('抱歉,您已被降级,将无法进行发帖以及评论功能',{
                title:"用户等级提示",
                skin: 'layui-layer-demo', //样式类名
                closeBtn: 0, //不显示关闭按钮
                anim: 2,
                shadeClose: true, //开启遮罩关闭
                icon:2,
            });

        }
    }


    /**
     * vip充值
     */
    function vip() {
        layui.layer.open({
            type: 2,
            title: 'vip充值',
            shadeClose: true,
            shade: 0.8,
            area: ['800px', '645px'],
            content: '/user/vip.htmx' //iframe的url
        });
    }


    function typek(b,type) {
        $(".types").removeClass("layui-this");
        $(b).addClass("layui-this");
        if(type==""){
            $(".article").show();
        }else{
            $(".article").hide();
            $("."+type).show();
        }
    }


    function yuedu(id) {
        window.open('/article/info.htmx?id='+id);
    }

    function login() {
        layui.layer.open({
            type: 2,
            title: '用户登录',
            shadeClose: true,
            shade: 0.8,
            area: ['600px', '445px'],
            content: '/login.htmx' //iframe的url
        });
    }

    function reg() {
        layui.layer.open({
            type: 2,
            title: '游客注册',
            shadeClose: true,
            shade: 0.8,
            area: ['600px', '445px'],
            content: '/reg.htmx' //iframe的url
        });
    }

    function sunmitStu(){
        window.open("/study.htmx");
    }


    function fabiao() {
        layui.layer.open({
            type: 2,
            title: '发表文章',
            shadeClose: true,
            shade: 0.8,
            area: ['90%', '90%'],
            content: '/article/add.htmx' //iframe的url
        });
    }

</script>


</body>

     后台管理登录入口:

         用户注册:

 

      用户的个人主页:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值