基于微信小程序校内论坛系统

news2025/1/12 4:01:42

开发工具:IDEA、微信小程序

服务器:Tomcat9.0, jdk1.8

项目构建:maven

数据库:mysql5.7

前端技术:vue、uniapp

服务端技术:springboot+mybatis-plus

本系统分微信小程序和管理后台两部分,项目采用前后端分离

系统主要分为两个角色:管理员和普通用户。

1.普通用户(小程序):登录、注册、首页、论坛信息(查询、发布、回复、收藏)、我的(修改信息、我的发布、我的收藏、退出登录)。

2.管理员(后台):登录、首页、公告管理、新闻管理、论坛管理、用户管理、个人中心(收藏管理)、系统管理(管理员管理、角色管理、菜单管理、系统日志)、退出登录、修改密码等功能的管理

文档截图:

 微信小程序截图: 

 

 

 

 

 

 

 

 

 

 

后台截图:

 

 

 

 

 

 

 

 

 

 

 

 

package io.renren.modules.renren.controller;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Map;

import io.renren.modules.renren.file.FileUploadController;
import io.renren.modules.util.FileUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import io.renren.modules.renren.entity.NewImgEntity;
import io.renren.modules.renren.service.NewImgService;
import io.renren.common.utils.PageUtils;
import io.renren.common.utils.R;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

@RestController
@RequestMapping("renren/newimg")
public class NewImgController {
    @Autowired
    private NewImgService newImgService;

    @Value("${renren.uploadUrl}")
    private String uploadUrl;

    @Resource
    private FileUploadController fileUploadController;


    /**
     * 保存MultipartFile files
     */
    @PostMapping("/save")
    public R save(@RequestParam("files") MultipartFile files, String newsTitle,
                   String newsContetn
    ) throws Exception {
        String fileUrl;
        if (!files.isEmpty() && files != null) {
            fileUrl= fileUploadController.upload(files);
            NewImgEntity newImgEntity = new NewImgEntity();
            newImgEntity.setNewsTitle(newsTitle);
            newImgEntity.setNewsContetn(newsContetn);

            newImgEntity.setImgSrc(fileUrl);

            newImgService.save(newImgEntity);
            return R.ok();
        } else {
            return R.error();
        }
    }

    /**
     * 列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params) {
        PageUtils page = newImgService.queryPage(params);

        return R.ok().put("page", page);
    }


    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Integer id) {
        NewImgEntity newImg = newImgService.getById(id);
        newImg.setImgSrc(uploadUrl+newImg.getImgSrc());
        return R.ok().put("newImg", newImg);
    }

    /**
     * 修改
     */
    @RequestMapping("/update2")
    public R update(Integer id, String newsTitle, String newsContetn) throws Exception {
        NewImgEntity newImgEntity = new NewImgEntity();
        newImgEntity.setId(id);
        newImgEntity.setNewsTitle(newsTitle);
        newImgEntity.setNewsContetn(newsContetn);
        newImgService.updateById(newImgEntity);
        return R.ok();
    }

    @PostMapping("/update")
    public R update(@RequestParam("files") MultipartFile files,Integer id, String newsTitle, String newsContetn) throws Exception {
        String fileUrl;
        if (!files.isEmpty() && files != null) {
            fileUrl= fileUploadController.upload(files);
            NewImgEntity newImgEntity = new NewImgEntity();
            newImgEntity.setId(id);
            newImgEntity.setNewsTitle(newsTitle);
            newImgEntity.setNewsContetn(newsContetn);

            newImgEntity.setImgSrc(fileUrl);

            newImgService.updateById(newImgEntity);
            return R.ok();
        } else {
            return R.error();
        }
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids) {
        newImgService.removeByIds(Arrays.asList(ids));

        return R.ok();
    }

}
<template>
 <view class="">
  <view class="">
   <swiper style="height: 370upx;" :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000">
    <swiper-item v-for="item3 in banner">
     <view class="swiper-item">
      <image :src="item3.src" style="width: 100%;"></image>
     </view>
    </swiper-item>
   </swiper>
  </view>
  <view
   style="display: flex;flex-direction: row;font-size: 27upx;margin: 27upx;border-bottom: 1upx dashed #999999;padding: 10upx;">
   <view class="">
    公告:
   </view>
   <view class="" v-if="noteMsg.newsTitle" @click="noteBtn(noteMsg.id)">
    {{noteMsg.newsTitle.substring(0,23)}}
   </view>
  </view>
  <view style="display: flex;flex-direction: column;margin: 20upx;">
   <view style="border-bottom: 1upx solid #999999;padding: 10upx;font-size: 32;font-weight: 600;">
    校园新闻
   </view>
   <view class="news" v-for="items in newsList" @click="newsBtn(items.id)">
    <text>{{items.newsTitle}}</text>
    <text>{{items.createDate.substring(0,10)}}</text>
   </view>

  </view>
  <view
   style="margin-left: 20upx;border-bottom: 1upx solid #999999;padding: 10upx;font-size: 32;font-weight: 600;">
   图片新闻
  </view>
  <view style="font-size: 27upx;display: flex;flex-direction: row;margin: 16upx;justify-content: flex-start;flex-wrap: wrap;">
   <view @click="imgBtn(items.id)" style="display: flex;flex-direction: column;" v-for="items in imgList">
    <view class="">
     <image :src="items.imgSrc" class="newsImg"></image>
    </view>
    <view class="">
     {{items.newsTitle}}
    </view>
   </view>

  </view>
 </view>
