瀏覽代碼

军工保密证书部分代码提交

徐滕 3 周之前
父節點
當前提交
119b5b5333
共有 16 個文件被更改,包括 1560 次插入104 次删除
  1. 3 0
      src/main/java/com/jeeplus/common/config/Global.java
  2. 3 0
      src/main/java/com/jeeplus/common/oss/OSSClientUtil.java
  3. 15 0
      src/main/java/com/jeeplus/modules/militaryIndustryConfidentiality/dao/MilitaryIndustryConfidentialityDao.java
  4. 189 0
      src/main/java/com/jeeplus/modules/militaryIndustryConfidentiality/entity/MilitaryIndustryConfidentiality.java
  5. 83 0
      src/main/java/com/jeeplus/modules/militaryIndustryConfidentiality/service/MilitaryIndustryConfidentialityService.java
  6. 151 0
      src/main/java/com/jeeplus/modules/militaryIndustryConfidentiality/web/MilitaryIndustryConfidentialityController.java
  7. 45 44
      src/main/resources/jeeplus.properties
  8. 144 0
      src/main/resources/mappings/modules/militaryIndustryConfidentiality/MilitaryIndustryConfidentialityDao.xml
  9. 481 0
      src/main/webapp/webpage/modules/militaryIndustryConfidentiality/militaryIndustryConfidentialityForm.jsp
  10. 284 0
      src/main/webapp/webpage/modules/militaryIndustryConfidentiality/militaryIndustryConfidentialityList.jsp
  11. 27 10
      src/main/webapp/webpage/modules/sys/userInfo.jsp
  12. 27 10
      src/main/webapp/webpage/modules/workstaff/workStaffBasicDetailAudit.jsp
  13. 27 10
      src/main/webapp/webpage/modules/workstaff/workStaffBasicDetailForm.jsp
  14. 27 10
      src/main/webapp/webpage/modules/workstaff/workStaffBasicDetailModify.jsp
  15. 27 10
      src/main/webapp/webpage/modules/workstaff/workStaffBasicInfoForm.jsp
  16. 27 10
      src/main/webapp/webpage/modules/workstaff/workStaffBasicInfoView.jsp

+ 3 - 0
src/main/java/com/jeeplus/common/config/Global.java

