Procházet zdrojové kódy

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper

hlp před 1 rokem
rodič
revize
82d83cab21
11 změnil soubory, kde provedl 756 přidání a 253 odebrání
  1. 41 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectApprovalCheckController.java
  2. 122 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectApprovalController.java
  3. 6 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProjectApproval.java
  4. 57 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProjectApprovalCheck.java
  5. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectApprovalCheckMapper.java
  6. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectApprovalCheckService.java
  7. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectApprovalService.java
  8. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectApprovalCheckServiceImpl.java
  9. 39 6
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectApprovalServiceImpl.java
  10. 19 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectApprovalCheckMapper.xml
  11. 419 244
      fhKeeper/formulahousekeeper/timesheet/src/views/projectApproval/projectApproval.vue

+ 41 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectApprovalCheckController.java

@@ -0,0 +1,41 @@
+package com.management.platform.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.management.platform.entity.ProjectApprovalBasecost;
+import com.management.platform.entity.ProjectApprovalCheck;
+import com.management.platform.service.ProjectApprovalBasecostService;
+import com.management.platform.service.ProjectApprovalCheckService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-03-20
+ */
+@RestController
+@RequestMapping("/project-approval-check")
+public class ProjectApprovalCheckController {
+
+    @Resource
+    private ProjectApprovalCheckService projectApprovalCheckservice;
+
+    @RequestMapping("/get")
+    public HttpRespMsg get(Integer projectId){
+        HttpRespMsg msg=new HttpRespMsg();
+        List<ProjectApprovalCheck> list = projectApprovalCheckservice.list(new LambdaQueryWrapper<ProjectApprovalCheck>().eq(ProjectApprovalCheck::getProjectApprovalId, projectId));
+        msg.setData(list);
+        return msg;
+    }
+
+}
+

+ 122 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectApprovalController.java

@@ -7,7 +7,9 @@ import com.management.platform.mapper.ProjectMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.*;
 import com.management.platform.util.HttpRespMsg;
