大家好,我是java1234_小鋒老師,看到一個不錯的SpringBoot+Vue在線教育(在線學習)系統(高級版)【論文+源碼+SQL腳本】,分享下哈。
項目視頻演示
【免費】SpringBoot+Vue在線教育(在線學習)系統(高級版) Java畢業設計_嗶哩嗶哩_bilibili
項目介紹
隨著信息技術和計算機網絡技術的迅猛發展,改變了傳統的課堂教學模式,各種嶄新的學習理念和技術逐漸的被吸收并引進到學習過程中,這極大的改變了人們的學習和工作方式。由于突破了傳統學習模式時間和空間上的限制,在線協作學習模式對于培養學習者的協作探索意識、提高學習者的綜合素質等方面作出了突出的貢獻,因而日漸引起人們的重視和效仿,各種在線學習平臺也層出不窮。但現有教學平臺多數強調以教師為中心,強調對于學習資源的組織和開發,導致開發出的學習平臺缺乏交互性和協作性,不能充分調動學習者的學習興趣。在線學習是現代教育的一種重要的形式,是教育發展的一個重要分枝。通過基于 Internet 的在線學習,使人們可以在任何時間、任何地點學習。同時發展網絡教育也是我國發展教育信息化、實現教育事業跨越性發展最有效、最現實的選擇。隨著網絡技術和教育理論的飛速發展,在線學習系統的建設過程中,以往的 JSP 形式的系統已不能完全滿足在線學習平臺方便維護、簡易開發、可擴展的需求。為了達到對數據和信息進行較好的組織和整合,使知識得到更高效、流暢、快速 傳播,以及方便學生獲得更貼身的個性化服務和滿足 Web 應用需求的日益增長,開發高質量的 Web 應用系統,滿足社會需要,構建高質量的在線學習環境已經成為當前在線學習發展需要研究的熱點問題。目前,多數學習平臺的開發都會有效的采用框架技術,即應用一種框架作為整個平臺設計和開發的基礎。在這種框架的設計和實現中,大多都包含數據庫訪問、安全性、個性化、擴展性等等大量的軟件技術,這些技術不僅要整合在一起,而且它們之間還要相互通信和訪問。因此,怎樣保證在線學習系統的簡單高效的程序編寫;怎樣保證系統的安全性、可交互性和易維護性;如何提供簡易的開發和擴展方式;怎樣適應復雜的 Web 環境、滿足多種多樣的學者需求、提高平臺效率的框架構建方案的探討和實現是十分重要和有意義的。為了達到這個課題的研究目的,幫助開發人員在較短時間內搭建結構清晰、可復用性好、維護方便、可擴展的 Web 應用系統框架,就需要綜合現 在先進的技術、設計模式、開發理念,探索和研究一套更加適合目前的在線學習教學特點的平臺。
系統展示
部分代碼
package com.ape.apeadmin.controller.article;import com.ape.apecommon.annotation.Log;
import com.ape.apecommon.domain.Result;
import com.ape.apecommon.enums.BusinessType;
import com.ape.apecommon.enums.ResultCode;
import com.ape.apeframework.utils.ShiroUtils;
import com.ape.apesystem.domain.*;
import com.ape.apesystem.service.ApeArticleCommentService;
import com.ape.apesystem.service.ApeArticleFavorService;
import com.ape.apesystem.service.ApeArticleService;
import com.ape.apesystem.service.ApeTaskService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;import java.util.ArrayList;
import java.util.List;/*** @author 超級管理員* @version 1.0* @description: 筆記controller* @date 2025/11/20 09:14*/
@Controller
@ResponseBody
@RequestMapping("article")
public class ApeArticleController {@Autowiredprivate ApeArticleService apeArticleService;@Autowiredprivate ApeTaskService apeTaskService;@Autowiredprivate ApeArticleFavorService apeArticleFavorService;@Autowiredprivate ApeArticleCommentService apeArticleCommentService;/** 分頁獲取筆記 */@Log(name = "分頁獲取筆記", type = BusinessType.OTHER)@PostMapping("getApeArticlePage")public Result getApeArticlePage(@RequestBody ApeArticle apeArticle) {Page<ApeArticle> page = new Page<>(apeArticle.getPageNumber(),apeArticle.getPageSize());QueryWrapper<ApeArticle> queryWrapper = new QueryWrapper<>();queryWrapper.lambda().eq(StringUtils.isNotBlank(apeArticle.getUserId()),ApeArticle::getUserId,apeArticle.getUserId()).like(StringUtils.isNotBlank(apeArticle.getTitle()),ApeArticle::getTitle,apeArticle.getTitle()).eq(apeArticle.getState() != null,ApeArticle::getState,apeArticle.getState()).like(StringUtils.isNotBlank(apeArticle.getTaskName()),ApeArticle::getTaskName,apeArticle.getTaskName());if (apeArticle.getType() == 1) {QueryWrapper<ApeTask> wrapper = new QueryWrapper<>();wrapper.lambda().eq(ApeTask::getTeacherId,ShiroUtils.getUserInfo().getId());List<ApeTask> taskList = apeTaskService.list(wrapper);List<String> list = new ArrayList<String>();for (ApeTask apeTask : taskList) {list.add(apeTask.getId());}if (list.size()>0) {queryWrapper.lambda().in(ApeArticle::getTaskId,list);} else {list.add(" ");queryWrapper.lambda().in(ApeArticle::getTaskId,list);}}Page<ApeArticle> apeArticlePage = apeArticleService.page(page, queryWrapper);return Result.success(apeArticlePage);}@GetMapping("getIndexArticleList")public Result getIndexArticleList() {QueryWrapper<ApeArticle> queryWrapper = new QueryWrapper<>();queryWrapper.lambda().last("limit 2");List<ApeArticle> articleList = apeArticleService.list(queryWrapper);return Result.success(articleList);}/** 根據id獲取筆記 */@Log(name = "根據id獲取筆記", type = BusinessType.OTHER)@GetMapping("getApeArticleById")public Result getApeArticleById(@RequestParam("id")String id) {ApeArticle apeArticle = apeArticleService.getById(id);ApeUser userInfo = ShiroUtils.getUserInfo();QueryWrapper<ApeArticleFavor> queryWrapper = new QueryWrapper<>();queryWrapper.lambda().eq(ApeArticleFavor::getArticleId,id).eq(ApeArticleFavor::getUserId,userInfo.getId());ApeArticleFavor favor = apeArticleFavorService.getOne(queryWrapper);if (favor == null) {apeArticle.setFavor(0);} else {apeArticle.setFavor(1);}return Result.success(apeArticle);}/** 保存筆記 */@Log(name = "保存筆記", type = BusinessType.INSERT)@PostMapping("saveApeArticle")public Result saveApeArticle(@RequestBody ApeArticle apeArticle) {ApeUser userInfo = ShiroUtils.getUserInfo();apeArticle.setUserId(userInfo.getId());apeArticle.setAvatar(userInfo.getAvatar());if (StringUtils.isNotBlank(apeArticle.getTaskId())) {ApeTask task = apeTaskService.getById(apeArticle.getTaskId());apeArticle.setTaskName(task.getName());}boolean save = apeArticleService.save(apeArticle);if (save) {return Result.success();} else {return Result.fail(ResultCode.COMMON_DATA_OPTION_ERROR.getMessage());}}/** 編輯筆記 */@Log(name = "編輯筆記", type = BusinessType.UPDATE)@PostMapping("editApeArticle")public Result editApeArticle(@RequestBody ApeArticle apeArticle) {ApeUser userInfo = ShiroUtils.getUserInfo();apeArticle.setAvatar(userInfo.getAvatar());if (StringUtils.isNotBlank(apeArticle.getTaskId())) {ApeTask task = apeTaskService.getById(apeArticle.getTaskId());apeArticle.setTaskName(task.getName());}boolean save = apeArticleService.updateById(apeArticle);if (save) {return Result.success();} else {return Result.fail(ResultCode.COMMON_DATA_OPTION_ERROR.getMessage());}}/** 刪除筆記 */@GetMapping("removeApeArticle")@Log(name = "刪除筆記", type = BusinessType.DELETE)public Result removeApeArticle(@RequestParam("ids")String ids) {if (StringUtils.isNotBlank(ids)) {String[] asList = ids.split(",");for (String id : asList) {apeArticleService.removeById(id);QueryWrapper<ApeArticleComment> queryWrapper = new QueryWrapper<>();queryWrapper.lambda().eq(ApeArticleComment::getTaskId,id);apeArticleCommentService.remove(queryWrapper);QueryWrapper<ApeArticleFavor> queryWrapper2 = new QueryWrapper<>();queryWrapper2.lambda().eq(ApeArticleFavor::getArticleId,id);apeArticleFavorService.remove(queryWrapper2);}return Result.success();} else {return Result.fail("筆記id不能為空!");}}}
<template><div class="login"><div class="login-top"><div class="logo"><img style="width:100px;padding-left:100px" src="../../assets/image/logo.png"></div><div class="btns"><div style="padding-right:100px;display:flex"><div class="toReg" @click="toRegister"><div>注冊</div></div><div class="toRegTeacher" @click="toTeacherRegister"><div>教師入駐</div></div></div></div></div><div class="login-center"><div class="login-content"><div style="padding-left: 100px;"><div class="title"><div>STUDY FROM</div><div>HOME WITH EXPERT</div></div><div style="color:#181818;font-family:'黑體'">E GURU在線學習系統,一個在家就能學習的平臺</div><div style="margin-top:20px;color:#181818;font-family:'黑體'"><div>| 我們都得經歷一段努力閉嘴不抱怨的時光,</div><div>| 才能熠熠生輝,才能去更酷的地方,成為更酷的人。</div></div><div style="margin-top:20px;color:#181818;font-family:'黑體'"><div>| 最好的生活狀態:一個人時,安靜而豐盛</div><div>| ;兩個人是,溫暖而踏實。</div></div><div style="margin-top:30px;display:flex;justify-content: space-between"><img style="width:20%" src="../../assets/image/login_image.png"><img style="width:25%;padding-right:30px" src="../../assets/image/login-jiantou.png"></div></div></div><div class="login-form"><div class="jiantou1"><img src="../../assets/image/jiantou1.png"></div><div class="jiantou2"><img src="../../assets/image/jiantou2.png"></div><div class="yuan"><img src="../../assets/image/yuan.png"></div><div class="form"><div class="login-title">E GURU</div><div style="width:100%"><el-form style="width:100%" :model="userInfo" :rules="rules" ref="ruleForm" class="demo-ruleForm"><el-form-item prop="username"><el-input v-model="userInfo.username" placeholder="請輸入用戶賬號"></el-input></el-form-item><el-form-item prop="password"><el-input type="password" v-model="userInfo.password" placeholder="請輸入用戶密碼"></el-input></el-form-item></el-form></div><div class="login-btn" @click="toLogin()"><div>登 陸</div></div><a href="http://www.java1234.com/a/bysj/javaweb/" target='_blank'><font color=red>Java1234收藏整理</font></a></div></div></div><bottomPage></bottomPage></div>
</template><script>import {login,getUser} from '../../api/api'import bottomPage from "../../components/bottom/login-bottom"export default {data() {return{userInfo: {username: "",password: ""},rules: {username: [{ required: true, message: '請輸入用戶賬號', trigger: 'blur' },],password: [{ required: true, message: '請輸入用戶密碼', trigger: 'blur' }],}}},components: {bottomPage},methods: {toRegister() {this.$router.push("/register")},toTeacherRegister() {this.$router.push("/teacherRegister")},toLogin() {this.$refs["ruleForm"].validate((valid) => {if (valid) {var params = {username: this.userInfo.username,password: this.userInfo.password}login(params).then(res => {if(res.code == 1000) {this.$message({message: '登陸成功',type: 'success'});var that = thisvar token = res.data.tokenwindow.localStorage.setItem("user_token",token)this.getUserInfo()setTimeout(function() {that.$router.push("/")},500)} else {this.$message.error(res.message);}})} else {return false;}});},getUserInfo() {getUser().then(res => {if(res.code == 1000) {window.localStorage.setItem("user_info",JSON.stringify(res.data))}})},},created() {},mounted() {}}
</script><style scoped>.login {width: 100%;height: 100%;background-color: #FCFCFC;}.login-top {width: 100%;height: 100px;display: flex;flex-direction: row;align-items: center;justify-content: space-between;}.logo {width: 30%;text-align: center;height: 100%;display: flex;align-items: center;}.btns {width: 45%;display: flex;background-color: #ffffff;height: 100%;display: flex;align-items: center;justify-content: flex-end;}.toReg {width: 130px;height: 40px;border:1px solid #474747;font-family: '黑體';cursor: pointer;display: flex;justify-content: center;align-items: center;}.toRegTeacher {margin-left: 20px;width: 130px;height: 40px;border:1px solid #474747;font-family: '黑體';cursor: pointer;display: flex;justify-content: center;align-items: center;}.login-center {background-image: url('../../assets/image/index/index_back.png');width: 100%;height: 75%;display: flex;flex-direction: row;}.login-bottom {width: 100%;height: 250px;background-color: #262543;display: flex;}.login-content {width: 55%;height: 100%;display: flex;flex-direction: column;}.login-form {background-image: url('../../assets/image/index/index_back.png');position: relative;display: flex;justify-content: center;width: 45%;height: 100%;background-color: #ffffff;}.title {font-weight: '黑體';font-size: 55px;font-weight: bold;}.jiantou1 {position: absolute;left: 10px;top: 20px;}.jiantou2 {position: absolute;left: 10px;bottom: 100px;}.yuan {position: absolute;right: 10px;bottom: 200px;}.form {width: 50%;height: 70%;display: flex;flex-direction: column;align-items: center;justify-content: space-around;}.login-title {font-size: 50px;font-weight: bold;height: 40%;display: flex;align-items: center;}.login-btn {width: 130px;height: 40px;border:1px solid #FF5202;background-color: #FF5202;color: #ffffff;font-size: 18px;font-family: '黑體';cursor: pointer;display: flex;justify-content: center;align-items: center;}.bottom-one {width: 34%;height: 100%;display: flex;align-items: center;justify-content: center;flex-direction: column;}.bottom-two {width: 25%;height: 100%;display: flex;align-items: center;justify-content: center;flex-direction: column;}.bottom-three {width: 25%;height: 100%;display: flex;align-items: center;justify-content: center;flex-direction: column;}.bottom-four {width: 25%;height: 100%;display: flex;align-items: center;justify-content: center;flex-direction: column;}.one-1 {font-size: 20px;font-weight: bold;color: #ffffff;}.one-2 {margin-top: 15px;font-size: 15px;color: #ffffff;font-family: '黑體';}.two-2 {margin-top: 15px;font-size: 20px;color: #ffffff;font-weight: bold;}.two-3 {margin-top: 15px;font-size: 15px;color: #ffffff;font-family: '黑體';}
</style>
源碼下載
鏈接:https://pan.baidu.com/s/1m1lLscHbCdi7r9kmcrUUmw
提取碼:1234