diff --git a/pom.xml b/pom.xml
index 7eaa992..696d351 100644
--- a/pom.xml
+++ b/pom.xml
@@ -100,7 +100,18 @@
 
     </dependencies>
 
+
     <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <includes>
+                    <include>**/*.*</include>
+                </includes>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
diff --git a/src/main/java/com/zhiyun/zhiyun03/Zhiyun03Application.java b/src/main/java/com/zhiyun/zhiyun03/Zhiyun03Application.java
index aa812b3..50f3a04 100644
--- a/src/main/java/com/zhiyun/zhiyun03/Zhiyun03Application.java
+++ b/src/main/java/com/zhiyun/zhiyun03/Zhiyun03Application.java
@@ -3,10 +3,11 @@ package com.zhiyun.zhiyun03;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.context.annotation.ComponentScan;
 
 @SpringBootApplication
-
+@ServletComponentScan
 public class Zhiyun03Application {
 
     public static void main(String[] args) {
diff --git a/src/main/java/com/zhiyun/zhiyun03/academic/controller/AcademicController.java b/src/main/java/com/zhiyun/zhiyun03/academic/controller/AcademicController.java
index bab78d3..e638a4f 100644
--- a/src/main/java/com/zhiyun/zhiyun03/academic/controller/AcademicController.java
+++ b/src/main/java/com/zhiyun/zhiyun03/academic/controller/AcademicController.java
@@ -3,6 +3,7 @@ package com.zhiyun.zhiyun03.academic.controller;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zhiyun.zhiyun03.academic.service.AcademicService;
 import com.zhiyun.zhiyun03.academic.vo.AcademicVo;
+import com.zhiyun.zhiyun03.application.entity.Directory;
 import com.zhiyun.zhiyun03.course.vo.CourseVo;
 import com.zhiyun.zhiyun03.course.vo.PageVO;
 import com.zhiyun.zhiyun03.game.vo.GameVo;
@@ -18,6 +19,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.annotation.Resource;
 import java.io.File;
 import java.io.FileOutputStream;
+import java.util.List;
 
 @RestController
 @RequestMapping("/academic")
@@ -41,6 +43,13 @@ public class AcademicController {
         return JsonResult.success(lists).setCount(lists.getTotal());
     }
 
+    @GetMapping ("/queryDir")
+    @ApiOperation("查询目录")
+    public JsonResult<Directory> queryDir(){
+        List<Directory> list = academicService.queryDir();
+        return JsonResult.success(list);
+    }
+
     @PostMapping("/addAcademic")
     @ApiOperation("新增学术信息")
     public JsonResult addAcademic(AcademicVo academicVo){
@@ -55,8 +64,11 @@ public class AcademicController {
     @RequestMapping("/selectByIdAcademic")
     @ApiOperation("根据id查询学术信息")
     public JsonResult<AcademicVo> selectByIdAcademic(Integer id){
-        AcademicVo academicVo = academicService.selectByIdAcademic(id);
-        return JsonResult.success(academicVo);
+        if (id!=null){
+            AcademicVo academicVo = academicService.selectByIdAcademic(id);
+            return JsonResult.success(academicVo);
+        }
+            return JsonResult.error();
     }
 
     @PostMapping("/updateAcademic")
@@ -106,4 +118,13 @@ public class AcademicController {
         return JsonResult.success(path);
     }
 
+    @RequestMapping("/addDirectory")
+    @ApiOperation("新增目录")
+    public JsonResult addDirectory( Directory directory){
+        int result = academicService.addDirectory(directory);
+        if(result>0){
+            return JsonResult.success(ResultCode.SUCCESS);
+        }
+        return JsonResult.error(ResultCode.Fail,"失败");
+    }
 }
diff --git a/src/main/java/com/zhiyun/zhiyun03/academic/service/AcademicService.java b/src/main/java/com/zhiyun/zhiyun03/academic/service/AcademicService.java
index c900396..0bee7e9 100644
--- a/src/main/java/com/zhiyun/zhiyun03/academic/service/AcademicService.java
+++ b/src/main/java/com/zhiyun/zhiyun03/academic/service/AcademicService.java
@@ -4,10 +4,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zhiyun.zhiyun03.academic.entity.Academic;
 import com.zhiyun.zhiyun03.academic.vo.AcademicVo;
+import com.zhiyun.zhiyun03.application.entity.Directory;
 import com.zhiyun.zhiyun03.course.vo.CourseVo;
 import com.zhiyun.zhiyun03.course.vo.PageVO;
 import com.zhiyun.zhiyun03.game.vo.GameVo;
 
+import java.util.List;
+
 public interface AcademicService extends IService<Academic> {
     PageVO<AcademicVo> queryAcademic(Integer page, Integer limit);
 
@@ -18,4 +21,8 @@ public interface AcademicService extends IService<Academic> {
     int updateAcademic(AcademicVo academicVo);
 
     int deleteAcademic(Integer id);
+
+    List<Directory> queryDir();
+
+    int addDirectory(Directory directory);
 }
diff --git a/src/main/java/com/zhiyun/zhiyun03/academic/service/impl/AcademicServiceImpl.java b/src/main/java/com/zhiyun/zhiyun03/academic/service/impl/AcademicServiceImpl.java
index a002c37..751043d 100644
--- a/src/main/java/com/zhiyun/zhiyun03/academic/service/impl/AcademicServiceImpl.java
+++ b/src/main/java/com/zhiyun/zhiyun03/academic/service/impl/AcademicServiceImpl.java
@@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.Date;
 import java.util.List;
+import java.util.UUID;
 
 @Service
 public class AcademicServiceImpl extends ServiceImpl<AcademicMapper, Academic> implements AcademicService {
@@ -43,7 +44,7 @@ public class AcademicServiceImpl extends ServiceImpl<AcademicMapper, Academic> i
         List<AcademicVo> academicVoList  = academicMapper.queryAcademic();
         if (academicVoList.isEmpty())
         {
-            throw new ServiceException("400","课程数据为空");
+            throw new ServiceException("400","学术数据为空");
         }
         PageInfo<AcademicVo> pageInfo = new PageInfo<AcademicVo>(academicVoList);
         PageVO<AcademicVo> academicVoPageVO = new PageVO<>();
@@ -62,12 +63,31 @@ public class AcademicServiceImpl extends ServiceImpl<AcademicMapper, Academic> i
      */
     @Override
     public int addAcademic(AcademicVo academicVo) {
+        if(academicVo.getAcademicName().isEmpty()){
+            throw new ServiceException("400","学术名称不能为空");
+        }
+        if(academicVo.getAcademicUrl().isEmpty()){
+            throw new ServiceException("400","学术链接不能为空");
+        }
+        if (academicVo.getDirName().isEmpty()){
+            throw new ServiceException("400","归属目录不能为空");
+        }
+        if (academicVo.getAcademicImg().isEmpty()){
+            throw new ServiceException("400","学术图片不能为空");
+        }
+
+        QueryWrapper<Academic> qwa=new QueryWrapper<>();
+        qwa.lambda().eq(Academic::getAcademicName,academicVo.getAcademicName()).or().eq(Academic::getAcademicUrl,academicVo.getAcademicUrl());
+        Academic academic1 = academicMapper.selectOne(qwa);
+        if(academic1!=null){
+            throw new ServiceException("403","学术名称或链接已存在");
+        }
         //将vo类转换为实体类
         ConvertUtil convertUtil=new ConvertUtil();
         Academic academic = convertUtil.VoToEntity(academicVo, Academic.class);
         //根据目录名称查询目录id
         QueryWrapper<Directory> qwd=new QueryWrapper<>();
-        qwd.lambda().eq(Directory::getDirName,academicVo.getDirName());
+        qwd.lambda().eq(Directory::getDirName,academicVo.getDirName()).eq(Directory::getDirIden,6);
         Directory directory = directoryMapper.selectOne(qwd);
         //将目录id封装到实体类
         academic.setDirId(directory.getId());
@@ -101,12 +121,24 @@ public class AcademicServiceImpl extends ServiceImpl<AcademicMapper, Academic> i
      */
     @Override
     public int updateAcademic(AcademicVo academicVo) {
+        if(academicVo.getAcademicName().isEmpty()){
+            throw new ServiceException("400","学术名称不能为空");
+        }
+        if(academicVo.getAcademicUrl().isEmpty()){
+            throw new ServiceException("400","学术链接不能为空");
+        }
+        if (academicVo.getDirName().isEmpty()){
+            throw new ServiceException("400","归属目录不能为空");
+        }
+        if (academicVo.getAcademicImg().isEmpty()){
+            throw new ServiceException("400","学术图片不能为空");
+        }
         //将vo类转换为实体类
         ConvertUtil convertUtil=new ConvertUtil();
         Academic academic = convertUtil.VoToEntity(academicVo, Academic.class);
         //根据目录名称查询目录id
         QueryWrapper<Directory> qwd=new QueryWrapper<>();
-        qwd.lambda().eq(Directory::getDirName,academicVo.getDirName());
+        qwd.lambda().eq(Directory::getDirName,academicVo.getDirName()).eq(Directory::getDirIden,6);
         Directory directory = directoryMapper.selectOne(qwd);
         //将目录id封装到实体类
         academic.setDirId(directory.getId());
@@ -126,4 +158,48 @@ public class AcademicServiceImpl extends ServiceImpl<AcademicMapper, Academic> i
         }
         return 0;
     }
+
+    /**
+     * 目录查询
+     * @return
+     */
+    @Override
+    public List<Directory> queryDir() {
+        QueryWrapper<Directory> qwd=new QueryWrapper<>();
+        qwd.lambda().eq(Directory::getDirIden,6);
+        List<Directory> list = directoryMapper.selectList(qwd);
+        if(list.isEmpty()){
+            throw new ServiceException("400","目录数据为空");
+        }
+        return list;
+    }
+
+    /**
+     * 添加目录
+     * @param directory
+     * @return
+     */
+    @Override
+    public int addDirectory(Directory directory) {
+        if (directory.getDirName().isEmpty() && directory.getDirImg().isEmpty()){
+            throw new ServiceException("400","目录名称和图片不能为空");
+        }
+        QueryWrapper<Directory> qwd=new QueryWrapper<>();
+        qwd.lambda().eq(Directory::getDirName,directory.getDirName()).eq(Directory::getDirIden,6);
+        Directory directory1 = directoryMapper.selectOne(qwd);
+        if(directory1!=null){
+            throw new ServiceException("403","目录名称已存在");
+        }
+        int uuid= UUID.randomUUID().hashCode();
+        if(uuid<0){
+            uuid=-uuid;
+        }
+        directory.setDirAddtime(new Date());
+        directory.setId(uuid);
+        directory.setDirIden(6);
+        int insert = directoryMapper.insert(directory);
+        return insert;
+    }
+
+
 }
