学生管理系统主要界面

2023-11-02

目录

1.登录界面(login)

2.信息管理界面(main)

3.页面展示


本篇文章主要介绍学生管理系统主要界面,至于各界面中所含代码均基于Servlet(创建、使用、生命周期、http协议、http请求、http响应、过滤器)

Ajax 异步提交(XMLHttpRequest对象,GET方式、axios框架,json)

前后端分离(axios发送数据请求,路由导航守卫,web会话跟踪,token)

1.登录界面(login)

<!-- 一个.vue文件是一个组件,可以理解为一个页面,但是和页面不同 
  内容都写在一个template标签中,
  template标签有且只有一个根标签
-->
<template>
	 <div class="login_container">
	     <!-- 登录盒子-->
	     <div class="login_box">
	          <!-- 头像盒子-->
	          <div class="img_box">
	                <img src="./assets/logo.png" />
	          </div>
			  
				<div style="padding-top: 105px;padding-right: 50px;">
					<el-form ref="refform" :model="form" :rules="rules" label-width="80px">
					  <el-form-item label="账号" prop="account">
					    <el-input v-model="form.account" placeholder="请输入账号!"></el-input>
					  </el-form-item>
					  <el-form-item label="密码" prop="password">
					    <el-input v-model="form.password" placeholder="请输入密码!" show-password></el-input>
					   </el-form-item>
					  <el-form-item>
					    <el-button type="primary" icon="el-icon-star-off" @click="login('refform')" style="margin-left:30px;">登录</el-button>
					    <el-button  type="warning" icon="el-icon-circle-close" style="margin-left:60px; margin-top: 20px; ">取消</el-button>
					  </el-form-item>
					</el-form> 
				</div>
	     </div>
	  </div>
</template>