@@ -194,6 +194,9 @@ public class Global {
 	public static String getWorkContractInfo() {
 		return getConfig("workContractInfo");
 	}
+	public static String getMilitaryIndustryConfidentiality() {
+		return getConfig("militaryIndustryConfidentiality");
+	}
 	/**
 	 */
 	public static String getNotifyData() {

+ 3 - 0
src/main/java/com/jeeplus/common/oss/OSSClientUtil.java

@@ -68,6 +68,7 @@ public class OSSClientUtil {
     private String oaAll = Global.getOaAll();
     private String im = Global.getIm();
     private String workContractInfo = Global.getWorkContractInfo();
+    private String militaryIndustryConfidentiality = Global.getMilitaryIndustryConfidentiality();
     private String qzBucketName = Global.getQzBucketName();;
     private OSSClient ossClient;
 
@@ -169,6 +170,8 @@ public class OSSClientUtil {
                 return uploadImg2OSS(fileFile,im);
             case "workContractInfo":
                 return uploadImg2OSS(fileFile,workContractInfo);
+            case "militaryIndustryConfidentiality":
+                return uploadImg2OSS(fileFile,militaryIndustryConfidentiality);
             default:
                 return "";
         }

+ 15 - 0
src/main/java/com/jeeplus/modules/militaryIndustryConfidentiality/dao/MilitaryIndustryConfidentialityDao.java

@@ -0,0 +1,15 @@
+package com.jeeplus.modules.militaryIndustryConfidentiality.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.militaryIndustryConfidentiality.entity.MilitaryIndustryConfidentiality;
+
+/**
+ * 军工保密证书 dao
+ * @author 徐滕
+ * @version 2025-07-09
+ */
+@MyBatisDao
+public interface MilitaryIndustryConfidentialityDao extends CrudDao<MilitaryIndustryConfidentiality> {
+
+}

+ 189 - 0
src/main/java/com/jeeplus/modules/militaryIndustryConfidentiality/entity/MilitaryIndustryConfidentiality.java

@@ -0,0 +1,189 @@
+package com.jeeplus.modules.militaryIndustryConfidentiality.entity;
+
+import com.jeeplus.common.persistence.DataEntity;
+import com.jeeplus.modules.sys.entity.User;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Date;
+
+/**
+ * 军工保密证书 entity
+ * @author 徐滕
+ * @version 2025-07-09
+ */
+public class MilitaryIndustryConfidentiality  extends DataEntity<MilitaryIndustryConfidentiality> {
+
+    private static final long serialVersionUID = 1L;
+
+    private String personnelType;   //人员所在单位(1:ccpm;2:会计)
+    private String userId;          //ccpm用户id
+    private String userName;        //会计用户名称
+    private String name;            //证书名称(默认:军工保密资格证)
+    private String num;             //证书编号
+    private Date effectiveDate;       //证书生效日期
+    private Integer periodOfValidity;    //证书有效期(单位/年。证书有效时长,一般为3年)
+    private Date endDate;     //到期时间
+    private String status;      //证书状态(1:有效;2:过期)
+    private String filePath;    //文件路径
+    private String fileName;    //文件名称
+    private String filePathStr;		// 文件可查看路径
+    private MultipartFile file;     //文件
+    private User user;     //ccpm人员信息
+
+    private Date startEndDate;     //到期时间开始时间
+    private Date endEndDate;     //到期时间结束时间
+    private String officeName;     //证书人员隶属部门
+    private String wsbiId;     //关联的人员id(work_staff_basic_info)
+
+    public MilitaryIndustryConfidentiality() {
+        super();
+    }
+
+    public MilitaryIndustryConfidentiality(String id){
+        super(id);
+    }
+
+    public String getPersonnelType() {
+        return personnelType;
+    }
+
+    public void setPersonnelType(String personnelType) {
+        this.personnelType = personnelType;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getNum() {
+        return num;
+    }
+
+    public void setNum(String num) {
+        this.num = num;
+    }
+
+    public Date getEffectiveDate() {
+        return effectiveDate;
+    }
+
+    public void setEffectiveDate(Date effectiveDate) {
+        this.effectiveDate = effectiveDate;
+    }
+
+    public Integer getPeriodOfValidity() {
+        return periodOfValidity;
+    }
+
+    public void setPeriodOfValidity(Integer periodOfValidity) {
+        this.periodOfValidity = periodOfValidity;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getFilePath() {
+        return filePath;
+    }
+
+    public void setFilePath(String filePath) {
+        this.filePath = filePath;
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public String getFilePathStr() {
+        return filePathStr;
+    }
+
+    public void setFilePathStr(String filePathStr) {
+        this.filePathStr = filePathStr;
+    }
+
+    public MultipartFile getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile file) {
+        this.file = file;
+    }
+
+    public User getUser() {
+        return user;
+    }
+
+    public void setUser(User user) {
+        this.user = user;
+    }
+
+    public Date getStartEndDate() {
+        return startEndDate;
+    }
+
+    public void setStartEndDate(Date startEndDate) {
+        this.startEndDate = startEndDate;
+    }
+
+    public Date getEndEndDate() {
+        return endEndDate;
+    }
+
+    public void setEndEndDate(Date endEndDate) {
+        this.endEndDate = endEndDate;
+    }
+
+    public String getOfficeName() {
+        return officeName;
+    }
+
+    public void setOfficeName(String officeName) {
+        this.officeName = officeName;
+    }
+
+    public String getWsbiId() {
+        return wsbiId;
+    }
+
+    public void setWsbiId(String wsbiId) {
+        this.wsbiId = wsbiId;
+    }
+}

+ 83 - 0
src/main/java/com/jeeplus/modules/militaryIndustryConfidentiality/service/MilitaryIndustryConfidentialityService.java

@@ -0,0 +1,83 @@
+package com.jeeplus.modules.militaryIndustryConfidentiality.service;
+
+import com.jeeplus.common.oss.OSSClientUtil;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.modules.militaryIndustryConfidentiality.dao.MilitaryIndustryConfidentialityDao;
+import com.jeeplus.modules.militaryIndustryConfidentiality.entity.MilitaryIndustryConfidentiality;
+import com.jeeplus.modules.sys.service.WorkattachmentService;
+import com.jeeplus.modules.workstaff.entity.DingTalkUser;
+import com.jeeplus.modules.workstaff.entity.WorkStaffBasicInfo;
+import com.jeeplus.modules.workstaff.entity.WorkStaffCertificate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
+import java.util.Date;
+
+
+/**
+ * 军工保密证书 service
+ * @author 徐滕
+ * @version 2025-07-09
+ */
+@Service
+@Transactional(readOnly = true)
+public class MilitaryIndustryConfidentialityService extends CrudService<MilitaryIndustryConfidentialityDao, MilitaryIndustryConfidentiality> {
+
+
+    public MilitaryIndustryConfidentiality get(String id) {
+        MilitaryIndustryConfidentiality militaryIndustryConfidentiality = super.get(id);
+        if (null != militaryIndustryConfidentiality) {
+            if(StringUtils.isNotEmpty(militaryIndustryConfidentiality.getFilePath())) {
+                militaryIndustryConfidentiality.setFilePathStr(WorkattachmentService.fileUrlManage(militaryIndustryConfidentiality.getFilePath()));
+            }
+
+        }
+        return militaryIndustryConfidentiality;
+    }
+
+    /**
+     * 保存
+     * @param militaryIndustryConfidentiality
+     */
+    @Transactional(readOnly = false)
+    public void save(MilitaryIndustryConfidentiality militaryIndustryConfidentiality) {
+        //处理附件信息
+        if(militaryIndustryConfidentiality.getFile()!=null&&!militaryIndustryConfidentiality.getFile().isEmpty()&&militaryIndustryConfidentiality.getFile().getSize()>0){
+            MultipartFile file = militaryIndustryConfidentiality.getFile();
+            militaryIndustryConfidentiality.setFileName(file.getOriginalFilename());
+            militaryIndustryConfidentiality.setFilePath(this.uploadFile(file));
+        }
+        super.save(militaryIndustryConfidentiality);
+    }
+
+
+    /**
+     * 附件上传到oss
+     * @param file
+     * @return
+     */
+    public String uploadFile(MultipartFile file){
+        String date = DateUtils.formatDate(new Date(),"yyMMddHHmm");
+        try {
+            if (file != null && file.getSize() > 0) {
+                OSSClientUtil ossClientUtil = new OSSClientUtil();
+                String url = ossClientUtil.uploadFile2OSS(file, "militaryIndustryConfidentiality");
+                return url;
+            }
+        }catch (Exception e){
+            logger.error("上传文件失败!");
+        }
+        return null;
+    }
+
+
+    @Transactional(readOnly = false)
+    public void delete(MilitaryIndustryConfidentiality militaryIndustryConfidentiality) {
+        dao.deleteByLogic(militaryIndustryConfidentiality);
+
+    }
+}

+ 151 - 0
src/main/java/com/jeeplus/modules/militaryIndustryConfidentiality/web/MilitaryIndustryConfidentialityController.java

@@ -0,0 +1,151 @@
+package com.jeeplus.modules.militaryIndustryConfidentiality.web;
+
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.utils.excel.ExportExcel;
+import com.jeeplus.common.web.BaseController;
+import com.jeeplus.modules.militaryIndustryConfidentiality.entity.MilitaryIndustryConfidentiality;
+import com.jeeplus.modules.militaryIndustryConfidentiality.service.MilitaryIndustryConfidentialityService;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import org.apache.shiro.authz.annotation.Logical;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 军工保密证书Controller
+ * @author 徐滕
+ * @version 2025-07-09
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/militaryIndustryConfidentiality")
+public class MilitaryIndustryConfidentialityController extends BaseController {
+
+    @Autowired
+    private MilitaryIndustryConfidentialityService service;
+
+
+
+    @ModelAttribute
+    public MilitaryIndustryConfidentiality get(@RequestParam(required=false) String id) {
+        MilitaryIndustryConfidentiality entity = null;
+        if (StringUtils.isNotBlank(id)){
+            entity = service.get(id);
+        }
+        if (entity == null){
+            entity = new MilitaryIndustryConfidentiality();
+        }
+        return entity;
+    }
+
+
+
+    /**
+     * 员工信息列表页面
+     */
+    @RequiresPermissions("militaryIndustryConfidentiality:list")
+    @RequestMapping(value = {"list", ""})
+    public String list(MilitaryIndustryConfidentiality militaryIndustryConfidentiality, HttpServletRequest request, HttpServletResponse response, Model model) {
+        //进行查询之后进行任何操作,返回还是查询之后的数据页面
+        if (StringUtils.isNotBlank(militaryIndustryConfidentiality.getToflag())){
+            if (militaryIndustryConfidentiality.getToflag().equals("1")){
+                request.getSession().removeAttribute("searchMilitaryIndustryConfidentiality");
+                MilitaryIndustryConfidentiality search=militaryIndustryConfidentiality;
+                request.getSession().setAttribute("searchMilitaryIndustryConfidentiality",search);
+            }
+        }else{
+            if (request.getSession().getAttribute("searchMilitaryIndustryConfidentiality")!=null){
+                militaryIndustryConfidentiality= (MilitaryIndustryConfidentiality) request.getSession().getAttribute("searchMilitaryIndustryConfidentiality");
+                model.addAttribute("militaryIndustryConfidentiality", militaryIndustryConfidentiality);
+            }
+        }
+        Page<MilitaryIndustryConfidentiality> page = service.findPage(new Page<MilitaryIndustryConfidentiality>(request, response), militaryIndustryConfidentiality);
+        List<MilitaryIndustryConfidentiality> list = page.getList();
+        model.addAttribute("page", page);
+        return "modules/militaryIndustryConfidentiality/militaryIndustryConfidentialityList";
+    }
+
+
+    /**
+     * 查看,增加,编辑员工信息表单页面
+     */
+    @RequiresPermissions(value={"militaryIndustryConfidentiality:add","militaryIndustryConfidentiality:edit"},logical= Logical.OR)
+    @RequestMapping(value = "form")
+    public String form(MilitaryIndustryConfidentiality militaryIndustryConfidentiality, Model model,boolean reFlag) {
+        if(StringUtils.isNotBlank(militaryIndustryConfidentiality.getId())) {
+            militaryIndustryConfidentiality = service.get(militaryIndustryConfidentiality.getId());
+        }else{
+            militaryIndustryConfidentiality = new MilitaryIndustryConfidentiality();
+            militaryIndustryConfidentiality.setPersonnelType("1");//默认值
+            militaryIndustryConfidentiality.setPeriodOfValidity(3);//默认值
+            militaryIndustryConfidentiality.setName("军工保密资格证");//默认值
+        }
+        model.addAttribute("militaryIndustryConfidentiality", militaryIndustryConfidentiality);
+        String view = "modules/militaryIndustryConfidentiality/militaryIndustryConfidentialityForm";
+        return view;
+    }
+
+
+    /**
+     * 保存员工信息
+     */
+    @RequestMapping(value = "save")
+    public String save(MilitaryIndustryConfidentiality militaryIndustryConfidentiality, Model model, RedirectAttributes redirectAttributes) throws Exception{
+        if (!beanValidator(model, militaryIndustryConfidentiality)){
+            return form(militaryIndustryConfidentiality, model,false);
+        }
+
+        if(!militaryIndustryConfidentiality.getIsNewRecord()){//编辑表单保存
+            MilitaryIndustryConfidentiality t = service.get(militaryIndustryConfidentiality.getId());//从数据库取出记录的值
+            MyBeanUtils.copyBeanNotNull2Bean(militaryIndustryConfidentiality, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+            service.save(t);//保存
+        }else{//新增表单保存
+
+            service.save(militaryIndustryConfidentiality);//保存
+        }
+        addMessage(redirectAttributes, "保存员工信息成功");
+        return "redirect:"+Global.getAdminPath()+"/militaryIndustryConfidentiality/?repage";
+    }
+
+    /**
+     * 删除员工信息
+     */
+    @RequiresPermissions("militaryIndustryConfidentiality:del")
+    @RequestMapping(value = "delete")
+    public String delete(MilitaryIndustryConfidentiality militaryIndustryConfidentiality, RedirectAttributes redirectAttributes) {
+        service.delete(militaryIndustryConfidentiality);
+        addMessage(redirectAttributes, "删除员工信息成功");
+        return "redirect:"+Global.getAdminPath()+"/workstaff/workStaffBasicInfo/?repage";
+    }
+
+    /**
+     * 导出excel文件
+     */
+    @RequiresPermissions("militaryIndustryConfidentiality:export")
+    @RequestMapping(value = "exportAchive", method= RequestMethod.POST)
+    public String exportFile(MilitaryIndustryConfidentiality militaryIndustryConfidentiality, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+        try {
+            String fileName = "员工信息"+ DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<MilitaryIndustryConfidentiality> page = service.findPage(new Page<MilitaryIndustryConfidentiality>(request, response, -1), militaryIndustryConfidentiality);
+            new ExportExcel("员工信息", MilitaryIndustryConfidentiality.class).setDataList(page.getList()).write(response, fileName).dispose();
+            addMessage(redirectAttributes, "导出员工信息记录成功!");
+            return null;
+        } catch (Exception e) {
+            addMessage(redirectAttributes, "导出员工信息记录失败!失败信息:"+e.getMessage());
+        }
+        return "redirect:"+Global.getAdminPath()+"/workstaff/workStaffBasicInfo/achivelist?repage";
+    }
+}

+ 45 - 44
src/main/resources/jeeplus.properties

@@ -162,7 +162,7 @@ accessKeySecret=arHxB7ZPhizrBYf4844TtyaRctPMgW
 bucketName=xgxm-test
 #\u751F\u4EA7\u73AF\u5883
 #bucketName=xg-ccpm
-#签bucketName
+#签锟斤拷bucketName
 qzBucketName=xg-qz
 avatarDir=app-img/avatar/
 notifyDir=app-img/notify/
@@ -206,6 +206,7 @@ app_version=app-data/appVersion/
 app_version_test=app-data/test/
 project.plan.template.path=template/oa/project/
 contract_num_path=app-img/contractnumpath/
+militaryIndustryConfidentiality=attachment-file/militaryIndustryConfidentiality/
 #
 fromEmail=
 toEmail=
@@ -296,7 +297,7 @@ remoteServer.uploadMode =2
 #\u6587\u4EF6\u670D\u52A1\u5668IP\u5730\u5740
 remoteServer.visit =
 
-#上报接口
+#锟较憋拷锟接匡拷
 reportedUrl = https://comp.jszj.com.cn:8031/api/addProject
 
 
@@ -306,107 +307,107 @@ reportedUrl = https://comp.jszj.com.cn:8031/api/addProject
 #
 #signature_http_top = http://121.40.158.10:9182
 #
-##竖版模板templateId
+##锟斤拷锟斤拷模锟斤拷templateId
 #vertical_templateId = 2896237810850173018
-##横板模板templateId
+##锟斤拷锟侥o拷锟絫emplateId
 #across_templateId = 2896237585095954500
-##公司圆章
+##锟斤拷司圆锟斤拷
 #company_round_seal_id = 2895593387063378002
-##公司圆章-竖
+##锟斤拷司圆锟斤拷-锟斤拷
 #company_round_seal_id_vertical = 2898042707446829376
-##公司方章
+##锟斤拷司锟斤拷锟斤拷
 #company_parties_seal_id = 2895597212998434929
-##审定单用印流程id
+##锟襟定碉拷锟斤拷印锟斤拷锟斤拷id
 #approval_category_id = 2895535120981852163
-##(自定义(页面签))审定单用印流程id
+##(锟皆讹拷锟藉(页锟斤拷签锟斤拷)锟襟定碉拷锟斤拷印锟斤拷锟斤拷id
 #custom_approval_category_id = 3103876801745744240
-##报告用印流程id
+##锟斤拷锟斤拷锟斤拷印锟斤拷锟斤拷id
 #report_category_id = 2896237012158222343
-##内审报告用印流程id
+##锟斤拷锟襟报革拷锟斤拷印锟斤拷锟斤拷id
 #report_internal_audit_category_id = 3117352569284948928
-##审定内用印流程id
+##锟斤拷锟斤拷锟斤拷印锟斤拷锟斤拷id
 #judgement_category_id = 2912238663717396786
-##审定单用印流程id(盐城)
+##锟襟定碉拷锟斤拷印锟斤拷锟斤拷id(锟轿筹拷)
 #approval_YC_category_id = 2933219658963918882
-##报告用印流程id(盐城)
+##锟斤拷锟斤拷锟斤拷印锟斤拷锟斤拷id(锟轿筹拷)
 #report_YC_category_id = 2933233335469383748
-##日常签章流程id
+##锟秸筹拷签锟斤拷锟斤拷锟斤拷id
 #signature_daily_office_work = 3198093533650456821
-##报告签章流程id
+##锟斤拷锟斤拷签锟斤拷锟斤拷锟斤拷id
 #signature_project_report_work = 3198093569524338954
-##审定单签章流程id
+##锟襟定碉拷签锟斤拷锟斤拷锟斤拷id
 #signature_project_approval_work = 3245294605355073778
 
-#192.168.2.6签章测试参数
+#192.168.2.6签锟铰诧拷锟皆诧拷锟斤拷
 apptoken = uIJQmTwyGJ
 appsecret = 2NMBqFigKoInmd43Wohxv5aEDKiiHo
 signature = 232a44ee9ebd251d119f0a65628f678e
 
 signature_http_top = http://192.168.2.130:9182
 
-#竖版模板templateId
+#锟斤拷锟斤拷模锟斤拷templateId
 vertical_templateId = 2894156236229259396
-#横板模板templateId
+#锟斤拷锟侥o拷锟絫emplateId
 across_templateId = 2894156210627227768
-#公司圆章
+#锟斤拷司圆锟斤拷
 company_round_seal_id = 2894161942659543252
-#公司圆章-竖
+#锟斤拷司圆锟斤拷-锟斤拷
 company_round_seal_id_vertical = 2898043523878957918
-#公司方章
+#锟斤拷司锟斤拷锟斤拷
 company_parties_seal_id = 2894163220106129636
-#审定单用印流程id
+#锟襟定碉拷锟斤拷印锟斤拷锟斤拷id
 approval_category_id = 2895582833566102435
-#(自定义(页面签))审定单用印流程id
+#(锟皆讹拷锟藉(页锟斤拷签锟斤拷)锟襟定碉拷锟斤拷印锟斤拷锟斤拷id
 custom_approval_category_id = 3103151250849833169
-#报告用印流程id
+#锟斤拷锟斤拷锟斤拷印锟斤拷锟斤拷id
 report_category_id = 2895618951099527314
-#内审报告用印流程id
+#锟斤拷锟襟报革拷锟斤拷印锟斤拷锟斤拷id
 report_internal_audit_category_id = 3116948624000492165
-##审定内用印流程id
+##锟斤拷锟斤拷锟斤拷印锟斤拷锟斤拷id
 judgement_category_id = 2920938119742709765
-#审定单用印流程id(盐城)
+#锟襟定碉拷锟斤拷印锟斤拷锟斤拷id(锟轿筹拷)
 approval_YC_category_id = 2932214418853044239
-#报告用印流程id(盐城)
+#锟斤拷锟斤拷锟斤拷印锟斤拷锟斤拷id(锟轿筹拷)
 report_YC_category_id = 2933233458312618324
 
-#日常签章流程id
+#锟秸筹拷签锟斤拷锟斤拷锟斤拷id
 signature_daily_office_work = 3190218693018722598
 
-#报告签章流程id
+#锟斤拷锟斤拷签锟斤拷锟斤拷锟斤拷id
 signature_project_report_work = 3196710189708420066
 
-#审定单签章流程id
+#锟襟定碉拷签锟斤拷锟斤拷锟斤拷id
 signature_project_approval_work = 3245192847945704016
 
 
 
 
-#其他系统的地
+#锟斤拷锟斤拷系统锟侥碉拷
 CPA_PATH:   http://localhost:2800
-#苏州分公司是否同步数据
+#锟斤拷锟捷分癸拷司锟角凤拷同锟斤拷锟斤拷锟斤拷
 SZ_PATH_flag: true
-#苏州分公司 发
+#锟斤拷锟捷分癸拷司 锟斤拷
 SZ_PATH: http://localhost:9527
 #flowable
 SZOA_PATH: http://localhost:9221
-#system校验用户有
+#system校锟斤拷锟矫伙拷锟斤拷
 SZUSER_PATH:http://localhost:9213
 
 SZAUTH_PATH:http://127.0.0.17:2800
 
-#待办中展示其他系统的流程
-#cpa =
-#Process_1665383385070 评估-报销审批
+#锟斤拷锟斤拷锟斤拷展示锟斤拷锟斤拷系统锟斤拷锟斤拷锟斤拷
+#cpa =锟斤拷
+#Process_1665383385070 锟斤拷锟斤拷-锟斤拷锟斤拷锟斤拷锟斤拷
 CPA_TASK:   Process_1665383385070
-#Process_1669275081328 苏州分公司 发票申请
+#Process_1669275081328 锟斤拷锟捷分癸拷司 锟斤拷票锟斤拷锟斤拷
 SZ_TASK: Process_1669275081328
 
-#各服务引用状态 =》 (若包含,则进行获取该服务的流程信息)
+#锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷状态 =锟斤拷 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷谢锟饺★拷梅锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷息锟斤拷
 INQUIRE_STATUS: cpa
 SZCLOUD_STATUS: sz
 
-# 公共密码
+# 锟斤拷锟斤拷锟斤拷锟斤拷
 publicPassword: Xg@sys9hB2!xWm
 
-#苏州公共密码
+#锟斤拷锟捷癸拷锟斤拷锟斤拷锟斤拷
 szPublicPassword: Xg@sys9hB2!xWm

+ 144 - 0
src/main/resources/mappings/modules/militaryIndustryConfidentiality/MilitaryIndustryConfidentialityDao.xml

@@ -0,0 +1,144 @@
+<?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.jeeplus.modules.militaryIndustryConfidentiality.dao.MilitaryIndustryConfidentialityDao">
+    
+	<sql id="moduleChooseColumns">
+		a.id AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.personnel_type as "personnelType",
+		a.user_id as "userId",
+		a.user_name as "userName",
+		a.name as "name",
+		a.num as "num",
+		a.effective_date as "effectiveDate",
+		a.period_of_validity as "periodOfValidity",
+		a.end_date as "endDate",
+		a.status as "status",
+		a.file_path as "filePath",
+		a.file_name as "fileName",
+		user.name AS "user.name",
+		a.user_id AS "user.id",
+		wsbi.id AS "wsbiId"
+	</sql>
+	
+	<sql id="moduleChooseJoins">
+		LEFT JOIN sys_user user ON user.id = a.user_id
+		LEFT JOIN work_staff_basic_info wsbi ON user.id = wsbi.user_id
+		LEFT JOIN sys_office office ON office.id = user.office_id
+	</sql>
+	
+    
+	<select id="get" resultType="MilitaryIndustryConfidentiality" >
+		SELECT 
+			<include refid="moduleChooseColumns"/>
+		FROM military_industry_confidentiality a
+		<include refid="moduleChooseJoins"/>
+		WHERE a.id = #{id}
+	</select>
+	
+	<select id="findList" resultType="MilitaryIndustryConfidentiality" >
+		SELECT
+			<include refid="moduleChooseColumns"/>
+		   -- 部门信息,如果user_id为空则返回"会计"
+			,CASE
+			WHEN a.user_id IS NOT NULL THEN office.name
+			ELSE '会计公司'
+			END AS "officeName"
+		FROM military_industry_confidentiality a
+		<include refid="moduleChooseJoins"/>
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+	
+	<insert id="insert">
+		INSERT INTO military_industry_confidentiality(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			personnel_type,
+			user_id,
+			user_name,
+			name,
+			num,
+			effective_date,
+			period_of_validity,
+			end_date,
+			status,
+			file_path,
+			file_name
+		) VALUES (
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag},
+			#{personnelType},
+			#{user.id},
+			#{userName},
+			#{name},
+			#{num},
+			#{effectiveDate},
+			#{periodOfValidity},
+			#{endDate},
+			#{status},
+			#{filePath},
+			#{fileName}
+		)
+	</insert>
+	
+	<update id="update">
+		UPDATE military_industry_confidentiality SET
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			remarks = #{remarks},
+			personnel_type = #{personnelType},
+			user_id = #{user.id},
+			user_name = #{userName},
+			name = #{name},
+			num = #{num},
+			effective_date = #{effectiveDate},
+			period_of_validity = #{periodOfValidity},
+			end_date = #{endDate},
+			status = #{status},
+			file_path = #{filePath},
+			file_name = #{fileName}
+		WHERE id = #{id}
+	</update>
+	
+	
+	<!--物理删除-->
+	<update id="delete">
+		DELETE FROM military_industry_confidentiality
+		WHERE id = #{id}
+	</update>
+	
+	<!--逻辑删除-->
+	<update id="deleteByLogic">
+		UPDATE military_industry_confidentiality SET
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			del_flag = #{DEL_FLAG_DELETE}
+		WHERE id = #{id}
+	</update>
+	
+</mapper>

+ 481 - 0
src/main/webapp/webpage/modules/militaryIndustryConfidentiality/militaryIndustryConfidentialityForm.jsp

@@ -0,0 +1,481 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>项目管理</title>
+    <meta name="decorator" content="default"/>
+    <script type="text/javascript" src="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/iCheck/icheck.min.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/layui/layuidown.js"></script>
+    <script src="${ctxStatic}/common/html/js/script.js"></script>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/layuidown.css"/>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.css"/>
+    <script type="text/javascript" src="${ctxStatic}/layui/layui.js"></script>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/css/layui.css"/>
+    <script src="${ctxStatic}/layer-v2.3/layui/xmSelect.js" charset="utf-8"></script>
+    <style>
+        #projectDesc-error{
+            left:0;
+            top:82px;
+        }
+        .layui-layer-dialog{
+            background: red;
+        }
+        td input{
+            margin-left:-10px !important;
+            height: 42px !important;
+        }
+        .disables {
+            pointer-events: none;
+        }
+        .notDisables {
+            pointer-events: all;
+        }
+        .forbidden{
+            background-color:#c2c2c2;
+        }
+
+        .notForbidden{
+            background-color:#3ca2e0;
+        }
+        .spanzj{
+            color: red;
+            font-size: 12px;
+            padding-left: 10px;
+        }
+    </style>
+    <script type="text/javascript">
+        var validateForm;
+        var isMasterClient = true;//是否是委托方
+        var clientCount = 0;
+        function doSubmit(i){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }else{
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+            return false;
+        }
+        $(document).ready(function() {
+            layui.use(['form', 'layer', 'laydate'], function () {
+                var form = layui.form;
+                var laydate = layui.laydate;
+
+                form.on('select(personnelTypeFilter)', function (data) {
+                    var span=data.value;
+                    if(span==1){;
+                        $("#userName").val("");
+                        $("#show1").show();
+                        $("#show2").hide();
+                    }else{
+                        $("#ccpmUserId").val("");
+                        $("#ccpmUserName").val("");
+                        $("#show1").hide();
+                        $("#show2").show();
+                    }
+                });
+
+                // 初始化日期选择器
+                laydate.render({
+                    elem: '#effectiveDate',
+                    done: function () {
+                        calculateEndDate();
+                    }
+                });
+
+                // 监听 input 的 change 事件,捕获日期变化
+                document.getElementById('effectiveDate').addEventListener('change', function(){
+                    console.log('监听到日期变化,值为:', this.value);
+                    calculateEndDate();
+                });
+
+
+            });
+
+            var personnelType = $("#personnelType").val()
+            if(personnelType==1){;
+                $("#userName").val("");
+                $("#show1").show();
+                $("#show2").hide();
+            }else{
+                $("#ccpmUserId").val("");
+                $("#ccpmUserName").val("");
+                $("#show1").hide();
+                $("#show2").show();
+            }
+
+            var radioVal ;
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+, trigger: 'click'
+            });
+        });
+
+        function insertTitle(tValue){
+            $("#flagFile").val(false);
+            var files = $("#attachment_file")[0].files;            for(var i = 0;i<files.length;i++) {                var file = files[i];
+                var attachmentId = $("#id").val();
+                var attachmentFlag = "82";
+                /*console.log(file);*/
+                var timestamp=new Date().getTime();
+
+                var storeAs = "projectRecords";
+                var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+                var divId = "_attachment";
+                $("#addFile"+divId).show();
+                multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,0);}
+        }
+
+
+        function addFile() {
+            $("#attachment_file").click();
+        }
+
+        function addRow(list, idx, tpl, row){
+            // var idx1 = $("#workClientLinkmanList tr").length;
+            bornTemplete(list, idx, tpl, row, idx);
+        }
+
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        function delRow(obj, prefix){
+            var id = $(prefix+"_id");
+            var delFlag = $(prefix+"_delFlag");
+            $(obj).parent().parent().remove();
+        }
+        function this_upload_file_button(id){
+            $("#"+id).click();
+        }
+
+
+        function changeFileName(obj, index) {
+            var file = obj.files[0];
+            if (!file) return;
+
+            var url = URL.createObjectURL(file);
+
+            // 限制文件大小
+            if (file.size > 100 * 1024 * 1024) {
+                layer.msg("请上传100M以内文件!", { icon: 2 });
+                return;
+            }
+
+            var ext = file.name.split('.').pop().toLowerCase();
+            var isImage = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'].includes(ext);
+
+            var spanId = $(obj).attr("id") + 'Name' + index;
+            var fileStr = "";
+
+            if (isImage) {
+                // 图片展示区域
+                fileStr += '<div style="position:relative; display:inline-block;">' +
+                    '<img src="' + url + '" width="50" height="50" style="cursor:pointer;" ' +
+                    'onclick="openLayerPreview(\'' + url + '\')" alt="' + file.name + '">' +
+
+                    // 删除按钮
+                    '<i class="fa fa-times-circle" style="position:absolute; top:-8px; right:-8px; color:red; cursor:pointer;" ' +
+                    'onclick="deleteImage(\'' + spanId + '\', \'' + obj.id + '\')"></i>' +
+                    '</div>';
+            } else {
+                // 非图片文件展示名称
+                fileStr += '<span style="display:inline-block;width:24px;height:24px;"></span>' +
+                    '<a href="javascript:void(0);" onclick="preview(\'预览\', \'' + url + '\', \'90%\', \'90%\')" ' +
+                    'title="' + file.name + '" style="text-decoration:none;color:#007bff;">' +
+                    shortenFileName(file.name, 20) +
+                    '</a>' +
+                    '<i class="fa fa-times-circle" style="margin-left:5px;color:red;cursor:pointer;" ' +
+                    'onclick="deleteImage(\'' + spanId + '\', \'' + obj.id + '\')"></i>';
+            }
+
+            // 下载按钮
+            /*fileStr += '<a href="javascript:void(0);" title="下载 ' + file.name + '" ' +
+                'style="color: #28a745; margin-left: 5px; text-decoration: none;" ' +
+                'onclick="downloadFile(\'' + url + '\', \'' + file.name + '\')">' +
+                '<i class="fa fa-download"></i></a>';*/
+
+            $('#' + spanId).html(fileStr);
+        }
+
+
+        function shortenFileName(name, maxLength) {
+            if (name.length <= maxLength) {
+                return name;
+            }
+            return name.substring(0, maxLength) + '...';
+        }
+
+        function openLayerPreview(imgUrl) {
+            var img = new Image();
+            img.onload = function () {
+                var imgWidth = img.width;
+                var imgHeight = img.height;
+
+                // 最大限制,防止太大撑爆屏幕
+                var maxWidth = window.innerWidth * 0.8;
+                var maxHeight = window.innerHeight * 0.8;
+
+                // 缩放比例
+                var ratio = Math.min(maxWidth / imgWidth, maxHeight / imgHeight, 1);
+
+                var finalWidth = imgWidth * ratio;
+                var finalHeight = imgHeight * ratio;
+
+                layui.use('layer', function () {
+                    var layer = layui.layer;
+                    layer.open({
+                        type: 1,
+                        title: '图片预览',
+                        shadeClose: true,
+                        shade: 0.2,
+                        area: [finalWidth + 'px', finalHeight + 'px'],
+                        content: '<img src="' + imgUrl + '" style="width:100%;height:100%;object-fit:contain;">'
+                    });
+                });
+            };
+            img.src = imgUrl;
+        }
+
+
+        function deleteImage(spanId, inputId) {
+            // 1. 清空图片展示区域
+            $('#' + spanId).html('');
+
+            // 2. 清除上传的文件 input 值
+            $('#' + inputId).val('');
+            document.getElementById(inputId).value = ''; // 双保险
+            console.log($('#' + inputId + 'Path').val())
+            // 3. 清除隐藏的路径字段(用于提交给后台)
+            $('#' + inputId + 'Path').val('');
+            console.log($('#' + inputId + 'Path').val())
+        }
+
+
+        // 下载函数,利用a标签模拟点击下载blob图片
+        function downloadFile(blobUrl, fileName) {
+            var a = document.createElement('a');
+            a.href = blobUrl;
+            a.download = fileName || 'download.png';
+            document.body.appendChild(a);
+            a.click();
+            document.body.removeChild(a);
+        }
+
+        function calculateEndDate() {
+            const effectiveDateStr = document.getElementById("effectiveDate").value;
+            const validityYearsStr = document.querySelector("[name='periodOfValidity']").value;
+
+            // 校验数据是否完整
+            if (!effectiveDateStr || !validityYearsStr) {
+                document.getElementById("endDate").value = "";
+                return;
+            }
+
+            // 转换为日期对象
+            const effectiveDate = new Date(effectiveDateStr);
+            const validityYears = parseInt(validityYearsStr);
+
+            console.log('effectiveDate',effectiveDate)
+            console.log('validityYears',validityYears)
+
+            if (isNaN(validityYears)) {
+                alert("证书有效期请输入数字!");
+                document.getElementById("endDate").value = "";
+                return;
+            }
+
+            // 增加有效年限
+            const endDate = new Date(effectiveDate);
+            endDate.setFullYear(effectiveDate.getFullYear() + validityYears);
+
+            console.log('endDate',endDate)
+
+            // 格式化为 yyyy-MM-dd
+            const yyyy = endDate.getFullYear();
+            const mm = String(endDate.getMonth() + 1).padStart(2, '0');
+            const dd = String(endDate.getDate()-1).padStart(2, '0');
+            const formattedEndDate = yyyy+ '-' + mm + '-' + dd;
+
+            console.log('formattedEndDate',formattedEndDate)
+
+            // 设置值到“证书到期日期”输入框中
+            document.getElementById("endDate").value = formattedEndDate;
+        }
+
+    </script>
+</head>
+<body>
+<div class="single-form">
+    <div class="container">
+        <sys:message content="${message}"/>
+        <form:form id="inputForm" modelAttribute="militaryIndustryConfidentiality" action="${ctx}/militaryIndustryConfidentiality/save" enctype="multipart/form-data" method="post" class="form-horizontal layui-form ">
+            <form:hidden path="id"/>
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>项目基础信息</h2></div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label"><span class="require-item">*</span>所在单位:</label>
+                    <div class="layui-input-block readOnlyFFF">
+                        <form:select lay-filter="personnelTypeFilter" placeholder="请选择" path="personnelType" class="form-control required editable-select layui-input" value="${militaryIndustryConfidentiality.personnelType}">
+                            <form:option value=""/>
+                            <form:options items="${fns:getMainDictList('militaryIndustryConfidentiality_personnel_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                        </form:select>
+                    </div>
+                </div>
+
+
+                <div class="layui-item layui-col-sm6 lw7" id="show1">
+                    <label class="layui-form-label"><span class="require-item">*</span>证书归属人:</label>
+                    <div class="layui-input-block  with-icon">
+                        <sys:treeselect id="ccpmUser" name="user.id" value="${militaryIndustryConfidentiality.user.id}" labelName="user.name" labelValue="${militaryIndustryConfidentiality.user.name}"
+                                        cssStyle="background-color: #fff" title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control required layui-input" allowClear="true" notAllowSelectParent="true"/>
+                    </div>
+                </div>
+
+                <div class="layui-item layui-col-sm6 lw7" id="show2">
+                    <label class="layui-form-label"><span class="require-item">*</span>证书归属人:</label>
+                    <div class="layui-input-block">
+                        <form:input path="userName" placeholder="请输入证书归属人" htmlEscape="false"  class="form-control layui-input "/>
+                    </div>
+                </div>
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label"><span class="require-item">*</span>证书名称:</label>
+                    <div class="layui-input-block">
+                        <form:input path="name" maxlength="255" htmlEscape="false" placeholder="请输入证书名称" readonly="true" class="form-control layui-input required"/>
+                    </div>
+                </div>
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label"><span class="require-item">*</span>证书编号:</label>
+                    <div class="layui-input-block">
+                        <form:input path="num" maxlength="255" htmlEscape="false" placeholder="请输入证书编号" class="form-control layui-input required"/>
+                    </div>
+                </div>
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label double-line"><span class="require-item">*</span>证书生效日期:</label>
+                    <div class="layui-input-block">
+                        <input class="laydate-icondate form-control layui-input layer-date laydate-icon required" style="background-color: #fff" readonly="readonly" id="effectiveDate" name="effectiveDate" placeholder="请选择证书生效日期" value="<fmt:formatDate value="${militaryIndustryConfidentiality.effectiveDate}" pattern="yyyy-MM-dd"/>">
+                    </div>
+                </div>
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label double-line"><span class="require-item">*</span>证书有效期(年):</label>
+                    <div class="layui-input-block">
+                        <form:input path="periodOfValidity" placeholder="请输入证书有效期" htmlEscape="false" onchange="calculateEndDate()" class="form-control layui-input required"/>
+                    </div>
+                </div>
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label double-line"><span class="require-item">*</span>证书到期日期:</label>
+                    <div class="layui-input-block">
+                        <input class="laydate-icondate form-control layui-input layer-date laydate-icon required" style="background-color: #fff" readonly="readonly" id="endDate" name="endDate" placeholder="请选择证书到期日期" value="<fmt:formatDate value="${militaryIndustryConfidentiality.endDate}" pattern="yyyy-MM-dd"/>">
+                    </div>
+                </div>
+
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label double-line"><span class="require-item">*</span>保密证书:</label>
+                    <div class="layui-input-block">
+                            <%-- 上传按钮 --%>
+                        <a class="op-btn op-btn-add" title="上传" onclick="this_upload_file_button('file')"><i class="fa fa-plus"></i>&nbsp;上传</a>
+
+                        <%-- 文件展示区域 --%>
+                        <span id="fileName1">
+                            <c:if test="${not empty militaryIndustryConfidentiality.filePathStr}">
+                                <c:set var="fileNameArr" value="${fn:split(militaryIndustryConfidentiality.filePath, '/')}" />
+                                <c:set var="fileName" value="${fileNameArr[fn:length(fileNameArr) - 1]}" />
+                                <c:set var="extArr" value="${fn:split(fileName, '.')}" />
+                                <c:set var="ext" value="${fn:toLowerCase(extArr[fn:length(extArr) - 1])}" />
+
+                                <c:choose>
+                                    <%-- 图片类型预览 --%>
+                                    <c:when test="${ext == 'jpg' || ext == 'jpeg' || ext == 'png' || ext == 'gif' || ext == 'bmp' || ext == 'webp'}">
+                                        <div style="position:relative; display:inline-block;">
+                                            <img src="${militaryIndustryConfidentiality.filePathStr}" width="50" height="50"
+                                                 style="cursor:pointer;" onclick="openLayerPreview('${militaryIndustryConfidentiality.filePathStr}')"
+                                                 alt="保密证书预览" />
+                                            <i class="fa fa-times-circle"
+                                               style="position:absolute; top:-8px; right:-8px; color:red; cursor:pointer;"
+                                               onclick="deleteImage('fileName1', 'file')"></i>
+                                        </div>
+                                    </c:when>
+                                    <%-- 其他文件类型 --%>
+                                    <c:otherwise>
+                                        <a class="attention-info" href="javascript:void(0)"
+                                           style="color: #007bff;" onclick="preview('预览','${militaryIndustryConfidentiality.filePathStr}','90%','90%')">
+                                                ${militaryIndustryConfidentiality.fileName}
+                                        </a>
+                                        <i class="fa fa-times-circle"
+                                           style="color:red; margin-left:5px; cursor:pointer;"
+                                           onclick="deleteImage('fileName1', 'file')"></i>
+                                    </c:otherwise>
+                                </c:choose>
+
+                                <%-- 下载按钮 --%>
+                                <a href="javascript:void(0);"
+                                   title="下载 ${militaryIndustryConfidentiality.fileName}"
+                                   style="color: #28a745; margin-left: 5px; text-decoration: none;"
+                                   onclick="downloadFile('${ctx}', '${militaryIndustryConfidentiality.filePath}', '${militaryIndustryConfidentiality.fileName}')">
+                                    <i class="fa fa-download"></i>
+                                </a>
+                            </c:if>
+                        </span>
+
+                        <%-- 文件上传控件(隐藏) --%>
+                        <input id="file" name="file" style="display:none" type="file" onchange="changeFileName(this,1)" />
+
+                        <%-- 提交隐藏字段 --%>
+                        <input type="hidden" id="filePath" name="filePath" value="${militaryIndustryConfidentiality.filePath}">
+                    </div>
+                </div>
+
+
+
+                <div class="layui-item layui-col-sm12 lw6 with-textarea">
+                    <label class="layui-form-label ">备注:</label>
+                    <div class="layui-input-block">
+                        <form:textarea placeholder="请输入备注" path="remarks" htmlEscape="false" rows="4"  maxlength="255"  class="form-control "/>
+                    </div>
+                </div>
+            </div>
+
+            <div class="form-group layui-row page-end"></div>
+        </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 284 - 0
src/main/webapp/webpage/modules/militaryIndustryConfidentiality/militaryIndustryConfidentialityList.jsp

@@ -0,0 +1,284 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>员工信息管理</title>
+	<meta name="decorator" content="default"/>
+    <style>
+        body{
+            background-color:transparent;
+            filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+            color:#ffffff;
+            background-color:rgba(255,255,255,0);
+            height:100%;
+        }
+    </style>
+    <script type="text/javascript">
+        $(document).ready(function() {
+            $("#cus_name").show();
+            $("#cus_name").siblings().hide();
+            //搜索框收放
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow1);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow1);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#startEndDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+, trigger: 'click'
+            });
+            laydate.render({
+                elem: '#endEndDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+, trigger: 'click'
+            });
+
+        });
+
+        function openDialog(title,url,width,height,target) {
+            if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+                width = 'auto';
+                height = 'auto';
+            } else {//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url,
+                skin: 'three-btns',
+                btn: ["提交","关闭"],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+
+                    if(iframeWin.contentWindow.doSubmit(index) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                    return false;
+
+
+                },
+                btn2: function (index) {
+
+                }
+            });
+        }
+
+        function setParentInfo(ids,names,nos,salarys){
+            return;
+        }
+	</script>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+    <sys:message content="${message}"/>
+    <div class="layui-row">
+        <div class="full-width fl">
+            <div class="contentShadow layui-row" id="queryDiv">
+            <form:form id="searchForm" modelAttribute="militaryIndustryConfidentiality" action="${ctx}/militaryIndustryConfidentiality/" method="post" class="form-inline">
+                <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+                <input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+                <input type="hidden" input="params" value="">
+                <input id="toflag" name="toflag" type="hidden" value="1"/>
+                <table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+                <div class="commonQuery lw6">
+                    <div class="layui-item query athird">
+                        <label class="layui-form-label">姓名:</label>
+                        <div class="layui-input-block">
+                            <form:input path="userName" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+                        </div>
+                    </div>
+                    <div class="layui-item query athird">
+                        <label class="layui-form-label">证书编号:</label>
+                        <div class="layui-input-block">
+                            <form:input path="num" htmlEscape="false" maxlength="50"  class=" form-control layui-input"/>
+                        </div>
+                    </div>
+                    <div class="layui-item athird fr">
+                        <div class="input-group">
+                            <a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+                            <div class="layui-btn-group search-spacing">
+                                <button id="searchQuery" class="layui-btn layui-btn-sm layui-bg-blue" onclick="search()">查询</button>
+                                <button id="searchReset" class="layui-btn layui-btn-sm " onclick="resetSearch()">重置</button>
+                            </div>
+                        </div>
+                    </div>
+                    <div style="    clear:both;"></div>
+                </div>
+                <div id="moresees" style="clear:both;display:none;" class="form-group layui-row first lw12">
+                    <div class="layui-item query athird">
+                        <label class="layui-form-label">所在单位:</label>
+                        <div class="layui-input-block">
+                            <form:input path="personnelType" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+                        </div>
+                    </div>
+                    <div class="layui-item query athird">
+                        <label class="layui-form-label">证书状态:</label>
+                        <div class="layui-input-block">
+                            <form:select path="status" class="form-control simple-select required">
+                                <form:option value="" label=""/>
+                                <form:options items="${fns:getMainDictList('militaryIndustryConfidentiality_status')}" itemLabel="label" itemValue="label" htmlEscape="false"/>
+                            </form:select>
+                        </div>
+                    </div>
+                    <div class="layui-item query athird">
+                        <label class="layui-form-label">证书到期日期:</label>
+                        <div class="layui-input-block readOnlyFFF">
+                            <input id="startEndDate" name="startEndDate" type="text" placeholder="开始时间" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+                                   value="<fmt:formatDate value="${militaryIndustryConfidentiality.startEndDate}" pattern="yyyy-MM-dd"/>"/>
+                            </input>
+                            <span class="group-sep">-</span>
+                            <input id="endEndDate" name="endEndDate" type="text" placeholder="结束时间" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+                                   value="<fmt:formatDate value="${militaryIndustryConfidentiality.endEndDate}" pattern="yyyy-MM-dd"/>"/>
+                            </input>
+                        </div>
+                    </div>
+
+                </div>
+            </form:form>
+	        </div>
+	    </div>
+
+        <div class="full-width fl">
+            <div class="contentShadow layui-form contentDetails">
+                <div class="nav-btns">
+                    <div class="layui-btn-group">
+                        <shiro:hasPermission name="militaryIndustryConfidentiality:add">
+                            <table:addRow url="${ctx}/militaryIndustryConfidentiality/form" title="员工信息"></table:addRow><!-- 增加按钮 -->
+                        </shiro:hasPermission>
+                        <%--<shiro:hasPermission name="militaryIndustryConfidentiality:import">
+                            <table:importExcelBasic url="${ctx}/workstaff/workStaffBasicInfo/import"></table:importExcelBasic><!-- 导入按钮 -->
+                        </shiro:hasPermission>--%>
+                        <shiro:hasPermission name="militaryIndustryConfidentiality:export">
+                            <table:exportExcel url="${ctx}/militaryIndustryConfidentiality/export"></table:exportExcel><!-- 导出按钮 -->
+                        </shiro:hasPermission>
+                        <button class="layui-btn layui-btn-sm" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"> 刷新</button>
+                    </div>
+                    <div style="clear: both;"></div>
+                </div>
+                <table class="oa-table layui-table" id="contentTable" lay-filter="tableEvent"></table>
+
+                <!-- 分页代码 -->
+                <table:page page="${page}"></table:page>
+                <div style="clear: both;"></div>
+            </div>
+        </div>
+    </div>
+    <div id="changewidth"></div>
+</div>
+<script type="text/javascript" src="${ctxStatic}/layui/layui.js"></script>
+<script charset="utf-8" src="${ctxStatic}/kindeditor/plugins/tableEdit/tableEdit.js"></script>
+<script>
+    layui.use(['table','tableEdit','layer'], function () {
+        var table = layui.table,tableEdit = layui.tableEdit,$ = layui.$;
+
+        var cols = layui.table.render({
+            limit:${ page.pageSize }
+            ,elem: '#contentTable'
+            ,page: false
+            ,cols: [[
+                {field:'index',align:'center', title: '序号',width:40}
+                ,{field:'userName',align:'center', title: '姓名',minWidth:100,templet:function(d){
+                        if (!d.wsbiId && !d.userId) {
+                            // wsbiId 为空,直接显示用户名(无链接)
+                            return '<span title="' + d.userName + '">' + d.userName + '</span>';
+                        } else {
+                            // wsbiId 不为空,显示可点击链接
+                            return "<a class=\"attention-info\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看员工信息', '${ctx}/workstaff/workStaffBasicInfo/view?id=" + d.wsbiId + "','95%','95%')\">" +
+                                "<span title=\"" + d.userName + "\">" + d.userName + "</span></a>";
+                        }
+                }}
+                ,{field:'personnelType',align:'center', title: '所在单位',minWidth:150}
+                ,{field:'name',align:'center', title: '证书名称', minWidth:100}
+                ,{field:'num',align:'center', title: '证书编号', minWidth:100}
+                ,{field:'officeName',align:'center', title: '部门', minWidth:100}
+                ,{field:'effectiveDate',align:'center', title: '证书生效日期', minWidth:100}
+                ,{field:'periodOfValidity',align:'center', title: '证书有效期(年)', minWidth:100}
+                ,{field:'endDate',align:'center', title: '证书到期日期', minWidth:100}
+                ,{field:'status',align:'center', title: '证书状态', minWidth:80}
+                ,{field:'op',align:'center',title:"操作",width:260,templet:function(d){
+                        ////对操作进行初始化
+                        var xml = "<div class=\"layui-btn-group\">";
+
+                        if(d.canedit != undefined && d.canedit == "1"){
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialog('修改', '${ctx}/militaryIndustryConfidentiality/form?id="+ d.id + "','95%','95%')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改</a>";
+                        }
+
+                        if(d.candelete != undefined && d.candelete == "1"){
+                            xml +="<a href=\"${ctx}/militaryIndustryConfidentiality/delete?id=" + d.id + "\" onclick=\"return confirmx('确认要删除信息吗?', this.href)\"   class=\"layui-btn layui-btn-xs layui-bg-red\"> 删除</a>";
+                        }
+                            xml+="</div>"
+                        return xml;
+                    }}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="militaryIndustryConfidentiality" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index": "${index.index+1}"
+                    , "id": "${militaryIndustryConfidentiality.id}"
+                    <c:choose>
+                        <c:when test="${ empty militaryIndustryConfidentiality.userId}">
+                            , "userName": "${militaryIndustryConfidentiality.userName}"
+                        </c:when>
+                        <c:otherwise>
+                            , "userName": "${militaryIndustryConfidentiality.user.name}"
+                        </c:otherwise>
+                    </c:choose>
+                    , "userId": "${militaryIndustryConfidentiality.user.id}"
+                    , "name": "${militaryIndustryConfidentiality.name}"
+                    , "num": "${militaryIndustryConfidentiality.num}"
+                    , "effectiveDate": "<fmt:formatDate value="${militaryIndustryConfidentiality.effectiveDate}" pattern="yyyy-MM-dd"/>"
+                    , "periodOfValidity": "${militaryIndustryConfidentiality.periodOfValidity}"
+                    , "endDate": "<fmt:formatDate value="${militaryIndustryConfidentiality.endDate}" pattern="yyyy-MM-dd"/>"
+                    , "status":"${fns:getMainDictLabels(militaryIndustryConfidentiality.status,',','militaryIndustryConfidentiality_status', '')}"
+                    , "personnelType":"${fns:getMainDictLabels(militaryIndustryConfidentiality.personnelType,',','militaryIndustryConfidentiality_personnel_type', '')}"
+                    , "officeName": "${militaryIndustryConfidentiality.officeName}"
+                    , "wsbiId": "${militaryIndustryConfidentiality.wsbiId}"
+
+
+                    <shiro:hasPermission name="militaryIndustryConfidentiality:edit">,
+                        "canedit": "1"
+                    </shiro:hasPermission>
+                    <shiro:hasPermission name="militaryIndustryConfidentiality:del">,
+                        "candelete": "1"
+                    </shiro:hasPermission>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+        }).config.cols;
+    })
+
+    resizeListTable(130);/*消除由于有竖向滚动条造成table出现横向滚动条*/
+    $("a").on("click",addLinkVisied);
+</script>
+<script>
+    resizeListWindow1();
+    $(window).resize(function(){
+        resizeListWindow1();
+    });
+</script>
+</body>
+</html>

+ 27 - 10
src/main/webapp/webpage/modules/sys/userInfo.jsp

@@ -305,17 +305,34 @@
 
 
         function openLayerPreview(imgUrl) {
-            layui.use('layer', function(){
-                var layer = layui.layer;
-                layer.open({
-                    type: 1,
-                    title: '图片预览',
-                    shadeClose: true,
-                    shade: 0.2,
-                    area: ['600px', '400px'],
-                    content: '<img src="'+imgUrl+'" style="width:100%;height:100%;">'
+            var img = new Image();
+            img.onload = function () {
+                var imgWidth = img.width;
+                var imgHeight = img.height;
+
+                // 最大限制,防止太大撑爆屏幕
+                var maxWidth = window.innerWidth * 0.8;
+                var maxHeight = window.innerHeight * 0.8;
+
+                // 缩放比例
+                var ratio = Math.min(maxWidth / imgWidth, maxHeight / imgHeight, 1);
+
+                var finalWidth = imgWidth * ratio;
+                var finalHeight = imgHeight * ratio;
+
+                layui.use('layer', function () {
+                    var layer = layui.layer;
+                    layer.open({
+                        type: 1,
+                        title: '图片预览',
+                        shadeClose: true,
+                        shade: 0.2,
+                        area: [finalWidth + 'px', finalHeight + 'px'],
+                        content: '<img src="' + imgUrl + '" style="width:100%;height:100%;object-fit:contain;">'
+                    });
                 });
-            });
+            };
+            img.src = imgUrl;
         }
     </script>
     <style>

+ 27 - 10
src/main/webapp/webpage/modules/workstaff/workStaffBasicDetailAudit.jsp

@@ -364,17 +364,34 @@
         }
 
         function openLayerPreview(imgUrl) {
-            layui.use('layer', function(){
-                var layer = layui.layer;
-                layer.open({
-                    type: 1,
-                    title: '图片预览',
-                    shadeClose: true,
-                    shade: 0.2,
-                    area: ['600px', '400px'],
-                    content: '<img src="'+imgUrl+'" style="width:100%;height:100%;">'
+            var img = new Image();
+            img.onload = function () {
+                var imgWidth = img.width;
+                var imgHeight = img.height;
+
+                // 最大限制,防止太大撑爆屏幕
+                var maxWidth = window.innerWidth * 0.8;
+                var maxHeight = window.innerHeight * 0.8;
+
+                // 缩放比例
+                var ratio = Math.min(maxWidth / imgWidth, maxHeight / imgHeight, 1);
+
+                var finalWidth = imgWidth * ratio;
+                var finalHeight = imgHeight * ratio;
+
+                layui.use('layer', function () {
+                    var layer = layui.layer;
+                    layer.open({
+                        type: 1,
+                        title: '图片预览',
+                        shadeClose: true,
+                        shade: 0.2,
+                        area: [finalWidth + 'px', finalHeight + 'px'],
+                        content: '<img src="' + imgUrl + '" style="width:100%;height:100%;object-fit:contain;">'
+                    });
                 });
-            });
+            };
+            img.src = imgUrl;
         }
     </script>
 </head>

+ 27 - 10
src/main/webapp/webpage/modules/workstaff/workStaffBasicDetailForm.jsp

@@ -265,17 +265,34 @@
         }
 
         function openLayerPreview(imgUrl) {
-            layui.use('layer', function(){
-                var layer = layui.layer;
-                layer.open({
-                    type: 1,
-                    title: '图片预览',
-                    shadeClose: true,
-                    shade: 0.2,
-                    area: ['600px', '400px'],
-                    content: '<img src="'+imgUrl+'" style="width:100%;height:100%;">'
+            var img = new Image();
+            img.onload = function () {
+                var imgWidth = img.width;
+                var imgHeight = img.height;
+
+                // 最大限制,防止太大撑爆屏幕
+                var maxWidth = window.innerWidth * 0.8;
+                var maxHeight = window.innerHeight * 0.8;
+
+                // 缩放比例
+                var ratio = Math.min(maxWidth / imgWidth, maxHeight / imgHeight, 1);
+
+                var finalWidth = imgWidth * ratio;
+                var finalHeight = imgHeight * ratio;
+
+                layui.use('layer', function () {
+                    var layer = layui.layer;
+                    layer.open({
+                        type: 1,
+                        title: '图片预览',
+                        shadeClose: true,
+                        shade: 0.2,
+                        area: [finalWidth + 'px', finalHeight + 'px'],
+                        content: '<img src="' + imgUrl + '" style="width:100%;height:100%;object-fit:contain;">'
+                    });
                 });
-            });
+            };
+            img.src = imgUrl;
         }
 
         function deleteImage(spanId, inputId) {

+ 27 - 10
src/main/webapp/webpage/modules/workstaff/workStaffBasicDetailModify.jsp

@@ -266,17 +266,34 @@
         }
 
         function openLayerPreview(imgUrl) {
-            layui.use('layer', function(){
-                var layer = layui.layer;
-                layer.open({
-                    type: 1,
-                    title: '图片预览',
-                    shadeClose: true,
-                    shade: 0.2,
-                    area: ['600px', '400px'],
-                    content: '<img src="'+imgUrl+'" style="width:100%;height:100%;">'
+            var img = new Image();
+            img.onload = function () {
+                var imgWidth = img.width;
+                var imgHeight = img.height;
+
+                // 最大限制,防止太大撑爆屏幕
+                var maxWidth = window.innerWidth * 0.8;
+                var maxHeight = window.innerHeight * 0.8;
+
+                // 缩放比例
+                var ratio = Math.min(maxWidth / imgWidth, maxHeight / imgHeight, 1);
+
+                var finalWidth = imgWidth * ratio;
+                var finalHeight = imgHeight * ratio;
+
+                layui.use('layer', function () {
+                    var layer = layui.layer;
+                    layer.open({
+                        type: 1,
+                        title: '图片预览',
+                        shadeClose: true,
+                        shade: 0.2,
+                        area: [finalWidth + 'px', finalHeight + 'px'],
+                        content: '<img src="' + imgUrl + '" style="width:100%;height:100%;object-fit:contain;">'
+                    });
                 });
-            });
+            };
+            img.src = imgUrl;
         }
 
         function deleteImage(spanId, inputId) {

+ 27 - 10
src/main/webapp/webpage/modules/workstaff/workStaffBasicInfoForm.jsp

@@ -516,17 +516,34 @@
         }
 
         function openLayerPreview(imgUrl) {
-            layui.use('layer', function(){
-                var layer = layui.layer;
-                layer.open({
-                    type: 1,
-                    title: '图片预览',
-                    shadeClose: true,
-                    shade: 0.2,
-                    area: ['600px', '400px'],
-                    content: '<img src="'+imgUrl+'" style="width:100%;height:100%;">'
+            var img = new Image();
+            img.onload = function () {
+                var imgWidth = img.width;
+                var imgHeight = img.height;
+
+                // 最大限制,防止太大撑爆屏幕
+                var maxWidth = window.innerWidth * 0.8;
+                var maxHeight = window.innerHeight * 0.8;
+
+                // 缩放比例
+                var ratio = Math.min(maxWidth / imgWidth, maxHeight / imgHeight, 1);
+
+                var finalWidth = imgWidth * ratio;
+                var finalHeight = imgHeight * ratio;
+
+                layui.use('layer', function () {
+                    var layer = layui.layer;
+                    layer.open({
+                        type: 1,
+                        title: '图片预览',
+                        shadeClose: true,
+                        shade: 0.2,
+                        area: [finalWidth + 'px', finalHeight + 'px'],
+                        content: '<img src="' + imgUrl + '" style="width:100%;height:100%;object-fit:contain;">'
+                    });
                 });
-            });
+            };
+            img.src = imgUrl;
         }
 
         function deleteImage(spanId, inputId) {

+ 27 - 10
src/main/webapp/webpage/modules/workstaff/workStaffBasicInfoView.jsp

@@ -49,17 +49,34 @@
         }
 
         function openLayerPreview(imgUrl) {
-            layui.use('layer', function(){
-                var layer = layui.layer;
-                layer.open({
-                    type: 1,
-                    title: '图片预览',
-                    shadeClose: true,
-                    shade: 0.2,
-                    area: ['600px', '400px'],
-                    content: '<img src="'+imgUrl+'" style="width:100%;height:100%;">'
+            var img = new Image();
+            img.onload = function () {
+                var imgWidth = img.width;
+                var imgHeight = img.height;
+
+                // 最大限制,防止太大撑爆屏幕
+                var maxWidth = window.innerWidth * 0.8;
+                var maxHeight = window.innerHeight * 0.8;
+
+                // 缩放比例
+                var ratio = Math.min(maxWidth / imgWidth, maxHeight / imgHeight, 1);
+
+                var finalWidth = imgWidth * ratio;
+                var finalHeight = imgHeight * ratio;
+
+                layui.use('layer', function () {
+                    var layer = layui.layer;
+                    layer.open({
+                        type: 1,
+                        title: '图片预览',
+                        shadeClose: true,
+                        shade: 0.2,
+                        area: [finalWidth + 'px', finalHeight + 'px'],
+                        content: '<img src="' + imgUrl + '" style="width:100%;height:100%;object-fit:contain;">'
+                    });
                 });
-            });
+            };
+            img.src = imgUrl;
         }
     </script>