</template>

<script>
 export default {
  data() {
   return {
    noteTxt: '',
    newsList: [],
    imgList: [],
    noteMsg:{},
    banner: [{
      src: "../../static/images/xiaoyuan.png"
     },
     {
      src: "../../static/images/xiaoyua2.png"
     }
    ]
   }
  },
  onLoad() {
   this.initNews()
   this.initImg()
   this.initNote()
  },
  methods: {
   newsBtn(id){
    uni.navigateTo({
     url:'./newmsg?id='+id
    })
   },
   noteBtn(id){
    uni.navigateTo({
     url:'./notemsg?id='+id
    })
   },
   imgBtn(id){
    uni.navigateTo({
     url:'./imgmsg?id='+id
    })
   },
   initNews() {
    var _this = this
    uni.request({
     url: _this.serverUrl + 'renren/newmsg/list',
     success(res) {
      if (res.data.code == 0) {
       _this.newsList = res.data.page.list
      }
     }
    })
   },
   initImg() {
    var _this = this
    uni.request({
     url: _this.serverUrl + 'renren/newimg/list',
     success(res) {

      if (res.data.code == 0) {
       /* debugger */
       _this.imgList = res.data.page.list
      }
     }
    })
   },
   initNote(){
    var _this = this
    uni.request({
     url: _this.serverUrl + 'renren/notemsg/list2',
     success(res) {
      if (res.data.code == 0) {
       _this.noteMsg = res.data.NoteMsg
      }
     }
    })
   }

  }
 }
</script>

<style>
 .newsImg {
  width: 230upx;
  height: 150upx;
 }

 .news {
  margin-top: 10upx;
  display: flex;
  flex-direction: row;
  font-size: 29upx;
  justify-content: space-between
 }

 .content {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
 }

 .logo {
  height: 200rpx;
  width: 200rpx;
  margin-top: 200rpx;
  margin-left: auto;
  margin-right: auto;
  margin-bottom: 50rpx;
 }

 .text-area {
  display: flex;
  justify-content: center;
 }

 .title {
  font-size: 36rpx;
  color: #8f8f94;
 }
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/525336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神马网络——IP地址

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。个人主页&#xff1a;小李会科技的…

ChatGPT提示词技巧

自计算机问世以来&#xff0c;人类与计算机之间的交互方式已经经历过几个重要的阶段&#xff1a; 指令式交互&#xff08;Command-based Interaction&#xff09; 早期的计算机系统主要采用了指令式交互方式&#xff0c;用户需要输入特定的命令或代码来完成各种任务。这种交…

软件与硬件的联调之小程序与云平台相互通信

软件与硬件的联调之小程序与云平台相互通信 本人专注使用云开发&#xff0c;实现一个前端可以做后端以及整个项目的部署与上线。 如果觉得我讲的好就可以给我点个赞。 #mermaid-svg-xJRh48GCcG2gzlqz {font-family:"trebuchet ms",verdana,arial,sans-serif;font-si…

深度学习之图像分类识别(二):ZFNet

本专栏介绍基于深度学习进行图像识别的经典和前沿模型&#xff0c;将持续更新&#xff0c;包括不仅限于&#xff1a;AlexNet&#xff0c; ZFNet&#xff0c;VGG&#xff0c;GoogLeNet&#xff0c;ResNet&#xff0c;DenseNet&#xff0c;SENet&#xff0c;MobileNet&#xff0c…

我的第一个Electron应用

hello&#xff0c;好久不见&#xff0c;最近笔者花了几天时间入门Electron&#xff0c;然后做了一个非常简单的应用&#xff0c;本文就来给各位分享一下过程&#xff0c;Electron大佬请随意~ 笔者开源了一个Web思维导图&#xff0c;虽然借助showSaveFilePicker等api可以直接操…

【C#】接口实现多态增强版

背景 在实际的生产中&#xff0c;会涉及到需要对接多种相似性较高的系统。具体而言就是业务接口是相同的&#xff0c;但是会出现接口的参数不同的情况。这时做一个对接隔离层就显得优势很明显了。这个隔离层的作用就有了两个基本的作用&#xff1a; 1、单一性&#xff0c;保护我…

【网络】- TCP/IP四层(五层)协议 - 物理层

目录 一、概述 二、物理层的基本概念 三、OSI 参考模型  &#x1f449;3.1 导引型传输媒体  &#x1f449;3.1 导引型传输媒体 一、概述 TCP/IP 在最初定义时&#xff0c;是一个四层的体系结构&#xff0c;包括应用层、传输层、网络层、网络接口层。不过从实质上来讲&#xf…

