user7 преди 4 години
родител
ревизия
134da90d02

+ 739 - 0
src/main/java/com/jeeplus/modules/projectConstruction/web/ContractController.java

@@ -0,0 +1,739 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.projectConstruction.web;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.json.AjaxJson;
+import com.jeeplus.common.oss.OSSClientUtil;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.utils.excel.ExportExcel;
+import com.jeeplus.common.web.BaseController;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.act.utils.ActUtils;
+import com.jeeplus.modules.projectType.entity.ProjectTemplateType;
+import com.jeeplus.modules.projectType.service.ProjectResultsFileTemplateService;
+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;
+import com.jeeplus.modules.projectcontroltable.service.ProjectControlTableService;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecordTreeData;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import com.jeeplus.modules.projectrecord.enums.ProjectStatusEnum;
+import com.jeeplus.modules.projectrecord.service.ProjectRecordsService;
+import com.jeeplus.modules.projectrecord.service.early.ProjectEarlyReviewService;
+import com.jeeplus.modules.sys.entity.MainDictDetail;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.Role;
+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.workactivity.entity.Activity;
+import com.jeeplus.modules.workactivity.service.ActivityService;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientInfo;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientLinkman;
+import com.jeeplus.modules.workclientinfo.service.WorkClientInfoService;
+import com.jeeplus.modules.workcontent.entity.WorkContentClaim;
+import com.jeeplus.modules.workcontent.entity.WorkContentContractSum;
+import com.jeeplus.modules.workcontent.service.WorkContentAltermanageService;
+import com.jeeplus.modules.workcontent.web.WorkContentTypeController;
+import com.jeeplus.modules.workcontractinfo.entity.WorkContractInfo;
+import com.jeeplus.modules.workcontractinfo.service.WorkContractInfoService;
+import com.jeeplus.modules.workreview.entity.WorkReviewAudit;
+import com.jeeplus.modules.workreview.service.WorkReviewStandardService;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+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.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.*;
+
+/**
+ * 施工合同管理Controller
+
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/project/constructionContract")
+public class ContractController extends BaseController {
+
+    @Autowired
+    private WorkClientInfoService workClientInfoService;
+
+    @Autowired
+    private ProjectRecordsService projectRecordsService;
+
+    @Autowired
+    private WorkContractInfoService contractInfoService;
+    @Autowired
+    private ActTaskService actTaskService;
+    @Autowired
+    private ActivityService activityService;
+    @Autowired
+    private ProjectReportDataService projectReportDataService;
+    @Autowired
+    private ProjectcontentinfoService projectcontentinfoService;
+
+    private static String template_path = Global.getProjectTemplatePath()+"咨询工作方案.xlsx";
+    private static String template_name = "咨询工作方案.xlsx";
+
+    @ModelAttribute
+    public ProjectRecords get(@RequestParam(required=false) String id) {
+        ProjectRecords entity = null;
+        if (StringUtils.isNotBlank(id)){
+            entity = projectRecordsService.get(id);
+        }
+        if (entity == null){
+            entity = new ProjectRecords();
+        }
+        return entity;
+    }
+
+    /**
+     * 项目列表页面
+     */
+    @RequiresPermissions("project:constructionContract:list")
+    @RequestMapping(value = {"list", ""})
+    public String list(ProjectRecords projectRecords, HttpServletRequest request, HttpServletResponse response, Model model) {
+        if(UserUtils.isManager()){
+            model.addAttribute("flag","1");
+        }
+        Page<ProjectRecords> page = projectRecordsService.findPage(new Page<ProjectRecords>(request, response), projectRecords);
+        //无合同状态下,获取委托方的名称
+        List<ProjectRecords> list = page.getList();
+        for (int i = 0; i < list.size(); i++) {
+            ProjectRecords records1 = list.get(i);
+            if (records1.getWorkContractInfo() == null) {
+                projectRecordsService.queryLinkmanInfos(records1);
+                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);
+                }
+            }
+        }
+        model.addAttribute("page", page);
+        return "modules/projectConstruction/projectConstructionList";
+    }
+
+    /**
+     * 项目列表页面
+     */
+    @RequestMapping(value = "getProjectList")
+    @ResponseBody
+    public Map<String,List> getProjectList(ProjectRecords projectRecords, HttpServletRequest request, HttpServletResponse response, Model model) {
+        if(UserUtils.isManager()){
+            model.addAttribute("flag","1");
+        }
+        Page<ProjectRecords> page = projectRecordsService.findPage(new Page<ProjectRecords>(request, response), projectRecords);
+        //无合同状态下,获取委托方的名称
+        List<ProjectRecords> 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();
+            ProjectRecords records1 = list.get(i);
+            if (records1.getWorkContractInfo() == null) {
+                projectRecordsService.queryLinkmanInfos(records1);
+                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());
+            projectRecordTreeData.setContractName(records1.getWorkContractInfo().getName());
+            projectRecordTreeData.setProjectStatus(records1.getProjectStatus());
+            projectRecordTreeData.setProjectRegistrant(records1.getProjectRegistrant());
+            projectRecordTreeData.setCreateDate(records1.getCreateDate());
+            projectRecordTreeData.setCreateId(records1.getCreateBy().getId());
+            //父节点的pid设置为0
+            projectRecordTreeData.setPid("0");
+            projectRecordTreeData.setClientName(records1.getWorkContractInfo().getClient().getName());
+            //遍历项目负责人信息
+            List<User> masterUserList = records1.getProjectLeaders();
+            List<String> masterList = new ArrayList<>();
+            for (User masterUser:masterUserList) {
+                masterList.add(masterUser.getName());
+            }
+            //项目负责人list数据转String
+            String projectLeader = masterList.toString().replaceAll("(?:\\[|null|\\]| +)", "");
+            System.out.println(projectLeader);
+            projectRecordTreeData.setProjectLeader(projectLeader);
+            projectRecordTreeData.setLoginId(UserUtils.getUser().getId());
+            projectRecordTreeDataList.add(projectRecordTreeData);
+
+            //根据项目id查询相关的项目阶段内容
+            List<ProjectRecordTreeData> reportDataList = projectReportDataService.getProjectRecordDataList(records1.getId());
+            if(0 != reportDataList.size()){
+                Projectcontentinfo select = new Projectcontentinfo();
+                select.setProject(records1);
+                select.setParentIds("0,");
+                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("");
+                    }
+                    //添加登陆者id
+                    reportData.setLoginId(UserUtils.getUser().getId());
+                    reportData.setCreateId(records1.getCreateBy().getId());
+                }
+            }
+            projectRecordTreeDataList.addAll(reportDataList);
+
+        }
+        map.put("data",projectRecordTreeDataList);
+        return map;
+    }
+
+    /**
+     * 查看,增加,编辑项目表单页面
+     */
+    @RequestMapping(value = "form")
+    public String form(ProjectRecords projectRecords, Model model) {
+        /*if (projectRecords!=null&&StringUtils.isNotBlank(projectRecords.getId())) {
+            projectRecords = projectRecordsService.get(projectRecords.getId());
+            projectRecordsService.queryProjectDetail(projectRecords);
+        }else {
+            projectRecords.setCreateBy(UserUtils.getUser());
+            projectRecords.setCreateDate(new Date());
+        }
+        model.addAttribute("projectRecords", projectRecords);*/
+        return "modules/projectConstruction/projectConstructionForm";
+    }
+
+    /**
+     * 查看
+     * @param projectRecords
+     * @param model
+     * @return
+     */
+    @RequiresPermissions(value={"project:projectRecords:view"})
+    @RequestMapping(value = "view")
+    public String view(ProjectRecords projectRecords, Model model) {
+        if (projectRecords!=null&&StringUtils.isNotBlank(projectRecords.getId())) {
+            projectRecordsService.queryProjectDetail(projectRecords);
+        }
+        model.addAttribute("projectRecords", projectRecords);
+        return "modules/projectrecord/projectRecordsView";
+    }
+
+    /**
+     * 保存项目
+     */
+    @RequiresPermissions(value={"project:projectRecords:add","project:projectRecords:edit"},logical=Logical.OR)
+    @RequestMapping(value = "save")
+    public String save(ProjectRecords projectRecords, Model model, RedirectAttributes redirectAttributes) {
+        if (!beanValidator(model, projectRecords)){
+            return form(projectRecords, model);
+        }
+        try {
+//            projectRecords.setProjectStatus(ProjectStatusEnum.IN_APRL.getValue());
+            if (!projectRecords.getIsNewRecord()) {//编辑表单保存
+                ProjectRecords t = projectRecordsService.get(projectRecords.getId());//从数据库取出记录的值
+                MyBeanUtils.copyBeanNotNull2Bean(projectRecords, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+                projectRecordsService.saveProject(t,ProjectStatusEnum.IN_APRL);//保存
+            } else {//新增表单保存
+                projectRecordsService.saveProject(projectRecords,ProjectStatusEnum.IN_APRL);//保存
+            }
+            addMessage(redirectAttributes, "保存项目成功");
+        }catch (Exception e){
+            logger.error("保存项目异常:",e);
+            addMessage(redirectAttributes, "保存项目异常:"+e.getMessage());
+        }
+        return "redirect:"+Global.getAdminPath()+"/project/projectRecords/?repage";
+    }
+    /**
+     * 保存项目
+     */
+    @RequiresPermissions(value={"project:projectRecords:add","project:projectRecords:edit"},logical=Logical.OR)
+    @RequestMapping(value = "tstore")
+    public String tStore(ProjectRecords projectRecords, Model model, RedirectAttributes redirectAttributes) throws Exception{
+        if (!beanValidator(model, projectRecords)){
+            return form(projectRecords, model);
+        }
+        try {
+//            projectRecords.setProjectStatus(ProjectStatusEnum.TSTORE.getValue());
+            if (!projectRecords.getIsNewRecord()) {//编辑表单保存
+                ProjectRecords t = projectRecordsService.get(projectRecords.getId());//从数据库取出记录的值
+                MyBeanUtils.copyBeanNotNull2Bean(projectRecords, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+                projectRecordsService.saveProject(t,ProjectStatusEnum.TSTORE);//保存
+            } else {//新增表单保存
+                projectRecordsService.saveProject(projectRecords,ProjectStatusEnum.TSTORE);//保存
+            }
+            addMessage(redirectAttributes, "暂存项目成功");
+        }catch (Exception e){
+            logger.error("暂存项目异常:",e);
+            addMessage(redirectAttributes, "暂存项目异常:"+e.getMessage());
+        }
+        return "redirect:"+Global.getAdminPath()+"/project/projectRecords/?repage";
+    }
+
+    /**
+     * 编辑项目表单页面
+     */
+    @RequiresPermissions(value={"project:projectRecords:edit"},logical=Logical.OR)
+    @RequestMapping(value = "modify")
+    public String modify(ProjectRecords projectRecords, Model model,RedirectAttributes redirectAttributes) {
+        projectRecords=projectRecordsService.get(projectRecords.getId());
+        ProcessInstance processInstance = actTaskService.getProcIns(projectRecords.getProcessInstanceId());
+        if (processInstance!=null) {
+            Task taskInfok = actTaskService.getCurrentTaskInfo(processInstance);
+            Act act = new Act();
+            act.setTaskId(taskInfok.getId());
+            act.setTaskName(taskInfok.getName());
+            act.setTaskDefKey(taskInfok.getTaskDefinitionKey());
+            act.setProcDefId(taskInfok.getProcessDefinitionId());
+            act.setProcInsId(taskInfok.getProcessInstanceId());
+            act.setTask(taskInfok);
+            projectRecords.setAct(act);
+        }
+
+        projectRecordsService.queryProjectDetail(projectRecords);
+        model.addAttribute("projectRecords", projectRecords);
+        return "modules/projectrecord/projectRecordsModify";
+    }
+
+    /**
+     * 删除项目
+     */
+    @RequiresPermissions("project:projectRecords:del")
+    @RequestMapping(value = "delete")
+    public String delete(ProjectRecords projectRecords, RedirectAttributes redirectAttributes) {
+        int status = projectRecords.getProjectStatus();
+        if(status==ProjectStatusEnum.TSTORE.getValue()||status==ProjectStatusEnum.REJECTED.getValue()||status==ProjectStatusEnum.RECALL.getValue()){
+            projectRecordsService.delete(projectRecords);
+            addMessage(redirectAttributes, "删除项目成功");
+            return "redirect:"+Global.getAdminPath()+"/project/projectRecords/?repage";
+        }else {
+            addMessage(redirectAttributes, "删除项目失败,只有“暂存”、“驳回”、“撤回”状态的项目才能删除");
+        }
+        return "redirect:"+Global.getAdminPath()+"/project/projectRecords/?repage";
+    }
+
+    /**
+     * 批量删除项目
+     */
+    @RequiresPermissions("project:projectRecords:del")
+    @RequestMapping(value = "deleteAll")
+    public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
+        String idArray[] =ids.split(",");
+        for(String id : idArray){
+            projectRecordsService.delete(projectRecordsService.get(id));
+        }
+        addMessage(redirectAttributes, "删除项目成功");
+        return "redirect:"+Global.getAdminPath()+"/project/projectRecords/?repage";
+    }
+
+    /**
+     * 导出excel文件
+     */
+    @RequiresPermissions("project:projectRecords:export")
+    @RequestMapping(value = "export", method= RequestMethod.POST)
+    public String exportFile(ProjectRecords projectRecords, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+        try {
+            String fileName = "项目"+ DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<ProjectRecords> page = projectRecordsService.findPage(new Page<ProjectRecords>(request, response, -1), projectRecords);
+            new ExportExcel("项目", ProjectRecords.class).setDataList(page.getList()).write(response, fileName).dispose();
+            return null;
+        } catch (Exception e) {
+            addMessage(redirectAttributes, "导出项目记录失败!失败信息:"+e.getMessage());
+        }
+        return "redirect:"+Global.getAdminPath()+"/project/projectRecords/?repage";
+    }
+
+    /**
+     * 下载导入项目数据模板
+     */
+    @RequiresPermissions("project:projectRecords:import")
+    @RequestMapping(value = "import/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+        try {
+            String fileName = "项目数据导入模板.xlsx";
+            List<ProjectRecords> list = Lists.newArrayList();
+            new ExportExcel("项目数据", ProjectRecords.class, 1).setDataList(list).write(response, fileName).dispose();
+            return null;
+        } catch (Exception e) {
+            addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
+        }
+        return "redirect:"+Global.getAdminPath()+"/project/projectRecords/?repage";
+    }
+
+
+
+    @RequestMapping("getContractInfo")
+    @ResponseBody
+    public WorkContractInfo queryContractInfo(WorkContractInfo  contractInfo){
+        WorkContractInfo workContractInfo = contractInfoService.get(contractInfo.getId());
+        if(workContractInfo==null){
+            return workContractInfo;
+        }
+        workContractInfo.setConstructionProjectTypeStr(DictUtils.getDictLabel(String.valueOf(workContractInfo.getConstructionProjectType()),"construction_project_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());
+        }
+        return  workContractInfo;
+    }
+
+    //	审批页面
+    @RequestMapping(value = "projectRecordsAudit")
+    public String workContractInfoAudit(Act act, ProjectRecords projectRecords, Model model) {
+
+        if (act.getProcInsId() != null) {
+            if (actTaskService.getProcIns(act.getProcInsId()) != null) {
+                act.setProcIns(actTaskService.getProcIns(act.getProcInsId()));
+            } else {
+                act.setFinishedProcIns(actTaskService.getFinishedProcIns(act.getProcInsId()));
+            }
+        }
+        if (act != null && StringUtils.isNotBlank(act.getTaskId())) {
+            projectRecords.setAct(act);
+            model.addAttribute("processInstanceId", projectRecords.getProcessInstanceId());
+        }
+        if (projectRecords!=null&&StringUtils.isNotBlank(projectRecords.getId())) {
+            projectRecordsService.queryProjectDetail(projectRecords);
+        }
+        model.addAttribute("projectRecords", projectRecords);
+        return "modules/projectrecord/projectRecordsAudit";
+    }
+
+    @RequestMapping(value = "getProcess")
+    public String getProcess(ProjectRecords projectRecords, Model model,HttpServletRequest request){
+        model.addAttribute("processInstanceId", projectRecords.getProcessInstanceId());
+        return "modules/projectrecord/projectRecordsTask";
+    }
+
+    @RequestMapping(value = "revoke")
+    public String revoke(HttpServletRequest request, RedirectAttributes redirectAttributes) {
+        HashMap<String, String> requestMap = findRequestMap(request);
+        String processInstanceId = requestMap.get("processInstanceId");
+        String id = requestMap.get("id");
+        try {
+            ProjectRecords projectRecords = projectRecordsService.get(id);
+            if(5==projectRecords.getProjectStatus()){
+                addMessage(redirectAttributes, "项目登记已审批通过,无法撤回");
+                return "redirect:"+Global.getAdminPath()+"/project/projectRecords/?repage";
+            }
+            projectRecordsService.cancelProcess(projectRecords);
+            addMessage(redirectAttributes, "撤回该项目登记成功");
+        }catch (Exception e){
+            logger.info(e.getMessage());
+            addMessage(redirectAttributes, "撤回该项目登记失败");
+        }
+        return "redirect:" + Global.getAdminPath() + "/project/projectRecords/?repage";
+    }
+
+    /**
+     * 查询待办任务
+     *
+     * @param act
+     * @param model
+     * @return
+     */
+    @RequestMapping("/toDoList")
+    public String queryToList(Act act, Model model) {
+
+        //合同申请流程
+        act.setProcDefKey(ActUtils.PD_PROJECTRECORD[0]);
+        List<Act> list = actTaskService.todoList(act);
+        Office office = UserUtils.getSelectCompany();
+        String companyId = office==null?"":office.getId();
+        List<Activity> activities = activityService.groupByActivityMenu("7854872f45b84acd893010e66a3db2c8",companyId);
+        for (Activity activity:activities){
+            act.setProcDefKey(activity.getProcessKey());
+            list.addAll(actTaskService.todoList(act));
+        }
+
+        Role role = UserUtils.getSelectRole().get(0);
+        List<ProjectRecords> lists = new ArrayList<ProjectRecords>();
+        for (Act a : list) {
+            if (a.getTask().getTaskDefinitionKey()!=null) {
+                ProjectRecords projectRecords = projectRecordsService.getByProcessInstanceId(a.getProcInsId());
+                if (projectRecords==null){continue;}
+                projectRecordsService.queryContractInfos(projectRecords);
+                projectRecords.setAuditType("项目登记");
+                if(projectRecords.getProjectStatus()!= ProjectStatusEnum.RECALL.getValue()) {
+                    User user1 = UserUtils.get(projectRecords.getCreateBy().getId());
+                    if (projectRecords != null && user1.getCompany().getId().equals(companyId)) {
+                        projectRecords.setCreateBy(user1);
+                        if (a.getVars().getMap().get("applyUserId") != null) {
+                            User user = UserUtils.get(a.getVars().getMap().get("applyUserId").toString());
+                            if (user != null) {
+                                a.getVars().getMap().put("applyUserId", UserUtils.get(a.getVars().getMap().get("applyUserId").toString()).getName());
+                            }
+                        }
+                        projectRecords.setAct(a);
+                        lists.add(projectRecords);
+                    }
+                }
+            }
+        }
+
+        /*------变更--------*/
+        act.setProcDefKey("projectAlter");
+        List<Act> list3 = actTaskService.todoList(act);
+        Office office3 = UserUtils.getSelectCompany();
+        String companyId3 = office3==null?"":office3.getId();
+        List<Activity> activities3 = activityService.groupByActivityMenu("807c6d4b5623474792fe78ff1fd1cdff",companyId3);
+        for (Activity activity:activities3){
+            act.setProcDefKey(activity.getProcessKey());
+            list3.addAll(actTaskService.todoList(act));
+        }
+
+        for (Act a : list3) {
+            ProjectRecords projectRecords = projectRecordsService.getByAlterProcessInstanceId(a.getTask().getProcessInstanceId());
+            if (projectRecords!=null){
+                projectRecordsService.queryContractInfos(projectRecords);
+            }
+            if (projectRecords != null && projectRecords.getCompany().getId().equals(companyId3)&& projectRecords.getProjectStatus()==ProjectStatusEnum.ON_CHANGE.getValue()) {
+                if (a.getVars().getMap().get("applyUserId") != null) {
+                    User user = UserUtils.get(a.getVars().getMap().get("applyUserId").toString());
+                    if (user != null) {
+                        a.getVars().getMap().put("applyUserId", UserUtils.get(a.getVars().getMap().get("applyUserId").toString()).getName());
+                    }
+                }
+                projectRecords.setAct(a);
+                projectRecords.setAuditType("项目变更");
+                lists.add(projectRecords);
+            }
+        }
+
+        //排除 重新申请|撤销
+        Iterator<ProjectRecords> it = lists.iterator();
+        while(it.hasNext()){
+            ProjectRecords w = it.next();
+            if(w.getAct()!=null && w.getAct().getTaskDefKey().equals("reapply")){
+                it.remove();
+            }
+        }
+
+        model.addAttribute("list", lists);
+        return "modules/projectrecord/projectRecordsToDoList";
+    }
+
+    /**
+     * 审批
+     * @param projectRecords
+     * @param model
+     * @param upload_files
+     * @param redirectAttributes
+     * @return
+     */
+    @RequestMapping("saveAudit")
+    public String saveAudit(ProjectRecords projectRecords, Model model,
+                            @RequestParam(value = "upload_files", required = false) MultipartFile[] upload_files,
+                            RedirectAttributes redirectAttributes)  {
+        String home = projectRecords.getHome();
+        try {
+            String taskDefKey = projectRecords.getAct().getTaskDefKey();
+            //当状态为未通过时,重新修改数据
+            if ("modifyApply".equals(taskDefKey)) {
+                projectRecords.getAct().setComment("重新申请");
+            }
+            List<User> users = UserUtils.getByProssType(projectRecords.getProcessInstanceId(),1);
+            String flag = projectRecords.getAct().getFlag();
+            if ("yes".equals(flag) && (users==null || users.size()==0)){
+                addMessage(redirectAttributes, "审批失败,审批人为空,请联系管理员!");
+            }else {
+                String str = projectRecordsService.auditSave(projectRecords,users);
+                addMessage(redirectAttributes, str);
+            }
+        }catch (Exception e){
+            addMessage(redirectAttributes, "项目登记流程审批失败");
+        }
+
+        if (StringUtils.isNotBlank(home) && "home".equals(home)){
+            return "redirect:" + Global.getAdminPath() + "/home/?repage";
+        }else {
+            return "redirect:" + Global.getAdminPath() + "/project/projectRecords/?repage";
+        }
+    }
+
+    /**
+     * 查询已办列表
+     * @return
+     */
+    @RequestMapping("/queryCompleteList")
+    public String queryCompleteList(Act act,HttpServletRequest request,HttpServletResponse response,Model model){
+        act.setProcDefKey("projectAudit");
+        List<ProjectRecords> list = projectRecordsService.historicList(act);
+        Office office = UserUtils.getSelectCompany();
+        String companyId = office==null?"":office.getId();
+        List<Activity> activities = activityService.groupByActivityMenu("7854872f45b84acd893010e66a3db2c8",companyId);
+        for (Activity activity:activities){
+            act.setProcDefKey(activity.getProcessKey());
+            list.addAll(projectRecordsService.historicList(act));
+        }
+
+        //合同变更
+        act.setProcDefKey("projectAlter");
+        List<Activity> activities3 = activityService.groupByActivityMenu("807c6d4b5623474792fe78ff1fd1cdff",companyId);
+        for (Activity activity:activities3){
+            act.setProcDefKey(activity.getProcessKey());
+            list.addAll(projectRecordsService.historicAlterList(act));
+        }
+        model.addAttribute("list",list);
+        return "modules/projectrecord/projectRecordsHistoricList";
+    }
+
+    /**
+     * 选择合同
+     */
+    @RequestMapping(value = "selectcontract")
+    public String selectcontractId(WorkContractInfo contract, String url,String type,String isTotal, String fieldLabels, String fieldKeys, String searchLabel, String searchKey, HttpServletRequest request, HttpServletResponse response, Model model) {
+        if(!"1".equals(UserUtils.getSelectCompany().getId())){
+            contract.setOfficeId(UserUtils.getSelectOffice().getId());
+            contract.setChargeCompany(UserUtils.getSelectOffice().getId());
+            contract.setCreateBy(UserUtils.getUser());
+        }
+        contract.setContractState("5");
+        Page<WorkContractInfo> page = contractInfoService.findPageReceipts(new Page<WorkContractInfo>(request, response),  contract);
+        try {
+            fieldLabels = URLDecoder.decode(fieldLabels, "UTF-8");
+            fieldKeys = URLDecoder.decode(fieldKeys, "UTF-8");
+            searchLabel = URLDecoder.decode(searchLabel, "UTF-8");
+            searchKey = URLDecoder.decode(searchKey, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        model.addAttribute("labelNames", fieldLabels.split("\\|"));
+        model.addAttribute("labelValues", fieldKeys.split("\\|"));
+        model.addAttribute("fieldLabels", fieldLabels);
+        model.addAttribute("fieldKeys", fieldKeys);
+        model.addAttribute("url", url);
+        model.addAttribute("searchLabel", searchLabel);
+        model.addAttribute("searchKey", searchKey);
+        model.addAttribute("type", type);
+        model.addAttribute("isTotal", isTotal);
+        model.addAttribute("obj", contract);
+        model.addAttribute("page", page);
+        return "modules/sys/gridselectContractDetail";
+    }
+
+    @RequestMapping(value = "detailList")
+    @RequiresPermissions("project:projectRecordsDetail:list")
+    public String detailList(ProjectRecords projectRecords, HttpServletRequest request, HttpServletResponse response, Model model) {
+        if(UserUtils.isManager()){
+            model.addAttribute("flag","1");
+        }
+        Page<ProjectRecords> page = projectRecordsService.findPageDetail(new Page<ProjectRecords>(request, response), projectRecords);
+        model.addAttribute("page", page);
+        return "modules/projectrecord/projectRecordsDetailList";
+    }
+
+    /**
+     * 导出excel文件
+     */
+    @RequiresPermissions("project:projectRecordsDetail:export")
+    @RequestMapping(value = "exportDetail", method=RequestMethod.POST)
+    public String exportDetailFile(ProjectRecords projectRecords, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+        try {
+            String fileName = "项目"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<ProjectRecords> page = projectRecordsService.findPageDetail(new Page<ProjectRecords>(request, response, -1), projectRecords);
+            new ExportExcel("项目", ProjectRecords.class).setDataList(page.getList()).write(response, fileName).dispose();
+            return null;
+        } catch (Exception e) {
+            addMessage(redirectAttributes, "导出项目记录失败!失败信息:"+e.getMessage());
+        }
+        return "redirect:"+Global.getAdminPath()+"/project/projectRecords/?repage";
+    }
+
+    /**
+     * 下载导入项目数据模板
+     */
+    @RequiresPermissions("project:projectRecords:edit")
+    @RequestMapping(value = "downloadTemplate")
+    public void downloadTemplate(HttpServletRequest request,HttpServletResponse response) {
+        try {
+            new OSSClientUtil().downByStream(template_path,template_name,response,request.getHeader("USER-AGENT"));
+        } catch (Exception e) {
+            logger.error("项目计划模板下载失败!",e);
+        }
+    }
+
+    /**
+     * 项目登记新增客户管理
+     */
+    @RequestMapping(value = "linkManSave")
+    @ResponseBody
+    public Object linkManSave(WorkClientInfo workClientInfo,
+                              Model model, RedirectAttributes redirectAttributes,
+                              HttpServletRequest request
+    ) throws Exception{
+        Map<String,Object> map = new HashMap<>();
+        try {
+            //保存当前人的公司
+            workClientInfo.setCompanyId(UserUtils.getSelectCompany().getId());
+            workClientInfo.setOfficeId(UserUtils.getSelectOffice().getId());
+            workClientInfoService.save(workClientInfo);//保存
+            WorkClientLinkman linkman = workClientInfo.getWorkClientLinkmanList().get(0);
+            map.put("id",linkman.getId());
+            map.put("clientId",workClientInfo.getId());
+            map.put("clientName",workClientInfo.getName());
+            map.put("linkName",linkman.getName());
+            map.put("linkMobile",linkman.getLinkMobile());
+            map.put("linkPhone",linkman.getLinkPhone());
+            map.put("str","新增客户信息成功!");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return map;
+    }
+
+    /**
+     *选择合同-Ajax自动映射联系人
+     * @param clientId
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "getLinkManByClientId")
+    public Map<String, Object> queryWorkClientLinkMen(String clientId){
+        WorkClientLinkman linkman = workClientInfoService.queryLinkManByClientId(clientId);
+        if (linkman != null) {
+            WorkClientInfo workClientInfo = workClientInfoService.get(clientId);
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", linkman.getId());
+            map.put("clientId", workClientInfo.getId());
+            map.put("clientName", workClientInfo.getName());
+            map.put("uscCode",workClientInfo.getUscCode());
+            map.put("linkName", linkman.getName());
+            map.put("linkMobile", linkman.getLinkMobile());
+            map.put("linkPhone", linkman.getLinkPhone());
+            return map;
+        }
+        return null;
+    }
+
+}

+ 1 - 1
src/main/webapp/webpage/modules/project/type/projectTypeList.jsp

@@ -205,7 +205,7 @@
 					"<a href=\"javascript:void(0)\" onclick=\"openProjectType('新增项目类型信息','${ctx}/projectType/projectType/form?view=saveSubordinateInfo&id="+d.id+"','95%', '95%');\" class=\"op-btn nav-btn-add layui-bg-green\"><i class=\"fa fa-plus layui-bg-green\"></i> 新增下级项目类型</a>",
 					"<a href=\"javascript:void(0)\" onclick=\"openProjectType('修改项目类型信息','${ctx}/projectType/projectType/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>',
-					'<a href="${ctx}/projectType/projectType/change?id='+d.id+'&forbidden='+d.forbidden+'" onclick="return confirmx(\'确认要禁用该项目类型吗?\', this.href)"   class="op-btn op-btn-delete"><i class="layui-icon-close-fill"></i> 禁用</a>',
+					'<a href="${ctx}/projectType/projectType/change?id='+d.id+'&forbidden='+d.forbidden+'" onclick="return confirmx(\'确认要禁用该项目类型吗?\', this.href)"   class="op-btn layui-btn-danger"><i class="layui-icon-close-fill"></i> 禁用</a>',
 				].join('');
 			}else if('1'==d.forbidden){
 				return [

Файловите разлики са ограничени, защото са твърде много
+ 1840 - 0
src/main/webapp/webpage/modules/projectConstruction/projectConstructionForm.jsp


+ 752 - 0
src/main/webapp/webpage/modules/projectConstruction/projectConstructionList.jsp

@@ -0,0 +1,752 @@
+<%@ 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="list-form-tab contentShadow shadowLTR" id="tabDiv">
+				<ul class="list-tabs" >
+					<li class="active"><a href="${ctx}/project/projectRecords/list">项目登记列表</a></li>
+					<li><a href="${ctx}/project/projectRecordsAlter/list">项目变更列表</a></li>
+				</ul>
+			</div>
+
+			<%--<div class="layui-row" id="tabDiv">--%>
+			<%--<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">--%>
+			<%--<ul class="layui-tab-title">--%>
+			<%--<li class="layui-this"><a href="${ctx}/project/projectRecords/list">项目登记列表</a></li>--%>
+			<%--<li><a href="${ctx}/project/projectRecordsAlter/list">项目变更列表</a></li>--%>
+			<%--</ul>--%>
+			<%--</div>--%>
+			<%--</div>--%>
+		</div>
+		<div class="full-width fl">
+			<div class="layui-row contentShadow shadowLR" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="projectRecords" action="${ctx}/project/projectRecords/" 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 with-icon">
+								<form:input path="projectId" 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="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 class="layui-item query athird ">
+							<label class="layui-form-label">创建时间:</label>
+							<div class="layui-input-block">
+								<input id="beginDate" name="beginDate" placeholder="开始时间" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+									   value="<fmt:formatDate value="${projectRecords.beginDate}" pattern="yyyy-MM-dd"/>"/>
+								</input>
+                                <span class="group-sep">-</span>
+                                <input id="endDate" name="endDate" placeholder="结束时间" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
+                                       value="<fmt:formatDate value="${projectRecords.endDate}" pattern="yyyy-MM-dd"/>"/>
+                                </input>
+							</div>
+						</div>
+						<div class="layui-item query athird ">
+							<label class="layui-form-label">状态:</label>
+							<div class="layui-input-block">
+								<form:select path="projectStatus" class=" form-control  simple-select">
+									<form:option value="" label=""/>
+									<form:options items="${fns:getDictList('audit_state')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+								</form:select>
+							</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">
+					<table:addRow url="${ctx}/project/constructionContract/form" title="合同"></table:addRow><!-- 增加按钮 -->
+					<shiro:hasPermission name="project:projectRecords:del">
+						<%--<table:delRow url="${ctx}/project/projectRecords/deleteAll" id="contentTable"></table:delRow><!-- 删除按钮 -->--%>
+					</shiro:hasPermission>
+					<shiro:hasPermission name="project:projectRecords:export">
+						<table:exportExcel url="${ctx}/project/projectRecords/export"></table:exportExcel><!-- 导出按钮 -->
+					</shiro:hasPermission>
+					<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 class="oa-table layui-table" id="contentTable1"></table>
+<%--                <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>
+
+    layui.use('table', function(){
+        layui.table.render({
+            limit:${ page.pageSize }
+            ,elem: '#contentTable1'
+            ,page: false
+            ,cols: [[
+                // {checkbox: true, fixed: true},
+                {field:'index',align:'center', title: '序号',width:40}
+                ,{field:'projName',align:'center', title: '项目名称',minWidth:200,templet:function(d){
+                        return "<a class=\"attention-info\" title=\"" + d.projName + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看项目', '${ctx}/project/projectRecords/view?id=" + d.id +"','95%', '95%')\">" + d.projName + "</a>";
+                    }}
+                ,{field:'projId',align:'center', title: '项目编号',minWidth:150,templet:function(d){
+                        return "<a class=\"attention-info\" title=\"" + d.projId + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看项目', '${ctx}/project/projectRecords/view?id=" + d.id + "','95%', '95%')\">" + d.projId + "</a>";
+                    }}
+                ,{field:'contract', align:'center',title: '合同名称',minWidth:200,templet:function(d){
+                    	return "<span title='"+ d.contract +"'>" + d.contract + "</span>";
+					}}
+                ,{field:'projMaster', align:'center',title: '负责人', width:65,templet:function(d){
+                        return "<span title=\"" + d.projMaster + "\">" + d.projMaster + "</span>";
+                    }}
+                ,{field:'client',align:'center', title: '主委托方',  width:150,templet:function(d){
+                        return "<span title=\"" + d.client + "\">" + d.client + "</span>";
+                    }}
+                ,{field:'createDate',align:'center', title: '创建日期',  width:80}
+                ,{align:'center', title: '状态',  width:70,templet:function(d){
+                        <%--var st = getAuditState(d.projectStatus)--%>
+                        <%--var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/project/projectRecords/getProcess?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";--%>
+                        <%--return xml;--%>
+                        var st = getAuditState(d.projectStatus);
+                        if(st.action)
+                            var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/project/projectRecords/getProcess?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        else
+                            var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        return xml;
+                    }}
+                ,{field:'op',align:'center',title:"操作",width:130,templet:function(d){
+                        ////对操作进行初始化
+                        var xml="";
+                        if(d.canedit1 != undefined && d.canedit1 =="1")
+                        {
+                            xml+="<a href=\"#\" onclick=\"openDialogre('修改项目', '${ctx}/project/projectRecords/form?id=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.canedit2 != undefined && d.canedit2 =="1")
+                        {
+                            xml+="<a href=\"#\" onclick=\"openDialogre('调整项目', '${ctx}/project/projectRecords/modify?id=" + d.id + "','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.canrecall != undefined && d.canrecall =="1")
+                        {
+                            xml+="<a href=\"#\" onclick=\"openDialogre('调整项目', '${ctx}/project/projectRecords/form?id=" + d.id + "','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                        }
+                        if(d.candel != undefined && d.candel =="1")
+                        {
+                            xml+="<a href=\"${ctx}/project/projectRecords/delete?id=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目信息吗?', this.href)\" class=\"op-btn op-btn-delete\"><i class=\"fa fa-trash\"></i> 删除</a>";
+                        }
+                        if(d.cancancel != undefined && d.cancancel =="1")
+                        {
+                            xml+="<a href=\"${ctx}/project/projectRecords/revoke?id=" + d.id + "&processInstanceId=" + d.procId + "\" onclick=\"return confirmx('确认要撤回该项目审批吗?', this.href)\" class=\"op-btn op-btn-cancel\" ><i class=\"glyphicon glyphicon-share-alt\"></i> 撤回</a>";
+                        }
+                        if(d.canedit3 != undefined && d.canedit3 =="1")
+                        {
+                            xml+="<a href=\"javascript:void(0)\" onclick=\"openDialogre('项目变更管理', '${ctx}/project/projectRecordsAlter/form?alterBeforeRecords.id='+encodeURIComponent('" + d.id + "'),'95%','95%','','送审,暂存,关闭')\" style=\"color: white;background: darkseagreen\" class=\"op-btn op-btn-op-btn-revert\" ><i class=\"fa fa-edit\"></i> 变更</a>";
+                        }
+                        return xml;
+
+                    }}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="projectRecords" varStatus="index">
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${projectRecords.id}"
+                    ,"projId":"${projectRecords.projectId}"
+                    ,"projName":"<c:out value="${projectRecords.projectName}" escapeXml="true"/>"
+                    ,"projMaster":"<c:forEach items="${projectRecords.projectLeaders}" var="leader" varStatus="status"><c:choose><c:when test="${status.last}">${leader.name}</c:when><c:otherwise>${leader.name},</c:otherwise></c:choose></c:forEach>"
+                    ,"contract":"${projectRecords.workContractInfo.name}"
+                    ,"client":"${projectRecords.workContractInfo.client.name}"
+                    ,"createDate":"<fmt:formatDate value="${projectRecords.createDate}" pattern="yyyy-MM-dd"/>"
+                    ,"projectStatus":"${projectRecords.projectStatus}"
+                    ,"procId":"${projectRecords.processInstanceId}"
+                    <c:choose><c:when test="${flag == '1' or fns:getUser().id == projectRecords.createBy.id}">
+                    <shiro:hasPermission name="project:projectRecords:del">,"candel":	<c:choose><c:when test="${projectRecords.projectStatus == 1 or projectRecords.projectStatus == 3 or projectRecords.projectStatus == 4}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose></shiro:hasPermission>
+                    <shiro:hasPermission name="project:projectRecords:edit">,"canedit1":	<c:choose><c:when test="${projectRecords.projectStatus == 1 }">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    ,"canedit2":<c:choose><c:when test="${projectRecords.projectStatus == 4}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    ,"canrecall":<c:choose><c:when test="${projectRecords.projectStatus == 3}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    </shiro:hasPermission>
+                    ,"cancancel":<c:choose><c:when test="${projectRecords.projectStatus == 2 && fns:getUser().id == projectRecords.createBy.id}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose>
+                    </c:when>
+                    <c:otherwise>
+                    ,"candel":"0"
+                    ,"canedit1":"0"
+                    ,"canedit2":"0"
+                    ,"canrecall":"0"
+                    ,"cancancel":"0"
+                    </c:otherwise>
+                    </c:choose>
+                    <shiro:hasPermission name="project:projectRecords:edit">,"canedit3":<c:choose><c:when test="${projectRecords.projectStatus == 5 && fn:contains(projectRecords.leaderIds,fns:getUser().id)}">"1"</c:when><c:otherwise>"0"</c:otherwise></c:choose></shiro:hasPermission>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+    })
+
+    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/projectRecords/getProjectList?projectId=${projectRecords.id}&pageNo=${page.pageNo}&projectName='+$("#projectName").val()+'&leaderNameStr='+$("#leaderNameStr").val()+'&workContractInfo.name='+workContractInfoName+'&workContractInfo.client.name='+workContractInfoClientName+'&beginDate='+$("#beginDate").val()+'&endDate='+$("#endDate").val()+'&projectStatus='+$("#projectStatus").val(),
+                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=reportView&dictType="+d.dictType+"&id="+d.contentPId+"&parentIds="+d.parentIds+"&infoId="+d.id+"','95%', '95%')\">" + d.projectName + "</a>";
+						}
+						}},
+					{field: 'clientName', align:'center', title: '委托方/当前阶段',templet: function(d){
+							if(0 == d.pid){
+								return "<font style = 'font-size:14px;font-weight:500;'>"+d.clientName+"</font>";
+							}else{
+								return "<font>"+d.clientName+"</font>";
+							}
+						}},
+                    {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>";
+							}
+						}},
+					{align:'center', title: '状态',  width:70,templet:function(d){
+							var st = getAuditState(""+d.projectStatus);
+							if(d.pid ==0){
+								if(st.action)
+									var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/project/projectRecords/getProcess?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+								else
+									var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+								return xml;
+							}else if(d.pid !=0){
+								if(st.action)
+									var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/projectcontentinfo/projectcontentinfo/getProcessOne?id=" + d.id + "&projectReportData.id="+ d.id + "&type="+d.projectStatus+"','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+								else
+									var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+								return xml;
+							}else{
+								return '';
+							}
+						}},
+                    {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(d.loginId == d.createId) {
+				if (0 == d.pid) {
+					if(1==d.projectStatus){
+						return [
+							'<a href="javascript:void(0)" onclick="openDialogres(\'暂存项目修改\', \'${ctx}/project/projectRecords/form?id=' + d.id +'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>',
+							'<a href="${ctx}/project/projectRecords/delete?id='+d.id+'" onclick="return confirmx(\'确认要删除该项目信息吗?\', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>',
+						].join('');
+					}
+					else if(2==d.projectStatus){
+						return [
+							'<a href="${ctx}/project/projectRecords/revoke?id='+d.id+ "&processInstanceId=" + d.procId +'" onclick="return confirmx(\'确认要撤回该项目审批吗?\', this.href)"   class="op-btn op-btn-cancel"><i class="glyphicon glyphicon-share-alt"></i> 撤回</a>',
+						].join('');
+					}
+					else if(3==d.projectStatus){
+						return [
+							'<a href="javascript:void(0)" onclick="openDialogreAudit(\'撤回项目调整\', \'${ctx}/project/projectRecords/form?id=' + d.id +'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>',
+							'<a href="${ctx}/project/projectRecords/delete?id='+d.id+'" onclick="return confirmx(\'确认要删除该项目信息吗?\', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>',
+						].join('');
+					}
+					else if(4==d.projectStatus){
+						return [
+							'<a href="javascript:void(0)" onclick="openDialogreAudit(\'驳回项目调整\', \'${ctx}/project/projectRecords/modify?id=' + d.id +'\',\'95%\',\'95%\')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 修改</a>',
+							'<a href="${ctx}/project/projectRecords/delete?id='+d.id+'" onclick="return confirmx(\'确认要删除该项目信息吗?\', this.href)"   class="op-btn op-btn-delete"><i class="fa fa-trash"></i> 删除</a>',
+						].join('');
+					}
+					else if(5==d.projectStatus){
+						return [
+							'<a href="javascript:void(0)" onclick="openDialogreAudit(\'项目变更管理\', \'${ctx}/project/projectRecordsAlter/form?alterBeforeRecords.id=' + d.id +'\',\'95%\',\'95%\')" style=\"color: white;background: darkseagreen\" class="op-btn op-btn-op-btn-revert" ><i class="fa fa-edit"></i> 变更</a>',
+						].join('');
+					}else{
+						return[''].join('');
+					}
+				} else {
+					//
+					if(d.projectStatus == 1){
+						return [
+							'<a href="javascript:void(0)" onclick="openDialogres(\'修改报告\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=report&condition=record&dictType='+d.dictType+'&id='+d.contentPId+'&parentIds='+d.parentIds+'&projectReportData.id='+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 if(d.projectStatus == 2){
+						return [
+							'<a href="${ctx}/projectcontentinfo/projectcontentinfo/cancelInvalidate?infoId='+d.id+'&id='+d.contentPId+'&type=8&condition=record" onclick="return confirmxRefresh(\'确认要撤回该工作内容报告吗?\', this.href)"   class="op-btn op-btn-cancel"><i class="glyphicon glyphicon-share-alt"></i> 撤回</a>',
+						].join('');
+					}else if(d.projectStatus == 3){
+						return [
+							'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改报告\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=report&condition=record&dictType='+d.dictType+'&id='+d.contentPId+'&parentIds='+d.parentIds+'&projectReportData.id='+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 if(d.projectStatus == 4){
+						return [
+							'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改报告\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=reportModify&condition=record&dictType='+d.dictType+'&id='+d.contentPId+'&parentIds='+d.parentIds+'&projectReportData.id='+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 if(d.projectStatus == 5){
+						return [
+							'<a href="javascript:void(0)" onclick="openDialogres(\'报告作废\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=reportInvalid&condition=record&dictType='+d.dictType+'&id='+d.contentPId+'&parentIds='+d.parentIds+'&projectReportData.id='+d.id+'\',\'95%\',\'95%\')" class="op-btn op-btn-invalid" ><i class="fa fa-trash-o"></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/projectRecords/list';
+					}
+				});
+			}
+			top.layer.close(index);
+		});
+		return false;
+	}
+</script>--%>
+</body>
+</html>

+ 3 - 2
src/main/webapp/webpage/modules/projectrecord/implementCompletion/projectCompletionReviewList.jsp

@@ -330,11 +330,12 @@
 					{align:'center', title: '状态',  width:70,templet:function(d){
 							var st = getAuditState(""+d.projectStatus);
 							if(d.pid ==0){
-								if(st.action)
+								/*if(st.action)
 									var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/project/projectRecords/getProcess?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
 								else
 									var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
-								return xml;
+								return xml;*/
+								return '';
 							}else if(d.pid !=0){
 								st = getAuditState(""+d.status);
 								if(st.action)

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

@@ -382,11 +382,18 @@
 				}
 			} else if (d.pid!="0"){
 				if(1 == d.operationSign) {
-					//子级内容
-					return [
-						'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改工作内容\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=content&condition=completion&flag=modify&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('');
+					if(d.status ==null){
+						//子级内容
+						return [
+							'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改工作内容\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=content&condition=early&flag=modify&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{
+						return [
+							'',
+						].join('');
+					}
 				}else{
 					return [
 						'',

+ 3 - 2
src/main/webapp/webpage/modules/projectrecord/implementEarly/projectEarlyReviewList.jsp

@@ -351,11 +351,12 @@
 					{align:'center', title: '状态',  width:70,templet:function(d){
 							var st = getAuditState(""+d.projectStatus);
 							if(d.pid ==0){
-								if(st.action)
+								/*if(st.action)
 									var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/project/projectRecords/getProcess?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
 								else
 									var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
-								return xml;
+								return xml;*/
+								return '';
 							}else if(d.pid !=0){
 								st = getAuditState(""+d.status);
 								if(st.action)

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

@@ -403,11 +403,19 @@
 				}
 			} else if (d.pid!="0"){
 				if(1 == d.operationSign) {
-					//子级内容
-					return [
-						'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改工作内容\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=content&condition=early&flag=modify&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('');
+					if(d.status ==null){
+						//子级内容
+						return [
+							'<a href="javascript:void(0)" onclick="openDialogreAudit(\'修改工作内容\', \'${ctx}/projectcontentinfo/projectcontentinfo/form?view=content&condition=early&flag=modify&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{
+						return [
+							'',
+						].join('');
+					}
+
 				}else{
 					return [
 						'',

+ 2 - 2
src/main/webapp/webpage/modules/projectrecord/workContentFromAndView/projectEarlyForm.jsp

@@ -120,10 +120,10 @@
 										title="签字造价师一" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input required" allowClear="true" notAllowSelectParent="true"/></div>
 				</div>
 				<div class="layui-item layui-col-sm6">
-					<label class="layui-form-label"><span class="require-item">*</span>签字造价师二:</label>
+					<label class="layui-form-label">签字造价师二:</label>
 					<div class="layui-input-block with-icon">
 						<sys:treeselect id="signCostTwo" name="signCostTwo.id" value="${projectReportRecord.signCostTwo.id}" labelName="signCostTwo.name" labelValue="${projectReportRecord.signCostTwo.name}"
-										title="签字造价师二" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input required" allowClear="true" notAllowSelectParent="true"/>
+										title="签字造价师二" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">

+ 2 - 2
src/main/webapp/webpage/modules/projectrecord/workContentFromAndView/projectReportRecordForm.jsp

@@ -120,10 +120,10 @@
 										title="签字造价师一" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input required" allowClear="true" notAllowSelectParent="true"/></div>
 				</div>
 				<div class="layui-item layui-col-sm6">
-					<label class="layui-form-label"><span class="require-item">*</span>签字造价师二:</label>
+					<label class="layui-form-label">签字造价师二:</label>
 					<div class="layui-input-block with-icon">
 						<sys:treeselect id="signCostTwo" name="signCostTwo.id" value="${projectReportRecord.signCostTwo.id}" labelName="signCostTwo.name" labelValue="${projectReportRecord.signCostTwo.name}"
-										title="签字造价师二" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input required" allowClear="true" notAllowSelectParent="true"/>
+										title="签字造价师二" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">

+ 4 - 4
src/main/webapp/webpage/modules/projectrecord/workContentFromAndView/reportForm.jsp

@@ -30,11 +30,11 @@
                     layer.msg('复核标准不能为空', {icon: 5});
                     return false;
 				}
-				var reportType = $("#reportType").val();
+				/*var reportType = $("#reportType").val();
                 if(null == reportType || '' == reportType){
                     layer.msg('签章类型不能为空', {icon: 5});
                     return false;
-                }
+                }*/
 
 				var length = document.getElementById("workBaseDataList");
 				var rows = length.rows.length;
@@ -526,7 +526,7 @@
 									title="签字造价师二" url="/sys/office/treeDataAll?type=3" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
 				</div>
 			</div>--%>
-			<div class="layui-item layui-col-sm6">
+			<%--<div class="layui-item layui-col-sm6">
 				<label class="layui-form-label"><span class="require-item">*</span>签章类型:</label>
 				<div class="layui-input-block">
 					<form:select path="projectReportData.reportType" id="reportType" lay-verify="required"  class="required">
@@ -535,7 +535,7 @@
 						<form:option value="实体章" label="实体章"/>
 					</form:select>
 				</div>
-			</div>
+			</div>--%>
 			<div class="layui-item layui-col-sm6">
 				<label class="layui-form-label">归档状态:</label>
 				<div class="layui-input-block">

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

@@ -73,12 +73,12 @@
 					<input  htmlEscape="false" readonly="true" class="form-control  layui-input" value="${projectcontentinfo.projectReportData.signCostTwo.name}"/>
 				</div>
 			</div>--%>
-			<div class="layui-item layui-col-sm6">
+			<%--<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>--%>
 			<div class="layui-item layui-col-sm6">
 				<label class="layui-form-label">归档状态:</label>
 				<div class="layui-input-block">
@@ -319,7 +319,7 @@
                                             <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>
+											<a href="javascript:void(0);" onclick="preview('查看电子签章信息','${workClientAttachment.url}','90%','90%')" 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>

+ 4 - 4
src/main/webapp/webpage/modules/projectreportnum/projectReportNumList.jsp

@@ -111,11 +111,11 @@
 				url: '${ctx}/projectreportnum/projectReportNum/getReportNumList?projectId=${projectId}&reportType=${reportType}',
 				page: false,
 				cols: [[
-					{field:'index',align:'center',width:120, title: '序号'},
-					{field:'num',align:'center',  title: '报告号'},
-					{field:'stageName',align:'center',  title: '阶段'},
+					{field:'index',align:'center',width:60, title: '序号'},
+					{field:'num',align:'center',width:260,title: '报告号'},
+					{field:'stageName',align:'center',  width:110,title: '阶段'},
 					{field:'typeName',align:'center',  title: '工作内容'},
-					{templet: complain, title: '操作',width:130}
+					{templet: complain, align:'center',title: '操作',width:120}
 				]],
 				done: function () {
 					layer.closeAll('loading');