Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

user7 5 лет назад
Родитель
Сommit
c24b5847f4
42 измененных файлов с 4925 добавлено и 21 удалено
  1. 16 0
      src/main/java/com/jeeplus/modules/projectType/dao/ProjectTypeDao.java
  2. 18 0
      src/main/java/com/jeeplus/modules/projectType/entity/ProjectType.java
  3. 8 0
      src/main/java/com/jeeplus/modules/projectType/service/ProjectTypeService.java
  4. 174 0
      src/main/java/com/jeeplus/modules/projectType/web/ProjectAccordingTypeController.java
  5. 15 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/dao/ProjectContentDataDao.java
  6. 65 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/entity/ProjectBasedData.java
  7. 9 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/entity/ProjectContentData.java
  8. 9 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/entity/ProjectReportTreeData.java
  9. 9 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/entity/Projectcontentinfo.java
  10. 15 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/service/ProjectContentDataService.java
  11. 40 4
      src/main/java/com/jeeplus/modules/projectcontentinfo/service/ProjectcontentinfoService.java
  12. 59 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/web/ProjectcontentinfoController.java
  13. 27 0
      src/main/java/com/jeeplus/modules/projectrecord/dao/ProjectImplementEarlyDao.java
  14. 33 0
      src/main/java/com/jeeplus/modules/projectrecord/dao/early/ProjectEarlyReviewDao.java
  15. 26 0
      src/main/java/com/jeeplus/modules/projectrecord/entity/ProjectAttachmentInfo.java
  16. 27 0
      src/main/java/com/jeeplus/modules/projectrecord/entity/ProjectRecordTreeData.java
  17. 38 0
      src/main/java/com/jeeplus/modules/projectrecord/service/ProjectImplementEarlyService.java
  18. 118 0
      src/main/java/com/jeeplus/modules/projectrecord/service/early/ProjectEarlyReviewService.java
  19. 282 0
      src/main/java/com/jeeplus/modules/projectrecord/web/Early/ProjectEarlyReviewController.java
  20. 282 0
      src/main/java/com/jeeplus/modules/projectrecord/web/completion/ProjectCompletionReviewController.java
  21. 3 1
      src/main/java/com/jeeplus/modules/sys/dao/DictDao.java
  22. 10 0
      src/main/java/com/jeeplus/modules/sys/service/DictService.java
  23. 29 4
      src/main/resources/mappings/modules/projectType/ProjectTypeDao.xml
  24. 20 0
      src/main/resources/mappings/modules/projectcontentinfo/ProjectContentDataDao.xml
  25. 22 0
      src/main/resources/mappings/modules/projectrecord/ProjectImplementEarlyDao.xml
  26. 226 0
      src/main/resources/mappings/modules/projectrecord/early/ProjectEarlyReviewDao.xml
  27. 1 1
      src/main/resources/mappings/modules/projectreportnum/ProjectReportNumDao.xml
  28. 5 0
      src/main/resources/mappings/modules/sys/DictDao.xml
  29. 70 1
      src/main/webapp/static/bos/bosupload.js
  30. 62 0
      src/main/webapp/webpage/modules/project/type/accrding/projectAccrdingTypeForm.jsp
  31. 74 0
      src/main/webapp/webpage/modules/project/type/accrding/projectAccrdingTypeFormSubordinate.jsp
  32. 300 0
      src/main/webapp/webpage/modules/project/type/accrding/projectAccrdingTypeList.jsp
  33. 70 0
      src/main/webapp/webpage/modules/project/type/accrding/projectAccrdingTypeView.jsp
  34. 1 1
      src/main/webapp/webpage/modules/projectcontentinfo/reportAudit.jsp
  35. 544 0
      src/main/webapp/webpage/modules/projectrecord/implementCompletion/projectCompletionReviewList.jsp
  36. 1 1
      src/main/webapp/webpage/modules/projectrecord/implementCompletion/projectImplementCompletionList.jsp
  37. 565 0
      src/main/webapp/webpage/modules/projectrecord/implementEarly/projectEarlyReviewList.jsp
  38. 1 1
      src/main/webapp/webpage/modules/projectrecord/implementEarly/projectImplementEarlyList.jsp
  39. 1 1
      src/main/webapp/webpage/modules/projectrecord/implementStage/projectImplementStageList.jsp
  40. 1240 0
      src/main/webapp/webpage/modules/projectrecord/workContentFromAndView/reportForm.jsp
  41. 395 0
      src/main/webapp/webpage/modules/projectrecord/workContentFromAndView/reportView.jsp
  42. 15 6
      src/main/webapp/webpage/modules/projectreportnum/projectReportNumStageForm.jsp

+ 16 - 0
src/main/java/com/jeeplus/modules/projectType/dao/ProjectTypeDao.java

@@ -6,6 +6,7 @@ package com.jeeplus.modules.projectType.dao;
 import com.jeeplus.common.persistence.CrudDao;
 import com.jeeplus.common.persistence.annotation.MyBatisDao;
 import com.jeeplus.modules.projectType.entity.ProjectType;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectBasedData;
 import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportTreeData;
 import com.jeeplus.modules.sys.entity.Menu;
 import com.jeeplus.modules.sys.entity.Office;
@@ -59,4 +60,19 @@ public interface ProjectTypeDao extends CrudDao<ProjectType> {
 	 * @return
 	 */
 	String getProjectTypeByParentId(@Param("parentId") String parentId, @Param("typeName") String typeName);
+
+
+
+	/**
+	 * 根据父级type获取自己的宜居性资料基本信息
+	 * @param typeId
+	 * @return
+	 */
+	List<ProjectBasedData> getAccrdingDataList(String typeId);
+	/**
+	 * 根据父级type获取自己的宜居性资料基本信息
+	 * @param contentId
+	 * @return
+	 */
+	ProjectBasedData getBasedData(@Param("contentId")String contentId,@Param("basedId")String basedId);
 }

+ 18 - 0
src/main/java/com/jeeplus/modules/projectType/entity/ProjectType.java

@@ -20,6 +20,8 @@ public class ProjectType extends DataEntity<ProjectType> {
     private String typeName; 	// 类型名称
     private String parentName;  //父级名称
     private String typeId;   //类型id
+    private Integer tier;    //层级标识
+    private String chooseCondition;  //是否必填标识
 
 
     private String createId;//创建者id
@@ -97,4 +99,20 @@ public class ProjectType extends DataEntity<ProjectType> {
     public void setView(String view) {
         this.view = view;
     }
+
+    public Integer getTier() {
+        return tier;
+    }
+
+    public void setTier(Integer tier) {
+        this.tier = tier;
+    }
+
+    public String getChooseCondition() {
+        return chooseCondition;
+    }
+
+    public void setChooseCondition(String chooseCondition) {
+        this.chooseCondition = chooseCondition;
+    }
 }

+ 8 - 0
src/main/java/com/jeeplus/modules/projectType/service/ProjectTypeService.java

@@ -5,6 +5,7 @@ import com.jeeplus.common.service.CrudService;
 import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.modules.projectType.dao.ProjectTypeDao;
 import com.jeeplus.modules.projectType.entity.ProjectType;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectBasedData;
 import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportTreeData;
 import org.aspectj.apache.bcel.generic.RET;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -98,4 +99,11 @@ public class ProjectTypeService extends CrudService<ProjectTypeDao, ProjectType>
     public List<ProjectType> getProjectType() {
         return projectTypeDao.getProjectType();
     }
+
+    public List<ProjectBasedData> getAccrdingDataList(String typeId){
+        return dao.getAccrdingDataList(typeId);
+    }
+    public ProjectBasedData getBasedData(String contentId,String basedId){
+        return dao.getBasedData(contentId,basedId);
+    }
 }

+ 174 - 0
src/main/java/com/jeeplus/modules/projectType/web/ProjectAccordingTypeController.java

