diff --git a/README.assets/image-20221216103211897.png b/README.assets/image-20221216103211897.png
new file mode 100644
index 0000000..d65f191
Binary files /dev/null and b/README.assets/image-20221216103211897.png differ
diff --git a/README.assets/image-20221216103227550.png b/README.assets/image-20221216103227550.png
new file mode 100644
index 0000000..f5813c7
Binary files /dev/null and b/README.assets/image-20221216103227550.png differ
diff --git a/README.assets/image-20221216110635774.png b/README.assets/image-20221216110635774.png
new file mode 100644
index 0000000..a13856b
Binary files /dev/null and b/README.assets/image-20221216110635774.png differ
diff --git a/README.assets/image-20221216110731204.png b/README.assets/image-20221216110731204.png
new file mode 100644
index 0000000..b37b1a9
Binary files /dev/null and b/README.assets/image-20221216110731204.png differ
diff --git a/README.assets/image-20221216110809185.png b/README.assets/image-20221216110809185.png
new file mode 100644
index 0000000..59795b4
Binary files /dev/null and b/README.assets/image-20221216110809185.png differ
diff --git a/README.assets/image-20221216121630072.png b/README.assets/image-20221216121630072.png
new file mode 100644
index 0000000..54b5f4c
Binary files /dev/null and b/README.assets/image-20221216121630072.png differ
diff --git a/README.assets/image-20221216121636780.png b/README.assets/image-20221216121636780.png
new file mode 100644
index 0000000..63da607
Binary files /dev/null and b/README.assets/image-20221216121636780.png differ
diff --git a/README.assets/image-20221216121642434.png b/README.assets/image-20221216121642434.png
new file mode 100644
index 0000000..892c147
Binary files /dev/null and b/README.assets/image-20221216121642434.png differ
diff --git a/README.assets/image-20221216122433281.png b/README.assets/image-20221216122433281.png
new file mode 100644
index 0000000..52f10d5
Binary files /dev/null and b/README.assets/image-20221216122433281.png differ
diff --git a/README.assets/image-20221216123240695.png b/README.assets/image-20221216123240695.png
new file mode 100644
index 0000000..beb9486
Binary files /dev/null and b/README.assets/image-20221216123240695.png differ
diff --git a/README.md b/README.md
index 9e646fc..3e6964d 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,75 @@
-# com_example_manager
+# 学生管理系统
+## 项目说明
+
+本系统主要用于管理学生成绩/课程,面向用户对象为老师、学生、教务员。
+
+项目利用MySQL、Java Spring框架,前端为web,后端为servlet
+
+```mermaid
+stateDiagram-v2
+ direction LR
+ WebBrower --> HttpServer:HTTP Protocol
+ HttpServer --> ServletsProgram
+ ServletsProgram --> HttpServer
+ ServletsProgram --> Database
+ Database --> ServletsProgram
+```
+
+系统功能:
+
+- 对于学生:能够查询学生课程/成绩,以及对应老师的信息
+- 对于老师:能够查看和修改老师所教的学生、相关课程、学分等
+- 对于管理员:查看和修改学生/老师的账户密码、课程学分学时
+
+查询功能:能够利用姓名/账号进行查询
+
+## 数据库设计
+
+优化前:
+
+
+
+优化后:
+
+
+
+Views视图为
+
+StudentManager用于存储学生端信息
+
+```sql
+create view StudentManager as select student.id,student.name,course.subject,course.Credit from student,course ,take where student.id = take.student_id and course.course_id = take.course_id
+```
+
+
+
+TeacherManager用于存储老师端信息
+
+```sql
+create view TeacherManager as select student.id, name as student_name ,subject as subject_name,Period,Credit from student,course where course.course_id = student.idTeacherManager
+```
+
+
+
+后期优化考虑:
+
+- 使用**materialized view**来存储大量的用户界面信息,已达到快速响应的信息传输,利用**Trigger**触发更新**materialized view**关联表中剩余的**students**表/**teacher**表/**user**表的信息
+
+项目运行截图:
+
+
+
+管理员界面
+
+
+
+查询功能
+
+
+
+老师界面
+
+
+
+学生界面
diff --git a/login_01/.idea/.gitignore b/login_01/.idea/.gitignore
new file mode 100644
index 0000000..35410ca
--- /dev/null
+++ b/login_01/.idea/.gitignore
@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/login_01/.idea/compiler.xml b/login_01/.idea/compiler.xml
new file mode 100644
index 0000000..655ef18
--- /dev/null
+++ b/login_01/.idea/compiler.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/login_01/.idea/encodings.xml b/login_01/.idea/encodings.xml
new file mode 100644
index 0000000..63e9001
--- /dev/null
+++ b/login_01/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/login_01/.idea/jarRepositories.xml b/login_01/.idea/jarRepositories.xml
new file mode 100644
index 0000000..712ab9d
--- /dev/null
+++ b/login_01/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/login_01/.idea/misc.xml b/login_01/.idea/misc.xml
new file mode 100644
index 0000000..56c7380
--- /dev/null
+++ b/login_01/.idea/misc.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/login_01/.mvn/wrapper/maven-wrapper.jar b/login_01/.mvn/wrapper/maven-wrapper.jar
new file mode 100644
index 0000000..c1dd12f
Binary files /dev/null and b/login_01/.mvn/wrapper/maven-wrapper.jar differ
diff --git a/login_01/.mvn/wrapper/maven-wrapper.properties b/login_01/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 0000000..b74bf7f
--- /dev/null
+++ b/login_01/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
diff --git a/login_01/login_01.iml b/login_01/login_01.iml
new file mode 100644
index 0000000..fdf2053
--- /dev/null
+++ b/login_01/login_01.iml
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/login_01/pom.xml b/login_01/pom.xml
new file mode 100644
index 0000000..4bbea9c
--- /dev/null
+++ b/login_01/pom.xml
@@ -0,0 +1,79 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.7.5
+
+
+ com.example
+ login_01
+ 0.0.1-SNAPSHOT
+ login_01
+ login_01
+
+ 17
+
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.5.2
+
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ 1.2.6
+
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ com.mysql
+ mysql-connector-j
+ runtime
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ 1.2.6
+
+
+
+
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/login_01/src/main/java/com/iot/Login01Application.java b/login_01/src/main/java/com/iot/Login01Application.java
new file mode 100644
index 0000000..4896e8b
--- /dev/null
+++ b/login_01/src/main/java/com/iot/Login01Application.java
@@ -0,0 +1,15 @@
+package com.iot;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Login01Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Login01Application.class, args);
+ }
+
+}
+
+
diff --git a/login_01/src/main/java/com/iot/common/MyMetaObjectHandler.java b/login_01/src/main/java/com/iot/common/MyMetaObjectHandler.java
new file mode 100644
index 0000000..9d4c503
--- /dev/null
+++ b/login_01/src/main/java/com/iot/common/MyMetaObjectHandler.java
@@ -0,0 +1,35 @@
+package com.iot.common;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+
+@Component
+@Slf4j
+public class MyMetaObjectHandler implements MetaObjectHandler {
+ @Override
+
+ /*
+ 插入操作自动填充
+ */
+ public void insertFill(MetaObject metaObject) {
+ log.info("公共字段自动填充(insert)");
+ log.info(metaObject.toString());
+ metaObject.setValue("updatetime", LocalDateTime.now());
+
+ }
+ /*
+ 更新操作自动填充
+ */
+ @Override
+ public void updateFill(MetaObject metaObject) {
+ log.info("公共字段自动填充(update)...");
+ log.info(metaObject.toString());
+ metaObject.setValue("updatetime", LocalDateTime.now());
+
+ }
+}
diff --git a/login_01/src/main/java/com/iot/controller/StudentService.java b/login_01/src/main/java/com/iot/controller/StudentService.java
new file mode 100644
index 0000000..faf6842
--- /dev/null
+++ b/login_01/src/main/java/com/iot/controller/StudentService.java
@@ -0,0 +1,93 @@
+package com.iot.controller;
+
+import com.alibaba.druid.support.json.JSONUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.iot.controller.util.R;
+import com.iot.domain.Student;
+import com.iot.domain.Teacher;
+import com.iot.domain.User;
+import com.iot.service.TeacherService;
+import com.iot.service.impl.StudentServiceImpl;
+import com.iot.service.impl.UserServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.util.List;
+
+@RestController
+@RequestMapping("students")
+public class StudentService {
+
+
+ @Autowired
+ private StudentServiceImpl studentService;
+ @Autowired
+ private UserServiceImpl userService;
+ @Autowired
+ private TeacherService teacherService;
+ // 增加
+ @PostMapping
+ public R save(HttpServletRequest request, @RequestBody Student student){
+ // 通过输入的学生学号到 task_user 表格中去找,如果不存在这个人的话,就在前端输出“该学号的学生不存在”
+
+ // 获取登录者的 用户id (其实就是获取老师的id)
+ String userName =(String) request.getSession().getAttribute("userName");
+
+ // 通过 登录的老师的 id 获得 老师所教授的科目
+// LambdaQueryWrapper teacherLambdaQueryWrapper = new LambdaQueryWrapper<>();
+// teacherLambdaQueryWrapper.eq(Teacher::getTeacher_username,userName);
+// if( userName != null) {
+// Teacher one = teacherService.getOne(teacherLambdaQueryWrapper);
+// }
+
+ // 通过 userName 获取登录的是那个老师
+ Teacher teacher = teacherService.getTeacherByUserName(userName);
+ // 通过老师对象,获取他的教授科目,并给新增的学生 subjectName 赋值
+ student.setSubjectName(teacher.getTeacherSubject());
+ //完善学生的 TeacherUserName
+ String teacherUsername = teacher.getTeacherUsername();
+ student.setTeacherUsername(teacherUsername);
+
+ // 完善学生姓名
+ String studentUsername = student.getStudentUsername();
+ String Name = studentService.getStudentName(studentUsername);
+// LambdaQueryWrapper userLambdaQueryWrapper = new LambdaQueryWrapper<>();
+// userLambdaQueryWrapper.eq(User::getUsername,studentUsername);
+// User user = userService.getOne(userLambdaQueryWrapper);
+ student.setStudentName(Name);
+ return new R(
+ studentService.save(student)
+ );
+ }
+
+ // 删除
+ @DeleteMapping("{id}")
+ public R delectById(@PathVariable String id){
+ return new R(studentService.removeById(id));
+ }
+
+ // 查全部
+ @GetMapping
+ public R selectAll(HttpServletRequest request){
+ String userName =(String) request.getSession().getAttribute("userName");
+ List list = studentService.getStudentByTeacherUserName(userName);
+// LambdaQueryWrapper studentLambdaQueryWrapper = new LambdaQueryWrapper<>();
+// studentLambdaQueryWrapper.eq(Student::getTeacherUsername,userName);
+// List list = studentService.list(studentLambdaQueryWrapper);
+ return new R(true,list);
+ }
+
+ // 修改
+ @PutMapping
+ public R update(@RequestBody Student student){
+ return new R(studentService.updateById(student));
+ }
+
+ @GetMapping("{id}")
+ // 查询单个
+ public R selectById(@PathVariable int id){
+ return new R(true, studentService.getById(id));
+ }
+}
diff --git a/login_01/src/main/java/com/iot/controller/UserController.java b/login_01/src/main/java/com/iot/controller/UserController.java
new file mode 100644
index 0000000..973a472
--- /dev/null
+++ b/login_01/src/main/java/com/iot/controller/UserController.java
@@ -0,0 +1,78 @@
+package com.iot.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.iot.controller.util.R;
+import com.iot.domain.User;
+import com.iot.service.impl.UserServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.DigestUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.util.List;
+
+@Slf4j
+@RestController()
+@RequestMapping("/users")
+public class UserController{
+
+ @Autowired
+ private UserServiceImpl userService;
+
+ @PostMapping("/login")
+ public R login(HttpServletRequest request, @RequestBody User user){
+
+ //2.根据页面提交的userName查询数据库
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(User::getUsername,user.getUsername());
+ User user1 = userService.getOne(queryWrapper);
+ //3.如果emp == null,直接返回登录失败
+ if(user1 == null ) {
+ return R.error("登录失败");
+ }
+ //4.emp != null ,再进行密码比对,如果不一致则返回登录结果
+ if(! user1.getPassword().equals(user.getPassword())){
+ return R.error("登录失败");
+ }
+ //6.登录成功,将员工id 存到 Session并返回登录成功结果
+ request.getSession().setAttribute("userName",user1.getUsername());
+ return R.success(user1);
+ }
+
+
+ // 增加
+ @PostMapping
+ public R save(@RequestBody User user){
+ return new R(userService.save(user));
+ }
+
+ // 删除
+ @DeleteMapping("{username}")
+ public R delectById(@PathVariable String username){
+ return new R(userService.removeById(username));
+ }
+
+ @GetMapping
+ public R selectAll(){
+ return new R(true,userService.list());
+ }
+
+ // 修改
+ @PutMapping
+ public R update(@RequestBody User user){
+ // 如果对学生的姓名和账号进行更改的话,加入事务
+
+ return new R(userService.updateById(user));
+ }
+
+ @GetMapping("{id}")
+ // 查询单个
+ public R selectById(@PathVariable int id){
+ return new R(true, userService.getById(id));
+ }
+
+
+}
diff --git a/login_01/src/main/java/com/iot/controller/util/R.java b/login_01/src/main/java/com/iot/controller/util/R.java
new file mode 100644
index 0000000..6fd44ba
--- /dev/null
+++ b/login_01/src/main/java/com/iot/controller/util/R.java
@@ -0,0 +1,51 @@
+package com.iot.controller.util;
+
+import lombok.Data;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Data
+// 使用泛型,增加这个类的通用性
+public class R {
+
+ private Integer code; //编码:1成功,0和其它数字为失败
+
+ private Boolean flag;
+ private String msg; //错误信息
+
+ private T data; //数据
+
+ private Map map = new HashMap(); //动态数据
+
+ public static R success(T object) {
+ R r = new R();
+ r.data = object;
+ r.code = 1;
+ return r;
+ }
+
+ public static R error(String msg) {
+ R r = new R();
+ r.msg = msg;
+ r.code = 0;
+ return r;
+ }
+
+ public R add(String key, Object value) {
+ this.map.put(key, value);
+ return this;
+ }
+
+ public R(Boolean flag, T data) {
+ this.flag = flag;
+ this.data = data;
+ }
+
+ public R(Boolean flag) {
+ this.flag = flag;
+ }
+
+ public R() {
+ }
+}
diff --git a/login_01/src/main/java/com/iot/dao/StudentDao.java b/login_01/src/main/java/com/iot/dao/StudentDao.java
new file mode 100644
index 0000000..00a9f3f
--- /dev/null
+++ b/login_01/src/main/java/com/iot/dao/StudentDao.java
@@ -0,0 +1,9 @@
+package com.iot.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.iot.domain.Student;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface StudentDao extends BaseMapper {
+}
diff --git a/login_01/src/main/java/com/iot/dao/TeacherDao.java b/login_01/src/main/java/com/iot/dao/TeacherDao.java
new file mode 100644
index 0000000..4e46ab7
--- /dev/null
+++ b/login_01/src/main/java/com/iot/dao/TeacherDao.java
@@ -0,0 +1,9 @@
+package com.iot.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.iot.domain.Teacher;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface TeacherDao extends BaseMapper {
+}
diff --git a/login_01/src/main/java/com/iot/dao/UserDao.java b/login_01/src/main/java/com/iot/dao/UserDao.java
new file mode 100644
index 0000000..1790ac4
--- /dev/null
+++ b/login_01/src/main/java/com/iot/dao/UserDao.java
@@ -0,0 +1,11 @@
+package com.iot.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.iot.domain.User;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface UserDao extends BaseMapper {
+
+
+}
diff --git a/login_01/src/main/java/com/iot/domain/Student.java b/login_01/src/main/java/com/iot/domain/Student.java
new file mode 100644
index 0000000..111d0d6
--- /dev/null
+++ b/login_01/src/main/java/com/iot/domain/Student.java
@@ -0,0 +1,19 @@
+package com.iot.domain;
+
+import lombok.Data;
+
+/*
+这是一个学生类
+ */
+@Data
+public class Student {
+ private String id ; // 将id 设置成为主键
+ private String studentName ; // 学生的名字
+ private String studentUsername ; // 学生的学号
+ private String subjectTeacher ; // 具体科目的老师
+ private String teacherUsername ; // 老师的id 账号
+ private String subjectName ; // 科目名字
+ private String subjectPeriod ; // 学时
+ private String subjectCredit ; // 学分
+
+}
diff --git a/login_01/src/main/java/com/iot/domain/Teacher.java b/login_01/src/main/java/com/iot/domain/Teacher.java
new file mode 100644
index 0000000..c7548fa
--- /dev/null
+++ b/login_01/src/main/java/com/iot/domain/Teacher.java
@@ -0,0 +1,16 @@
+package com.iot.domain;
+
+import lombok.Data;
+
+
+/*
+ 这是一个老师类
+ */
+@Data
+public class Teacher {
+
+ private String teacherName; // 教师的名字
+ private String teacherUsername; // 教师的id账号
+ private String teacherSubject; // 老师所教授的科目
+
+}
diff --git a/login_01/src/main/java/com/iot/domain/User.java b/login_01/src/main/java/com/iot/domain/User.java
new file mode 100644
index 0000000..3ce727a
--- /dev/null
+++ b/login_01/src/main/java/com/iot/domain/User.java
@@ -0,0 +1,23 @@
+package com.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/*
+这是一个账户类,主要用于对 管理者,老师,学生 账号进行统计管理
+ */
+@Data
+public class User {
+private Integer id; // 主要是用于排序和根据id 删除信息 设置了主键
+private String name; // 使用者名称
+private String username; // 用户的 id
+private String password; // 密码
+private Integer type; // type 指的是使用者类型,0: 指的是管理者 1:指的是学生 2:指的是老师
+
+
+ @TableField(fill = FieldFill.INSERT_UPDATE) // 插入和更新时填充字段
+private LocalDateTime updatetime;
+}
diff --git a/login_01/src/main/java/com/iot/service/StudentService.java b/login_01/src/main/java/com/iot/service/StudentService.java
new file mode 100644
index 0000000..fbbd34f
--- /dev/null
+++ b/login_01/src/main/java/com/iot/service/StudentService.java
@@ -0,0 +1,14 @@
+package com.iot.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.iot.domain.Student;
+
+import java.util.List;
+
+public interface StudentService extends IService {
+
+ public String getStudentName(String studentUserName);
+
+ public List getStudentByTeacherUserName(String teacherUserName);
+}
diff --git a/login_01/src/main/java/com/iot/service/TeacherService.java b/login_01/src/main/java/com/iot/service/TeacherService.java
new file mode 100644
index 0000000..be2218e
--- /dev/null
+++ b/login_01/src/main/java/com/iot/service/TeacherService.java
@@ -0,0 +1,9 @@
+package com.iot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.iot.dao.TeacherDao;
+import com.iot.domain.Teacher;
+
+public interface TeacherService extends IService {
+ public Teacher getTeacherByUserName(String userName);
+}
diff --git a/login_01/src/main/java/com/iot/service/UserService.java b/login_01/src/main/java/com/iot/service/UserService.java
new file mode 100644
index 0000000..d815c78
--- /dev/null
+++ b/login_01/src/main/java/com/iot/service/UserService.java
@@ -0,0 +1,9 @@
+package com.iot.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.iot.domain.User;
+
+public interface UserService extends IService {
+
+}
diff --git a/login_01/src/main/java/com/iot/service/impl/StudentServiceImpl.java b/login_01/src/main/java/com/iot/service/impl/StudentServiceImpl.java
new file mode 100644
index 0000000..08ad4e5
--- /dev/null
+++ b/login_01/src/main/java/com/iot/service/impl/StudentServiceImpl.java
@@ -0,0 +1,34 @@
+package com.iot.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.iot.dao.StudentDao;
+import com.iot.domain.Student;
+import com.iot.domain.User;
+import com.iot.service.StudentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class StudentServiceImpl extends ServiceImpl implements StudentService {
+ @Autowired
+ private UserServiceImpl userService;
+
+ @Override
+ public String getStudentName(String studentUsername) {
+ LambdaQueryWrapper userLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ userLambdaQueryWrapper.eq(User::getUsername,studentUsername);
+ User user = userService.getOne(userLambdaQueryWrapper);
+ return user.getName();
+ }
+
+ @Override
+ public List getStudentByTeacherUserName(String teacherUserName) {
+ LambdaQueryWrapper studentLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ studentLambdaQueryWrapper.eq(Student::getTeacherUsername,teacherUserName);
+ List list = super.list(studentLambdaQueryWrapper);
+ return list;
+ }
+}
diff --git a/login_01/src/main/java/com/iot/service/impl/TeacherServiceImpl.java b/login_01/src/main/java/com/iot/service/impl/TeacherServiceImpl.java
new file mode 100644
index 0000000..87dd89e
--- /dev/null
+++ b/login_01/src/main/java/com/iot/service/impl/TeacherServiceImpl.java
@@ -0,0 +1,22 @@
+package com.iot.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.iot.dao.TeacherDao;
+import com.iot.domain.Teacher;
+import com.iot.service.TeacherService;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class TeacherServiceImpl extends ServiceImpl implements TeacherService {
+
+ @Override
+ public Teacher getTeacherByUserName(String userName) {
+ LambdaQueryWrapper teacherLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ teacherLambdaQueryWrapper.eq(Teacher::getTeacherUsername,userName);
+ Teacher teacher = this.getOne(teacherLambdaQueryWrapper);
+ return teacher;
+ }
+}
diff --git a/login_01/src/main/java/com/iot/service/impl/UserServiceImpl.java b/login_01/src/main/java/com/iot/service/impl/UserServiceImpl.java
new file mode 100644
index 0000000..a1d6dca
--- /dev/null
+++ b/login_01/src/main/java/com/iot/service/impl/UserServiceImpl.java
@@ -0,0 +1,12 @@
+package com.iot.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.iot.dao.UserDao;
+import com.iot.domain.User;
+import com.iot.service.UserService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserServiceImpl extends ServiceImpl implements UserService {
+}
diff --git a/login_01/src/main/resources/application.yml b/login_01/src/main/resources/application.yml
new file mode 100644
index 0000000..35b5e12
--- /dev/null
+++ b/login_01/src/main/resources/application.yml
@@ -0,0 +1,36 @@
+server:
+ port: 8080
+
+spring:
+
+ datasource:
+ druid:
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ url: jdbc:mysql://192.168.254.130:3306/task?serverTimezone=UTC
+ username: root
+ password: 137256
+
+#mybatis-plus:
+# global-config:
+# db-config:
+# table-prefix: task_
+# id-type: auto
+# configuration:
+# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+#logging:
+# level:
+# root: debug
+
+mybatis-plus:
+ configuration:
+ # address_book ----> AddressBook
+ # user_name ----> userName
+ map-underscore-to-camel-case: true
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+ global-config:
+ db-config:
+ table-prefix: task_
+ id-type: auto
+#logging:
+## level:
+## root: debug
\ No newline at end of file
diff --git a/login_01/src/main/resources/static/account_view/css/style.css b/login_01/src/main/resources/static/account_view/css/style.css
new file mode 100644
index 0000000..be8c1fa
--- /dev/null
+++ b/login_01/src/main/resources/static/account_view/css/style.css
@@ -0,0 +1,582 @@
+html,body {
+ /* overflow-y: scroll; */
+ margin: 0;
+}
+a {
+ color: #3c8dbc;
+ text-decoration:none;
+}
+/* new style */
+.skin-purple .main-sidebar {
+ background: #fff;
+}
+.skin-purple .main-header .logo:hover {
+ background: #0abdfe;
+}
+.skin-purple .main-header .navbar .sidebar-toggle:hover {
+ /* background: #0abdfe; */
+}
+.skin-purple .main-header {
+ min-height: 70px;
+ padding: 0;
+}
+.skin-purple .main-header .logo {
+ height: 50px;
+ /* background: #0abdfe; */
+ float: left;
+ padding: 20px 0 0 15px;
+ /* width: 230px; */
+}
+.skin-purple .main-header .navbar {
+ height: 70px;
+ background: linear-gradient(to right, #0abdfe, #67f0e0);
+ /* margin-left: 230px; */
+}
+.winfo{margin-left: 230px;}
+.skin-purple .main-header .sidebar-toggle {
+ display: inline-block;
+ padding: 24px 15px;
+ color: #fff;
+}
+.skin-purple .main-sidebar {
+ padding-top: 75px;
+}
+.sidebar-menu > li {
+ line-height: 1.8
+}
+.skin-purple .sidebar-menu > li > a {
+ font-size: 16px;
+ color: #666
+}
+.skin-purple .sidebar-menu>li:hover>a,
+.skin-purple .sidebar-menu>li.active>a {
+ background: transparent;
+ color: #666;
+ border-left-color: transparent
+}
+.skin-purple .treeview-menu>li>a:hover {
+ color: #fff
+}
+.skin-purple .sidebar-menu>li>.treeview-menu {
+ background: #fff;
+}
+.sidebar-menu .treeview-menu > li > a {
+ font-size: 16px;
+ padding-left: 35px;
+ color: #999
+}
+.sidebar-menu .treeview-menu > li:hover {
+ background: #0abdfe;
+}
+@media (min-width: 768px) {
+ .skin-purple .navbar-nav>li>a
+ {
+ padding-top: 25px;
+ padding-bottom: 25px;
+ }
+}
+.modal-body .nav-tabs>li.active>a, .nav-tabs>li.active>a:focus, .nav-tabs>li.active>a:hover {
+ color: #0abdfe
+}
+.modal-body .nav-tabs>li>a {
+ color: #555
+}
+.bg-olive {
+ background-color: #0abdfe !important;
+}
+.dataTable .btn[class*='bg-']:hover {
+ box-shadow: none
+}
+.btn-primary {
+ background: #0abdfe;
+ border-color: #0abdfe;
+}
+.box-body .nav>li>a {
+ color: #666
+}
+.box-body .nav>li.active>a {
+ color: #0abdfe;
+}
+
+
+/* tab 1*/
+.double {
+ line-height: 58px;
+}
+.title .glyphicon{
+ padding: 3px;
+ font-size: 13px;
+ border-radius: 8px;
+ color: #fff;
+
+}
+.data span.arrowup {
+ color: #d88918;
+}
+.data span.arrowdown {
+ color: #6bb10a;
+}
+.item-blue .glyphicon{
+ background-color: #39a9ea;
+}
+.item-green {
+ line-height: 58px;
+}
+.item-green .glyphicon{
+ background-color: #6bb10a;
+ line-height: 12px;
+}
+.item-orange .glyphicon{
+ background-color:#d88918;
+}
+.item-red .glyphicon{
+ background-color: #f14f4f;
+}
+.chart .chart-box {
+ margin: 10px;
+}
+
+/* 数据表格label */
+.content-wrapper .data-type {
+ /*width: 90%;*/
+ margin: 10px 5px;
+ border:1px solid #d4d4d4;
+ border-radius: 2px;
+}
+.data-type .title,
+.data-type .data {
+ padding: 3px 12px;
+ border-top: 1px solid #d4d4d4;
+ overflow: hidden;
+ height: 42px;
+}
+.data-type .title {
+ line-height: 34px;
+ border-right: 1px solid #d4d4d4;
+}
+
+.data-type .data:last-child{
+ border-right: 0;
+}
+.data-type .title{
+ text-align: center;
+ background: #ececec;
+}
+.data-type .data .line{
+ vertical-align: middle;
+ overflow: hidden;
+ padding-bottom: 10px;
+ padding-top: 10px;
+}
+
+/* label行高度 */
+.data-type .data > label {
+ line-height:36px;
+}
+.data-type .data > .form-group {
+ line-height:36px;
+}
+.data-type .data.text {
+ line-height:36px;
+}
+/* label行分隔符 */
+.data-type .data.border-right {
+ border-right: 1px solid #d4d4d4;
+}
+
+/* 表格双倍高度 */
+.data-type .title.rowHeight2x,
+.data-type .data.rowHeight2x {
+ height:84px;
+}
+.data-type .title.rowHeight2x ,
+.data-type .data.rowHeight2x.text {
+ line-height:78px;
+}
+/*.data-type .data.rowHeight2x > label {
+ line-height:78px;
+}*/
+.data-type .title.editer,
+.data-type .data.editer {
+ height:320px;
+}
+.data-type .title.editer {
+ line-height:300px;
+}
+
+/*清除parding*/
+.padding-clear {
+ padding-right: 0px;
+ padding-left: 0px;
+}
+
+/* 文件上传 */
+/*a upload */
+.a-upload {
+ padding: 4px 10px;
+ height: 35px;
+ line-height: 25px;
+ position: relative;
+ cursor: pointer;
+ color: #888;
+ background: #fafafa;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ overflow: hidden;
+ display: inline-block;
+ *display: inline;
+ *zoom: 1
+}
+.a-upload input {
+ position: absolute;
+ font-size: 100px;
+ right: 0;
+ top: 0;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ cursor: pointer
+}
+.a-upload:hover {
+ color: #444;
+ background: #eee;
+ border-color: #ccc;
+ text-decoration: none
+}
+/* 医疗 */
+.search-box {
+ display: inline-block
+}
+.input-sm {
+ height: 32px;
+}
+.btn-create {
+ margin-left: 10px;
+ background-color: #0abdfe;
+ border-color: #0abdfe;
+ color: #fff;
+}
+.btn-create:hover,
+.btn-create:active,
+.btn-create:focus
+ {
+ color: #fff;
+}
+.pagination {
+ margin: 0
+}
+.medical-modal {
+ position:absolute;
+ top:0%;
+ left:0%;
+ display:none;
+ background:rgba(0,0,0,0.3);
+ width:100%;
+ height:100%;
+ position:fixed;
+ z-index:9999
+}
+.medical-modal .content {
+ position: absolute;
+ left: 35%;
+ top: 25%;
+ border-radius: 8px;
+ width: 30%;
+ height: 40%;
+ background-color: #fff;
+}
+.pageitems, .jump {
+ margin-left: 15px;
+ display: inline-block;
+}
+.jumppage {
+ width: 30px;
+ text-align: center
+}
+@media (min-width: 768px) {
+ .subscribe .modal-dialog {
+ width: 900px;
+ margin: 30px auto;
+ }
+}
+.checklist {
+ margin-top: 10px;
+}
+.checklist .input-group {
+ margin-bottom: 10px;
+}
+.modal-page {
+ margin-top: 20px;
+ font-size: 12px;
+}
+.modal-page .form-control {
+ font-size: 12px;
+ padding: 0;
+ height: 26px;
+}
+.table-check {
+ margin: 0;
+ display: inline-block;
+ margin-right: 4px;
+}
+.daterange {
+ margin:10px 10px 0;
+}
+.daterange .input-group .form-control {
+ width: 20%;
+}
+.chart-title {
+ font-size: 16px;
+ font-weight: normal;
+ text-align: center;
+}
+.diaocha {
+ line-height: 2
+}
+.diaocha h5{
+ color: #f98d45;
+ background: #f5f7f9;
+ line-height: 2;
+ padding-left: 15px;
+}
+.diaocha div {
+ padding: 0 20px;
+ border-bottom: 1px solid #dce1e7;
+}
+.diaocha div h5 {
+ color: #555;
+ background: transparent;
+ padding-left: 0;
+}
+.diaocha label {
+ font-weight: normal;
+}
+.diaocha .form-group {
+ margin-left: 0;
+ margin-right: 0;
+}
+.diaocha .options label {
+ margin-right: 10px;
+}
+
+.tizhi button{
+ margin-right: 15px;
+}
+.innerform {
+ margin-top: 20px;
+}
+.fa-search {
+ cursor: pointer
+}
+.line {
+ margin-top: 10px;
+}
+input[type=radio]:focus {
+ outline: none
+}
+input[type="radio"]{
+ appearance: none;
+ -webkit-appearance: none;
+ outline: none;
+ display:none
+}
+label input[type="radio"] {
+ content: "\a0";
+ display: inline-block;
+ vertical-align: middle;
+ font-size: 16px;
+ width: 15px;
+ height: 15px;
+ margin-right: .4em;
+ border-radius: 50%;
+ border: 1px solid #c7c6c6;
+ line-height: 1;
+ margin-top: -1px;
+}
+label input[type="radio"]:checked {
+ border: 3px solid #0abdfe;
+}
+.right-menu {
+ float: right;
+ padding: 18px 30px 0 0;
+ color: #fff;
+}
+.el-dropdown{color: #fff;}
+.avatar-wrapper img{width: 30px;height: 30px;border-radius: 15px;vertical-align: middle}
+.el-popper[x-placement^=bottom]{margin-top: 30px;}
+.el-dropdown-menu__item--divided{margin: 0;border:0 none;border-bottom: 1px solid #ebeef5}
+.help{
+ padding: 0 10px;
+}
+.help .fa{ margin-right: 5px;}
+.el-main{
+ background: #ecf0f5;
+}
+.el-menu{border: 0 none;}
+.main{
+ height: 100vh;
+ min-width: 800px;
+ min-height: 600px;
+ overflow: hidden;
+}
+.main aside{
+ overflow: visible;
+ height: 100%;
+}
+.main aside.isClossTab{
+ width: 100%;
+ height: 60px;
+ cursor: pointer;
+ font-size: 25px;
+ text-align: center;
+ line-height: 60px;
+ font-weight: bold;
+ border-right: 1px solid #807c7c;
+ box-sizing: border-box;
+}
+.main aside .menu{
+ width: 100%;
+ border-right:0;
+}
+.el-menu .fa{
+ vertical-align: middle;
+ margin-right: 5px;
+ width: 24px;
+ text-align: center;
+ font-size: 18px;
+}
+.el-menu-item a{
+ color: #303133
+}
+.el-menu-item:hover,.el-menu-item.is-active {
+ color: #fff;
+ background: #0abdfe;
+}
+.el-menu-item:hover a,.el-menu-item.is-active a{
+ color: #fff;
+}
+.el-submenu__title:hover{background: none;}
+.main-footer {
+ background: #fff;
+ padding: 15px 0;
+ color: #444;
+}
+/* title */
+.content-header {
+ position: relative;
+ padding: 15px 15px 0 15px;
+ /* margin-top: 70px; */
+}
+.content-header > h1 {
+ margin: 0;
+ font-size: 24px;
+ font-weight: normal;
+}
+.content-header > h1 > small {
+ font-size: 15px;
+ display: inline-block;
+ padding-left: 4px;
+ font-weight: 300;
+}
+.content-header > .breadcrumb {
+ float: right;
+ background: transparent;
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 12px;
+ padding: 7px 5px;
+ position: absolute;
+ top: 20px;
+ right: 10px;
+ border-radius: 2px;
+}
+/* */
+.app-container{
+ background: #fff;
+ margin: 15px 30px 15px 15px;
+
+}
+.pagiantion{
+ text-align: right;
+ padding: 15px;
+}
+.box {
+ position: relative;
+ border-radius: 3px;
+ background: #ffffff;
+ border-top: 3px solid #3c8dbc;
+ padding: 10px;
+ margin-bottom: 20px;
+ width: 100%;
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+}
+.filter-container{
+ padding:10px 0 15px 0;
+}
+.main-container{margin-top: 70px;}
+.filter-container .el-button,.filter-container .el-input__inner{
+ padding: 0 15px;
+ height: 34px;
+ line-height: 34px;
+}
+.el-aside{overflow: hidden;}
+.el-submenu .el-menu-item a{
+ display: block;
+ height: 50px;
+}
+.el-menu--collapse .el-submenu__icon-arrow{ display: none}
+/* .el-container{position: relative;} */
+/* foot */
+.el-footer{
+ position: absolute;
+ left: 180px;
+ right: 0px;
+ bottom: -80px;
+}
+.boxMain .el-upload--text{
+ position:static;
+}
+.boxMain >div{
+ display: inline-block;
+}
+.excelTitle{
+ text-align: center;
+ overflow: hidden;
+ line-height: 40px;
+}
+.excelTitle .el-button{
+ float: left;
+}
+.excelTime{
+ padding: 10px 0;
+ text-align: right;
+}
+.exceTable{
+ width: 100%;
+ border-right: 1px solid #e6e6e6;
+ border-bottom: 1px solid #e6e6e6;
+ font-size: 14px;
+ color: #333;
+}
+.exceTable tr,.exceTable td{
+ border-left: 1px solid #e6e6e6;
+ border-top: 1px solid #e6e6e6;
+ height: 40px;
+ line-height: 40px;
+ padding: 0 10px;
+}
+.exceTable .headBody{
+ text-align: center;
+ font-weight: 700;
+ font-size: 14px;
+}
+.tabletrBg{
+ background: #fcfcfc;
+ text-align: right;
+}
+.textCenter{
+ text-align: center
+}
+.checkScrol{
+ height: 277px;
+ overflow-y:scroll; ;
+}
\ No newline at end of file
diff --git a/login_01/src/main/resources/static/account_view/js/axios-0.18.0.js b/login_01/src/main/resources/static/account_view/js/axios-0.18.0.js
new file mode 100644
index 0000000..4b8b395
--- /dev/null
+++ b/login_01/src/main/resources/static/account_view/js/axios-0.18.0.js
@@ -0,0 +1,9 @@
+/* axios v0.18.0 | (c) 2018 by Matt Zabriskie */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.axios=t():e.axios=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e){var t=new s(e),n=i(s.prototype.request,t);return o.extend(n,s.prototype,t),o.extend(n,t),n}var o=n(2),i=n(3),s=n(5),u=n(6),a=r(u);a.Axios=s,a.create=function(e){return r(o.merge(u,e))},a.Cancel=n(23),a.CancelToken=n(24),a.isCancel=n(20),a.all=function(e){return Promise.all(e)},a.spread=n(25),e.exports=a,e.exports.default=a},function(e,t,n){"use strict";function r(e){return"[object Array]"===R.call(e)}function o(e){return"[object ArrayBuffer]"===R.call(e)}function i(e){return"undefined"!=typeof FormData&&e instanceof FormData}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function p(e){return"[object Date]"===R.call(e)}function d(e){return"[object File]"===R.call(e)}function l(e){return"[object Blob]"===R.call(e)}function h(e){return"[object Function]"===R.call(e)}function m(e){return f(e)&&h(e.pipe)}function y(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams}function w(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function v(e,t){if(null!==e&&"undefined"!=typeof e)if("object"!=typeof e&&(e=[e]),r(e))for(var n=0,o=e.length;n
+ * @license MIT
+ */
+ e.exports=function(e){return null!=e&&(n(e)||r(e)||!!e._isBuffer)}},function(e,t,n){"use strict";function r(e){this.defaults=e,this.interceptors={request:new s,response:new s}}var o=n(6),i=n(2),s=n(17),u=n(18);r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,{method:"get"},this.defaults,e),e.method=e.method.toLowerCase();var t=[u,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n},i.forEach(["delete","get","head","options"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))}}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))}}),e.exports=r},function(e,t,n){"use strict";function r(e,t){!i.isUndefined(e)&&i.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}function o(){var e;return"undefined"!=typeof XMLHttpRequest?e=n(8):"undefined"!=typeof process&&(e=n(8)),e}var i=n(2),s=n(7),u={"Content-Type":"application/x-www-form-urlencoded"},a={adapter:o(),transformRequest:[function(e,t){return s(t,"Content-Type"),i.isFormData(e)||i.isArrayBuffer(e)||i.isBuffer(e)||i.isStream(e)||i.isFile(e)||i.isBlob(e)?e:i.isArrayBufferView(e)?e.buffer:i.isURLSearchParams(e)?(r(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):i.isObject(e)?(r(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300}};a.headers={common:{Accept:"application/json, text/plain, */*"}},i.forEach(["delete","get","head"],function(e){a.headers[e]={}}),i.forEach(["post","put","patch"],function(e){a.headers[e]=i.merge(u)}),e.exports=a},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){r.forEach(e,function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])})}},function(e,t,n){"use strict";var r=n(2),o=n(9),i=n(12),s=n(13),u=n(14),a=n(10),c="undefined"!=typeof window&&window.btoa&&window.btoa.bind(window)||n(15);e.exports=function(e){return new Promise(function(t,f){var p=e.data,d=e.headers;r.isFormData(p)&&delete d["Content-Type"];var l=new XMLHttpRequest,h="onreadystatechange",m=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in l||u(e.url)||(l=new window.XDomainRequest,h="onload",m=!0,l.onprogress=function(){},l.ontimeout=function(){}),e.auth){var y=e.auth.username||"",w=e.auth.password||"";d.Authorization="Basic "+c(y+":"+w)}if(l.open(e.method.toUpperCase(),i(e.url,e.params,e.paramsSerializer),!0),l.timeout=e.timeout,l[h]=function(){if(l&&(4===l.readyState||m)&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in l?s(l.getAllResponseHeaders()):null,r=e.responseType&&"text"!==e.responseType?l.response:l.responseText,i={data:r,status:1223===l.status?204:l.status,statusText:1223===l.status?"No Content":l.statusText,headers:n,config:e,request:l};o(t,f,i),l=null}},l.onerror=function(){f(a("Network Error",e,null,l)),l=null},l.ontimeout=function(){f(a("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED",l)),l=null},r.isStandardBrowserEnv()){var g=n(16),v=(e.withCredentials||u(e.url))&&e.xsrfCookieName?g.read(e.xsrfCookieName):void 0;v&&(d[e.xsrfHeaderName]=v)}if("setRequestHeader"in l&&r.forEach(d,function(e,t){"undefined"==typeof p&&"content-type"===t.toLowerCase()?delete d[t]:l.setRequestHeader(t,e)}),e.withCredentials&&(l.withCredentials=!0),e.responseType)try{l.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&l.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){l&&(l.abort(),f(e),l=null)}),void 0===p&&(p=null),l.send(p)})}},function(e,t,n){"use strict";var r=n(10);e.exports=function(e,t,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(r("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},function(e,t,n){"use strict";var r=n(11);e.exports=function(e,t,n,o,i){var s=new Error(e);return r(s,t,n,o,i)}},function(e,t){"use strict";e.exports=function(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e}},function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=n(2);e.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else if(o.isURLSearchParams(t))i=t.toString();else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)?t+="[]":e=[e],o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(e.indexOf("?")===-1?"?":"&")+i),e}},function(e,t,n){"use strict";var r=n(2),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,i,s={};return e?(r.forEach(e.split("\n"),function(e){if(i=e.indexOf(":"),t=r.trim(e.substr(0,i)).toLowerCase(),n=r.trim(e.substr(i+1)),t){if(s[t]&&o.indexOf(t)>=0)return;"set-cookie"===t?s[t]=(s[t]?s[t]:[]).concat([n]):s[t]=s[t]?s[t]+", "+n:n}}),s):s}},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},function(e,t){"use strict";function n(){this.message="String contains an invalid character"}function r(e){for(var t,r,i=String(e),s="",u=0,a=o;i.charAt(0|u)||(a="=",u%1);s+=a.charAt(63&t>>8-u%1*8)){if(r=i.charCodeAt(u+=.75),r>255)throw new n;t=t<<8|r}return s}var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.prototype=new Error,n.prototype.code=5,n.prototype.name="InvalidCharacterError",e.exports=r},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";function r(){this.handlers=[]}var o=n(2);r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=r},function(e,t,n){"use strict";function r(e){e.cancelToken&&e.cancelToken.throwIfRequested()}var o=n(2),i=n(19),s=n(20),u=n(6),a=n(21),c=n(22);e.exports=function(e){r(e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.headers=e.headers||{},e.data=i(e.data,e.headers,e.transformRequest),e.headers=o.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),o.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=e.adapter||u.adapter;return t(e).then(function(t){return r(e),t.data=i(t.data,t.headers,e.transformResponse),t},function(t){return s(t)||(r(e),t&&t.response&&(t.response.data=i(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)})}},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},function(e,t){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},function(e,t){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},function(e,t,n){"use strict";function r(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new o(e),t(n.reason))})}var o=n(23);r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e,t=new r(function(t){e=t});return{token:t,cancel:e}},e.exports=r},function(e,t){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}}])});
+//# sourceMappingURL=axios.min.map
\ No newline at end of file
diff --git a/login_01/src/main/resources/static/account_view/js/index.js b/login_01/src/main/resources/static/account_view/js/index.js
new file mode 100644
index 0000000..40ff56d
--- /dev/null
+++ b/login_01/src/main/resources/static/account_view/js/index.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("vue")):"function"==typeof define&&define.amd?define("ELEMENT",["vue"],t):"object"==typeof exports?exports.ELEMENT=t(require("vue")):e.ELEMENT=t(e.Vue)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function i(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)i.d(n,r,function(t){return e[t]}.bind(null,r));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/dist/",i(i.s=49)}([function(t,i){t.exports=e},function(e,t,i){var n=i(4);e.exports=function(e,t,i){return void 0===i?n(e,t,!1):n(e,i,!1!==t)}},function(e,t,i){var n;!function(r){"use strict";var s={},a=/d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g,o="[^\\s]+",l=/\[([^]*?)\]/gm,u=function(){};function c(e,t){for(var i=[],n=0,r=e.length;n3?0:(e-e%10!=10)*e%10]}};var g={D:function(e){return e.getDay()},DD:function(e){return d(e.getDay())},Do:function(e,t){return t.DoFn(e.getDate())},d:function(e){return e.getDate()},dd:function(e){return d(e.getDate())},ddd:function(e,t){return t.dayNamesShort[e.getDay()]},dddd:function(e,t){return t.dayNames[e.getDay()]},M:function(e){return e.getMonth()+1},MM:function(e){return d(e.getMonth()+1)},MMM:function(e,t){return t.monthNamesShort[e.getMonth()]},MMMM:function(e,t){return t.monthNames[e.getMonth()]},yy:function(e){return d(String(e.getFullYear()),4).substr(2)},yyyy:function(e){return d(e.getFullYear(),4)},h:function(e){return e.getHours()%12||12},hh:function(e){return d(e.getHours()%12||12)},H:function(e){return e.getHours()},HH:function(e){return d(e.getHours())},m:function(e){return e.getMinutes()},mm:function(e){return d(e.getMinutes())},s:function(e){return e.getSeconds()},ss:function(e){return d(e.getSeconds())},S:function(e){return Math.round(e.getMilliseconds()/100)},SS:function(e){return d(Math.round(e.getMilliseconds()/10),2)},SSS:function(e){return d(e.getMilliseconds(),3)},a:function(e,t){return e.getHours()<12?t.amPm[0]:t.amPm[1]},A:function(e,t){return e.getHours()<12?t.amPm[0].toUpperCase():t.amPm[1].toUpperCase()},ZZ:function(e){var t=e.getTimezoneOffset();return(t>0?"-":"+")+d(100*Math.floor(Math.abs(t)/60)+Math.abs(t)%60,4)}},b={d:["\\d\\d?",function(e,t){e.day=t}],Do:["\\d\\d?"+o,function(e,t){e.day=parseInt(t,10)}],M:["\\d\\d?",function(e,t){e.month=t-1}],yy:["\\d\\d?",function(e,t){var i=+(""+(new Date).getFullYear()).substr(0,2);e.year=""+(t>68?i-1:i)+t}],h:["\\d\\d?",function(e,t){e.hour=t}],m:["\\d\\d?",function(e,t){e.minute=t}],s:["\\d\\d?",function(e,t){e.second=t}],yyyy:["\\d{4}",function(e,t){e.year=t}],S:["\\d",function(e,t){e.millisecond=100*t}],SS:["\\d{2}",function(e,t){e.millisecond=10*t}],SSS:["\\d{3}",function(e,t){e.millisecond=t}],D:["\\d\\d?",u],ddd:[o,u],MMM:[o,h("monthNamesShort")],MMMM:[o,h("monthNames")],a:[o,function(e,t,i){var n=t.toLowerCase();n===i.amPm[0]?e.isPm=!1:n===i.amPm[1]&&(e.isPm=!0)}],ZZ:["[^\\s]*?[\\+\\-]\\d\\d:?\\d\\d|[^\\s]*?Z",function(e,t){var i,n=(t+"").match(/([+-]|\d\d)/gi);n&&(i=60*n[1]+parseInt(n[2],10),e.timezoneOffset="+"===n[0]?i:-i)}]};b.dd=b.d,b.dddd=b.ddd,b.DD=b.D,b.mm=b.m,b.hh=b.H=b.HH=b.h,b.MM=b.M,b.ss=b.s,b.A=b.a,s.masks={default:"ddd MMM dd yyyy HH:mm:ss",shortDate:"M/D/yy",mediumDate:"MMM d, yyyy",longDate:"MMMM d, yyyy",fullDate:"dddd, MMMM d, yyyy",shortTime:"HH:mm",mediumTime:"HH:mm:ss",longTime:"HH:mm:ss.SSS"},s.format=function(e,t,i){var n=i||s.i18n;if("number"==typeof e&&(e=new Date(e)),"[object Date]"!==Object.prototype.toString.call(e)||isNaN(e.getTime()))throw new Error("Invalid Date in fecha.format");t=s.masks[t]||t||s.masks.default;var r=[];return(t=(t=t.replace(l,function(e,t){return r.push(t),"@@@"})).replace(a,function(t){return t in g?g[t](e,n):t.slice(1,t.length-1)})).replace(/@@@/g,function(){return r.shift()})},s.parse=function(e,t,i){var n=i||s.i18n;if("string"!=typeof t)throw new Error("Invalid format in fecha.parse");if(t=s.masks[t]||t,e.length>1e3)return null;var r={},o=[],u=[];t=t.replace(l,function(e,t){return u.push(t),"@@@"});var c,h=(c=t,c.replace(/[|\\{()[^$+*?.-]/g,"\\$&")).replace(a,function(e){if(b[e]){var t=b[e];return o.push(t[1]),"("+t[0]+")"}return e});h=h.replace(/@@@/g,function(){return u.shift()});var d=e.match(new RegExp(h,"i"));if(!d)return null;for(var p=1;pe?u():!0!==t&&(r=setTimeout(n?function(){r=void 0}:u,void 0===n?e-o:e))}}},function(e,t){var i=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(e,t){var i=/^(attrs|props|on|nativeOn|class|style|hook)$/;function n(e,t){return function(){e&&e.apply(this,arguments),t&&t.apply(this,arguments)}}e.exports=function(e){return e.reduce(function(e,t){var r,s,a,o,l;for(a in t)if(r=e[a],s=t[a],r&&i.test(a))if("class"===a&&("string"==typeof r&&(l=r,e[a]=r={},r[l]=!0),"string"==typeof s&&(l=s,t[a]=s={},s[l]=!0)),"on"===a||"nativeOn"===a||"hook"===a)for(o in s)r[o]=n(r[o],s[o]);else if(Array.isArray(r))e[a]=r.concat(s);else if(Array.isArray(s))e[a]=[r].concat(s);else for(o in s)r[o]=s[o];else e[a]=t[a];return e},{})}},function(e,t){var i={}.hasOwnProperty;e.exports=function(e,t){return i.call(e,t)}},function(e,t,i){"use strict";t.__esModule=!0;var n,r=i(56),s=(n=r)&&n.__esModule?n:{default:n};t.default=s.default||function(e){for(var t=1;t0?n:i)(e)}},function(e,t,i){var n=i(28)("keys"),r=i(21);e.exports=function(e){return n[e]||(n[e]=r(e))}},function(e,t,i){var n=i(14),r=i(5),s=r["__core-js_shared__"]||(r["__core-js_shared__"]={});(e.exports=function(e,t){return s[e]||(s[e]=void 0!==t?t:{})})("versions",[]).push({version:n.version,mode:i(20)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t){e.exports={}},function(e,t,i){var n=i(10).f,r=i(7),s=i(13)("toStringTag");e.exports=function(e,t,i){e&&!r(e=i?e:e.prototype,s)&&n(e,s,{configurable:!0,value:t})}},function(e,t,i){t.f=i(13)},function(e,t,i){var n=i(5),r=i(14),s=i(20),a=i(33),o=i(10).f;e.exports=function(e){var t=r.Symbol||(r.Symbol=s?{}:n.Symbol||{});"_"==e.charAt(0)||e in t||o(t,e,{value:a.f(e)})}},function(e,t,i){var n=i(4),r=i(1);e.exports={throttle:n,debounce:r}},function(e,t,i){e.exports=!i(11)&&!i(16)(function(){return 7!=Object.defineProperty(i(37)("div"),"a",{get:function(){return 7}}).a})},function(e,t,i){var n=i(15),r=i(5).document,s=n(r)&&n(r.createElement);e.exports=function(e){return s?r.createElement(e):{}}},function(e,t,i){var n=i(7),r=i(12),s=i(62)(!1),a=i(27)("IE_PROTO");e.exports=function(e,t){var i,o=r(e),l=0,u=[];for(i in o)i!=a&&n(o,i)&&u.push(i);for(;t.length>l;)n(o,i=t[l++])&&(~s(u,i)||u.push(i));return u}},function(e,t,i){var n=i(40);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==n(e)?e.split(""):Object(e)}},function(e,t){var i={}.toString;e.exports=function(e){return i.call(e).slice(8,-1)}},function(e,t,i){var n=i(25);e.exports=function(e){return Object(n(e))}},function(e,t,i){"use strict";var n=i(20),r=i(23),s=i(43),a=i(9),o=i(31),l=i(69),u=i(32),c=i(72),h=i(13)("iterator"),d=!([].keys&&"next"in[].keys()),p=function(){return this};e.exports=function(e,t,i,f,m,v,g){l(i,t,f);var b,y,w,_=function(e){if(!d&&e in S)return S[e];switch(e){case"keys":case"values":return function(){return new i(this,e)}}return function(){return new i(this,e)}},x=t+" Iterator",C="values"==m,k=!1,S=e.prototype,D=S[h]||S["@@iterator"]||m&&S[m],$=D||_(m),E=m?C?_("entries"):$:void 0,T="Array"==t&&S.entries||D;if(T&&(w=c(T.call(new e)))!==Object.prototype&&w.next&&(u(w,x,!0),n||"function"==typeof w[h]||a(w,h,p)),C&&D&&"values"!==D.name&&(k=!0,$=function(){return D.call(this)}),n&&!g||!d&&!k&&S[h]||a(S,h,$),o[t]=$,o[x]=p,m)if(b={values:C?$:_("values"),keys:v?$:_("keys"),entries:E},g)for(y in b)y in S||s(S,y,b[y]);else r(r.P+r.F*(d||k),t,b);return b}},function(e,t,i){e.exports=i(9)},function(e,t,i){var n=i(17),r=i(70),s=i(29),a=i(27)("IE_PROTO"),o=function(){},l=function(){var e,t=i(37)("iframe"),n=s.length;for(t.style.display="none",i(71).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("