liuchanglan 4 years ago
parent
commit
6a827d4d66
42 changed files with 1421 additions and 246 deletions
  1. 14 1
      Dockerfile
  2. 24 1
      README.md
  3. BIN
      SansSerif.ttf
  4. 5 0
      src/main/java/com/gz/controller/archive/ArchiveController.java
  5. 1 1
      src/main/java/com/gz/controller/archive/SecondaryArchiveController.java
  6. 2 1
      src/main/java/com/gz/controller/borrow/ArchiveBorrowController.java
  7. 5 1
      src/main/java/com/gz/controller/system/AdminController.java
  8. 6 0
      src/main/java/com/gz/controller/system/AuthController.java
  9. 12 0
      src/main/java/com/gz/dto/borrow/ArchiveBorrowDTO.java
  10. 2 0
      src/main/java/com/gz/mapper/archive/ArchiveMapper.java
  11. 2 1
      src/main/java/com/gz/mapper/system/AdminMapper.java
  12. 1 0
      src/main/java/com/gz/rvo/archive/ArchiveRVO.java
  13. 2 2
      src/main/java/com/gz/rvo/borrow/AuditInfoRVO.java
  14. 13 0
      src/main/java/com/gz/rvo/system/AdminRVO.java
  15. 6 1
      src/main/java/com/gz/service/archive/ArchiveService.java
  16. 1 0
      src/main/java/com/gz/service/archive/impl/ArchiveFileServiceImpl.java
  17. 16 1
      src/main/java/com/gz/service/archive/impl/ArchiveServiceImpl.java
  18. 2 1
      src/main/java/com/gz/service/borrow/ArchiveBorrowService.java
  19. 28 4
      src/main/java/com/gz/service/borrow/impl/ArchiveBorrowServiceImpl.java
  20. 8 0
      src/main/java/com/gz/service/system/AdminService.java
  21. 4 1
      src/main/java/com/gz/service/system/AuthService.java
  22. 6 0
      src/main/java/com/gz/service/system/impl/AdminServiceImpl.java
  23. 14 3
      src/main/java/com/gz/service/system/impl/AuthServiceImpl.java
  24. 15 0
      src/main/java/com/gz/vo/borrow/BorrowVO.java
  25. 3 0
      src/main/java/com/gz/vo/rabbitmq/OcrEtlVO.java
  26. 1 1
      src/main/resources/application-test.yml
  27. 18 0
      src/main/resources/mapper/adminMapper.xml
  28. 6 13
      src/main/resources/mapper/archiveBorrowMapper.xml
  29. 23 0
      src/main/resources/mapper/archiveMapper.xml
  30. 2 7
      src/main/resources/mapper/statisticsMapper.xml
  31. 5 0
      src/main/resources/static/js/http-client.env.json
  32. 32 6
      src/main/resources/static/js/lay-module/request/http.js
  33. 150 48
      src/main/resources/static/page/archive/advancedSearch.html
  34. 61 13
      src/main/resources/static/page/archive/editSecondary.html
  35. 4 2
      src/main/resources/static/page/archive/list.html
  36. 2 3
      src/main/resources/static/page/archive/secondaryList.html
  37. 124 23
      src/main/resources/static/page/archive/show.html
  38. 2 2
      src/main/resources/static/page/auditList/audit.html
  39. 5 1
      src/main/resources/static/page/auditList/list.html
  40. 442 80
      src/main/resources/static/page/borrow/list.html
  41. 237 0
      src/main/resources/static/page/borrow/listaaa.html
  42. 115 28
      src/main/resources/static/page/borrow/reserve.html

+ 14 - 1
Dockerfile

@@ -1,5 +1,18 @@
-FROM openjdk:8-jdk-alpine
+# 构建Java 镜像
+#FROM centos:7
+#WORKDIR /usr/local/docker
+#ADD jdk-8u231-linux-x64.tar.gz /usr/local/docker
+#ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_231
+#ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
+#ENV PATH=$JAVA_HOME/bin:$PATH
+#CMD ["java","-version"]
+
+# 构建项目
+#FROM openjdk:8-jdk-alpine
+FROM java:1.8
 ENTRYPOINT 8473136@qq.com
+COPY ./SansSerif.ttf  /usr/share/fonts/
+RUN chmod 755 /usr/share/fonts/*.ttf
 COPY ./target/**.jar app.jar
 EXPOSE 9091
 ENTRYPOINT ["java","-jar","./app.jar"]

+ 24 - 1
README.md

@@ -3,6 +3,7 @@
 ## 1.环境信息
 + dev 开发环境
 + test 测试环境
++ prod 生产环境
 
 ## 2.服务器信息
 
@@ -12,8 +13,30 @@
     * 用户名 `root`
     * 密码 ` Jda!2t456`
 
-+ ### 应用服务器
++ ### 应用服务器+
   #### 16h32g 1000g Centos7.8
     * ip `66.1.21.158`
     * 用户名 `root`
     * 密码 ` Jda!2t456`
+
+
+## 3.配置文件
+```yaml
+upload-file: #上传文件配置
+  server-file-url-prefix: http://127.0.0.1:${server.port} #文件下载地址(一般为本机ip)
+  file-root-directory: E:\cache # 文件存储根目录
+  archive-file-root-directory: E:\cache\archive # 档案文件根目录
+```
+
+## 4.部署命令:
+```shell
+# 打包
+docker build -t registry.cn-hangzhou.aliyuncs.com/8473136_guozhi/guihua_archive:20210314 .  
+# 运行
+docker run -d --name guihua_archive \
+-p 9091:9091 \
+-v /home/archive-file:/home/archive-file \
+-v /home/file:/home/file \
+registry.cn-hangzhou.aliyuncs.com/8473136_guozhi/guihua_archive:20210314  
+```
+  

BIN
SansSerif.ttf


+ 5 - 0
src/main/java/com/gz/controller/archive/ArchiveController.java

@@ -69,4 +69,9 @@ public class ArchiveController {
     Integer importExcel(@RequestBody MultipartFile file) throws IOException {
         return service.importExcel(file);
     }
+
+    @GetMapping("selectByPrimaryKeyText")
+    ArchiveRVO selectByPrimaryKeyText(Integer id){
+        return service.selectByPrimaryKeyText(id);
+    }
 }

+ 1 - 1
src/main/java/com/gz/controller/archive/SecondaryArchiveController.java

@@ -29,7 +29,7 @@ public class SecondaryArchiveController {
      * @since 2020/9/4 14:46
      */
     @PostMapping("insert")
