springboot+vue+element简单实现教学课程申报管理系统

news2024/11/24 0:15:19

目录

一、项目预览

二、项目效果图及说明

1.项目说明

 1.登录

 2.欢迎页

 3.教师管理

4.课程申报

​5.管理员管理

三、代码实现

1.后端项目结构图

2.数据库表脚本

3.路由配置

四、总结


一、项目预览

  • 在线预览:点击访问
  • 其他项目访问:点击访问
  • 后端实现框架:SpringBoot+OAuth2+Spring Security+Redis+mybatis-plus+mysql+swagger搭建实现
  • 前端框架实现:vue+element实现的独立vue项目

 前后端分离实现,项目使用传统vue项目结构实现,前端采用element实现。

element官网:Element - The world's most popular Vue UI framework

 

二、项目效果图及说明

1.项目说明

两种角色登录,管理员和教师,教师提交课程申请,然后管理员登录进行课程的审核和管理,审核通过或者审核不通过,不通过是需要填写审核不通过的原因,从而教师根据原因进行相应的修改,重新提交,管理员进行再次的审核。

 1.登录

两种角色登录,管理员和教师,管理员和教师分为不同的表,项目兼容多表用户token登录

 2.欢迎页

 3.教师管理

教师的增删改查操作

4.课程申报

 只能由教师进行申报操作权限

只能由管理员进行审核相关操作权限

审核不通过时,需要填写原因,支持批量操作

 5.管理员管理

管理员拥有全部权限

 教师只能查看管理员,无操作权限

6.个人中心管理

信息修改

 密码修改,修改成功后会退出登录,需要重新登录

三、代码实现

1.后端项目结构图

2.数据库表脚本