@@ -0,0 +1,174 @@
+package com.jeeplus.modules.projectType.web;
+
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.web.BaseController;
+import com.jeeplus.modules.projectType.entity.ProjectType;
+import com.jeeplus.modules.projectType.service.ProjectTypeService;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportTreeData;
+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.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 项目类型Controller
+ * @author 徐滕
+ * @version 2020-07-03
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/project/projectAccordingType")
+public class ProjectAccordingTypeController extends BaseController {
+
+	@Autowired
+	private ProjectTypeService projectTypeService;
+
+	@ModelAttribute
+	public ProjectType get(@RequestParam(required=false) String id) {
+		ProjectType entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = projectTypeService.getProjectType(id);
+		}
+		if (entity == null){
+			entity = new ProjectType();
+		}
+		return entity;
+	}
+
+	/**
+	 * 工作内容类型列表页面
+	 */
+	@RequiresPermissions("project:projectAccordingType:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(ProjectType projectType, Model model) {
+		/*List<ProjectType> list = projectTypeService.findList(projectType);
+		model.addAttribute("list", list);*/
+		return "modules/project/type/accrding/projectAccrdingTypeList";
+	}
+
+	/**
+	 * 根据项目id查询工作内容信息Tree
+	 * @param typeName
+	 * @return
+	 */
+	@RequestMapping("getProjectTypeTreeList")
+	@ResponseBody
+	public Map<String,List> getProjectTypeTreeList(String typeName){
+		Map<String,List> map = new HashMap<>();
+		//获取成果列表父节点
+		List<ProjectReportTreeData> parentReportDataList = projectTypeService.getProjectTypeList(typeName);
+		for (ProjectReportTreeData reportData : parentReportDataList) {
+			//添加登陆者id
+			reportData.setLoginUserId(UserUtils.getUser().getId());
+		}
+		map.put("data",parentReportDataList);
+		return map;
+	}
+
+	/**
+	 * 查看,增加,编辑工作内容类型表单页面
+	 */
+	@RequestMapping(value = "form")
+	public String form(ProjectType projectType, Model model) {
+		if(StringUtils.isNotBlank(projectType.getView())){
+			if("view".equals(projectType.getView())){
+				if("1".equals(projectType.getChooseCondition())){
+					projectType.setChooseCondition("是");
+				}else{
+					projectType.setChooseCondition("否");
+				}
+				return "modules/project/type/accrding/projectAccrdingTypeView";
+			}else if("saveSubordinateInfo".equals(projectType.getView())){
+				projectType.setParentName(projectType.getTypeName());
+				projectType.setParentId(projectType.getId());
+				projectType.setTypeName("");
+				projectType.setRemarks("");
+				projectType.setId("");
+			}else if("updateSubordinateInfo".equals(projectType.getView())){
+
+			}
+		}
+		model.addAttribute("projectType", projectType);
+		if("updateSubordinateInfo".equals(projectType.getView()) || "saveSubordinateInfo".equals(projectType.getView())){
+			return "modules/project/type/accrding/projectAccrdingTypeFormSubordinate";
+		}
+		return "modules/project/type/accrding/projectAccrdingTypeForm";
+	}
+
+	/**
+	 * 保存工作内容类型
+	 */
+	@RequiresPermissions(value={"project:projectType:add","project:projectType:edit"},logical=Logical.OR)
+	@RequestMapping(value = "save")
+	public String saveParentInfo(ProjectType projectType, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, projectType)){
+			return form(projectType, model);
+		}
+		if(!projectType.getIsNewRecord()){//编辑表单保存
+			ProjectType t = projectTypeService.get(projectType.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(projectType, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			projectTypeService.save(t);//保存
+		}else{//新增表单保存
+			projectTypeService.save(projectType);//保存
+		}
+		addMessage(redirectAttributes, "保存工作内容类型成功");
+		return "redirect:"+Global.getAdminPath()+"/project/projectAccordingType/?repage";
+	}
+
+	/**
+	 * 保存工作内容类型
+	 */
+	@RequestMapping(value = "saveSubordinateInfo")
+	@ResponseBody
+	public Map<String,Object> saveSubordinateInfo(ProjectType projectType, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		Map<String,Object> map = new HashMap<>();
+		if (!beanValidator(model, projectType)){
+			map.put("code",0);
+			map.put("msg","数据错误");
+			return map;
+		}
+		projectType.setTier(4);
+		if(!projectType.getIsNewRecord()){//编辑表单保存
+			ProjectType t = projectTypeService.get(projectType.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(projectType, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			projectTypeService.save(t);//保存
+		}else{//新增表单保存
+			projectTypeService.save(projectType);//保存
+		}
+		addMessage(redirectAttributes, "保存工作内容类型成功");
+		map.put("code",1);
+		map.put("msg","操作成功");
+		return map;
+	}
+
+	/**
+	 * 删除工作内容类型
+	 */
+	@RequiresPermissions("project:projectType:remove")
+	@RequestMapping(value = "delete")
+	@ResponseBody
+	public Map<String,Object> delete(ProjectType projectType, RedirectAttributes redirectAttributes) {
+		Map<String,Object> map = new HashMap<>();
+		Integer result = projectTypeService.deleteProjectTypeById(projectType);
+		if (result ==1){
+			addMessage(redirectAttributes, "删除工作内容类型成功");
+			map.put("code",1);
+		}else{
+			addMessage(redirectAttributes, "删除工作内容类型失败");
+			map.put("code",0);
+		}
+		return map;
+	}
+}

+ 15 - 0
src/main/java/com/jeeplus/modules/projectcontentinfo/dao/ProjectContentDataDao.java

@@ -44,4 +44,19 @@ public interface ProjectContentDataDao extends CrudDao<ProjectContentData> {
      * @return
      */
     List<ProjectRecordTreeData> getProjectContentDataList(@Param("projectId")String projectId,@Param("projectTypeParentId")String projectTypeParentId);
+
+    /**
+     * 根据项目编号和阶段Type获取信息(项目复核)
+     * @param projectId
+     * @param projectTypeParentId
+     * @return
+     */
+    List<ProjectRecordTreeData> getProjectContentReportDataList(@Param("projectId")String projectId,@Param("projectTypeParentId")String projectTypeParentId);
+
+    /**
+     * 根据id获取信息
+     * @return
+     */
+    List<ProjectContentData> getProjectContentData(String id);
+
 }

+ 65 - 0
src/main/java/com/jeeplus/modules/projectcontentinfo/entity/ProjectBasedData.java

@@ -39,6 +39,15 @@ public class ProjectBasedData extends DataEntity<ProjectBasedData> {
 	private Date endDate;
     private String typeLabel;
 
+    private String fileType;
+    private String fileName;
+    private String fileUrl;
+    private String fileAttachmentFlag;
+    private String fileAttachmentId;
+
+    private String flag;
+    private String chooseCondition;
+
 	public ProjectBasedData() {
 		super();
 	}
@@ -166,4 +175,60 @@ public class ProjectBasedData extends DataEntity<ProjectBasedData> {
     public void setTypeLabel(String typeLabel) {
         this.typeLabel = typeLabel;
     }
+
+	public String getFileType() {
+		return fileType;
+	}
+
+	public void setFileType(String fileType) {
+		this.fileType = fileType;
+	}
+
+	public String getFileName() {
+		return fileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	public String getFileUrl() {
+		return fileUrl;
+	}
+
+	public void setFileUrl(String fileUrl) {
+		this.fileUrl = fileUrl;
+	}
+
+	public String getFileAttachmentFlag() {
+		return fileAttachmentFlag;
+	}
+
+	public void setFileAttachmentFlag(String fileAttachmentFlag) {
+		this.fileAttachmentFlag = fileAttachmentFlag;
+	}
+
+	public String getFileAttachmentId() {
+		return fileAttachmentId;
+	}
+
+	public void setFileAttachmentId(String fileAttachmentId) {
+		this.fileAttachmentId = fileAttachmentId;
+	}
+
+	public String getFlag() {
+		return flag;
+	}
+
+	public void setFlag(String flag) {
+		this.flag = flag;
+	}
+
+	public String getChooseCondition() {
+		return chooseCondition;
+	}
+
+	public void setChooseCondition(String chooseCondition) {
+		this.chooseCondition = chooseCondition;
+	}
 }

+ 9 - 0
src/main/java/com/jeeplus/modules/projectcontentinfo/entity/ProjectContentData.java

@@ -39,6 +39,7 @@ public class ProjectContentData extends DataEntity<ProjectContentData> {
 	private List<ProjectControlTable> projectControlTableList;
 	private List<Workattachment> workAttachments;
 	private List<ProjectBasedData> projectBasedDataList;
+	private String masterName;
 
 	private Double initialMoney;  //初始金额
 	private Double alterMoney;   //变更金额
@@ -217,4 +218,12 @@ public class ProjectContentData extends DataEntity<ProjectContentData> {
 	public void setUltimatelyMoney(Double ultimatelyMoney) {
 		this.ultimatelyMoney = ultimatelyMoney;
 	}
+
+	public String getMasterName() {
+		return masterName;
+	}
+
+	public void setMasterName(String masterName) {
+		this.masterName = masterName;
+	}
 }

+ 9 - 0
src/main/java/com/jeeplus/modules/projectcontentinfo/entity/ProjectReportTreeData.java

@@ -21,6 +21,7 @@ public class ProjectReportTreeData {
     private String pid;       //父级id
 
     private String index;  //序号
+    private String tier; //层级标识
 
     private String loginUserId;
 
@@ -130,4 +131,12 @@ public class ProjectReportTreeData {
     public void setCreateBy(String createBy) {
         this.createBy = createBy;
     }
+
+    public String getTier() {
+        return tier;
+    }
+
+    public void setTier(String tier) {
+        this.tier = tier;
+    }
 }

+ 9 - 0
src/main/java/com/jeeplus/modules/projectcontentinfo/entity/Projectcontentinfo.java

@@ -38,6 +38,7 @@ public class Projectcontentinfo extends TreeEntity<Projectcontentinfo> {
 	private String home;
 	private String change;
 	private String condition;  //条件
+	private String flag;  //条件
 
 	public RuralProjectRecords getProjectOnRural() {
 		return projectOnRural;
@@ -204,4 +205,12 @@ public class Projectcontentinfo extends TreeEntity<Projectcontentinfo> {
 	public void setCondition(String condition) {
 		this.condition = condition;
 	}
+
+	public String getFlag() {
+		return flag;
+	}
+
+	public void setFlag(String flag) {
+		this.flag = flag;
+	}
 }

+ 15 - 0
src/main/java/com/jeeplus/modules/projectcontentinfo/service/ProjectContentDataService.java

@@ -200,4 +200,19 @@ public class ProjectContentDataService extends CrudService<ProjectContentDataDao
         List<ProjectRecordTreeData> projectRecordTreeDataList = dao.getProjectContentDataList(projectId,projectTypeParentId);
         return projectRecordTreeDataList;
     }
+    public List<ProjectContentData> getProjectContentData(String id) {
+        List<ProjectContentData> projectRecordTreeDataList = dao.getProjectContentData(id);
+        return projectRecordTreeDataList;
+    }
+
+    /**
+     * 根据项目编号和阶段Type获取信息(项目复核)
+     * @param projectId
+     * @param projectTypeParentId
+     * @return
+     */
+    public List<ProjectRecordTreeData> getProjectContentReportDataList(String projectId,String projectTypeParentId) {
+        List<ProjectRecordTreeData> projectRecordTreeDataList = dao.getProjectContentReportDataList(projectId,projectTypeParentId);
+        return projectRecordTreeDataList;
+    }
 }

+ 40 - 4
src/main/java/com/jeeplus/modules/projectcontentinfo/service/ProjectcontentinfoService.java

@@ -17,6 +17,8 @@ import com.jeeplus.modules.projectcontentinfo.entity.*;
 import com.jeeplus.modules.projectcontroltable.dao.ProjectControlTableDao;
 import com.jeeplus.modules.projectcontroltable.entity.ProjectControlTable;
 import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import com.jeeplus.modules.projectrecord.entity.ProjectAttachmentInfo;
+import com.jeeplus.modules.projectrecord.service.ProjectImplementEarlyService;
 import com.jeeplus.modules.projectrecord.service.ProjectRecordsService;
 import com.jeeplus.modules.projectreportnum.service.ProjectReportNumService;
 import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectcontentinfo;
@@ -43,7 +45,6 @@ import com.jeeplus.modules.workreview.service.WorkReviewStandardService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.ui.Model;
 
 import java.net.URLDecoder;
 import java.util.*;
@@ -98,6 +99,8 @@ public class ProjectcontentinfoService extends CrudService<ProjectcontentinfoDao
 	private WorkContentClaimDao workContentClaimDao;
 	@Autowired
 	private WorkContentContractinfoDao workContentContractinfoDao;
+	@Autowired
+	private ProjectImplementEarlyService projectImplementEarlyService;
 
 	private static MainDictDetailDao mainDictDetailDao = SpringContextHolder.getBean(MainDictDetailDao.class);
 
@@ -397,11 +400,42 @@ public class ProjectcontentinfoService extends CrudService<ProjectcontentinfoDao
 			if(projectReportData.getProjectBasedDataList()!=null&&!projectReportData.getProjectBasedDataList().isEmpty()){
 				projectReportDataService.deleteReportDataBased(projectReportData);
 				for (ProjectBasedData data:projectReportData.getProjectBasedDataList()) {
-					if (data.getDelFlag().equals("0")){
-						projectContentDataService.saveReportContent(data.getId(),projectReportData.getId(),"3");
+					//判定是否为全过程管理中的项目复核模块
+					if("132".equals(data.getFlag())){
+						if("132".equals(data.getFileAttachmentFlag())) {
+							//添加工作内容和依据性资料关系
+							projectImplementEarlyService.saveProjectContrntAndBasedId(projectReportData.getProjectContentDataList().get(0).getId(),data.getId());
+							//将工作内容信息附件保存
+							Workattachment workattachment = new Workattachment();
+							workattachment.setType(data.getFileType());
+							workattachment.setAttachmentFlag(data.getFileAttachmentFlag());
+							workattachment.setUrl(data.getFileUrl());
+							workattachment.setAttachmentName(data.getFileName());
+							workattachment.setAttachmentId(data.getId());
+							workattachment.preInsert();
+							workattachment.setDivIdType(projectReportData.getProjectContentDataList().get(0).getId());
+							workattachment.setCreateBy(UserUtils.getUser());
+							workattachmentDao.insert(workattachment);
+							//添加依据性资料和附件信息关系
+							ProjectAttachmentInfo projectAttachmentInfo = new ProjectAttachmentInfo();
+							projectAttachmentInfo.setAttachmentId(workattachment.getId());
+							projectAttachmentInfo.setProjectId(data.getId());
+							projectImplementEarlyService.saveProjectAndAttachmentContact(projectAttachmentInfo);
+						}
+					}else{
+						if (data.getDelFlag().equals("0")){
+							projectContentDataService.saveReportContent(data.getId(),projectReportData.getId(),"3");
+						}
 					}
 				}
 			}
+			//添加工作内容和报告关系
+			if("according".equals(projectcontentinfo.getCondition())){
+				Integer contentAndReportCount = projectImplementEarlyService.getProjectContrntAndReport(projectReportData.getProjectContentDataList().get(0).getId(), projectReportData.getId());
+				if(contentAndReportCount==0){
+					projectImplementEarlyService.saveProjectContrntAndReport(projectReportData.getProjectContentDataList().get(0).getId(),projectReportData.getId());
+				}
+			}
 			//生成报告送审tree数据
 			List<WorkReviewAudit> workReviewAudits = new ArrayList<>();
 			if (projectReportData.getProjectReviewList()!=null && projectReportData.getProjectReviewList().size()!=0){
@@ -437,7 +471,9 @@ public class ProjectcontentinfoService extends CrudService<ProjectcontentinfoDao
 				}
 			}
 			//保存tree数据
-			saveReportTree(projectcontentinfo,status,company,office,reportDataName,infoId,attachmentList,projectReportData.getReviewStandard(),1);
+			if(!"according".equals(projectcontentinfo.getCondition())){
+				saveReportTree(projectcontentinfo,status,company,office,reportDataName,infoId,attachmentList,projectReportData.getReviewStandard(),1);
+			}
 		}
 		//保存附件+tree
 		if (attachmentList!=null && attachmentList.size()!=0) {

+ 59 - 0
src/main/java/com/jeeplus/modules/projectcontentinfo/web/ProjectcontentinfoController.java

@@ -13,6 +13,7 @@ import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.common.web.BaseController;
 import com.jeeplus.modules.act.entity.Act;
 import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.projectType.service.ProjectTypeService;
 import com.jeeplus.modules.projectcontentinfo.entity.*;
 import com.jeeplus.modules.projectcontentinfo.service.*;
 import com.jeeplus.modules.projectcontroltable.entity.ProjectControlTable;
@@ -22,6 +23,7 @@ import com.jeeplus.modules.projectrecord.enums.ProjectStatusEnum;
 import com.jeeplus.modules.projectrecord.service.ProjectRecordsService;
 import com.jeeplus.modules.sys.entity.MainDictDetail;
 import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.service.DictService;
 import com.jeeplus.modules.sys.utils.DictUtils;
 import com.jeeplus.modules.sys.utils.UserUtils;
 import com.jeeplus.modules.workclientinfo.entity.WorkClientLinkman;
@@ -79,6 +81,10 @@ public class ProjectcontentinfoController extends BaseController {
 	private ActTaskService actTaskService;
 	@Autowired
 	protected HistoryService historyService;
+	@Autowired
+	private ProjectTypeService projectTypeService;
+	@Autowired
+	private DictService dictService;
 
 	@ModelAttribute("projectcontentinfo")
 	public Projectcontentinfo get(@RequestParam(required=false) String id) {
@@ -682,6 +688,30 @@ public class ProjectcontentinfoController extends BaseController {
 				}
 			}
 
+			if("according".equals(projectcontentinfo.getCondition()) || "completion".equals(projectcontentinfo.getCondition())){
+				/**
+				 * 查询配置的宜居性资料并添加到展示view中
+				 */
+				List<ProjectBasedData> projectBasedDataList =  projectTypeService.getAccrdingDataList(projectReportData.getProjectContentDataList().get(0).getType());
+				for (ProjectBasedData projectBasedData: projectBasedDataList) {
+					ProjectBasedData contentAttachmentData =  projectTypeService.getBasedData(projectReportData.getProjectContentDataList().get(0).getId(),projectBasedData.getId());
+					if (null != contentAttachmentData) {
+						try {
+							MyBeanUtils.copyBeanNotNull2Bean(contentAttachmentData, projectBasedData);
+						}catch (Exception e) {
+							e.printStackTrace();
+						}
+					}
+					projectBasedData.setFlag("according");
+					if (StringUtils.isNotBlank(projectBasedData.getFileAttachmentId())) {
+						projectBasedData.setUploadUser(UserUtils.get(projectBasedData.getFileAttachmentId()));
+					}
+				}
+				for (ProjectBasedData projectBasedData: projectReportData.getProjectBasedDataList()) {
+					projectBasedData.setType(dictService.dictLabel("project_document_type",projectBasedData.getType()));
+				}
+				projectReportData.getProjectBasedDataList().addAll(projectBasedDataList);
+			}
 			if (projectReportData.getMaster()==null || StringUtils.isBlank(projectReportData.getMaster().getId())){
 				projectReportData.setMaster(UserUtils.getUser());
 			}
@@ -693,6 +723,13 @@ public class ProjectcontentinfoController extends BaseController {
 			model.addAttribute("achievementParentId", projectReportData.getType());
 			model.addAttribute("achievementId", projectReportData.getAchievementType());
 			model.addAttribute("reviewStandard", projectReportData.getReviewStandard());
+			if("according".equals(projectcontentinfo.getCondition()) || "completion".equals(projectcontentinfo.getCondition())){
+				if ("edit".equals(projectcontentinfo.getFlag())) {
+					return "modules/projectrecord/workContentFromAndView/reportForm";
+				} else {
+					return "modules/projectrecord/workContentFromAndView/reportView";
+				}
+			}
 			if (projectcontentinfo.getView().equals("reportView")){
 				return "modules/projectcontentinfo/reportView";
 			}else  if(projectcontentinfo.getView().equals("reportViewGzr")){
@@ -702,6 +739,9 @@ public class ProjectcontentinfoController extends BaseController {
 						model.addAttribute("gzr", "gzr");
 					}
 				}
+				if("according".equals(projectcontentinfo.getCondition()) || "completion".equals(projectcontentinfo.getCondition())){
+					return "modules/projectrecord/workContentFromAndView/reportView";
+				}
 				return "modules/projectcontentinfo/reportView";
 			}else if (projectcontentinfo.getView().equals("reportChange")) {
 				projectReportData.setReportId(projectReportData.getId());
@@ -832,6 +872,13 @@ public class ProjectcontentinfoController extends BaseController {
 					projectReportData.setProject(projectReportData.getProject());
 					List<ProjectReportData> list = projectReportDataService.findList(projectReportData);
 					model.addAttribute("list", list);*/
+
+					if("according".equals(projectcontentinfo.getCondition())){
+						return "redirect:"+Global.getAdminPath()+"/project/projectEarlyReview/?repage";
+					}
+					if("completion".equals(projectcontentinfo.getCondition())){
+						return "redirect:"+Global.getAdminPath()+"/project/projectCompletionReview/?repage";
+					}
 					if (StringUtils.isNotBlank(projectcontentinfo.getEdit()) && projectcontentinfo.getEdit().equals("edit")){
 						return "redirect:"+Global.getAdminPath()+"/projectcontentinfo/projectcontentinfo/list?id="+projectcontentinfo.getId()+"&edit=edit";
 					}
@@ -866,6 +913,12 @@ public class ProjectcontentinfoController extends BaseController {
 				if("record".equals(projectcontentinfo.getCondition())){
 					return "redirect:"+Global.getAdminPath()+"/project/projectRecords/?repage";
 				}
+				if("according".equals(projectcontentinfo.getCondition())){
+					return "redirect:"+Global.getAdminPath()+"/project/projectEarlyReview/?repage";
+				}
+				if("completion".equals(projectcontentinfo.getCondition())){
+					return "redirect:"+Global.getAdminPath()+"/project/projectCompletionReview/?repage";
+				}
 				return "redirect:"+Global.getAdminPath()+"/projectcontentinfo/projectcontentinfo/?id="+projectcontentinfo.getId();
 			}
 		}catch (Exception e){
@@ -879,6 +932,12 @@ public class ProjectcontentinfoController extends BaseController {
 		if("record".equals(projectcontentinfo.getCondition())){
 			return "redirect:"+Global.getAdminPath()+"/project/projectRecords/?repage";
 		}
+		if("according".equals(projectcontentinfo.getCondition())){
+			return "redirect:"+Global.getAdminPath()+"/project/projectEarlyReview/?repage";
+		}
+		if("completion".equals(projectcontentinfo.getCondition())){
+			return "redirect:"+Global.getAdminPath()+"/project/projectCompletionReview/?repage";
+		}
 		return "redirect:"+Global.getAdminPath()+"/projectcontentinfo/projectcontentinfo/?project.id="+projectRecords.getId();
 	}
 

+ 27 - 0
src/main/java/com/jeeplus/modules/projectrecord/dao/ProjectImplementEarlyDao.java

@@ -3,8 +3,10 @@ package com.jeeplus.modules.projectrecord.dao;
 
 import com.jeeplus.common.persistence.CrudDao;
 import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.projectrecord.entity.ProjectAttachmentInfo;
 import com.jeeplus.modules.projectrecord.entity.ProjectImplementEarly;
 import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -19,4 +21,29 @@ public interface ProjectImplementEarlyDao extends CrudDao<ProjectImplementEarly>
     Integer getProjectRecodesCount(ProjectImplementEarly projectRecords);
 
     List<ProjectImplementEarly> getProjectRecodesList(ProjectImplementEarly projectRecords);
+
+    Integer saveProjectAndAttachmentContact(ProjectAttachmentInfo projectAttachmentInfo);
+
+    /**
+     * 添加项目内容id和项目报告id的关系
+     * @param contentId
+     * @param reportId
+     * @return
+     */
+    Integer saveProjectContrntAndReport(@Param("contentId") String contentId,@Param("reportId") String reportId);
+
+    /**
+     * 根据项目内容id和项目报告id
+     * @param contentId
+     * @param reportId
+     * @return
+     */
+    Integer getProjectContrntAndReport(@Param("contentId") String contentId,@Param("reportId") String reportId);
+    /**
+     * 添加依据性资料和工作内容关系
+     * @param contentId
+     * @param basedId 依据性资料id
+     * @return
+     */
+    Integer saveProjectContrntAndBasedId(@Param("contentId") String contentId,@Param("basedId") String basedId);
 }

+ 33 - 0
src/main/java/com/jeeplus/modules/projectrecord/dao/early/ProjectEarlyReviewDao.java

@@ -0,0 +1,33 @@
+package com.jeeplus.modules.projectrecord.dao.early;
+
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.projectrecord.entity.ProjectAttachmentInfo;
+import com.jeeplus.modules.projectrecord.entity.ProjectImplementEarly;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 项目实施前期dao
+ * @author 徐滕
+ * @version 2020-07-10
+ */
+@MyBatisDao
+public interface ProjectEarlyReviewDao extends CrudDao<ProjectImplementEarly> {
+
+    Integer getProjectRecodesCount(ProjectImplementEarly projectRecords);
+
+    List<ProjectImplementEarly> getProjectRecodesList(ProjectImplementEarly projectRecords);
+
+    Integer saveProjectAndAttachmentContact(ProjectAttachmentInfo projectAttachmentInfo);
+
+    /**
+     * 添加项目内容id和项目报告id的关系
+     * @param contentId
+     * @param reportId
+     * @return
+     */
+    Integer saveProjectContrntAndReport(@Param("contentId") String contentId, @Param("reportId") String reportId);
+}

+ 26 - 0
src/main/java/com/jeeplus/modules/projectrecord/entity/ProjectAttachmentInfo.java

@@ -0,0 +1,26 @@
+package com.jeeplus.modules.projectrecord.entity;
+
+/**
+ * 项目文件关联表
+ */
+public class ProjectAttachmentInfo {
+
+    private String projectId;   //项目id
+    private String AttachmentId;  //文件id
+
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
+    public String getAttachmentId() {
+        return AttachmentId;
+    }
+
+    public void setAttachmentId(String attachmentId) {
+        AttachmentId = attachmentId;
+    }
+}

+ 27 - 0
src/main/java/com/jeeplus/modules/projectrecord/entity/ProjectRecordTreeData.java

@@ -15,6 +15,9 @@ public class ProjectRecordTreeData extends DataEntity<ProjectRecordTreeData> {
     private String pid;             // 父id
     private String loginId;         //登陆者id
     private String createId;        //创建者id
+    private String status;          //状态
+    private String reportId;        //报告id
+    private String reportName;      //报告名称
 
     private String contentPId;      //保留工作内容id
 
@@ -143,4 +146,28 @@ public class ProjectRecordTreeData extends DataEntity<ProjectRecordTreeData> {
     public void setOperationSign(Integer operationSign) {
         this.operationSign = operationSign;
     }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getReportId() {
+        return reportId;
+    }
+
+    public void setReportId(String reportId) {
+        this.reportId = reportId;
+    }
+
+    public String getReportName() {
+        return reportName;
+    }
+
+    public void setReportName(String reportName) {
+        this.reportName = reportName;
+    }
 }

+ 38 - 0
src/main/java/com/jeeplus/modules/projectrecord/service/ProjectImplementEarlyService.java

@@ -8,6 +8,7 @@ import com.jeeplus.modules.projectType.dao.ProjectTypeDao;
 import com.jeeplus.modules.projectType.entity.ProjectType;
 import com.jeeplus.modules.projectrecord.dao.ProjectImplementEarlyDao;
 import com.jeeplus.modules.projectrecord.dao.WorkProjectUserDao;
+import com.jeeplus.modules.projectrecord.entity.ProjectAttachmentInfo;
 import com.jeeplus.modules.projectrecord.entity.ProjectImplementEarly;
 import com.jeeplus.modules.sys.entity.User;
 import com.jeeplus.modules.sys.utils.DictUtils;
@@ -95,4 +96,41 @@ public class ProjectImplementEarlyService extends CrudService<ProjectImplementEa
         String getProjectType = projectTypeDao.getProjectTypeByParentId(parentId,typeName);
         return getProjectType;
     }
+
+    /**
+     * 添加依据性资料和文件id关系
+     * @param projectAttachmentInfo
+     * @return
+     */
+    public Integer saveProjectAndAttachmentContact(ProjectAttachmentInfo projectAttachmentInfo){
+        return dao.saveProjectAndAttachmentContact(projectAttachmentInfo);
+    }
+
+    /**
+     * 添加依据性资料和工作内容关系
+     * @return
+     */
+    public Integer saveProjectContrntAndBasedId(String contentId,String basedId){
+        return dao.saveProjectContrntAndBasedId(contentId,basedId);
+    }
+
+    /**
+     * 添加项目内容id和项目报告id的关系
+     * @param contentId
+     * @param reportId
+     * @return
+     */
+    public Integer saveProjectContrntAndReport (String contentId,String reportId){
+        return dao.saveProjectContrntAndReport(contentId,reportId);
+    }
+
+    /**
+     * 添加项目内容id和项目报告id的关系
+     * @param contentId
+     * @param reportId
+     * @return
+     */
+    public Integer getProjectContrntAndReport (String contentId,String reportId){
+        return dao.getProjectContrntAndReport(contentId,reportId);
+    }
 }

+ 118 - 0
src/main/java/com/jeeplus/modules/projectrecord/service/early/ProjectEarlyReviewService.java

@@ -0,0 +1,118 @@
+package com.jeeplus.modules.projectrecord.service.early;
+
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.common.utils.Collections3;
+import com.jeeplus.common.utils.MenuStatusEnum;
+import com.jeeplus.modules.projectType.dao.ProjectTypeDao;
+import com.jeeplus.modules.projectrecord.dao.ProjectImplementEarlyDao;
+import com.jeeplus.modules.projectrecord.dao.WorkProjectUserDao;
+import com.jeeplus.modules.projectrecord.dao.early.ProjectEarlyReviewDao;
+import com.jeeplus.modules.projectrecord.entity.ProjectAttachmentInfo;
+import com.jeeplus.modules.projectrecord.entity.ProjectImplementEarly;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.utils.DictUtils;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientInfo;
+import com.jeeplus.modules.workcontractinfo.entity.WorkContractInfo;
+import com.jeeplus.modules.workcontractinfo.service.WorkContractInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 项目实施前期service
+ * @author 徐滕
+ * @version 2020-07-10
+ */
+@Service
+@Transactional(readOnly = true)
+public class ProjectEarlyReviewService extends CrudService<ProjectEarlyReviewDao, ProjectImplementEarly> {
+
+    @Autowired
+    private WorkContractInfoService contractInfoService;
+    @Autowired
+    private ProjectTypeDao projectTypeDao;
+    @Autowired
+    private WorkProjectUserDao workProjectUserDao;
+
+    public ProjectImplementEarly get(String id) {
+        return super.get(id);
+    }
+
+    public Page<ProjectImplementEarly> findProjectPage(Page<ProjectImplementEarly> page, ProjectImplementEarly projectRecords) {
+        //设置数据权限
+        if(!UserUtils.getUser().isAdmin()) {
+            String dataScopeSql = dataScopeFilterOR(projectRecords.getCurrentUser(), "o", "u", "s", MenuStatusEnum.WORK_RECORDS.getValue());
+            projectRecords.getSqlMap().put("dsf", dataScopeSql);
+        }
+        Integer count = dao.getProjectRecodesCount(projectRecords);
+        page.setCount(count);
+        page.setCountFlag(false);
+        projectRecords.setPage(page);
+        List<ProjectImplementEarly> recordsList = dao.getProjectRecodesList(projectRecords);
+        //查询负责人信息
+        for (ProjectImplementEarly records : recordsList) {
+            this.queryContractInfos(records);
+            List<User> users = workProjectUserDao.queryProjectUsers(records.getId(), "1");
+            records.setProjectLeaders(users);
+            records.setLeaderNameStr(Collections3.extractToString(users, "name", ","));
+            records.setLeaderIds(Collections3.extractToString(users, "id", ","));
+        }
+        page.setList(recordsList);
+        return page;
+    }
+
+    /**
+     * 查询合同信息
+     * @param projectRecords
+     */
+    public void queryContractInfos(ProjectImplementEarly projectRecords) {
+        if (null != projectRecords.getWorkContractInfo()){
+            WorkContractInfo workContractInfo = contractInfoService.get(projectRecords.getWorkContractInfo().getId());
+            if(workContractInfo!=null){
+                workContractInfo.setConstructionProjectTypeStr(DictUtils.getMainDictLabel(String.valueOf(workContractInfo.getContractType()), "contract_type", ""));
+                if(workContractInfo.getWorkClientInfoList()!=null&&!workContractInfo.getWorkClientInfoList().isEmpty()){
+                    StringBuilder workClinetInfoIds = new StringBuilder();
+                    for (WorkClientInfo workClientInfo : workContractInfo.getWorkClientInfoList()) {
+                        workClinetInfoIds.append(workClientInfo.getId()).append(",");
+                    }
+                    workClinetInfoIds.deleteCharAt(workClinetInfoIds.length()-1);
+                    workContractInfo.setWorkClinetInfoIds(workClinetInfoIds.toString());
+                }
+            }
+            projectRecords.setWorkContractInfo(workContractInfo);
+        }
+    }
+
+    /**
+     * 根据项目所属区域类型获取对应得二级级别信息
+     * @param parentId
+     * @return
+     */
+    public String getProjectType(String parentId,String typeName){
+        String getProjectType = projectTypeDao.getProjectTypeByParentId(parentId,typeName);
+        return getProjectType;
+    }
+
+    /**
+     * 添加项目内容id和文件id关系
+     * @param projectAttachmentInfo
+     * @return
+     */
+    public Integer saveProjectAndAttachmentContact(ProjectAttachmentInfo projectAttachmentInfo){
+        return dao.saveProjectAndAttachmentContact(projectAttachmentInfo);
+    }
+
+    /**
+     * 添加项目内容id和项目报告id的关系
+     * @param contentId
+     * @param reportId
+     * @return
+     */
+    public Integer saveProjectContrntAndReport (String contentId,String reportId){
+        return dao.saveProjectContrntAndReport(contentId,reportId);
+    }
+}

+ 282 - 0
src/main/java/com/jeeplus/modules/projectrecord/web/Early/ProjectEarlyReviewController.java

@@ -0,0 +1,282 @@
+package com.jeeplus.modules.projectrecord.web.Early;
+
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.web.BaseController;
+import com.jeeplus.modules.projectType.service.ProjectTypeService;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectBasedData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectContentData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.entity.Projectcontentinfo;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectContentDataService;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectReportChangeService;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectcontentinfoService;
+import com.jeeplus.modules.projectrecord.entity.ProjectImplementEarly;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecordTreeData;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import com.jeeplus.modules.projectrecord.service.ProjectRecordsService;
+import com.jeeplus.modules.projectrecord.service.early.ProjectEarlyReviewService;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientLinkman;
+import com.jeeplus.modules.workcontractinfo.entity.WorkContractInfo;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+/**
+ * 项目实施前期项目复核Controller
+ * @author 徐滕
+ * @version 2020-07-17
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/project/projectEarlyReview")
+public class ProjectEarlyReviewController extends BaseController {
+    @Autowired
+    private ProjectEarlyReviewService projectEarlyReviewService;
+    @Autowired
+    private ProjectRecordsService projectRecordsService;
+    @Autowired
+    private ProjectReportChangeService projectReportChangeService;
+    @Autowired
+    private ProjectcontentinfoService projectcontentinfoService;
+    @Autowired
+    private ProjectContentDataService projectContentDataService;
+    @Autowired
+    private ProjectTypeService projectTypeService;
+    /**
+     * 项目列表页面
+     */
+    @RequiresPermissions("project:projectEarlyReview:list")
+    @RequestMapping(value = {"list", ""})
+    public String list(ProjectImplementEarly projectRecords, HttpServletRequest request, HttpServletResponse response, Model model) {
+        if(UserUtils.isManager()){
+            model.addAttribute("flag","1");
+        }
+        Page<ProjectImplementEarly> page = projectEarlyReviewService.findProjectPage(new Page<ProjectImplementEarly>(request, response), projectRecords);
+        //无合同状态下,获取委托方的名称
+        List<ProjectImplementEarly> list = page.getList();
+        model.addAttribute("page", page);
+        return "modules/projectrecord/implementEarly/projectEarlyReviewList";
+    }
+
+    /**
+     * 项目列表页面
+     */
+    @RequestMapping(value = "getProjectList")
+    @ResponseBody
+    public Map<String,List> getProjectList(ProjectImplementEarly projectRecords, HttpServletRequest request, HttpServletResponse response, Model model) {
+        if(UserUtils.isManager()){
+            model.addAttribute("flag","1");
+        }
+        Page<ProjectImplementEarly> page = projectEarlyReviewService.findProjectPage(new Page<ProjectImplementEarly>(request, response), projectRecords);
+        //无合同状态下,获取委托方的名称
+        List<ProjectImplementEarly> list = page.getList();
+        List<ProjectRecordTreeData> projectRecordTreeDataList = new ArrayList<>();
+        Map<String,List> map = new HashMap<>();
+        for (int i = 0; i < list.size(); i++) {
+            ProjectRecordTreeData projectRecordTreeData = new ProjectRecordTreeData();
+            ProjectImplementEarly records1 = list.get(i);
+            if (records1.getWorkContractInfo() == null) {
+                if (records1.getWorkClientLinkmanList() != null && records1.getWorkClientLinkmanList().size() > 0) {
+                    WorkClientLinkman linkman = records1.getWorkClientLinkmanList().get(0);
+                    WorkContractInfo contractInfo = new WorkContractInfo();
+                    contractInfo.setClient(linkman.getClientId());
+                    records1.setWorkContractInfo(contractInfo);
+                }
+            }
+            //将界面需要展示数据放入类中
+            projectRecordTreeData.setId(records1.getId());
+            projectRecordTreeData.setProjectName(records1.getProjectName());
+            projectRecordTreeData.setProjectId(records1.getProjectId());
+            if(null!= records1.getWorkContractInfo()){
+                projectRecordTreeData.setContractName(records1.getWorkContractInfo().getName());
+                projectRecordTreeData.setClientName(records1.getWorkContractInfo().getClient().getName());
+            }else{
+                projectRecordTreeData.setContractName("");
+                projectRecordTreeData.setClientName("");
+            }
+            projectRecordTreeData.setProjectStatus(records1.getProjectStatus());
+            projectRecordTreeData.setProjectRegistrant(records1.getProjectRegistrant());
+            projectRecordTreeData.setCreateDate(records1.getCreateDate());
+            projectRecordTreeData.setCreateId(records1.getCreateBy().getId());
+            //父节点的pid设置为0
+            projectRecordTreeData.setPid("0");
+            //遍历项目负责人信息
+            List<User> masterUserList = records1.getProjectLeaders();
+            List<String> masterList = new ArrayList<>();
+            Set masterIdSet = new HashSet();
+            for (User masterUser:masterUserList) {
+                masterList.add(masterUser.getName());
+                masterIdSet.add(masterUser.getId());
+            }
+            masterIdSet.add(records1.getCreateBy().getId());
+            //Set转List
+            List<String> masterIdList = new ArrayList<>(masterIdSet);
+            //如果当前登录人为项目登记者或项目负责人则允许其添加子节点信息
+            for (String masterId : masterIdList) {
+                if(masterId.equals(UserUtils.getUser().getId())){
+                    projectRecordTreeData.setOperationSign(1);
+                    break;
+                }else{
+                    projectRecordTreeData.setOperationSign(0);
+                }
+            }
+
+            //项目负责人list数据转String
+            String projectLeader = masterList.toString().replaceAll("(?:\\[|null|\\]| +)", "");
+            projectRecordTreeData.setProjectLeader(projectLeader);
+            projectRecordTreeData.setLoginId(UserUtils.getUser().getId());
+            projectRecordTreeDataList.add(projectRecordTreeData);
+
+            //获取阶段Type父节点信息
+            String projectType = projectEarlyReviewService.getProjectType(records1.getProjectTypeId(), "实施前期");
+            //根据项目id查询相关的项目阶段内容
+            List<ProjectRecordTreeData> reportDataList = projectContentDataService.getProjectContentReportDataList(records1.getId(),projectType);
+            if(0 != reportDataList.size()){
+                Projectcontentinfo select = new Projectcontentinfo();
+                ProjectRecords project = new ProjectRecords();
+                project.setId(records1.getId());
+                select.setParentIds("0,");
+                select.setProject(project);
+                List<Projectcontentinfo> p = projectcontentinfoService.findListByProject(select);
+                for (ProjectRecordTreeData reportData : reportDataList) {
+                    //添加工作内容id
+                    if(p.size()>0){
+                        reportData.setContentPId(p.get(0).getId());
+                        reportData.setParentIds("0,");
+                        reportData.setDictType("");
+                    }
+                    //将项目所属类型名称放入树形列表的projectId中
+                    reportData.setProjectId(reportData.getProjectLeader());
+                    //添加项目负责人
+                    reportData.setProjectLeader(projectLeader);
+                    //添加登陆者id
+                    reportData.setLoginId(UserUtils.getUser().getId());
+                    reportData.setCreateId(records1.getCreateBy().getId());
+                }
+            }
+            projectRecordTreeDataList.addAll(reportDataList);
+
+        }
+        map.put("data",projectRecordTreeDataList);
+        return map;
+    }
+
+    @RequestMapping(value = {"reviewForm"})
+    public String form(Projectcontentinfo projectcontentinfo, HttpServletRequest request, HttpServletResponse response, Model model, RedirectAttributes attr) {
+        String dictType = projectcontentinfo.getDictType();
+        ProjectRecords records = projectRecordsService.getQueryProjectUsers(projectcontentinfo.getProject().getId());
+        projectcontentinfo.setProject(records);
+
+
+        ProjectReportData projectReportData = new ProjectReportData();
+        projectReportData.setType(dictType);
+        if (projectcontentinfo.getView().equals("reportChangeForm")){
+            projectReportData = projectReportChangeService.get(projectcontentinfo.getProjectReportData().getId());
+        }else {
+            projectReportData.setNumber("");
+        }
+
+        if (projectReportData.getMaster()==null || StringUtils.isBlank(projectReportData.getMaster().getId())){
+            projectReportData.setMaster(UserUtils.getUser());
+        }
+        if (StringUtils.isBlank(projectReportData.getStatus())){
+            projectReportData.setFileStatus("1");
+        }
+        List<ProjectContentData> projectContentDataList = projectContentDataService.getProjectContentData(projectcontentinfo.getInfoId());
+        //获取需要复核工作内容的对应typeId
+        String typeId = projectContentDataList.get(0).getType();
+        //获取该工作内容的依据性资料信息
+        List<ProjectBasedData> projectBasedDataList =  projectTypeService.getAccrdingDataList(typeId);
+        if(projectBasedDataList.size()>0){
+            for (ProjectBasedData projectBasedData: projectBasedDataList) {
+                projectBasedData.setFlag("according");
+                projectBasedData.setUploadDate(new Date());
+                projectBasedData.setUploadUser(UserUtils.getUser());
+            }
+        }
+        projectReportData.setProjectBasedDataList(projectBasedDataList);
+        projectReportData.setProjectContentDataList(projectContentDataList);
+        projectcontentinfo.setProjectReportData(projectReportData);
+        model.addAttribute("projectcontentinfo", projectcontentinfo);
+        model.addAttribute("achievementParentId", projectReportData.getType());
+        model.addAttribute("achievementId", projectReportData.getAchievementType());
+        model.addAttribute("reviewStandard", projectReportData.getReviewStandard());
+        if (projectcontentinfo.getView().equals("reportView")){
+            return "modules/projectcontentinfo/reportView";
+        }else if (projectcontentinfo.getView().equals("reportChange")) {
+            projectReportData.setReportId(projectReportData.getId());
+            projectReportData.setId("");
+            projectReportData.setMaster(UserUtils.getUser());
+            projectReportData.setReportDate(new Date());
+            projectReportData.setRemarks("");
+            return "modules/projectcontentinfo/reportChange";
+        }else if (projectcontentinfo.getView().equals("reportChangeView")) {
+            return "modules/projectcontentinfo/reportChangeView";
+        }else if (projectcontentinfo.getView().equals("reportChangeForm")) {
+            return "modules/projectcontentinfo/reportChange";
+        }else if (projectcontentinfo.getView().equals("reportInvalid")) {
+            if(StringUtils.isBlank(projectReportData.getInvalidStatus())){
+                projectReportData.setRemarks("");
+            }
+            return "modules/projectcontentinfo/reportInvalid";
+        }else{
+            if (projectReportData != null && projectReportData.getCreateBy() != null && StringUtils.isNotBlank(projectReportData.getCreateBy().getId()) && projectReportData.getCreateBy().getId().equals(UserUtils.getUser().getId())) {
+                return "modules/projectrecord/workContentFromAndView/reportForm";
+            } else if (projectReportData == null || StringUtils.isBlank(projectReportData.getId())) {
+                return "modules/projectrecord/workContentFromAndView/reportForm";
+            } else {
+                return "modules/projectcontentinfo/reportView";
+            }
+        }
+    }
+
+    /**
+     * 发起审核操作
+     * @param projectcontentinfo
+     * @param request
+     * @param response
+     * @param model
+     * @param redirectAttributes
+     * @return
+     */
+    @RequestMapping(value = {"saveReport"})
+    public String saveReport(Projectcontentinfo projectcontentinfo, HttpServletRequest request, HttpServletResponse response,
+                             Model model,RedirectAttributes redirectAttributes)  {
+        try{
+            String str = projectcontentinfoService.saveData(projectcontentinfo,2);
+            addMessage(redirectAttributes, "提交成果文件"+(str.equals("true")?"成功":"失败"));
+            ProjectReportData projectReportData = projectcontentinfo.getProjectReportData();
+            if (projectReportData!=null){
+                if (StringUtils.isNotBlank(projectcontentinfo.getEdit()) && projectcontentinfo.getEdit().equals("edit")){
+                    return "redirect:"+ Global.getAdminPath()+"/projectcontentinfo/projectcontentinfo/list?id="+projectcontentinfo.getId()+"&edit=edit";
+                }
+                if("record".equals(projectcontentinfo.getCondition())){
+                    return "redirect:"+Global.getAdminPath()+"/project/projectEarlyReview/?repage";
+                }
+                return "redirect:"+Global.getAdminPath()+"/projectcontentinfo/projectcontentinfo/?id="+projectcontentinfo.getId();
+            }
+        }catch (Exception e){
+            logger.error("ProjectcontentinfoController save Exception e"+e);
+        }
+        if(UserUtils.isManager()){
+            model.addAttribute("flag","1");
+        }
+        addMessage(redirectAttributes, "发起报告审批失败");
+        ProjectRecords projectRecords = projectcontentinfo.getProject()==null?new ProjectRecords():projectcontentinfo.getProject();
+        if("record".equals(projectcontentinfo.getCondition())){
+            return "redirect:"+Global.getAdminPath()+"/project/projectEarlyReview/?repage";
+        }
+        return "redirect:"+Global.getAdminPath()+"/projectcontentinfo/projectcontentinfo/?project.id="+projectRecords.getId();
+    }
+}

+ 282 - 0
src/main/java/com/jeeplus/modules/projectrecord/web/completion/ProjectCompletionReviewController.java

@@ -0,0 +1,282 @@
+package com.jeeplus.modules.projectrecord.web.completion;
+
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.web.BaseController;
+import com.jeeplus.modules.projectType.service.ProjectTypeService;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectBasedData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectContentData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.entity.Projectcontentinfo;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectContentDataService;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectReportChangeService;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectcontentinfoService;
+import com.jeeplus.modules.projectrecord.entity.ProjectImplementEarly;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecordTreeData;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import com.jeeplus.modules.projectrecord.service.ProjectRecordsService;
+import com.jeeplus.modules.projectrecord.service.early.ProjectEarlyReviewService;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientLinkman;
+import com.jeeplus.modules.workcontractinfo.entity.WorkContractInfo;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+/**
+ * 项目实施前期项目复核Controller
+ * @author 徐滕
+ * @version 2020-07-17
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/project/projectCompletionReview")
+public class ProjectCompletionReviewController extends BaseController {
+    @Autowired
+    private ProjectEarlyReviewService projectEarlyReviewService;
+    @Autowired
+    private ProjectRecordsService projectRecordsService;
+    @Autowired
+    private ProjectReportChangeService projectReportChangeService;
+    @Autowired
+    private ProjectcontentinfoService projectcontentinfoService;
+    @Autowired
+    private ProjectContentDataService projectContentDataService;
+    @Autowired
+    private ProjectTypeService projectTypeService;
+    /**
+     * 项目列表页面
+     */
+    @RequiresPermissions("project:projectCompletionReview:list")
+    @RequestMapping(value = {"list", ""})
+    public String list(ProjectImplementEarly projectRecords, HttpServletRequest request, HttpServletResponse response, Model model) {
+        if(UserUtils.isManager()){
+            model.addAttribute("flag","1");
+        }
+        Page<ProjectImplementEarly> page = projectEarlyReviewService.findProjectPage(new Page<ProjectImplementEarly>(request, response), projectRecords);
+        //无合同状态下,获取委托方的名称
+        List<ProjectImplementEarly> list = page.getList();
+        model.addAttribute("page", page);
+        return "modules/projectrecord/implementCompletion/projectCompletionReviewList";
+    }
+
+    /**
+     * 项目列表页面
+     */
+    @RequestMapping(value = "getProjectList")
+    @ResponseBody
+    public Map<String,List> getProjectList(ProjectImplementEarly projectRecords, HttpServletRequest request, HttpServletResponse response, Model model) {
+        if(UserUtils.isManager()){
+            model.addAttribute("flag","1");
+        }
+        Page<ProjectImplementEarly> page = projectEarlyReviewService.findProjectPage(new Page<ProjectImplementEarly>(request, response), projectRecords);
+        //无合同状态下,获取委托方的名称
+        List<ProjectImplementEarly> list = page.getList();
+        List<ProjectRecordTreeData> projectRecordTreeDataList = new ArrayList<>();
+        Map<String,List> map = new HashMap<>();
+        for (int i = 0; i < list.size(); i++) {
+            ProjectRecordTreeData projectRecordTreeData = new ProjectRecordTreeData();
+            ProjectImplementEarly records1 = list.get(i);
+            if (records1.getWorkContractInfo() == null) {
+                if (records1.getWorkClientLinkmanList() != null && records1.getWorkClientLinkmanList().size() > 0) {
+                    WorkClientLinkman linkman = records1.getWorkClientLinkmanList().get(0);
+                    WorkContractInfo contractInfo = new WorkContractInfo();
+                    contractInfo.setClient(linkman.getClientId());
+                    records1.setWorkContractInfo(contractInfo);
+                }
+            }
+            //将界面需要展示数据放入类中
+            projectRecordTreeData.setId(records1.getId());
+            projectRecordTreeData.setProjectName(records1.getProjectName());
+            projectRecordTreeData.setProjectId(records1.getProjectId());
+            if(null!= records1.getWorkContractInfo()){
+                projectRecordTreeData.setContractName(records1.getWorkContractInfo().getName());
+                projectRecordTreeData.setClientName(records1.getWorkContractInfo().getClient().getName());
+            }else{
+                projectRecordTreeData.setContractName("");
+                projectRecordTreeData.setClientName("");
+            }
+            projectRecordTreeData.setProjectStatus(records1.getProjectStatus());
+            projectRecordTreeData.setProjectRegistrant(records1.getProjectRegistrant());
+            projectRecordTreeData.setCreateDate(records1.getCreateDate());
+            projectRecordTreeData.setCreateId(records1.getCreateBy().getId());
+            //父节点的pid设置为0
+            projectRecordTreeData.setPid("0");
+            //遍历项目负责人信息
+            List<User> masterUserList = records1.getProjectLeaders();
+            List<String> masterList = new ArrayList<>();
+            Set masterIdSet = new HashSet();
+            for (User masterUser:masterUserList) {
+                masterList.add(masterUser.getName());
+                masterIdSet.add(masterUser.getId());
+            }
+            masterIdSet.add(records1.getCreateBy().getId());
+            //Set转List
+            List<String> masterIdList = new ArrayList<>(masterIdSet);
+            //如果当前登录人为项目登记者或项目负责人则允许其添加子节点信息
+            for (String masterId : masterIdList) {
+                if(masterId.equals(UserUtils.getUser().getId())){
+                    projectRecordTreeData.setOperationSign(1);
+                    break;
+                }else{
+                    projectRecordTreeData.setOperationSign(0);
+                }
+            }
+
+            //项目负责人list数据转String
+            String projectLeader = masterList.toString().replaceAll("(?:\\[|null|\\]| +)", "");
+            projectRecordTreeData.setProjectLeader(projectLeader);
+            projectRecordTreeData.setLoginId(UserUtils.getUser().getId());
+            projectRecordTreeDataList.add(projectRecordTreeData);
+
+            //获取阶段Type父节点信息
+            String projectType = projectEarlyReviewService.getProjectType(records1.getProjectTypeId(), "竣工阶段");
+            //根据项目id查询相关的项目阶段内容
+            List<ProjectRecordTreeData> reportDataList = projectContentDataService.getProjectContentReportDataList(records1.getId(),projectType);
+            if(0 != reportDataList.size()){
+                Projectcontentinfo select = new Projectcontentinfo();
+                ProjectRecords project = new ProjectRecords();
+                project.setId(records1.getId());
+                select.setParentIds("0,");
+                select.setProject(project);
+                List<Projectcontentinfo> p = projectcontentinfoService.findListByProject(select);
+                for (ProjectRecordTreeData reportData : reportDataList) {
+                    //添加工作内容id
+                    if(p.size()>0){
+                        reportData.setContentPId(p.get(0).getId());
+                        reportData.setParentIds("0,");
+                        reportData.setDictType("");
+                    }
+                    //将项目所属类型名称放入树形列表的projectId中
+                    reportData.setProjectId(reportData.getProjectLeader());
+                    //添加项目负责人
+                    reportData.setProjectLeader(projectLeader);
+                    //添加登陆者id
+                    reportData.setLoginId(UserUtils.getUser().getId());
+                    reportData.setCreateId(records1.getCreateBy().getId());
+                }
+            }
+            projectRecordTreeDataList.addAll(reportDataList);
+
+        }
+        map.put("data",projectRecordTreeDataList);
+        return map;
+    }
+
+    @RequestMapping(value = {"reviewForm"})
+    public String form(Projectcontentinfo projectcontentinfo, HttpServletRequest request, HttpServletResponse response, Model model, RedirectAttributes attr) {
+        String dictType = projectcontentinfo.getDictType();
+        ProjectRecords records = projectRecordsService.getQueryProjectUsers(projectcontentinfo.getProject().getId());
+        projectcontentinfo.setProject(records);
+
+
+        ProjectReportData projectReportData = new ProjectReportData();
+        projectReportData.setType(dictType);
+        if (projectcontentinfo.getView().equals("reportChangeForm")){
+            projectReportData = projectReportChangeService.get(projectcontentinfo.getProjectReportData().getId());
+        }else {
+            projectReportData.setNumber("");
+        }
+
+        if (projectReportData.getMaster()==null || StringUtils.isBlank(projectReportData.getMaster().getId())){
+            projectReportData.setMaster(UserUtils.getUser());
+        }
+        if (StringUtils.isBlank(projectReportData.getStatus())){
+            projectReportData.setFileStatus("1");
+        }
+        List<ProjectContentData> projectContentDataList = projectContentDataService.getProjectContentData(projectcontentinfo.getInfoId());
+        //获取需要复核工作内容的对应typeId
+        String typeId = projectContentDataList.get(0).getType();
+        //获取该工作内容的依据性资料信息
+        List<ProjectBasedData> projectBasedDataList =  projectTypeService.getAccrdingDataList(typeId);
+        if(projectBasedDataList.size()>0){
+            for (ProjectBasedData projectBasedData: projectBasedDataList) {
+                projectBasedData.setFlag("according");
+                projectBasedData.setUploadDate(new Date());
+                projectBasedData.setUploadUser(UserUtils.getUser());
+            }
+        }
+        projectReportData.setProjectBasedDataList(projectBasedDataList);
+        projectReportData.setProjectContentDataList(projectContentDataList);
+        projectcontentinfo.setProjectReportData(projectReportData);
+        model.addAttribute("projectcontentinfo", projectcontentinfo);
+        model.addAttribute("achievementParentId", projectReportData.getType());
+        model.addAttribute("achievementId", projectReportData.getAchievementType());
+        model.addAttribute("reviewStandard", projectReportData.getReviewStandard());
+        if (projectcontentinfo.getView().equals("reportView")){
+            return "modules/projectcontentinfo/reportView";
+        }else if (projectcontentinfo.getView().equals("reportChange")) {
+            projectReportData.setReportId(projectReportData.getId());
+            projectReportData.setId("");
+            projectReportData.setMaster(UserUtils.getUser());
+            projectReportData.setReportDate(new Date());
+            projectReportData.setRemarks("");
+            return "modules/projectcontentinfo/reportChange";
+        }else if (projectcontentinfo.getView().equals("reportChangeView")) {
+            return "modules/projectcontentinfo/reportChangeView";
+        }else if (projectcontentinfo.getView().equals("reportChangeForm")) {
+            return "modules/projectcontentinfo/reportChange";
+        }else if (projectcontentinfo.getView().equals("reportInvalid")) {
+            if(StringUtils.isBlank(projectReportData.getInvalidStatus())){
+                projectReportData.setRemarks("");
+            }
+            return "modules/projectcontentinfo/reportInvalid";
+        }else{
+            if (projectReportData != null && projectReportData.getCreateBy() != null && StringUtils.isNotBlank(projectReportData.getCreateBy().getId()) && projectReportData.getCreateBy().getId().equals(UserUtils.getUser().getId())) {
+                return "modules/projectrecord/workContentFromAndView/reportForm";
+            } else if (projectReportData == null || StringUtils.isBlank(projectReportData.getId())) {
+                return "modules/projectrecord/workContentFromAndView/reportForm";
+            } else {
+                return "modules/projectcontentinfo/reportView";
+            }
+        }
+    }
+
+    /**
+     * 发起审核操作
+     * @param projectcontentinfo
+     * @param request
+     * @param response
+     * @param model
+     * @param redirectAttributes
+     * @return
+     */
+    @RequestMapping(value = {"saveReport"})
+    public String saveReport(Projectcontentinfo projectcontentinfo, HttpServletRequest request, HttpServletResponse response,
+                             Model model,RedirectAttributes redirectAttributes)  {
+        try{
+            String str = projectcontentinfoService.saveData(projectcontentinfo,2);
+            addMessage(redirectAttributes, "提交成果文件"+(str.equals("true")?"成功":"失败"));
+            ProjectReportData projectReportData = projectcontentinfo.getProjectReportData();
+            if (projectReportData!=null){
+                if (StringUtils.isNotBlank(projectcontentinfo.getEdit()) && projectcontentinfo.getEdit().equals("edit")){
+                    return "redirect:"+ Global.getAdminPath()+"/projectcontentinfo/projectcontentinfo/list?id="+projectcontentinfo.getId()+"&edit=edit";
+                }
+                if("record".equals(projectcontentinfo.getCondition())){
+                    return "redirect:"+Global.getAdminPath()+"/project/projectCompletionReview/?repage";
+                }
+                return "redirect:"+Global.getAdminPath()+"/projectcontentinfo/projectcontentinfo/?id="+projectcontentinfo.getId();
+            }
+        }catch (Exception e){
+            logger.error("ProjectcontentinfoController save Exception e"+e);
+        }
+        if(UserUtils.isManager()){
+            model.addAttribute("flag","1");
+        }
+        addMessage(redirectAttributes, "发起报告审批失败");
+        ProjectRecords projectRecords = projectcontentinfo.getProject()==null?new ProjectRecords():projectcontentinfo.getProject();
+        if("record".equals(projectcontentinfo.getCondition())){
+            return "redirect:"+Global.getAdminPath()+"/project/projectCompletionReview/?repage";
+        }
+        return "redirect:"+Global.getAdminPath()+"/projectcontentinfo/projectcontentinfo/?project.id="+projectRecords.getId();
+    }
+}

+ 3 - 1
src/main/java/com/jeeplus/modules/sys/dao/DictDao.java

@@ -8,6 +8,7 @@ import java.util.List;
 import com.jeeplus.common.persistence.CrudDao;
 import com.jeeplus.common.persistence.annotation.MyBatisDao;
 import com.jeeplus.modules.sys.entity.Dict;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 字典DAO接口
@@ -18,5 +19,6 @@ import com.jeeplus.modules.sys.entity.Dict;
 public interface DictDao extends CrudDao<Dict> {
 
 	public List<String> findTypeList(Dict dict);
-	
+
+	String dictLabel(@Param("type") String type, @Param("value") String value);
 }

+ 10 - 0
src/main/java/com/jeeplus/modules/sys/service/DictService.java

@@ -43,4 +43,14 @@ public class DictService extends CrudService<DictDao, Dict> {
 		CacheUtils.remove(DictUtils.CACHE_DICT_MAP);
 	}
 
+	/**
+	 * 根据type和value查询名称
+	 * @param type
+	 * @param value
+	 * @return
+	 */
+	public String dictLabel(String type,String value){
+		return dao.dictLabel(type,value);
+	}
+
 }

+ 29 - 4
src/main/resources/mappings/modules/projectType/ProjectTypeDao.xml

@@ -13,7 +13,9 @@
 		a.create_date,
 		a.update_by AS "updateBy.id",
 		a.update_date,
-		a.del_flag
+		a.del_flag,
+		a.tier,
+		a.choose_condition as "chooseCondition"
 	</sql>
 
 
@@ -51,7 +53,7 @@
 	<select id="getProjectTypeList" resultType="com.jeeplus.modules.projectcontentinfo.entity.ProjectReportTreeData" >
 		select a.id as "id",
 		a.create_date as "createDate",a.create_by as "createId",
-		 a.type_name as "name",a.parent_id as "pid"
+		 a.type_name as "name",a.parent_id as "pid",a.tier,a.choose_condition as chooseCondition
 		from project_type a
 		<where>
 			a.del_flag = 0
@@ -104,7 +106,9 @@
 			update_by,
 			update_date,
 			remarks,
-			del_flag
+			del_flag,
+			tier,
+			choose_condition
 		) VALUES (
 			#{id},
 			#{parentId},
@@ -116,7 +120,9 @@
 			#{updateBy.id},
 			#{updateDate},
 			#{remarks},
-			#{delFlag}
+			#{delFlag},
+			#{tier},
+			#{chooseCondition}
 		)
 	</insert>
 
@@ -127,6 +133,7 @@
 			type_name = #{typeName},
 			update_by = #{updateBy.id},
 			update_date = #{updateDate},
+			choose_condition = #{chooseCondition},
 			remarks = #{remarks}
 		WHERE id = #{id}
 	</update>
@@ -166,4 +173,22 @@
 			and type_name LIKE concat('%',#{typeName},'%')
 	</select>
 
+	<select id="getAccrdingDataList" resultType="ProjectBasedData">
+		select a.id as id,#{typeId} as number, a.type_name as name,a.choose_condition as chooseCondition,pt.type_name as `type`  from project_type a
+		left join project_type pt on a.parent_id = pt.type_id
+		where a.parent_id =#{typeId}
+	</select>
+
+	<select id="getBasedData" resultType="ProjectBasedData">
+		select ifnull(wa.url,'') as fileUrl,
+		ifnull(wa.attachment_name,'') as fileName,ifnull(wa.update_date,'') as uploadDate,
+		ifnull(wa.update_by,'') as fileAttachmentId
+		from project_content_based_relation pcbr
+		left join project_attachment_info pai on pai.project_id = pcbr.based_id
+		left join work_attachment wa on wa.id = pai.attachment_id
+		left join project_content_data pcd on pcbr.content_id = pcd.id
+		where pcd.id = #{contentId} and pcbr.based_id = #{basedId} and wa.div_id_type = #{contentId}
+
+	</select>
+
 </mapper>

+ 20 - 0
src/main/resources/mappings/modules/projectcontentinfo/ProjectContentDataDao.xml

@@ -300,4 +300,24 @@
 		left join project_type ppt on pt.parent_id = ppt.id
 		where a.project_id = #{projectId} and pt.parent_id =#{projectTypeParentId} and a.del_flag = 0 order by a.update_date desc
 	</select>
+
+	<select id="getProjectContentReportDataList" resultType="com.jeeplus.modules.projectrecord.entity.ProjectRecordTreeData">
+		select distinct(a.id) as "id", a.create_by as "createBy.id", a.create_date as "createDate", a.project_id as "pid",
+		a.name as "projectName", "" as projectId, "0" as projectStatus,su.name as "projectRegistrant" ,
+		pt.type_name as projectLeader, ppt.type_name as clientName,prd.status as status,prd.id as reportId,ifnull(prd.name,'') as reportName
+		from project_content_data a
+		left join sys_user su on su.id = a.create_by
+		left join project_type pt on a.type = pt.type_id
+		left join project_type ppt on pt.parent_id = ppt.id
+		left join project_content_report pcr on pcr.content_id = a.id
+		left join project_report_data prd on prd.id = pcr.report_id
+		where a.project_id = #{projectId} and pt.parent_id =#{projectTypeParentId} and a.del_flag = 0 order by prd.update_date desc, a.update_date desc
+	</select>
+
+	<select id="getProjectContentData" resultType="ProjectContentData">
+		select a.id,a.number,a.name,a.create_date as createDate,a.type ,su.name as masterName
+		from project_content_data a
+		left join sys_user su on su.id = a.master
+		where a.id = #{id} and a.del_flag=0
+	</select>
 </mapper>

+ 22 - 0
src/main/resources/mappings/modules/projectrecord/ProjectImplementEarlyDao.xml

@@ -211,4 +211,26 @@
             </if>
         </where>
     </select>
+
+	<insert id="saveProjectAndAttachmentContact">
+		insert into project_attachment_info (project_id, attachment_id)
+		values
+  		(#{projectId}, #{attachmentId})
+	</insert>
+
+	<insert id="saveProjectContrntAndReport">
+		insert into project_content_report (content_id, report_id)
+		values
+  		(#{contentId}, #{reportId})
+	</insert>
+
+	<select id="getProjectContrntAndReport" resultType="java.lang.Integer">
+		select count(1) as count from project_content_report where content_id = #{contentId} and report_id = #{reportId}
+	</select>
+
+	<insert id="saveProjectContrntAndBasedId">
+		insert into project_content_based_relation (content_id, based_id)
+		values
+  		(#{contentId}, #{basedId})
+	</insert>
 </mapper>

+ 226 - 0
src/main/resources/mappings/modules/projectrecord/early/ProjectEarlyReviewDao.xml

@@ -0,0 +1,226 @@
+<?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.projectrecord.dao.early.ProjectEarlyReviewDao">
+
+	<sql id="projectRecordsColumns">
+		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.del_flag AS "delFlag",
+		a.contract_id AS "workContractInfo.id",
+		a.project_id AS "projectId",
+		a.project_name AS "projectName",
+		a.scale_type AS "scaleType",
+		a.scale_unit AS "scaleUnit",
+		a.scale_quantity AS "scaleQuantity",
+		a.area_id AS "area.id",
+		a.project_site AS "projectSite",
+		a.project_desc AS "projectDesc",
+		a.remarks AS "remarks",
+		a.status AS "projectStatus",
+		a.process_instance_id AS "processInstanceId",
+		a.company_id AS "company.id",
+		a.office_id AS "office.id",
+		a.alter_process_id AS "alterProcessId",
+		area.name AS "area.name",
+		a.province,
+		a.city,
+		a.area_name AS "county",
+		a.project_structure AS "projectStructure",
+		a.on_ground_num AS "onGroundNum",
+		a.under_ground_num AS "underGroundNum",
+		a.building_scale AS "buildingScale",
+		a.measuring_unit AS "measuringUnit",
+		a.project_use AS "projectUse",
+		a.install_fees AS "installFees",
+		a.building_fees AS "buildingFees",
+		a.building_percent AS "buildingPercent",
+		a.install_percent AS "installPercent",
+		a.unit_fees AS "unitFees",
+		a.building_unit_fees AS "buildingUnitFees",
+		a.install_unit_fees AS "installUnitFees",
+		a.total_fees AS "totalFees",
+		a.type_id As "projectTypeId"
+	</sql>
+	
+	<sql id="projectRecordsJoins">
+		LEFT JOIN sys_area area ON area.id = a.area_id
+	</sql>
+	
+	<select id="getProjectRecodesList" resultType="ProjectImplementEarly" >
+		SELECT
+			<include refid="projectRecordsColumns"/>
+		,
+		wci.name AS "workContractInfo.name",
+		wct.id AS "workContractInfo.client.id",
+		wct.name AS "workContractInfo.client.name",
+		o.top_company AS "office.name",
+		dsu.name as "projectRegistrant"
+		FROM project_records a
+		<include refid="projectRecordsJoins"/>
+
+
+		LEFT JOIN work_project_user w on a.id = w.project_id
+		LEFT JOIN sys_user su on w.user_id = su.id
+		LEFT JOIN sys_user dsu on a.create_by = dsu.id
+        LEFT JOIN work_project_user w1 on a.id = w1.project_id
+		LEFT JOIN work_contract_info wci on a.contract_id = wci.id
+		LEFT JOIN work_client_info wct on wci.client_id = wct.id
+        LEFT JOIN sys_office o ON o.id = a.office_id
+		<where>
+			a.status = 5
+            AND a.del_flag = 0
+			<if test="projectId != null and projectId != ''">
+				AND a.project_id like concat('%',#{projectId},'%')
+			</if>
+			<if test="projectName != null and projectName != ''">
+				AND a.project_name like concat(concat('%',#{projectName}),'%')
+			</if>
+			<if test="scaleType != null and scaleType != ''">
+				AND a.scale_type = #{scaleType}
+			</if>
+			<if test="scaleUnit != null and scaleUnit != ''">
+				AND a.scale_unit = #{scaleUnit}
+			</if>
+			<if test="scaleQuantity != null and scaleQuantity != ''">
+				AND a.scale_quantity = #{scaleQuantity}
+			</if>
+			<if test="projectSite != null and projectSite != ''">
+				AND a.project_site LIKE concat('%',#{projectSite},'%')
+			</if>
+			<if test="remarks != null and remarks != ''">
+				AND a.remarks LIKE concat('%',#{remarks},'%')
+			</if>
+			<if test="projectDesc != null and projectDesc != ''">
+				AND a.project_desc LIKE concat('%',#{projectDesc},'%')
+			</if>
+			<if test="area != null and area.id != null and area.id != ''">
+				AND a.area_id = #{area.id}
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.name !=null and workContractInfo.name !=''">
+				AND wci.name like concat(concat('%',#{workContractInfo.name}),'%')
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.contractNum !=null and workContractInfo.contractNum !=''">
+				AND wci.contract_num like concat(concat('%',#{workContractInfo.contractNum}),'%')
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.contractPrice !=null and workContractInfo.contractPrice !=''">
+				AND wci.contract_price = #{workContractInfo.contractPrice}
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.contractType !=null and workContractInfo.contractType !=''">
+				AND wci.contract_type = #{workContractInfo.contractType}
+			</if>
+			<if test="workContractInfo!=null and workContractInfo.client !=null and workContractInfo.client.name !=null and workContractInfo.client.name !=''">
+				AND wct.name like concat(concat('%',#{workContractInfo.client.name}),'%')
+			</if>
+			<if test="leaderNameStr !=null and leaderNameStr !=''">
+				AND su.name like concat(concat('%',#{leaderNameStr}),'%') AND w.is_master = '1' AND w.del_flag='0'
+			</if>
+			<if test="beginDate !=null">
+				AND a.create_date >= #{beginDate}
+			</if>
+			<if test="endDate !=null">
+				AND a.create_date &lt; #{endDate}
+			</if>
+            <if test="sqlMap.dsf !=null and sqlMap.dsf!=''">
+               AND ((w1.user_id = #{currentUser.id} AND w1.del_flag='0' AND a.company_id = #{currentUser.company.id} )${sqlMap.dsf} )
+            </if>
+		</where>
+            GROUP BY a.id
+		<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>
+
+    <select id="getProjectRecodesCount" resultType="int" >
+        SELECT count(DISTINCT a.id)
+        FROM project_records a
+        <if test="leaderNameStr !=null and leaderNameStr !=''">
+            LEFT JOIN work_project_user w on a.id = w.project_id
+            LEFT JOIN sys_user su on w.user_id = su.id
+        </if>
+        LEFT JOIN work_project_user w1 on a.id = w1.project_id
+        <if test="workContractInfo !=null">
+            LEFT JOIN work_contract_info wci on a.contract_id = wci.id
+        </if>
+        <if test="workContractInfo!=null and workContractInfo.client !=null and workContractInfo.client.name !=null and workContractInfo.client.name !=''">
+            LEFT JOIN work_client_info wct on wci.client_id = wct.id
+        </if>
+        <where>
+			a.status = 5
+            AND a.del_flag = 0
+			<if test="projectId != null and projectId != ''">
+				AND a.project_id like concat('%',#{projectId},'%')
+			</if>
+			<if test="projectName != null and projectName != ''">
+				AND a.project_name like concat(concat('%',#{projectName}),'%')
+			</if>
+			<if test="scaleType != null and scaleType != ''">
+				AND a.scale_type = #{scaleType}
+			</if>
+			<if test="scaleUnit != null and scaleUnit != ''">
+				AND a.scale_unit = #{scaleUnit}
+			</if>
+			<if test="scaleQuantity != null and scaleQuantity != ''">
+				AND a.scale_quantity = #{scaleQuantity}
+			</if>
+			<if test="projectSite != null and projectSite != ''">
+				AND a.project_site LIKE concat('%',#{projectSite},'%')
+			</if>
+			<if test="remarks != null and remarks != ''">
+				AND a.remarks LIKE concat('%',#{remarks},'%')
+			</if>
+			<if test="projectDesc != null and projectDesc != ''">
+				AND a.project_desc LIKE concat('%',#{projectDesc},'%')
+			</if>
+			<if test="area != null and area.id != null and area.id != ''">
+				AND a.area_id = #{area.id}
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.name !=null and workContractInfo.name !=''">
+				AND wci.name like concat(concat('%',#{workContractInfo.name}),'%')
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.contractNum !=null and workContractInfo.contractNum !=''">
+				AND wci.contract_num like concat(concat('%',#{workContractInfo.contractNum}),'%')
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.contractPrice !=null and workContractInfo.contractPrice !=''">
+				AND wci.contract_price = #{workContractInfo.contractPrice}
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.contractType !=null and workContractInfo.contractType !=''">
+				AND wci.contract_type = #{workContractInfo.contractType}
+			</if>
+			<if test="workContractInfo!=null and workContractInfo.client !=null and workContractInfo.client.name !=null and workContractInfo.client.name !=''">
+				AND wct.name like concat(concat('%',#{workContractInfo.client.name}),'%')
+			</if>
+			<if test="leaderNameStr !=null and leaderNameStr !=''">
+				AND su.name like concat(concat('%',#{leaderNameStr}),'%') AND w.is_master = '1' AND w.del_flag='0'
+			</if>
+			<if test="beginDate !=null">
+				AND a.create_date >= #{beginDate}
+			</if>
+			<if test="endDate !=null">
+				AND a.create_date &lt; #{endDate}
+			</if>
+            <if test="sqlMap.dsf !=null and sqlMap.dsf!=''">
+                AND ((w1.user_id = #{currentUser.id} AND w1.del_flag='0' AND a.company_id = #{currentUser.company.id})${sqlMap.dsf} )
+            </if>
+        </where>
+    </select>
+
+	<insert id="saveProjectAndAttachmentContact">
+		insert into project_attachment_info (project_id, attachment_id)
+		values
+  		(#{projectId}, #{attachmentId})
+	</insert>
+
+	<insert id="saveProjectContrntAndReport">
+		insert into project_content_report (content_id, report_id)
+		values
+  		(#{contentId}, #{reportId})
+	</insert>
+</mapper>

+ 1 - 1
src/main/resources/mappings/modules/projectreportnum/ProjectReportNumDao.xml

@@ -136,7 +136,7 @@
 		a.type_name AS "typeName",
 		a.parent_id AS "parentId",
 		a.parent_ids AS "parentIds"
-		from work_content_type a where a.type_id = #{reportNum}
+		from /*work_content_type*/ project_type a where a.type_id = #{reportNum}
 	</select>
 
 

+ 5 - 0
src/main/resources/mappings/modules/sys/DictDao.xml

@@ -102,5 +102,10 @@
 			del_flag = #{DEL_FLAG_DELETE}
 		WHERE id = #{id}
 	</update>
+
+
+	<select id="dictLabel" resultType="java.lang.String">
+		select label from sys_dict where type = #{type} and value=#{value}
+	</select>
 	
 </mapper>

+ 70 - 1
src/main/webapp/static/bos/bosupload.js

@@ -19,7 +19,76 @@ function multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,upload
     //     //     }
     //     // }
     //     // let client = new BosClient(config);
-        multitest(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size, cpt);
+    if(cpt == 1)
+        multitestFlag(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size, cpt,idx,prefix);
+    else
+        multitest(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size, cpt,idx,prefix);
+};
+
+function multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size, cpt,idx,prefix) {
+    console.log("-----------------------start");
+    if(cpt == 1)
+        multitestFlag(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size, cpt,idx,prefix);
+    else
+        multitest(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size, cpt,idx,prefix);
+};
+
+function multitestFlag (storeAs, file,attachmentId,attachmentFlag,uploadPath,divId, size,cpt,idx,prefix) {
+    var formdata = new FormData();
+    formdata.append("storeAs",storeAs);
+    formdata.append("file",file);
+    var names =  storeAs.split("/");
+    var name = names[names.length-1];
+    $.ajax({
+        type:'post',
+        url:realPath+"/bos/upload",
+        data:formdata,
+        contentType: false,
+        processData: false,
+        success:function (data1) {
+            if(data1.code==='1'){
+                returnUrl = realPath+"/sys/workattachment/saveAttachment";
+                $.ajax({
+                    type:'post',
+                    url:returnUrl,
+                    data:{
+                        "attachmentName":file['name'],
+                        "attachmentId":attachmentId,
+                        "attachmentFlag":attachmentFlag,
+                        "url":data1.url,
+                        "divIdType":divId
+                    },
+                    success:function(data){
+                        console.log('url : ' + data.url);
+                        if(data.status=="Success"){
+                            parent.layer.msg("上传成功!",{icon:1});
+                            var str = '' ;
+                            if (isContains("jpg,png,gif,bmp,jpeg",data.type)){
+                                str = '<img src="'+data1.url+'" width="50" height="50" title="'+data.attachmentName+'" onclick="openDialogView(\'预览\',\''+realPath+ '/a/sys/picturepreview/picturePreview?url=' +data1.url+ '\',\'90%\',\'90%\')" alt="'+data.attachmentName+'"/>';
+                            }else if(isContains("pdf",data.type)){
+                                str = '<a class="attention-info" href="javascript:void(0)" title="'+data.attachmentName+'" onclick="preview(\'预览\',\''+data1.url+'\',\'90%\',\'90%\',\'1\')">'+data.attachmentName+'</a>';
+                            }else {
+                                str = '<a class="attention-info" href="javascript:void(0)" title="'+data.attachmentName+'" onclick="preview(\'预览\',\''+data1.url+'\',\'90%\',\'90%\')">'+data.attachmentName+'</a>';
+                            }
+                            $(prefix+"_fileTypeDiv").append(str);
+                            $(prefix+"_fileName").val(data.attachmentName);
+                            $(prefix+"_fileType").val(data.type);
+                            $(prefix+"_fileUrl").val(data.url);
+                            $(prefix+"_fileAttachmentFlag").val(data.attachmentFlag);
+                            $(prefix+"_fileAttachmentId").val(data.attachmentId);
+                            var result = '<a href="javascript:location.href=\''+realPath+'/a/workfullmanage/workFullManage/downLoadAttach?file=\'+encodeURIComponent(\''+data.url+'\');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>';
+                            $(prefix+"_operation").empty();
+                            //$(prefix+"_operation").append(result);
+                        }else {
+                            parent.layer.msg("上传失败!",{icon:2});
+                        }
+                    }
+                })
+            }else {
+                parent.layer.msg("上传失败!",{icon:2});
+            }
+        }
+    })
 };
 
 function multitest (storeAs, file,attachmentId,attachmentFlag,uploadPath,divId, size,cpt) {

+ 62 - 0
src/main/webapp/webpage/modules/project/type/accrding/projectAccrdingTypeForm.jsp

@@ -0,0 +1,62 @@
+<%@ 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">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+			if(validateForm.form()){
+				$("#inputForm").submit();
+				return true;
+			}
+
+			return false;
+		}
+		$(document).ready(function() {
+			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);
+					}
+				}
+			});
+		});
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<form:form id="inputForm" modelAttribute="projectType" action="${ctx}/project/projectAccrdingType/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<input type="hidden" name="parentId" value="${projectType.parentId}">
+			<sys:message content="${message}"/>
+			<div class="form-group layui-row first lw9">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label">父级节点:</label>
+					<div class="layui-input-block">
+						<form:input path="parentName" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label">项目类型名称:</label>
+					<div class="layui-input-block">
+						<form:input path="typeName" htmlEscape="false" class="form-control layui-input"/>
+					</div>
+				</div>
+			</div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 74 - 0
src/main/webapp/webpage/modules/project/type/accrding/projectAccrdingTypeFormSubordinate.jsp

@@ -0,0 +1,74 @@
+<%@ 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">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+			if(validateForm.form()){
+				$("#inputForm").submit();
+				return true;
+			}
+
+			return false;
+		}
+		$(document).ready(function() {
+			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);
+					}
+				}
+			});
+		});
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<form:form id="inputForm" modelAttribute="projectType" action="${ctx}/project/projectAccordingType/saveSubordinateInfo" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<input type="hidden" name="parentId" value="${projectType.parentId}">
+			<sys:message content="${message}"/>
+			<div class="form-group layui-row first lw9">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label">父级节点:</label>
+					<div class="layui-input-block">
+						<form:input path="parentName" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label">项目类型名称:</label>
+					<div class="layui-input-block">
+						<form:input path="typeName" 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">
+						<select name="chooseCondition" class="form-control editable-select layui-input" id="chooseCondition">
+							<option value=""></option>
+							<option value="1" <c:if test="${projectType.chooseCondition=='1'}">selected</c:if>>是</option>
+							<option value="0" <c:if test="${projectType.chooseCondition=='0'}">selected</c:if>>否</option>
+						</select>
+					</div>
+				</div>
+
+			</div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 300 - 0
src/main/webapp/webpage/modules/project/type/accrding/projectAccrdingTypeList.jsp

@@ -0,0 +1,300 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>工作内容类型管理</title>
+	<meta name="decorator" content="default"/>
+	<link href="${ctxStatic}/layer-v2.3/layui/tableTree/treetable.css" rel="stylesheet" />
+	<%@include file="/webpage/include/treetable.jsp" %>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			$("#treeTable").treeTable({expandLevel : 5},{ expandable: true });
+		});
+	</script>
+	<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>
+</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="projectType" action="${ctx}/projectType/projectType/" 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}"/>
+					<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->
+
+					<div class="commonQuery lw9">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">项目类型名称:</label>
+							<div class="layui-input-block">
+								<form:input path="typeName" htmlEscape="false" class=" form-control layui-input"></form:input>
+							</div>
+						</div>
+						<div class="layui-item athird">
+							<div class="input-group">
+								<button id="searchReset" style="margin-right: 0px;" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
+								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+
+				</form:form>
+			</div>
+		</div>
+		<div class="full-width fl">
+			<div class="contentShadow layui-form contentDetails">
+				<div class="nav-btns">
+					<shiro:hasPermission name="project:projectType:add">
+						<table:addRow url="${ctx}/projectType/projectType/form" title="项目内容类型"></table:addRow><!-- 增加按钮 -->
+					</shiro:hasPermission>
+					<shiro:hasPermission name="project:projectType:import">
+						<table:importExcel url="${ctx}/projectType/projectType/import"></table:importExcel><!-- 导入按钮 -->
+					</shiro:hasPermission>
+					<shiro:hasPermission name="project:projectType:export">
+						<table:exportExcel url="${ctx}/projectType/projectType/export"></table:exportExcel><!-- 导出按钮 -->
+					</shiro:hasPermission>
+					<button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i>&nbsp;刷新</button>
+					<div style="clear: both;"></div>
+				</div>
+
+					<table id="achievementTable" class="layui-table" lay-filter="achievementTable"></table>
+				<!-- 分页代码 -->
+			</div>
+		</div>
+	</div>
+</div>
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script src="${ctxStatic}/layer-v2.3/layui/tableTree/treetable.js" charset="utf-8"></script>
+
+<script>
+	/*使用模块加载的方式 加载文件*/
+	layui.config({
+		base: '${ctx}/resoueces/css/layui/module/'
+	}).extend({
+		treetable: 'treetable-lay/treetable'
+	}).use(['layer', 'table', 'treetable'], function () {
+		var $ = layui.jquery;
+		var table = layui.table;
+		var layer = layui.layer;
+		var treetable = layui.treetable;
+
+		// 渲染表格
+		var renderTable = function () {
+			layer.load(2);
+			treetable.render({
+				treeColIndex: 1,//树形图标显示在第几列
+				treeSpid: 0,//最上级的父级id
+				treeIdName: 'permissionId',//id字段的名称
+				treePidName: 'pid',//pid字段的名称
+				treeDefaultClose: false,//是否默认折叠
+				treeLinkage: true,//父级展开时是否自动展开所有子级
+				elem: '#achievementTable',
+				url: '${ctx}/projectType/projectType/getProjectTypeTreeList?typeName=',
+				page: false,
+				cols: [[
+					{type: 'numbers', title: '序号' ,width:80},
+					{field: 'name', title: '类型',templet:function(d){
+							if(null != d.name){
+								return "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看项目类型信息', '${ctx}/project/projectAccordingType/form?view=view&id="+d.id+"','95%', '95%')\">" + d.name + "</a>";
+							}else{
+								return "";
+							}
+						}},
+					{field: 'name', title: '项目类型名称',templet:function(d){
+							if(null != d.name){
+								return "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看项目类型信息', '${ctx}/project/projectAccordingType/form?view=view&id="+d.id+"','95%', '95%')\">" + d.name + "</a>";
+							}else{
+								return "";
+							}
+						}},
+					{field: 'createDate', title: '创建时间',width:80},
+					{templet: complain, title: '操作',width:160}
+				]],
+				done: function () {
+					layer.closeAll('loading');
+				}
+			});
+		};
+
+		renderTable();
+
+		//触发三个button按钮
+		$('#btn-expand').click(function () {
+			treetable.expandAll('#permissionTable');
+		});
+
+		$('#btn-fold').click(function () {
+			treetable.foldAll('#permissionTable');
+		});
+
+		$('#btn-refresh').click(function () {
+			renderTable();
+		});
+
+
+		function complain(d){//操作中显示的内容
+			if(d.tier == 3){
+				return [
+					"<a href=\"javascript:void(0)\" onclick=\"openProjectType('新增宜居性文件类型信息','${ctx}/project/projectAccordingType/form?view=saveSubordinateInfo&id="+d.id+"','60%', '95%');\" class=\"op-btn nav-btn-add layui-bg-green\"><i class=\"fa fa-plus layui-bg-green\"></i> 新增下级项目类型</a>",
+				].join('');
+			}else if(d.tier == 4){
+				return [
+					"<a href=\"javascript:void(0)\" onclick=\"openProjectType('修改项目类型信息','${ctx}/project/projectAccordingType/form?view=updateSubordinateInfo&id="+d.id+"','95%', '95%');\" class=\"btn btn-success btn-xs\"><i class=\"fa fa-edit\"></i> 修改</a>",
+					'<a href="${ctx}/projectType/projectType/delete?id='+d.id+'" onclick="return confirmxRefresh(\'确认要删除该项目类型信息吗?\', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>',
+				].join('');
+			}
+			else{
+				return [
+					''
+				].join('');
+			}
+		}
+		//监听工具条
+		table.on('tool(permissionTable)', function (obj) {
+			var data = obj.data;
+			var layEvent = obj.event;
+			if(data.permissionName!=null){
+				if (layEvent === 'del') {
+					layer.msg('删除' + data.id);
+				} else if (layEvent === 'edit') {
+					layer.msg('修改' + data.id);
+				}
+			}
+		});
+	});
+</script>
+<script>
+	function openProjectTypeView(title,url,width,height,target){
+		var company=$("#company").val();
+		url=url+"&company="+company;
+		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:"two-btns",
+			btn: ['关闭'],
+			yes: 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中展示
+				var $document = iframeWin.contentWindow.document;
+				top.layer.close(index);
+				//formSubmit($document,"inputForm",index);
+			},
+			cancel: function(index){
+			}
+		});
+
+	}
+
+	function openProjectType(title,url,width,height,target){
+		var company=$("#company").val();
+		url=url+"&company="+company;
+		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:"two-btns",
+			btn: ['提交','关闭'],
+			yes: 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中展示
+				var $document = iframeWin.contentWindow.document;
+				formSubmit($document,"inputForm",index);
+			},
+			cancel: function(index){
+			}
+		});
+
+	}
+	function formSubmit($document,inputForm,index){
+		$($document.getElementById(inputForm)).ajaxSubmit({
+			success:function(data) {
+				top.layer.close(index);
+				if(data.code == 0){
+					layer.msg(data.msg, {icon: 1,time: 1000}, function(){
+						return false;
+					});
+				}else{
+					layer.msg(data.msg, {icon: 1,time: 1000}, function(){
+						window.location.reload();
+					});
+				}
+			},error:function(){
+				layer.msg("操作失败",{icon:2});
+				window.location.reload();
+			}
+		});
+	}
+	// 确认对话框
+	function confirmxRefresh(mess, href){
+		top.layer.confirm(mess, {icon: 3, title:'系统提示'}, function(index){
+			//do something
+			if (typeof href == 'function') {
+				href();
+			}else{
+				resetTip(); //loading();
+				$.ajax({
+					url:href,
+					data:$('#loginForm').serialize(),
+					type:"post",
+					success:function(data){
+						if(data.code == 1){
+							parent.layer.msg('删除成功',{icon:1});
+							window.location.reload();
+						}else {
+							parent.layer.msg('删除失败',{icon:2});
+						}
+					}
+				});
+			}
+			top.layer.close(index);
+		});
+		return false;
+	}
+</script>
+</body>
+</html>

+ 70 - 0
src/main/webapp/webpage/modules/project/type/accrding/projectAccrdingTypeView.jsp

@@ -0,0 +1,70 @@
+<%@ 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">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+			if(validateForm.form()){
+				$("#inputForm").submit();
+				return true;
+			}
+
+			return false;
+		}
+		$(document).ready(function() {
+			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);
+					}
+				}
+			});
+		});
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<form:form id="inputForm" modelAttribute="projectType" action="${ctx}/projectType/projectType/save" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<input type="hidden" name="parentId" value="${projectType.parentId}">
+			<sys:message content="${message}"/>
+			<div class="form-group layui-row first lw9">
+				<div class="form-group-label"><h2>基础信息</h2></div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label">父级节点:</label>
+					<div class="layui-input-block">
+						<form:input path="parentName" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label">项目类型名称:</label>
+					<div class="layui-input-block">
+						<form:input path="typeName" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+
+
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label">项目类型名称:</label>
+					<div class="layui-input-block">
+						<form:input path="chooseCondition" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+			</div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 1 - 1
src/main/webapp/webpage/modules/projectcontentinfo/reportAudit.jsp

@@ -704,7 +704,7 @@
         }
 
 	}
-    openContent("${ctx}/projectcontentinfo/projectcontentinfo/form?view=reportViewGzr&dictType=${projectcontentinfo.dictType}&id=${projectcontentinfo.id}&parentIds=${projectcontentinfo.parentId}&projectReportData.id=${projectcontentinfo.projectReportData.id}","报告明细");
+    openContent("${ctx}/projectcontentinfo/projectcontentinfo/form?view=reportViewGzr&condition=according&dictType=${projectcontentinfo.dictType}&id=${projectcontentinfo.id}&parentIds=${projectcontentinfo.parentId}&projectReportData.id=${projectcontentinfo.projectReportData.id}","报告明细");
 </script>
 	<script>
         function addDiyDom(treeId, treeNode) {

+ 544 - 0
src/main/webapp/webpage/modules/projectrecord/implementCompletion/projectCompletionReviewList.jsp

@@ -0,0 +1,544 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>项目登记</title>
+	<meta name="decorator" content="default"/>
+    <link href="${ctxStatic}/layer-v2.3/layui/tableTree/treetable.css" rel="stylesheet" />
+    <style>
+        .layui-table th{
+            font-size: 14px;
+            /*表头内容居中显示*/
+            text-align: center;
+        }
+		.pid{
+			font-size:14px;
+			font-weight:400;
+		}
+    </style>
+	<script type="text/javascript">
+        $(document).ready(function() {
+
+            //搜索框收放
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#beginDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+        });
+
+        function reset() {
+            $("#searchForm").resetForm();
+        }
+
+        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(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2: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(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }else {
+                        return false;
+                    }
+                },
+                btn3: function (index) {
+                }
+            });
+        }
+
+        function openDialogre(title,url,width,height,target,buttons) {
+
+            if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+                width = 'auto';
+                height = 'auto';
+            } else {//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            var split = buttons.split(",");
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                skin: 'three-btns',
+                content: url,
+                btn: split,
+                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(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    if(split.length==2){return}
+                    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(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }else {
+                        return false;
+                    }
+                },
+                btn3: function (index) {
+                }
+            });
+        }
+	</script>
+	<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>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+	<sys:message content="${message}"/>
+	<div class="layui-row">
+		<div class="full-width fl">
+			<div class="layui-row contentShadow shadowLR" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="projectImplementEarly" action="${ctx}/project/projectCompletionReview/" 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}"/>
+					<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="projectName" 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="leaderNameStr" htmlEscape="false" maxlength="255"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item athird">
+							<div class="input-group">
+								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+								<button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
+								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" style="clear:both;display:none;" class="lw6">
+						<div class="layui-item query athird ">
+							<label class="layui-form-label">合同名称:</label>
+							<div class="layui-input-block">
+								<input type="text" input="workContractInfoName" name="workContractInfo.name" value="" htmlEscape="false" maxlength="255"  class=" form-control layui-input">
+							</div>
+						</div>
+						<div class="layui-item query athird ">
+							<label class="layui-form-label">委托方:</label>
+							<div class="layui-input-block">
+								<input type="text" input="workContractInfoClientName" name="workContractInfo.client.name" value="" htmlEscape="false" maxlength="255"  class=" form-control layui-input">
+							</div>
+						</div>
+						<div style="clear:both;"></div>
+					</div>
+				</form:form>
+			</div>
+		</div>
+		<div class="full-width fl">
+			<div class="layui-form contentDetails contentShadow shadowLBR">
+				<div class="nav-btns">
+					<button class="nav-btn layui-btn" id="btn-expand">全部展开</button>
+					<button class="nav-btn layui-btn-warm" id="btn-fold">全部折叠</button>
+					<button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i>&nbsp;刷新</button>
+
+                    <div style="clear: both;"></div>
+				</div>
+                <table id="permissionTable" class="layui-table" lay-filter="permissionTable"></table>
+				<!-- 分页代码 -->
+				<table:page page="${page}"></table:page>
+				<div style="clear: both;"></div>
+			</div>
+		</div>
+	</div>
+	<div id="changewidth"></div>
+</div>
+
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script>
+
+    resizeListTable();
+    $("a").on("click",addLinkVisied);
+</script>
+<script>
+    resizeListWindow2();
+    $(window).resize(function(){
+        resizeListWindow2();
+    });
+</script>
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script src="${ctxStatic}/layer-v2.3/layui/tableTree/treetable.js" charset="utf-8"></script>
+<script>
+    /*使用模块加载的方式 加载文件*/
+    layui.config({
+        base: '${ctx}/resoueces/css/layui/module/'
+    }).extend({
+        treetable: 'treetable-lay/treetable'
+    }).use(['layer', 'table', 'treetable'], function () {
+        var $ = layui.jquery;
+        var table = layui.table;
+        var layer = layui.layer;
+        var treetable = layui.treetable;
+
+        // 渲染表格
+        var renderTable = function () {
+        	var projectName = $("#projectName").val();
+        	var workContractInfoName = $("#workContractInfoName").val();
+        	var workContractInfoClientName = $("#workContractInfoClientName").val();
+        	if(undefined == workContractInfoName){
+				workContractInfoName = "";
+			}
+        	if(undefined == workContractInfoClientName){
+				workContractInfoClientName = "";
+			}
+            layer.load(2);
+            treetable.render({
+                treeColIndex: 1,//树形图标显示在第几列
+                treeSpid: 0,//最上级的父级id
+                treeIdName: 'permissionId',//id字段的名称
+                treePidName: 'pid',//pid字段的名称
+                treeDefaultClose: true,//是否默认折叠
+                treeLinkage: true,//父级展开时是否自动展开所有子级
+                elem: '#permissionTable',
+                url: '${ctx}/project/projectCompletionReview/getProjectList?projectId=${projectRecords.id}&pageNo=${page.pageNo}&projectName='+$("#projectName").val()+'&leaderNameStr='+$("#leaderNameStr").val()+'&workContractInfo.name='+workContractInfoName+'&workContractInfo.client.name='+workContractInfoClientName,
+                page: false,
+                cols: [[
+                    {type: 'numbers', align:'center', title: '序号' ,width:80},
+                    {field: 'projectId', title: '项目编号/当前阶段'},
+                    {field: 'projectName', align:'center', title: '项目名称/工作内容',templet:function(d){
+                    	if(0 == d.pid){
+							return "<a class=\"attention-info pid\" title=\"" + d.projectName + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看项目', '${ctx}/project/projectRecords/view?id=" + d.id +"','95%', '95%')\">" + d.projectName + "</a>";
+						}else{
+							return "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看工作内容', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=contentView&dictType=&id="+d.contentPId+"&parentIds="+d.parentIds+"&infoId="+d.id+"','95%', '95%')\">" + d.projectName + "</a>";
+						}
+						}},
+                    {field: 'reportName', align:'center', title: '成果文件名称',templet:function(d){
+                    	if(0 == d.pid){
+							return "";
+						}else{
+							return "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看工作内容', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=reportView&condition=completion&dictType=&id="+d.contentPId+"&parentIds="+d.parentIds+"&infoId="+d.reportId+"','95%', '95%')\">" + d.reportName + "</a>";
+						}
+						}},
+                    {field: 'projectLeader', align:'center', title: '项目负责人',templet: function(d){
+							if(0 == d.pid){
+								return "<font style = 'font-size:14px;font-weight:500;'>"+d.projectLeader+"</font>";
+							}else{
+								return "<font>"+d.projectLeader+"</font>";
+							}
+						}},
+                    {field: 'projectRegistrant', align:'center', title: '登记人',templet: function(d){
+							if(0 == d.pid){
+								return "<font style = 'font-size:14px;font-weight:500;'>"+d.projectRegistrant+"</font>";
+							}else{
+								return "<font>"+d.projectRegistrant+"</font>";
+							}
+						}},
+                    {field: 'createDate', align:'center', title: '登记日期',width:100,templet: function(d){
+							var date=d.createDate;
+							date=date.replace(new RegExp(/-/gm) ,"/");
+
+							if(0 == d.pid){
+								return "<font style = 'font-size:14px;font-weight:500;'>"+layui.util.toDateString(date,'yyyy-MM-dd')+"</font>";
+							}else{
+								return "<font>"+layui.util.toDateString(date,'yyyy-MM-dd')+"</font>";
+							}
+						}},
+                    {templet: complain, align:'center', title: '操作',width:130}
+                ]],
+                done: function () {
+                    layer.closeAll('loading');
+                }
+            });
+        };
+
+        renderTable();
+
+        //触发三个button按钮
+        $('#btn-expand').click(function () {
+            treetable.expandAll('#permissionTable');
+        });
+
+        $('#btn-fold').click(function () {
+            treetable.foldAll('#permissionTable');
+        });
+
+        $('#btn-refresh').click(function () {
+            renderTable();
+        });
+
+
+        function complain(d){//操作中显示的内容
+			if(1 == d.operationSign) {
+					return [
+						'<a href="javascript:void(0)" onclick="openDialogWork1(\'领取报告号\', \'${ctx}/projectreportnum/projectReportNum/skipMethod\',\'60%\',\'95%\',false,\'inputForm\')" style=\"color: white;background: darkseagreen\" class="op-btn op-btn-add" ><i class="fa fa-plus"></i> 领取报告号</a>',
+					].join('');
+			} else if (d.pid!="0"){
+
+
+				if(d.status == 1){
+					return [
+						'<a href="javascript:void(0)" onclick="openDialogres(\'修改报告\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=report&condition=completion&flag=edit&dictType=${dictType}&id='+d.contentPId+'&parentIds=${parentIds}&projectReportData.id='+d.reportId+'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>',
+						'<a href="${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId='+d.reportId+'&condition=completion&id='+d.contentPId+'&type=8" onclick="return confirmxRefresh(\'确认要删除该工作内容报告吗?\', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>',
+					].join('');
+				}else if(d.status == 2){
+					return [
+						'<a href="${ctx}/projectcontentinfo/projectcontentinfo/cancelInvalidate?infoId='+d.reportId+'&id='+d.contentPId+'&type=8" onclick="return confirmxRefresh(\'确认要撤回该工作内容报告吗?\', this.href)"   class="op-btn op-btn-cancel"><i class="glyphicon glyphicon-share-alt"></i> 撤回</a>',
+					].join('');
+				}else if(d.status == 3){
+					return [
+						'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改报告\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=report&condition=completion&flag=edit&dictType=${dictType}&id='+d.contentPId+'&parentIds=${parentIds}&projectReportData.id='+d.reportId+'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>',
+						'<a href="${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId='+d.reportId+'&condition=accocompletionrding&id='+d.contentPId+'&type=8" onclick="return confirmxRefresh(\'确认要删除该工作内容报告吗?\', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>',
+					].join('');
+				}else if(d.status == 4){
+					return [
+						'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改报告\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=reportModify&flag=edit&condition=completion&dictType=${dictType}&id='+d.contentPId+'&parentIds=${parentIds}&projectReportData.id='+d.reportId+'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>',
+						'<a href="${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId='+d.reportId+'&condition=completion&id='+d.contentPId+'&type=8" onclick="return confirmxRefresh(\'确认要删除该工作内容报告吗?\', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>',
+					].join('');
+				}else if(d.status == 5){
+					return [
+						'<a href="javascript:void(0)" onclick="openDialogres(\'报告作废\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=reportInvalid&dictType=${dictType}&id='+d.contentPId+'&parentIds=${parentIds}&projectReportData.id='+d.reportId+'\',\'95%\',\'95%\')" class="op-btn op-btn-invalid" ><i class="fa fa-trash-o"></i> 作废</a>',
+					].join('');
+				}else if(d.status == null || d.status == ''){
+					return [
+						'<a href="javascript:void(0)" onclick="openDialogres(\'复核\', \'${ctx}/project/projectCompletionReview/reviewForm?view=report&dictType='+d.dictType+'&project.id='+d.pid+'&id='+d.contentPId+'&parentIds='+d.parentIds+'&infoId='+d.id+'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-plus"></i> 复核</a>',
+					].join('');
+				}else{
+					return[''].join('');
+				}
+				}else{
+				return[''].join('');
+			}
+        }
+        //监听工具条
+        table.on('tool(permissionTable)', function (obj) {
+            var data = obj.data;
+            var layEvent = obj.event;
+            if(data.permissionName!=null){
+                if (layEvent === 'del') {
+                    layer.msg('删除' + data.id);
+                } else if (layEvent === 'edit') {
+                    layer.msg('修改' + data.id);
+                }
+            }
+        });
+    });
+
+</script>
+<script>
+	function openDialogres(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,
+			skin: 'three-btns',
+			maxmin: true, //开启最大化最小化按钮
+			content: url ,
+			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(1) ){
+					//top.layer.close(index);//关闭对话框。
+					setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+				}
+			},
+			btn2: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(2) ){
+					// top.layer.close(index);//关闭对话框。
+					setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+				}
+				return false;
+			},
+			btn3: function(index){
+			}
+		});
+	}
+	function openDialogreAudit(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,
+			skin: 'three-btns',
+			maxmin: true, //开启最大化最小化按钮
+			content: url ,
+			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(1) ){
+					top.layer.close(index);//关闭对话框。
+					setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+				}
+			},
+			btn2: function(index){
+			}
+		});
+	}
+	// 确认对话框
+	function confirmxRefresh(mess, href){
+		top.layer.confirm(mess, {icon: 3, title:'系统提示'}, function(index){
+			//do something
+			if (typeof href == 'function') {
+				href();
+			}else{
+				resetTip(); //loading();
+				$.ajax({
+					url:href,
+					data:$('#loginForm').serialize(),
+					type:"post",
+					success:function(data){
+						if(data.status){
+							parent.layer.msg(data.msg,{icon:1});
+						}else {
+							parent.layer.msg(data.msg,{icon:2});
+						}
+						//parent.refreshTrees();
+						location = '${ctx}/project/projectCompletionReview/list';
+					}
+				});
+			}
+			top.layer.close(index);
+		});
+		return false;
+	}
+
+	function openDialogWork1(title,url,width,height,target){
+		top.layer.open({
+			type: 2,
+			area: [width, height],
+			title: title,
+			maxmin: true, //开启最大化最小化按钮
+			content: url ,
+			btn: ['关闭'],
+			end:function(index){
+				top.layer.close(index)
+			}
+		});
+	}
+</script>
+</body>
+</html>

