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

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

服务器:Tomcat9.0, jdk1.8

项目构建:maven

数据库:mysql5.7

前端技术:vue、uniapp

服务端技术:springboot+mybatis-plus

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

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

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

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

文档截图:

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

微信小程序截图:

后台截图:

package io.renren.modules.renren.controller;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import io.renren.modules.renren.entity.TotalReplyEntity;
import io.renren.modules.renren.service.TotalReplyService;
import io.renren.common.utils.PageUtils;
import io.renren.common.utils.R;



@RestController
@RequestMapping("renren/totalreply")
public class TotalReplyController {
    @Autowired
    private TotalReplyService totalReplyService;

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

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

    /**
     * 列表
     */
    @RequestMapping("/listSearch")
    public R listSearch(Integer id){
        QueryWrapper<TotalReplyEntity> qw=new QueryWrapper<>();
        qw.eq("reply_id",id);
        List<TotalReplyEntity> list = totalReplyService.list(qw);

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


    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Integer id){
		TotalReplyEntity totalReply = totalReplyService.getById(id);

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

    /**
     * 保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody TotalReplyEntity totalReply){
		totalReplyService.save(totalReply);

        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody TotalReplyEntity totalReply){
		totalReplyService.updateById(totalReply);

        return R.ok();
    }

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

        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete2")
    public R delete2(String ids){
        totalReplyService.removeById(ids);

        return R.ok();
    }

}

<template>
 <view class="">
  <view style="padding: 20upx;border-bottom: 1upx solid #999999;display: flex;flex-direction: row;justify-content: space-around;margin: 30upx;">
   <view class="" @click="showDrawer">
    <image src="../../static/logo.jpg" style="width: 200upx;height: 200upx;border-radius: 21upx;"></image>
   </view>

   <view style="display: flex;flex-direction: column;margin:30upx 20upx 20upx -125upx;font-size: 29upx;">
    <text>账号: {{userTable.userName}}</text>
    <text>昵称: {{userTable.userReal}}</text>
    <text>手机: {{userTable.userPhone}}</text>
   </view>
    </view>
    <view style="display: flex;flex-direction: row;justify-content: space-around;">
      <button @click="showDrawer"  type="primary" size='mini' style="margin-right: 30upx;">修改信息</button>
      <button @click="logout" type="primary" size='mini'>退出登录</button>
    </view>
  <v-tabs v-model="current" :tabs="tabs" @change="changeTab"></v-tabs>
  <view v-if="showForum">
   <view class="news" v-for="items in dataList">
    <text @click="detaiForm(items.id)">{{items.forumTitle}}</text>
    <text @click="aaa(items.id)">{{items.createDate.substring(0,10)}}[删除]</text>
   </view>
  </view>
  <view v-if="showCollect">
   <view class="news" v-for="items in collectionList">
    <text @click="detai(items.forumId)">{{items.forumTitle}}</text>
    <text @click="delForm(items.id)">{{items.createDate.substring(0,10)}}[删除]</text>
   </view>

  </view>


  <uni-drawer ref="showRight" mode="right">
   <scroll-view style="height: 100%;" scroll-y="true">
    <view class=""
     style="margin-top: 20px;font-weight: bold;font-size: 21px;display: flex;justify-content: center;">
     修改个人信息
    </view>
    <view class="" style="padding: 20px;">
     <view class="" style="margin-bottom: 15px;">
      <uni-section title="昵称">
       <uni-easyinput v-model="userTable.userReal" placeholder="请输入内容">
       </uni-easyinput>
      </uni-section>
     </view>
     <view class="" style="margin-bottom: 15px;">
      <uni-section title="手机" type="line" padding>
       <uni-easyinput v-model="userTable.userPhone" placeholder="请输入内容">
       </uni-easyinput>
      </uni-section>
     </view>
     <view class="" style="margin-bottom: 15px;">
      <uni-section title="密码" type="line" padding>
       <uni-easyinput v-model="userTable.userPwd" placeholder="请输入内容">
       </uni-easyinput>
      </uni-section>
     </view>
    </view>
    <button @click="closeDrawer"
     style="display: flex;width: 100%;text-align: center;justify-content: center;" size="mini"
     type="warn">确定</button>
   </scroll-view>
  </uni-drawer>
 </view>
</template>

<script>
 import vTabs from '../../components/v-tabs/v-tabs.vue'
 export default {
  components: {
   vTabs
  },
  data() {
   return {
    id: '',
    dataList: [],
    collectionList: [],
    current: 0,
    showForum: true,
    showCollect: false,
    userTable: {},
    tabs: ['发布', '收藏'],

   }
  },
  onLoad() {
   this.initMy()
   this.initCollec()
   this.initForum()
  },
  onShow() {
   this.initMy()
   this.initCollec()
   this.initForum()
  },
  methods: {
   showDrawer() {
    console.log(JSON.stringify(this.userTable))
    this.$refs.showRight.open();
   },
   closeDrawer() {

    //修改个人信息
    uni.request({
     url: this.serverUrl + 'renren/usertable/update2',
     data: {
      id:this.userTable.id,
      userReal: this.userTable.userReal,
      userPhone: this.userTable.userPhone,
      userPwd: this.userTable.userPwd,
     },
     success(res) {
      uni.showToast({
       icon: 'none',
       title: '修改成功'
      })

     }
    })
    this.$refs.showRight.close();
   },
   detaiForm(id) {
    uni.navigateTo({
     url: '../totalforum/detail?id=' + id
    })
   },
   detai(id) {
    uni.navigateTo({
     url: '../totalforum/detail?id=' + id
    })
   },
   aaa(id) {
    var _this = this
    uni.request({
     url: _this.serverUrl + 'renren/totalforum/deleteid?id=' + id,
     success(res) {
      _this.initForum()
      uni.showToast({
       icon: 'none',
       title: '删除成功'
      })

     }
    })

   },
   delForm(id) {
     let _this=this;
    uni.request({
     url: this.serverUrl + 'renren/usercollection/deleteid?id=' + id,
     success(res) {
            _this.initCollec()
      uni.showToast({
       icon: 'none',
       title: '删除成功'
      })

     }
    })

   },

   initCollec() {
    var _this = this
    var usersName = uni.getStorageSync('usersName')
    uni.request({
     url: _this.serverUrl + 'renren/usercollection/SerrchUse',
     data: {
      userName: usersName
     },
     success(res) {

      /* debugger */
      _this.collectionList = res.data.userCollectionList
     }
    })
   },
   initMy() {
    var _this = this
    var usersName = uni.getStorageSync('usersName')

    uni.request({
     url: _this.serverUrl + 'renren/usertable/searchU?userName=' + usersName,
     method: 'POST',
     success(res) {
      _this.userTable = res.data.userTable
     }
    })
   },
   initForum() {
    var _this = this
    var usersName = uni.getStorageSync('usersName')
    uni.request({
     url: _this.serverUrl + 'renren/totalforum/searchU?userName=' + usersName,
     method: 'POST',
     success(res) {
      _this.dataList = res.data.totalForumList
     }
    })
   },
   changeTab(index) {
    var _this = this
    if (index == 0) {
     _this.showForum = true
     _this.showCollect = false
    } else {
     _this.showCollect = true
     _this.showForum = false
    }
   },
      logout(){
        uni.navigateTo({
          url: '../login/login'
        })
      }
  }
 }
</script>

<style>
 .news {

  margin: 20upx;
  display: flex;
  flex-direction: row;
  border-bottom: 1upx dashed #999999;
  padding: 10upx;
  font-size: 29upx;
  justify-content: space-between
 }
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值