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


    目录

    一、项目预览

    二、项目效果图及说明

    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.数据库表脚本

    1. /*
    2. Navicat Premium Data Transfer
    3. Source Server : tian-liao
    4. Source Server Type : MySQL
    5. Source Server Version : 80027
    6. Source Host : localhost:3306
    7. Source Schema : course_apply
    8. Target Server Type : MySQL
    9. Target Server Version : 80027
    10. File Encoding : 65001
    11. Date: 15/11/2023 17:23:30
    12. */
    13. SET NAMES utf8mb4;
    14. SET FOREIGN_KEY_CHECKS = 0;
    15. -- ----------------------------
    16. -- Table structure for admin
    17. -- ----------------------------
    18. DROP TABLE IF EXISTS `admin`;
    19. CREATE TABLE `admin` (
    20. `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
    21. `username` varchar(60) NOT NULL COMMENT '用户名',
    22. `password` varchar(100) NOT NULL COMMENT '登录密码',
    23. `real_name` varchar(32) NULL DEFAULT NULL COMMENT '姓名',
    24. `gender` tinyint(1) NULL DEFAULT 0 COMMENT '用户性别 0保密 1男 2女',
    25. `avatar` varchar(300) NULL DEFAULT NULL COMMENT '头像',
    26. `phone` varchar(20) NULL DEFAULT NULL COMMENT '手机',
    27. `email` varchar(60) NULL DEFAULT NULL COMMENT '邮箱',
    28. `remark` varchar(200) NULL DEFAULT NULL COMMENT '备注',
    29. `status` tinyint(1) NULL DEFAULT 0 COMMENT '是否禁用 0否 1是',
    30. `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否 1是',
    31. `create_system_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
    32. `create_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '创建人ID',
    33. `update_system_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
    34. `update_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '修改人ID',
    35. `admin_type` tinyint(1) NULL DEFAULT 1 COMMENT '管理员类型 0超级管理员 1普通管理员',
    36. PRIMARY KEY (`id`) USING BTREE,
    37. UNIQUE INDEX `admin_key_username`(`username`) USING BTREE
    38. ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '管理员' ROW_FORMAT = Dynamic;
    39. -- ----------------------------
    40. -- Records of admin
    41. -- ----------------------------
    42. 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);
    43. -- ----------------------------
    44. -- Table structure for course_apply
    45. -- ----------------------------
    46. DROP TABLE IF EXISTS `course_apply`;
    47. CREATE TABLE `course_apply` (
    48. `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
    49. `teacher_id` int(0) NOT NULL COMMENT '申报教师主键',
    50. `course_name` varchar(255) NOT NULL COMMENT '课程名称',
    51. `credit` int(0) NOT NULL DEFAULT 0 COMMENT '学分',
    52. `class_hour` int(0) NOT NULL DEFAULT 0 COMMENT '学时',
    53. `open_time_start` int(0) NOT NULL DEFAULT 0 COMMENT '开课开始时间(几周到几周,比如一到10周)',
    54. `open_time_end` int(0) NOT NULL DEFAULT 0 COMMENT '开课结束时间(几周到几周,比如一到10周)',
    55. `length` int(0) NOT NULL DEFAULT 0 COMMENT '时长(节)',
    56. `year` varchar(255) NOT NULL COMMENT '授课年级',
    57. `teaching_class` varchar(255) NOT NULL COMMENT '授课班级',
    58. `place` varchar(255) NOT NULL COMMENT '授课地点',
    59. `course_type` tinyint(1) NULL DEFAULT 0 COMMENT '1选修课 2必修课',
    60. `remark` varchar(255) NULL DEFAULT NULL COMMENT '备注(退回理由)',
    61. `status` tinyint(1) NULL DEFAULT 1 COMMENT '审核状态 1待审核 2审核通过 3审核不通过',
    62. `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否 1是',
    63. `create_system_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
    64. `create_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '创建人ID',
    65. `update_system_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
    66. `update_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '修改人ID',
    67. PRIMARY KEY (`id`) USING BTREE
    68. ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '课程申请表' ROW_FORMAT = Dynamic;
    69. -- ----------------------------
    70. -- Table structure for teacher
    71. -- ----------------------------
    72. DROP TABLE IF EXISTS `teacher`;
    73. CREATE TABLE `teacher` (
    74. `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
    75. `real_name` varchar(32) NULL DEFAULT NULL COMMENT '姓名',
    76. `job_number` varchar(32) NULL DEFAULT NULL COMMENT '工号',
    77. `job_name` varchar(255) NULL DEFAULT NULL COMMENT '职称',
    78. `department` varchar(255) NULL DEFAULT NULL COMMENT '所在系',
    79. `username` varchar(10) NOT NULL COMMENT '用户名',
    80. `password` varchar(255) NOT NULL COMMENT '登录密码 加密',
    81. `phone` varchar(20) NULL DEFAULT NULL COMMENT '手机号',
    82. `avatar` varchar(225) NULL DEFAULT NULL COMMENT '头像',
    83. `gender` tinyint(1) NULL DEFAULT 0 COMMENT '性别 0保密 1男 2女',
    84. `remark` varchar(225) NULL DEFAULT NULL COMMENT '备注',
    85. `status` tinyint(1) NULL DEFAULT 0 COMMENT '是否禁用 0否 1是',
    86. `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否 1是',
    87. `create_system_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
    88. `create_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '创建人ID',
    89. `update_system_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间-管理员',
    90. `update_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '修改人ID-管理员',
    91. PRIMARY KEY (`id`) USING BTREE,
    92. UNIQUE INDEX `username`(`username`) USING BTREE
    93. ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COMMENT = '教师表' ROW_FORMAT = Dynamic;
    94. SET FOREIGN_KEY_CHECKS = 1;

    3.路由配置

    1. import Vue from 'vue'
    2. import Router from 'vue-router'
    3. import Layout from '@/page/index/index'
    4. Vue.use(Router)
    5. const router = new Router({
    6. routes: [
    7. {
    8. path: '/login',
    9. name: '登录页',
    10. component: () =>
    11. import( /* webpackChunkName: "page" */ '@/page/login/index'),
    12. meta: {
    13. keepAlive: true,
    14. isTab: false,
    15. isAuth: false
    16. }
    17. },
    18. {
    19. path: '/',
    20. component: Layout,
    21. hidden: true,
    22. redirect: '/wel',
    23. children: [{
    24. path: 'wel',
    25. name: '欢迎',
    26. activeMenu: '/home',
    27. component: () => import( /* webpackChunkName: "views" */ '@/views/wel/index'),
    28. meta: {
    29. title: '欢迎',
    30. icon: 'dashboard'
    31. }
    32. }]
    33. },
    34. {
    35. path: '/403',
    36. component: resolve => require(['../views/403'], resolve),
    37. hidden: true
    38. },
    39. {
    40. path: '/404',
    41. component: resolve => require(['../views/404'], resolve),
    42. hidden: true
    43. },
    44. {
    45. path: '/teacher',
    46. component: Layout,
    47. redirect: '/teacher/index',
    48. children: [{
    49. path: 'index',
    50. name: '教师管理',
    51. component: () =>
    52. import( /* webpackChunkName: "views" */ '@/views/teacher/index')
    53. }]
    54. },
    55. {
    56. path: '/courseApply',
    57. component: Layout,
    58. redirect: '/courseApply/index',
    59. children: [{
    60. path: 'index',
    61. name: '课程申报列表',
    62. component: () =>
    63. import( /* webpackChunkName: "views" */ '@/views/course_apply/index')
    64. }]
    65. },
    66. {
    67. path: '/admin',
    68. component: Layout,
    69. redirect: '/admin/index',
    70. children: [{
    71. path: 'index',
    72. name: '管理员管理',
    73. component: () =>
    74. import( /* webpackChunkName: "views" */ '@/views/admin/index')
    75. }]
    76. },
    77. {
    78. path: '/personalInfo',
    79. component: Layout,
    80. redirect: '/personalInfo/index',
    81. name: '个人信息',
    82. meta: {
    83. title: '个人信息',
    84. icon: 'user'
    85. },
    86. children: [{
    87. path: 'index',
    88. name: '个人信息',
    89. component: () => import('@/views/personalInfo/index'),
    90. meta: {
    91. title: '个人信息',
    92. icon: 'table'
    93. }
    94. }]
    95. }
    96. ]
    97. })
    98. export default router

    四、总结

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

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

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

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

  • 相关阅读:
    人工智能在网络流量分析中的研究与应用
    微服务9:服务治理来保证高可用
    大三学生HTML期末作业,网页制作作业——HTML+CSS+JavaScript饮品饮料茶(7页)
    智慧灯杆网关智慧交通应用
    【华为OD机试真题 python】金字塔【2022 Q4 | 100分】
    《Rust权威指南》读书笔记6 - Enums and Pattern Matching
    如何实现不同 Vue 项目的 npm 和 Node.js 环境进行隔离
    专注芯片交易,95后创建趣买卖进军芯片市场,抢占万亿蓝海新商机
    中文转拼音的方法
    提取字符串单引号内的字符——Python for循环代码“异想天开”
  • 原文地址:https://blog.csdn.net/lucky_fang/article/details/134467226