+ 1 - 1
src/main/webapp/webpage/modules/projectrecord/implementCompletion/projectImplementCompletionList.jsp

@@ -377,7 +377,7 @@
 			} else if (d.pid!="0"){
 					//子级内容
 					return [
-						'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改工作内容\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=content&condition=early&dictType=&id='+d.contentPId+'&parentIds='+d.parentIds+'&infoId='+d.id+'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>',
+						'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改工作内容\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=content&condition=early&dictType=&id='+d.contentPId+'&parentIds='+d.parentIds+'&infoId='+d.id+'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>',
 						/*'<a href="${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId='+d.id+'&id='+d.contentPId+'&type=8&condition=record" onclick="return confirmxRefresh(\'确认要删除该工作内容报告吗?\', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>',*/
 					].join('');
 				}else{

+ 565 - 0
src/main/webapp/webpage/modules/projectrecord/implementEarly/projectEarlyReviewList.jsp

@@ -0,0 +1,565 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>项目登记</title>
+	<meta name="decorator" content="default"/>
+    <link href="${ctxStatic}/layer-v2.3/layui/tableTree/treetable.css" rel="stylesheet" />
+	<%--<script src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>--%>
+    <style>
+        .layui-table th{
+            font-size: 14px;
+            /*表头内容居中显示*/
+            text-align: center;
+        }
+		.pid{
+			font-size:14px;
+			font-weight:400;
+		}
+    </style>
+	<script type="text/javascript">
+        $(document).ready(function() {
+
+            //搜索框收放
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#beginDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+        });
+
+        function reset() {
+            $("#searchForm").resetForm();
+        }
+
+        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: ['送审', '暂存', '关闭'],
+                /*yes: 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()) {
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function () {
+                            top.layer.close(index)
+                        }, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+
+                },*/
+                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(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2: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(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }else {
+                        return false;
+                    }
+                },
+                btn3: function (index) {
+                }
+            });
+        }
+
+        function openDialogre(title,url,width,height,target,buttons) {
+
+            if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+                width = 'auto';
+                height = 'auto';
+            } else {//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            var split = buttons.split(",");
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                skin: 'three-btns',
+                content: url,
+                btn: split,
+                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(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    if(split.length==2){return}
+                    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(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }else {
+                        return false;
+                    }
+                },
+                btn3: function (index) {
+                }
+            });
+        }
+	</script>
+	<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>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+	<sys:message content="${message}"/>
+	<div class="layui-row">
+		<div class="full-width fl">
+			<div class="layui-row contentShadow shadowLR" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="projectImplementEarly" action="${ctx}/project/projectEarlyReview/" 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}"/>
+					<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="projectName" 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="leaderNameStr" htmlEscape="false" maxlength="255"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item athird">
+							<div class="input-group">
+								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+								<button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
+								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" style="clear:both;display:none;" class="lw6">
+						<div class="layui-item query athird ">
+							<label class="layui-form-label">合同名称:</label>
+							<div class="layui-input-block">
+								<input type="text" input="workContractInfoName" name="workContractInfo.name" value="" htmlEscape="false" maxlength="255"  class=" form-control layui-input">
+							</div>
+						</div>
+						<div class="layui-item query athird ">
+							<label class="layui-form-label">委托方:</label>
+							<div class="layui-input-block">
+								<input type="text" input="workContractInfoClientName" name="workContractInfo.client.name" value="" htmlEscape="false" maxlength="255"  class=" form-control layui-input">
+							</div>
+						</div>
+						<div style="clear:both;"></div>
+					</div>
+				</form:form>
+			</div>
+		</div>
+		<div class="full-width fl">
+			<div class="layui-form contentDetails contentShadow shadowLBR">
+				<div class="nav-btns">
+					<button class="nav-btn layui-btn" id="btn-expand">全部展开</button>
+					<button class="nav-btn layui-btn-warm" id="btn-fold">全部折叠</button>
+					<button class="nav-btn nav-btn-refresh" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"><i class="glyphicon glyphicon-repeat"></i>&nbsp;刷新</button>
+
+                    <div style="clear: both;"></div>
+				</div>
+                <table id="permissionTable" class="layui-table" lay-filter="permissionTable"></table>
+				<!-- 分页代码 -->
+				<table:page page="${page}"></table:page>
+				<div style="clear: both;"></div>
+			</div>
+		</div>
+	</div>
+	<div id="changewidth"></div>
+</div>
+
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script>
+
+    resizeListTable();
+    $("a").on("click",addLinkVisied);
+</script>
+<script>
+    resizeListWindow2();
+    $(window).resize(function(){
+        resizeListWindow2();
+    });
+</script>
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script src="${ctxStatic}/layer-v2.3/layui/tableTree/treetable.js" charset="utf-8"></script>
+<script>
+    /*使用模块加载的方式 加载文件*/
+    layui.config({
+        base: '${ctx}/resoueces/css/layui/module/'
+    }).extend({
+        treetable: 'treetable-lay/treetable'
+    }).use(['layer', 'table', 'treetable'], function () {
+        var $ = layui.jquery;
+        var table = layui.table;
+        var layer = layui.layer;
+        var treetable = layui.treetable;
+
+        // 渲染表格
+        var renderTable = function () {
+        	var projectName = $("#projectName").val();
+        	var workContractInfoName = $("#workContractInfoName").val();
+        	var workContractInfoClientName = $("#workContractInfoClientName").val();
+        	if(undefined == workContractInfoName){
+				workContractInfoName = "";
+			}
+        	if(undefined == workContractInfoClientName){
+				workContractInfoClientName = "";
+			}
+            layer.load(2);
+            treetable.render({
+                treeColIndex: 1,//树形图标显示在第几列
+                treeSpid: 0,//最上级的父级id
+                treeIdName: 'permissionId',//id字段的名称
+                treePidName: 'pid',//pid字段的名称
+                treeDefaultClose: true,//是否默认折叠
+                treeLinkage: true,//父级展开时是否自动展开所有子级
+                elem: '#permissionTable',
+                url: '${ctx}/project/projectEarlyReview/getProjectList?projectId=${projectRecords.id}&pageNo=${page.pageNo}&projectName='+$("#projectName").val()+'&leaderNameStr='+$("#leaderNameStr").val()+'&workContractInfo.name='+workContractInfoName+'&workContractInfo.client.name='+workContractInfoClientName,
+                page: false,
+                cols: [[
+                    {type: 'numbers', align:'center', title: '序号' ,width:80},
+                    {field: 'projectId', title: '项目编号/当前阶段'},
+                    {field: 'projectName', align:'center', title: '项目名称/工作内容',templet:function(d){
+                    	if(0 == d.pid){
+							return "<a class=\"attention-info pid\" title=\"" + d.projectName + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看项目', '${ctx}/project/projectRecords/view?id=" + d.id +"','95%', '95%')\">" + d.projectName + "</a>";
+						}else{
+							return "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看工作内容', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=contentView&dictType=&id="+d.contentPId+"&parentIds="+d.parentIds+"&infoId="+d.id+"','95%', '95%')\">" + d.projectName + "</a>";
+						}
+						}},
+                    {field: 'reportName', align:'center', title: '成果文件名称',templet:function(d){
+                    	if(0 == d.pid){
+							return "";
+						}else{
+							return "<a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"openDialogView('查看工作内容', '${ctx}/projectcontentinfo/projectcontentinfo/form?view=reportView&condition=according&dictType=&id="+d.contentPId+"&parentIds="+d.parentIds+"&infoId="+d.reportId+"','95%', '95%')\">" + d.reportName + "</a>";
+						}
+						}},
+                    {field: 'projectLeader', align:'center', title: '项目负责人',templet: function(d){
+							if(0 == d.pid){
+								return "<font style = 'font-size:14px;font-weight:500;'>"+d.projectLeader+"</font>";
+							}else{
+								return "<font>"+d.projectLeader+"</font>";
+							}
+						}},
+                    {field: 'projectRegistrant', align:'center', title: '登记人',templet: function(d){
+							if(0 == d.pid){
+								return "<font style = 'font-size:14px;font-weight:500;'>"+d.projectRegistrant+"</font>";
+							}else{
+								return "<font>"+d.projectRegistrant+"</font>";
+							}
+						}},
+                    {field: 'createDate', align:'center', title: '登记日期',width:100,templet: function(d){
+							var date=d.createDate;
+							date=date.replace(new RegExp(/-/gm) ,"/");
+
+							if(0 == d.pid){
+								return "<font style = 'font-size:14px;font-weight:500;'>"+layui.util.toDateString(date,'yyyy-MM-dd')+"</font>";
+							}else{
+								return "<font>"+layui.util.toDateString(date,'yyyy-MM-dd')+"</font>";
+							}
+						}},
+                    {templet: complain, align:'center', title: '操作',width:130}
+                ]],
+                done: function () {
+                    layer.closeAll('loading');
+                }
+            });
+        };
+
+        renderTable();
+
+        //触发三个button按钮
+        $('#btn-expand').click(function () {
+            treetable.expandAll('#permissionTable');
+        });
+
+        $('#btn-fold').click(function () {
+            treetable.foldAll('#permissionTable');
+        });
+
+        $('#btn-refresh').click(function () {
+            renderTable();
+        });
+
+
+        function complain(d){//操作中显示的内容
+			if(1 == d.operationSign) {
+					return [
+						'<a href="javascript:void(0)" onclick="openDialogWork1(\'领取报告号\', \'${ctx}/projectreportnum/projectReportNum/skipMethod\',\'60%\',\'95%\',false,\'inputForm\')" style=\"color: white;background: darkseagreen\" class="op-btn op-btn-add" ><i class="fa fa-plus"></i> 领取报告号</a>',
+					].join('');
+			} else if (d.pid!="0"){
+
+
+				if(d.status == 1){
+					return [
+						'<a href="javascript:void(0)" onclick="openDialogres(\'修改报告\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=report&condition=according&flag=edit&dictType=${dictType}&id='+d.contentPId+'&parentIds=${parentIds}&projectReportData.id='+d.reportId+'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>',
+						'<a href="${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId='+d.reportId+'&condition=according&id='+d.contentPId+'&type=8" onclick="return confirmxRefresh(\'确认要删除该工作内容报告吗?\', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>',
+					].join('');
+				}else if(d.status == 2){
+					return [
+						'<a href="${ctx}/projectcontentinfo/projectcontentinfo/cancelInvalidate?infoId='+d.reportId+'&id='+d.contentPId+'&type=8" onclick="return confirmxRefresh(\'确认要撤回该工作内容报告吗?\', this.href)"   class="op-btn op-btn-cancel"><i class="glyphicon glyphicon-share-alt"></i> 撤回</a>',
+					].join('');
+				}else if(d.status == 3){
+					return [
+						'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改报告\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=report&condition=according&flag=edit&dictType=${dictType}&id='+d.contentPId+'&parentIds=${parentIds}&projectReportData.id='+d.reportId+'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>',
+						'<a href="${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId='+d.reportId+'&condition=according&id='+d.contentPId+'&type=8" onclick="return confirmxRefresh(\'确认要删除该工作内容报告吗?\', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>',
+					].join('');
+				}else if(d.status == 4){
+					return [
+						'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改报告\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=reportModify&flag=edit&condition=according&dictType=${dictType}&id='+d.contentPId+'&parentIds=${parentIds}&projectReportData.id='+d.reportId+'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>',
+						'<a href="${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId='+d.reportId+'&condition=according&id='+d.contentPId+'&type=8" onclick="return confirmxRefresh(\'确认要删除该工作内容报告吗?\', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>',
+					].join('');
+				}else if(d.status == 5){
+					return [
+						'<a href="javascript:void(0)" onclick="openDialogres(\'报告作废\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=reportInvalid&dictType=${dictType}&id='+d.contentPId+'&parentIds=${parentIds}&projectReportData.id='+d.reportId+'\',\'95%\',\'95%\')" class="op-btn op-btn-invalid" ><i class="fa fa-trash-o"></i> 作废</a>',
+					].join('');
+				}else if(d.status == null || d.status == ''){
+					return [
+						'<a href="javascript:void(0)" onclick="openDialogres(\'复核\', \'${ctx}/project/projectEarlyReview/reviewForm?view=report&dictType='+d.dictType+'&project.id='+d.pid+'&id='+d.contentPId+'&parentIds='+d.parentIds+'&infoId='+d.id+'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-plus"></i> 复核</a>',
+					].join('');
+				}else{
+					return[''].join('');
+				}
+				}else{
+				return[''].join('');
+			}
+        }
+        //监听工具条
+        table.on('tool(permissionTable)', function (obj) {
+            var data = obj.data;
+            var layEvent = obj.event;
+            if(data.permissionName!=null){
+                if (layEvent === 'del') {
+                    layer.msg('删除' + data.id);
+                } else if (layEvent === 'edit') {
+                    layer.msg('修改' + data.id);
+                }
+            }
+        });
+    });
+
+</script>
+<script>
+	function openDialogres(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,
+			skin: 'three-btns',
+			maxmin: true, //开启最大化最小化按钮
+			content: url ,
+			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(1) ){
+					//top.layer.close(index);//关闭对话框。
+					setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+				}
+			},
+			btn2: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(2) ){
+					// top.layer.close(index);//关闭对话框。
+					setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+				}
+				return false;
+			},
+			btn3: function(index){
+			}
+		});
+	}
+	function openDialogreAudit(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,
+			skin: 'three-btns',
+			maxmin: true, //开启最大化最小化按钮
+			content: url ,
+			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(1) ){
+					top.layer.close(index);//关闭对话框。
+					setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+				}
+			},
+			btn2: function(index){
+			}
+		});
+	}
+	// 确认对话框
+	function confirmxRefresh(mess, href){
+		top.layer.confirm(mess, {icon: 3, title:'系统提示'}, function(index){
+			//do something
+			if (typeof href == 'function') {
+				href();
+			}else{
+				resetTip(); //loading();
+				$.ajax({
+					url:href,
+					data:$('#loginForm').serialize(),
+					type:"post",
+					success:function(data){
+						if(data.status){
+							parent.layer.msg(data.msg,{icon:1});
+						}else {
+							parent.layer.msg(data.msg,{icon:2});
+						}
+						//parent.refreshTrees();
+						location = '${ctx}/project/projectEarlyReview/list';
+					}
+				});
+			}
+			top.layer.close(index);
+		});
+		return false;
+	}
+
+	function openDialogWork1(title,url,width,height,target){
+		top.layer.open({
+			type: 2,
+			area: [width, height],
+			title: title,
+			maxmin: true, //开启最大化最小化按钮
+			content: url ,
+			btn: ['关闭'],
+			end:function(index){
+				top.layer.close(index)
+			}
+		});
+	}
+</script>
+</body>
+</html>