/*
 Navicat Premium Data Transfer

 Source Server         : tian-liao
 Source Server Type    : MySQL
 Source Server Version : 80027
 Source Host           : localhost:3306
 Source Schema         : course_apply

 Target Server Type    : MySQL
 Target Server Version : 80027
 File Encoding         : 65001

 Date: 15/11/2023 17:23:30
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for admin
-- ----------------------------
DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin`  (
  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `username` varchar(60) NOT NULL COMMENT '用户名',
  `password` varchar(100) NOT NULL COMMENT '登录密码',
  `real_name` varchar(32) NULL DEFAULT NULL COMMENT '姓名',
  `gender` tinyint(1) NULL DEFAULT 0 COMMENT '用户性别 0保密 1男 2女',
  `avatar` varchar(300) NULL DEFAULT NULL COMMENT '头像',
  `phone` varchar(20) NULL DEFAULT NULL COMMENT '手机',
  `email` varchar(60) NULL DEFAULT NULL COMMENT '邮箱',
  `remark` varchar(200) NULL DEFAULT NULL COMMENT '备注',
  `status` tinyint(1) NULL DEFAULT 0 COMMENT '是否禁用 0否  1是',
  `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否  1是',
  `create_system_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '创建人ID',
  `update_system_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `update_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '修改人ID',
  `admin_type` tinyint(1) NULL DEFAULT 1 COMMENT '管理员类型 0超级管理员 1普通管理员',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `admin_key_username`(`username`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '管理员' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of admin
-- ----------------------------
INSERT INTO `admin` VALUES (1, 'admin', '$2a$10$YFlCYqEcQvQ2br484Ptxr.e7hJRFD/raJ/1WKc1A1uSTaw0hdyAla', '愛芳芳', 1, '/image/05a5880672fa44aea3e286698057d7f7.jpg', '15767978799', '3232', '', 0, 0, '2023-02-28 11:56:46', NULL, '2023-11-15 17:16:23', 1, 0);

-- ----------------------------
-- Table structure for course_apply
-- ----------------------------
DROP TABLE IF EXISTS `course_apply`;
CREATE TABLE `course_apply`  (
  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `teacher_id` int(0) NOT NULL COMMENT '申报教师主键',
  `course_name` varchar(255) NOT NULL COMMENT '课程名称',
  `credit` int(0) NOT NULL DEFAULT 0 COMMENT '学分',
  `class_hour` int(0) NOT NULL DEFAULT 0 COMMENT '学时',
  `open_time_start` int(0) NOT NULL DEFAULT 0 COMMENT '开课开始时间(几周到几周,比如一到10周)',
  `open_time_end` int(0) NOT NULL DEFAULT 0 COMMENT '开课结束时间(几周到几周,比如一到10周)',
  `length` int(0) NOT NULL DEFAULT 0 COMMENT '时长(节)',
  `year` varchar(255) NOT NULL COMMENT '授课年级',
  `teaching_class` varchar(255) NOT NULL COMMENT '授课班级',
  `place` varchar(255) NOT NULL COMMENT '授课地点',
  `course_type` tinyint(1) NULL DEFAULT 0 COMMENT '1选修课 2必修课',
  `remark` varchar(255) NULL DEFAULT NULL COMMENT '备注(退回理由)',
  `status` tinyint(1) NULL DEFAULT 1 COMMENT '审核状态 1待审核 2审核通过 3审核不通过',
  `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否  1是',
  `create_system_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '创建人ID',
  `update_system_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `update_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '修改人ID',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '课程申请表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher`  (
  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `real_name` varchar(32) NULL DEFAULT NULL COMMENT '姓名',
  `job_number` varchar(32) NULL DEFAULT NULL COMMENT '工号',
  `job_name` varchar(255) NULL DEFAULT NULL COMMENT '职称',
  `department` varchar(255) NULL DEFAULT NULL COMMENT '所在系',
  `username` varchar(10) NOT NULL COMMENT '用户名',
  `password` varchar(255) NOT NULL COMMENT '登录密码 加密',
  `phone` varchar(20) NULL DEFAULT NULL COMMENT '手机号',
  `avatar` varchar(225) NULL DEFAULT NULL COMMENT '头像',
  `gender` tinyint(1) NULL DEFAULT 0 COMMENT '性别 0保密 1男 2女',
  `remark` varchar(225) NULL DEFAULT NULL COMMENT '备注',
  `status` tinyint(1) NULL DEFAULT 0 COMMENT '是否禁用 0否 1是',
  `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否  1是',
  `create_system_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '创建人ID',
  `update_system_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间-管理员',
  `update_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '修改人ID-管理员',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COMMENT = '教师表' ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

3.路由配置

import Vue from 'vue'
import Router from 'vue-router'
import Layout from '@/page/index/index'

Vue.use(Router)

const router = new Router({
  routes: [
    {
      path: '/login',
      name: '登录页',
      component: () =>
        import( /* webpackChunkName: "page" */ '@/page/login/index'),
      meta: {
        keepAlive: true,
        isTab: false,
        isAuth: false
      }
    },
    {
      path: '/',
      component: Layout,
      hidden: true,
      redirect: '/wel',
      children: [{
        path: 'wel',
        name: '欢迎',
        activeMenu: '/home',
        component: () => import( /* webpackChunkName: "views" */ '@/views/wel/index'),
        meta: {
          title: '欢迎',
          icon: 'dashboard'
        }
      }]
    },
    {
      path: '/403',
      component: resolve => require(['../views/403'], resolve),
      hidden: true
    },

    {
      path: '/404',
      component: resolve => require(['../views/404'], resolve),
      hidden: true
    },
    {
      path: '/teacher',
      component: Layout,
      redirect: '/teacher/index',
      children: [{
        path: 'index',
        name: '教师管理',
        component: () =>
          import( /* webpackChunkName: "views" */ '@/views/teacher/index')
      }]
    },
    {
      path: '/courseApply',
      component: Layout,
      redirect: '/courseApply/index',
      children: [{
        path: 'index',
        name: '课程申报列表',
        component: () =>
          import( /* webpackChunkName: "views" */ '@/views/course_apply/index')
      }]
    },
    {
      path: '/admin',
      component: Layout,
      redirect: '/admin/index',
      children: [{
        path: 'index',
        name: '管理员管理',
        component: () =>
          import( /* webpackChunkName: "views" */ '@/views/admin/index')
      }]
    },
    {
      path: '/personalInfo',
      component: Layout,
      redirect: '/personalInfo/index',
      name: '个人信息',
      meta: {
        title: '个人信息',
        icon: 'user'
      },
      children: [{
        path: 'index',
        name: '个人信息',
        component: () => import('@/views/personalInfo/index'),
        meta: {
          title: '个人信息',
          icon: 'table'
        }
      }]
    }
  ]
})