+import org.springframework.beans.BeanUtils;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 
@@ -17,8 +19,10 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.time.LocalDate;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -48,6 +52,18 @@ public class ProjectApprovalController {
     private ProjectApprovalBasecostService projectApprovalBasecostService;
     @Resource
     private ProjectCategoryService projectCategoryService;
+    @Resource
+    private ProjectApprovalCheckService projectApprovalCheckService;
+    @Resource
+    private ProjectService projectService;
+    @Resource
+    private ProjectBasecostService projectBasecostService;
+    @Resource
+    private ProjectAuditorService projectAuditorService;
+    @Resource
+    private ParticipationService participationService;
+    @Resource
+    private SysFunctionService sysFunctionService;
 
     /**
      * 分页获取项目列表
@@ -56,8 +72,8 @@ public class ProjectApprovalController {
      */
     @RequestMapping("/listByPage")
     public HttpRespMsg getProjectPage(@RequestParam Integer pageIndex, @RequestParam Integer pageSize, String keyword,
-                                      @RequestParam(required = false, defaultValue = "1") Integer searchField,@RequestParam(defaultValue = "3") String statuses,Integer category) {
-        return projectApprovalService.listByPage(pageIndex, pageSize, keyword,searchField,statuses,category,request);
+                                      @RequestParam(required = false, defaultValue = "1") Integer searchField,@RequestParam(defaultValue = "3") String statuses,Integer category,Integer viewId) {
+        return projectApprovalService.listByPage(pageIndex, pageSize, keyword,searchField,statuses,category,viewId,request);
     }
 
     @RequestMapping("/editProjectApproval")
@@ -91,6 +107,7 @@ public class ProjectApprovalController {
         participationApprovalService.remove(new LambdaQueryWrapper<ParticipationApproval>().eq(ParticipationApproval::getProjectApprovalId,projectApproval.getId()));
         projectApprovalBasecostService.remove(new LambdaQueryWrapper<ProjectApprovalBasecost>().eq(ProjectApprovalBasecost::getProjectApprovalId,projectApproval.getId()));
         projectApprovalAuditorService.remove(new LambdaQueryWrapper<ProjectApprovalAuditor>().eq(ProjectApprovalAuditor::getProjectApprovalId,projectApproval.getId()));
+        projectApprovalCheckService.remove(new LambdaQueryWrapper<ProjectApprovalCheck>().eq(ProjectApprovalCheck::getProjectApprovalId,projectApproval.getId()).eq(ProjectApprovalCheck::getStatus,0));
         if(projectApproval.getParticipationApprovalList()!=null&&projectApproval.getParticipationApprovalList().size()>0){
             List<ParticipationApproval> participationApprovalList = projectApproval.getParticipationApprovalList();
             participationApprovalList.forEach(p->{
@@ -120,6 +137,17 @@ public class ProjectApprovalController {
             });
             projectApprovalAuditorService.saveBatch(projectApprovalAuditorList);
         }
+        if(projectApproval.getProjectApprovalCheckList()!=null&&projectApproval.getProjectApprovalCheckList().size()>0){
+            List<ProjectApprovalCheck> projectApprovalCheckList = projectApproval.getProjectApprovalCheckList();
+            projectApprovalCheckList.forEach(p->{
+                p.setProjectApprovalId(projectApproval.getId());
+            });
+            projectApprovalCheckList=projectApprovalCheckList.stream().filter(p-> !StringUtils.isEmpty(p.getUserId())).collect(Collectors.toList());
+            for (int i = 0; i < projectApprovalCheckList.size(); i++) {
+                projectApprovalCheckList.get(i).setSeq(i+1);
+            }
+            projectApprovalCheckService.saveOrUpdateBatch(projectApprovalCheckList);
+        }
         return msg;
     }
 
@@ -150,5 +178,97 @@ public class ProjectApprovalController {
         return msg;
     }
 
+    @RequestMapping("/delete")
+    @Transactional(rollbackFor = Exception.class)
+    public HttpRespMsg delete(Integer id){
+        HttpRespMsg msg=new HttpRespMsg();
+        ProjectApproval projectApproval = projectApprovalService.getById(id);
+        participationApprovalService.remove(new LambdaQueryWrapper<ParticipationApproval>().eq(ParticipationApproval::getProjectApprovalId,projectApproval.getId()));
+        projectApprovalBasecostService.remove(new LambdaQueryWrapper<ProjectApprovalBasecost>().eq(ProjectApprovalBasecost::getProjectApprovalId,projectApproval.getId()));
+        projectApprovalAuditorService.remove(new LambdaQueryWrapper<ProjectApprovalAuditor>().eq(ProjectApprovalAuditor::getProjectApprovalId,projectApproval.getId()));
+        projectApprovalCheckService.remove(new LambdaQueryWrapper<ProjectApprovalCheck>().eq(ProjectApprovalCheck::getProjectApprovalId,projectApproval.getId()));
+        if(!projectApprovalService.removeById(id)){
+            msg.setData("验证失败");
+        }
+        return msg;
+    }
+
+    @RequestMapping("/check")
+    @Transactional(rollbackFor = Exception.class)
+    public HttpRespMsg check(Integer id,Integer checkType,Integer revokeType){
+        HttpRespMsg msg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
+        ProjectApproval projectApproval = projectApprovalService.getById(id);
+        List<ProjectApprovalCheck> projectApprovalChecks = projectApprovalCheckService.list(new LambdaQueryWrapper<ProjectApprovalCheck>().eq(ProjectApprovalCheck::getProjectApprovalId, id));
+        Optional<ProjectApprovalCheck> first = projectApprovalChecks.stream().filter(p -> p.getUserId().equals(user.getId())&&p.getStatus()==0).findFirst();
+//        boolean hasAllPriviledge = sysFunctionService.hasPriviledge(user.getRoleId(), "管理全部立项申请");
+//        boolean hasCheckPriviledge = sysFunctionService.hasPriviledge(user.getRoleId(), "审核立项申请");
+        if(projectApprovalChecks.size()>0){
+            if(!first.isPresent()){
+                msg.setError("审核人验证失败,请按照审核人顺序审核");
+                return msg;
+            }
+        }
+        switch (checkType){
+            /*审核通过*/
+            case 1:
+                ProjectApprovalCheck projectApprovalCheck = first.get();
+                projectApprovalCheck.setStatus(1);
+                projectApprovalCheckService.updateById(projectApprovalCheck);
+                //检查剩余的数据
+                List<ProjectApprovalCheck> approvalChecks = projectApprovalChecks.stream().filter(p -> !p.getId().equals(first.get().getId())).collect(Collectors.toList());
+                boolean b = approvalChecks.stream().anyMatch(a -> a.getStatus() != 1);
+                if(!b){
+                    projectApproval.setStatus(1);
+                    projectApprovalService.updateById(projectApproval);
+                    //立项审核通过后创建项目数据
+                    Project project=new Project();
+                    BeanUtils.copyProperties(projectApproval,project);
+                    project.setId(null);
+                    project.setCreateDate(LocalDate.now());
+                    List<ProjectApprovalBasecost> projectApprovalBasecostList = projectApprovalBasecostService.list(new LambdaQueryWrapper<ProjectApprovalBasecost>().eq(ProjectApprovalBasecost::getProjectApprovalId, id));
+                    List<ParticipationApproval> participationApprovalList = participationApprovalService.list(new LambdaQueryWrapper<ParticipationApproval>().eq(ParticipationApproval::getProjectApprovalId, id));
+                    List<ProjectApprovalAuditor> projectApprovalAuditorList = projectApprovalAuditorService.list(new LambdaQueryWrapper<ProjectApprovalAuditor>().eq(ProjectApprovalAuditor::getProjectApprovalId, id));
+                    projectService.save(project);
+                    List<ProjectBasecost> projectBasecostList=new ArrayList<>();
+                    List<Participation> participationList=new ArrayList<>();
+                    List<ProjectAuditor> projectAuditorList=new ArrayList<>();
+                    projectApprovalBasecostList.forEach(p->{
+                        ProjectBasecost projectBasecost=new ProjectBasecost();
+                        BeanUtils.copyProperties(p,projectBasecost);
+                        projectBasecost.setId(null);
+                        projectBasecost.setProjectId(project.getId());
+                        projectBasecostList.add(projectBasecost);
+                    });
+                    participationApprovalList.forEach(p->{
+                        Participation participation=new Participation();
+                        BeanUtils.copyProperties(p,participation);
+                        participation.setId(null);
+                        participation.setProjectId(project.getId());
+                        participationList.add(participation);
+                    });
+                    projectApprovalAuditorList.forEach(p->{
+                        ProjectAuditor projectAuditor=new ProjectAuditor();
+                        BeanUtils.copyProperties(p,projectAuditor);
+                        projectAuditor.setId(null);
+                        projectAuditor.setProjectId(project.getId());
+                        projectAuditorList.add(projectAuditor);
+                    });
+                    projectBasecostService.saveBatch(projectBasecostList);
+                    participationService.saveBatch(participationList);
+                    projectAuditorService.saveBatch(projectAuditorList);
+                }
+                break;
+            /*驳回*/
+            case 2:
+                projectApproval.setStatus(2);
+                projectApprovalService.updateById(projectApproval);
+                break;
+            /*撤销*/
+            case 3:
+                break;
+        }
+        return msg;
+    }
 }
 

+ 6 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProjectApproval.java

@@ -250,9 +250,15 @@ public class ProjectApproval extends Model<ProjectApproval> {
     @TableField(exist = false)
     private List<ProjectApprovalAuditor> projectApprovalAuditorList;
 
+    @TableField(exist = false)
+    private List<ProjectApprovalCheck> projectApprovalCheckList;
+
     @TableField(exist = false)
     private String inchargerName;
 
+    @TableField(exist = false)
+    private Integer canChecked;
+
 
     @Override
     protected Serializable pkVal() {

+ 57 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProjectApprovalCheck.java

@@ -0,0 +1,57 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-03-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ProjectApprovalCheck extends Model<ProjectApprovalCheck> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("project_approval_id")
+    private Integer projectApprovalId;
+
+    /**
+     * 人员id
+     */
+    @TableField("user_id")
+    private String userId;
+
+    /**
+     * 审核状态 0-待审核 1-审核通过 2-已驳回
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 审核顺序(审核流程)
+     */
+    @TableField("seq")
+    private Integer seq;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectApprovalCheckMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.ProjectApprovalCheck;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-03-20
+ */
+public interface ProjectApprovalCheckMapper extends BaseMapper<ProjectApprovalCheck> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectApprovalCheckService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.ProjectApprovalCheck;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-03-20
+ */
+public interface ProjectApprovalCheckService extends IService<ProjectApprovalCheck> {
+
+}

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectApprovalService.java

@@ -17,6 +17,6 @@ import javax.servlet.http.HttpServletRequest;
  */
 public interface ProjectApprovalService extends IService<ProjectApproval> {
 
-    HttpRespMsg listByPage(Integer pageIndex, Integer pageSize, String keyword, Integer searchField, String statuses, Integer category, HttpServletRequest request);
+    HttpRespMsg listByPage(Integer pageIndex, Integer pageSize, String keyword, Integer searchField, String statuses, Integer category,Integer viewId, HttpServletRequest request);
 
 }

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectApprovalCheckServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.ProjectApprovalCheck;
+import com.management.platform.mapper.ProjectApprovalCheckMapper;
+import com.management.platform.service.ProjectApprovalCheckService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-03-20
+ */
+@Service
+public class ProjectApprovalCheckServiceImpl extends ServiceImpl<ProjectApprovalCheckMapper, ProjectApprovalCheck> implements ProjectApprovalCheckService {
+
+}

+ 39 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectApprovalServiceImpl.java

@@ -7,10 +7,7 @@ import com.management.platform.entity.*;
 import com.management.platform.mapper.ProjectApprovalMapper;
 import com.management.platform.mapper.ProjectMapper;
 import com.management.platform.mapper.UserMapper;
-import com.management.platform.service.ParticipationApprovalService;
-import com.management.platform.service.ProjectApprovalAuditorService;
-import com.management.platform.service.ProjectApprovalBasecostService;
-import com.management.platform.service.ProjectApprovalService;
+import com.management.platform.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.stereotype.Service;
@@ -20,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -36,14 +34,22 @@ public class ProjectApprovalServiceImpl extends ServiceImpl<ProjectApprovalMappe
     private ProjectApprovalMapper projectApprovalMapper;
     @Resource
     private UserMapper userMapper;
+    @Resource
+    private SysFunctionService sysFunctionService;
+    @Resource
+    private ProjectApprovalCheckService projectApprovalCheckService;
 
 
 
     @Override
-    public HttpRespMsg listByPage(Integer pageIndex, Integer pageSize, String keyword, Integer searchField, String statuses, Integer category, HttpServletRequest request) {
+    public HttpRespMsg listByPage(Integer pageIndex, Integer pageSize, String keyword, Integer searchField, String statuses, Integer category,Integer viewId, HttpServletRequest request) {
         HttpRespMsg msg=new HttpRespMsg();
-        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        User user = userMapper.selectById(request.getHeader("token"));
+        Integer companyId = user.getCompanyId();
         List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, companyId));
+        boolean hasPriviledge = sysFunctionService.hasPriviledge(user.getRoleId(), "查看全部立项申请");
+        boolean hasAllPriviledge = sysFunctionService.hasPriviledge(user.getRoleId(), "管理全部立项申请");
+        boolean hasCheckPriviledge = sysFunctionService.hasPriviledge(user.getRoleId(), "审核立项申请");
         LambdaQueryWrapper<ProjectApproval> queryWrapper = new LambdaQueryWrapper<>();
         if(!StringUtils.isEmpty(keyword)){
             switch (searchField){
@@ -53,6 +59,17 @@ public class ProjectApprovalServiceImpl extends ServiceImpl<ProjectApprovalMappe
                     break;
             }
         }
+        switch (viewId){
+            case 0:
+                if(!hasPriviledge){
+                    queryWrapper.and(wrapper->wrapper.eq(ProjectApproval::getCreatorId,user.getId()).or().inSql(ProjectApproval::getCreatorId,"select pc.user_id from project_approval_check pc where pc.project_approval_id=project_approval.id"));
+                }
+                break;
+            case 1:queryWrapper.eq(ProjectApproval::getCreatorId,user.getId());
+                break;
+            case 2:queryWrapper.inSql(ProjectApproval::getCreatorId,"select pc.user_id from project_approval_check pc where pc.project_approval_id=project_approval.id");
+                break;
+        }
         if(category!=null){
             queryWrapper.eq(ProjectApproval::getCategory,category);
         }
@@ -70,11 +87,27 @@ public class ProjectApprovalServiceImpl extends ServiceImpl<ProjectApprovalMappe
         IPage<ProjectApproval> iPage = projectApprovalMapper.selectPage(new Page<>(pageIndex, pageSize), queryWrapper);
         Map<String,Object> result=new HashMap<>();
         List<ProjectApproval> records = iPage.getRecords();
+        List<Integer> projectApprovalIds = records.stream().map(r -> r.getId()).collect(Collectors.toList());
+        projectApprovalIds.add(-1);
+        List<ProjectApprovalCheck> approvalCheckList = projectApprovalCheckService.list(new LambdaQueryWrapper<ProjectApprovalCheck>().in(ProjectApprovalCheck::getProjectApprovalId,projectApprovalIds));
         records.forEach(r->{
             Optional<User> optional = userList.stream().filter(u -> u.getId().equals(r.getInchargerId())).findFirst();
             if(optional.isPresent()){
                 r.setInchargerName(optional.get().getName());
             }
+            Integer canCheck=0;
+            List<ProjectApprovalCheck> checkList = approvalCheckList.stream().filter(a -> a.getProjectApprovalId().equals(r.getId())).collect(Collectors.toList());
+            Optional<ProjectApprovalCheck> first = checkList.stream().filter(c -> c.getUserId().equals(user.getId())&&c.getStatus()==0).findFirst();
+            if(first.isPresent()){
+                boolean anyMatch = checkList.stream().anyMatch(c -> c.getSeq() < first.get().getSeq() && c.getStatus() == 0);
+                if(!anyMatch){
+                    canCheck=1;
+                }
+            }
+            if(hasAllPriviledge||hasCheckPriviledge){
+                canCheck=1;
+            }
+            r.setCanChecked(canCheck);
         });
         result.put("records",records);
         result.put("total",iPage.getTotal());

+ 19 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectApprovalCheckMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.ProjectApprovalCheckMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ProjectApprovalCheck">
+        <id column="id" property="id" />
+        <result column="project_approval_id" property="projectApprovalId" />
+        <result column="user_id" property="userId" />
+        <result column="status" property="status" />
+        <result column="seq" property="seq" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, project_approval_id, user_id, status, seq
+    </sql>
+
+</mapper>

+ 419 - 244
fhKeeper/formulahousekeeper/timesheet/src/views/projectApproval/projectApproval.vue

@@ -27,238 +27,264 @@
                 </el-form-item>
             </el-form>
         </el-col>
-        <!--列表-->
-        <el-table ref="projectlistOfWudulist" border @cell-mouse-enter="hoverCall" @cell-mouse-leave="handCall" :cell-class-name="tableCellClassName" :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;" @selection-change="checkedWudulist">
-            <el-table-column type="selection" width="60" :selectable="isSelectable">
-            </el-table-column>
-            <el-table-column prop="projectCode" :label="$t('Itemno')"  width="150"></el-table-column>
-            <el-table-column prop="projectName" :label="$t('headerTop.projectName')" min-width="250" ></el-table-column>
-            <el-table-column prop="categoryName" :label="$t('projectclassification')"  width="140"></el-table-column>
-            <el-table-column prop="isPublic" :label="'项目类型'"  width="140">
-                <template slot-scope="scope">{{scope.row.isPublic==0?"正式项目":"非项目"}}</template>
-            </el-table-column>
-            <el-table-column prop="inchargerName" :label="$t('projectmanager')"  min-width="150">
-                <template slot-scope="scope">
-                    <el-link type="primary" :underline="false" @click="showUser(scope.row.inchargerId)">
-                        <span v-if="user.userNameNeedTranslate != 1">
-                            {{scope.row.inchargerName}}
-                        </span>
-                        <span v-if="user.userNameNeedTranslate == 1">
-                            <ww-open-data type='userName' :openid='scope.row.inchargerName'></ww-open-data>
-                        </span>
-                    </el-link>
-                </template>
-            </el-table-column>
-            <!-- 级别 -->
-            <el-table-column :prop="user.timeType.projectLevelState == 1 ? 'levelName' : 'level'" :label="$t('ji-bie')" min-width="190"   v-if="user.company.packageProject == 1">
-                <template slot-scope="scope">
-                    <span v-if="user.timeType.projectLevelState == 1">{{scope.row.levelName}}</span>
-                    <span v-else>{{importanceListLable[scope.row.level - 1]}}</span>
-                </template>
-            </el-table-column>
-            <el-table-column prop="status" :label="'审核状态'" min-width="100" >
-                <template slot-scope="scope">
-                    {{scope.row.status == null?"-":approvalStatusStr[scope.row.status]}}
-                </template>
-            </el-table-column>
-            <el-table-column :label="$t('operation')" :width="300" align="left" fixed="right">
-                <template slot-scope="scope">
-                    <el-button size="mini" type="primary" @click="handleAdd(scope.$index, scope.row)">{{'编辑'}}</el-button>
-                    <el-button size="mini"  @click="restartPro(scope.row)">{{'通过'}}</el-button>
-                    <el-button size="mini"  @click="restartPro(scope.row)">{{'驳回'}}</el-button>
-                    <el-button size="mini"  @click="restartPro(scope.row)">{{'撤销'}}</el-button>
-                </template>
-            </el-table-column>
-        </el-table>
+        <div style="display: flex;width: 100%;">
+                <div class="classification">
+                    <div>
+                        <p :class="idx == 0 ? 'on' : ''" @click="switchs(0)" v-if="permissions.projectApprovalEdit">{{'全部项目'}}</p>
+                        <p :class="idx == 1 ? 'on' : ''" @click="switchs(1)">{{'我发起的'}}</p>
+                        <p :class="idx == 2 ? 'on' : ''" @click="switchs(2)">{{'我审核的'}}</p>
+                    </div>
+                </div>
+                <div style="max-width: 94%;min-width: 90%">
+                    <el-table ref="projectlistOfWudulist" border @cell-mouse-enter="hoverCall" @cell-mouse-leave="handCall" :cell-class-name="tableCellClassName" :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;" @selection-change="checkedWudulist">
+                        <el-table-column type="selection" width="60" :selectable="isSelectable">
+                        </el-table-column>
+                        <el-table-column prop="projectCode" :label="$t('Itemno')"  width="150"></el-table-column>
+                        <el-table-column prop="projectName" :label="$t('headerTop.projectName')" min-width="250" ></el-table-column>
+                        <el-table-column prop="categoryName" :label="$t('projectclassification')"  width="140"></el-table-column>
+                        <el-table-column prop="isPublic" :label="'项目类型'"  width="140">
+                            <template slot-scope="scope">{{scope.row.isPublic==0?"正式项目":"非项目"}}</template>
+                        </el-table-column>
+                        <el-table-column prop="inchargerName" :label="$t('projectmanager')"  min-width="150">
+                            <template slot-scope="scope">
+                                <el-link type="primary" :underline="false" @click="showUser(scope.row.inchargerId)">
+                                    <span v-if="user.userNameNeedTranslate != 1">
+                                        {{scope.row.inchargerName}}
+                                    </span>
+                                    <span v-if="user.userNameNeedTranslate == 1">
+                                        <ww-open-data type='userName' :openid='scope.row.inchargerName'></ww-open-data>
+                                    </span>
+                                </el-link>
+                            </template>
+                        </el-table-column>
+                        <!-- 级别 -->
+                        <el-table-column :prop="user.timeType.projectLevelState == 1 ? 'levelName' : 'level'" :label="$t('ji-bie')" min-width="190"   v-if="user.company.packageProject == 1">
+                            <template slot-scope="scope">
+                                <span v-if="user.timeType.projectLevelState == 1">{{scope.row.levelName}}</span>
+                                <span v-else>{{importanceListLable[scope.row.level - 1]}}</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="status" :label="'审核状态'" min-width="100" >
+                            <template slot-scope="scope">
+                                {{scope.row.status == null?"-":approvalStatusStr[scope.row.status]}}
+                            </template>
+                        </el-table-column>
+                        <el-table-column :label="$t('operation')" :width="300" align="left" fixed="right">
+                            <template slot-scope="scope">
+                                <el-button size="mini" type="primary" @click="handleAdd(scope.$index, scope.row)">{{'编辑'}}</el-button>
+                                <el-button size="mini" v-if="(permissions.projectApprovalEdit||permissions.projectApprovalCheck) && scope.row.status==0 &&scope.row.canChecked==1 "  @click="check(scope.row,1)">{{'通过'}}</el-button>
+                                <el-button size="mini" v-if="(permissions.projectApprovalEdit||permissions.projectApprovalCheck) && scope.row.status!=2 &&scope.row.canChecked==1" @click="check(scope.row,2)">{{'驳回'}}</el-button>
+                                <el-button size="mini" v-if="(permissions.projectApprovalEdit ||permissions.projectApprovalCheck)&&scope.row.canChecked==1 && scope.row.status==1" @click="check(scope.row,3)">{{'撤销'}}</el-button>
+                            </template>
+                        </el-table-column>
+                    </el-table>
 
-        <!--工具条 footer-->
-        <el-col :span="24" class="toolbar">
-            <el-pagination :key="projectListPageComponentKey"
-                @size-change="handleSizeChange"
-                @current-change="handleCurrentChange"
-                :page-sizes="[20 , 50 , 80 , 100]"
-                :page-size="size"
-                :current-page.sync="page"
-                layout="total, sizes, prev, pager, next"
-                :total="total"
-                style="float:right;"
-            ></el-pagination>
-        </el-col>
+                    <!--工具条 footer-->
+                    <el-col :span="24" class="toolbar">
+                        <el-pagination :key="projectListPageComponentKey"
+                            @size-change="handleSizeChange"
+                            @current-change="handleCurrentChange"
+                            :page-sizes="[20 , 50 , 80 , 100]"
+                            :page-size="size"
+                            :current-page.sync="page"
+                            layout="total, sizes, prev, pager, next"
+                            :total="total"
+                            style="float:right;"
+                        ></el-pagination>
+                    </el-col>
 
-        <!--新增界面-->
-        <el-dialog :title="title" v-if="addFormVisible" :visible.sync="addFormVisible" :close-on-click-modal="false" customClass="customWidth" width="960px" :top="'6vh'">
-            <div style="height: 72vh;overflow-y: auto;overflow-x: hidden;">
-                <el-form ref="form1" :model="addForm" :rules="rules" label-width="120px">
-                    <el-form-item :label="$t('Itemno')" :class="title == $t('newproject')" v-if="user.companyId!=936">
-                        <!-- <el-input v-model="addForm.code" :disabled="!permissions.projectManagement && addForm.creatorId != user.id" placeholder="请输入项目编号" clearable></el-input> -->
-                        <el-input v-model="addForm.code" :placeholder="$t('peaseenterthe')" clearable :disabled="canOnlyModParticipator || (!permissions.projectManagement && addForm.creatorId != user.id && !permissions.projectCodeAndName)" maxlength="50" show-word-limit="true"></el-input>
-                    </el-form-item>
-                    <el-form-item :label="$t('headerTop.projectName')" prop="name">
-                        <!-- <el-input v-model="addForm.name" :disabled="!permissions.projectManagement && addForm.creatorId != user.id" placeholder="请输入项目名称" clearable></el-input> -->
-                        <el-input v-model="addForm.name" :placeholder="$t('peaseenterthe')" clearable :disabled="canOnlyModParticipator || (!permissions.projectManagement && addForm.creatorId != user.id && !permissions.projectCodeAndName) || isShowProjectName" maxlength="255" show-word-limit="true"></el-input>
-                    </el-form-item>
-                    <el-form-item :label="$t('projectclassification')" v-if="user.timeType.mainProjectState != '1'">
-                        <!-- <el-select v-model="addForm.category"  style="width:32%;" clearable :disabled="!permissions.projectManagement && addForm.creatorId != user.id"> -->
-                        <el-select v-model="addForm.category"  style="width:32%;" clearable filterable :disabled="canOnlyModParticipator">
-                            <el-option v-for="(item) in baseClfList" :key="item.id" :value="item.id" :label="item.name"></el-option>
-                        </el-select>
-                    </el-form-item>
-                    <el-form-item :label="$t('projecttype')" :class="title == $t('newproject') && user.companyId == 936 ? 'wpgCssClass' : ''" prop="isPublic">
-                        <el-select v-model="addForm.isPublic" style="width:32%;" @change="selectPublic" :disabled="canOnlyModParticipator">
-                            <el-option :value="0" :label="$t('zheng-shi-xiang-mu')"></el-option>
-                            <el-option :value="1" :label="$t('fei-xiang-mu')"></el-option>
-                        </el-select>
-                    </el-form-item>
-                    <el-form-item :label="$t('other.projectDescription')" prop="projectDesc">
-                        <!-- <el-input v-model="addForm.projectDesc" :disabled="!permissions.projectManagement && addForm.creatorId != user.id" placeholder="请输入项目描述" clearable maxlength="4000"></el-input> -->
-                        <el-input v-model="addForm.projectDesc" :placeholder="$t('peaseenterthe')" clearable maxlength="4000" :disabled="canOnlyModParticipator" show-word-limit></el-input>
-                    </el-form-item>
-                    <el-form-item :label="$t('Allparticipants')" v-show="addForm.isPublic == 0" :class="title == $t('newproject') && user.companyId == 936 ? 'wpgCssClass' : ''">
-                        <el-tooltip placement="top" effect="light" v-if="user.userNameNeedTranslate != 1">
+                    <!--新增界面-->
+                    <el-dialog :title="title" v-if="addFormVisible" :visible.sync="addFormVisible" :close-on-click-modal="false" customClass="customWidth" width="960px" :top="'6vh'">
+                        <div style="height: 72vh;overflow-y: auto;overflow-x: hidden;">
+                            <el-form ref="form1" :model="addForm" :rules="rules" label-width="120px">
+                                <el-form-item :label="$t('Itemno')" :class="title == $t('newproject')" v-if="user.companyId!=936">
+                                    <!-- <el-input v-model="addForm.code" :disabled="!permissions.projectManagement && addForm.creatorId != user.id" placeholder="请输入项目编号" clearable></el-input> -->
+                                    <el-input v-model="addForm.code" :placeholder="$t('peaseenterthe')" clearable :disabled="canOnlyModParticipator || (!permissions.projectManagement && addForm.creatorId != user.id && !permissions.projectCodeAndName)" maxlength="50" show-word-limit="true"></el-input>
+                                </el-form-item>
+                                <el-form-item :label="$t('headerTop.projectName')" prop="name">
+                                    <!-- <el-input v-model="addForm.name" :disabled="!permissions.projectManagement && addForm.creatorId != user.id" placeholder="请输入项目名称" clearable></el-input> -->
+                                    <el-input v-model="addForm.name" :placeholder="$t('peaseenterthe')" clearable :disabled="canOnlyModParticipator || (!permissions.projectManagement && addForm.creatorId != user.id && !permissions.projectCodeAndName) || isShowProjectName" maxlength="255" show-word-limit="true"></el-input>
+                                </el-form-item>
+                                <el-form-item :label="$t('projectclassification')" v-if="user.timeType.mainProjectState != '1'">
+                                    <!-- <el-select v-model="addForm.category"  style="width:32%;" clearable :disabled="!permissions.projectManagement && addForm.creatorId != user.id"> -->
+                                    <el-select v-model="addForm.category"  style="width:32%;" clearable filterable :disabled="canOnlyModParticipator">
+                                        <el-option v-for="(item) in baseClfList" :key="item.id" :value="item.id" :label="item.name"></el-option>
+                                    </el-select>
+                                </el-form-item>
+                                <el-form-item :label="$t('projecttype')" :class="title == $t('newproject') && user.companyId == 936 ? 'wpgCssClass' : ''" prop="isPublic">
+                                    <el-select v-model="addForm.isPublic" style="width:32%;" @change="selectPublic" :disabled="canOnlyModParticipator">
+                                        <el-option :value="0" :label="$t('zheng-shi-xiang-mu')"></el-option>
+                                        <el-option :value="1" :label="$t('fei-xiang-mu')"></el-option>
+                                    </el-select>
+                                </el-form-item>
+                                <el-form-item :label="$t('other.projectDescription')" prop="projectDesc">
+                                    <!-- <el-input v-model="addForm.projectDesc" :disabled="!permissions.projectManagement && addForm.creatorId != user.id" placeholder="请输入项目描述" clearable maxlength="4000"></el-input> -->
+                                    <el-input v-model="addForm.projectDesc" :placeholder="$t('peaseenterthe')" clearable maxlength="4000" :disabled="canOnlyModParticipator" show-word-limit></el-input>
+                                </el-form-item>
+                                <el-form-item :label="$t('Allparticipants')" v-show="addForm.isPublic == 0" :class="title == $t('newproject') && user.companyId == 936 ? 'wpgCssClass' : ''">
+                                    <el-tooltip placement="top" effect="light" v-if="user.userNameNeedTranslate != 1">
 
-                            <div slot="content" style="width:780px">{{addForm.userNames}}</div>
-                            <el-input  @focus="showChooseMembTree" v-model="addForm.userNames"></el-input>
-                        </el-tooltip>
+                                        <div slot="content" style="width:780px">{{addForm.userNames}}</div>
+                                        <el-input  @focus="showChooseMembTree" v-model="addForm.userNames"></el-input>
+                                    </el-tooltip>
 
-                        <el-tooltip placement="top" effect="light" v-if="user.userNameNeedTranslate == 1">
-                            <div slot="content" style="width:780px">
-                                <span v-for="(item, index) in addFormUserNames" :key="index">
-                                    <!-- {{item}} -->
-                                    <ww-open-data type='userName' :openid='item'></ww-open-data>
-                                    <span v-if="index < addFormUserNames.length - 1">,</span>
-                                </span>
-                            </div>
-                            <div @click="showChooseMembTree" style="width: 800px;overflow:hidden;white-space:nowrap;height:40px;border: 1px solid #DCDFE6;border-radius: 4px;box-sizing: border-box;padding: 0 10px">
-                                <span v-for="(item, index) in addFormUserNames" :key="index">
-                                    <!-- {{item}} -->
-                                    <ww-open-data type='userName' :openid='item'></ww-open-data>
-                                    <span v-if="index < addFormUserNames.length - 1">,</span>
-                                </span>
-                            </div>
-                        </el-tooltip>
-                    </el-form-item>
-                    <el-form-item :label="$t('projectmanager')" :class="title == $t('newproject') && user.companyId == 936 ? 'wpgCssClass' : ''" v-if="user.company.nonProjectSimple == 0 || (user.company.nonProjectSimple == 1 && addForm.isPublic == 0)">
-                       <el-select v-if="user.userNameNeedTranslate != 1" v-model="addForm.inchargerId" filterable :placeholder="$t('defaultText.pleaseChoose')" style="width:32%;" :disabled="canOnlyModParticipator || projectManagerEdit">
-                            <el-option v-for="item in participator" :key="item.id" :label="item.name" :value="item.id">
-                                <span style="float: left">{{ item.name }}</span>
-                            </el-option>
-                        </el-select>
-                        <selectCat v-if="user.userNameNeedTranslate == 1" :size="'medium'" :subject="participator" :subjectId="addForm.inchargerId" :distinction="'3'" @selectCal="selectCal" :disabled="canOnlyModParticipator || projectManagerEdit || isShowProjectName"></selectCat>
-                    </el-form-item>
+                                    <el-tooltip placement="top" effect="light" v-if="user.userNameNeedTranslate == 1">
+                                        <div slot="content" style="width:780px">
+                                            <span v-for="(item, index) in addFormUserNames" :key="index">
+                                                <!-- {{item}} -->
+                                                <ww-open-data type='userName' :openid='item'></ww-open-data>
+                                                <span v-if="index < addFormUserNames.length - 1">,</span>
+                                            </span>
+                                        </div>
+                                        <div @click="showChooseMembTree" style="width: 800px;overflow:hidden;white-space:nowrap;height:40px;border: 1px solid #DCDFE6;border-radius: 4px;box-sizing: border-box;padding: 0 10px">
+                                            <span v-for="(item, index) in addFormUserNames" :key="index">
+                                                <!-- {{item}} -->
+                                                <ww-open-data type='userName' :openid='item'></ww-open-data>
+                                                <span v-if="index < addFormUserNames.length - 1">,</span>
+                                            </span>
+                                        </div>
+                                    </el-tooltip>
+                                </el-form-item>
+                                <el-form-item :label="$t('projectmanager')" :class="title == $t('newproject') && user.companyId == 936 ? 'wpgCssClass' : ''" v-if="user.company.nonProjectSimple == 0 || (user.company.nonProjectSimple == 1 && addForm.isPublic == 0)">
+                                <el-select v-if="user.userNameNeedTranslate != 1" v-model="addForm.inchargerId" filterable :placeholder="$t('defaultText.pleaseChoose')" style="width:32%;" :disabled="canOnlyModParticipator || projectManagerEdit">
+                                        <el-option v-for="item in participator" :key="item.id" :label="item.name" :value="item.id">
+                                            <span style="float: left">{{ item.name }}</span>
+                                        </el-option>
+                                    </el-select>
+                                    <selectCat v-if="user.userNameNeedTranslate == 1" :size="'medium'" :subject="participator" :subjectId="addForm.inchargerId" :distinction="'3'" @selectCal="selectCal" :disabled="canOnlyModParticipator || projectManagerEdit || isShowProjectName"></selectCat>
+                                </el-form-item>
 
-                    <el-form-item :label="$t('newspaperauditor')">
-                        <el-select v-if="user.userNameNeedTranslate != '1'" @change="$forceUpdate()" v-model="addForm.auditUserIds"  :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" filterable :placeholder="$t('defaultistheprojectleader')" style="width:100%;" :multiple="user.timeType.reportAuditType != 6" >
-                            <el-option v-for="item in participator" :key="item.id" :label="item.name" :value="item.id"></el-option>
-                        </el-select>
-                        <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :tile="true" :widthStr="'800'" :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" :subjectId="addForm.auditUserIds" :subject="participator" :clearable="false" :distinction="'10'"  :multiSelect="user.timeType.reportAuditType != 6" @selectCal="selectCal"></selectCat>
-                    </el-form-item>
-                    <el-form-item :label="$t('ommencementDate')" prop="planStartDate"  v-if="(user.company.nonProjectSimple == 0 || (user.company.nonProjectSimple == 1 && addForm.isPublic == 0))">
-                        <el-date-picker v-model="addForm.planStartDate" :disabled="canOnlyModParticipator"
-                        :editable="false" style="width:32%;" 
-                        format="yyyy-MM-dd" 
-                        value-format="yyyy-MM-dd"
-                        :clearable="false" type="date" 
-                        :placeholder="$t('optiondate')"></el-date-picker>
+                                <el-form-item :label="$t('newspaperauditor')">
+                                    <el-select v-if="user.userNameNeedTranslate != '1'" @change="$forceUpdate()" v-model="addForm.auditUserIds"  :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" filterable :placeholder="$t('defaultistheprojectleader')" style="width:100%;" :multiple="user.timeType.reportAuditType != 6" >
+                                        <el-option v-for="item in participator" :key="item.id" :label="item.name" :value="item.id"></el-option>
+                                    </el-select>
+                                    <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :tile="true" :widthStr="'800'" :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" :subjectId="addForm.auditUserIds" :subject="participator" :clearable="false" :distinction="'10'"  :multiSelect="user.timeType.reportAuditType != 6" @selectCal="selectCal"></selectCat>
+                                </el-form-item>
+                                <el-form-item :label="$t('ommencementDate')" prop="planStartDate"  v-if="(user.company.nonProjectSimple == 0 || (user.company.nonProjectSimple == 1 && addForm.isPublic == 0))">
+                                    <el-date-picker v-model="addForm.planStartDate" :disabled="canOnlyModParticipator"
+                                    :editable="false" style="width:32%;" 
+                                    format="yyyy-MM-dd" 
+                                    value-format="yyyy-MM-dd"
+                                    :clearable="false" type="date" 
+                                    :placeholder="$t('optiondate')"></el-date-picker>
 
-                        <span style="margin-left:63px;margin-right:10px;" >{{ $t('ji-hua-jie-shu-ri-qi') }}</span>
-                        <el-date-picker v-model="addForm.planEndDate" style="width:33%;"
-                        :editable="false" :disabled="canOnlyModParticipator"
-                        format="yyyy-MM-dd" 
-                        value-format="yyyy-MM-dd"
-                        :clearable="false" type="date" 
-                        :placeholder="$t('optiondate')"></el-date-picker>
-                    </el-form-item>
-                    <!-- 项目基线 -->
-                    <div style="margin: 10px 0 30px 0;min-height:200px;" v-if="user.company.packageProject == 1 && !canOnlyModParticipator && (user.company.nonProjectSimple == 0 || (user.company.nonProjectSimple == 1 && addForm.isPublic == 0))">
-                        <el-tabs v-model="activeName" @tab-click="handleClick">
-                        <el-tab-pane :label="$t('costbaseline')" name="baseCostPanel"  >
-                            <div style="padding-top:10px;">
-                                <!--新版 -->
-                                <span class="rg_span" v-for="(item, index) in projectBaseCostData" :key="item.id">
-                                    <span style="width:120px;display: inline-block;" v-if="user.company.packageProject==1">{{item.baseName}}</span>
-                                    <el-input :id="'baseCost'+index" @input="addUpfun()" v-model="item.baseAmount" style="width:200px; margin-bottom: 20px"
-                                    :placeholder="$t('zheng-shu')" clearable  @keyup.native="restrictNumber('baseCost'+index)"></el-input><span style="margin-left:10px;">{{ $t('yuan') }}</span>
-                                </span>    
+                                    <span style="margin-left:63px;margin-right:10px;" >{{ $t('ji-hua-jie-shu-ri-qi') }}</span>
+                                    <el-date-picker v-model="addForm.planEndDate" style="width:33%;"
+                                    :editable="false" :disabled="canOnlyModParticipator"
+                                    format="yyyy-MM-dd" 
+                                    value-format="yyyy-MM-dd"
+                                    :clearable="false" type="date" 
+                                    :placeholder="$t('optiondate')"></el-date-picker>
+                                </el-form-item>
+                                <!-- 项目基线 -->
+                                <div style="margin: 10px 0 30px 0;min-height:200px;" v-if="user.company.packageProject == 1 && !canOnlyModParticipator && (user.company.nonProjectSimple == 0 || (user.company.nonProjectSimple == 1 && addForm.isPublic == 0))">
+                                    <el-tabs v-model="activeName" @tab-click="handleClick">
+                                    <el-tab-pane :label="$t('costbaseline')" name="baseCostPanel"  >
+                                        <div style="padding-top:10px;">
+                                            <!--新版 -->
+                                            <span class="rg_span" v-for="(item, index) in projectBaseCostData" :key="item.id">
+                                                <span style="width:120px;display: inline-block;" v-if="user.company.packageProject==1">{{item.baseName}}</span>
+                                                <el-input :id="'baseCost'+index" @input="addUpfun()" v-model="item.baseAmount" style="width:200px; margin-bottom: 20px"
+                                                :placeholder="$t('zheng-shu')" clearable  @keyup.native="restrictNumber('baseCost'+index)"></el-input><span style="margin-left:10px;">{{ $t('yuan') }}</span>
+                                            </span>    
 
-                                <!-- 合计 -->
-                                <div style="margin-top: 10px;float:right;">
-                                    <span style="margin-right:50px;margin-right:10px;" v-if="user.company.packageProject==1">{{ $t('other.totals') }}</span>
-                                    <span v-if="addForm.budget <= 0 || addForm.budget == undefined">0</span>
-                                    <span v-else>{{addForm.budget | numberToCurrency}}</span>
-                                    <span style="margin-right:50px;margin-left:10px;">{{ $t('yuan') }}</span>
+                                            <!-- 合计 -->
+                                            <div style="margin-top: 10px;float:right;">
+                                                <span style="margin-right:50px;margin-right:10px;" v-if="user.company.packageProject==1">{{ $t('other.totals') }}</span>
+                                                <span v-if="addForm.budget <= 0 || addForm.budget == undefined">0</span>
+                                                <span v-else>{{addForm.budget | numberToCurrency}}</span>
+                                                <span style="margin-right:50px;margin-left:10px;">{{ $t('yuan') }}</span>
+                                            </div>
+                                        </div>
+                                    </el-tab-pane>
+                                    </el-tabs>
                                 </div>
-                            </div>
-                        </el-tab-pane>
-                        </el-tabs>
-                    </div>
-                
-                </el-form>  
-            </div>
-            <div slot="footer" class="dialog-footer;">
-                <el-button @click.native="deletePro(1, addForm)" v-if="(permissions.projectManagement || user.id==deleteVif) && addForm.id" style="float:left">{{ $t('btn.delete') }}</el-button>
-                <el-button @click.native="addFormVisible = false">{{ $t('btn.cancel') }}</el-button>
-                <el-button type="primary" @click="submitInsert" :loading="addLoading">{{ $t('btn.submit') }}</el-button>
-            </div>
-        </el-dialog>
-        <!-- 按部门选择人员 -->
-        <el-dialog :title="$t('selectingParticipants')"  :visible.sync="chooseParticipVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
-            <!-- <el-input style="width:100%" v-model="filterName" placeholder="请输入姓名搜索" @change="findUserInTree"></el-input> -->
-            <div v-if="user.userNameNeedTranslate == '1'">
-                <el-input placeholder="请输入内容" v-model.trim="filterText" class="input-with-select">
-                    <el-button slot="append" icon="el-icon-search" @click="echartDepartment()"></el-button>
-                </el-input>
-            </div>
-            
-            <div class="tree" style="height:400px">
-                <el-scrollbar style="height:100%">
-                    <el-input
-                    :placeholder="$t('keywordfiltering')"
-                    v-model="filterText" v-if="user.userNameNeedTranslate != '1'">
-                    </el-input>
-                    <el-tree :data="deptMembData" :key="searchPersonnelFlgnum" show-checkbox :default-expand-all="searchPersonnelFlg" :props="defaultProps" node-key="id"
-                        ref="chooseMembTree" @check-change="onTreeItemChange" :default-checked-keys="addForm.userId"
-                        highlight-current  :filter-node-method="filterNode">
-                        <span class="custom-tree-node" slot-scope="{ node, data }">
-                            <span v-if="user.userNameNeedTranslate == '1'">
-                                <span v-if="node.data.children">
-                                    <ww-open-data type='departmentName' :openid='node.label'></ww-open-data>
-                                </span>
-                                <span v-else>
-                                    <ww-open-data type='userName' :openid='node.label'></ww-open-data>
-                                </span>
-                            </span>
-                            <span v-if="user.userNameNeedTranslate != '1'">
-                                {{ node.label }}
-                            </span>
-                            <!-- {{ node.label }} -->
-                        </span>
-                    </el-tree>
-                </el-scrollbar>
-            </div>
-            <div>{{ $t('btn.choose') }}&nbsp;{{chosenMembCount}}&nbsp;{{ $t('other.people') }}</div>
-            <div slot="footer" class="dialog-footer">
-                <el-button  @click="chooseParticipVisible = false" >{{ $t('btn.cancel') }}</el-button>
-                <el-button type="primary" @click="chooseParticip()" >{{ $t('btn.determine') }}</el-button>
-            </div>
-        </el-dialog>
-         <!--用户详细信息弹出框-->
-         <el-dialog :title="$t('Checkthedetails')" v-if="userDetailVisible" :visible.sync="userDetailVisible" :close-on-click-modal="false" customClass="customWidth" width="400px">
-            <div class="line"><span>{{ $t('lable.name') +":"}}</span>
-                <span v-if="user.userNameNeedTranslate != 1">{{userDetail.name}}</span>
-                <span v-if="user.userNameNeedTranslate == 1"><ww-open-data type='userName' :openid='userDetail.name'></ww-open-data></span>
-            </div>
-            <div class="line"><span>{{ $t('Worknumber') +":"}}</span><span>{{userDetail.jobNumber}}</span></div>
-            <div class="line"><span>{{ $t('lable.phone') +":"}}</span><span>{{userDetail.phone}}</span></div>
-            <div class="line"><span>{{ $t('jiao-se') +":"}}</span><span>{{userDetail.roleName}}</span></div>
-            <div class="line"><span>{{ $t('lable.department') +":"}}</span>
+                                <el-divider></el-divider>
+                                <template>
+                                    <div><span>{{'审核人'}}</span></div>
+                                    <div>
+                                        <div v-for="(item, index) in pointList" :key="index" >
+                                        第{{index+1}}审核人:
+                                        <el-select :disabled="item.status!=0" v-if="user.userNameNeedTranslate != 1" v-model="item.userId" style="width:140px;" :placeholder="$t('defaultText.pleaseChoose')" clearable @change="manageSelect" size="small" filterable popper-class="managePopperClass">
+                                            <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id">
+                                                <span style="float: left">{{ item.name }}</span>
+                                            </el-option>
+                                        </el-select> 
+                                        <i class="el-icon-circle-plus-outline" @click="addInput(index)" v-if="index==pointList.length-1"></i>
+                                        <i class="el-icon-remove-outline" v-if="pointList.length>1 && item.status==0"  @click="deleteInput(index)"></i>
+                                        <span>{{item.status==0?'待审核':item.status==1?"已审核":"已驳回"}}</span>
+                                        </div>
+                                    </div>
+                            </template>
+                            </el-form>  
+                        </div>
+                        <div slot="footer" class="dialog-footer;">
+                            <el-button @click.native="deletePro(1, addForm)" v-if="(permissions.projectApprovalEdit) && addForm.id" style="float:left">{{ $t('btn.delete') }}</el-button>
+                            <el-button @click.native="addFormVisible = false">{{ $t('btn.cancel') }}</el-button>
+                            <el-button type="primary" @click="submitInsert" :loading="addLoading">{{ $t('btn.submit') }}</el-button>
+                        </div>
+                    </el-dialog>
+                    <!-- 按部门选择人员 -->
+                    <el-dialog :title="$t('selectingParticipants')"  :visible.sync="chooseParticipVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
+                        <!-- <el-input style="width:100%" v-model="filterName" placeholder="请输入姓名搜索" @change="findUserInTree"></el-input> -->
+                        <div v-if="user.userNameNeedTranslate == '1'">
+                            <el-input placeholder="请输入内容" v-model.trim="filterText" class="input-with-select">
+                                <el-button slot="append" icon="el-icon-search" @click="echartDepartment()"></el-button>
+                            </el-input>
+                        </div>
+                        
+                        <div class="tree" style="height:400px">
+                            <el-scrollbar style="height:100%">
+                                <el-input
+                                :placeholder="$t('keywordfiltering')"
+                                v-model="filterText" v-if="user.userNameNeedTranslate != '1'">
+                                </el-input>
+                                <el-tree :data="deptMembData" :key="searchPersonnelFlgnum" show-checkbox :default-expand-all="searchPersonnelFlg" :props="defaultProps" node-key="id"
+                                    ref="chooseMembTree" @check-change="onTreeItemChange" :default-checked-keys="addForm.userId"
+                                    highlight-current  :filter-node-method="filterNode">
+                                    <span class="custom-tree-node" slot-scope="{ node, data }">
+                                        <span v-if="user.userNameNeedTranslate == '1'">
+                                            <span v-if="node.data.children">
+                                                <ww-open-data type='departmentName' :openid='node.label'></ww-open-data>
+                                            </span>
+                                            <span v-else>
+                                                <ww-open-data type='userName' :openid='node.label'></ww-open-data>
+                                            </span>
+                                        </span>
+                                        <span v-if="user.userNameNeedTranslate != '1'">
+                                            {{ node.label }}
+                                        </span>
+                                        <!-- {{ node.label }} -->
+                                    </span>
+                                </el-tree>
+                            </el-scrollbar>
+                        </div>
+                        <div>{{ $t('btn.choose') }}&nbsp;{{chosenMembCount}}&nbsp;{{ $t('other.people') }}</div>
+                        <div slot="footer" class="dialog-footer">
+                            <el-button  @click="chooseParticipVisible = false" >{{ $t('btn.cancel') }}</el-button>
+                            <el-button type="primary" @click="chooseParticip()" >{{ $t('btn.determine') }}</el-button>
+                        </div>
+                    </el-dialog>
+                    <!--用户详细信息弹出框-->
+                    <el-dialog :title="$t('Checkthedetails')" v-if="userDetailVisible" :visible.sync="userDetailVisible" :close-on-click-modal="false" customClass="customWidth" width="400px">
+                        <div class="line"><span>{{ $t('lable.name') +":"}}</span>
+                            <span v-if="user.userNameNeedTranslate != 1">{{userDetail.name}}</span>
+                            <span v-if="user.userNameNeedTranslate == 1"><ww-open-data type='userName' :openid='userDetail.name'></ww-open-data></span>
+                        </div>
+                        <div class="line"><span>{{ $t('Worknumber') +":"}}</span><span>{{userDetail.jobNumber}}</span></div>
+                        <div class="line"><span>{{ $t('lable.phone') +":"}}</span><span>{{userDetail.phone}}</span></div>
+                        <div class="line"><span>{{ $t('jiao-se') +":"}}</span><span>{{userDetail.roleName}}</span></div>
+                        <div class="line"><span>{{ $t('lable.department') +":"}}</span>
 
-                <span v-if="user.userNameNeedTranslate != 1">{{userDetail.departmentName}}</span>
-                <span v-if="user.userNameNeedTranslate == 1"><ww-open-data type='departmentName' :openid='userDetail.departmentName'></ww-open-data></span>
+                            <span v-if="user.userNameNeedTranslate != 1">{{userDetail.departmentName}}</span>
+                            <span v-if="user.userNameNeedTranslate == 1"><ww-open-data type='departmentName' :openid='userDetail.departmentName'></ww-open-data></span>
+                        </div>
+                        <div slot="footer" class="dialog-footer">
+                            <el-button type="primary" @click="userDetailVisible = false" >{{ $t('btn.determine') }}</el-button>
+                        </div>
+                    </el-dialog>
             </div>
-            <div slot="footer" class="dialog-footer">
-                <el-button type="primary" @click="userDetailVisible = false" >{{ $t('btn.determine') }}</el-button>
-            </div>
-        </el-dialog>
+        </div>
     </section>
 </template>
 
@@ -317,11 +343,25 @@ return {
     dataDetail:{},
     userDetailVisible:false,
     userDetail:{},
+    pointList:[{
+        userId:"",
+        seq:1,
+        status:0
+    }],
+    idx: 1,
+    tableHeight: 0,
 }
 },
 computed: {},
 watch: {},
-created () {},
+created () {
+    let height = window.innerHeight;
+    this.tableHeight = height - 195;
+    const that = this;
+    window.onresize = function temp() {
+        that.tableHeight = window.innerHeight - 195;
+    };
+},
 mounted () {
     this.getList();
     this.getProjectBaseConfigList();
@@ -411,6 +451,10 @@ methods: {
                 if(this.addForm.category != null) {
                     targetData.category=this.addForm.category
                 }
+                //审核人
+                if (this.pointList) {
+                    targetData.projectApprovalCheckList=this.pointList
+                }
                 this.http.JSONPost("/project-approval/editProjectApproval",targetData,
                 res => {
                     this.addLoading = false;
@@ -529,30 +573,22 @@ methods: {
         } else {
             this.http.post('/project-approval/getDetail', {id: item.id},
             res => {
+                let theData=[];
             if (res.code == "ok") {
-                this.dataDetail=res.data
+                theData=res.data
             }
-            });
             var arr=[]
             var names=""
             var auditorArr=[]
-            if(this.dataDetail.participationApprovalList){
-                for(let i in this.dataDetail.participationApprovalList){
-                    arr.push(this.dataDetail.participationApprovalList[i].userId);
-                }
-                this.participator=this.dataDetail.participationApprovalList
-            }
-            if(this.dataDetail.participationApprovalList){
-                for(let i in this.dataDetail.participationApprovalList){
-                    names+=this.dataDetail.participationApprovalList[i].userName+",";
+            if(theData.participationApprovalList){
+                for(let i in theData.participationApprovalList){
+                    arr.push(theData.participationApprovalList[i].userId);
+                    names+=theData.participationApprovalList[i].userName+",";
                 }
             }
-            // if (names.length > 0) {
-            //     names = names.substring(0, names.length -1);
-            // }
-            if(this.dataDetail.projectApprovalAuditorList){
-                for(let i in this.dataDetail.projectApprovalAuditorList){
-                    auditorArr.push(this.dataDetail.projectApprovalAuditorList[i].auditorId)
+            if(theData.projectApprovalAuditorList){
+                for(let i in theData.projectApprovalAuditorList){
+                    auditorArr.push(theData.projectApprovalAuditorList[i].auditorId)
                 }
             }
             if (names.length > 0) {
@@ -583,10 +619,12 @@ methods: {
                 creatorId: item.creatorId,
                 outputValue: item.outputValue,
             }
+            this.participator=theData.participationApprovalList
             this.changeParticipator();
             this.getProjectBaseData(item.id);
+            this.getProjectCheckerData(item.id);
+            });
         }
-        console.log('=========>',this.participator)
         this.addFormVisible = true;
     },
     //获取项目列表
@@ -600,6 +638,7 @@ methods: {
             searchField: this.searchField,
             category:this.statusClf,
             status: this.status,
+            viewId:this.idx
         }
         this.http.post("/project-approval/listByPage", parameter,
         res => {
@@ -934,6 +973,29 @@ methods: {
                     }
                 );
     },
+    getProjectCheckerData(projectId) {
+        this.http.post('//project-approval-check/get',{projectId: projectId},
+                res => {
+                    if (res.code == "ok") {
+                        if(res.data.length>0){
+                            this.pointList = res.data;
+                        }
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.listLoading = false;
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                    }
+                );
+    },
     selectPublic() {
         if (this.addForm.isPublic == 1) {
             this.participator = this.users;
@@ -980,13 +1042,126 @@ methods: {
             });
         });
     },
+    addInput(index){
+        this.pointList.push({
+            userId:"",
+            seq:index+2,
+            status:0
+        })
+    },
+    deleteInput(index){
+        this.pointList.splice(index,1)
+        // if(this.pointList.length<=0){
+        //     this.pointList.push({
+        //     checkerId:""
+        //     })
+        // }
+    },
+    // 切换当前选项的索引
+    switchs(e) {
+        this.idx = e
+        this.page = 1
+        // console.log(this.searchField)
+        this.getList()
+    },
+    deletePro(i, item) {
+        this.$confirm('确定要删除立项[' + item.name +'吗]','删除立项', {
+            confirmButtonText: this.$t('btn.determine'),
+            cancelButtonText: this.$t('btn.cancel'),
+            type: "warning"
+        })
+        .then(() => {
+            this.listLoading = true;
+            this.http.post('/project-approval/delete',{ 
+                id: item.id 
+            },
+            res => {
+                this.listLoading = false;
+                if (res.code == "ok") {
+                    this.$message({
+                        message: this.$t('message.successfullyDeleted'),
+                        type: "success"
+                    });
+                    this.addFormVisible=false
+                    this.getList();
+                } else {
+                    this.$message({
+                        message: res.msg,
+                        type: "error"
+                    });
+                }
+            },
+            error => {
+                this.listLoading = false;
+                this.$message({
+                    message: error,
+                    type: "error"
+                });
+                }
+            );
+        })
+        .catch(() => {});
+    },
+    check(item,checkType,revokeType){
+        this.listLoading = true;
+        this.http.post('/project-approval/check',{ 
+            id:item.id ,
+            checkType:checkType,
+            revokeType:revokeType
+        },
+        res => {
+            this.listLoading = false;
+            if (res.code == "ok") {
+                this.$message({
+                    message: "操作成功",
+                    type: "success"
+                });
+                this.addFormVisible=false
+                this.getList();
+            } else {
+                this.$message({
+                    message: res.msg,
+                    type: "error"
+                });
+            }
+        },
+        error => {
+            this.listLoading = false;
+            this.$message({
+                message: error,
+                type: "error"
+            });
+            }
+        );
+    }
 },
 }
 </script>
-<style scoped lang='sass'>
-</style>
-<style>
+<style scoped>
 .toolbar_formitem_n1{
     margin-right: 0 !important;
 }
+.rg_span{
+    display: inline-block;
+}
+.classification {
+    width: 120px;
+    border-right: 1px solid #f2f2f2;
+    display: flex;
+    flex-wrap: wrap;
+    padding-top: 20px;
+}
+.classification p{
+    width: 120px;
+    text-align: center;
+    line-height: 50px;
+    margin: 0;
+    cursor: pointer;
+}
+.classification p:hover {
+    background: #dddddd;
+}
+.on {
+    color: #409EFF;
+}
 </style>