Makefile基础教程(变量的高级主题,变量的拓展)

文章目录 前言一、变量值的替换1.简单替换2.模式替换1.变量的模式替换2.规则中的模式替换 二、变量值的嵌套三、命令行变量四、define和override五.环境变量六.局部变量七.模式变量 总结 前言 本篇文章将给大家讲解一下变量的高级主题&#xff0c;变量的拓展&#xff0c;这些主…

详解C++类和对象(下篇)

目录 一&#xff0c;再谈构造函数 1.1 构造函数体赋值 1. 2 初始化列表 1.21 自定义类型成员 1.22 const 成员变量 1.23 引用成员变量 1. 24 初始化列表的“坑” 1. 3 explicit 关键字 二&#xff0c;static 成员 2.1 概念 2.2 特性 三&#xff0c; 友元 3.…

阿里云数据库RDS MySQL Serverless测评

文章目录 1. 背景2. 概念3. 操作步骤3.1 购买产品3.2 配置RDS账号3.3 设置网络访问权限3.4 连接实例 4. 与自建数据库相比的优势4.1 弹性设置4.2 监控比较直观4.3 报警比较灵活4.4 备份更安全、更方便 5. 总结 1. 背景 作为一枚程序员&#xff0c;在日常工作中少不了跟云产品打…

Linux C/C++并发编程实战(0)谈谈并发与并行

作为并发编程的第一讲&#xff0c;比较轻松&#xff0c;我们先来谈谈什么是并发和并行。 并发&#xff08;Concurrency&#xff09;是指一个处理器同时处理多个任务。 并行&#xff08;Parallelism&#xff09;是指多个处理器或者是多核的处理器同时处理多个不同的任务。 并发…

git rebase的理解

首先看下图 比如提价了三次&#xff0c;都是同一个文件的修改&#xff0c;有三次commit的信息 想把提交的版本信息变的好看一点&#xff0c;或者变成一次提交信息 // 这个表示要查看提交的三个版本并进行合并 git rebase -i HEAD~~~// 如何要合并多个版本 git rebase -i HEA…

媲美ChatGPT4的免费工具来了!傻瓜式教程不用魔法也能使用!

嗨呀 又是元气满满的一周啦 废话不多说直接进入正题&#xff0c;仅在注册时可能需要使用一些科学方法&#xff0c;使用完全无限制 优势 对中文的支持非常强大 无需魔法上网 不受限制 免费&#xff01;&#xff01;&#xff01; 实测优于ChatGPT3.5&#xff0c;略逊于4.0&…

vue-7:组件库(移动端vant)(PC端element)

移动端vant 插件安装&#xff08;按需导入&#xff09; 重启生效 # 通过 npm 安装 npm i unplugin-vue-components -D# 通过 yarn 安装 yarn add unplugin-vue-components -D 导入基于 vite 的项目&#xff1a; 如果是基于 vite 的项目&#xff0c;在 vite.config.js 文件中…

Git详细用法:Git概述 安装 常用命令 分支操作 团队协作 、GitHub、idea集成Git、idea集成GitHub、Gitee 码云、GitLab

0 课程介绍 说明&#xff1a; 在公司想要使用idea集成git&#xff1a; 首选需要下载安装Git&#xff08;查看第2章&#xff09;之后在中设置用户签名&#xff08;查看3.1&#xff09;然后在idea中集成Git&#xff08;查看第7章&#xff09;… 0.1 学习目标 第1章 Git 概述 …

高级语句(二)

一、VIEW&#xff08;视图&#xff09; 1、 概念 可以被当作是虚拟表或存储查询 视图跟表格的不同是&#xff0c;表格中有实际储存资料&#xff0c;而视图是建立在表格之上的一个架构&#xff0c;它本身并不实际储存资料。 临时表在用户退出或同数据库的连接断开后就自动消…

关于预处理器 sass 的超全用法

随着用户需求的增加&#xff0c;应用于页面的 css 代码越来越复杂越发臃肿难以维护&#xff0c;但是又没有 css 的替代品&#xff0c;css 预处理器作为 css 的扩展&#xff0c;出现在前端技术中。 sass 是 css 预处理器中常用的一种&#xff0c;它是一种动态样式语言&#xff0…

基于html+css图展示58

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

C++系列九:预处理功能

预处理功能 1. 宏定义2. 文件包含3. 条件编译4. 代码注释5. 预处理器注意事项6. 总结 预处理器是 C 编译器提供的一个工具&#xff0c;允许程序员在编译之前对源代码文件做出修改。它主要是根据在代码中命名实体的定义&#xff08;如宏、条件编译指令&#xff09;、源文件调用等…

分布函数有什么意义?

累积分布函数&#xff08;CDF&#xff09;有什么意义&#xff1f; 参考文献&#xff1a;姜咏梅. 浅析分布函数的意义与应用[J]. 科学与财富,2014(10):207-207,208. DOI:10.3969/j.issn.1671-2226.2014.10.183. 关于PMF、PDF、CDF的介绍&#xff0c;移步至我的笔记&#xff1a…