export default router

四、总结

项目功能完整,后续可能将不断升级。

关注作者,及时了解更多好项目!

作者主页也有更多 好项目分享!

获取源码或如需帮助,可通过博客后面名片+作者即可!

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

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

相关文章

恐怖地牢资产来袭!

我们将为您带来 VoxEdit 短片大赛的首场比赛!在 6 天内创建可用资产。 主题:设计与恐怖和地牢相关的资产。这些资产必须非常实用,不需要动画。(如果你愿意,你也可以制作动画)。 发挥你恐怖的一面,创造出适…

鸿蒙APP外包开发需要注意的问题

在进行鸿蒙(HarmonyOS)应用开发时,开发者需要注意一些重要的问题,以确保应用的质量、性能和用户体验。以下是一些鸿蒙APP开发中需要特别关注的问题,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软…

【智能家居】4、智能家居框架设计和代码文件工程建立

目录 一、智能家居项目框架 二、智能家居工厂模式示意 三、代码文件工程建立 SourceInsight创建新工程步骤 一、智能家居项目框架 二、智能家居工厂模式示意 三、代码文件工程建立 创建一个名为si的文件夹用于保存SourceInsight生成的文件信息,然后在SourceInsig…

卡码网语言基础课 | 13. 链表的基础操作Ⅰ

目录 一、 回顾 二、 指针 2.1 声明指针 2.2 指针获取地址 2.3 解引用 2.4 指针与数组的关系 2.5 指针的算术操作及访问 2.6 空指针值 三、 链表 3.1 概念 3.2 虚拟头节点 3.3 定义链表节点 3.4 结构体的成员变量 3.5 初始化结构体 3.6 完整结构体代码 四、 链…

TikTok与媒体素养:如何辨别虚假信息?

在当今数字时代,社交媒体平台如TikTok已经成为信息传播和社交互动的主要渠道之一。然而,随之而来的是虚假信息的泛滥,这对用户的媒体素养提出了严峻的挑战。本文将探讨TikTok平台上虚假信息的现象,以及如何提高媒体素养&#xff0…

Servlet---常见错误汇总+解决

文章目录 404错误路径错误toncat没有正确加载webapp里的内容 405错误500错误出现“空白页面”出现“无法访问此网站” 我们在开始学习Servlet后,进入了前后端交互的阶段。在这个过程中,往往会发生许多的错误让我们摸不着头脑,今天小编就汇总了…

Pixhawk+PX4+VRPN +NOKOV无人机飞控平台动捕数据传输

NOKOV度量动作捕捉系统可以很好的适配PX4无人机飞控平台。进行数据通信的时候,使用SDK或者VRPN的方式都是可以的。本文演示NOKOV度量动作捕捉系统通过VRPN与PX4平台进行数据传输的方法。 一、硬件准备 1、准备无人机 这里准备的无人机,飞控版是Pixhaw…

O2OA(翱途)开发平台 V8.2即将发布,更安全、更高效、更开放

尊敬的O2OA(翱途)平台合作伙伴、用户以及亲爱的开发小伙伴们,平台新的版本就要发布啦! 上次8.1的发布是在9月1日,又过去两个多月,O2OA研发团队始终踏踏实实地做好产品的研发及优化工作,只为给客户带去更好的服务和产品…