+ 1 - 1
src/main/webapp/webpage/modules/projectrecord/implementEarly/projectImplementEarlyList.jsp

@@ -398,7 +398,7 @@
 			} else if (d.pid!="0"){
 					//子级内容
 					return [
-						'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改工作内容\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=content&condition=early&dictType=&id='+d.contentPId+'&parentIds='+d.parentIds+'&infoId='+d.id+'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>',
+						'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改工作内容\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=content&condition=early&dictType=&id='+d.contentPId+'&parentIds='+d.parentIds+'&infoId='+d.id+'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>',
 						/*'<a href="${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId='+d.id+'&id='+d.contentPId+'&type=8&condition=record" onclick="return confirmxRefresh(\'确认要删除该工作内容报告吗?\', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>',*/
 					].join('');
 				}else{

+ 1 - 1
src/main/webapp/webpage/modules/projectrecord/implementStage/projectImplementStageList.jsp

@@ -377,7 +377,7 @@
 			} else if (d.pid!="0"){
 					//子级内容
 					return [
-						'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改工作内容\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=content&condition=early&dictType=&id='+d.contentPId+'&parentIds='+d.parentIds+'&infoId='+d.id+'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>',
+						'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改工作内容\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=content&condition=early&dictType=&id='+d.contentPId+'&parentIds='+d.parentIds+'&infoId='+d.id+'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>',
 						/*'<a href="${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId='+d.id+'&id='+d.contentPId+'&type=8&condition=record" onclick="return confirmxRefresh(\'确认要删除该工作内容报告吗?\', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>',*/
 					].join('');
 				}else{

Разница между файлами не показана из-за своего большого размера
+ 1240 - 0
src/main/webapp/webpage/modules/projectrecord/workContentFromAndView/reportForm.jsp


+ 395 - 0
src/main/webapp/webpage/modules/projectrecord/workContentFromAndView/reportView.jsp

@@ -0,0 +1,395 @@
+<%@ 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">
+
+	</script>
+</head>
+
+<body>
+<div class="single-form">
+	<div class="container${container}  view-form">
+		<div class="form-group layui-row first lw12">
+			<div class="form-group-label"><h2>基本信息</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>报告名称:</label>
+				<div class="layui-input-block with-icon">
+					<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectcontentinfo.projectReportData.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>报告编号:</label>
+				<div class="layui-input-block">
+					<div class="input-group">
+					<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectcontentinfo.projectReportData.number}"/>
+					<span class="input-group-btn">
+								<label class="form-status">
+									<c:choose>
+										<c:when test="${not empty projectcontentinfo.projectReportData.status}">${fns:getDictLabel(projectcontentinfo.projectReportData.status, 'audit_state', '')}
+										</c:when>
+										<c:otherwise>新添</c:otherwise>
+									</c:choose></label>
+							 </span>
+					</div>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>工作内容类型:</label>
+				<div class="layui-input-block">
+					<input  htmlEscape="false" readonly="true" class="form-control  layui-input" value="${fns:getContentTypeName(projectcontentinfo.projectReportData.type,"")}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">成果类型:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${fns:getMainDictLabel(projectcontentinfo.projectReportData.achievementType, 'achievement_type', '')}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">复核标准:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${fns:getMainDictLabel(projectcontentinfo.projectReportData.reviewStandard, 'reviewStandard', '')}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">报告日期:</label>
+				<div class="layui-input-block">
+					<input id="provideDate" name="projectReportData.provideDate" type="text" htmlEscape="false" readonly="true" class="laydate-icondate form-control layer-date required layui-input laydate-icon"
+						   value="<fmt:formatDate value="${projectcontentinfo.projectReportData.reportDate}" pattern="yyyy-MM-dd"/>"/>
+				</div>
+			</div>
+			<%--<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">签字造价师一:</label>
+				<div class="layui-input-block">
+					<input  htmlEscape="false" readonly="true" class="form-control  layui-input" value="${projectcontentinfo.projectReportData.signCostOne.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">签字造价师二:</label>
+				<div class="layui-input-block">
+					<input  htmlEscape="false" readonly="true" class="form-control  layui-input" value="${projectcontentinfo.projectReportData.signCostTwo.name}"/>
+				</div>
+			</div>--%>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">签章类型:</label>
+				<div class="layui-input-block">
+					<input  htmlEscape="false" readonly="true" class="form-control  layui-input" value="${projectcontentinfo.projectReportData.reportType}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">归档状态:</label>
+				<div class="layui-input-block">
+					<input  htmlEscape="false" readonly="true" class="form-control  layui-input" value="${fns:getDictLabel(projectcontentinfo.projectReportData.fileStatus, 'record_state', '')}"/>
+				</div>
+			</div>
+			<c:if test="${not empty projectcontentinfo.projectReportData.invalidStatus}">
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">作废原因:</label>
+					<div class="layui-input-block">
+						<textarea path="remarks" htmlEscape="false" readonly="true" rows="3" maxlength="20" class="form-control" >${projectcontentinfo.projectReportData.remarks}</textarea>
+					</div>
+				</div>
+			</c:if>
+		</div>
+		<div class="form-group layui-row first lw12">
+			<div class="form-group-label"><h2>项目信息</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">送审价(元):</label>
+				<div class="layui-input-block with-icon">
+					<input  id="projectReportData.reviewFee" readonly="true" class="form-control layui-input number" value="<fmt:formatNumber value="${projectcontentinfo.projectReportData.reviewFee}" pattern="#,##0.00#"/>" />
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">审定价(元):</label>
+				<div class="layui-input-block with-icon">
+					<input  id="projectReportData.approvalFee" readonly="true" class="form-control layui-input number" value="<fmt:formatNumber value="${projectcontentinfo.projectReportData.approvalFee}" pattern="#,##0.00#"/>" />
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">合同价(元):</label>
+				<div class="layui-input-block with-icon">
+					<input  id="projectReportData.contractFee"  readonly="true" class="form-control layui-input number" value="<fmt:formatNumber value="${projectcontentinfo.projectReportData.contractFee}" pattern="#,##0.00#"/>" />
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">核增核减额(元):</label>
+				<div class="layui-input-block with-icon">
+					<input id="projectReportData.verifyFee"  readonly="true" class="form-control layui-input number" value="<fmt:formatNumber value="${projectcontentinfo.projectReportData.verifyFee}" pattern="#,##0.00#"/>" />
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">核增核减率(%):</label>
+				<div class="layui-input-block with-icon">
+					<input  id="projectReportData.verifyRate"  readonly="true" class="form-control layui-input number" value="${projectcontentinfo.projectReportData.verifyRate}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">咨询标的额(元):</label>
+				<div class="layui-input-block with-icon">
+					<input  id="projectReportData.consultFee" readonly="true" class="form-control layui-input number" value="<fmt:formatNumber value="${projectcontentinfo.projectReportData.consultFee}" pattern="#,##0.00#"/>" />
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">土建造价(元):</label>
+				<div class="layui-input-block with-icon">
+					<input  id="projectReportData.buildingFee"  readonly="true" class="form-control layui-input number" value="<fmt:formatNumber value="${projectcontentinfo.projectReportData.buildingFee}" pattern="#,##0.00#"/>" />
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">安装造价(元):</label>
+				<div class="layui-input-block with-icon">
+					<input  id="projectReportData.installFee"  readonly="true" class="form-control layui-input number" value="<fmt:formatNumber value="${projectcontentinfo.projectReportData.installFee}" pattern="#,##0.00#"/>"/>
+				</div>
+			</div>
+		</div>
+		<div class="form-group layui-row first lw12">
+			<div class="form-group-label"><h2>依据性资料明细</h2></div>
+			<div class="layui-item layui-col-xs12 form-table-container">
+				<table id="contentTableBase" class="table table-bordered table-condensed details">
+					<thead>
+					<tr>
+						<th class="hide"></th>
+						<%--<th >资料编号</th>--%>
+						<th >资料名称</th>
+						<th >资料类别</th>
+						<th >资料内容</th>
+						<th >上传人</th>
+						<th >上传日期</th>
+					</tr>
+					</thead>
+					<tbody id="workBaseDataList">
+					<c:forEach items="${projectcontentinfo.projectReportData.projectBasedDataList}" var="projectBasedData" varStatus="idx">
+						<tr>
+							<td class="hide">
+								<input type="hidden" id="workBaseDataList${idx.index}_id" value="${projectBasedData.id}">
+							</td>
+							<%--<td style="text-align:center;">
+									${projectBasedData.number}
+							</td>--%>
+							<td style="text-align:center;">
+									${projectBasedData.name}
+							</td>
+							<td style="text-align:center;">
+									${projectBasedData.type}
+							</td>
+							<td style="text-align:center;">
+
+								<c:choose>
+									<c:when test="${fn:containsIgnoreCase(projectBasedData.fileName,'jpg')
+															   or fn:containsIgnoreCase(projectBasedData.fileName,'png')
+															   or fn:containsIgnoreCase(projectBasedData.fileName,'gif')
+															   or fn:containsIgnoreCase(projectBasedData.fileName,'bmp')
+															   or fn:containsIgnoreCase(projectBasedData.fileName,'jpeg')}">
+										<img src="${projectBasedData.fileUrl}" width="50" height="50" title ="${projectBasedData.fileName}" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${projectBasedData.fileUrl}','90%','90%')" alt="${projectBasedData.fileName}">
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(projectBasedData.fileName,'pdf')}">
+												<a class="attention-info" href="javascript:void(0)" title ="${projectBasedData.fileName}" onclick="preview('预览','${projectBasedData.fileUrl}','90%','90%','1')">${projectBasedData.fileName}</a>
+											</c:when>
+											<c:otherwise>
+												<a class="attention-info" href="javascript:void(0)" title ="${projectBasedData.fileName}" onclick="preview('预览','${projectBasedData.fileUrl}','90%','90%')">${projectBasedData.fileName}</a>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+
+							</td>
+							<td style="text-align:center;">
+									${projectBasedData.uploadUser.name}
+							</td>
+							<td style="text-align:center;">
+								<fmt:formatDate value="${projectBasedData.uploadDate}" pattern="yyyy-MM-dd"/>
+							</td>
+						</tr>
+					</c:forEach>
+					</tbody>
+				</table>
+			</div>
+		</div>
+		<div class="form-group layui-row first lw12">
+			<div class="form-group-label"><h2>依据工作内容</h2></div>
+			<!-- 表格 -->
+			<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+			<table id="contentTable" class="table table-striped table-bordered table-hover table-condensed dataTables-example dataTable">
+				<thead>
+				<tr>
+					<th style="text-align: center;width:20%">工作内容编号</th>
+					<th style="text-align: center;width:20%">工作内容名称</th>
+					<th style="text-align: center;width:20%">工作内容类型</th>
+					<th style="text-align: center;width:20%">负责人</th>
+					<th style="text-align: center;width:20%">创建时间</th>
+				</tr>
+				</thead>
+				<tbody id="projectContentDataList">
+				<c:forEach items="${projectcontentinfo.projectReportData.projectContentDataList}" var="projectContentData" varStatus="index">
+					<tr>
+						<td style="text-align:center;">
+								${projectContentData.number}
+						</td>
+						<td style="text-align:center;">
+								${projectContentData.name}
+						</td>
+						<td style="text-align:center;">
+								${fns:getContentTypeName(projectContentData.type,"")}
+						</td>
+						<td style="text-align:center;">
+								${projectContentData.master.name}
+						</td>
+						<td style="text-align:center;">
+							<fmt:formatDate value="${projectContentData.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
+						</td>
+					</tr>
+				</c:forEach>
+				</tbody>
+			</table>
+			</div>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>报告文件</h2></div>
+			<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+				<table id="upTable" class="table table-bordered table-condensed details">
+					<thead>
+					<tr>
+						<%-- <th>序号</th>--%>
+						<th>文件预览</th>
+						<th>上传人</th>
+						<th>上传时间</th>
+						<th width="200px">操作</th>
+					</tr>
+					</thead>
+					<tbody id="file_attachment">
+					<c:forEach items="${projectcontentinfo.projectReportData.workAttachments}" var = "workClientAttachment" varStatus="status">
+						<tr>
+								<%-- <td>${status.index + 1}</td>--%>
+							<c:choose>
+								<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+									<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+								</c:when>
+								<c:otherwise>
+									<c:choose>
+										<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+											<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+										</c:when>
+										<c:otherwise>
+											<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%')">${workClientAttachment.attachmentName}</a></td>
+										</c:otherwise>
+									</c:choose>
+								</c:otherwise>
+							</c:choose>
+							<td>${workClientAttachment.createBy.name}</td>
+							<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+							<td class="op-td">
+								<div class="op-btn-box" >
+                                    <c:set var="signflag" value="${fns:getSysParam('sign_flag',fns:getUser())}"/>
+                                    <c:choose>
+                                        <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'doc')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'docx')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'xls')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'xlsx')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'ppt')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'pptx')}">
+                                            <c:if test="${not empty gzr && gzr eq 'gzr'}">
+                                                <a href="${ctx}/isignature/iSignatureDocument/sign?recordId=${workClientAttachment.id}&type=report" class="op-btn op-btn-sign" target="_blank">签章</a>
+                                            </c:if>
+                                            <a href="javascript:void(0);" onclick="openDialogView('查看电子签章信息', '${ctx}/isignature/iSignatureDocument/form?recordId=${workClientAttachment.id}','95%', '95%')" class="op-btn op-btn-view" ><i class="fa fa-search-plus"></i> 查看</a>
+                                            <c:choose>
+                                                <c:when test="${signflag == '是'}">
+                                                    <a href="javascript:location.href='${ctx}/isignature/iSignatureDocument/download?recordId=${workClientAttachment.id}'" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                                </c:when>
+                                                <c:otherwise>
+                                                    <a href="javascript:location.href='${ctx}/workcontractinfo/workContractInfo/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                                </c:otherwise>
+                                            </c:choose>
+                                        </c:when>
+                                        <c:otherwise>
+                                            <a href="javascript:location.href='${ctx}/workcontractinfo/workContractInfo/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+                                        </c:otherwise>
+                                    </c:choose>
+								</div>
+							</td>
+						</tr>
+					</c:forEach>
+					</tbody>
+				</table>
+			</div>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>自检</h2></div>
+			<div class="layui-item layui-col-xs12 form-table-container">
+				<table id="contentTable2" class="table details table-bordered table-condensed">
+					<thead>
+					<tr>
+						<th style="text-align: center;width:15%">序号</th>
+						<th style="text-align: center;width:70%">复核内容及评分标准</th>
+						<th style="text-align: center;width:15%">操作</th>
+					</tr>
+					</thead>
+					<tbody id="projectContentDataList2">
+					<c:forEach items="${projectcontentinfo.projectReportData.projectReviewList}" var="projectReview" varStatus="index">
+						<tr>
+							<td>
+								<input id="projectReviewList${index.index}_id" name="projectReportData.projectReviewList[${index.index}].id" type="hidden" value="${projectReview.id}"/>
+								<input id="projectReviewList${index.index}_delFalg" name="projectReportData.projectReviewList[${index.index}].delFalg" type="hidden" value="1"/>
+								<input id="projectReviewList${index.index}_remarks" name="projectReportData.projectReviewList[${index.index}].remarks" type="hidden" value="${projectReview.remarks}"/>
+									${index.index + 1}
+							</td>
+							<td>
+									${projectReview.standardDetail}
+							</td>
+
+							<td>
+								<c:choose>
+									<c:when test="${not empty projectReview.remarks}">
+										<div class="check-ok">
+											<i class="fa fa-check"></i>
+										</div>
+									</c:when>
+									<c:otherwise>
+										<div id = "check1${projectReview.id}">
+										</div>
+										<div id = "check2${projectReview.id}" class="check-ok" style="display: none">
+											<i class="fa fa-check"></i>
+										</div>
+									</c:otherwise>
+								</c:choose>
+							</td>
+						</tr>
+					</c:forEach>
+					</tbody>
+				</table>
+			</div>
+		</div>
+		<c:if test="${not empty projectcontentinfo.projectReportData.act.procInsId}">
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>审批意见</h2></div>
+			<div class="layui-item layui-col-xs12 with-textarea" >
+				<label class="layui-form-label">审批意见:</label>
+				<div class="layui-input-block">
+					<textarea name="projectReportData.act.comment" class="form-control" rows="4" maxlength="127" ></textarea>
+				</div>
+			</div>
+		</div>
+		</c:if>
+		<c:if test="${not empty projectcontentinfo.projectReportData.act.procInsId}">
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>审批流程</h2></div>
+			<div class="layui-item layui-col-xs12 form-table-container" >
+				<act:flowChart procInsId="${projectcontentinfo.projectReportData.act.procInsId}"/>
+				<act:histoicFlow procInsId="${projectcontentinfo.projectReportData.act.procInsId}"/>
+			</div>
+		</div>
+		</c:if>
+		<div class="form-group layui-row page-end"></div>
+	</div>
+</div>
+</body>
+</html>

