Explorar o código

合同,立项子项目相关修改,修改请假事件增加司机相关

chenjun hai 8 meses
pai
achega
55486a0790

+ 10 - 0
zjugis-business/src/main/java/com/zjugis/business/bean/entity/Contract.java

@@ -155,6 +155,16 @@ public class Contract extends BaseEntity {
      */
     private String areaManagerId;
 
+    /**
+     * 区域总监
+     */
+    private String areaDirector;
+
+    /**
+     * 区域总监ID
+     */
+    private String areaDirectorId;
+
 
     /**
      * 合同主类型

+ 3 - 0
zjugis-business/src/main/java/com/zjugis/business/bean/response/ContractExcelResponse.java

@@ -166,6 +166,9 @@ public class ContractExcelResponse {
     @ExcelProperty("区域经理")
     private String xsry;
 
+    @ExcelProperty("大区域总监")
+    private String areaDirector;
+
     @ExcelProperty("项目名称")
     private String xmmc;
 

+ 1 - 1
zjugis-business/src/main/java/com/zjugis/business/bean/response/ProjectExcelResponse.java

@@ -66,7 +66,7 @@ public class ProjectExcelResponse {
     @ExcelProperty("合同名称")
     private String contractName;
     @ExcelProperty("合同额")
-    private BigDecimal contractAmount;
+    private BigDecimal virtualAmount;
     @ExcelProperty("已回款")
     private BigDecimal returnAmount;
     @ExcelProperty("应收款")

+ 9 - 0
zjugis-business/src/main/java/com/zjugis/business/flow/contract/controller/vo/ContractVO.java

@@ -153,6 +153,15 @@ public class ContractVO {
      */
     private String areaManagerId;
 
+    /**
+     * 区域总监
+     */
+    private String areaDirector;
+
+    /**
+     * 区域总监ID
+     */
+    private String areaDirectorId;
 
     /**
      * 合同主类型

+ 18 - 8
zjugis-business/src/main/java/com/zjugis/business/flow/leave/event/LeaveEvent.java

@@ -1,9 +1,7 @@
 package com.zjugis.business.flow.leave.event;
 
 import cn.hutool.core.collection.CollectionUtil;
-import com.google.common.base.Strings;
 import com.zjugis.business.converter.leave.LeaveConvert;
-import com.zjugis.business.flow.commoncost.entity.CommonCostDO;
 import com.zjugis.business.flow.leave.entity.LeaveDO;
 import com.zjugis.business.flow.leave.entity.LeaveTimeDO;
 import com.zjugis.business.flow.leave.service.LeaveService;
@@ -18,10 +16,7 @@ import com.zjugis.module.adm.api.attendance.dto.AttendanceSheetUpdateReqDTO;
 import com.zjugis.module.adm.api.attendance.dto.AttendanceTimeDto;
 import com.zjugis.module.system.api.dept.DeptApi;
 import com.zjugis.module.system.api.dept.PostApi;
-import com.zjugis.module.system.api.dept.dto.DeptRespDTO;
 import com.zjugis.module.system.api.dept.dto.PostRespDTO;
-import com.zjugis.module.system.api.permission.RoleApi;
-import com.zjugis.module.system.api.permission.dto.RoleRespDto;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -30,7 +25,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
-import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.*;
 
@@ -78,7 +72,7 @@ public class LeaveEvent extends BaseController {
                 String flowDesc = StringUtils.join(Arrays.asList(entity.getUserNickname(), applyTime, entity.getLeaveReason(), entity.getLeaveDays()), "/");
                 entity.setFlowStatus(FLOW_PROCESS);
                 leaveService.updateLeave(LeaveConvert.INSTANCE.convert(entity));
-                workflowClient.saveFlowDescribe(flowInstanceId,flowDesc);
+                workflowClient.saveFlowDescribe(flowInstanceId, flowDesc);
                 return ok("true");
             } else {
                 throw new BusinessException("执行事件出错,请联系管理员!");
@@ -316,7 +310,23 @@ public class LeaveEvent extends BaseController {
             LeaveDO entity = leaveService.findByInstanceId(flowInstanceId);
             List<PostRespDTO> postList = postApi.getPostByUser(entity.getUserId()).getCheckedData();
             Set<String> postCodes = convertSet(postList, PostRespDTO::getCode);
-            if (entity != null && (CollectionUtil.isEmpty(postCodes) || CollectionUtil.contains(postCodes, "user"))) {
+            if (entity != null && (CollectionUtil.isEmpty(postCodes) || CollectionUtil.contains(postCodes, "user")) && !CollectionUtil.contains(postCodes, "sj")) {
+                return "true";
+            }
+            return "false";
+        } catch (Exception ex) {
+            return error(ex.getMessage(), ErrorCode.DEFAULT);
+        }
+    }
+
+    @PostMapping("/toDriver")
+    public String toDriver(@ParamModel Map flowInstance, @ParamModel Map flowDirectionInstance, @ParamModel Map previousActivityInstance, @ParamModel Map previousGatewayInstance, @ParamModel Map nextActivityTemplate, @ParamModel Map nextGatewayInstance) {
+        try {
+            String flowInstanceId = flowInstance.get("id").toString();
+            LeaveDO entity = leaveService.findByInstanceId(flowInstanceId);
+            List<PostRespDTO> postList = postApi.getPostByUser(entity.getUserId()).getCheckedData();
+            Set<String> postCodes = convertSet(postList, PostRespDTO::getCode);
+            if (entity != null && CollectionUtil.contains(postCodes, "sj")) {
                 return "true";
             }
             return "false";

+ 15 - 0
zjugis-business/src/main/java/com/zjugis/business/flow/project/controller/FlowProjectController.java

@@ -14,6 +14,7 @@ import com.zjugis.framework.workflow.model.BaseController;
 import com.zjugis.framework.workflow.model.Grid;
 import com.zjugis.framework.workflow.spring.resovler.ParamModel;
 import com.zjugis.framework.workflow.workflow.WorkFlow;
+import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -84,4 +85,18 @@ public class FlowProjectController extends BaseController {
         projectMilestoneService.updateList(milestoneList,project.getId());
         return success(projectFlowService.updateById(project));
     }
+
+    @WorkFlow(isReceiveMaterial = true, isReceiveOpinion = true)
+    @GetMapping("/childProject")
+    public String childProject(String flowInstanceId, String userId) throws Exception {
+        Map<String, Object> map = projectFlowService.getChildParams(flowInstanceId);
+        return resultPage(map);
+    }
+
+    @GetMapping("/childProcess")
+    @Operation(summary = "子项目流程发起")
+    public CommonResult<String> childProcess(String projectId) {
+        String url = projectFlowService.childProcess(projectId);
+        return CommonResult.success(url);
+    }
 }

+ 108 - 7
zjugis-business/src/main/java/com/zjugis/business/flow/project/service/FlowProjectService.java

@@ -1,8 +1,11 @@
 package com.zjugis.business.flow.project.service;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson2.JSON;
+import com.zjugis.business.bean.entity.Contract;
 import com.zjugis.business.bean.entity.Project;
 import com.zjugis.business.bean.entity.ProjectMilestone;
+import com.zjugis.business.bean.response.ProjectResponse;
 import com.zjugis.business.constants.DictConstants;
 import com.zjugis.business.constants.FlowStatusConstants;
 import com.zjugis.business.constants.XmztConstants;
@@ -10,13 +13,17 @@ import com.zjugis.business.converter.ProjectStatus.ProjectStatusConvert;
 import com.zjugis.business.converter.common.SelectConvert;
 import com.zjugis.business.flow.project.controller.vo.ProjectVO;
 import com.zjugis.business.mapper.ProjectMapper;
+import com.zjugis.business.service.ContractService;
 import com.zjugis.business.service.ProjectMilestoneService;
 import com.zjugis.business.service.ProjectService;
+import com.zjugis.framework.common.exception.ServiceException;
 import com.zjugis.framework.common.pojo.CommonResult;
 import com.zjugis.framework.security.core.util.SecurityFrameworkUtils;
 import com.zjugis.framework.workflow.model.IFlowInstance;
+import com.zjugis.framework.workflow.model.ProcessDto;
 import com.zjugis.framework.workflow.rpc.remote.WorkflowClient;
 import com.zjugis.framework.workflow.utils.Select;
+import com.zjugis.framework.workflow.utils.UrlUtils;
 import com.zjugis.module.system.api.dept.DeptApi;
 import com.zjugis.module.system.api.dict.DictDataApi;
 import com.zjugis.module.system.api.dict.dto.DictDataRespDTO;
@@ -29,6 +36,8 @@ import org.springframework.stereotype.Service;
 import java.time.LocalDate;
 import java.util.*;
 
+import static com.zjugis.business.constants.ResponseStatusEnum.WORKFLOW_ERROR;
+
 /**
  * @author ljy
  * @version 1.0
@@ -42,21 +51,18 @@ public class FlowProjectService {
 
     @Autowired
     ProjectService projectService;
-
     @Autowired
     ProjectMilestoneService projectMilestoneService;
-
     @Autowired
     ProjectMapper projectMapper;
-
     @Autowired
     WorkflowClient workflowClient;
-
     @Autowired
     AdminUserApi adminUserApi;
-
     @Autowired
     DeptApi deptApi;
+    @Autowired
+    private ContractService contractService;
 
     public Map<String, Object> getFormParams(String flowInstanceId) {
         String userId = SecurityFrameworkUtils.getLoginUserId();
@@ -85,6 +91,53 @@ public class FlowProjectService {
         return createModelMap();
     }
 
+    public Map<String, Object> getChildParams(String flowInstanceId) {
+        String userId = SecurityFrameworkUtils.getLoginUserId();
+        CommonResult<IFlowInstance> flowResult = workflowClient.flowInstance(flowInstanceId);
+        if (flowResult.isSuccess()) {
+            Project entity = projectService.selectByInstanceId(flowInstanceId);
+            if (Objects.isNull(entity)) {
+                entity = new Project();
+                entity.setInstanceId(flowInstanceId);
+                entity.setLxsj(LocalDate.now());
+                entity.setIsSign(1);
+                entity.setWorkerId(userId);
+                entity.setFlowStatus(FlowStatusConstants.FLOW_NOT_START);
+                entity.setXmzt(XmztConstants.STATUS_APPLY);
+                CommonResult<AdminUserRespDTO> result = adminUserApi.getUser(userId);
+                AdminUserRespDTO user = result.getCheckedData();
+                entity.setApplyWorkerName(user.getNickname());
+                entity.setApplyWorkerDeptId(user.getDeptId());
+                entity.setApplyWorkerDept(StringUtils.isBlank(user.getDeptName()) ? deptApi.getDept(user.getDeptId()).getCheckedData().getName() : user.getDeptName());
+                projectService.insert(entity);
+            }
+            return createChildMap(flowInstanceId, entity, userId);
+        }
+        return createModelMap();
+    }
+
+    private Map<String, Object> createChildMap(String flowInstanceId, Project entity, String userId) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("formEntity", entity);
+        if (StringUtils.isNotEmpty(entity.getPid())) {
+            Project parent = projectService.selectById(entity.getPid());
+            map.put("parent", parent);
+            Contract contract = contractService.selectMainByProject(entity.getPid());
+            map.put("parentContract", contract);
+        }
+        List<ProjectMilestone> milestoneList = projectMilestoneService.list(entity.getId());
+        map.put("milestoneListJson", JSON.toJSONString(milestoneList));
+        List<Select> hyTypeList = SelectConvert.INSTANCE.convertList(dictDataApi.getDictDataList(DictConstants.TYPE_HY).getCheckedData());
+        map.put("hyTypeList", JSON.toJSONString(hyTypeList));
+        if (entity.getHyId() != null) {
+            CommonResult<DictDataRespDTO> result = dictDataApi.getDictData(DictConstants.TYPE_HY, String.valueOf(entity.getHyId()));
+            if (result.isSuccess()) {
+                map.put("hyName", result.getData().getLabel());
+            }
+        }
+        return map;
+    }
+
     private Map<String, Object> createModelMap() {
         Map<String, Object> map = new HashMap<>();
         map.put("formEntity", new HashMap<>());
@@ -109,8 +162,8 @@ public class FlowProjectService {
 
     public int updateById(Project project) {
         int res = projectMapper.updateById(project);
-        String flowDesc = StringUtils.join(Arrays.asList(project.getXmmc(), project.getLxsj(),project.getXmjl()), "/");
-        workflowClient.saveFlowDescribe(project.getInstanceId(),flowDesc);
+        String flowDesc = StringUtils.join(Arrays.asList(project.getXmmc(), project.getLxsj(), project.getXmjl()), "/");
+        workflowClient.saveFlowDescribe(project.getInstanceId(), flowDesc);
         return res;
     }
 
@@ -121,4 +174,52 @@ public class FlowProjectService {
         vo.setDetail(milestoneList);
         return vo;
     }
+
+    public String childProcess(String projectId) {
+        String userId = SecurityFrameworkUtils.getLoginUserId();
+        String mark = "zxmsq";
+        ProcessDto processDto = new ProcessDto();
+        processDto.setFlowTemplateMark(mark);
+        processDto.setPromoterId(userId);
+        String returnUrl = workflowClient.createProcess(processDto);
+        if (returnUrl.contains("error_code")) {
+            throw new ServiceException(WORKFLOW_ERROR.getCode(), returnUrl);
+        }
+        CommonResult<IFlowInstance> flowResult = workflowClient.flowInstance(UrlUtils.getParam(returnUrl, "flowInstanceId"));
+        if (flowResult.isSuccess()) {
+            Project entity = new Project();
+            Project parent = projectService.selectById(projectId);
+            ProjectResponse projectResponse = projectService.selectWithChildren(projectId);
+            List<ProjectResponse> children = projectResponse.getChildren();
+            String xmbh = projectResponse.getXmbh();
+            if(CollectionUtil.isEmpty(children)){
+                entity.setXmbh(xmbh+"-1");
+            }else {
+                int i = children.size() + 1;
+                entity.setXmbh(xmbh+"-"+i);
+            }
+            entity.setXzqdm(parent.getXzqdm());
+            entity.setProjectTypeId(parent.getProjectTypeId());
+            entity.setProjectTypeName(parent.getProjectTypeName());
+            entity.setHyId(parent.getHyId());
+            entity.setXsryId(parent.getXsryId());
+            entity.setBelongCompanyid(parent.getBelongCompanyid());
+            entity.setBelongCompanyname(parent.getBelongCompanyname());
+            entity.setShareRatio(parent.getShareRatio());
+            entity.setPid(projectId);
+            entity.setInstanceId(UrlUtils.getParam(returnUrl, "flowInstanceId"));
+            entity.setLxsj(LocalDate.now());
+            entity.setIsSign(1);
+            entity.setWorkerId(userId);
+            entity.setFlowStatus(FlowStatusConstants.FLOW_NOT_START);
+            entity.setXmzt(XmztConstants.STATUS_APPLY);
+            CommonResult<AdminUserRespDTO> result = adminUserApi.getUser(userId);
+            AdminUserRespDTO user = result.getCheckedData();
+            entity.setApplyWorkerName(user.getNickname());
+            entity.setApplyWorkerDeptId(user.getDeptId());
+            entity.setApplyWorkerDept(StringUtils.isBlank(user.getDeptName()) ? deptApi.getDept(user.getDeptId()).getCheckedData().getName() : user.getDeptName());
+            projectService.insert(entity);
+        }
+        return returnUrl;
+    }
 }

+ 2 - 2
zjugis-business/src/main/resources/mapper/oracle/ContractMapper.xml

@@ -346,7 +346,7 @@
         SELECT c.MAIN_TYPE,c.SECOND_TYPE,c.AMOUNT_STATUS,c.NAME,c.ASSIGNEE_NAME,c.CLIENT_NAME,c.IS_SIGN,
         c.CONTRACT_NUMBER,c.CONTRACT_ON,c.CONTRACT_OFF,c.PAYMENT_TERMS,c.TAX_HSJE_JSKF,c.TAX_HSJE_FW,c.TAX_HSJE_RJCP,
         c.TAX_HSJE_YJ,c.TAX_HSJE_TOTAL,c.TAX_ZHSL,c.TAX_BHSZE,c.TAX_SOFTPATENT,c.WHTK_I_WHQ,c.WHTK_I_MFWH,
-        c.WHTK_WHRQ_BEGIN,c.WHTK_WHRQ_END,c.CREATE_TIME,c.BANKACCOUNT,c.SPECIAL_CLAUSE,c.SIGN_WAY,c.IS_BUSINESS_UNIT,c.BZ,c.ATTACH_RATIO,c.ATTACH_AMOUNT,
+        c.WHTK_WHRQ_BEGIN,c.WHTK_WHRQ_END,c.CREATE_TIME,c.BANKACCOUNT,c.SPECIAL_CLAUSE,c.SIGN_WAY,c.IS_BUSINESS_UNIT,c.BZ,c.ATTACH_RATIO,c.ATTACH_AMOUNT,C.AREA_DIRETCOR,
         COALESCE(c.VIRTUAL_AMOUNT, c.CONTRACT_AMOUNT) as CONTRACT_AMOUNT,
         COALESCE(PA.invoiceAmount,0) as invoiceAmount,
         COALESCE(PA.returnAmount,0) as returnAmount,
@@ -443,7 +443,7 @@
         SELECT c2.MAIN_TYPE,c2.SECOND_TYPE,c2.AMOUNT_STATUS,c.NAME,c2.ASSIGNEE_NAME,c2.CLIENT_NAME,c2.IS_SIGN,
         c.CONTRACT_NUMBER,c2.CONTRACT_ON,c2.CONTRACT_OFF,c2.PAYMENT_TERMS,c2.TAX_HSJE_JSKF,c2.TAX_HSJE_FW,c2.TAX_HSJE_RJCP,
         c2.TAX_HSJE_YJ,c2.TAX_HSJE_TOTAL,c2.TAX_ZHSL,c2.TAX_BHSZE,c2.TAX_SOFTPATENT,c2.WHTK_I_WHQ,c2.WHTK_I_MFWH,
-        c2.WHTK_WHRQ_BEGIN,c2.WHTK_WHRQ_END,c.CREATE_TIME,c2.BANKACCOUNT,c2.SPECIAL_CLAUSE,c2.SIGN_WAY,c2.IS_BUSINESS_UNIT,c2.BZ,c2.ATTACH_RATIO,c2.ATTACH_AMOUNT,
+        c2.WHTK_WHRQ_BEGIN,c2.WHTK_WHRQ_END,c.CREATE_TIME,c2.BANKACCOUNT,c2.SPECIAL_CLAUSE,c2.SIGN_WAY,c2.IS_BUSINESS_UNIT,c2.BZ,c2.ATTACH_RATIO,c2.ATTACH_AMOUNT,c2.AREA_DIRETCOR,
         PA.VIRTUAL_AMOUNT as CONTRACT_AMOUNT,PA.INVOICE_AMOUNT,PA.RETURN_AMOUNT,PA.RECEIVABLE_AMOUNT,PA.CONTRACT_BALANCE,
         t1.maxd as returnDate,
         t2.subAmount,t2.subPayAmount,

+ 1 - 1
zjugis-business/src/main/resources/mapper/oracle/ProjectMapper.xml

@@ -409,7 +409,7 @@
     </select>
 
     <select id="excelList" resultType="com.zjugis.business.bean.response.ProjectExcelResponse">
-        SELECT A.FULL_NAME as xzqmc,P.*,PT.FULL_NAME as projectType,D.NAME as zrbm,T1.contractName,T1.contractNumber,PA.CONTRACT_AMOUNT,PA.RETURN_AMOUNT,PA.RECEIVABLE_AMOUNT,PA.CONTRACT_BALANCE,PA.PROJECT_COST,PA.REIMBURSEMENT_COST,PA.TRAVEL_COST,PA.SUBCONTRACT_COST,PA.OUTSOURCE_COST,PA.PAYMENT_COST,P.PROJECT_STATUS_REASON
+        SELECT A.FULL_NAME as xzqmc,P.*,PT.FULL_NAME as projectType,D.NAME as zrbm,T1.contractName,T1.contractNumber,PA.VIRTUAL_AMOUNT,PA.RETURN_AMOUNT,PA.RECEIVABLE_AMOUNT,PA.CONTRACT_BALANCE,PA.PROJECT_COST,PA.REIMBURSEMENT_COST,PA.TRAVEL_COST,PA.SUBCONTRACT_COST,PA.OUTSOURCE_COST,PA.PAYMENT_COST,P.PROJECT_STATUS_REASON
         FROM PROJECT P
         LEFT JOIN (SELECT PROJECT_ID,MAX(ID) as ID,
                     REPLACE(WMSYS.WM_CONCAT(TO_CHAR(NAME)), ',', '/') as contractName,

+ 18 - 0
zjugis-business/src/main/resources/templates/FlowContract/apply.ftl

@@ -510,6 +510,24 @@ styles=[ '/flow/css/formCommon.css', '/OwCommon/OwCommon.css','/timeSelector/Tim
                               </td>
                           <#-- <td>--> <#-- <div class="form-label">合同金额:
           </div>--> <#-- </td>--> <#-- <td>--> <#-- <div class="form-group">--> <#-- <div class="form-item">--> <#-- <div class="z-comp-input" name="contract$contractAmount">--> <#-- <input type="text" value="${formEntity.contractAmount!}">--> <#-- </div>--> <#-- </div>--> <#-- </div>--> <#-- </td>--> </tr>
+                          <tr>
+                              <td class="th">
+                                  <div class="form-label">大区域总监:</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="z-comp-selecttree" name="areaDirector">
+                                          <input type="hidden" name="contract$areaDirectorId" value="${formEntity.areaDirectorId!}">
+                                          <input type="hidden" name="contract$areaDirector" value="${formEntity.areaDirector!}">
+                                          <div class="z-inputselect-bar">
+                                              <span></span><i></i>
+                                          </div>
+                                      </div>
+                                  </div>
+                              </td>
+                              <td class="th"></td>
+                              <td></td>
+                          </tr>
                       </table>
                   </div>
               </div>

+ 18 - 0
zjugis-business/src/main/resources/templates/FlowContract/js/apply.js

@@ -267,6 +267,7 @@
                 if(res && res.length > 0){
                     // selecttree("[name='areaManager']",res,onClear,clickAreaManager,setAreaManager,allowUserClick,{ "Y": "s", "N": "s" })
                     selecttree("[name='areaManager']",res,clickAreaManager,allowUserClick,onClear,setAreaManager)
+                    selecttree("[name='areaDirector']",res,clickAreaDirector,allowUserClick,onAreaDirectorClear,setAreaDirector)
                 }
             },
             error: function () {
@@ -279,6 +280,11 @@
         $("[name='contract$areaManager']").val('');
     }
 
+    function onAreaDirectorClear(){
+        $("[name='contract$areaDirectorId']").val('');
+        $("[name='contract$areaDirector']").val('');
+    }
+
     function setAreaManager(){
         var ids = $("[name='contract$areaManagerId']").val();
         if(ids){
@@ -286,6 +292,13 @@
         }
     }
 
+    function setAreaDirector(){
+        var ids = $("[name='contract$areaDirectorId']").val();
+        if(ids){
+            z.ui.selecttree("[name='areaDirector']").setValue(ids.split(","));
+        }
+    }
+
     // function clickAreaManager(even, treeId, treeNode) {
     //         var ids = [];
     //         var names = [];
@@ -300,6 +313,11 @@
     //         }
     // }
 
+    function clickAreaDirector(even, treeId, treeNode) {
+        $("[name='contract$areaDirectorId']").val(treeNode.id);
+        $("[name='contract$areaDirector']").val(treeNode.name);
+    }
+
     function clickAreaManager(even, treeId, treeNode) {
         $("[name='contract$areaManagerId']").val(treeNode.id);
         $("[name='contract$areaManager']").val(treeNode.name);

+ 370 - 0
zjugis-business/src/main/resources/templates/FlowProject/childProject.ftl

@@ -0,0 +1,370 @@
+<@w.workFlow javascripts=['/FlowProject/js/childProject.js','/flow/js/formCommon.js', '/OwCommon/OwCommon.js']
+styles=[ '/flow/css/formCommon.css', '/OwCommon/OwCommon.css' ]>
+  <div class="z-position form-boss ow-tabs" name="flow-form">
+      <ul class="ow-tab-nav">
+          <li z-tabindex="0" class="ow-tab-item on" data-name="jbxx">基础信息</li>
+    <#if WORKFLOW.OPINION! !="">
+        <li z-tabindex="1" class="ow-tab-item" data-name="yj">审批意见</li>
+    </#if>
+      </ul>
+      <div class="ow-tab-scroll z-tab-content">
+          <div class="ow-tab-content on" name="jbxx">
+              <div class="z-form-row" style="display: none;">
+                  <input type="text" value="${formEntity.instanceId!}" name="project$instanceId">
+                  <input type="text" value="${formEntity.id!}" name="project$id">
+              </div>
+              <div class="form-title" style="margin-top: 0px;">
+                  <div class="form-icon">
+                      <img src="/imgs/titleIcon.png" alt="">
+                      <span>申请信息</span>
+                  </div>
+                  <div class="form-btn">
+                  </div>
+              </div>
+              <div class="jbxx-box jbxx-box-flex">
+                  <table class="jbxx-table-info">
+                      <tr>
+                          <td class="th">
+                              <div class="form-label">申请人:</div>
+                          </td>
+                          <td>
+                              <div class="form-group">
+                                  <div class="form-item">
+                                      <div class="z-comp-input z-readonly" name="project$applyWorkerName">
+                                          <input type="text" value="${formEntity.applyWorkerName!}">
+                                      </div>
+                                  </div>
+                              </div>
+                          </td>
+                          <td class="th">
+                              <div class="form-label">申请人部门:</div>
+                          </td>
+                          <td>
+                              <div class="form-group">
+                                  <div class="form-item">
+                                      <div class="z-comp-input z-readonly" name="project$applyWorkerDept">
+                                          <input type="text" value="${formEntity.applyWorkerDept!}">
+                                      </div>
+                                  </div>
+                              </div>
+                          </td>
+                      </tr>
+                      <tr>
+                          <td class="th">
+                              <div class="form-label">申请时间:</div>
+                          </td>
+                          <td>
+                              <div class="form-group">
+                                  <div class="z-comp-date z-readonly" name="project$lxsj">
+                                      <input type="text" value="${formEntity.lxsj!}">
+                                  </div>
+                              </div>
+                          </td>
+                          <td class="th"></td>
+                          <td></td>
+                      </tr>
+                  </table>
+              </div>
+              <div class="form-title">
+                  <div class="form-icon">
+                      <img src="/imgs/titleIcon.png" alt="">
+                      <span>主项目信息</span>
+                  </div>
+                  <div class="form-btn">
+                  </div>
+              </div>
+              <div class="qjsjxx-box jbxx-box-flex">
+                  <div class="jbxx-box">
+                      <table class="jbxx-table-info">
+                          <tr>
+                              <td class="th">
+                                  <div class="form-label">主项目名称:</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="form-item">
+                                          <div class="z-comp-input z-readonly" name="parent$xmmc">
+                                              <input type="text" value="${parent.xmmc!}">
+                                          </div>
+                                      </div>
+                                  </div>
+                              </td>
+                              <td class="th">
+                                  <div class="form-label">主项目编号:</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="form-item btns-form-box">
+                                          <div class="z-comp-input z-readonly" name="parent$xmbh">
+                                              <input type="text" value="${parent.xmbh!}">
+                                          </div>
+                                      </div>
+                                  </div>
+                              </td>
+                          </tr>
+                          <tr>
+                              <td class="th">
+                                  <div class="form-label">责任部门:</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="z-comp-selecttree z-readonly" name="parentZrbm">
+                                          <input type="hidden" name="parent$zrbmId" value="${parent.zrbmId!}">
+                                          <input type="hidden" name="parent$zrbm" value="${parent.zrbm!}">
+                                          <div class="z-inputselect-bar">
+                                              <span> ${parent.zrbm!} </span><i></i>
+                                          </div>
+                                      </div>
+                                  </div>
+                              </td>
+                              <td class="th">
+                                  <div class="form-label">项目经理:</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="z-comp-selecttree z-readonly" name="parentXmjl">
+                                          <input type="hidden" name="parent$xmjlId" value="${parent.xmjlId!}">
+                                          <input type="hidden" name="parent$xmjl" value="${parent.xmjl!}">
+                                          <div class="z-inputselect-bar">
+                                              <span> ${parent.xmjl!} </span><i></i>
+                                          </div>
+                                      </div>
+                                  </div>
+                              </td>
+                          </tr>
+                          <tr>
+                              <td class="th">
+                                  <div class="form-label">主项目产值(元):</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="z-comp-input z-readonly" name="prarent$outputValue">
+                                          <input type="text" value="${parent.outputValue!}">
+                                      </div>
+                                  </div>
+                              </td>
+                          </tr>
+                      </table>
+                  </div>
+              </div>
+              <div class="form-title">
+                  <div class="form-icon">
+                      <img src="/imgs/titleIcon.png" alt="">
+                      <span>合同信息</span>
+                  </div>
+                  <div class="form-btn">
+                  </div>
+              </div>
+              <div class="qjsjxx-box jbxx-box-flex">
+                  <div class="jbxx-box">
+                      <table class="jbxx-table-info">
+                          <tr>
+                              <td class="th">
+                                  <div class="form-label">合同名称:</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="form-item">
+                                          <div class="z-comp-input z-readonly" name="parentContract$name">
+                                              <input type="text" value="${parentContract.name!}">
+                                          </div>
+                                      </div>
+                                  </div>
+                              </td>
+                              <td class="th">
+                                  <div class="form-label">合同编号:</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="form-item btns-form-box">
+                                          <div class="z-comp-input z-readonly" name="parentContract$contractNumber">
+                                              <input type="text" value="${parentContract.contractNumber!}">
+                                          </div>
+                                      </div>
+                                  </div>
+                              </td>
+                          </tr>
+                          <tr>
+                              <td class="th">
+                                  <div class="form-label">合同金额(元):</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="z-comp-input z-readonly" name="parentContract$contractAmount">
+                                          <input type="text" value="${parentContract.contractAmount!}">
+                                      </div>
+                                  </div>
+                              </td>
+                              <td class="th">
+                                  <div class="form-label">销售经理:</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="form-item btns-form-box">
+                                          <div class="z-comp-selecttree z-readonly" name="parentContractAreaManager">
+                                              <input type="hidden" name="parentContract$xmjlId" value="${parentContract.areaManagerId!}">
+                                              <input type="hidden" name="parentContract$xmjl" value="${parentContract.areaManager!}">
+                                              <div class="z-inputselect-bar">
+                                                  <span> ${parentContract.areaManager!} </span><i></i>
+                                              </div>
+                                          </div>
+                                      </div>
+                                  </div>
+                              </td>
+                          </tr>
+                      </table>
+                  </div>
+              </div>
+              <div class="form-title">
+                  <div class="form-icon">
+                      <img src="/imgs/titleIcon.png" alt="">
+                      <span>子项目信息</span>
+                  </div>
+                  <div class="form-btn">
+                  </div>
+              </div>
+              <div class="qjsjxx-box jbxx-box-flex">
+                  <div class="jbxx-box">
+                      <table class="jbxx-table-info">
+                          <tr>
+                              <td class="th">
+                                  <div class="form-label">子项目名称:</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="form-item">
+                                          <div class="z-comp-input" name="project$xmmc">
+                                              <input type="text" value="${formEntity.xmmc!}">
+                                          </div>
+                                      </div>
+                                  </div>
+                              </td>
+                              <td class="th">
+                                  <div class="form-label">子项目编号:</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="form-item btns-form-box">
+                                          <div class="z-comp-input z-readonly" name="project$xmbh">
+                                              <input type="text" value="${formEntity.xmbh!}">
+                                          </div>
+                                      </div>
+                                  </div>
+                              </td>
+                          </tr>
+                          <tr>
+                              <td class="th">
+                                  <div class="form-label">责任部门:</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="z-comp-selecttree" name="zrbm">
+                                          <input type="hidden" name="project$zrbmId" value="${formEntity.zrbmId!}">
+                                          <input type="hidden" name="project$zrbm" value="${formEntity.zrbm!}">
+                                          <div class="z-inputselect-bar">
+                                              <span> ${formEntity.zrbm!} </span><i></i>
+                                          </div>
+                                      </div>
+                                  </div>
+                              </td>
+                              <td class="th">
+                                  <div class="form-label">项目经理:</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="z-comp-selecttree" name="xmjl">
+                                          <input type="hidden" name="project$xmjlId" value="${formEntity.xmjlId!}">
+                                          <input type="hidden" name="project$xmjl" value="${formEntity.xmjl!}">
+                                          <div class="z-inputselect-bar">
+                                              <span> ${formEntity.xmjl!} </span><i></i>
+                                          </div>
+                                      </div>
+                                  </div>
+                              </td>
+                          </tr>
+                          <tr>
+                              <td class="th">
+                                  <div class="form-label">预估工期(天):</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="form-item">
+                                          <div class="z-comp-input" name="project$yggq">
+                                              <input type="text" value="${formEntity.yggq!}">
+                                          </div>
+                                      </div>
+                                  </div>
+                              </td>
+                              <td class="th">
+                                  <div class="form-label">子项目产值(元):</div>
+                              </td>
+                              <td>
+                                  <div class="form-group">
+                                      <div class="form-item">
+                                          <div class="z-comp-input" name="project$outputValue">
+                                              <input type="text" value="${formEntity.outputValue!}">
+                                          </div>
+                                      </div>
+                                  </div>
+                              </td>
+                          </tr>
+                          <tr>
+                              <td class="th">
+                                  <div class="form-label">备注:</div>
+                              </td>
+                              <td colspan="3">
+                                  <div class="form-group">
+                                      <div class="form-item" style="margin: 10px 0;">
+                                          <div class="z-comp-textarea" name="project$bz">
+                                              <textarea>${formEntity.bz!}</textarea>
+                                          </div>
+                                      </div>
+                                  </div>
+                              </td>
+                          </tr>
+                      </table>
+                  </div>
+              </div>
+          </div>
+      <#if WORKFLOW.OPINION! !="">
+      <div class="ow-tab-content" name="yj">
+
+          <div class="form-title">
+              <div class="form-icon">
+                  <img src="/imgs/titleIcon.png" alt="">
+                  <span>审批意见</span>
+              </div>
+              <div class="form-btn">
+              </div>
+          </div>
+          <div class="qjsjxx-box">
+              <div class="z-form-wrap" name="opinionsDiv">
+                  <div class="z-form-row"> ${WORKFLOW.OPINION!} </div>
+              </div>
+          </div>
+      </div>
+      </#if>
+      </div>
+  </div>
+  <style type="text/css">
+      .lyfc .z-comp-radio{
+          display: flex;
+          align-items: center;
+      }
+      .lyfc .flexInputTwo{
+          display: flex;
+          align-items: center;
+      }
+      .lyfc .flexInputTwo input{
+          border: 0;
+          width: 30px;
+          border-bottom: 1px solid #000;
+      }
+      .lyfc .flexInputTwo i{
+          margin-top: 0;
+      }
+  </style>
+  <script>
+      window.milestoneList = '${milestoneListJson!}';
+  </script>
+</@w.workFlow>

+ 170 - 0
zjugis-business/src/main/resources/templates/FlowProject/js/childProject.js

@@ -0,0 +1,170 @@
+(function () {
+    var lists = [];
+    var projectId = $("[name='project$id']").val()
+    let viewState = z.ui.comm.getUrlParam("_o");
+    let isFirst = z.ui.comm.getUrlParam("isFirst");
+    let flowInstanceId = "";
+    let isView = "";
+    window.onload = function () {
+        flowInstanceId = z.ui.comm.getUrlParam("flowInstanceId");
+        bindEvents();
+    };
+
+    function bindEvents() {
+        initData();
+        z.workflow.saveBtn.addListener("onSaveClick", submit);
+    }
+
+    function initData() {
+        initXmjlAndXsry();
+        initZrbm();
+    }
+
+
+    function submit(all, istransfer) {
+        var postData = z.ui.form.getFormFields("[name=flow-form]", { validatorRequired: istransfer });
+        if (postData === false) {
+            all({ success: false });
+            return;
+        }
+        var milestoneFlag = false;
+        var milestoneList = new Array()
+        for (let key of Object.keys(postData)) {
+            let mealName = postData[key];
+            if (key.startsWith("ProjectMilestone")) {
+                mealName.projectId = projectId;
+                mealName.state = 0;
+                milestoneList.push(z.ui.form.childStringify(mealName));
+                milestoneFlag  =true;
+            }
+        }
+        if(istransfer && !milestoneFlag){
+            all({success: false, errorMsg: "请填写项目里程碑!"});
+            return;
+        }
+        postData.milestoneList = milestoneList;
+        z.ui.ajax({
+            url: z.ui.comm.getEntranceUrl("/flow/project/update"),
+            data: z.ui.form.childStringify(postData),
+            success: function () {
+                all({ success: true });
+            },
+            error: function () {
+                all({ success: false });
+            }
+        })
+    }
+
+    function initXmjlAndXsry() {
+        z.ui.ajax({
+            type: "get",
+            url: "/common/user-tree",
+            data: {},
+            success: function (res) {
+                if (res && res.length > 0) {
+                    selecttree("[name='xmjl']", res, clickXmjl, allowChildClick,null,setXmjl)
+                }
+            },
+            error: function () {
+            }
+        })
+    }
+
+    function setXmjl(){
+        var id = $("[name='project$xmjlId']").val();
+        if(id){
+            z.ui.selecttree("[name='xmjl']").setValue(id);
+        }
+    }
+
+
+    function initZrbm() {
+        z.ui.ajax({
+            type: "get",
+            url: "/common/dept-tree",
+            data: {},
+            success: function (res) {
+                if (res && res.length > 0) {
+                    selecttree("[name='zrbm']", res, clickZrbm,null,null,setZrbm)
+                }
+            },
+            error: function () {
+            }
+        })
+    }
+
+    function setZrbm(){
+        var id = $("[name='project$zrbmId']").val();
+        if(id){
+            z.ui.selecttree("[name='zrbm']").setValue(id);
+        }
+    }
+
+
+    function detailReadonly(i, isBool = true,prefix) {
+        if (isBool) {
+            $("#delBtn_" + i).css("display", "none");
+            $("#editBtn_" + i).css("display", "none");
+        }
+        let detailElement = document.getElementById(prefix + i);
+        let detailInput = detailElement.getElementsByTagName("input");
+        for (let j = 0; j < detailInput.length; j++) {
+            detailInput[j].disabled = true;
+            detailInput[j].className += "z-readonly"
+        }
+    }
+
+
+    function detailWrite(i) {
+        //财务审核时可以核减修改金额
+        let detailElement = document.getElementById("project_milestone_" + i);
+        let detailInput = detailElement.getElementsByTagName("input");
+        for (let j = 0; j < detailInput.length; j++) {
+            detailInput[j].disabled = false;
+            $(detailInput[j]).removeClass("z-readonly")
+        }
+    }
+
+
+    function clickXmjl(even, treeId, treeNode) {
+        if (treeNode.type === 3) {
+            $("[name='project$xmjl']").val(treeNode.name);
+            $("[name='project$xmjlId']").val(treeNode.id);
+        }
+    }
+
+
+    function clickXsry(even, treeId, treeNode) {
+        if (treeNode.type === 3) {
+
+            $("[name='project$xsry']").val(treeNode.name);
+            $("[name='project$xsryId']").val(treeNode.id);
+        }
+    }
+
+    function clickProjectType(even, treeId, treeNode) {
+        $("[name='project$projectTypeName']").val(treeNode.name);
+        $("[name='project$projectTypeId']").val(treeNode.id);
+    }
+
+    function clickArea(even, treeId, treeNode) {
+        $("[name='project$xzqmc']").val(treeNode.name);
+        $("[name='project$xzqdm']").val(treeNode.id);
+    }
+
+    function clickZrbm(even, treeId, treeNode) {
+        $("[name='project$zrbm']").val(treeNode.name);
+        $("[name='project$zrbmId']").val(treeNode.id);
+    }
+
+    function clickBelongCompany(even, treeId, treeNode) {
+        $("[name='project$belongCompanyname']").val(treeNode.name);
+        $("[name='project$belongCompanyid']").val(treeNode.id);
+    }
+
+
+
+
+}())
+
+