好用的企业防泄密软件盘点

企业防泄密软件是专门设计用于保护企业敏感信息不被泄露的软件产品。这类软件通常采用多种安全技术和策略,以增强企业数据的安全性和保密性,防止核心知识产权和商业机密的泄露。 企业防泄密软件的主要功能包括数据加密、访问控制、审计和监控、文件和数据…

tomact部署Nginx 高负载

准备工具 安装jkd 双击程序开始安装, 点击下一步 选择安装路径 安装完成,点击关闭 配置java的环境变量 鼠标右键点击车我的电脑,选择属性点击 系统设置 点击环境变量 点击下方的新建 变量名输入JAVA_HOME 变量值输入jdk安装的路径 点击确认 在系统变量中找到path,然后点击…

JSON.toJSONString/JSONObject.toJSONString将实体类对象转换成JSON字符串时,多出了params字符串[记录贴]

我这里是给与了实体类一些固定的默认值,转换莫名其妙多出了params参数,回头深挖一下 **光看代码了 被偷了后方,忘记继承了还 ** 将实体类转换成JSON格式,三种写法都是一样的,内核都是阿里巴巴的 System.out.println(…

内网信息收集-网络安全

目录 本机信息收集 查看系统配置信息 查看系统服务信息 查看系统登录信息 自动信息收集 域内信息收集 判断是否存在域 探测域内存主机&端口 powershell arp扫描 小工具 telnet 查看用户&机器&会话相关信息 查看机器相关信息 查看用户相关信息 本机信…

处理机器学习数据集中字符串列(pandas.get_dummies)

如图,在数据集中week列的数据不是数值型,会导致我们在训练过程中难以处理。 而pandas库中有一个非常好用的函数,独热编码pandas.get_dummies(df) 使用此函数之后,会在原数据中新建各列代表Fri-Sun,值为0或1&#xff…

半平面求交 - 洛谷 - UVA1475 Jungle Outpost

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 往期相关背景点击前往 题目大意 题目链接 https://www.luogu.com.cn/problem/UVA1475 在丛林里有n个瞭望塔,瞭望塔的保护范围就是一个凸n多边形&#xf…

如何选择适合企业的ERP管理系统?

如何选择适合企业的ERP管理系统? 企业业务不断发展和扩大,ERP管理系统已成为企业实现信息化管理、提高工作效率、降低成本的重要工具。然而,市场上ERP管理系统种类繁多,如何选择适合自己企业的ERP管理系统成为了企业面临的难题。…

陪诊系统定制|陪诊系统实现个性化医疗陪护

随着社会的发展和人口老龄化的加剧,医疗陪诊服务逐渐成为了人们生活中不可或缺的一部分。为了满足这一需求,越来越多的创业者开始关注陪诊小程序的开发。那么,陪诊小程序源码如何开发呢?本文将探讨陪诊系统源码开发的意义、关键功…

java:springboot单元测试spring-boot-starter-test

背景 Java的单元测试可以使用多个框架,其中比较流行的包括: JUnit:JUnit是Java单元测试最常用的框架,它提供了一套丰富的API,可以方便地编写测试用例和测试套件。JUnit 5是JUnit的最新版本,引入了许多新功…

电源模块输出过冲如何产生?测试标准及其测试方法是什么?

输出电压过冲是一个常见的电路问题,它是指在电路中的电压超过了规定的范围,严重的话会造成系统不稳定,导致元器件、负载以及设备损坏。那么造成输出电压过冲的原因有哪些呢?电源自动测试系统要怎么测试输出过冲? 输出电压过冲产生…

DMA covert communication

DMA隐蔽通信的新思路 拆分DMA的RF链 思路的主要来源: article{Ci2021HybridBD, title{Hybrid Beamforming Design for Covert Multicast mmWave Massive MIMO Communications}, author{Wei Ci and Chenhao Qi and Geoffrey Ye Li and Shiwen Mao}, journal{2021 IEEE Global …