+ 15 - 6
src/main/webapp/webpage/modules/projectreportnum/projectReportNumStageForm.jsp

@@ -73,20 +73,29 @@
 				<div class="layui-item layui-col-sm6" style="width:50%">
 					<label class="layui-form-label double-line"><span class="require-item">*</span>选择阶段信息:</label>
 					<div class="layui-input-block">
+						<%--<form:select id="stageId" path="stageId"  htmlEscape="false" class="form-control simple-select required">
+							<form:option value=""></form:option>
+							<optgroup label="项目实施前期"/>
+							<form:options items="${fns:getContentTypeByProjectType('2')}" itemLabel="typeName" itemValue="typeId"></form:options>
+							<optgroup label="项目实施阶段"/>
+							<form:options items="${fns:getContentTypeByProjectType('3')}" itemLabel="typeName" itemValue="typeId"></form:options>
+							<optgroup label="项目竣工阶段"/>
+							<form:options items="${fns:getContentTypeByProjectType('5')}" itemLabel="typeName" itemValue="typeId"></form:options>
+						</form:select>--%>
 						<form:select id="stageId" path="stageId"  htmlEscape="false" class="form-control simple-select required">
 							<form:option value=""></form:option>
-							<%--<optgroup label="决策阶段"/>
-							<form:options items="${fns:getContentTypeList('1')}" itemLabel="typeName" itemValue="typeId"></form:options>--%>
+							<optgroup label="决策阶段"/>
+							<form:options items="${fns:getContentTypeList('1')}" itemLabel="typeName" itemValue="typeId"></form:options>
 							<optgroup label="项目实施前期"/>
 							<form:options items="${fns:getContentTypeList('2')}" itemLabel="typeName" itemValue="typeId"></form:options>
-							<%--<optgroup label="发承包阶段"/>
-							<form:options items="${fns:getContentTypeList('3')}" itemLabel="typeName" itemValue="typeId"></form:options>--%>
+							<optgroup label="发承包阶段"/>
+							<form:options items="${fns:getContentTypeList('3')}" itemLabel="typeName" itemValue="typeId"></form:options>
 							<optgroup label="项目实施阶段"/>
 							<form:options items="${fns:getContentTypeList('4')}" itemLabel="typeName" itemValue="typeId"></form:options>
 							<optgroup label="项目竣工阶段"/>
 							<form:options items="${fns:getContentTypeList('5')}" itemLabel="typeName" itemValue="typeId"></form:options>
-							<%--<optgroup label="运营阶段"/>
-							<form:options items="${fns:getContentTypeList('6')}" itemLabel="typeName" itemValue="typeId"></form:options>--%>
+							<optgroup label="运营阶段"/>
+							<form:options items="${fns:getContentTypeList('6')}" itemLabel="typeName" itemValue="typeId"></form:options>
 						</form:select>
 					</div>
 				</div>