<script>
/* 导出组件,并为组件定义数据,函数,生命周期函数 */
export default{
	 data(){
		return{
			form: {
			  account: 'admin',
			  password: '111'
			},
			
			rules: {
			  account: [
				{ required: true, message: '请输入账号!', trigger: 'blur' },
				{ min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
			  ],
			  password:[
				{required:true, message: '请输入密码!', trigger: 'blur' },
				{ min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
			  ]
			}	
		}
	 },
	 methods:{
		login(refform){
			  /* 在此把前端登录表单中的数据向后java后端发送  this.form*/
			this.$refs[refform].validate((valid) => {
			    if(valid) {
			  		/* alert("登录成功"); */
			  		//如果发送成功,在此向用户提示,并跳转到登录成功的组件 
					this.$http.post("login",jsonToString(this.form)).then((resp)=>{
						//resp.data==commenResult
						if(resp.data.code==200){
							this.$message({message:resp.data.message,type: 'success'});
							//sessionStorage浏览器提供的一个会话级别的存储空间,浏览器关闭后立刻消失
							sessionStorage.setItem("account",resp.data.data.account);
							sessionStorage.setItem("token",resp.data.data.token);
							//localStorage.setItem("key","value");//长久保存
							//处理数据
							this.$router.push("/main");
						}else if(resp.data.code==201){
							this.$message({message:resp.data.message,type: 'warning'});
						}else{
							this.$message.error(resp.data.message);
						}
					})
			    } 
			});
		}
	}
} 
   //将json对象序列化为键=值&键=值
   function jsonToString(jsonobj){
	   console.log(jsonobj)
	   var str = "";
	   for(var s in jsonobj){
			str+=s+"="+jsonobj[s]+"&";	  
	   }
	   return str.substring(0,str.length-1);
   }

</script>

<style>
  .login_container{
    height: 100vh;
    margin: 0px;
    padding: 0px;
	background-image: url(assets/bg.jpg);
  }

    .login_box{
      width: 450px;
      height: 350px;
      background-color: #fff;
      border-radius: 10px;
      position: absolute;
      left: 50%;
      top: 50%;
      transform: translate(-50%,-50%);
	  opacity: 0.95;
    }

    .img_box{
       width: 130px;
       height: 130px;
       position: absolute;
       left: 50%;
       transform: translate(-50%,-50%);
       background-color: #fff;
       border-radius: 50%;
       padding: 5px;
       border: 1px solid #eee;
    }
    
    .img_box img{
         width: 100%;
         height: 100%;
         border-radius: 50%;
         background-color: #eee;
     }
</style>

2.信息管理界面(main)

<template>
	<div>
		<el-container>
			<!-- 顶部 -->
			<el-header>
				<div style="width: 500px; display: inline-block; font-size: 26px;font-weight: 400; color:black;font-family: '楷体';">
						管理系统后台
				</div>
				<el-dropdown style="float: right;">
					<i class="el-icon-setting" style="margin-right: 15px"><span>{{account}}</span></i>
					<el-dropdown-menu slot="dropdown">
					<el-dropdown-item>修改密码</el-dropdown-item>
			        <el-dropdown-item>个人信息</el-dropdown-item>
			        <el-dropdown-item><span @click="logOut()">安全退出</span></el-dropdown-item>
					<el-dropdown-item><span @click="test()">测试</span></el-dropdown-item>
					</el-dropdown-menu>
			    </el-dropdown>
			    
			</el-header>
			<el-container>
				<!-- 左侧菜单 -->
				<el-aside width="200px" style="background-color: rgb(238, 241, 246)">
					<el-menu :default-openeds="['1','3']" router>
					      <el-submenu index="1">
					        <template slot="title"><i class="el-icon-message"></i>功能菜单</template>
					        <el-menu-item-group>
					          <el-menu-item index="/studentList">学生管理</el-menu-item>
					          <el-menu-item index="/majorList">专业管理</el-menu-item>
					        </el-menu-item-group>
					      </el-submenu>
					    </el-menu>
				</el-aside>
				<!-- 右侧操作区间 -->
				<el-main>
					<router-view></router-view><!-- 显示嵌套在main下的路由 -->
				</el-main>
			</el-container>
		</el-container>
	</div>
</template>

<script>
	export default{
		  data(){
			  return{
				  account:""
			  }
		  },
		  methods:{
			  logOut(){
				  sessionStorage.clear();//清除浏览器中存储的用户信息
				  this.$confirm('确定要退出吗?', '操作提示', {
				            confirmButtonText: '确定',
				            cancelButtonText: '取消',
				            type: 'warning'
				          }).then(() => {
							  this.$router.push("/login")
				          });
			  },
			  test(){
				  //向后端携带token,每次请求都需发送token,很麻烦
				 // var token=sessionStorage.getItem("token");
				  this.$http.get("back/test").then((resp)=>{
					  
				  })
			  }
			  
		  },
		  mounted(){
			  this.account=sessionStorage.getItem("account");
			  
			  /*判断浏览器中用户信息是否为空,如果为空,说明登录失效,应跳转到登录界面
				if(this.account==null){
				  this.$router.push("/login");
			  } */
		  }
	}
</script>

<style>
	.el-header{
	   background-color: lightblue;
	   color: #333;
	   
	   line-height: 60px;
	 }
	 
	 .el-aside {
	   background-color: #D3DCE6;
	   color: #333;
	   text-align: center;
	   height: 100vh;
	 }
	 
	 .el-main {
	   background-color: gainsboro;
	   color: #333;
	   text-align: center;
	   height: 100vh;
	 }
</style>

3.页面展示

login页面

main页面

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学生管理系统主要界面 的相关文章

随机推荐

  • React井字棋后续功能完善

    React的入门教程 完成后有6个小功能点的补充 实现后的代码 import React from react import ReactDOM from react dom import index css function Square
  • 《视觉SLAM十四讲》笔记(1-3)

    目录 文章目录 目录 第1讲 引言 第2讲 初识SLAM 第3讲 三维空间刚体运动 旋转矩阵 点 向量和坐标系 坐标系间的欧式变换 变换矩阵与齐次坐标 齐次坐标 Homogeneous Coordinate 的优势 旋转向量和欧拉角 旋转向
  • STL系列之六 set与hash_set

    https blog csdn net MoreWindows article details 7029587
  • FFmpeg学习笔记--Ubuntu20.04编译安装FFmpeg、FFplay和FFprobe

    目录 1 下载FFmpeg 2 编译FFmpeg 3 设置环境变量 4 测试 1 下载FFmpeg 下载 5 1 版本的 ffmpeg wget http www ffmpeg org releases ffmpeg 5 1 tar gz
  • 运维工程师面试题 ----- 系统网络类

    1 如何检测某个端口所占用的进程 2 对于linux主机的cpu负载使用 什么情况下user的比例升高 什么情况下system的比例升高 请联系实际举例 3 在不umount的情况下 如何重新设置mount的参数 4 如果不小心在系统下执行
  • 01Linux下C语言锁的学习之Linux下的互斥锁

    01Linux下C语言锁的学习之Linux下的互斥锁 概述 为什么需要锁 因为当我们多个线程访问全局变量时 同时操作的话可能存在问题 例如小明和小红同时去拿家里的银行账号里的钱 小明看到时为100块 小红也是 但是小明先拿到 若不加锁 那么
  • GLUE 数据下载与提交

    1 下载 GLUE 任务分为主要的任务 CoLA MNLI MRPC QNLI QQP RTE SST 2 STS B WNLI 以及附加的任务 Diagnostic 下面简称为 AX 其中只有 STS B 是回归任务 其余的全为分类任务
  • webpack 学习(一)前端常用的模块化设计模式之AMD

    AMD 异步模块定义 是为浏览器环境设计的 因为 CommonJS 模块系统是同步加载的 当前浏览器环境还没有准备好同步加载模块的条件 AMD 定义了一套 JavaScript 模块依赖异步加载标准 来解决同步加载的问题 模块通过 defi
  • 【第十一届泰迪杯数据挖掘挑战赛】A 题:新冠疫情防控数据的分析 思路+代码(持续更新)

    第十一届泰迪杯数据挖掘挑战赛 A 题 新冠疫情防控数据的分析 思路 代码 持续更新 问题背景 解决问题 代码下载 数据分析 Task1 Task2 Task3 Task4 问题背景 自 2019 年底至今 全国各地陆续出现不同程度的新冠病毒
  • 控制反转及Bean装配的几种方式

    控制反转及Bean装配的几种方式 Spring两大基础核心 一是控制反转 二是依赖注入 控制反转和依赖注入 控制反转 通俗来讲 就是将bean的创建和销毁交由另一个东西全权管理 这个东西叫做Spring容器 一般来说 在Spring应用中
  • 华为服务器提示错误信息,服务器错误日志

    服务器错误日志 内容精选 换一换 为加强对数据的容灾管理 云堡垒机支持手动备份和配置日志远程备份 提高审计数据安全性和系统可扩展性 通过手动导出 下载各功能模块数据文件保存在本地 可手动备份日志请参见表1 系统内导出的csv文件 用Exce
  • element el-date-picker选择时间范围限制

    element el date picker选择时间范围限制
  • 生物识别技术在场景应用中发挥重大作用

    相较于条码支付 刷脸支付的硬件成本还是比较高 而且占空间 因此 其应用场景没有条码支付丰富 微信扫脸支付 在商超 餐饮以及便利店等场景中 收银空间是有限的 布放哪怕像PAD大小的刷脸支付设备都会觉得局促 如果同时布放两个哪怕像PAD大小的设
  • Odoo 进销存报表现已开源

    根据会计区间或自定义查询时间段 对仓库的产品出入库情况进行查看 模块地址参见内部群公告
  • 谷粒商城微服务分布式高级篇ElasticSearch四——Java使用ElasticSearch

    文章目录 ElasticSearch Rest Client Java使用ElasticSearch 存储数据到ES 从ES检索数据 项目使用ES ElasticSearch Rest Client Java使用ElasticSearch
  • 迷你世界箱子里物品无限取

    废话少说代码如下 在高度为8的箱子可以无限补给 function f e WorldContainer addItemToContainer e x e y e z e itemid e itemnum end 关闭盒子 函数 f 下面是添
  • TypeScript项目配置

    前言 我们需要建立tsconfig json 作用 用于标识 TypeScript 项目的根路径 用于配置 TypeScript 编译器 用于指定编译的文件 重要字段 files 设置要编译的文件的名称 include 设置需要进行编译的文
  • offsetTop、offsetParent、scrollTop以及vue如何实现左右联动效果

    offsetTop 元素到offsetParent顶部的距离 offsetParent 距离元素最近的一个具有定位的祖宗元素 relative absolute fixed 若祖宗都不符合条件 offsetParent为body 如下图所示
  • OrangePi 4b Lts GPIO最高输出频率测试

    根据示波器显示的值 在写入高低电平各有一个usleep 1 时可以输出稳定10kHz的方波 但是10k每段有50us 不知道usleep 1 为什么会变成50us 可能是digitalWrite稳定时间比较长 直接死循环里digitalWr
  • 学生管理系统主要界面

    目录 1 登录界面 login 2 信息管理界面 main 3 页面展示 本篇文章主要介绍学生管理系统主要界面 至于各界面中所含代码均基于Servlet 创建 使用 生命周期 http协议 http请求 http响应 过滤器 Ajax 异步