diff --git a/src/main/java/com/zhiyun/zhiyun03/application/controller/ApplicationController.java b/src/main/java/com/zhiyun/zhiyun03/application/controller/ApplicationController.java
index e9ea535..258e1f3 100644
--- a/src/main/java/com/zhiyun/zhiyun03/application/controller/ApplicationController.java
+++ b/src/main/java/com/zhiyun/zhiyun03/application/controller/ApplicationController.java
@@ -1,6 +1,7 @@
 package com.zhiyun.zhiyun03.application.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.pagehelper.util.StringUtil;
 import com.zhiyun.zhiyun03.academic.vo.AcademicVo;
 import com.zhiyun.zhiyun03.application.config.HospConfig;
 import com.zhiyun.zhiyun03.application.entity.Application;
@@ -60,8 +61,11 @@ public class ApplicationController {
     @RequestMapping("/selectByIdApplication")
     @ApiOperation("根据id查询应用")
     public JsonResult<ApplicationVo> selectByIdApplication(Integer id){
-        ApplicationVo applicationVo = applicationService.selectByIdApplication(id);
-        return JsonResult.success(applicationVo);
+        if(id!=null){
+            ApplicationVo applicationVo = applicationService.selectByIdApplication(id);
+            return JsonResult.success(applicationVo);
+        }
+       return JsonResult.error();
     }
 
     @PostMapping("/updateApplication")
diff --git a/src/main/java/com/zhiyun/zhiyun03/application/entity/Directory.java b/src/main/java/com/zhiyun/zhiyun03/application/entity/Directory.java
index f361acc..08e2eb3 100644
--- a/src/main/java/com/zhiyun/zhiyun03/application/entity/Directory.java
+++ b/src/main/java/com/zhiyun/zhiyun03/application/entity/Directory.java
@@ -31,7 +31,7 @@ public class Directory {
      * 目录名称
      */
     @TableField(value = "dir_iden")
-    private String dirIden;
+    private Integer dirIden;
 
     /**
      * 目录图片
diff --git a/src/main/java/com/zhiyun/zhiyun03/application/service/impl/ApplicationServiceImpl.java b/src/main/java/com/zhiyun/zhiyun03/application/service/impl/ApplicationServiceImpl.java
index 6908c70..185cf2b 100644
--- a/src/main/java/com/zhiyun/zhiyun03/application/service/impl/ApplicationServiceImpl.java
+++ b/src/main/java/com/zhiyun/zhiyun03/application/service/impl/ApplicationServiceImpl.java
@@ -46,7 +46,7 @@ public class ApplicationServiceImpl extends ServiceImpl<ApplicationMapper, Appli
         List<ApplicationVo> applicationVos  = applicationMapper.queryApplication();
         if (applicationVos.isEmpty())
         {
-            throw new ServiceException("400","课程数据为空");
+            throw new ServiceException("400","应用数据为空");
         }
         PageInfo<ApplicationVo> pageInfo = new PageInfo<ApplicationVo>(applicationVos);
         PageVO<ApplicationVo> applicationVoPageVO = new PageVO<>();
@@ -66,7 +66,11 @@ public class ApplicationServiceImpl extends ServiceImpl<ApplicationMapper, Appli
     @Override
     public List<Directory> queryDir() {
         QueryWrapper<Directory> qwd=new QueryWrapper<>();
+        qwd.lambda().eq(Directory::getDirIden,2);
         List<Directory> list = directoryMapper.selectList(qwd);
+        if(list.isEmpty()){
+            throw new ServiceException("400","目录数据为空");
+        }
         return list;
     }
 
@@ -96,10 +100,22 @@ public class ApplicationServiceImpl extends ServiceImpl<ApplicationMapper, Appli
      */
     @Override
     public int updateApplication(ApplicationVo applicationVo) {
+        if(applicationVo.getAppName().isEmpty()){
+            throw  new ServiceException("400","应用名称不能为空");
+        }
+        if(applicationVo.getAppUrl().isEmpty()){
+            throw  new ServiceException("400","应用链接不能为空");
+        }
+        if(applicationVo.getDirName().isEmpty()){
+            throw new ServiceException("400","归属目录不能为空");
+        }
+        if(applicationVo.getAppIcon().isEmpty()){
+            throw new ServiceException("400","应用图片不能为空");
+        }
         ConvertUtil convertUtil=new ConvertUtil();
         Application application = convertUtil.VoToEntity(applicationVo, Application.class);
         QueryWrapper<Directory> qwd=new QueryWrapper<>();
-        qwd.lambda().eq(Directory::getDirName,applicationVo.getDirName());
+        qwd.lambda().eq(Directory::getDirName,applicationVo.getDirName()).eq(Directory::getDirIden,2);
         Directory directory = directoryMapper.selectOne(qwd);
         application.setDirId(directory.getId());
         application.setAppUpdatetime(new Date());
@@ -126,11 +142,14 @@ public class ApplicationServiceImpl extends ServiceImpl<ApplicationMapper, Appli
      */
     @Override
     public int addDirectory(Directory directory) {
+        if (directory.getDirName().isEmpty() && directory.getDirImg().isEmpty()){
+            throw new ServiceException("400","目录名称和图片不能为空");
+        }
         QueryWrapper<Directory> qwd=new QueryWrapper<>();
-        qwd.lambda().eq(Directory::getDirName,directory.getDirName());
+        qwd.lambda().eq(Directory::getDirName,directory.getDirName()).eq(Directory::getDirIden,2);
         Directory directory1 = directoryMapper.selectOne(qwd);
         if(directory1!=null){
-            return 0;
+            throw new ServiceException("403","目录名称已存在");
         }
         int uuid=UUID.randomUUID().hashCode();
         if(uuid<0){
@@ -138,6 +157,7 @@ public class ApplicationServiceImpl extends ServiceImpl<ApplicationMapper, Appli
         }
         directory.setDirAddtime(new Date());
         directory.setId(uuid);
+        directory.setDirIden(2);
         int insert = directoryMapper.insert(directory);
         return insert;
     }
@@ -148,10 +168,28 @@ public class ApplicationServiceImpl extends ServiceImpl<ApplicationMapper, Appli
      */
     @Override
     public int addApplication(ApplicationVo applicationVo) {
+        if(applicationVo.getAppName().isEmpty()){
+            throw new ServiceException("400","应用名称不能为空");
+        }
+        if (applicationVo.getAppUrl().isEmpty()){
+            throw new ServiceException("400","应用链接不能为空");
+        }
+        if(applicationVo.getDirName().isEmpty()){
+            throw new ServiceException("400","归属目录不能为空");
+        }
+        if(applicationVo.getAppIcon().isEmpty()){
+            throw new ServiceException("400","应用图片不能为空");
+        }
+        QueryWrapper<Application> qwa=new QueryWrapper<>();
+        qwa.lambda().eq(Application::getAppName,applicationVo.getAppName()).or().eq(Application::getAppUrl,applicationVo.getAppUrl());
+        List<Application> applications = applicationMapper.selectList(qwa);
+        if(applications.size()!=0){
+            throw new ServiceException("403","应用名称或链接已存在");
+        }
         ConvertUtil convertUtil=new ConvertUtil();
         Application application = convertUtil.VoToEntity(applicationVo, Application.class);
         QueryWrapper<Directory> qwd=new QueryWrapper<>();
-        qwd.lambda().eq(Directory::getDirName,applicationVo.getDirName());
+        qwd.lambda().eq(Directory::getDirName,applicationVo.getDirName()).eq(Directory::getDirIden,2);
         Directory directory = directoryMapper.selectOne(qwd);
         application.setDirId(directory.getId());
         application.setAppAddtime(new Date());
diff --git a/src/main/java/com/zhiyun/zhiyun03/filter/LoginFilter.java b/src/main/java/com/zhiyun/zhiyun03/filter/LoginFilter.java
new file mode 100644
index 0000000..57b7a9f
--- /dev/null
+++ b/src/main/java/com/zhiyun/zhiyun03/filter/LoginFilter.java
@@ -0,0 +1,50 @@
+package com.zhiyun.zhiyun03.filter;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@WebFilter(urlPatterns = "*")//表示所有请求都走这个过滤器(可以用来设置编码)
+public class LoginFilter implements Filter {
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+        //服务器启动时执行init方法
+    }
+
+    @Override//有请求就执行,且无论是前端到后端还是后端到前端都会走过滤器,真的很形象(就像量有滤网的水杯,装水和倒水都会经过滤网,前提是你有滤网(过滤器))
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+        //filter是抽象类,所以要强转
+        HttpServletRequest request = (HttpServletRequest) servletRequest;
+        HttpServletResponse response = (HttpServletResponse) servletResponse;
+        //统一资源标识符(Uniform Resource Identifier)得到一个uri
+        //URI和URL都定义了资源是什么,但URL还定义了该如何访问资源。URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。
+        //只要能唯一标识资源的就是URI,在URI的基础上给出其资源的访问方式的就是URL
+        String requestURI = request.getRequestURI();
+        System.out.println("requestURI=" + requestURI);
+        //这个user得先存才能取(作用范围是session,也就是其存值时是存于session中的)
+        Object user = request.getSession().getAttribute("USER");
+        System.out.println(user);//只是打印在控制台,为了测试
+        if (ignore(requestURI) || user != null)//满足其一就让其通过
+            filterChain.doFilter(request, response);
+        else
+            response.sendRedirect("/login.html");//重定向到login.jsp页面
+    }
+
+    private boolean ignore(String requestURI) {
+        //login请求 和 login.jsp页面 要让行,不然永远无法登录
+        String[] uris = {"login", "login.html"};
+        for (String u : uris) {
+            if (requestURI.endsWith(u))
+                //只能用上面的方式,不然会一直输出下面两行
+                // requestURI=/login.jsp
+                //null
+                //if (u.endsWith(requestURI))
+                return true;
+        }
+        return false;
+    }
+}
+
+    
\ No newline at end of file
diff --git a/src/main/java/com/zhiyun/zhiyun03/game/controller/GameController.java b/src/main/java/com/zhiyun/zhiyun03/game/controller/GameController.java
index f4ba23f..1525989 100644
--- a/src/main/java/com/zhiyun/zhiyun03/game/controller/GameController.java
+++ b/src/main/java/com/zhiyun/zhiyun03/game/controller/GameController.java
@@ -58,8 +58,11 @@ public class GameController {
     @RequestMapping("/selectByIdGame")
     @ApiOperation("根据id查询大赛信息")
     public JsonResult<GameVo> selectByIdGame(Integer id){
-        GameVo gameVo = gameService.selectByIdGame(id);
-        return JsonResult.success(gameVo);
+        if (id!=null){
+            GameVo gameVo = gameService.selectByIdGame(id);
+            return JsonResult.success(gameVo);
+        }
+            return JsonResult.error();
     }
 
     @PostMapping(value = "/updateGame")
@@ -109,5 +112,20 @@ public class GameController {
         path = "https://zhiyun03.oss-cn-beijing.aliyuncs.com/"+ upload;
         return JsonResult.success(path);
     }
+    @GetMapping ("/queryDir")
+    @ApiOperation("查询目录")
+    public JsonResult<Directory> queryDir(){
+        List<Directory> list = gameService.queryDir();
+        return JsonResult.success(list);
+    }
+    @RequestMapping("/addDirectory")
+    @ApiOperation("新增目录")
+    public JsonResult addDirectory( Directory directory){
+        int result = gameService.addDirectory(directory);
+        if(result>0){
+            return JsonResult.success(ResultCode.SUCCESS);
+        }
+        return JsonResult.error(ResultCode.Fail,"失败");
+    }
 
 }
diff --git a/src/main/java/com/zhiyun/zhiyun03/game/service/GameService.java b/src/main/java/com/zhiyun/zhiyun03/game/service/GameService.java
index 4727dd9..745b335 100644
--- a/src/main/java/com/zhiyun/zhiyun03/game/service/GameService.java
+++ b/src/main/java/com/zhiyun/zhiyun03/game/service/GameService.java
@@ -2,6 +2,7 @@ package com.zhiyun.zhiyun03.game.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhiyun.zhiyun03.application.entity.Directory;
 import com.zhiyun.zhiyun03.course.vo.PageVO;
 import com.zhiyun.zhiyun03.game.entity.Game;
 import com.zhiyun.zhiyun03.game.vo.GameVo;
@@ -18,4 +19,8 @@ public interface GameService extends IService<Game> {
     int updateGame(GameVo gameVo);
 
     int deleteGame(Integer id);
+
+    List<Directory> queryDir();
+
+    int addDirectory(Directory directory);
 }
diff --git a/src/main/java/com/zhiyun/zhiyun03/game/service/impl/GameServiceImpl.java b/src/main/java/com/zhiyun/zhiyun03/game/service/impl/GameServiceImpl.java
index 43695dd..e376b7c 100644
--- a/src/main/java/com/zhiyun/zhiyun03/game/service/impl/GameServiceImpl.java
+++ b/src/main/java/com/zhiyun/zhiyun03/game/service/impl/GameServiceImpl.java
@@ -22,6 +22,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.Date;
 import java.util.List;
+import java.util.UUID;
 
 @Service
 public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements GameService {
@@ -41,7 +42,7 @@ public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements Ga
         List<GameVo> gameVoList  = gameMapper.queryGame();
         if (gameVoList.isEmpty())
         {
-            throw new ServiceException("400","课程数据为空");
+            throw new ServiceException("400","大赛数据为空");
         }
         PageInfo<GameVo> pageInfo = new PageInfo<GameVo>(gameVoList);
         PageVO<GameVo> gameVoPageVO = new PageVO<>();
@@ -60,12 +61,30 @@ public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements Ga
      */
     @Override
     public int addApplication(GameVo gameVo) {
+        if(gameVo.getGameName().isEmpty()){
+            throw new ServiceException("400","大赛名称不能为空");
+        }
+        if(gameVo.getGameUrl().isEmpty()){
+            throw new ServiceException("400","大赛链接不能为空");
+        }
+        if (gameVo.getDirName().isEmpty()){
+            throw new ServiceException("400","归属目录不能为空");
+        }
+        if (gameVo.getGameImg().isEmpty()){
+            throw new ServiceException("400","大赛图片不能为空");
+        }
+        QueryWrapper<Game> qwg=new QueryWrapper<>();
+        qwg.lambda().eq(Game::getGameName,gameVo.getGameName()).or().eq(Game::getGameUrl,gameVo.getGameUrl());
+        List<Game> games = gameMapper.selectList(qwg);
+        if (games.size()!=0){
+            throw new ServiceException("403","大赛名称或链接已存在");
+        }
         //将vo类转换为实体类
         ConvertUtil convertUtil=new ConvertUtil();
         Game game = convertUtil.VoToEntity(gameVo, Game.class);
         //根据目录名称查询目录id
         QueryWrapper<Directory> qwd=new QueryWrapper<>();
-        qwd.lambda().eq(Directory::getDirName,gameVo.getDirName());
+        qwd.lambda().eq(Directory::getDirName,gameVo.getDirName()).eq(Directory::getDirIden,5);
         Directory directory = directoryMapper.selectOne(qwd);
         //将目录id封装到实体类
         game.setDirId(directory.getId());
@@ -99,12 +118,24 @@ public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements Ga
      */
     @Override
     public int updateGame(GameVo gameVo) {
+        if(gameVo.getGameName().isEmpty()){
+            throw new ServiceException("400","大赛名称不能为空");
+        }
+        if(gameVo.getGameUrl().isEmpty()){
+            throw new ServiceException("400","大赛链接不能为空");
+        }
+        if (gameVo.getDirName().isEmpty()){
+            throw new ServiceException("400","归属目录不能为空");
+        }
+        if (gameVo.getGameImg().isEmpty()){
+            throw new ServiceException("400","大赛图片不能为空");
+        }
         //将vo类转换为实体类
         ConvertUtil convertUtil=new ConvertUtil();
         Game game = convertUtil.VoToEntity(gameVo, Game.class);
         //根据目录名称查询目录id
         QueryWrapper<Directory> qwd=new QueryWrapper<>();
-        qwd.lambda().eq(Directory::getDirName,gameVo.getDirName());
+        qwd.lambda().eq(Directory::getDirName,gameVo.getDirName()).eq(Directory::getDirIden,5);
         Directory directory = directoryMapper.selectOne(qwd);
         //将目录id封装到实体类
         game.setDirId(directory.getId());
@@ -124,4 +155,37 @@ public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements Ga
         }
         return 0;
     }
+
+    @Override
+    public List<Directory> queryDir() {
+        QueryWrapper<Directory> qwd=new QueryWrapper<>();
+        qwd.lambda().eq(Directory::getDirIden,5);
+        List<Directory> list = directoryMapper.selectList(qwd);
+        if(list.isEmpty()){
+            throw new ServiceException("400","目录数据为空");
+        }
+        return list;
+    }
+
+    @Override
+    public int addDirectory(Directory directory) {
+        if (directory.getDirName().isEmpty() && directory.getDirImg().isEmpty()){
+            throw new ServiceException("400","目录名称和图片不能为空");
+        }
+        QueryWrapper<Directory> qwd=new QueryWrapper<>();
+        qwd.lambda().eq(Directory::getDirName,directory.getDirName()).eq(Directory::getDirIden,5);
+        Directory directory1 = directoryMapper.selectOne(qwd);
+        if(directory1!=null){
+            throw new ServiceException("403","目录名称已存在");
+        }
+        int uuid= UUID.randomUUID().hashCode();
+        if(uuid<0){
+            uuid=-uuid;
+        }
+        directory.setDirAddtime(new Date());
+        directory.setId(uuid);
+        directory.setDirIden(5);
+        int insert = directoryMapper.insert(directory);
+        return insert;
+    }
 }
diff --git a/src/main/java/com/zhiyun/zhiyun03/knowledge/controller/KnowledgeController.java b/src/main/java/com/zhiyun/zhiyun03/knowledge/controller/KnowledgeController.java
index 1ec612e..4084b5d 100644
--- a/src/main/java/com/zhiyun/zhiyun03/knowledge/controller/KnowledgeController.java
+++ b/src/main/java/com/zhiyun/zhiyun03/knowledge/controller/KnowledgeController.java
@@ -1,6 +1,7 @@
 package com.zhiyun.zhiyun03.knowledge.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhiyun.zhiyun03.application.entity.Directory;
 import com.zhiyun.zhiyun03.application.vo.ApplicationVo;
 import com.zhiyun.zhiyun03.course.vo.PageVO;
 import com.zhiyun.zhiyun03.knowledge.service.KnowledgeService;
@@ -18,6 +19,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.annotation.Resource;
 import java.io.File;
 import java.io.FileOutputStream;
+import java.util.List;
 
 @RestController
 @RequestMapping("/knowledge")
@@ -55,8 +57,11 @@ public class KnowledgeController {
     @RequestMapping("/selectByIdKnowledge")
     @ApiOperation("根据id查询大赛信息")
     public JsonResult<KnowledgeVo> selectByIdKnowledge(Integer id){
-        KnowledgeVo knowledgeVo = knowledgeService.selectByIdKnowledge(id);
-        return JsonResult.success(knowledgeVo);
+        if(id!=null){
+            KnowledgeVo knowledgeVo = knowledgeService.selectByIdKnowledge(id);
+            return JsonResult.success(knowledgeVo);
+        }
+            return JsonResult.error();
     }
 
     @PostMapping("/updateKnowledge")
@@ -109,4 +114,19 @@ public class KnowledgeController {
         return JsonResult.success(path);
     }
 
+    @RequestMapping("/addDirectory")
+    @ApiOperation("新增目录")
+    public JsonResult addDirectory( Directory directory){
+        int result = knowledgeService.addDirectory(directory);
+        if(result>0){
+            return JsonResult.success(ResultCode.SUCCESS);
+        }
+        return JsonResult.error(ResultCode.Fail,"失败");
+    }
+    @GetMapping ("/queryDir")
+    @ApiOperation("查询目录")
+    public JsonResult<Directory> queryDir(){
+        List<Directory> list = knowledgeService.queryDir();
+        return JsonResult.success(list);
+    }
 }
diff --git a/src/main/java/com/zhiyun/zhiyun03/knowledge/service/KnowledgeService.java b/src/main/java/com/zhiyun/zhiyun03/knowledge/service/KnowledgeService.java
index 1b7c235..a706336 100644
--- a/src/main/java/com/zhiyun/zhiyun03/knowledge/service/KnowledgeService.java
+++ b/src/main/java/com/zhiyun/zhiyun03/knowledge/service/KnowledgeService.java
@@ -2,10 +2,13 @@ package com.zhiyun.zhiyun03.knowledge.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhiyun.zhiyun03.application.entity.Directory;
 import com.zhiyun.zhiyun03.course.vo.PageVO;
 import com.zhiyun.zhiyun03.knowledge.entity.Knowledge;
 import com.zhiyun.zhiyun03.knowledge.vo.KnowledgeVo;
 
+import java.util.List;
+
 public interface KnowledgeService extends IService<Knowledge> {
     PageVO<KnowledgeVo> queryKnowledge(Integer page, Integer limit);
 
@@ -16,4 +19,8 @@ public interface KnowledgeService extends IService<Knowledge> {
     int updateKnowledge(KnowledgeVo knowledgeVo);
 
     int deleteKnowledge(Integer id);
+
+    int addDirectory(Directory directory);
+
+    List<Directory> queryDir();
 }
diff --git a/src/main/java/com/zhiyun/zhiyun03/knowledge/service/impl/KnowledgeServiceImpl.java b/src/main/java/com/zhiyun/zhiyun03/knowledge/service/impl/KnowledgeServiceImpl.java
index 73b15e7..cf6fcc6 100644
--- a/src/main/java/com/zhiyun/zhiyun03/knowledge/service/impl/KnowledgeServiceImpl.java
+++ b/src/main/java/com/zhiyun/zhiyun03/knowledge/service/impl/KnowledgeServiceImpl.java
@@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.Date;
 import java.util.List;
+import java.util.UUID;
 
 @Service
 public class KnowledgeServiceImpl extends ServiceImpl<KnowledgeMapper,Knowledge> implements KnowledgeService {
@@ -64,12 +65,33 @@ public class KnowledgeServiceImpl extends ServiceImpl<KnowledgeMapper,Knowledge>
      */
     @Override
     public int addKnowledge(KnowledgeVo knowledgeVo) {
+        if(knowledgeVo.getKnowledgeName().isEmpty()){
+            throw new ServiceException("400","知识名称不能为空");
+        }
+        if(knowledgeVo.getKnowledgeUrl().isEmpty()){
+            throw new ServiceException("400","知识链接不能为空");
+        }
+        if (knowledgeVo.getDirName().isEmpty()){
+            throw new ServiceException("400","归属目录不能为空");
+        }
+        if (knowledgeVo.getKnowledgeImg().isEmpty()){
+            throw new ServiceException("400","知识图片不能为空");
+        }
+
+
+        QueryWrapper<Knowledge> qwk=new QueryWrapper<>();
+        qwk.lambda().eq(Knowledge::getKnowledgeName,knowledgeVo.getKnowledgeName()).or().eq(Knowledge::getKnowledgeUrl,knowledgeVo.getKnowledgeUrl());
+        List<Knowledge> knowledges = knowledgeMapper.selectList(qwk);
+        if(knowledges.size()!=0){
+            throw new ServiceException("403","知识名称或链接已存在");
+        }
+
         //将vo类转换为实体类
         ConvertUtil convertUtil=new ConvertUtil();
         Knowledge knowledge = convertUtil.VoToEntity(knowledgeVo, Knowledge.class);
         //根据目录名称查询目录id
         QueryWrapper<Directory> qwd=new QueryWrapper<>();
-        qwd.lambda().eq(Directory::getDirName,knowledgeVo.getDirName());
+        qwd.lambda().eq(Directory::getDirName,knowledgeVo.getDirName()).eq(Directory::getDirIden,7);
         Directory directory = directoryMapper.selectOne(qwd);
         //将目录id封装到实体类
         knowledge.setDirId(directory.getId());
@@ -103,12 +125,24 @@ public class KnowledgeServiceImpl extends ServiceImpl<KnowledgeMapper,Knowledge>
      */
     @Override
     public int updateKnowledge(KnowledgeVo knowledgeVo) {
+        if(knowledgeVo.getKnowledgeName().isEmpty()){
+            throw new ServiceException("400","知识名称不能为空");
+        }
+        if(knowledgeVo.getKnowledgeUrl().isEmpty()){
+            throw new ServiceException("400","知识链接不能为空");
+        }
+        if (knowledgeVo.getDirName().isEmpty()){
+            throw new ServiceException("400","归属目录不能为空");
+        }
+        if (knowledgeVo.getKnowledgeImg().isEmpty()){
+            throw new ServiceException("400","知识图片不能为空");
+        }
         //将vo类转换为实体类
         ConvertUtil convertUtil=new ConvertUtil();
         Knowledge knowledge = convertUtil.VoToEntity(knowledgeVo, Knowledge.class);
         //根据目录名称查询目录id
         QueryWrapper<Directory> qwd=new QueryWrapper<>();
-        qwd.lambda().eq(Directory::getDirName,knowledgeVo.getDirName());
+        qwd.lambda().eq(Directory::getDirName,knowledgeVo.getDirName()).eq(Directory::getDirIden,7);
         Directory directory = directoryMapper.selectOne(qwd);
         //将目录id封装到实体类
         knowledge.setDirId(directory.getId());
@@ -129,4 +163,42 @@ public class KnowledgeServiceImpl extends ServiceImpl<KnowledgeMapper,Knowledge>
         }
         return 0;
     }
+
+    /**
+     * 添加目录
+     * @param directory
+     * @return
+     */
+    @Override
+    public int addDirectory(Directory directory) {
+        if (directory.getDirName().isEmpty() && directory.getDirImg().isEmpty()){
+            throw new ServiceException("400","目录名称和图片不能为空");
+        }
+        QueryWrapper<Directory> qwd=new QueryWrapper<>();
+        qwd.lambda().eq(Directory::getDirName,directory.getDirName()).eq(Directory::getDirIden,7);
+        Directory directory1 = directoryMapper.selectOne(qwd);
+        if(directory1!=null){
+            throw new ServiceException("403","目录名称已存在");
+        }
+        int uuid= UUID.randomUUID().hashCode();
+        if(uuid<0){
+            uuid=-uuid;
+        }
+        directory.setDirAddtime(new Date());
+        directory.setId(uuid);
+        directory.setDirIden(7);
+        int insert = directoryMapper.insert(directory);
+        return insert;
+    }
+
+    @Override
+    public List<Directory> queryDir() {
+        QueryWrapper<Directory> qwd=new QueryWrapper<>();
+        qwd.lambda().eq(Directory::getDirIden,7);
+        List<Directory> list = directoryMapper.selectList(qwd);
+        if(list.isEmpty()){
+            throw new ServiceException("400","目录数据为空");
+        }
+        return list;
+    }
 }
diff --git a/src/main/java/com/zhiyun/zhiyun03/textual/controller/TextualController.java b/src/main/java/com/zhiyun/zhiyun03/textual/controller/TextualController.java
index e3a19a2..c788839 100644
--- a/src/main/java/com/zhiyun/zhiyun03/textual/controller/TextualController.java
+++ b/src/main/java/com/zhiyun/zhiyun03/textual/controller/TextualController.java
@@ -1,6 +1,7 @@
 package com.zhiyun.zhiyun03.textual.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zhiyun.zhiyun03.application.entity.Directory;
 import com.zhiyun.zhiyun03.course.vo.PageVO;
 import com.zhiyun.zhiyun03.game.vo.GameVo;
 import com.zhiyun.zhiyun03.knowledge.vo.KnowledgeVo;
@@ -13,6 +14,7 @@ import io.swagger.annotations.ApiParam;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 @RestController
 @RequestMapping("/textual")
@@ -43,8 +45,11 @@ public class TextualController {
     @RequestMapping("/selectByIdTextual")
     @ApiOperation("根据id查询大赛信息")
     public JsonResult<TextualVo> selectByIdTextual(Integer id){
-        TextualVo textualVo = textualService.selectByIdTextual(id);
-        return JsonResult.success(textualVo);
+        if(id!=null){
+            TextualVo textualVo = textualService.selectByIdTextual(id);
+            return JsonResult.success(textualVo);
+        }
+            return JsonResult.error();
     }
 
     @PostMapping(value = "/updateTextual")
@@ -66,4 +71,19 @@ public class TextualController {
         }
         return JsonResult.success(ResultCode.Fail);
     }
+    @GetMapping ("/queryDir")
+    @ApiOperation("查询目录")
+    public JsonResult<Directory> queryDir(){
+        List<Directory> list = textualService.queryDir();
+        return JsonResult.success(list);
+    }
+    @RequestMapping("/addDirectory")
+    @ApiOperation("新增目录")
+    public JsonResult addDirectory( Directory directory){
+        int result = textualService.addDirectory(directory);
+        if(result>0){
+            return JsonResult.success(ResultCode.SUCCESS);
+        }
+        return JsonResult.error(ResultCode.Fail,"失败");
+    }
 }
diff --git a/src/main/java/com/zhiyun/zhiyun03/textual/service/TextualService.java b/src/main/java/com/zhiyun/zhiyun03/textual/service/TextualService.java
index bfd0d77..c403798 100644
--- a/src/main/java/com/zhiyun/zhiyun03/textual/service/TextualService.java
+++ b/src/main/java/com/zhiyun/zhiyun03/textual/service/TextualService.java
@@ -2,10 +2,13 @@ package com.zhiyun.zhiyun03.textual.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhiyun.zhiyun03.application.entity.Directory;
 import com.zhiyun.zhiyun03.course.vo.PageVO;
 import com.zhiyun.zhiyun03.textual.entity.Textual;
 import com.zhiyun.zhiyun03.textual.vo.TextualVo;
 
+import java.util.List;
+
 public interface TextualService extends IService<Textual> {
     PageVO<TextualVo> queryTextual(Integer page, Integer limit);
 
@@ -16,4 +19,10 @@ public interface TextualService extends IService<Textual> {
     int updateTextual(TextualVo textualVo);
 
     int deleteGame(Integer id);
+
+    List<Directory> queryDir();
+
+    int addDirectory(Directory directory);
+
+
 }
diff --git a/src/main/java/com/zhiyun/zhiyun03/textual/service/impl/TextualServiceImpl.java b/src/main/java/com/zhiyun/zhiyun03/textual/service/impl/TextualServiceImpl.java
index 7a436a9..e33abaf 100644
--- a/src/main/java/com/zhiyun/zhiyun03/textual/service/impl/TextualServiceImpl.java
+++ b/src/main/java/com/zhiyun/zhiyun03/textual/service/impl/TextualServiceImpl.java
@@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.Date;
 import java.util.List;
+import java.util.UUID;
 
 @Service
 public class TextualServiceImpl extends ServiceImpl<TextualMapper, Textual> implements TextualService {
@@ -61,6 +62,25 @@ public class TextualServiceImpl extends ServiceImpl<TextualMapper, Textual> impl
      */
     @Override
     public int addTextual(TextualVo textualVo) {
+        if(textualVo.getTextualName().isEmpty()){
+            throw new ServiceException("400","学术名称不能为空");
+        }
+        if(textualVo.getTextualUrl().isEmpty()){
+            throw new ServiceException("400","学术链接不能为空");
+        }
+        if (textualVo.getDirName().isEmpty()){
+            throw new ServiceException("400","归属目录不能为空");
+        }
+        if (textualVo.getTextualImg().isEmpty()){
+            throw new ServiceException("400","学术图片不能为空");
+        }
+
+        QueryWrapper<Textual> qwt=new QueryWrapper<>();
+        qwt.lambda().eq(Textual::getTextualName,textualVo.getTextualName()).or().eq(Textual::getTextualUrl,textualVo.getTextualUrl());
+        List<Textual> textuals = textualMapper.selectList(qwt);
+        if(textuals.size()!=0) {
+            throw new ServiceException("403","考证名称或链接已存在");
+        }
         //将vo类转换为实体类
         ConvertUtil convertUtil=new ConvertUtil();
         Textual textual = convertUtil.VoToEntity(textualVo, Textual.class);
@@ -86,7 +106,7 @@ public class TextualServiceImpl extends ServiceImpl<TextualMapper, Textual> impl
         Textual textual = textualMapper.selectOne(qwa);
         //查询目录
         QueryWrapper<Directory> qwd=new QueryWrapper<>();
-        qwd.lambda().eq(Directory::getId,textual.getDirId());
+        qwd.lambda().eq(Directory::getId,textual.getDirId()).eq(Directory::getDirIden,4);
         Directory directory = directoryMapper.selectOne(qwd);
         ConvertUtil convertUtil=new ConvertUtil();
         TextualVo textualVo = convertUtil.entityToVo(textual, TextualVo.class);
@@ -100,12 +120,24 @@ public class TextualServiceImpl extends ServiceImpl<TextualMapper, Textual> impl
      */
     @Override
     public int updateTextual(TextualVo textualVo) {
+        if(textualVo.getTextualName().isEmpty()){
+            throw new ServiceException("400","学术名称不能为空");
+        }
+        if(textualVo.getTextualUrl().isEmpty()){
+            throw new ServiceException("400","学术链接不能为空");
+        }
+        if (textualVo.getDirName().isEmpty()){
+            throw new ServiceException("400","归属目录不能为空");
+        }
+        if (textualVo.getTextualImg().isEmpty()){
+            throw new ServiceException("400","学术图片不能为空");
+        }
         //将vo类转换为实体类
         ConvertUtil convertUtil=new ConvertUtil();
         Textual textual = convertUtil.VoToEntity(textualVo, Textual.class);
         //根据目录名称查询目录id
         QueryWrapper<Directory> qwd=new QueryWrapper<>();
-        qwd.lambda().eq(Directory::getDirName,textualVo.getDirName());
+        qwd.lambda().eq(Directory::getDirName,textualVo.getDirName()).eq(Directory::getDirIden,4);
         Directory directory = directoryMapper.selectOne(qwd);
         //将目录id封装到实体类
         textual.setDirId(directory.getId());
@@ -125,4 +157,41 @@ public class TextualServiceImpl extends ServiceImpl<TextualMapper, Textual> impl
         }
         return 0;
     }
+
+    /**
+     * 查询目录
+     * @return
+     */
+    @Override
+    public List<Directory> queryDir() {
+        QueryWrapper<Directory> qwd=new QueryWrapper<>();
+        qwd.lambda().eq(Directory::getDirIden,4);
+        List<Directory> list = directoryMapper.selectList(qwd);
+        if(list.isEmpty()){
+            throw new ServiceException("400","目录数据为空");
+        }
+        return list;
+    }
+
+    @Override
+    public int addDirectory(Directory directory) {
+        if (directory.getDirName().isEmpty() && directory.getDirImg().isEmpty()){
+            throw new ServiceException("400","目录名称和图片不能为空");
+        }
+        QueryWrapper<Directory> qwd=new QueryWrapper<>();
+        qwd.lambda().eq(Directory::getDirName,directory.getDirName()).eq(Directory::getDirIden,4);
+        Directory directory1 = directoryMapper.selectOne(qwd);
+        if(directory1!=null){
+            throw new ServiceException("403","目录名称已存在");
+        }
+        int uuid= UUID.randomUUID().hashCode();
+        if(uuid<0){
+            uuid=-uuid;
+        }
+        directory.setDirAddtime(new Date());
+        directory.setId(uuid);
+        directory.setDirIden(4);
+        int insert = directoryMapper.insert(directory);
+        return insert;
+    }
 }
diff --git a/src/main/java/com/zhiyun/zhiyun03/utils/common/ResultCode.java b/src/main/java/com/zhiyun/zhiyun03/utils/common/ResultCode.java
index 8be8e27..8c12acd 100644
--- a/src/main/java/com/zhiyun/zhiyun03/utils/common/ResultCode.java
+++ b/src/main/java/com/zhiyun/zhiyun03/utils/common/ResultCode.java
@@ -3,12 +3,13 @@ package com.zhiyun.zhiyun03.utils.common;
 public enum ResultCode {
     SUCCESS("200", "成功"),
     Fail("500","失败"),
-    ERROR("-1", "系统异常"),
+
+    ERROR("-1", "NOTLOGIN"),
     PARAM_ERROR("1001", "参数异常"),
     USER_EXIST_ERROR("2001", "用户已存在"),
     USER_ACCOUNT_ERROR("2002", "账号或密码错误"),
     USER_NOT_EXIST_ERROR("2003", "未找到用户"),
-    ORDER_PAY_ERROR("3001", "库存不足,下单失败"),
+    NO_NULL_ERROR("3001", "账号或密码错误"),
     PARAM_LOST_ERROR("2004", "参数缺失"),
     PARAM_PASSWORD_ERROR("2005", "原密码输入错误"),
     ;
diff --git a/src/main/java/com/zhiyun/zhiyun03/utils/exception/GlobalExceptionHandler.java b/src/main/java/com/zhiyun/zhiyun03/utils/exception/GlobalExceptionHandler.java
index d892f9f..f9d2784 100644
--- a/src/main/java/com/zhiyun/zhiyun03/utils/exception/GlobalExceptionHandler.java
+++ b/src/main/java/com/zhiyun/zhiyun03/utils/exception/GlobalExceptionHandler.java
@@ -3,9 +3,13 @@ package com.zhiyun.zhiyun03.utils.exception;
 import com.zhiyun.zhiyun03.utils.common.JsonResult;
 import com.zhiyun.zhiyun03.utils.common.ResultCode;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 
+import javax.servlet.http.HttpServletRequest;
+
 // @RestController + @ResponseBody
 @RestControllerAdvice
 @Slf4j
@@ -18,6 +22,7 @@ public class GlobalExceptionHandler {
         return JsonResult.error(ResultCode.Fail, e.getMsg());
     }
 
+
     @ExceptionHandler(Exception.class)
     public JsonResult exceptionHandler(Exception e) {
         log.error("未知异常", e);
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 2c0ceed..0befe0c 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -19,7 +19,13 @@ spring:
     druid:
       url: jdbc:mysql://localhost:3306/zhiyun?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
       username: root
-      password: root
+      password: 123456
+  thymeleaf:
+    cache: false
+    prefix: classpath:/templates
+    encoding: UTF-8 #编码
+    suffix: .html # 模板后缀
+    mode: HTML #模板
   servlet:
     multipart:
       max-file-size: 50MB
diff --git a/src/main/resources/templates/layui-v2.6.8/academicList.html b/src/main/resources/templates/layui-v2.6.8/academicList.html
index 7c8ebba..3b56d27 100644
--- a/src/main/resources/templates/layui-v2.6.8/academicList.html
+++ b/src/main/resources/templates/layui-v2.6.8/academicList.html
@@ -188,7 +188,7 @@
         layui.use(['form'], function () {
             var form = layui.form;
             $.ajax({
-                url: 'http://localhost:8080/application/queryDir',
+                url: 'http://localhost:8080/academic/queryDir',
                 type: "get",
                 success: function (data) {
                     if (data.msg === "success") {
@@ -425,7 +425,7 @@
         layui.use(['form'], function() {
             var form = layui.form;
             $.ajax({
-                url: 'http://localhost:8080/application/queryDir',
+                url: 'http://localhost:8080/academic/queryDir',
                 type:"get",
                 success: function(data) {
                     if(data.msg === "success"){
diff --git a/src/main/resources/templates/layui-v2.6.8/gameList.html b/src/main/resources/templates/layui-v2.6.8/gameList.html
index 9050657..6ce7e84 100644
--- a/src/main/resources/templates/layui-v2.6.8/gameList.html
+++ b/src/main/resources/templates/layui-v2.6.8/gameList.html
@@ -183,7 +183,7 @@
         layui.use(['form'], function () {
             var form = layui.form;
             $.ajax({
-                url: 'http://localhost:8080/application/queryDir',
+                url: 'http://localhost:8080/game/queryDir',
                 type: "get",
                 success: function (data) {
                     if (data.msg === "success") {
@@ -418,7 +418,7 @@
         layui.use(['form'], function() {
             var form = layui.form;
             $.ajax({
-                url: 'http://localhost:8080/application/queryDir',
+                url: 'http://localhost:8080/game/queryDir',
                 type:"get",
                 success: function(data) {
                     if(data.msg === "success"){
diff --git a/src/main/resources/templates/layui-v2.6.8/index.html b/src/main/resources/templates/layui-v2.6.8/index.html
index 4001fa1..10d43f9 100644
--- a/src/main/resources/templates/layui-v2.6.8/index.html
+++ b/src/main/resources/templates/layui-v2.6.8/index.html
@@ -19,7 +19,7 @@
                 <dl class="layui-nav-child">
                     <dd><a href="">Your Profile</a></dd>
                     <dd><a href="">Settings</a></dd>
-                    <dd><a href="">Sign out</a></dd>
+                    <dd><a href="lgoin.html">Sign out</a></dd>
                 </dl>
             </li>
             <li class="layui-nav-item" lay-header-event="menuRight" lay-unselect>
diff --git a/src/main/resources/templates/layui-v2.6.8/knowledgeList.html b/src/main/resources/templates/layui-v2.6.8/knowledgeList.html
index 8eca2f1..cc12f69 100644
--- a/src/main/resources/templates/layui-v2.6.8/knowledgeList.html
+++ b/src/main/resources/templates/layui-v2.6.8/knowledgeList.html
@@ -187,7 +187,7 @@
         layui.use(['form'], function () {
             var form = layui.form;
             $.ajax({
-                url: 'http://localhost:8080/application/queryDir',
+                url: 'http://localhost:8080/knowledge/queryDir',
                 type: "get",
                 success: function (data) {
                     if (data.msg === "success") {
@@ -415,7 +415,7 @@
         layui.use(['form'], function() {
             var form = layui.form;
             $.ajax({
-                url: 'http://localhost:8080/application/queryDir',
+                url: 'http://localhost:8080/knowledge/queryDir',
                 type:"get",
                 success: function(data) {
                     if(data.msg === "success"){
diff --git a/src/main/resources/templates/layui-v2.6.8/layui/css/admin.css b/src/main/resources/templates/layui-v2.6.8/layui/css/admin.css
new file mode 100644
index 0000000..7708acf
--- /dev/null
+++ b/src/main/resources/templates/layui-v2.6.8/layui/css/admin.css
@@ -0,0 +1,2 @@
+/** layuiAdmin.std-v1.2.1 LPPL License By http://www.layui.com/admin/ */
+html #layuicss-layuiAdmin{display:none;position:absolute;width:1989px}::-webkit-input-placeholder{color:#ccc}html{background-color:#f2f2f2;color:#666}.layadmin-tabsbody-item,[template]{display:none}[lay-href],[lay-tips],[layadmin-event]{cursor:pointer}.layui-layout-admin .layui-header{position:fixed;top:0;left:0;width:100%;height:50px}.layui-layout-admin .layui-header .layui-nav .layui-nav-child a{color:#333}.layui-layout-admin .layui-side{width:220px;top:0;z-index:1001}.layui-layout-admin .layui-header .layui-nav .layui-nav-item,.layui-layout-admin .layui-logo{height:50px;line-height:50px}.layui-layout-admin .layui-logo{position:fixed;left:0;top:0;z-index:1002;width:220px;height:49px;padding:0 15px;box-sizing:border-box;overflow:hidden;font-weight:300;background-repeat:no-repeat;background-position:center center}.layadmin-pagetabs,.layui-layout-admin .layui-body,.layui-layout-admin .layui-footer,.layui-layout-admin .layui-layout-left{left:220px}.layadmin-pagetabs{position:fixed;top:50px;right:0;z-index:999}.layadmin-pagetabs .layui-breadcrumb{padding:0 15px}.layui-layout-admin .layui-body{position:fixed;top:90px;bottom:0}.layui-layout-admin .layui-body .layadmin-tabsbody-item{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.layui-layout-admin .layui-header .layui-nav-img{width:26px;height:26px}.layui-layout-admin .layui-header .layui-nav-child{top:55px}.layui-layout-admin .layui-header .layui-layout-right .layui-nav-child{left:auto;right:0}.layui-layout-admin .layui-header .layui-nav .layui-nav-child dd.layui-this,.layui-layout-admin .layui-header .layui-nav .layui-nav-child dd.layui-this a{background:0 0}.layadmin-pagetabs,.layui-layout-admin .layui-body,.layui-layout-admin .layui-footer,.layui-layout-admin .layui-header .layui-layout-right,.layui-layout-admin .layui-header .layui-nav .layui-nav-item,.layui-layout-admin .layui-layout-left,.layui-layout-admin .layui-logo,.layui-layout-admin .layui-side{transition:all .3s;-webkit-transition:all .3s}.layui-icon-login-qq{color:#3492ED}.layui-icon-login-wechat{color:#4DAF29}.layui-icon-login-weibo{color:#CF1900}.layui-form[wid100] .layui-form-label{width:100px}.layui-form[wid100] .layui-input-block{margin-left:130px}@media screen and (max-width:450px){.layui-form[wid100] .layui-form-item .layui-input-inline{margin-left:132px}.layui-form[wid100] .layui-form-item .layui-input-inline+.layui-form-mid{margin-left:130px}}.layui-form-item .layui-input-company{width:auto;padding-right:10px;line-height:38px}.layui-bg-white{background-color:#fff}.layadmin-loading{position:absolute;left:50%;top:50%;margin:-16px -15px;font-size:30px;color:#c2c2c2}.layadmin-fixed{position:fixed;left:0;top:0;z-index:999}.layadmin-link{color:#029789!important}.layadmin-link:hover{opacity:.8}.layui-layer-admin .layui-layer-title{height:50px;line-height:50px;border:0;background-color:#20222A;color:#fff}.layui-layer-admin i[close]{position:absolute;padding:5px;right:10px;top:12px;color:#fff;cursor:pointer}.layui-layer-admin .layui-layer-content{padding:20px;line-height:22px}.layui-layer-admin .layui-layer-content cite{font-style:normal;color:#FF5722}.layui-layer-adminRight{top:50px!important;bottom:0;box-shadow:1px 1px 10px rgba(0,0,0,.1);border-radius:0;overflow:auto}.layadmin-note .layui-layer-content{padding:0}.layadmin-note textarea{display:block;width:300px;height:132px;min-width:300px;min-height:132px;line-height:20px;padding:10px 20px;border:none;box-sizing:border-box;color:#666;word-wrap:break-word}.layui-layout-admin .layui-layout-left{padding:0 10px}.layui-layout-admin .layui-layout-left .layui-nav-item{margin:0 20px}.layui-layout-admin .layui-input-search{display:inline-block;vertical-align:middle;height:32px;border:none;cursor:text}.layui-layout-admin .layui-layout-left a,.layui-layout-admin .layui-layout-right{padding:0}.layui-header .layui-nav-item .layui-icon{position:relative;top:1px;font-size:16px}.layui-header .layui-layout-right .layui-badge-dot{margin-left:11px}.layui-header .layui-nav .layui-this:after,.layui-layout-admin .layui-header .layui-nav-bar{top:0!important;bottom:auto;height:3px;background-color:#fff;background-color:rgba(255,255,255,.3)}.layadmin-body-shade{position:fixed;display:none;left:0;right:0;top:0;bottom:0;background-color:rgba(0,0,0,.3);z-index:1000}.layui-side-menu .layui-side-scroll{width:240px}.layui-side-menu .layui-nav{width:220px;margin-top:50px;background:0 0}.layui-side-menu .layui-nav .layui-nav-item a{height:40px;line-height:40px;padding-left:45px;padding-right:30px}.layui-side-menu .layui-nav .layui-nav-item>a{padding-top:8px;padding-bottom:8px}.layui-side-menu .layui-nav .layui-nav-item a:hover{background:0 0}.layui-side-menu .layui-nav .layui-nav-itemed>.layui-nav-child{padding:5px 0}.layui-side-menu .layui-nav .layui-nav-item .layui-icon{position:absolute;top:50%;left:20px;margin-top:-19px}.layui-side-menu .layui-nav .layui-nav-child .layui-nav-child{background:0 0!important}.layui-side-menu .layui-nav .layui-nav-child .layui-nav-child a{padding-left:60px}.layui-side-menu .layui-nav .layui-nav-more{right:15px}@media screen and (max-width:992px){.layui-layout-admin .layui-side{transform:translate3d(-220px,0,0);-webkit-transform:translate3d(-220px,0,0);width:220px}.layadmin-pagetabs,.layui-layout-admin .layui-body,.layui-layout-admin .layui-footer,.layui-layout-admin .layui-layout-left{left:0}}.layadmin-side-shrink .layui-layout-admin .layui-logo{width:60px;background-image:url(res/logo.png)}.layadmin-side-shrink .layui-layout-admin .layui-logo span{display:none}.layadmin-side-shrink .layui-side{left:0;width:60px}.layadmin-side-shrink .layadmin-pagetabs,.layadmin-side-shrink .layui-layout-admin .layui-body,.layadmin-side-shrink .layui-layout-admin .layui-footer,.layadmin-side-shrink .layui-layout-admin .layui-layout-left{left:60px}.layadmin-side-shrink .layui-side-menu .layui-nav{position:static;width:60px}.layadmin-side-shrink .layui-side-menu .layui-nav-item{position:static}.layadmin-side-shrink .layui-side-menu .layui-nav-item>a{padding-right:0}.layadmin-side-shrink .layui-side-menu .layui-nav-item cite,.layadmin-side-shrink .layui-side-menu .layui-nav>.layui-nav-item>.layui-nav-child,.layadmin-side-shrink .layui-side-menu .layui-nav>.layui-nav-item>a .layui-nav-more{display:none;padding:8px 0;width:200px}.layadmin-side-shrink .layui-side-menu .layui-nav>.layui-nav-itemed>a{background:rgba(0,0,0,.3)}.layadmin-side-spread-sm .layadmin-pagetabs,.layadmin-side-spread-sm .layui-layout-admin .layui-body,.layadmin-side-spread-sm .layui-layout-admin .layui-footer,.layadmin-side-spread-sm .layui-layout-admin .layui-layout-left{left:0;transform:translate3d(220px,0,0);-webkit-transform:translate3d(220px,0,0)}.layadmin-side-spread-sm .layui-layout-admin .layui-layout-right{transform:translate3d(220px,0,0);-webkit-transform:translate3d(220px,0,0)}.layadmin-side-spread-sm .layui-side{transform:translate3d(0,0,0);-webkit-transform:translate3d(0,0,0)}.layadmin-side-spread-sm .layadmin-body-shade{display:block}.layadmin-pagetabs .layui-tab-title li:first-child .layui-tab-close,.layadmin-tabs-select.layui-nav .layui-nav-bar,.layadmin-tabs-select.layui-nav .layui-nav-more{display:none}.layadmin-pagetabs{height:40px;line-height:40px;padding:0 80px 0 40px;background-color:#fff;box-sizing:border-box;box-shadow:0 1px 2px 0 rgba(0,0,0,.1)}.layadmin-pagetabs .layadmin-tabs-control{position:absolute;top:0;width:40px;height:100%;text-align:center;cursor:pointer;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box;border-left:1px solid #f6f6f6}.layadmin-pagetabs .layadmin-tabs-control:hover{background-color:#f6f6f6}.layadmin-pagetabs .layui-icon-prev{left:0;border-left:none;border-right:1px solid #f6f6f6}.layadmin-pagetabs .layui-icon-next{right:40px}.layadmin-pagetabs .layui-icon-down{right:0}.layadmin-tabs-select.layui-nav{position:absolute;left:0;top:0;width:100%;height:100%;padding:0;background:0 0}.layadmin-tabs-select.layui-nav .layui-nav-item{line-height:40px}.layadmin-tabs-select.layui-nav .layui-nav-item>a{height:40px}.layadmin-tabs-select.layui-nav .layui-nav-item a{color:#666}.layadmin-tabs-select.layui-nav .layui-nav-child{top:40px;left:auto;right:0}.layadmin-tabs-select.layui-nav .layui-nav-child dd.layui-this,.layadmin-tabs-select.layui-nav .layui-nav-child dd.layui-this a{background-color:#f2f2f2!important;color:#333}.layadmin-pagetabs .layui-tab{margin:0;overflow:hidden}.layadmin-pagetabs .layui-tab-title{height:40px;border:none}.layadmin-pagetabs .layui-tab-title li{min-width:0;line-height:40px;max-width:160px;text-overflow:ellipsis;padding-right:40px;overflow:hidden;border-right:1px solid #f6f6f6;vertical-align:top}.layadmin-pagetabs .layui-tab-title li:first-child{padding-right:15px}.layadmin-pagetabs .layui-tab-title li .layui-tab-close{position:absolute;right:8px;top:50%;margin:-7px 0 0;width:16px;height:16px;line-height:16px;border-radius:50%;font-size:12px}.layadmin-pagetabs .layui-tab-title li:after{content:'';position:absolute;top:0;left:0;width:0;height:2px;border-radius:0;background-color:#292B34;transition:all .3s;-webkit-transition:all .3s}.layadmin-pagetabs .layui-tab-title li:hover:after{width:100%}.layadmin-pagetabs .layui-tab-title li.layui-this,.layadmin-pagetabs .layui-tab-title li:hover{background-color:#f6f6f6}.layadmin-pagetabs .layui-tab-title li.layui-this:after{width:100%;border:none;height:2px;background-color:#292B34}.layadmin-tabspage-none .layui-layout-admin .layui-header{border-bottom:none;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.layadmin-tabspage-none .layui-layout-admin .layui-body{top:50px}.layadmin-tabspage-none .layadmin-header{display:block}.layadmin-tabspage-none .layadmin-header .layui-breadcrumb{border-top:1px solid #f6f6f6}.layui-layout-admin .layui-header{border-bottom:1px solid #f6f6f6;box-sizing:border-box;background-color:#fff}.layui-layout-admin .layui-header a,.layui-layout-admin .layui-header a cite{color:#333}.layui-layout-admin .layui-header a:hover{color:#000}.layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-top-color:#666}.layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #666}.layui-layout-admin .layui-header .layui-nav .layui-this:after,.layui-layout-admin .layui-header .layui-nav-bar{height:2px;background-color:#20222A}.layui-layout-admin .layui-logo{background-color:#20222A;box-shadow:0 1px 2px 0 rgba(0,0,0,.15)}.layui-layout-admin .layui-logo,.layui-layout-admin .layui-logo a{color:#fff;color:rgba(255,255,255,.8)}.layui-side-menu{box-shadow:1px 0 2px 0 rgba(0,0,0,.05)}.layui-layout-admin .layui-footer{padding:10px 0;text-align:center;box-shadow:0 -1px 2px 0 rgba(0,0,0,.05)}.layadmin-setTheme-side,.layui-side-menu{background-color:#20222A;color:#fff}.layadmin-setTheme-header,.layui-layout-admin .layui-footer{background-color:#fff}.layui-tab-admin .layui-tab-title{background-color:#393D49;color:#fff}.layui-fluid{padding:15px}.layadmin-header{display:none;height:50px;line-height:50px;margin-bottom:0;border-radius:0}.layadmin-header .layui-breadcrumb{padding:0 15px}.layui-card-header{position:relative}.layui-card-header .layui-icon{line-height:initial;position:absolute;right:15px;top:50%;margin-top:-7px}.layadmin-iframe{position:absolute;width:100%;height:100%;left:0;top:0;right:0;bottom:0}.layadmin-carousel{height:185px!important;background-color:#fff}.layadmin-carousel .layui-carousel-ind li{background-color:#e2e2e2}.layadmin-carousel .layui-carousel-ind li:hover{background-color:#c2c2c2}.layadmin-carousel .layui-carousel-ind li.layui-this{background-color:#999}.layadmin-carousel .layui-carousel,.layadmin-carousel>[carousel-item]>*{background-color:#fff}.layadmin-carousel .layui-col-space10{margin:0}.layadmin-carousel .layui-carousel-ind{position:absolute;top:-41px;text-align:right}.layadmin-carousel .layui-carousel-ind ul{background:0 0}.layui-card .layui-tab-brief .layui-tab-title{height:42px;border-bottom-color:#f6f6f6}.layui-card .layui-tab-brief .layui-tab-title li{margin:0 15px;padding:0;line-height:42px}.layui-card .layui-tab-brief .layui-tab-title li.layui-this{color:#333}.layui-card .layui-tab-brief .layui-tab-title .layui-this:after{height:43px}.layui-card .layui-tab-brief .layui-tab-content{padding:15px}.layui-card .layui-table-view{margin:0}.layadmin-shortcut li{text-align:center}.layadmin-shortcut li .layui-icon{display:inline-block;width:100%;height:60px;line-height:60px;text-align:center;border-radius:2px;font-size:30px;background-color:#F8F8F8;color:#333;transition:all .3s;-webkit-transition:all .3s}.layadmin-shortcut li cite{position:relative;top:2px;display:block;color:#666;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:14px}.layadmin-shortcut li:hover .layui-icon{background-color:#f2f2f2}.layadmin-backlog .layadmin-backlog-body{display:block;padding:10px 15px;background-color:#f8f8f8;color:#999;border-radius:2px;transition:all .3s;-webkit-transition:all .3s}.layadmin-backlog-body h3{padding-bottom:10px;font-size:12px}.layadmin-backlog-body p cite{font-style:normal;font-size:30px;font-weight:300;color:#009688}.layadmin-backlog-body:hover{background-color:#f2f2f2;color:#888}.layadmin-dataview{height:332px!important}.layadmin-dataview>[carousel-item]:before{display:none}.layadmin-dataview>[carousel-item]>div{height:332px}.layadmin-takerates{padding-top:5px}.layadmin-takerates .layui-progress{margin:50px 0 60px}.layadmin-takerates .layui-progress:last-child{margin-bottom:10px}.layadmin-takerates .layui-progress h3{position:absolute;right:0;top:-35px;color:#999;font-size:14px}.layadmin-takerates .layui-progress-bar{text-align:left}.layadmin-takerates .layui-progress-text{top:-35px;line-height:26px;font-size:26px}.layadmin-news{height:60px!important;padding:5px 0}.layadmin-news a{display:block;line-height:60px;text-align:center}.layadmin-news .layui-carousel-ind{height:45px}.layadmin-list li{margin-bottom:6px;padding-bottom:6px;border-bottom-color:#f6f6f6;list-style-position:inside;list-style-type:disc;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layadmin-list li a{color:#666}.layadmin-list li a:hover{color:#009688}.layadmin-list li:last-child{border:none;padding:0;margin:0}.layadmin-text p{margin-bottom:10px;text-indent:2em}.layadmin-text p:last-child{margin:0}.layadmin-font-em{font-size:13px;color:#758697}.layui-card-header .layui-a-tips{position:absolute;right:15px;color:#01AAED}.layuiadmin-card-text{background-color:#f8f8f8;color:#777;padding:24px}.layuiadmin-card-text .layui-text-top{padding-bottom:10px}.layuiadmin-card-text .layui-text-top i{margin-right:10px;font-size:24px;color:#009688}.layuiadmin-card-text .layui-text-top a{line-height:24px;font-size:16px;vertical-align:top}.layuiadmin-card-text .layui-text-center{height:44px;line-height:22px;margin-bottom:10px;overflow:hidden}.layuiadmin-card-text .layui-text-bottom{position:relative}.layuiadmin-card-text .layui-text-bottom a{color:#777;font-size:12px;text-overflow:ellipsis;word-break:break-all}.layuiadmin-card-text .layui-text-bottom span{color:#CCC;font-size:12px;position:absolute;right:0}.layuiadmin-badge,.layuiadmin-btn-group,.layuiadmin-span-color{position:absolute;right:15px}.layuiadmin-card-link a:hover,.layuiadmin-card-team li a:hover,.layuiadmin-card-text a:hover{color:#01AAED;transition:all .3s}.layuiadmin-card-status{padding:0 10px 10px}.layuiadmin-card-status dd{padding:15px 0;border-bottom:1px solid #EEE;display:-webkit-flex;display:flex}.layuiadmin-card-status dd:last-child{border:none}.layuiadmin-card-status dd div.layui-status-img,.layuiadmin-card-team .layui-team-img{width:32px;height:32px;border-radius:50%;background-color:#009688;margin-right:15px}.layuiadmin-card-status dd div.layui-status-img a{width:100%;height:100%;display:inline-block;text-align:center;line-height:32px}.layuiadmin-card-status dd div.layui-status-img img,.layuiadmin-card-team .layui-team-img img{width:50%;height:50%}.layuiadmin-card-status dd div a{color:#01AAED}.layuiadmin-card-status dd div span{color:#BBB}.layuiadmin-card-link{padding-left:10px;font-size:0}.layuiadmin-card-link a{display:inline-block;width:25%;color:#666;font-size:14px;margin-bottom:12px}.layuiadmin-card-link button{vertical-align:top}.layuiadmin-card-link button:hover{color:#009688}.layuiadmin-card-team li{padding:10px 0 10px 10px}.layuiadmin-card-team .layui-team-img{display:inline-block;margin-right:8px;width:24px;height:24px;text-align:center;line-height:24px}.layuiadmin-card-team span{color:#777}.layuiadmin-badge{top:50%;margin-top:-9px;color:#01AAED}.layuiadmin-card-list{padding:15px}.layuiadmin-card-list p.layuiadmin-big-font{font-size:36px;color:#666;line-height:36px;padding:5px 0 10px;overflow:hidden;text-overflow:ellipsis;word-break:break-all;white-space:nowrap}.layuiadmin-card-list p.layuiadmin-normal-font{padding-bottom:10px;font-size:20px;color:#666;line-height:24px}.layuiadmin-span-color{font-size:14px}.layuiadmin-span-color i{padding-left:5px}.layuiadmin-card-status li{position:relative;padding:10px 0;border-bottom:1px solid #EEE}.layuiadmin-card-status li h3{padding-bottom:5px;font-weight:700}.layuiadmin-card-status li p{padding-bottom:10px}.layuiadmin-card-status li>span{color:#999}.layuiadmin-home2-usernote .layuiadmin-reply{display:none;position:absolute;right:0;bottom:12px}.layuiadmin-home2-usernote li:hover .layuiadmin-reply{display:block}.layuiadmin-page-table td span{color:#2F4056}.layuiadmin-page-table td span.first{color:#FF5722}.layuiadmin-page-table td span.second{color:#FFB800}.layuiadmin-page-table td span.third{color:#5FB878}.layuiAdmin-msg-detail h1{font-size:16px}.layuiAdmin-msg-detail .layui-card-header{height:auto;line-height:30px;padding:15px}.layuiAdmin-msg-detail .layui-card-header span{padding:0 5px;color:#999}.layuiAdmin-msg-detail .layui-card-header span:first-child{padding-left:0}.layuiAdmin-msg-detail .layui-card-body{padding:15px}.layuiadmin-content-bread{padding-bottom:20px}.layuiadmin-order-progress{position:relative;top:12px}.layui-card-header.layuiadmin-card-header-auto{padding-top:15px;padding-bottom:15px;height:auto}.layuiadmin-card-header-auto i.layuiadmin-button-btn{position:relative;right:0;top:0;vertical-align:middle}.layuiadmin-card-header-auto .layui-form-item:last-child{margin-bottom:0}.layadmin-setTheme{padding:15px;overflow-x:hidden}.layadmin-setTheme>h5{padding:20px 0 10px;color:#000}.layadmin-setTheme>h5:first-child{padding-top:0}.layadmin-setTheme-color{width:330px;font-size:0}.layadmin-setTheme-color li{position:relative;display:inline-block;vertical-align:top;width:80px;height:50px;margin:0 15px 15px 0;background-color:#f2f2f2;cursor:pointer;font-size:12px;color:#666}.layadmin-setTheme-color li:after{content:'';position:absolute;z-index:20;top:50%;left:50%;width:1px;height:0;border:1px solid #f2f2f2;transition:all .3s;-webkit-transition:all .3s;opacity:0}.layadmin-setTheme-color li.layui-this:after,.layadmin-setTheme-color li:hover:after{width:100%;height:100%;padding:4px;top:-5px;left:-5px;border-color:#5FB878;opacity:1}.layadmin-setTheme-header{position:relative;z-index:10;height:10px;border-top:1px solid #f2f2f2;border-right:1px solid #f2f2f2}.layadmin-setTheme-side{position:absolute;left:0;top:0;width:20px;height:100%;z-index:11;box-shadow:1px 0 2px 0 rgba(0,0,0,.05)}.layadmin-setTheme-logo{position:absolute;left:0;top:0;width:100%;height:10px;box-shadow:0 1px 2px 0 rgba(0,0,0,.15)}.layadmin-form-right{text-align:right}.layadmin-about p{margin-bottom:10px}.layadmin-menu-list .layui-card-header{height:50px;line-height:50px;font-size:16px}.layadmin-menu-list .layui-card-header:active{background-color:#f2f2f2}.layadmin-menu-list .layui-card-header .layui-icon{position:relative;top:1px;left:0;display:inline-block;margin:0 10px;font-size:18px}@-webkit-keyframes layui-rl{from{-webkit-transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(0,0,0)}}@keyframes layui-rl{from{transform:translate3d(100%,0,0)}to{transform:translate3d(0,0,0)}}.layui-anim-rl{-webkit-animation-name:layui-rl;animation-name:layui-rl}@-webkit-keyframes layui-lr{from{-webkit-transform:translate3d(0 0,0);opacity:1}to{-webkit-transform:translate3d(100%,0,0);opacity:1}}@keyframes layui-lr{from{transform:translate3d(0,0,0)}to{transform:translate3d(100%,0,0)}}.layui-anim-lr,.layui-anim-rl.layer-anim-close{-webkit-animation-name:layui-lr;animation-name:layui-lr}.layadmin-tips{margin-top:30px;text-align:center}.layadmin-tips .layui-icon[face]{display:inline-block;font-size:300px;color:#393D49}.layadmin-tips .layui-text{width:500px;margin:30px auto;padding-top:20px;border-top:5px solid #009688;font-size:16px}.layadmin-tips h1{font-size:100px;line-height:100px;color:#009688}.layadmin-tips .layui-text .layui-anim{display:inline-block}@media screen and (max-width:768px){.layadmin-panel-selection{margin:0;width:auto}.layui-body .layui-nav .layui-nav-item{display:block}.layui-layout-admin .layui-body .layadmin-tabsbody-item{-webkit-overflow-scrolling:touch;overflow:auto}}
diff --git a/src/main/resources/templates/layui-v2.6.8/layui/css/log.css b/src/main/resources/templates/layui-v2.6.8/layui/css/log.css
new file mode 100644
index 0000000..789003b
--- /dev/null
+++ b/src/main/resources/templates/layui-v2.6.8/layui/css/log.css
@@ -0,0 +1,2 @@
+/** layuiAdmin.std-v1.2.1 LPPL License By http://www.layui.com/admin/ */
+#LAY_app,body,html{height:100%}.layui-layout-body{overflow:auto}#LAY-user-login,.layadmin-user-display-show{display:block!important}.layadmin-user-login{position:relative;left:0;top:0;padding:110px 0;min-height:100%;box-sizing:border-box}.layadmin-user-login-main{width:375px;margin:0 auto;box-sizing:border-box}.layadmin-user-login-box{padding:20px}.layadmin-user-login-header{text-align:center}.layadmin-user-login-header h2{margin-bottom:10px;font-weight:300;font-size:30px;color:#000}.layadmin-user-login-header p{font-weight:300;color:#999}.layadmin-user-login-body .layui-form-item{position:relative}.layadmin-user-login-icon{position:absolute;left:1px;top:1px;width:38px;line-height:36px;text-align:center;color:#d2d2d2}.layadmin-user-login-body .layui-form-item .layui-input{padding-left:38px}.layadmin-user-login-codeimg{max-height:38px;width:100%;cursor:pointer;box-sizing:border-box}.layadmin-user-login-other{position:relative;font-size:0;line-height:38px;padding-top:20px}.layadmin-user-login-other>*{display:inline-block;vertical-align:middle;margin-right:10px;font-size:14px}.layadmin-user-login-other .layui-icon{position:relative;top:2px;font-size:26px}.layadmin-user-login-other a:hover{opacity:.8}.layadmin-user-jump-change{float:right}.layadmin-user-login-footer{position:absolute;left:0;bottom:0;width:100%;line-height:30px;padding:20px;text-align:center;box-sizing:border-box;color:rgba(0,0,0,.5)}.layadmin-user-login-footer span{padding:0 5px}.layadmin-user-login-footer a{padding:0 5px;color:rgba(0,0,0,.5)}.layadmin-user-login-footer a:hover{color:rgba(0,0,0,1)}.layadmin-user-login-main[bgimg]{background-color:#fff;box-shadow:0 0 5px rgba(0,0,0,.05)}.ladmin-user-login-theme{position:fixed;bottom:0;left:0;width:100%;text-align:center}.ladmin-user-login-theme ul{display:inline-block;padding:5px;background-color:#fff}.ladmin-user-login-theme ul li{display:inline-block;vertical-align:top;width:64px;height:43px;cursor:pointer;transition:all .3s;-webkit-transition:all .3s;background-color:#f2f2f2}.ladmin-user-login-theme ul li:hover{opacity:.9}@media screen and (max-width:768px){.layadmin-user-login{padding-top:60px}.layadmin-user-login-main{width:300px}.layadmin-user-login-box{padding:10px}}
diff --git a/src/main/resources/templates/layui-v2.6.8/login.html b/src/main/resources/templates/layui-v2.6.8/login.html
index 8a3958f..4a66899 100644
--- a/src/main/resources/templates/layui-v2.6.8/login.html
+++ b/src/main/resources/templates/layui-v2.6.8/login.html
@@ -1,92 +1,76 @@
 <!DOCTYPE html>
-<html lang="en">
+<html>
 <head>
-    <meta charset="UTF-8">
-    <title>Title</title>
-
-    <style>
-        * {
-            margin: 0;
-            padding: 0;
-        }
-        html {
-            height: 100%;
-        }
-        body {
-            height: 100%;
-        }
-        .container {
-            height: 100%;
-            background-image: linear-gradient(to right, #E0E0E0, #A3A3A3);
-        }
-        .login-wrapper {
-            background-color: white;
-            width: 358px;
-            height: 588px;
-            border-radius: 15px;
-            padding: 0 50px;
-            position: relative;
-            left: 50%;
-            top: 50%;
-            transform: translate(-50%,-50%);
-        }
-        .header {
-            font-size: 38px;
-            font-weight: bold;
-            text-align: center;
-            line-height: 200px;
-        }
-        .input-item {
-            display: block;
-            width: 100%;
-            margin-bottom: 20px;
-            border: 0;
-            padding: 10px;
-            border-bottom: 1px solid rgb(128,125,125);
-            font-size: 15px;
-            outline: none;
-        }
-        .input-item::placeholder {
-            text-transform: uppercase;
-        }
-        .btn {
-            text-align: center;
-            padding: 10px;
-            width: 100%;
-            margin-top: 40px;
-            background-image: linear-gradient(to right,#a6c1ee, #fbc2eb);
-            color: #fff;
-            cursor: pointer;
-        }
-        .msg {
-            text-align: center;
-            line-height: 88px;
-        }
-        a {
-            text-decoration-line: none;
-            color: #3580BB;
-        }
-
-    </style>
-
-
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <title>登录</title>
+    <link rel="stylesheet" href="layui/css/layui.css">
+    <link rel="stylesheet" href="layui/css/admin.css">
+    <link rel="stylesheet" href="layui/css/log.css">
 </head>
 <body>
-<div class="container">
-    <div class="login-wrapper">
-        <div class="header">用户登录</div>
-        <div class="form-wrapper">
-            <form action="http://localhost:8080/user/login" method="post">
-            <input type="text" name="username" placeholder="username" class="input-item">
-            <input type="password" name="password" placeholder="password" class="input-item">
-            <div><input class="btn" style="border:none;" type="submit" value="登录"></div>
-            </form>
+<div class="layadmin-user-login layadmin-user-display-show" id="LAY-user-login" style="display: none;">
+    <div class="layadmin-user-login-main">
+        <div class="layadmin-user-login-box layadmin-user-login-header">
+            <h2>用户登录</h2>
+            <p>客户端后台管理</p>
         </div>
-        <div class="msg">
-            Don't have account?
-            <a href="">Sign up</a>
+        <div class="layadmin-user-login-box layadmin-user-login-body layui-form">
+            <div class="layui-form-item">
+                <label class="layadmin-user-login-icon layui-icon layui-icon-username"></label>
+                <input type="text" id="userName" name="userName"  lay-verify="required" placeholder="用户名" class="layui-input">
+            </div>
+            <div class="layui-form-item">
+                <label class="layadmin-user-login-icon layui-icon layui-icon-password"></label>
+                <input type="password" id="password" name="password" lay-verify="required" placeholder="密码" readonly onfocus="this.removeAttribute('readonly');" class="layui-input">
+            </div>
+            <div class="layui-form-item">
+                <button class="layui-btn layui-btn-fluid" lay-submit  id="userlogin">登 入</button>
+            </div>
         </div>
     </div>
 </div>
+
+<script src="layui/layui.js" type="text/javascript"></script>
+<script>
+
+    //JavaScript代码区域
+    layui.use(['layer','element','form','jquery'], function(){
+        let layer = layui.layer;
+        let form = layui.form;
+        let element = layui.element;
+        let $ = layui.jquery;
+
+        $("#userlogin").click(function(){
+            let userName = $("#userName").val()
+            let password = $("#password").val()
+            $.ajax({
+                url:"http://localhost:8080/user/login",
+                data:{
+                    userCode:userName,
+                    password:password
+                },
+                type:"post",
+                success:function(result){
+                    console.log(result);
+                    if (result.msg==='success'){
+                        layer.msg(result.tip,{icon:1,time:100},function () {
+                            location.href="http://localhost:63342/zhiyun/src/main/resources/templates/layui-v2.6.8/index.html"
+                        })
+                    }else if (result.type==='error'){
+                        layer.msg(result.tip)
+                    }else {
+                        layer.msg('未知异常,请联系管理员')
+                    }
+                },
+
+            })
+        });
+
+
+
+    });
+
+</script>
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/src/main/resources/templates/layui-v2.6.8/textualList.html b/src/main/resources/templates/layui-v2.6.8/textualList.html
index b6da7d6..a72b799 100644
--- a/src/main/resources/templates/layui-v2.6.8/textualList.html
+++ b/src/main/resources/templates/layui-v2.6.8/textualList.html
@@ -190,7 +190,7 @@
         layui.use(['form'], function () {
             var form = layui.form;
             $.ajax({
-                url: 'http://localhost:8080/application/queryDir',
+                url: 'http://localhost:8080/textual/queryDir',
                 type: "get",
                 success: function (data) {
                     if (data.msg === "success") {
@@ -391,7 +391,7 @@
         layui.use(['form'], function () {
             var form = layui.form;
             $.ajax({
-                url: 'http://localhost:8080/application/queryDir',
+                url: 'http://localhost:8080/textual/queryDir',
                 type: "get",
                 success: function (data) {
                     if (data.msg === "success") {