-    Integer insert(@RequestBody SecondaryArchiveInsertVO dto) throws Exception{
+    Integer insert(SecondaryArchiveInsertVO dto) throws Exception{
         return service.insert(dto);
     }
 

+ 2 - 1
src/main/java/com/gz/controller/borrow/ArchiveBorrowController.java

@@ -8,6 +8,7 @@ import com.gz.rvo.borrow.AuditInfoRVO;
 import com.gz.service.archive.ArchiveService;
 import com.gz.service.borrow.ArchiveBorrowService;
 import com.gz.vo.PageVO;
+import com.gz.vo.borrow.BorrowVO;
 import com.gz.vo.borrow.SearchBorrowVO;
 import org.springframework.web.bind.annotation.*;
 
@@ -29,7 +30,7 @@ public class ArchiveBorrowController {
     private ArchiveService archiveService;
 
     @PostMapping("borrow")
-    Integer borrow(@RequestBody ArchiveBorrowDTO dto) throws Exception {
+    Integer borrow(@RequestBody BorrowVO dto) throws Exception {
         return service.borrow(dto);
     }
 

+ 5 - 1
src/main/java/com/gz/controller/system/AdminController.java

@@ -3,6 +3,7 @@ package com.gz.controller.system;
 import com.github.pagehelper.PageInfo;
 import com.gz.core.annotation.TraceLog;
 import com.gz.dto.system.AdminDTO;
+import com.gz.rvo.system.AdminRVO;
 import com.gz.service.system.AdminService;
 import com.gz.vo.system.AdminVO;
 import org.springframework.web.bind.annotation.*;
@@ -89,6 +90,9 @@ public class AdminController {
         return adminService.selectAll();
     }
 
-
+    @GetMapping("selectByPrimaryKeyDept")
+    AdminRVO selectByPrimaryKeyDept(String id){
+        return adminService.selectByPrimaryKeyDept(id);
+    }
 
 }

+ 6 - 0
src/main/java/com/gz/controller/system/AuthController.java

@@ -4,6 +4,7 @@ import com.gz.core.exception.BusinessException;
 import com.gz.dto.system.AdminDTO;
 import com.gz.dto.system.MenuDTO;
 import com.gz.jwt.JwtPayload;
+import com.gz.rvo.system.AdminRVO;
 import com.gz.rvo.system.InitialHomeRVO;
 import com.gz.rvo.system.LoginRVO;
 import com.gz.service.system.AuthService;
@@ -86,4 +87,9 @@ public class AuthController {
     public AdminDTO currLoginAdmin(){
         return authService.currLoginAdmin();
     }
+
+    @GetMapping("currLoginAdminDept")
+    AdminRVO currLoginAdminDept(){
+       return authService.currLoginAdminDept();
+    }
 }

+ 12 - 0
src/main/java/com/gz/dto/borrow/ArchiveBorrowDTO.java

@@ -45,4 +45,16 @@ public class ArchiveBorrowDTO extends BaseDTO {
 
     // 归还状态
     private Integer returnStatus;
+
+    // 姓名
+    private String name;
+
+    // 部门
+    private String dept;
+
+    // 身份证
+    private String idCard;
+
+    //手机号
+    private String phone;
 }

+ 2 - 0
src/main/java/com/gz/mapper/archive/ArchiveMapper.java

@@ -38,4 +38,6 @@ public interface ArchiveMapper extends Mapper<ArchiveDTO> {
     List<ArchiveDTO> selectRoleAll(Integer roleId);
 
     ArchiveDTO selectByRolePrimaryKey(Integer roleId, Object id);
+
+    ArchiveRVO selectByPrimaryKeyText(Integer id);
 }

+ 2 - 1
src/main/java/com/gz/mapper/system/AdminMapper.java

@@ -1,6 +1,7 @@
 package com.gz.mapper.system;
 
 import com.gz.dto.system.AdminDTO;
+import com.gz.rvo.system.AdminRVO;
 import tk.mybatis.mapper.common.Mapper;
 
 /**
@@ -9,5 +10,5 @@ import tk.mybatis.mapper.common.Mapper;
  * @date 2020/9/4 11:25
  */
 public interface AdminMapper extends Mapper<AdminDTO> {
-
+    AdminRVO selectByPrimaryKeyDept(String id);
 }

+ 1 - 0
src/main/java/com/gz/rvo/archive/ArchiveRVO.java

@@ -10,4 +10,5 @@ import lombok.Data;
 @Data
 public class ArchiveRVO extends ArchiveDTO {
     private String mjText;
+    private String mlText;
 }

+ 2 - 2
src/main/java/com/gz/rvo/borrow/AuditInfoRVO.java

@@ -13,9 +13,9 @@ public class AuditInfoRVO {
     // 档号
     private String dh;
     // 借阅人
-    private String adminName;
+    private String name;
     // 借阅单位
-    private String deptId;
+    private String dept;
     // 题名
     private String tm;
     // 证件号码

+ 13 - 0
src/main/java/com/gz/rvo/system/AdminRVO.java

@@ -0,0 +1,13 @@
+package com.gz.rvo.system;
+
+import com.gz.dto.system.AdminDTO;
+import lombok.Data;
+
+/**
+ * @author LiuchangLan
+ * @date 2021/3/12 13:27
+ */
+@Data
+public class AdminRVO extends AdminDTO {
+    private String deptName;
+}

+ 6 - 1
src/main/java/com/gz/service/archive/ArchiveService.java

@@ -86,5 +86,10 @@ public interface ArchiveService {
      */
     Integer importExcel(MultipartFile file) throws IOException;
 
-
+    /**
+     * @description 根据主键查询
+     * @author LiuChangLan
+     * @since 2021/3/13 11:16
+     */
+    ArchiveRVO selectByPrimaryKeyText(Integer id);
 }

+ 1 - 0
src/main/java/com/gz/service/archive/impl/ArchiveFileServiceImpl.java

@@ -127,6 +127,7 @@ public class ArchiveFileServiceImpl implements ArchiveFileService {
         if (fileType == 0) {
             ArchiveDTO d = archiveMapper.selectByPrimaryKey(archiveFileDTO.getArchiveId());
             OcrEtlVO ocrEtlVO = BeanUtil.copyProperties(d, OcrEtlVO.class);
+            ocrEtlVO.setSecondaryArchiveId(secondaryArchiveId);
             ocrEtlVO.setFileUrl(serverFileUrlPrefix + archiveFileDTO.getFilePath() + "/" + archiveFileDTO.getFileName());
             rabbitTemplate.convertAndSend(dataExchangeName, ocrBindingKey, JSON.toJSONString(ocrEtlVO));
         }

+ 16 - 1
src/main/java/com/gz/service/archive/impl/ArchiveServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.poi.excel.ExcelReader;
 import cn.hutool.poi.excel.ExcelUtil;
 import com.alibaba.fastjson.JSONObject;
@@ -95,8 +96,17 @@ public class ArchiveServiceImpl implements ArchiveService {
         Map<String, Object> params = vo.getParams();
         String sql = "";
         if (params != null) {
+            if (StrUtil.isNotEmpty(String.valueOf(params.get("time")))) {
+                String[] times = String.valueOf(params.get("time")).split(" - ");
+                sql += "AND (a.create_time BETWEEN '" + times[0] +"'" + " AND '" + times[1] +"')";
+            }
             for (int i = 1; i <= params.keySet().size() / 3; i++) {
-                sql += "and " + params.get("field_" + i);
+                if(i == 1){
+                    sql += "and ";
+                }else {
+                    sql += params.get("join_" + i) + " ";
+                }
+                sql +=  params.get("field_" + i);
                 if ("like".equals(params.get("condition_" + i))) {
                     sql += " like" + " '%" + params.get("variable_" + i) + "%'";
                 } else {
@@ -291,4 +301,9 @@ public class ArchiveServiceImpl implements ArchiveService {
         log.info("成功添加{}行数据", count);
         return count;
     }
+
+    @Override
+    public ArchiveRVO selectByPrimaryKeyText(Integer id) {
+        return mapper.selectByPrimaryKeyText(id);
+    }
 }

+ 2 - 1
src/main/java/com/gz/service/borrow/ArchiveBorrowService.java

@@ -10,6 +10,7 @@ import com.gz.rvo.borrow.AuditInfoRVO;
 import com.gz.vo.PageVO;
 import com.gz.vo.archive.InsertArchiveVO;
 import com.gz.vo.archive.SearchArchiveVO;
+import com.gz.vo.borrow.BorrowVO;
 import com.gz.vo.borrow.SearchBorrowVO;
 
 import java.util.List;
@@ -40,7 +41,7 @@ public interface ArchiveBorrowService {
      * @author LiuChangLan
      * @since 2021/2/27 14:57
      */
-    Integer borrow(ArchiveBorrowDTO dto) throws Exception;
+    Integer borrow(BorrowVO dto) throws Exception;
 
 
     /**

+ 28 - 4
src/main/java/com/gz/service/borrow/impl/ArchiveBorrowServiceImpl.java

@@ -1,6 +1,7 @@
 package com.gz.service.borrow.impl;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.gz.core.exception.BusinessException;
@@ -10,13 +11,19 @@ import com.gz.mapper.archive.ArchiveMapper;
 import com.gz.mapper.borrow.ArchiveBorrowMapper;
 import com.gz.rvo.borrow.ArchiveBorrowHistoryRVO;
 import com.gz.rvo.borrow.AuditInfoRVO;
+import com.gz.rvo.system.AdminRVO;
 import com.gz.service.archive.ArchiveService;
 import com.gz.service.borrow.ArchiveBorrowService;
+import com.gz.service.system.AdminService;
 import com.gz.utils.JwtUtils;
 import com.gz.vo.PageVO;
+import com.gz.vo.borrow.BorrowVO;
 import com.gz.vo.borrow.SearchBorrowVO;
 import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+import sun.rmi.runtime.Log;
 
 import javax.annotation.Resource;
 import java.util.List;
@@ -25,14 +32,21 @@ import java.util.List;
  * @author LiuchangLan
  * @date 2021/2/27 14:52
  */
+@Slf4j
 @Service
 public class ArchiveBorrowServiceImpl implements ArchiveBorrowService {
 
     @Resource
     private ArchiveBorrowMapper mapper;
 
+    @Resource
+    private AdminService adminService;
+
     @Override
     public Integer insert(ArchiveBorrowDTO dto) throws Exception {
+        if ("".equals(dto.getEstimateReturnTime())) {
+            dto.setEstimateReturnTime(null);
+        }
         dto.setCreated(JwtUtils.getCurrentUserJwtPayload().getId());
         return mapper.insertSelective(dto);
     }
@@ -43,14 +57,16 @@ public class ArchiveBorrowServiceImpl implements ArchiveBorrowService {
     }
 
     @Override
-    public Integer borrow(ArchiveBorrowDTO dto) throws Exception {
+    public Integer borrow(BorrowVO dto) throws Exception {
         ArchiveBorrowDTO selectBorrowParam = new ArchiveBorrowDTO();
         selectBorrowParam.setArchiveId(dto.getArchiveId());
-        if (dto.getAdminId() != null && !"".equals(dto.getAdminId())){
-            // 借阅登记
+
+        // 未选择用户 默认当前登录用户
+        if (dto.getRecordType() == 0){
+            // 登记
             dto.setAuditStatus(2);
         }else {
-            // 未选择用户 默认当前登录用户
+            // 借阅
             dto.setAdminId(JwtUtils.getCurrentUserJwtPayload().getId());
         }
         // 原件借阅需要判断是否已经被借阅
@@ -73,6 +89,14 @@ public class ArchiveBorrowServiceImpl implements ArchiveBorrowService {
                 throw new BusinessException(CustomExceptionEnum.REPEAT_BORROW);
             }
         }
+//        if (StrUtil.isNotEmpty(dto.getAdminId())) {
+//            AdminRVO adminRVO = adminService.selectByPrimaryKeyDept(dto.getAdminId());
+//            dto.setName(adminRVO.getAdminName());
+//            dto.setDept(adminRVO.getDeptName());
+//            dto.setPhone(adminRVO.getPhone());
+//            dto.setIdCard(adminRVO.getIdCard());
+//            log.info("局内人员借阅,姓名:{},部门:{},手机号:{},身份证号码:{}", dto.getName(), dto.getDept(), dto.getPhone(), dto.getIdCard());
+//        }
         dto.setReturnStatus(0);
         return this.insert(dto);
     }

+ 8 - 0
src/main/java/com/gz/service/system/AdminService.java

@@ -2,6 +2,7 @@ package com.gz.service.system;
 
 import com.github.pagehelper.PageInfo;
 import com.gz.dto.system.AdminDTO;
+import com.gz.rvo.system.AdminRVO;
 import com.gz.vo.system.AdminVO;
 
 import java.util.List;
@@ -64,4 +65,11 @@ public interface AdminService {
      */
     List<AdminDTO> selectAll();
 
+    /**
+     * @description 根据主键查询信息(带部门)
+     * @author LiuChangLan
+     * @since 2021/3/12 13:28
+     */
+    AdminRVO selectByPrimaryKeyDept(String id);
+
 }

+ 4 - 1
src/main/java/com/gz/service/system/AuthService.java

@@ -4,6 +4,7 @@ package com.gz.service.system;
 import com.gz.core.exception.BusinessException;
 import com.gz.dto.system.AdminDTO;
 import com.gz.dto.system.MenuDTO;
+import com.gz.rvo.system.AdminRVO;
 import com.gz.rvo.system.InitialHomeRVO;
 import com.gz.rvo.system.LoginRVO;
 import com.gz.vo.system.LoginVO;
@@ -56,5 +57,7 @@ public interface AuthService {
      * @author LiuChangLan
      * @since 2021/2/27 14:32
      */
-    public AdminDTO currLoginAdmin();
+    AdminDTO currLoginAdmin();
+
+    AdminRVO currLoginAdminDept();
 }

+ 6 - 0
src/main/java/com/gz/service/system/impl/AdminServiceImpl.java

@@ -8,6 +8,7 @@ import com.github.pagehelper.PageInfo;
 import com.gz.common.DataGlobalVariable;
 import com.gz.dto.system.AdminDTO;
 import com.gz.mapper.system.AdminMapper;
+import com.gz.rvo.system.AdminRVO;
 import com.gz.service.system.AdminService;
 import com.gz.utils.JwtUtils;
 import com.gz.utils.PasswordUtils;
@@ -101,4 +102,9 @@ public class AdminServiceImpl implements AdminService {
     public List<AdminDTO> selectAll() {
         return adminMapper.selectAll();
     }
+
+    @Override
+    public AdminRVO selectByPrimaryKeyDept(String id) {
+        return adminMapper.selectByPrimaryKeyDept(id);
+    }
 }

+ 14 - 3
src/main/java/com/gz/service/system/impl/AuthServiceImpl.java

@@ -22,8 +22,10 @@ import com.gz.mapper.system.AdminMapper;
 import com.gz.mapper.system.DeptMapper;
 import com.gz.mapper.system.LogMapper;
 import com.gz.mapper.system.MenuMapper;
+import com.gz.rvo.system.AdminRVO;
 import com.gz.rvo.system.InitialHomeRVO;
 import com.gz.rvo.system.LoginRVO;
+import com.gz.service.system.AdminService;
 import com.gz.service.system.AuthService;
 import com.gz.utils.JwtUtils;
 import com.gz.utils.PasswordUtils;
@@ -71,13 +73,16 @@ public class AuthServiceImpl implements AuthService {
     @Resource
     private DeptMapper deptMapper;
 
+    @Resource
+    private AdminService adminService;
+
     @Override
     public LoginRVO login(LoginVO vo) {
         // 后台存储的验证码
         String serverCaptcha = String.valueOf(request.getSession().getAttribute("captcha"));
-//        if (!vo.getCaptcha().equals(serverCaptcha)){
-//            throw new BusinessException(CustomExceptionEnum.CAPTCHA_ERROR);
-//        }
+        if (!vo.getCaptcha().equals(serverCaptcha)){
+            throw new BusinessException(CustomExceptionEnum.CAPTCHA_ERROR);
+        }
         // 查询用户参数
         AdminDTO param = new AdminDTO();
         // 根据用户名查
@@ -240,6 +245,7 @@ public class AuthServiceImpl implements AuthService {
         } catch (Exception e) {
             throw new BusinessException(500, "生成验证码失败");
         }
+//        return "cn.hutool.captcha";
         return "data:image/jpg;base64," + circleCaptcha.getImageBase64();
     }
 
@@ -248,4 +254,9 @@ public class AuthServiceImpl implements AuthService {
         String id = JwtUtils.getCurrentUserJwtPayload().getId();
         return adminMapper.selectByPrimaryKey(id);
     }
+
+    @Override
+    public AdminRVO currLoginAdminDept() {
+        return adminService.selectByPrimaryKeyDept(JwtUtils.getCurrentUserJwtPayload().getId());
+    }
 }

+ 15 - 0
src/main/java/com/gz/vo/borrow/BorrowVO.java

@@ -0,0 +1,15 @@
+package com.gz.vo.borrow;
+
+import com.gz.dto.borrow.ArchiveBorrowDTO;
+import lombok.Data;
+
+/**
+ * 借阅登记VO
+ * @author LiuchangLan
+ * @date 2021/3/12 14:58
+ */
+@Data
+public class BorrowVO extends ArchiveBorrowDTO {
+    // 借阅类型 0 登记 1 借阅
+    private Integer recordType;
+}

+ 3 - 0
src/main/java/com/gz/vo/rabbitmq/OcrEtlVO.java

@@ -11,4 +11,7 @@ import lombok.Data;
 public class OcrEtlVO extends ArchiveDTO {
     // 文件路径
     private String fileUrl;
+
+    // 卷内目录分类
+    private Integer secondaryArchiveId;
 }

+ 1 - 1
src/main/resources/application-test.yml

@@ -16,7 +16,7 @@ spring:
     druid:
       # 初始化大小,最小,最大
       initial-size: 5
-      min-idle: 5
+      min-idle: 51
       max-active: 20
       # 配置获取连接等待超时的时间
       max-wait: 60000

+ 18 - 0
src/main/resources/mapper/adminMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gz.mapper.system.AdminMapper">
+
+    <select id="selectByPrimaryKeyDept" resultType="com.gz.rvo.system.AdminRVO">
+        SELECT
+            a.*,
+            IF
+                ( d.parent_id IS NULL, d.dept_name,concat(concat((SELECT c.dept_name FROM tab_dept c WHERE c.id = d.parent_id),'-'),d.dept_name)) dept_name
+        FROM
+            tab_admin a
+                LEFT JOIN tab_dept d ON a.dept_id = d.id
+        WHERE
+            a.id = #{id}
+          AND  a.deleted = 0
+          AND d.deleted = 0
+          </select>
+</mapper>

+ 6 - 13
src/main/resources/mapper/archiveBorrowMapper.xml

@@ -13,19 +13,15 @@
                ab.return_status,
                ab.estimate_return_time,
                ab.audit_status,
-               ad.admin_name
+               ab.name admin_name
         FROM tab_archive_borrow ab
                  LEFT JOIN
              tab_archives a
              ON ab.archive_id = a.id
-                 left join
-             tab_admin ad
-             on ad.id = ab.admin_id
         where ab.deleted = 0
           and a.deleted = 0
-          and ad.deleted = 0
           <if test="adminId != null and adminId != ''">
-              and ad.id = #{adminId}
+              and ab.admin_id = #{adminId}
           </if>
         <if test="dh != null and dh != ''">
             and a.dh = #{dh}
@@ -41,16 +37,16 @@
 
     <select id="selectBorrowInfo" resultType="com.gz.rvo.borrow.AuditInfoRVO">
         SELECT
-            ad.admin_name,
-            ad.dept_id,
             a.tm,
-            ad.id_card,
             a.dh,
+            ab.name,
+            ab.dept,
+            ab.id_card,
+            ab.phone,
             ab.use_purpose,
             ab.create_time,
             ab.return_time,
             ab.borrow_type,
-            ad.phone,
             f.original_file_name,
             f.file_path,
             f.file_name
@@ -58,13 +54,10 @@
             `tab_archive_borrow` ab
                 LEFT JOIN tab_archives a
                           ON ab.archive_id = a.id
-                LEFT JOIN tab_admin ad
-                          ON ab.admin_id = ad.id
                 LEFT JOIN tab_archive_file f
                           ON ab.relevant_certification = f.id
         WHERE a.deleted = 0
           AND ab.deleted = 0
-          AND ad.deleted = 0
           AND ab.id = #{id}
     </select>
 </mapper>

+ 23 - 0
src/main/resources/mapper/archiveMapper.xml

@@ -165,4 +165,27 @@
                        and mr.role_type = 2)
         order by create_time desc
     </select>
+
+    <select id="selectByPrimaryKeyText" resultType="com.gz.rvo.archive.ArchiveRVO">
+        SELECT
+            IF
+                (
+                    atr.parent_id = - 1,
+                    atr.title,
+                    concat(
+                            concat( ( SELECT c.title FROM tab_archives_tree c WHERE c.id = atr.parent_id ), '-' ),
+                            atr.title
+                        )
+                ) mlText,
+            d.dict_name mjText,
+            a.*
+        FROM
+            tab_archives a
+                LEFT JOIN tab_archives_tree atr ON a.ml = atr.CODE
+                left join tab_dict d on a.mj = d.dict_code
+        where a.deleted = 0
+        and d.deleted = 0
+        and atr.deleted = 0
+        and a.id = #{id}
+    </select>
 </mapper>

+ 2 - 7
src/main/resources/mapper/statisticsMapper.xml

@@ -6,21 +6,18 @@
     <select id="selectWaitHandleRecord" resultType="com.gz.rvo.welcome.BorrowRecordRVO">
         <![CDATA[
             SELECT
-                ad.admin_name,
+                ab.name admin_name,
                 ab.create_time,
                 a.tm,
                 a.dh
             FROM
                 `tab_archive_borrow` ab
-                    LEFT JOIN tab_admin ad
-                              ON ab.created = ad.id
                     LEFT JOIN tab_archives a
                               ON a.id = ab.archive_id
             WHERE
                 audit_status = 0
                 AND ab.deleted = 0
                 AND a.deleted = 0
-                AND ad.deleted = 0
         ]]>
     </select>
 
@@ -28,13 +25,12 @@
     <select id="selectWaitReturnRecord" resultType="com.gz.rvo.welcome.BorrowRecordRVO">
         <![CDATA[
         SELECT
-            ad.admin_name,
+            ab.name admin_name,
             a.tm,
             ab.estimate_return_time,
             a.dh
         FROM
             `tab_archive_borrow` ab
-                LEFT JOIN tab_admin ad ON ab.created = ad.id
                 LEFT JOIN tab_archives a ON a.id = ab.archive_id
         WHERE
             ab.audit_status = 2
@@ -42,7 +38,6 @@
           AND ab.borrow_type = 1
           AND ab.deleted = 0
           AND a.deleted = 0
-          AND ad.deleted = 0
         ]]>
     </select>
 

+ 5 - 0
src/main/resources/static/js/http-client.env.json

@@ -0,0 +1,5 @@
+{
+  "dev": {
+    "name": "value"
+  }
+}

+ 32 - 6
src/main/resources/static/js/lay-module/request/http.js

@@ -14,17 +14,43 @@ layui.define(['jquery', 'layer'], function (exports) {
         }
         let dataObj = data
         // post请求 传参不是fromdata 则使用Json传值
-        if (type == 'POST' && !(data instanceof FormData)) {
-            data = JSON.stringify(data)
-        }
-        // 非delete设置请求头为json
-        if (type != 'DELETE' && !(data instanceof FormData)) {
-            headers['Content-Type'] = 'application/json;charset=utf-8;'
+
+        let processData = true // 告诉jquery不要处理发送的数据
+        let contentType = false
+        switch (type){
+            case "GET":
+                headers['Content-Type'] = 'application/json;charset=utf-8;'
+                break;
+            case "POST":
+                if (data instanceof FormData){
+                    // headers['Content-Type'] = 'application/x-www-form-urlencoded'
+                    processData = false
+                    contentType = false
+                }else {
+                    data = JSON.stringify(data)
+                    headers['Content-Type'] = 'application/json;charset=utf-8;'
+                }
+                break;
+            // case "DELETE":
+            //     break;
         }
+        // if (type == 'POST' && !(data instanceof FormData)) {
+        //     data = JSON.stringify(data)
+        // }
+        // // 非delete设置请求头为json
+        // if (type != 'DELETE' && !(data instanceof FormData)) {
+        //     headers['Content-Type'] = 'application/json;charset=utf-8;'
+        // }
+        //
+        // if (type == 'POST' && data instanceof FormData){
+        //     headers['Content-Type'] = 'application/x-www-form-urlencoded'
+        // }
 
         $.ajax({
             url: requestUrl + method,
             type: type,
+            processData: processData,
+            contentType: contentType,
             dataType: 'json',
             //async:false 同步 true异步
             async: async,

+ 150 - 48
src/main/resources/static/page/archive/advancedSearch.html

@@ -23,47 +23,134 @@
     </style>
 </head>
 <body>
-    <div class="layui-form layuimini-form" lay-filter="addDict" id="add" style="text-aglin:center">
-        <div class="layui-form-item" id="1">
-            <label class="layui-form-label required">条件1:</label>
-            <div class="layui-input-inline">
-                <select class="layui-select" name="field_1" id="field_1" lay-verify="required" lay-reqtext="条件1字段不能未空">
-                    <option value="">请选择字段</option>
-                    <option value="tm">题名</option>
-                    <option value="dh">档号</option>
-                    <option value="jh">件号</option>
-                    <option value="wjbh">文号</option>
-                    <option value="gdnd">归档年度</option>
-                    <option value="ztsl">载体数量</option>
-                    <option value="zrz">责任者</option>
-                    <option value="cfwzms">存放位置描述</option>
-                    <option value="bz">备注</option>
-                    <option value="ztc">关键词</option>
-                </select>
-            </div>
-            <div class="layui-input-inline">
-                <select class="layui-select" name="condition_1" id="condition_1" lay-verify="required"
-                        lay-reqtext="条件1条件不能未空">
-                    <option value="">请选择条件</option>
-                    <option value="=">等于</option>
-                    <option value="like">包含</option>
-                </select>
-            </div>
-            <div class="layui-input-inline">
-                <input class="layui-input" type="text" name="variable_1" id="variable_1" placeholder="请输入值"
-                       lay-verify="required" lay-reqtext="条件1值不能未空">
-            </div>
-            <div class="layui-input-inline">
-                <button class="layui-btn add">+</button>
-                <button class="layui-btn layui-btn-danger del">-</button>
-            </div>
-        </div>
-        <div class="layui-form-item" id="submit_button_container">
-            <div class="layui-input-block">
-                <button class="layui-btn layui-btn-normal" lay-submit lay-filter="search">搜索</button>
-            </div>
+<div class="layui-form layuimini-form" lay-filter="addDict" id="add" style="text-aglin:center">
+    <div class="layui-form-item" style="width: 849px">
+        <label class="layui-form-label required">时间:</label>
+        <div class="layui-input-block">
+            <input class="layui-input" name="time" id="time" readonly>
         </div>
     </div>
+    <div class="layui-form-item" id="1">
+        <label class="layui-form-label required">条件1:</label>
+        <div class="layui-input-inline">
+            <select class="layui-select" name="field_1" id="field_1" lay-verify="required" lay-reqtext="条件1字段不能未空">
+                <option value="">请选择字段</option>
+                <option value="tm" selected>题名</option>
+                <option value="dh">档号</option>
+                <option value="jh">件号</option>
+                <option value="wjbh">文号</option>
+                <option value="gdnd">归档年度</option>
+                <option value="ztsl">载体数量</option>
+                <option value="zrz">责任者</option>
+                <option value="cfwzms">存放位置描述</option>
+                <option value="bz">备注</option>
+                <option value="ztc">关键词</option>
+            </select>
+        </div>
+        <div class="layui-input-inline">
+            <select class="layui-select" name="condition_1" id="condition_1" lay-verify="required"
+                    lay-reqtext="条件1条件不能未空">
+                <option value="=">精确</option>
+                <option value="like">模糊</option>
+            </select>
+        </div>
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="variable_1" id="variable_1" placeholder="请输入值"
+                   lay-verify="required" lay-reqtext="条件1值不能未空">
+        </div>
+        <div class="layui-input-inline" style="width: 100px;">
+            <button class="layui-btn add">+</button>
+            <button class="layui-btn layui-btn-danger del">-</button>
+        </div>
+    </div>
+    <div class="layui-form-item" id="2">
+        <label class="layui-form-label required">条件2:</label>
+        <div class="layui-input-inline" style="width: 100px;">
+            <!--            <input type="radio" name="join2" class="layui-input" value="OR" title="OR">-->
+            <!--            <input type="radio" name="join2" class="layui-input" value="AND" title="AND">-->
+            <select name="join_2" class="layui-select" id="join_2">
+                <option value="AND">AND</option>
+                <option value="OR">OR</option>
+                <option value="NOT">NOT</option>
+            </select>
+        </div>
+        <div class="layui-input-inline">
+            <select class="layui-select" name="field_2" id="field_2" lay-verify="required" lay-reqtext="条件1字段不能未空">
+                <option value="">请选择字段</option>
+                <option value="tm">题名</option>
+                <option value="dh" selected>档号</option>
+                <option value="jh">件号</option>
+                <option value="wjbh">文号</option>
+                <option value="gdnd">归档年度</option>
+                <option value="ztsl">载体数量</option>
+                <option value="zrz">责任者</option>
+                <option value="cfwzms">存放位置描述</option>
+                <option value="bz">备注</option>
+                <option value="ztc">关键词</option>
+            </select>
+        </div>
+        <div class="layui-input-inline">
+            <select class="layui-select" name="condition_2" id="condition_2" lay-verify="required"
+                    lay-reqtext="条件2条件不能未空">
+                <option value="=">精确</option>
+                <option value="like">模糊</option>
+            </select>
+        </div>
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="variable_2" id="variable_2" placeholder="请输入值"
+                   lay-verify="required" lay-reqtext="条件2值不能未空">
+        </div>
+        <div class="layui-input-inline" style="width: 100px;">
+            <button class="layui-btn add">+</button>
+            <button class="layui-btn layui-btn-danger del">-</button>
+        </div>
+    </div>
+    <div class="layui-form-item" id="3">
+        <label class="layui-form-label required">条件3:</label>
+        <div class="layui-input-inline" style="width: 100px;">
+            <select name="join_3" class="layui-select" id="join_3">
+                <option value="AND">AND</option>
+                <option value="OR">OR</option>
+                <option value="NOT">NOT</option>
+            </select>
+        </div>
+        <div class="layui-input-inline">
+            <select class="layui-select" name="field_3" id="field_3" lay-verify="required" lay-reqtext="条件1字段不能未空">
+                <option value="tm">题名</option>
+                <option value="dh">档号</option>
+                <option value="jh" selected>件号</option>
+                <option value="wjbh">文号</option>
+                <option value="gdnd">归档年度</option>
+                <option value="ztsl">载体数量</option>
+                <option value="zrz">责任者</option>
+                <option value="cfwzms">存放位置描述</option>
+                <option value="bz">备注</option>
+                <option value="ztc">关键词</option>
+            </select>
+        </div>
+        <div class="layui-input-inline">
+            <select class="layui-select" name="condition_3" id="condition_3" lay-verify="required"
+                    lay-reqtext="条件3条件不能未空">
+                <option value="=">精确</option>
+                <option value="like">模糊</option>
+            </select>
+        </div>
+        <div class="layui-input-inline">
+            <input class="layui-input" type="text" name="variable_3" id="variable_3" placeholder="请输入值"
+                   lay-verify="required" lay-reqtext="条件3值不能未空">
+        </div>
+        <div class="layui-input-inline" style="width: 100px;">
+            <button class="layui-btn add">+</button>
+            <button class="layui-btn layui-btn-danger del">-</button>
+        </div>
+    </div>
+
+    <div class="layui-form-item" id="submit_button_container">
+        <div class="layui-input-block">
+            <button class="layui-btn layui-btn-normal" lay-submit lay-filter="search">搜索</button>
+        </div>
+    </div>
+</div>
 <script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script>
@@ -76,13 +163,23 @@
             $ = layui.$,
             laydate = layui.laydate;
 
-        let index = 1;
+        let index = 3;
 
 
         /**方-------------------------------法-------------------------------定-------------------------------义*/
 
+
+        layui.laydate.render({
+            elem: '#time',
+            type: 'date',
+            trigger: 'click',
+            range: true
+            // value: new Date()
+        });
+
+
         $(document).on('click', '.add', function () {
-            if (index >= 7){
+            if (index >= 7) {
                 layer.msg('最多不能超过7个条件')
                 return;
             }
@@ -90,9 +187,15 @@
             index++;
             $("#add").append('<div class="layui-form-item"  id="' + index + '">\n' +
                 '            <label class="layui-form-label required">条件' + index + ':</label>\n' +
+                '    <div class="layui-input-inline" style="width: 100px;">\n' +
+                '            <select name="join_' + index + '" class="layui-select" id="join_' + index + '">\n' +
+                '                <option value="AND">AND</option>\n' +
+                '                <option value="OR">OR</option>\n' +
+                '                <option value="NOT">NOT</option>\n' +
+                '            </select>\n' +
+                '        </div>' +
                 '            <div class="layui-input-inline">\n' +
                 '                <select class="layui-select" name="field_' + index + '" id="field_' + index + '" lay-verify="required" lay-reqtext="条件' + index + '字段不能未空">\n' +
-                '                    <option value="">请选择字段</option>\n' +
                 '                    <option value="tm">题名</option>\n' +
                 '                    <option value="dh">档号</option>\n' +
                 '                    <option value="jh">件号</option>\n' +
@@ -107,15 +210,14 @@
                 '            </div>\n' +
                 '            <div class="layui-input-inline">\n' +
                 '                <select class="layui-select" name="condition_' + index + '" id="condition_' + index + '" lay-verify="required" lay-reqtext="条件' + index + '条件不能未空">\n' +
-                '                    <option value="">请选择条件</option>\n' +
-                '                    <option value="=">等于</option>\n' +
-                '                    <option value="like">包含</option>\n' +
+                '                    <option value="=">精确</option>\n' +
+                '                    <option value="like">模糊</option>\n' +
                 '                </select>\n' +
                 '            </div>\n' +
                 '            <div class="layui-input-inline">\n' +
                 '                <input class="layui-input" type="text" name="variable_' + index + '" id="variable_' + index + '" placeholder="请输入值" lay-verify="required" lay-reqtext="条件' + index + '值不能未空">\n' +
                 '            </div>\n' +
-                '            <div class="layui-input-inline">\n' +
+                '            <div class="layui-input-inline" style="width: 100px;">\n' +
                 '                <button class="layui-btn add">+</button>\n' +
                 '                <button class="layui-btn layui-btn-danger del">-</button>\n' +
                 '            </div>\n' +
@@ -132,12 +234,12 @@
 
         $(document).on('click', '.del', function () {
             let id = $(this).parent().parent().prop('id')
-            if (index <= 1){
+            if (index <= 1) {
                 layer.msg('最少选择一个条件');
                 return;
             }
             $(this).parent().parent().remove()
-            index --;
+            index--;
             // layer.msg(index)
 
         })

+ 61 - 13
src/main/resources/static/page/archive/editSecondary.html

@@ -29,7 +29,7 @@
             <input id="id" name="id" type="hidden">
             <input id="archive_id" name="archiveId" type="hidden">
             <input type="text" class="layui-input" placeholder="请输入顺序号" name="sxh" id="sxh" lay-filter="sxh"
-                   lay-verify="required" lay-reqtext="顺序号不能为空" >
+                   lay-verify="required" lay-reqtext="顺序号不能为空">
         </div>
     </div>
 
@@ -37,7 +37,7 @@
         <label class="layui-form-label required">题名:</label>
         <div class="layui-input-block" style="">
             <input type="text" class="layui-input" placeholder="请输入题名" name="tm" id="tm" lay-filter="tm"
-                   lay-verify="required" lay-reqtext="题名不能为空" >
+                   lay-verify="required" lay-reqtext="题名不能为空">
         </div>
     </div>
 
@@ -45,7 +45,7 @@
         <label class="layui-form-label required">日期:</label>
         <div class="layui-input-block" style="">
             <input type="text" class="layui-input" placeholder="请选择日期" name="rq" id="rq" lay-filter="rq"
-                   lay-verify="required" lay-reqtext="日期不能为空" >
+                   lay-verify="required" lay-reqtext="日期不能为空">
         </div>
     </div>
 
@@ -53,7 +53,7 @@
         <label class="layui-form-label required">页号:</label>
         <div class="layui-input-block" style="">
             <input type="number" class="layui-input" placeholder="请输入页号" name="yh" id="yh" lay-filter="yh"
-                   lay-verify="required" lay-reqtext="页号不能为空" >
+                   lay-verify="required" lay-reqtext="页号不能为空">
         </div>
     </div>
 
@@ -61,7 +61,7 @@
         <label class="layui-form-label">文号:</label>
         <div class="layui-input-block" style="">
             <input type="text" class="layui-input" placeholder="请输入文号" name="wh" id="wh" lay-filter="wh"
-                   lay-verify="required" lay-reqtext="文号不能为空" >
+                   lay-verify="required" lay-reqtext="文号不能为空">
         </div>
     </div>
 
@@ -70,16 +70,26 @@
         <label class="layui-form-label">责任者:</label>
         <div class="layui-input-block" style="">
             <input type="text" class="layui-input" placeholder="请输入责任者" name="zrz" id="zrz" lay-filter="zrz"
-                   lay-verify="required" lay-reqtext="责任者不能为空" >
+                   lay-verify="required" lay-reqtext="责任者不能为空">
         </div>
     </div>
 
     <div class="layui-form-item">
         <label class="layui-form-label">文件:</label>
-        <div class="layui-input-block" style="">
-            <button type="button" class="layui-btn layui-btn-normal" id="test8">选择文件</button>
-            <button class="layui-hide" id="uploadBtn"></button>
+        <div class="layui-input-block">
+            <div class="layui-input-inline" style="">
+                <input type="text" placeholder="请选择文件" readonly class="layui-input" id="upload">
+            </div>
+            <div class="layui-input-inline">
+                <button class="layui-btn" id="uploadBtn">选择文件</button>
+            </div>
         </div>
+        <!--        <div class="layui-input-inline" style="">-->
+        <!--            <input type="text" placeholder="请选择文件" readonly class="layui-input" id="upload">-->
+        <!--        </div>-->
+        <!--        <div class="layui-input-inline">-->
+        <!--            <button class="layui-btn" id="uploadBtn">选择文件</button>-->
+        <!--        </div>-->
     </div>
 
     <div class="layui-form-item">
@@ -103,15 +113,17 @@
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script>
 
-    layui.use(['form', 'http', 'laydate'], function () {
+    layui.use(['form', 'http', 'laydate', 'upload'], function () {
         /**变-------------------------------量-------------------------------定-------------------------------义*/
         var form = layui.form,
             layer = layui.layer,
             http = layui.http,
             $ = layui.$,
-            laydate = layui.laydate
+            upload = layui.upload,
+            laydate = layui.laydate,
             id = $('#id').val(),
-            archive_id = $("#archive_id").val();
+            archive_id = $("#archive_id").val(),
+            upload_file = {};
         /**方-------------------------------法-------------------------------定-------------------------------义*/
 
         /** 初始化日期控件*/
@@ -124,9 +136,45 @@
 
         }
 
+        let initUpload = function () {
+            //选完文件后不自动上传
+            upload.render({
+                elem: '#uploadBtn'
+                , url: 'https://httpbin.org/post' //改成您自己的上传接口
+                , auto: false
+                , accept: 'file'
+                , exts: 'pdf|tif'
+                , multiple: false
+                , choose: function (obj) {
+                    obj.preview(function (index, file, result) {
+                        upload_file = file
+                        $("#upload").val(file.name)
+                    })
+                }
+            });
+        }
+
+        initUpload()
+
+        function paramsToFormData(obj) {
+            const formData = new FormData();
+            Object.keys(obj).forEach((key) => {
+                if (obj[key] instanceof Array) {
+                    obj[key].forEach((item) => {
+                        formData.append(key, item);
+                    });
+                    return;
+                }
+                formData.append(key, obj[key]);
+            });
+            return formData;
+        }
+
         // 保存方法
         let save = function (data, method) {
-            http.post(id == '' ? 'secondary/archive/insert' : 'secondary/archive/update', data, true, function (res) {
+            let f = paramsToFormData(data)
+            f.append('file', upload_file)
+            http.post(id == '' ? 'secondary/archive/insert' : 'secondary/archive/update', f, true, function (res) {
                 if (res.code == 200) {
                     let index = layer.alert('保存成功!', {
                         title: id == '' ? '添加' : '修改' + '信息'

+ 4 - 2
src/main/resources/static/page/archive/list.html

@@ -110,6 +110,7 @@
         $("#resultSearch").hide()
 
         http.getRoleButton(158)
+
         let initUpload = function () {
             var loading;
             upload.render({
@@ -151,7 +152,7 @@
             })
         }
 
-        //借阅
+        // 登记
         let openBorrow = function (data) {
             var index = layer.open({
                 title: '预约借阅',
@@ -159,11 +160,12 @@
                 shade: 0.2,
                 maxmin: true,
                 shadeClose: true,
-                area: ['800px', '650px'],
+                area: ['70%', '90%'],
                 content: '../borrow/reserve.html',
                 success: function (layero, index) {
                     var body = layer.getChildFrame('body', index);
                     body.find("#archive_id").val(data.id);
+                    body.find("#recordType").val(0);
                 },
                 end: function () {
                     renderTable()

+ 2 - 3
src/main/resources/static/page/archive/secondaryList.html

@@ -30,7 +30,6 @@
     <!--    <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="openPDF">预览</a>-->
     <!--    <a class="layui-btn layui-btn-xs" lay-event="openPDF">下载</a>-->
     <a class="layui-btn layui-btn-xs" lay-event="update">修改</a>
-
     <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="delete">删除</a>
 </script>
 <script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
@@ -124,7 +123,7 @@
                 shade: 0.2,
                 maxmin: true,
                 shadeClose: true,
-                area: ['500px', '550px'],
+                area: ['600px', '600px'],
                 content: './editSecondary.html',
                 success: function (layero, index) {
                     var body = layer.getChildFrame('body', index);
@@ -144,7 +143,7 @@
                 shade: 0.2,
                 maxmin: true,
                 shadeClose: true,
-                area: ['500px', '550px'],
+                area: ['600px', '600px'],
                 content: './editSecondary.html',
                 success: function (layero, index) {
                     var body = layer.getChildFrame('body', index);

+ 124 - 23
src/main/resources/static/page/archive/show.html

@@ -27,28 +27,98 @@
             cursor: pointer;
             padding: 0 30px;
         }
+
+        table tr td, th {
+            font-size: 18px;
+        }
+
+        tr {
+            line-height: 30px;
+            height: 30px;
+        }
+
+        th {
+            text-align: right;
+        }
+
+        td {
+            /*width: 15%;*/
+            text-align: left;
+            /*padding-right: 200px;*/
+            width: 400px;
+        }
     </style>
 </head>
 <body>
-<div class="layui-fluid" style="height: 100%">
-    <div class="layui-row">
-        <div class="layui-col-md2">
-            <ul id="file_list" class="layui-bg-black" style="height: calc(96vh);">
-                <input id="archive_id" name="archive_id" type="hidden">
-            </ul>
+
+<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+    <ul class="layui-tab-title">
+        <li class="layui-this">档案信息</li>
+        <li id="file_tab_list">文件预览</li>
+    </ul>
+    <div class="layui-tab-content" style="height: 100px;">
+        <div class="layui-tab-item layui-show">
+            <div>
+                <table style="font-size:12px;" border="1" class="layui-table" cellspacing="0">
+                    <tr>
+                        <th>档号:</th>
+                        <td id="dh"></td>
+                        <th>题名:</th>
+                        <td id="tm"></td>
+                    </tr>
+                    <tr>
+                        <th>保管期限:</th>
+                        <td id="bgqx"></td>
+                        <th>档案类型:</th>
+                        <td id="mlText"></td>
+                    </tr>
+                    <tr>
+                        <th>密级:</th>
+                        <td id="mjText"></td>
+                        <th>归档日期:</th>
+                        <td id="gdrq"></td>
+                    </tr>
+                    <tr>
+                        <th>文号:</th>
+                        <td id="wjbh"></td>
+                        <th>责任者:</th>
+                        <td id="zrz"></td>
+                    </tr>
+                    <tr>
+                        <th>内容概述:</th>
+                        <td colspan="3" id="nrgs"></td>
+                    </tr>
+                    <tr>
+                        <th>备注:</th>
+                        <td colspan="3" id="remarks"></td>
+                    </tr>
+                </table>
+            </div>
         </div>
-        <div class="layui-col-md10">
-            <iframe src=""
-                    frameborder="0" id="pdf_show" style="width: 100%; height: calc(96vh);"></iframe>
+        <div class="layui-tab-item">
+            <div class="layui-fluid" style="height: 100%">
+                <div class="layui-row">
+                    <div class="layui-col-md2">
+                        <ul id="file_list" class="layui-bg-black" style="height: calc(96vh);">
+                            <input id="archive_id" name="archive_id" type="hidden">
+                        </ul>
+                    </div>
+                    <div class="layui-col-md10">
+                        <iframe src=""
+                                frameborder="0" id="pdf_show" style="width: 100%; height: calc(96vh);"></iframe>
+                    </div>
+                </div>
+            </div>
         </div>
     </div>
 </div>
 <script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script>
-    layui.use(['http'], function () {
+    layui.use(['http', 'element'], function () {
         let http = layui.http,
-            $ = layui.$
+            $ = layui.$,
+            element = layui.element
         ;
         let archive_id = $("#archive_id").val()
 
@@ -60,35 +130,66 @@
             $("#pdf_show").prop('src', pef_src)
         });
 
-        let initData = () => {
+        let initFile = () => {
             let html = ""
             http.get('archive/archiveFile/selectByArchiveId', {
                 archiveId: archive_id,
                 fileType: 0
             }, true, res => {
-                if (res.code == 200){
-                    if (res.data.length == 0){
-                        layui.layer.msg('无文件无法预览,即将自动关闭',{icon: 2},function (){
-                            // 关闭弹出层
-                            let iframeIndex = parent.layer.getFrameIndex(window.name);
-                            parent.layer.close(iframeIndex);
-                        })
+                if (res.code == 200) {
+                    if (res.data.length == 0) {
+                        // layui.layer.msg('无文件无法预览,即将自动关闭', {icon: 2}, function () {
+                        //     // 关闭弹出层
+                        //     let iframeIndex = parent.layer.getFrameIndex(window.name);
+                        //     parent.layer.close(iframeIndex);
+                        // })
+                        // return
+                        console.log(11)
+                        $("#file_tab_list").hide()
                         return
                     }
                     for (let i = 0; i < res.data.length; i++) {
                         let item = res.data[i]
-                        if (i == 0){
-                            html += '<li class="layui-bg-green"><a pdf_src="' + item.filePath + '/' + item.fileName + '">' + (item.jnml?item.jnml:'档案文件') + '</a></li>'
+                        if (i == 0) {
+                            html += '<li class="layui-bg-green"><a pdf_src="' + item.filePath + '/' + item.fileName + '">' + (item.jnml ? item.jnml : '档案文件') + '</a></li>'
                             $("#pdf_show").prop('src', item.filePath + '/' + item.fileName)
-                        }else {
-                            html += '<li><a pdf_src="' + item.filePath + '/' + item.fileName + '">' + (item.jnml?item.jnml:'档案文件') + '</a></li>'
+                        } else {
+                            html += '<li><a pdf_src="' + item.filePath + '/' + item.fileName + '">' + (item.jnml ? item.jnml : '档案文件') + '</a></li>'
                         }
                     }
                     $("#file_list").append(html)
                 }
             })
         }
+
+        let initData = () => {
+            http.get('archive/archive/selectByPrimaryKeyText', {
+                id: archive_id
+            }, true, res => {
+                if (res.code == 200) {
+                    $("#dh").text(res.data.dh ? res.data.dh : '无');
+                    $("#tm").text(res.data.tm ? res.data.tm : '无');
+                    $("#bgqx").text(res.data.bgqx ? res.data.bgqx : '无');
+                    $("#mlText").text(res.data.mlText ? res.data.mlText : '无');
+                    $("#mjText").text(res.data.mjText ? res.data.mjText : '无');
+                    $("#gdrq").text(res.data.createTime ? res.data.createTime : '无');
+                    $("#wjbh").text(res.data.wjbh ? res.data.wjbh : '无');
+                    $("#zrz").text(res.data.zrz ? res.data.zrz : '无');
+                    $("#nrgs").text(res.data.nrgs ? res.data.nrgs : '无');
+                    $("#remarks").text(res.data.bz ? res.data.bz : '无');
+                }
+            })
+        }
         initData()
+        initFile()
+
+
+        element.on('tab(docDemoTabBrief)', function(data){
+            // let index = data.index;
+            // if (index == 1){
+            //
+            // }
+        });
     })
 </script>
 </body>

+ 2 - 2
src/main/resources/static/page/auditList/audit.html

@@ -164,7 +164,7 @@
                 http.get('borrow/archiveBorrow/selectBorrowInfo', {
                     id: id
                 }, false, function (res) {
-                    $("#adminName").text(res.data.adminName == null ? '无' : res.data.adminName)
+                    $("#adminName").text(res.data.name == null ? '无' : res.data.name)
                     let jy = ''
                     if (res.data.borrowType == 0) {
                         jy = '打印借阅'
@@ -176,7 +176,7 @@
                     $("#borrowType").text(jy)
                     $("#createTime").text(res.data.createTime == null ? '无' : res.data.createTime)
                     $("#returnTime").text(res.data.returnTime == null ? '无' : res.data.returnTime)
-                    $("#deptId").text(res.data.deptId == null ? '无' : res.data.deptId)
+                    $("#deptId").text(res.data.dept == null ? '无' : res.data.dept)
                     $("#dh").text(res.data.dh == null ? '无' : res.data.dh)
                     $("#tm").text(res.data.tm == null ? '无' : res.data.tm)
                     $("#idCard").text(res.data.idCard == null ? '无' : res.data.idCard)

+ 5 - 1
src/main/resources/static/page/auditList/list.html

@@ -134,7 +134,11 @@
                     },
                     {
                         field: 'estimateReturnTime', title: '预计归还时间', width: 120, templet(rv) {
-                            return rv.estimateReturnTime.substring(0, 11)
+                            if (rv.estimateReturnTime){
+                                return rv.estimateReturnTime.substring(0, 11)
+                            }else {
+                                return '无需归还'
+                            }
                         }
                     },
                     // {

+ 442 - 80
src/main/resources/static/page/borrow/list.html

@@ -14,39 +14,49 @@
 <body>
 <div class="layuimini-container">
     <div class="layuimini-main">
-        <div>
+        <div style="float: left;width: 15%;overflow-y:scroll;height: 800px">
+            <div id="tree"></div>
+        </div>
+        <div style="float: left;width: 85%;">
             <div class="layui-form toolbar">
                 <div class="layui-form-item">
-                    <div class="layui-form-item">
-                        <div class="layui-inline">
-                            <input type="text" id="dh" name="dh" lay-filter="dh" placeholder="请输入档号"
-                                   class="layui-input">
-                        </div>
-                        <div class="layui-inline">
-                            <input type="text" id="gdnd" name="gdnd" lay-filter="gdnd" placeholder="请输入归档年度"
-                                   class="layui-input">
-                        </div>
-                        <div class="layui-inline">
-                            <select name="mj" id="mj">
-                                <option value="">请选择密级</option>
-                            </select>
-                        </div>
-                        <div class="layui-inline">
-                            <input type="text" id="ztc" name="ztc" lay-filter="ztc" placeholder="请输入关键字"
-                                   class="layui-input">
-                        </div>
+                    <div class="layui-inline">
+                        <input type="text" id="ztc" name="ztc" lay-filter="ztc" placeholder="请输入关键字"
+                               class="layui-input">
+                    </div>
+                    <div class="layui-inline">
+                        <input type="text" id="dh" name="dh" lay-filter="dh" placeholder="请输入档号" class="layui-input">
+                    </div>
+                    <div class="layui-inline">
+                        <input type="text" id="gdnd" name="gdnd" lay-filter="gdnd" placeholder="请输入归档年度"
+                               class="layui-input">
+                    </div>
+                    <div class="layui-inline">
+                        <select name="mj" id="mj">
+                            <option value="">请选择密级</option>
+                        </select>
+                    </div>
 
-                        <div class="layui-inline">
-                            <select name="bgqx" id="bgqx">
-                                <option value="">请选择保管期限</option>
-                            </select>
-                        </div>
-                        <div class="layui-inline">
-                            <button id="btnSearch" lay-submit lay-filter="search" class="layui-btn icon-btn"><i
-                                    class="layui-icon"></i>搜索
-                            </button>
+                    <div class="layui-inline">
+                        <select name="bgqx" id="bgqx">
+                            <option value="">请选择保管期限</option>
+                        </select>
+                    </div>
+                    <div class="layui-inline">
+                        <input type="checkbox" name="all" lay-skin="primary" title="全文检索">
+                        <div class="layui-unselect layui-form-checkbox layui-form-checked" lay-skin="primary">
+                            <span>全文检索</span>
+                            <i class="layui-icon layui-icon-ok"></i>
                         </div>
                     </div>
+                    <div class="layui-inline">
+                        <button id="btnSearch" lay-submit lay-filter="search" class="layui-btn icon-btn"><i
+                                class="layui-icon"></i>搜索
+                        </button>
+                        <button id="resultSearch" lay-submit lay-filter="resultSearch" class="layui-btn icon-btn"><i
+                                class="layui-icon"></i>结果中搜索
+                        </button>
+                    </div>
                 </div>
             </div>
             <table class="layui-hide" id="user-table" lay-filter="table"></table>
@@ -59,6 +69,7 @@
 </html>
 
 <!--  头部工具栏  -->
+<button type="button" class="layui-btn layui-btn-sm" id="import" value="导入隐藏按钮" style="display: none"/>
 <script type="text/html" id="toolbar">
 </script>
 
@@ -69,13 +80,21 @@
 <script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script>
-    layui.use(['table', 'http', 'laydate', 'form', 'upload', 'url'], function () {
+
+    let params;
+
+    function GetValue(data) {
+        params = data
+    }
+
+    layui.use(['table', 'http', 'laydate', 'form', 'tree', 'upload', 'url'], function () {
         /**变-------------------------------量-------------------------------定-------------------------------义*/
 
         var table = layui.table,
             laydate = layui.laydate,
             http = layui.http,
             form = layui.form,
+            tree = layui.tree,
             upload = layui.upload,
             url = layui.url,
             $ = layui.jquery;
@@ -88,21 +107,150 @@
         }
         /**方-------------------------------法-------------------------------定-------------------------------义*/
 
+        $("#resultSearch").hide()
+
         http.getRoleButton(164)
 
+        let initUpload = function () {
+            var loading;
+            upload.render({
+                elem: '#import'
+                , url: http.requestUrl + 'archive/archive/import' //改成您自己的上传接口
+                , headers: {
+                    accessToken: (layui.data('auth').data ? layui.data('auth').data.accessToken : '') || ''
+                }
+                , accept: 'file' //普通文件
+                , acceptMime: '.xls,.xlsx'
+                , multiple: false
+                , before: function () {
+                    loading = layer.load(0, {shade: [0.3, '#000']});
+                }
+                , done: function (res) {
+                    if (res.code == 200) {
+                        layer.msg('成功导入' + res.data + '条数据');
+                        renderTable();
+                    } else {
+                        layer.alert(res.msg, {icon: 2, title: '导入错误'})
+                    }
+                    layer.close(loading);
+                }
+            });
+            layer.close(loading);
+        }
+
+
+        let initSelect = function () {
+            initBgqx()
+            // 加载密集
+            http.get('system/dict/selectDictByCode', {code: 'MIJI'}, false, function (res) {
+                let html = '';
+                for (let i in res.data) {
+                    html += '<option value="' + res.data[i].dictCode + '">' + res.data[i].dictName + '</option>'
+                }
+                $("#mj").append(html)
+                form.render();//菜单渲染 把内容加载进去
+            })
+        }
+
+        // 登记
+        let openBorrow = function (data) {
+            var index = layer.open({
+                title: '预约借阅',
+                type: 2,
+                shade: 0.2,
+                maxmin: true,
+                shadeClose: true,
+                area: ['70%', '90%'],
+                content: '../borrow/reserve.html',
+                success: function (layero, index) {
+                    var body = layer.getChildFrame('body', index);
+                    body.find("#archive_id").val(data.id);
+                    body.find("#recordType").val(1);
+                },
+                end: function () {
+                    renderTable()
+                }
+            });
+        }
+
+        // 加载组织架构
+        let loadTree = function () {
+            http.get('system/archivesTree/selectTree', {}, false, function (res) {
+                res.data.unshift({
+                    id: '',
+                    parentId: "-1",
+                    title: "全部",
+                    spread: true
+                })
+                searchParam.ml = ''
+                searchParam.mlId = ''
+                // searchParam.ml = res.data[0].code
+                // searchParam.mlId = res.data[0].id
+                //基本演示
+                tree.render({
+                    elem: '#tree'
+                    , data: res.data
+                    , showCheckbox: false  //是否显示复选框
+                    , onlyIconControl: true
+                    , id: 'tree'
+                    , isJump: true //是否允许点击节点时弹出新窗口跳转
+                    , click: function (obj) {
+                        //节点高亮
+                        var nodes = document.getElementsByClassName("layui-tree-txt");
+                        for (var i = 0; i < nodes.length; i++) {
+                            if (nodes[i].innerHTML === obj.data.title) {
+                                if (nodes[i].style.color === 'red') {
+                                    // 当前节点已经选中 跳过
+                                    return
+                                }
+                                nodes[i].style.color = "red"
+                            } else {
+                                nodes[i].style.color = "#555"
+                            }
+                        }
+                        var data = obj.data;  //获取当前点击的节点数据
+                        searchParam.ml = data.code
+                        searchParam.mlId = data.id
+                        initBgqx()
+                        renderTable()
+                    }
+                });
+                // 设置默认第一项红色
+                var nodes = document.getElementsByClassName("layui-tree-txt");
+                for (var i = 0; i < nodes.length; i++) {
+                    if (nodes[i].innerHTML === res.data[0].title)
+                        nodes[i].style.color = "red";
+                    else
+                        nodes[i].style.color = "#555";
+                }
+            })
+        }
+
+        let initBgqx = function () {
+            http.get('system/dict/selectDictByCode', {code: searchParam.ml === 'WS' ? 'BAOGUANQIXIANYI' : 'BAOGUANQIXIANER'}, false, function (res) {
+                let html = '';
+                for (let i in res.data) {
+                    html += '<option value="' + res.data[i].dictCode + '">' + res.data[i].dictName + '</option>'
+                }
+                $("#bgqx").html('<option value="">请选择保管期限</option>')
+                $("#bgqx").append(html)
+                form.render();//菜单渲染 把内容加载进去
+            })
+        }
+
         //数据加载方法
         let renderTable = function () {
+            searchParam.params = params
             // 加载表格数据
             table.render({
                 elem: '#user-table',
-                url: 'borrow/archiveBorrow/selectBorrowList',
+                url: 'archive/archive/selectByPage',
                 toolbar: '#toolbar', //开启头部工具栏,并为其绑定左侧模板
                 defaultToolbar: ['filter', 'exports', 'print'],
                 title: '用户数据表',
-                toolbar: '#toolbar',
-                page: true,
                 limit: 15,
                 limits: [15, 30, 45, 60],
+                page: true,
                 request: {
                     pageName: 'pageNum',
                     limitName: 'pageSize'
@@ -120,67 +268,99 @@
                     }
                 },
                 done: function (res, curr, count) {
+                    params = {}
                     // $('th').css({'background-color': '#1aa094', 'color': '#fff', 'font-weight': 'bold'})
                 },
                 cols: [[
                     // {type: 'checkbox', fixed: 'left'},
                     {type: 'numbers'},
                     {field: 'dh', title: '档号', width: 240},
-                    {field: 'tm', title: '题名'},
-                    {field: 'gdnd', width: 100, title: '归档年度'},
-                    {field: 'zrz', width: 120, title: '责任者'},
-                    // {field: 'mjText', title: '密级'},
-                    {field: 'wjxcsj', width: 120, title: '文件形成时间'},
-                    {
-                        field: 'originalStatus', title: '原件状态', width: 90, templet: function (rv) {
-                            switch (rv.originalStatus) {
-                                case '可借阅':
-                                    return '<span class="layui-badge layui-bg-orange">' + rv.originalStatus + '</span>';
-                                case '已借阅':
-                                    return '<span class="layui-badge">' + rv.originalStatus + '</span>';
-                            }
-                        }
-                    },
-                    // {field: 'wjdqsj', title: '文件到期时间'},
-                    {templet: '#operating', width: 140, align: 'center', title: '操作'}
+                    {field: 'tm', title: '题名', width: 700},
+                    {field: 'gdnd', title: '归档年度', width: 120},
+                    {field: 'zrz', title: '责任者', width: 120},
+                    {field: 'mjText', title: '密级', width: 80},
+                    {field: 'wjxcsj', title: '文件形成时间', width: 120},
+                    {field: 'wjdqsj', title: '文件到期时间', width: 120},
+                    {templet: '#operating', width: 100, align: 'center', title: '操作', fixed: 'right'}
                 ]]
             });
         }
-        /**事-------------------------------件-------------------------------绑-------------------------------定*/
 
-        renderTable()
 
+        //添加方法
+        let addDict = function () {
+            var index = layer.open({
+                title: '添加监督对象',
+                type: 2,
+                shade: 0.2,
+                maxmin: true,
+                shadeClose: true,
+                area: ['100%', '100%'],
+                content: './edit.html',
+                success: function (layero, index) {
+                    var body = layer.getChildFrame('body', index);
+                    body.find("#mlId").val(searchParam.mlId);
+                    body.find("#mlCode").val(searchParam.ml);
+                },
+                end: function () {
+                    renderTable()
+                }
+            });
+        }
 
-        //表格操作栏
-        table.on('tool(table)', function (obj) {
-            let data = obj.data;
-            switch (obj.event) {
-                case 'borrowing':
-                    openBorrow(data);
-                    break;
-                case 'register':
-                    register(data);
-                    break;
-            }
-        });
+        let advancedSearch = function () {
+            var index = layer.open({
+                title: '高级检索',
+                type: 2,
+                shade: 0.2,
+                maxmin: true,
+                shadeClose: true,
+                area: ['55%', '80%'],
+                content: './advancedSearch.html',
+                success: function (layero, index) {
+                    var body = layer.getChildFrame('body', index);
+                },
+                end: function () {
+                    renderTable()
+                }
+            });
+        }
 
-        //借阅
-        let openBorrow = function (data) {
+        //打开附件列表
+        let openEnclosure = function (data) {
             var index = layer.open({
-                title: '预约借阅',
+                title: '附件',
+                type: 2,
+                shade: 0.2,
+                maxmin: true,
+                shadeClose: true,
+                area: ['100%', '100%'],
+                content: './fileList.html',
+                success: function (layero, index) {
+                    var body = layer.getChildFrame('body', index);
+                    body.find("#archive_id").val(data.id);
+                    body.find("#fileType").val(1);
+                },
+                end: function () {
+                    renderTable()
+                }
+            });
+        }
+
+        //打开文件列表
+        let openFiles = function (data) {
+            var index = layer.open({
+                title: '附件',
                 type: 2,
                 shade: 0.2,
                 maxmin: true,
                 shadeClose: true,
-                area: ['800px', '600px'],
-                content: './reserve.html',
+                area: ['100%', '100%'],
+                content: './fileList.html',
                 success: function (layero, index) {
                     var body = layer.getChildFrame('body', index);
                     body.find("#archive_id").val(data.id);
-                    body.find("#name_container").hide()
-                    body.find("#dept_container").hide()
-                    body.find("#id_card_container").hide()
-                    body.find("#phone").hide()
+                    body.find("#fileType").val(0);
                 },
                 end: function () {
                     renderTable()
@@ -189,19 +369,20 @@
         }
 
 
-        //借阅
-        let register = function (data) {
+        //打开文件列表
+        let openSecondary = function (data) {
             var index = layer.open({
-                title: '预约借阅',
+                title: '卷内目录',
                 type: 2,
                 shade: 0.2,
                 maxmin: true,
                 shadeClose: true,
-                area: ['800px', '600px'],
-                content: './reserve.html',
+                area: ['100%', '100%'],
+                content: './secondaryList.html',
                 success: function (layero, index) {
                     var body = layer.getChildFrame('body', index);
                     body.find("#archive_id").val(data.id);
+                    body.find("#dh").val(data.dh);
                 },
                 end: function () {
                     renderTable()
@@ -209,28 +390,209 @@
             });
         }
 
+        //删除方法
+        let deleteDict = function (id) {
+            layer.confirm('真的删除行么', function (index) {
+                http.delete('archive/archive/delete', {id: id}, true, function (res) {
+                    if (res.code == 200) {
+                        layer.msg('删除成功', {
+                            icon: 1,
+                            time: 2000
+                        })
+                    } else {
+                        layer.msg(res.msg, {
+                            icon: 2,
+                            time: 2000
+                        })
+                    }
+                    renderTable()
+                })
+                layer.close(index);
+            });
+        }
+
+        //修改方法
+        let updateDict = function (id) {
+            layer.open({
+                title: '修改监督对象',
+                type: 2,
+                shade: 0.2,
+                maxmin: true,
+                shadeClose: true,
+                area: ['100%', '100%'],
+                content: './edit.html',
+                success: function (layero, index) {
+                    var body = layer.getChildFrame('body', index);
+                    body.find("#id").val(id);
+                    body.find("#mlId").val(searchParam.mlId);
+                    body.find("#mlCode").val(searchParam.ml);
+                },
+                end: function () {
+                    renderTable()
+                }
+            });
+        }
+
+        let batchDel = function () {
+            var data = layui.table.checkStatus('user-table').data;
+            if (data.length > 0) {
+                layer.confirm('真的删除行么', function (index) {
+                    let ids = []
+                    for (let i in data) {
+                        ids.push(data[i].id)
+                    }
+                    http.delete('archives/user/batchDelete', {ids: ids.join(',')}, true, function (res) {
+                        if (res.code == 200) {
+                            layer.msg('删除成功', {
+                                icon: 1,
+                                time: 2000
+                            })
+                        }
+                        renderTable()
+                    })
+                    layer.close(index);
+                });
+            } else {
+                layer.msg('请选择要删除的数据', {
+                    icon: 3,
+                    time: 2000
+                })
+            }
+        }
+
+        let join = function (id) {
+            layer.open({
+                title: '监督对象',
+                type: 2,
+                shade: 0.2,
+                maxmin: true,
+                shadeClose: true,
+                area: ['100%', '100%'],
+                content: './show.html',
+                success: function (layero, index) {
+                    var body = layer.getChildFrame('body', index);
+                    body.find("#archive_id").val(id);
+                },
+                end: function () {
+                    renderTable()
+                }
+            });
+        }
+
+        let download = function () {
+            window.open("/template/导入模板.xlsx", "_blank")
+        }
+
+        let exportUser = function (data) {
+            var url = http.requestUrl + 'archives/user/exportWord?userId=' + data.id;
+            var xhr = new XMLHttpRequest();
+            xhr.open('POST', url, true);    // 也可以使用POST方式,根据接口
+            xhr.responseType = "blob";  // 返回类型blob
+            // 定义请求完成的处理函数,请求前也可以增加加载框/禁用下载按钮逻辑
+            xhr.onload = function () {
+                // 请求完成
+                if (this.status === 200) {
+                    // 返回200
+                    var blob = this.response;
+                    var reader = new FileReader();
+                    reader.readAsDataURL(blob);  // 转换为base64,可以直接放入a表情href
+                    reader.onload = function (e) {
+                        // 转换完成,创建一个a标签用于下载
+                        var a = document.createElement('a');
+                        a.download = data.name + '.docx';
+                        a.href = e.target.result;
+                        $("body").append(a);  // 修复firefox中无法触发click
+                        a.click();
+                        $(a).remove();
+                    }
+                }
+            };
+            // 发送ajax请求
+            xhr.send()
+
+        }
+        /**事-------------------------------件-------------------------------绑-------------------------------定*/
+
+        // initUpload()
+        loadTree()
+        initSelect()
+        renderTable()
+        initUpload()
+
+
+        //表格操作栏
+        table.on('tool(table)', function (obj) {
+            let data = obj.data;
+            switch (obj.event) {
+                case 'delete':
+                    deleteDict(data.id);
+                    break;
+                case 'update':
+                    updateDict(data.id);
+                    break;
+                case 'show':
+                    join(data.id);
+                    break;
+                case 'files':
+                    openFiles(data)
+                    break;
+                case 'enclosure':
+                    openEnclosure(data)
+                    break;
+                case 'secondary':
+                    openSecondary(data)
+                    break;
+                case 'export':
+                    exportUser(data);
+                    break;
+                case 'borrowing':
+                    openBorrow(data);
+                    break;
+            }
+        });
+
 
         //头部工具栏监听
         table.on('toolbar(table)', function (obj) {
             switch (obj.event) {
                 case 'add':
-                    // addDict();
+                    addDict();
                     break;
                 case 'batchDel':
-                    // batchDel();
+                    batchDel();
                     break;
                 case 'import':
-                    $("#importFile").click();
+                    $("#import").click();
+                    break;
+                case 'advancedSearch':
+                    advancedSearch();
+                    break;
+                case 'download':
+                    download();
                     break;
             }
         })
 
+        form.on('submit(resultSearch)', function (data) {
+            searchParam.dh = data.field.dh
+            searchParam.mlh = data.field.mlh
+            searchParam.bgqx = data.field.bgqx
+            searchParam.gdnd = data.field.gdnd
+            searchParam.mj = data.field.mj
+            searchParam.ztc = data.field.ztc
+            searchParam.again = true
+            renderTable()
+        })
+
         form.on('submit(search)', function (data) {
             searchParam.dh = data.field.dh
             searchParam.mlh = data.field.mlh
             searchParam.bgqx = data.field.bgqx
+            searchParam.gdnd = data.field.gdnd
             searchParam.mj = data.field.mj
             searchParam.ztc = data.field.ztc
+            searchParam.again = false
+            $("#resultSearch").show()
             renderTable()
         })
     });

+ 237 - 0
src/main/resources/static/page/borrow/listaaa.html

@@ -0,0 +1,237 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <link rel="stylesheet" href="../../lib/layui-v2.5.5/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../css/public.css" media="all">
+</head>
+<style>
+    /*.layui-disabled, .layui-disabled:hover{*/
+    /*    color: red!important;*/
+    /*}*/
+</style>
+<body>
+<div class="layuimini-container">
+    <div class="layuimini-main">
+        <div>
+            <div class="layui-form toolbar">
+                <div class="layui-form-item">
+                    <div class="layui-form-item">
+                        <div class="layui-inline">
+                            <input type="text" id="dh" name="dh" lay-filter="dh" placeholder="请输入档号"
+                                   class="layui-input">
+                        </div>
+                        <div class="layui-inline">
+                            <input type="text" id="gdnd" name="gdnd" lay-filter="gdnd" placeholder="请输入归档年度"
+                                   class="layui-input">
+                        </div>
+                        <div class="layui-inline">
+                            <select name="mj" id="mj">
+                                <option value="">请选择密级</option>
+                            </select>
+                        </div>
+                        <div class="layui-inline">
+                            <input type="text" id="ztc" name="ztc" lay-filter="ztc" placeholder="请输入关键字"
+                                   class="layui-input">
+                        </div>
+
+                        <div class="layui-inline">
+                            <select name="bgqx" id="bgqx">
+                                <option value="">请选择保管期限</option>
+                            </select>
+                        </div>
+                        <div class="layui-inline">
+                            <button id="btnSearch" lay-submit lay-filter="search" class="layui-btn icon-btn"><i
+                                    class="layui-icon"></i>搜索
+                            </button>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="user-table" lay-filter="table"></table>
+        </div>
+        <div style="clear: both"></div>
+    </div>
+</div>
+
+</body>
+</html>
+
+<!--  头部工具栏  -->
+<script type="text/html" id="toolbar">
+</script>
+
+<!-- 操作列 -->
+<script type="text/html" id="operating">
+</script>
+
+<script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
+<script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
+<script>
+    layui.use(['table', 'http', 'laydate', 'form', 'upload', 'url'], function () {
+        /**变-------------------------------量-------------------------------定-------------------------------义*/
+
+        var table = layui.table,
+            laydate = layui.laydate,
+            http = layui.http,
+            form = layui.form,
+            upload = layui.upload,
+            url = layui.url,
+            $ = layui.jquery;
+
+        let searchParam = {
+            // dh: null,
+            // mlh: null,
+            // bgqx: null,
+            // ml: null
+        }
+        /**方-------------------------------法-------------------------------定-------------------------------义*/
+
+        http.getRoleButton(164)
+
+        //数据加载方法
+        let renderTable = function () {
+            // 加载表格数据
+            table.render({
+                elem: '#user-table',
+                url: 'borrow/archiveBorrow/selectBorrowList',
+                toolbar: '#toolbar', //开启头部工具栏,并为其绑定左侧模板
+                defaultToolbar: ['filter', 'exports', 'print'],
+                title: '用户数据表',
+                toolbar: '#toolbar',
+                page: true,
+                limit: 15,
+                limits: [15, 30, 45, 60],
+                request: {
+                    pageName: 'pageNum',
+                    limitName: 'pageSize'
+                },
+                where: searchParam,
+                response: {
+                    statusCode: 200 //重新规定成功的状态码为 200,table 组件默认为 0
+                },
+                parseData: function (res) {
+                    return {
+                        "code": res.code,
+                        "msg": res.msg,
+                        "count": res.data.total,
+                        "data": res.data.list
+                    }
+                },
+                done: function (res, curr, count) {
+                    // $('th').css({'background-color': '#1aa094', 'color': '#fff', 'font-weight': 'bold'})
+                },
+                cols: [[
+                    // {type: 'checkbox', fixed: 'left'},
+                    {type: 'numbers'},
+                    {field: 'dh', title: '档号', width: 240},
+                    {field: 'tm', title: '题名'},
+                    {field: 'gdnd', width: 100, title: '归档年度'},
+                    {field: 'zrz', width: 120, title: '责任者'},
+                    // {field: 'mjText', title: '密级'},
+                    {field: 'wjxcsj', width: 120, title: '文件形成时间'},
+                    {
+                        field: 'originalStatus', title: '原件状态', width: 90, templet: function (rv) {
+                            switch (rv.originalStatus) {
+                                case '可借阅':
+                                    return '<span class="layui-badge layui-bg-orange">' + rv.originalStatus + '</span>';
+                                case '已借阅':
+                                    return '<span class="layui-badge">' + rv.originalStatus + '</span>';
+                            }
+                        }
+                    },
+                    // {field: 'wjdqsj', title: '文件到期时间'},
+                    {templet: '#operating', width: 140, align: 'center', title: '操作'}
+                ]]
+            });
+        }
+        /**事-------------------------------件-------------------------------绑-------------------------------定*/
+
+        renderTable()
+
+
+        //表格操作栏
+        table.on('tool(table)', function (obj) {
+            let data = obj.data;
+            switch (obj.event) {
+                case 'borrowing':
+                    openBorrow(data);
+                    break;
+                case 'register':
+                    register(data);
+                    break;
+            }
+        });
+
+        //借阅
+        let openBorrow = function (data) {
+            var index = layer.open({
+                title: '预约借阅',
+                type: 2,
+                shade: 0.2,
+                maxmin: true,
+                shadeClose: true,
+                area: ['800px', '600px'],
+                content: './reserve.html',
+                success: function (layero, index) {
+                    var body = layer.getChildFrame('body', index);
+                    body.find("#archive_id").val(data.id);
+                    body.find("#name_container").hide()
+                    body.find("#dept_container").hide()
+                    body.find("#id_card_container").hide()
+                    body.find("#phone").hide()
+                },
+                end: function () {
+                    renderTable()
+                }
+            });
+        }
+
+
+        //借阅
+        let register = function (data) {
+            var index = layer.open({
+                title: '预约借阅',
+                type: 2,
+                shade: 0.2,
+                maxmin: true,
+                shadeClose: true,
+                area: ['800px', '600px'],
+                content: './reserve.html',
+                success: function (layero, index) {
+                    var body = layer.getChildFrame('body', index);
+                    body.find("#archive_id").val(data.id);
+                },
+                end: function () {
+                    renderTable()
+                }
+            });
+        }
+
+
+        //头部工具栏监听
+        table.on('toolbar(table)', function (obj) {
+            switch (obj.event) {
+                case 'add':
+                    // addDict();
+                    break;
+                case 'batchDel':
+                    // batchDel();
+                    break;
+                case 'import':
+                    $("#importFile").click();
+                    break;
+            }
+        })
+
+        form.on('submit(search)', function (data) {
+            searchParam.dh = data.field.dh
+            searchParam.mlh = data.field.mlh
+            searchParam.bgqx = data.field.bgqx
+            searchParam.mj = data.field.mj
+            searchParam.ztc = data.field.ztc
+            renderTable()
+        })
+    });
+</script>

+ 115 - 28
src/main/resources/static/page/borrow/reserve.html

@@ -9,9 +9,7 @@
     <style>
         body {
             background-color: #ffffff;
-
         }
-
         .layui-form-item .layui-input-inline {
             /*width: 20%;*/
         }
@@ -20,13 +18,54 @@
 <body>
 <div class="layui-form layuimini-form" lay-filter="addDict">
 
+    <input type="hidden" name="recordType" id="recordType" class="layui-input">
+
+    <div class="layui-form-item" id="ryA">
+        <label class="layui-form-label required">人员类型:</label>
+        <div class="layui-input-block">
+            <input lay-filter="personType" type="radio" name="personType" value="局内人员" title="局内人员" checked>
+            <input lay-filter="personType" type="radio" name="personType" value="外来人员" title="外来人员">
+        </div>
+    </div>
+
     <div class="layui-form-item" id="name_container">
         <label class="layui-form-label required">借阅人:</label>
-        <div class="layui-input-block">
-            <select class="layui-select" name="adminId" id="adminId" lay-search="">
+        <div class="layui-input-block" id="deptId_A">
+            <select class="layui-select" name="adminId" id="adminId" lay-filter="adminId" lay-search="">
                 <option value="">直接选择或搜索选择</option>
             </select>
         </div>
+        <div class="layui-input-block" id="name_A">
+            <input class="layui-input" type="text" name="name" id="name">
+        </div>
+    </div>
+
+    <div class="layui-form-item" id="dept_container">
+        <label class="layui-form-label required">部门:</label>
+        <div class="layui-input-block">
+            <input class="layui-input" type="text" id="dept" name="dept" lay-verify="required"
+                   lay-reqtext="部门不能为空">
+        </div>
+    </div>
+
+    <div class="layui-form-item" id="phone_container">
+        <label class="layui-form-label required">手机号:</label>
+        <div class="layui-input-block">
+            <input type="text" class="layui-input" id="phone" lay-verify="required" lay-reqtext="手机号能为空" name="phone">
+        </div>
+    </div>
+
+    <div class="layui-form-item">
+        <label class="layui-form-label required">借阅方式:</label>
+        <div class="layui-input-block">
+            <!--            <select name="borrowType" id="bgqx" lay-verify="required" lay-reqtext="借阅方式不能为空">-->
+            <!--                <option value="">请选择借阅方式</option>-->
+            <!--                <option value="0">打印借阅</option>-->
+            <!--                <option value="1">原件借阅</option>-->
+            <!--            </select>-->
+            <input lay-filter="borrowType" type="radio" name="borrowType" value="0" title="打印借阅" checked>
+            <input lay-filter="borrowType" type="radio" name="borrowType" value="1" title="原件借阅">
+        </div>
     </div>
 
     <div class="layui-form-item">
@@ -46,25 +85,14 @@
         </div>
     </div>
 
-    <div class="layui-form-item">
+    <div class="layui-form-item" id="estimateReturnTime_A">
         <label class="layui-form-label required">归还时间:</label>
         <div class="layui-input-block">
-            <input type="text" name="estimateReturnTime" id="estimateReturnTime" lay-verify="required"
+            <input type="text" name="estimateReturnTime" id="estimateReturnTime"
                    placeholder="请选择归还时间" value="" lay-reqtext="归还时间不能为空"
                    class="layui-input">
         </div>
     </div>
-    <div class="layui-form-item">
-        <label class="layui-form-label required">借阅方式:</label>
-        <div class="layui-input-block">
-            <select name="borrowType" id="bgqx" lay-verify="required" lay-reqtext="借阅方式不能为空">
-                <option value="">请选择借阅方式</option>
-                <option value="0">打印借阅</option>
-                <option value="1">原件借阅</option>
-            </select>
-        </div>
-    </div>
-
 
     <div class="layui-form-item">
         <label class="layui-form-label">利用目的:</label>
@@ -104,7 +132,6 @@
 <script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script>
-
     layui.use(['form', 'http', 'laydate', 'upload'], function () {
         /**变-------------------------------量-------------------------------定-------------------------------义*/
         var form = layui.form,
@@ -114,7 +141,30 @@
             laydate = layui.laydate,
             $ = layui.$;
         let archiveId = $('#archive_id').val()
+        let recordType = $('#recordType').val()
         /**方-------------------------------法-------------------------------定-------------------------------义*/
+
+
+        if(recordType == 1){
+            http.get('system/auth/currLoginAdminDept', {
+            }, true, function (res) {
+                if (res.code === 200) {
+                    $("#dept").val(res.data.deptName ? res.data.deptName : '无')
+                    $("#phone").val(res.data.phone)
+                    $("#name").val(res.data.adminName)
+                    // $("#dept_container").show()
+                    // $("#phone_container").show()
+                }
+            })
+            $("#deptId_A").hide()
+            // $("#dept_container").hide()
+            // $("#phone_container").hide()
+            $("#ryA").hide()
+        }else {
+            $("#name_A").hide();
+        }
+
+
             // 保存方法
         let save = function (data) {
                 http.post('borrow/archiveBorrow/borrow', data, true, function (res) {
@@ -130,26 +180,23 @@
                     }
                 })
             }
-
-
         // 加载下拉框
         let loadDictSelect = function () {
             http.get('system/admin/selectAll', {}, false, function (res) {
                 let html = '';
                 for (let i in res.data) {
-                    html += '<option value="' + res.data[i].id + '">' + res.data[i].adminName + "(" + res.data[i].idCard + ")" + '</option>'
+                    // html += '<option value="' + res.data[i].id + '">' + res.data[i].adminName + "(" + res.data[i].idCard + ")" + '</option>'
+                    html += '<option value="' + res.data[i].id + '">' + res.data[i].adminName + '</option>'
                 }
                 $("#adminId").append(html)
                 form.render();//菜单渲染 把内容加载进去
             })
         }
-
-
+        // 最小时间
         function minDate() {
             var now = new Date();
             return now.getFullYear() + "-" + (now.getMonth() + 1) + "-" + now.getDate();
         }
-
         // 加载数据
         let initData = function () {
             laydate.render({
@@ -174,8 +221,12 @@
                 form.val("addDict", res.data);
                 form.render();
             })
-        }
 
+            $("#estimateReturnTime_A").hide()
+            // $("#dept_container").hide()
+            // $("#phone_container").hide()
+        }
+        // 上传文件
         let initUpload = function () {
             //指定允许上传的文件类型
             upload.render({
@@ -208,18 +259,54 @@
                     }
                 }
             });
-            console.log('上传组件加载完成')
         }
         /**事-------------------------------件-------------------------------绑-------------------------------定*/
-
         initData()
         initUpload()
         loadDictSelect()
         //监听提交
         form.on('submit(saveBtn)', function (data) {
             save(data.field)
+        })
+        // 监听局内用户选择
+        form.on('select(adminId)', function (data) {
+            let adminId = data.value;
+            if (adminId) {
+                http.get('system/admin/selectByPrimaryKeyDept', {
+                    id: adminId
+                }, true, function (res) {
+                    if (res.code === 200) {
+                        $("#dept").val(res.data.deptName ? res.data.deptName : '无')
+                        $("#phone").val(res.data.phone)
+                        $("#name").val(res.data.adminName)
+                        // $("#dept_container").show()
+                        // $("#phone_container").show()
+                    }
+                })
+            }
+        })
+        // 登记人员类型
+        form.on("radio(personType)", function (data) {
+            var type = data.value;
+            if (type == '局内人员') {
+                $("#name_A").hide();
+                $("#deptId_A").show();
+            } else {
+                $("#name_A").show();
+                $("#deptId_A").hide();
+            }
+        });
+        // 借阅类型
+        form.on("radio(borrowType)", function (data) {
+            var type = data.value;
+            if (type == 0) {
+                $("#estimateReturnTime_A").hide();
+                $("#estimateReturnTime").prop('disabled', true)
+            } else {
+                $("#estimateReturnTime_A").show()
+                $("#estimateReturnTime").prop('disabled', false)
+            }
         });
-
     });
 </script>
 </body>