Quellcode durchsuchen

Merge branch 'master' of http://47.100.37.243:10080/wutt/manHourHousekeeper into master

seyason vor 2 Jahren
Ursprung
Commit
0c7b051675
54 geänderte Dateien mit 1550 neuen und 222 gelöschten Zeilen
  1. 78 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CompanyReportController.java
  2. 23 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  3. 4 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  4. 36 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportFormController.java
  5. 15 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java
  6. 31 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCustomController.java
  7. 43 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/CompanyReport.java
  8. 8 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java
  9. 19 12
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Report.java
  10. 11 19
      src/main/java/com/management/platform/entity/ExpenseType.java
  11. 7 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/SysFunction.java
  12. 19 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java
  13. 8 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/UserCustom.java
  14. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/CompanyReportMapper.java
  15. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java
  16. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportFormMapper.java
  17. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskMapper.java
  18. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/CompanyReportService.java
  19. 9 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  20. 3 3
      src/main/java/com/management/platform/service/ExpenseTypeService.java
  21. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java
  22. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/CompanyReportServiceImpl.java
  23. 278 44
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  24. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportFormServiceImpl.java
  25. 44 9
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  26. 4 6
      src/main/resources/mapper/ExpenseTypeMapper.xml
  27. 27 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  28. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportFormMapper.xml
  29. 7 6
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  30. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/SysFunctionMapper.xml
  31. 8 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskMapper.xml
  32. 4 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml
  33. 6 0
      fhKeeper/formulahousekeeper/octopus/src/views/customer/list.vue
  34. 73 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/controller/CompanyReportController.java
  35. 44 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/CompanyReport.java
  36. 11 19
      fhKeeper/formulahousekeeper/user/src/main/java/com/hssx/user/entity/UserPermission.java
  37. 16 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/mapper/CompanyReportMapper.java
  38. 3 3
      src/main/java/com/management/platform/mapper/ExpenseTypeMapper.java
  39. 17 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/CompanyReportService.java
  40. 16 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/ReportFormService.java
  41. 20 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/impl/CompanyReportServiceImpl.java
  42. 20 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/impl/ReportFormServiceImpl.java
  43. 16 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/CompanyReportMapper.xml
  44. 16 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/ReportFormMapper.xml
  45. 4 0
      fhKeeper/formulahousekeeper/timesheet/src/permissions.js
  46. 57 2
      fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue
  47. 121 15
      fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue
  48. 55 17
      fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue
  49. 47 0
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  50. 42 9
      fhKeeper/formulahousekeeper/timesheet/src/views/task/list.vue
  51. 1 0
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue
  52. 32 9
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue
  53. 60 15
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list.vue
  54. 76 14
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/review/index.vue

+ 78 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CompanyReportController.java

@@ -0,0 +1,78 @@
+package com.management.platform.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.CompanyReport;
+import com.management.platform.entity.ReportForm;
+import com.management.platform.service.CompanyReportService;
+import com.management.platform.service.ReportFormService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+@RestController
+@RequestMapping("/company-report")
+public class CompanyReportController {
+    @Autowired
+    private CompanyReportService companyReportService;
+    @Resource
+    private ReportFormService reportFormService;
+
+
+    @RequestMapping("/list")
+    public HttpRespMsg list(Integer companyId){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        List<CompanyReport> companyReportList = companyReportService.list(new QueryWrapper<CompanyReport>().eq("company_id", companyId));
+        List<ReportForm> reportFormList = reportFormService.list();
+        for (ReportForm reportForm : reportFormList) {
+            boolean b = companyReportList.stream().anyMatch(cr -> cr.getReportFormId().equals(reportForm.getId()));
+            if(b){
+                reportForm.setOwned(1);
+            }
+        }
+        httpRespMsg.data=reportFormList;
+        return httpRespMsg;
+    }
+
+    @RequestMapping("/update")
+    public HttpRespMsg update(Integer companyId,String formIds){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        if(companyReportService.remove(new QueryWrapper<CompanyReport>().eq("company_id", companyId))){
+            httpRespMsg.setError("更新失败");
+            return httpRespMsg;
+        }
+        List<CompanyReport> updateList=new ArrayList<>();
+        if(formIds!=null&&!StringUtils.isEmpty(formIds)){
+            String[] split = formIds.split(",");
+            List<String> list = Arrays.asList(split);
+            for (String s : list) {
+                CompanyReport companyReport=new CompanyReport();
+                companyReport.setCompanyId(companyId);
+                companyReport.setReportFormId(Integer.parseInt(s));
+                updateList.add(companyReport);
+            }
+            if(!companyReportService.saveBatch(updateList)){
+                httpRespMsg.setError("更新失败");
+            }
+        }
+        return httpRespMsg;
+    }
+
+}
+

+ 23 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -126,12 +126,13 @@ public class ProjectController {
                                    String providerIds,
                                    String providerNames,
                                    ProjectSeparate projectSeparate,
+                                   Double outputValue,
                                    @RequestParam(defaultValue = "false") boolean onlyChangeParticipate
                                    ) {
         return projectService.editProject(id, name, code, userId, inchargerId, isPublic, planStartDate, planEndDate, level, contractAmount,
                 projectBaseCostData,
                  budget,customerId,chosenLeaders, associateDegrees, associateDegreeNames,
-                taskGpIncharge,auditUserIds, category, projectDesc,projectMainId, providerIds, providerNames, request,projectSeparate,onlyChangeParticipate);
+                taskGpIncharge,auditUserIds, category, projectDesc,projectMainId, providerIds, providerNames, request,projectSeparate,outputValue,onlyChangeParticipate);
     }
 
     @RequestMapping("/adjustBase")
@@ -595,6 +596,9 @@ public class ProjectController {
         if(company.getId()==936){
             heads.add("合同编号");
         }
+        if(company.getId()==428){
+            heads.add("项目分组");
+        }
         if(timeType.getMainProjectState()!=1){
             heads.add("项目分类");
         }
@@ -906,5 +910,23 @@ public class ProjectController {
     public HttpRespMsg exportGroupWithProjectTimeCost(String startDate,String endDate,Integer pageIndex,Integer pageSize,Integer groupId,Integer projectId){
         return projectService.exportGroupWithProjectTimeCost(startDate,endDate,pageIndex,pageSize,groupId,projectId,request);
     }
+    @RequestMapping("/getProjectBaseCost")
+    public HttpRespMsg getProjectBaseCost(Integer projectId,HttpServletRequest request,Integer pageIndex,Integer pageSize){
+        return projectService.getProjectBaseCost(projectId,request,pageIndex,pageSize);
+    }
+
+    @RequestMapping("/exportProjectBaseCost")
+    public HttpRespMsg exportProjectBaseCost(HttpServletRequest request){
+        return projectService.exportProjectBaseCost(request);
+    }
+
+    @RequestMapping("/getTimeCostByUserCustom")
+    public HttpRespMsg getTimeCostByUserCustom(String startDate,String endDate,String subCustomName,Integer customId,HttpServletRequest request,String fieldName){
+        return  projectService.getTimeCostByUserCustom(startDate,endDate,subCustomName,customId,request,fieldName);
+    }
+    @RequestMapping("/exportTimeCostByUserCustom")
+    public HttpRespMsg exportTimeCostByUserCustom(String startDate,String endDate,String subCustomName,Integer customId,HttpServletRequest request,String fieldName){
+        return projectService.exportTimeCostByUserCustom(startDate,endDate,subCustomName,customId,request,fieldName);
+    }
 }
 

+ 4 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -1093,8 +1093,8 @@ public class ReportController {
      * reportIds 报告id
      */
     @RequestMapping("/approve")
-    public HttpRespMsg approveReport(@RequestParam String reportIds, Integer isDepartment, HttpServletRequest request) {
-        return reportService.approveReport(reportIds,isDepartment, request);
+    public HttpRespMsg approveReport(@RequestParam String reportIds, Integer isDepartment, HttpServletRequest request,String evaluate) {
+        return reportService.approveReport(reportIds,isDepartment, request,evaluate);
     }
 
 
@@ -1141,8 +1141,8 @@ public class ReportController {
     }
 
     @RequestMapping("/batchApproveReport")
-    public HttpRespMsg batchApproveReport(@RequestParam String ids, Integer isDepartment, HttpServletRequest request) {
-        return reportService.batchApproveReport(ids, isDepartment, request);
+    public HttpRespMsg batchApproveReport(@RequestParam String ids, Integer isDepartment, HttpServletRequest request,String evaluate) {
+        return reportService.batchApproveReport(ids, isDepartment, request,evaluate);
     }
 
     @RequestMapping("/batchDenyReport")

+ 36 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportFormController.java

@@ -0,0 +1,36 @@
+package com.management.platform.controller;
+
+
+import com.management.platform.entity.ReportForm;
+import com.management.platform.service.ReportFormService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+@RestController
+@RequestMapping("/report-form")
+public class ReportFormController {
+    @Autowired
+    private ReportFormService reportFormService;
+
+    @RequestMapping("/list")
+    public HttpRespMsg list(){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        List<ReportForm> list = reportFormService.list();
+        httpRespMsg.data=list;
+        return httpRespMsg;
+    }
+}
+

+ 15 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java

@@ -71,6 +71,8 @@ public class TaskController {
     private CompanyDingdingService companyDingdingService;
     @Resource
     private WxCorpInfoService wxCorpInfoService;
+    @Resource
+    private ProjectSeparateMapper projectSeparateMapper;
 
     @RequestMapping("/save")
     @Transactional
@@ -703,7 +705,7 @@ public class TaskController {
      * @return
      */
     @RequestMapping("/listByPage")
-    public HttpRespMsg listByPage(Integer status, Integer viewId, Integer pageIndex, Integer pageSize,Integer type,Integer dateType,String startDate,String endDate) {
+    public HttpRespMsg listByPage(Integer status, Integer viewId, Integer pageIndex, Integer pageSize,Integer type,Integer dateType,String startDate,String endDate,String groupName) {
         HttpRespMsg msg = new HttpRespMsg();
         String userId = request.getHeader("Token");
         User user = userMapper.selectById(userId);
@@ -739,8 +741,7 @@ public class TaskController {
 //            //已超期的任务,未完成的任务
 //            queryWrapper.lt("end_date", LocalDate.now()).eq("task_status", 0);
 //        }
-        List<Task> list = taskMapper.getTaskWithProjectName(queryWrapper, (pageIndex-1)*pageSize, pageSize);
-
+        List<Task> list = taskMapper.getTaskWithProjectName(queryWrapper, (pageIndex-1)*pageSize, pageSize,companyId,groupName);
         int total = taskMapper.selectCount(queryWrapper);;
         Map<String, Object> map = new HashMap<>();
         map.put("records", list);
@@ -748,5 +749,16 @@ public class TaskController {
         msg.data = map;
         return msg;
     }
+    @RequestMapping("/getGroupNameList")
+    public HttpRespMsg getGroupNameList(HttpServletRequest request){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        List<Project> projectList = projectService.list(new QueryWrapper<Project>().eq("company_id", companyId));
+        List<Integer> collect = projectList.stream().distinct().map(Project::getId).collect(Collectors.toList());
+        List<ProjectSeparate> projectSeparateList = projectSeparateMapper.selectList(new QueryWrapper<ProjectSeparate>().in("id", collect));
+        List<String> nameList = projectSeparateList.stream().distinct().map(ProjectSeparate::getProjectCategorySub).collect(Collectors.toList());
+        httpRespMsg.data=nameList;
+        return httpRespMsg;
+    }
 }
 

+ 31 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCustomController.java

@@ -3,10 +3,12 @@ package com.management.platform.controller;
 
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.SubUserCustom;
 import com.management.platform.entity.User;
 import com.management.platform.entity.UserCustom;
 import com.management.platform.mapper.UserCustomMapper;
 import com.management.platform.mapper.UserMapper;
+import com.management.platform.service.SubUserCustomService;
 import com.management.platform.service.UserCustomService;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,7 +17,10 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -33,6 +38,8 @@ public class UserCustomController {
     @Resource
     private UserCustomMapper userCustomMapper;
     @Resource
+    private SubUserCustomService subUserCustomService;
+    @Resource
     private UserMapper userMapper;
     @RequestMapping("/addOrMod")
     public HttpRespMsg addOrMod(String json, HttpServletRequest request){
@@ -92,5 +99,29 @@ public class UserCustomController {
         userCustomService.removeById(id);
         return new HttpRespMsg();
     }
+    @RequestMapping("/getUserCustomTitle")
+    public HttpRespMsg getUserCustomTitle(HttpServletRequest request){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
+        List<UserCustom> userCustomList = userCustomMapper.selectList(new QueryWrapper<UserCustom>().eq("company_id", user.getCompanyId()).eq("type", 0));
+        List<UserCustom> customList = userCustomMapper.selectList(new QueryWrapper<UserCustom>().eq("company_id", user.getCompanyId()));
+        List<SubUserCustom> subUserCustomList =subUserCustomService.list();
+        List<String> fieldList=new ArrayList<>();
+        for (int i = 0; i < customList.size(); i++) {
+            UserCustom userCustom = customList.get(i);
+            if(userCustom.getType()==0){
+                fieldList.add("plate"+(i+1));
+            }
+        }
+        for (UserCustom userCustom : userCustomList) {
+            List<SubUserCustom> collect = subUserCustomList.stream().filter(sub -> sub.getUserCustomId().equals(userCustom.getId())).collect(Collectors.toList());
+            userCustom.setSubUserCustomList(collect);
+        }
+        HashMap map=new HashMap();
+        map.put("result",userCustomList);
+        map.put("field",fieldList);
+        httpRespMsg.data=map;
+        return httpRespMsg;
+    }
 }
 

+ 43 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/CompanyReport.java

@@ -0,0 +1,43 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+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 2022-08-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class CompanyReport extends Model<CompanyReport> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 公司id
+     */
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 报表id
+     */
+    @TableField("report_form_id")
+    private Integer reportFormId;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return null;
+    }
+
+}

+ 8 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java

@@ -288,9 +288,17 @@ public class Project extends Model<Project> {
     @TableField("current_stage_name")
     private String currentStageName;
 
+    /**
+     * 项目产值
+     */
+    @TableField("output_value")
+    private Double outputValue;
+
     @TableField(exist = false)
     ProjectSeparate projectSeparate;
 
+    @TableField(exist = false)
+    List<ProjectBasecost> projectBasecostList;
 
     @Override
     protected Serializable pkVal() {

+ 19 - 12
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Report.java

@@ -1,16 +1,9 @@
 package com.management.platform.entity;
 
-import java.math.BigDecimal;
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
-import java.time.LocalDate;
-import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
 import com.baomidou.mybatisplus.annotation.TableField;
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.List;
-
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.management.platform.entity.vo.WorktimeItem;
 import lombok.Data;
@@ -18,13 +11,20 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+
 /**
  * <p>
  * 
  * </p>
  *
  * @author Seyason
- * @since 2022-07-24
+ * @since 2022-08-04
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -66,13 +66,13 @@ public class Report extends Model<Report> {
     private Double workingTime;
 
     /**
-     * 报告内容
+     * 报告内容; 根据multi_worktime的取值,形式有差别
      */
     @TableField("content")
     private String content;
 
     /**
-     * 审查状态 0-未审核 1-已通过 2-未通过
+     * 审查状态 0-未审核 1-已通过 2-未通过, -1-导入待审核, 3草稿
      */
     @TableField("state")
     private Integer state;
@@ -250,6 +250,7 @@ public class Report extends Model<Report> {
      */
     @TableField("is_final_audit")
     private Integer isFinalAudit;
+
     /**
      * 审核流程:审核过程中,项目的审核状态; 0-待审核,1-审核通过
      */
@@ -338,6 +339,12 @@ public class Report extends Model<Report> {
     @TableField("group_audit_state")
     private Integer groupAuditState;
 
+    /**
+     * 评价
+     */
+    @TableField("evaluate")
+    private String evaluate;
+
 
     @Override
     protected Serializable pkVal() {

+ 11 - 19
src/main/java/com/management/platform/entity/ExpenseType.java

@@ -1,26 +1,27 @@
 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 com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+import java.io.Serializable;
+
 /**
  * <p>
  * 
  * </p>
  *
  * @author Seyason
- * @since 2022-07-28
+ * @since 2022-08-03
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
-public class ExpenseType extends Model<ExpenseType> {
+public class ReportForm extends Model<ReportForm> {
 
     private static final long serialVersionUID=1L;
 
@@ -28,22 +29,13 @@ public class ExpenseType extends Model<ExpenseType> {
     private Integer id;
 
     /**
-     * 主类型: 0-一般费用,1-差旅费用,2-外包费用
-     */
-    @TableField("main_type")
-    private Integer mainType;
-
-    /**
-     * 费用类型名称
+     * 报表名称
      */
-    @TableField("type_name")
-    private String typeName;
+    @TableField("report_form_name")
+    private String reportFormName;
 
-    /**
-     * 公司id
-     */
-    @TableField("company_id")
-    private Integer companyId;
+    @TableField(exist = false)
+    private Integer owned;
 
 
     @Override

+ 7 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/SysFunction.java

@@ -16,7 +16,7 @@ import java.io.Serializable;
  * </p>
  *
  * @author Seyason
- * @since 2022-06-30
+ * @since 2022-08-04
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -136,6 +136,12 @@ public class SysFunction extends Model<SysFunction> {
     @TableField("remarks")
     private String remarks;
 
+    /**
+     * 权限所属报表
+     */
+    @TableField("report_form_id")
+    private Integer reportFormId;
+
     @TableField(exist = false)
     private boolean checked;
     @Override

+ 19 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -17,7 +17,7 @@ import java.util.List;
  * </p>
  *
  * @author Seyason
- * @since 2022-08-03
+ * @since 2022-08-05
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -296,6 +296,24 @@ public class TimeType extends Model<TimeType> {
     @TableField("project_level_state")
     private Integer projectLevelState;
 
+    /**
+     * 0-未开启 1-开启
+     */
+    @TableField("need_evaluate")
+    private Integer needEvaluate;
+
+    /**
+     * 0-未开启 1-开启
+     */
+    @TableField("output_value_status")
+    private Integer outputValueStatus;
+
+    /**
+     * 0-未开启 1-开启
+     */
+    @TableField("user_custom_static")
+    private Integer userCustomStatic;
+
     @TableField(exist = false)
     private List<User> userList;
 

+ 8 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/UserCustom.java

@@ -1,14 +1,16 @@
 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 com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+import java.io.Serializable;
+import java.util.List;
+
 /**
  * <p>
  * 
@@ -39,6 +41,9 @@ public class UserCustom extends Model<UserCustom> {
     @TableField("type")
     private Integer type;
 
+    @TableField(exist = false)
+    private List<SubUserCustom> subUserCustomList;
+
 
     @Override
     protected Serializable pkVal() {

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

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

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java

@@ -119,4 +119,6 @@ public interface ProjectMapper extends BaseMapper<Project> {
     List<Map<String, Object>> selectWithGroupProject(Integer companyId, String startDate, String endDate,  Integer startIndex, Integer endIndex, Integer projectId, List<Integer> inchagerIds, Integer groupId);
 
     long selectCountWithGroupProject(Integer companyId, String startDate, String endDate, Integer startIndex, Integer endIndex, Integer projectId, List<Integer> inchagerIds, Integer groupId);
+
+    List<Map<String, Object>> getCostByUserCustom(String startDate, String endDate, Integer companyId, List<Integer> deptIds, Integer customId, String subCustomName,String fieldName);
 }

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

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

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskMapper.java

@@ -35,7 +35,7 @@ public interface TaskMapper extends BaseMapper<Task> {
 
     Integer getProjectTaskCount(Integer companyId, Integer projectId,Integer taskType,List<Integer> inchagerIds);
 
-    List getTaskWithProjectName(@Param(Constants.WRAPPER) Wrapper wrapper, Integer pageStart, Integer pageSize);
+    List getTaskWithProjectName(@Param(Constants.WRAPPER) Wrapper wrapper, Integer pageStart, Integer pageSize,Integer companyId,String groupName);
 
     List recentSimpleList(Integer projectId, String userId);
 

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

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

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

@@ -43,7 +43,7 @@ public interface ProjectService extends IService<Project> {
                             String providerIds,
                             String providerNames,
                             HttpServletRequest request,
-                            ProjectSeparate projectSeparate,boolean onlyChangeParticipate);
+                            ProjectSeparate projectSeparate,Double outputValue,boolean onlyChangeParticipate);
 
     HttpRespMsg deleteProject(Integer id, Integer force);
 
@@ -170,4 +170,12 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg getTimeCostByGroupProject(String startDate, String endDate, Integer pageIndex, Integer pageSize, Integer groupId, Integer projectId, HttpServletRequest request);
 
     HttpRespMsg exportGroupWithProjectTimeCost(String startDate, String endDate, Integer pageIndex, Integer pageSize, Integer groupId, Integer projectId, HttpServletRequest request);
+
+    HttpRespMsg getProjectBaseCost(Integer projectId, HttpServletRequest request, Integer pageIndex, Integer pageSize);
+
+    HttpRespMsg exportProjectBaseCost(HttpServletRequest request);
+
+    HttpRespMsg getTimeCostByUserCustom(String startDate, String endDate, String subCustomName, Integer customId,HttpServletRequest request,String fieldName);
+
+    HttpRespMsg exportTimeCostByUserCustom(String startDate, String endDate, String subCustomName, Integer customId, HttpServletRequest request, String fieldName);
 }

+ 3 - 3
src/main/java/com/management/platform/service/ExpenseTypeService.java

@@ -1,6 +1,6 @@
 package com.management.platform.service;
 
-import com.management.platform.entity.ExpenseType;
+import com.management.platform.entity.ReportForm;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 /**
@@ -9,8 +9,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * </p>
  *
  * @author Seyason
- * @since 2022-07-28
+ * @since 2022-08-03
  */
-public interface ExpenseTypeService extends IService<ExpenseType> {
+public interface ReportFormService extends IService<ReportForm> {
 
 }

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java

@@ -41,13 +41,13 @@ public interface ReportService extends IService<Report> {
                                String userId,
                                HttpServletRequest request);
 
-    HttpRespMsg approveReport(String reportIds, Integer isDepartment, HttpServletRequest request);
+    HttpRespMsg approveReport(String reportIds, Integer isDepartment, HttpServletRequest request,String evaluate);
 
     HttpRespMsg denyReport(String date, String reportIds, String reason, Integer isDepartment, HttpServletRequest request);
 
     HttpRespMsg getMembList(String date, HttpServletRequest request);
 
-    HttpRespMsg batchApproveReport(String ids, Integer isDepartment, HttpServletRequest request);
+    HttpRespMsg batchApproveReport(String ids, Integer isDepartment, HttpServletRequest request,String evaluate);
     HttpRespMsg batchDenyReport(String ids, Integer isDepartment, String reason, HttpServletRequest request);
 
     HttpRespMsg cancelReport(String userId, String reportIds, HttpServletRequest request);

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

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

+ 278 - 44
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -148,6 +148,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     ProjectSeparateMapper projectSeparateMapper;
     @Resource
     ProjectStageMapper projectStageMapper;
+    @Resource
+    UserCustomMapper userCustomMapper;
+    @Resource
+    SubUserCustomMapper subUserCustomMapper;
+
 
     @Resource
     private HttpServletResponse response;
@@ -258,7 +263,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             TimeType timeType = timeTypeMapper.selectById(companyId);
             List<Integer> projectIds = projectList.stream().distinct().map(pl -> pl.getId()).collect(Collectors.toList());
             List<ProjectSeparate> projectSeparateList=new ArrayList<>();
-            if(companyId==936){
+            if(companyId==936||companyId==428){
                 if (projectIds.size() > 0) {
                     projectSeparateList = projectSeparateMapper.selectList(new QueryWrapper<ProjectSeparate>().in("id", projectIds));
                 }
@@ -319,7 +324,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                     projectVO.setProviderInfoList(mapList);
                 }
-                if(companyId==936){
+                if(companyId==936||companyId==428){
                         Optional<ProjectSeparate> first1 = projectSeparateList.stream().filter(ps -> ps.getId().equals(project.getId())).findFirst();
                         if(first1.isPresent()){
                             projectVO.setProjectSeparate(first1.get());
@@ -365,11 +370,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                    String providerIds,
                                    String providerNames,
                                    HttpServletRequest request,
-                                   ProjectSeparate projectSeparate,boolean onlyChangeParticipate) {
+                                   ProjectSeparate projectSeparate,Double outputValue,boolean onlyChangeParticipate) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("Token"));
         Integer companyId = user.getCompanyId();
-
+        TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
         boolean isNew = true;
         //检查负责人要在参与人中
         if (inchargerId != null) {
@@ -423,6 +428,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             .setTaskGpIncharge(taskGpIncharge)
                             .setProviderIds(providerIds)
                             .setProviderNames(providerNames);
+                    if(timeType.getOutputValueStatus()==1){
+                        project.setOutputValue(outputValue==null?0.00:outputValue);
+                    }
                     ProjectMain projectMain = projectMainMapper.selectById(projectMainId);
                     if(projectMain!=null){
                         project.setCategory(projectMain.getCategoryId());
@@ -471,7 +479,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         }
                     }
                     id = project.getId();
-                    if(companyId==936){
+                    if(companyId==936||companyId==428){
                         projectSeparate.setId(id);
                         projectSeparateMapper.insert(projectSeparate);
                     }
@@ -502,6 +510,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         .setTaskGpIncharge(taskGpIncharge)
                         .setProviderIds(providerIds)
                         .setProviderNames(providerNames);
+                if(timeType.getOutputValueStatus()==1){
+                    p.setOutputValue(outputValue==null?0.00:outputValue);
+                }
                 if (category != null) {
                     ProjectCategory projectCategory = projectCategoryMapper.selectById(category);
                     if (projectCategory != null) {
@@ -509,7 +520,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         p.setCategoryName(projectCategory.getName());
                     }
                 }
-                if(companyId==936){
+                if(companyId==936||companyId==428){
                     //编辑之前的项目是否存在子表数据
                     ProjectSeparate separate = projectSeparateMapper.selectById(id);
                     projectSeparate.setId(id);
@@ -1179,7 +1190,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         List<ProjectAuditor> auditorList = projectAuditorMapper.selectList(new QueryWrapper<ProjectAuditor>().eq("project_id", id));
         project.setAuditorList(auditorList);
         project.setAuditUserIds(auditorList.stream().map(ProjectAuditor::getAuditorId).collect(Collectors.toList()));
-        if(project.getCompanyId()==936){
+        if(project.getCompanyId()==936||project.getCompanyId()==428){
             ProjectSeparate projectSeparate = projectSeparateMapper.selectById(id);
             project.setProjectSeparate(projectSeparate);
         }
@@ -2772,20 +2783,25 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     int i=0;
                     int k=0;
                     int c=0;
+                    int d=0;
                     if(timeType.getMainProjectState()==1){
                         mainNameCell = row.getCell(0);
-                        codeCell = row.getCell(1);
+                        if(company.getId()==428){
+                            projectCategorySubCell=row.getCell(1);
+                            d++;
+                        }
+                        codeCell = row.getCell(1+d);
                         if(company.getId()==936){
-                            contractCell=row.getCell(2);
+                            contractCell=row.getCell(2+d);
                             c++;
                         }
-                        isPublicCell = row.getCell(2+c);
-                        nameCell = row.getCell(3+c);
-                        participatorCell = row.getCell(4+c);
-                        inchargerCell = row.getCell(5+c);
-                        levelCell = row.getCell(6+c);
+                        isPublicCell = row.getCell(2+c+d);
+                        nameCell = row.getCell(3+c+d);
+                        participatorCell = row.getCell(4+c+d);
+                        inchargerCell = row.getCell(5+c+d);
+                        levelCell = row.getCell(6+c+d);
                         if(company.getPackageCustomer()==1){
-                            customerCell=row.getCell(7+c);
+                            customerCell=row.getCell(7+c+d);
                             i++;
                         }
                         if(company.getPackageProvider()==1){
@@ -2795,17 +2811,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                 }
                             }
                         }
-                        startDateCell = row.getCell(7+i+k+c);
-                        endDateCell = row.getCell(8+i+k+c);
-                        amountCell = row.getCell(9+i+k+c);
+                        startDateCell = row.getCell(7+i+k+c+d);
+                        endDateCell = row.getCell(8+i+k+c+d);
+                        amountCell = row.getCell(9+i+k+c+d);
                         if(company.getId()==936){
-                            warrantyEndDateCell=row.getCell(10+i+k+c);
-                            warrantyStartDateCell=row.getCell(11+i+k+c);
-                            projectCategorySubCell=row.getCell(12+i+k+c);
-                            regionCell=row.getCell(13+i+k+c);
-                            buCell=row.getCell(14+i+k+c);
-                            stateCell=row.getCell(15+i+k+c);
-                            stageCell=row.getCell(16+i+k+c);
+                            warrantyEndDateCell=row.getCell(10+i+k+c+d);
+                            warrantyStartDateCell=row.getCell(11+i+k+c+d);
+                            projectCategorySubCell=row.getCell(12+i+k+c+d);
+                            regionCell=row.getCell(13+i+k+c+d);
+                            buCell=row.getCell(14+i+k+c+d);
+                            stateCell=row.getCell(15+i+k+c+d);
+                            stageCell=row.getCell(16+i+k+c+d);
                         }
                     }else {
                         codeCell = row.getCell(0);
@@ -2813,15 +2829,19 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             contractCell=row.getCell(1);
                             c++;
                         }
-                        categoryCell = row.getCell(1+c);
-                        isPublicCell = row.getCell(2+c);
-                        nameCell = row.getCell(3+c);
-                        subNameCell = row.getCell(4+c);
-                        participatorCell = row.getCell(5+c);
-                        inchargerCell = row.getCell(6+c);
-                        levelCell = row.getCell(7+c);
+                        if(company.getId()==428){
+                            projectCategorySubCell=row.getCell(1+c);
+                            d++;
+                        }
+                        categoryCell = row.getCell(1+c+d);
+                        isPublicCell = row.getCell(2+c+d);
+                        nameCell = row.getCell(3+c+d);
+                        subNameCell = row.getCell(4+c+d);
+                        participatorCell = row.getCell(5+c+d);
+                        inchargerCell = row.getCell(6+c+d);
+                        levelCell = row.getCell(7+c+d);
                         if(company.getPackageCustomer()==1){
-                            customerCell=row.getCell(8+c);
+                            customerCell=row.getCell(8+c+d);
                             i++;
                         }
                         if(company.getPackageProvider()==1){
@@ -2831,17 +2851,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                 }
                             }
                         }
-                        startDateCell = row.getCell(8+i+k+c);
-                        endDateCell = row.getCell(9+i+k+c);
-                        amountCell = row.getCell(10+i+k+c);
+                        startDateCell = row.getCell(8+i+k+c+d);
+                        endDateCell = row.getCell(9+i+k+c+d);
+                        amountCell = row.getCell(10+i+k+c+d);
                         if(company.getId()==936){
-                            warrantyEndDateCell=row.getCell(11+i+k+c);
-                            warrantyStartDateCell=row.getCell(12+i+k+c);
-                            projectCategorySubCell=row.getCell(13+i+k+c);
-                            regionCell=row.getCell(14+i+k+c);
-                            buCell=row.getCell(15+i+k+c);
-                            stateCell=row.getCell(16+i+k+c);
-                            stageCell=row.getCell(17+i+k+c);
+                            warrantyEndDateCell=row.getCell(11+i+k+c+d);
+                            warrantyStartDateCell=row.getCell(12+i+k+c+d);
+                            projectCategorySubCell=row.getCell(13+i+k+c+d);
+                            regionCell=row.getCell(14+i+k+c+d);
+                            buCell=row.getCell(15+i+k+c+d);
+                            stateCell=row.getCell(16+i+k+c+d);
+                            stageCell=row.getCell(17+i+k+c+d);
                         }
                     }
                     if (codeCell != null)codeCell.setCellType(CellType.STRING);
@@ -3094,7 +3114,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     if(company.getId()==936){
                         ProjectSeparate projectSeparate=new ProjectSeparate();
                         projectSeparate.setId(id);
-                        if (warrantyStartDateCell !=null && !StringUtils.isEmpty(warrantyStartDateCell.getDateCellValue())) {
+                        if (warrantyStartDateCell !=null&& warrantyStartDateCell.getCellTypeEnum() == CellType.NUMERIC  && !StringUtils.isEmpty(warrantyStartDateCell.getDateCellValue())) {
                             projectSeparate.setWarrantyStartDate(LocalDate.parse(sdf.format(warrantyStartDateCell.getDateCellValue()), DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                         }
                         if (warrantyEndDateCell !=null && warrantyEndDateCell.getCellTypeEnum() == CellType.NUMERIC && !StringUtils.isEmpty(warrantyEndDateCell.getDateCellValue())) {
@@ -3115,6 +3135,14 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         }
                         projectSeparateMapper.insert(projectSeparate);
                     }
+                    if(company.getId()==428){
+                        ProjectSeparate projectSeparate=new ProjectSeparate();
+                        projectSeparate.setId(id);
+                        if (projectCategorySubCell != null && !StringUtils.isEmpty(projectCategorySubCell.getStringCellValue())) {
+                            projectSeparate.setProjectCategorySub(projectCategorySubCell.getStringCellValue());
+                        }
+                        projectSeparateMapper.insert(projectSeparate);
+                    }
                     importCount++;
                     //参与人
                     if(inchargerCell!=null){
@@ -3290,6 +3318,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             headList.add("项目状态");
             headList.add("项目阶段");
         }
+        if(company.getId()==428){
+            headList.add("项目分组");
+        }
         List<List<String>> allList = new ArrayList<List<String>>();
         allList.add(headList);
         String[] levelArray = new String[]{"正常","紧急","重要","重要且紧急","低风险","中风险","高风险"};
@@ -3390,6 +3421,15 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 }
                 rowData.add(projectVO.getCurrentStageName()==null?"":projectVO.getCurrentStageName());
             }
+            if(company.getId()==428){
+                Optional<ProjectSeparate> first = projectSeparateList.stream().filter(ps -> ps.getId().equals(projectVO.getId())).findFirst();
+                if(first.isPresent()){
+                    ProjectSeparate projectSeparate = first.get();
+                    rowData.add(projectSeparate.getProjectCategorySub()==null?"":projectSeparate.getProjectCategorySub());
+                }else {
+                    rowData.add("");
+                }
+            }
             allList.add(rowData);
         }
 
@@ -5024,6 +5064,200 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return httpRespMsg;
     }
 
+    @Override
+    public HttpRespMsg getProjectBaseCost(Integer projectId, HttpServletRequest request, Integer pageIndex, Integer pageSize) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("Token"));
+        Integer companyId = user.getCompanyId();
+        List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId));
+        List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "全部项目成本基线表");
+        List<SysRichFunction> functionInchargeList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "负责项目成本基线表");
+        //判断查看权限
+        List<Integer> inchagerIds=null;
+        if(functionAllList.size()==0){
+            inchagerIds=new ArrayList<>();
+            if(functionInchargeList.size()>0){
+                List<Project> list = projectList.stream().filter(pl ->(pl.getInchargerId()==null?0:pl.getInchargerId()).equals(user.getId())).collect(Collectors.toList());
+                if(list!=null){
+                    List<Integer> collect = list.stream().map(li -> li.getId()).collect(Collectors.toList());
+                    inchagerIds.addAll(collect);
+                }
+            }else {
+                inchagerIds.add(-1);
+            }
+        }
+        QueryWrapper<Project> queryWrapper=new QueryWrapper<>();
+        if(projectId!=null){
+            queryWrapper.eq("id",projectId);
+        }
+        if(inchagerIds!=null){
+            queryWrapper.in("id",inchagerIds);
+        }
+        IPage<Project> projectIPage;
+        if(pageIndex!=null && pageSize!=null){
+            projectIPage= projectMapper.selectPage(new Page<>(pageIndex, pageSize),
+                    queryWrapper.eq("company_id",user.getCompanyId()));
+        }else {
+            projectIPage= projectMapper.selectPage(new Page<>(-1,-1),
+                    queryWrapper.eq("company_id",user.getCompanyId()));
+        }
+        List<Project> targetProjectList = projectIPage.getRecords();
+        List<Integer> collect = targetProjectList.stream().distinct().map(Project::getId).collect(Collectors.toList());
+        List<ProjectBasecost> projectBasecostList=new ArrayList<>();
+        if(collect!=null&&collect.size()>0){
+            projectBasecostList = projectBasecostMapper.selectList(new QueryWrapper<ProjectBasecost>().in("project_id", collect));
+        }
+        List<ProjectBasecostSetting> settingList = projectBasecostSettingMapper.selectList(new QueryWrapper<ProjectBasecostSetting>().eq("company_id", user.getCompanyId()));
+        List<String> titleList = settingList.stream().distinct().map(ProjectBasecostSetting::getName).collect(Collectors.toList());
+        for (Project project : targetProjectList) {
+            List<ProjectBasecost> basecostList = projectBasecostList.stream().filter(pb -> pb.getProjectId().equals(project.getId())).collect(Collectors.toList());
+            if(basecostList!=null){
+                project.setProjectBasecostList(basecostList);
+            }
+        }
+        HashMap map=new HashMap();
+        map.put("total",projectIPage.getTotal());
+        map.put("title",titleList);
+        map.put("result",targetProjectList);
+        httpRespMsg.data=map;
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg exportProjectBaseCost(HttpServletRequest request) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        HttpRespMsg projectBaseCost = getProjectBaseCost(null, request, null, null);
+        HashMap map= (HashMap) projectBaseCost.data;
+        List<Project> resultProjectList= (List<Project>) map.get("result");
+        List<List<String>> dataList=new ArrayList<>();
+        List<String> titleList= (List<String>) map.get("title");
+        List<String> firstTitle=new ArrayList<>();
+        firstTitle.add("项目编号");
+        firstTitle.add("项目名称");
+        firstTitle.addAll(titleList);
+        dataList.add(firstTitle);
+        for (Project project : resultProjectList) {
+            List<String> item=new ArrayList<>();
+            item.add(project.getProjectCode());
+            item.add(project.getProjectName());
+            for (String s : titleList) {
+                List<ProjectBasecost> projectBasecostList = project.getProjectBasecostList();
+                if(projectBasecostList!=null){
+                    Optional<ProjectBasecost> first = projectBasecostList.stream().filter(pb -> pb.getBaseName().equals(s)).findFirst();
+                    if(first.isPresent()){
+                        ProjectBasecost projectBasecost = first.get();
+                        item.add(String.valueOf(projectBasecost.getBaseAmount()));
+                    }else item.add("");
+                }
+            }
+            dataList.add(item);
+        }
+        //生成excel文件导出
+        String fileName = "项目成本基线表_"+System.currentTimeMillis();
+        String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , dataList, path);
+        httpRespMsg.data = resp;
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg getTimeCostByUserCustom(String startDate, String endDate, String subCustomName, Integer customId,HttpServletRequest request,String fieldName) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        User targetUser = userMapper.selectById(request.getHeader("Token"));
+        Integer companyId =targetUser.getCompanyId();
+        Map<String, Object> resultMap = new HashMap<>();
+        //当前用户管理部门
+        List<Integer> deptIds=null;
+        List<Department> allDepartmentList=departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",companyId));
+        List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id", companyId));
+        List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", targetUser.getId()));
+        List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看全公司");
+        List<SysRichFunction> functionDpartList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看负责部门");
+        List<SysRichFunction> functionTimeList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看工时统计");
+        List<SysRichFunction> functionCostList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看成本统计");
+        //判断查看权限
+        if(functionAllList.size()==0){
+            deptIds=new ArrayList<>();
+            deptIds.add(-1);
+            if(functionDpartList.size()>0){
+                if(functionTimeList.size()>0||functionCostList.size()>0){
+                    List<Integer> collect = departmentList.stream().distinct().map(dm -> dm.getDepartmentId()).collect(Collectors.toList());
+                    List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
+                    collect.addAll(otherCollect);
+                    for (Integer integer : collect) {
+                        List<Integer> branchDepartment = getBranchDepartment(integer, allDepartmentList);
+                        deptIds.addAll(branchDepartment);
+                    }
+                }
+            }
+        }
+        List<Map<String, Object>> list= projectMapper.getCostByUserCustom(startDate, endDate,companyId,deptIds,customId,subCustomName,fieldName);
+        BigDecimal totalCostMoney = new BigDecimal(0);
+        Map<String, Object> finalMap = new HashMap<>();
+        for (Map<String, Object> map : list) {
+            totalCostMoney=totalCostMoney.add((BigDecimal) map.get("costMoney"));
+        }
+        finalMap.put("totalCostMoney", totalCostMoney);
+        finalMap.put("list", list);
+        if(functionCostList.size()==0){
+            finalMap.put("totalCostMoney",null);
+            list.forEach(li->{
+                List<Map<String,Object>> mapList= (List<Map<String, Object>>) li.get("name");
+                mapList.forEach(ml->{
+                    ml.put("costMoney",null);
+                });
+            });
+        }
+        if(functionTimeList.size()==0){
+            list.forEach(li->{
+                List<Map<String,Object>> mapList= (List<Map<String, Object>>) li.get("name");
+                mapList.forEach(ml->{
+                    ml.put("cost",null);
+                });
+            });
+        }
+        httpRespMsg.data = finalMap;
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg exportTimeCostByUserCustom(String startDate, String endDate, String subCustomName, Integer customId, HttpServletRequest request, String fieldName) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        User targetUser = userMapper.selectById(request.getHeader("token"));
+        List<SysRichFunction> functionTimeList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看工时统计");
+        List<SysRichFunction> functionCostList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看成本统计");
+        HttpRespMsg msg = getTimeCostByUserCustom(startDate, endDate, null, customId, request, fieldName);
+        HashMap map= (HashMap) msg.data;
+        UserCustom userCustom = userCustomMapper.selectById(customId);
+        List<Map<String,Object>> resultList= (List<Map<String, Object>>) map.get("list");
+        List<List<String>> dataList=new ArrayList<>();
+        List<String> titleList=new ArrayList<>();
+        titleList.add(userCustom.getName());
+        if(functionTimeList.size()>0){
+            titleList.add("工时");
+        }
+        if(functionCostList.size()>0){
+            titleList.add("成本");
+        }
+        dataList.add(titleList);
+        for (Map<String, Object> stringObjectMap : resultList) {
+            List<String> item=new ArrayList<>();
+            item.add(String.valueOf(stringObjectMap.get("name")));
+            if(functionTimeList.size()>0){
+                item.add(String.valueOf(stringObjectMap.get("cost"))==null?"":String.valueOf(stringObjectMap.get("cost")));
+            }
+            if(functionCostList.size()>0){
+                item.add(String.valueOf(stringObjectMap.get("costMoney"))==null?"":String.valueOf(stringObjectMap.get("costMoney")));
+            }
+            dataList.add(item);
+        }
+        //生成excel文件导出
+        String fileName = userCustom.getName()+"工时成本统计_"+System.currentTimeMillis();
+        String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , dataList, path);
+        httpRespMsg.data = resp;
+
+        return httpRespMsg;
+    }
+
 
     private List<Department> getSubDepts(Department dp, List<Department> list) {
         List<Department> collect = list.stream().filter(l -> dp.getDepartmentId().equals(l.getSuperiorId())).collect(Collectors.toList());

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

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

+ 44 - 9
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -1128,11 +1128,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 
     //审核通过某天某人的某报告
     @Override
-    public HttpRespMsg approveReport(String reportIds, Integer isDepartment, HttpServletRequest request) {
+    public HttpRespMsg approveReport(String reportIds, Integer isDepartment, HttpServletRequest request,String evaluate) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         String token = request.getHeader("Token");
         User user = userMapper.selectById(token);
         Company company = companyMapper.selectById(user.getCompanyId());
+        TimeType timeType = timeTypeMapper.selectById(company.getId());
         final List<Integer> ids = ListUtil.convertIntegerIdsArrayToList(reportIds);
         if (company.getPackageEngineering() == 1) {
             //检查是否有专业进度待审核
@@ -1148,6 +1149,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if (report.getDepartmentAuditState() == 0){
                         report = new Report();
                         report.setDepartmentAuditState(1);
+                        if(timeType.getNeedEvaluate()==1){
+                            report.setEvaluate(evaluate);
+                        }
                         reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                     }
                 }
@@ -1173,11 +1177,17 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         if (count == 0) {
                             Report report = new Report();
                             report.setDepartmentAuditState(0);
+                            if(timeType.getNeedEvaluate()==1){
+                                report.setEvaluate(evaluate);
+                            }
                             reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                         }
                     }
                 } else {
                     Report report = reportMapper.selectById(ids.get(0));
+                    if(timeType.getNeedEvaluate()==1){
+                        report.setEvaluate(evaluate);
+                    }
                     //部门待审核,部门审核通过
                     if (report.getDepartmentAuditState() == 0) {
                         report = new Report();
@@ -1206,7 +1216,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
         } else {
             //先按照大的审核模式进行分类
-            TimeType timeType = timeTypeMapper.selectById(company.getId());
             Report oneReport = reportMapper.selectById(ids.get(0));
             int oldState = oneReport.getState();
             String creatorId = oneReport.getCreatorId();
@@ -1223,6 +1232,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     return httpRespMsg;
                 }
                 for (Report r : reportList) {
+                    if(timeType.getNeedEvaluate()==1){
+                        r.setEvaluate(evaluate);
+                    }
                     if (r.getGroupAuditState() == 0) {
                         r.setGroupAuditState(1);
                         r.setProjectAuditTime(LocalDateTime.now());
@@ -1245,7 +1257,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                 .orderByAsc("seq"));
                 if (settings.size() == 0) {
                     //直接进行项目经理审核
-                    reportMapper.update(new Report().setState(1).setProjectAuditState(1).setProjectAuditTime(LocalDateTime.now()),
+                    reportMapper.update(new Report().setState(1).setProjectAuditState(1).setProjectAuditTime(LocalDateTime.now()).setEvaluate(timeType.getNeedEvaluate()==1?evaluate:null),
                             new QueryWrapper<Report>().in("id", ids));
                 } else {
                     //按流程走
@@ -1256,17 +1268,20 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         //最终审核了,审核通过
                         if (item.getIsDeptAudit() == 1) {
                             //如果最终是部门审核,直接通过
-                            reportMapper.update(new Report().setState(1).setProjectAuditTime(LocalDateTime.now()),
+                            reportMapper.update(new Report().setState(1).setProjectAuditTime(LocalDateTime.now()).setEvaluate(timeType.getNeedEvaluate()==1?evaluate:null),
                                     new QueryWrapper<Report>().in("id", ids));
                         } else {
                             //如果最终是项目审核,流程中的项目审核字段也要更新: state为最终审核状态,projectAuditState为阶段性的项目审核状态
-                            reportMapper.update(new Report().setState(1).setProjectAuditState(1).setProjectAuditTime(LocalDateTime.now()),
+                            reportMapper.update(new Report().setState(1).setProjectAuditState(1).setProjectAuditTime(LocalDateTime.now()).setEvaluate(timeType.getNeedEvaluate()==1?evaluate:null),
                                     new QueryWrapper<Report>().in("id", ids));
                         }
                     } else {
                         if (item.getIsDeptAudit() == 1) {
                             //当前是部门审核,获取审核部门id
                             Report upR = new Report();
+                            if(timeType.getNeedEvaluate()==1){
+                                upR.setEvaluate(evaluate);
+                            }
                             Integer auditDeptid = item.getAuditDeptid();
                             for (int m=0;m<settings.size(); m++) {
                                 if (auditDeptid.equals(settings.get(m).getAuditDeptId()) && m < settings.size() -1) {
@@ -1287,7 +1302,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                     new QueryWrapper<Report>().in("id", ids));
                         } else {
                             //当前的先审核通过
-                            reportMapper.update(new Report().setProjectAuditState(1),
+                            reportMapper.update(new Report().setProjectAuditState(1).setEvaluate(timeType.getNeedEvaluate()==1?evaluate:null),
                                     new QueryWrapper<Report>().in("id", ids));
                             //项目审核的情况下,需要判断是否该员工当天所有项目是否都是项目经理审核通过了
                             List<Report> sameUserSameDayOtherReports = reportMapper.selectList(new QueryWrapper<Report>()
@@ -1298,6 +1313,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             if (pendingNum == 0) {
                                 //没有其他待审核的项目了,流程往下走
                                 Report upR = new Report();
+                                if(timeType.getNeedEvaluate()==1){
+                                    upR.setEvaluate(evaluate);
+                                }
                                 for (int m=0;m<settings.size(); m++) {
                                     if (settings.get(m).getIsDeptAudit()== 0) {//找到项目审核的那个节点
                                         AuditWorkflowTimeSetting nextNode = settings.get(m + 1);
@@ -1771,10 +1789,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
-    public HttpRespMsg batchApproveReport(String reportIds, Integer isDepartment, HttpServletRequest request) {
+    public HttpRespMsg batchApproveReport(String reportIds, Integer isDepartment, HttpServletRequest request,String evaluate) {
         String token = request.getHeader("Token");
         User user = userMapper.selectById(token);
         Company company = companyMapper.selectById(user.getCompanyId());
+        TimeType timeType = timeTypeMapper.selectById(company.getId());
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         final List<Integer> ids = ListUtil.convertIntegerIdsArrayToList(reportIds);
         if (company.getPackageEngineering() == 1) {
@@ -1790,6 +1809,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if (report.getDepartmentAuditState() == 0) {
                         report = new Report();
                         report.setDepartmentAuditState(1);
+                        if(timeType.getNeedEvaluate()==1){
+                            report.setEvaluate(evaluate);
+                        }
                         reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                     }
                 }
@@ -1814,6 +1836,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         if (count == 0) {
                             Report report = new Report();
                             report.setDepartmentAuditState(0);
+                            if(timeType.getNeedEvaluate()==1){
+                                report.setEvaluate(evaluate);
+                            }
                             reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                         }
                     }
@@ -1823,6 +1848,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if (report.getDepartmentAuditState() == 0) {
                         report = new Report();
                         report.setDepartmentAuditState(1);
+                        if(timeType.getNeedEvaluate()==1){
+                            report.setEvaluate(evaluate);
+                        }
                         reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                     } else {
                         //直接进行项目经理审核
@@ -1835,10 +1863,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
 
         } else {
-            TimeType timeType = timeTypeMapper.selectById(company.getId());
             LocalDateTime now = LocalDateTime.now();
-
             Report oneReport = reportMapper.selectById(ids.get(0));
+            if(timeType.getNeedEvaluate()==1){
+                oneReport.setEvaluate(evaluate);
+            }
             int oldState = oneReport.getState();
             List<User> allUsers = null;
             List<Report> allReports = null;
@@ -1856,6 +1885,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     return httpRespMsg;
                 }
                 for (Report r : reportList) {
+                    if(timeType.getNeedEvaluate()==1){
+                        r.setEvaluate(evaluate);
+                    }
                     if (r.getGroupAuditState() == 0) {
                         r.setGroupAuditState(1);
                         r.setProjectAuditTime(LocalDateTime.now());
@@ -1892,6 +1924,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         User auditTargetUser = allUsers.stream().filter(a->a.getId().equals(creatorId)).findFirst().get();
                         List<AuditWorkflowTimeSetting> deptSettings = settings.stream().filter(s->s.getDeptId().equals(auditTargetUser.getDepartmentId())).collect(Collectors.toList());
                         Report curReport = new Report().setId(rid);
+                        if(timeType.getNeedEvaluate()==1){
+                            curReport.setEvaluate(evaluate);
+                        }
                         if (deptSettings.size() == 0) {
                             //直接进行项目经理审核
                             curReport.setState(1).setProjectAuditTime(now);

+ 4 - 6
src/main/resources/mapper/ExpenseTypeMapper.xml

@@ -1,18 +1,16 @@
 <?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.ExpenseTypeMapper">
+<mapper namespace="com.management.platform.mapper.CompanyReportMapper">
 
     <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.management.platform.entity.ExpenseType">
-        <id column="id" property="id" />
-        <result column="main_type" property="mainType" />
-        <result column="type_name" property="typeName" />
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.CompanyReport">
         <result column="company_id" property="companyId" />
+        <result column="report_form_id" property="reportFormId" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, main_type, type_name, company_id
+        company_id, report_form_id
     </sql>
 
 </mapper>

Datei-Diff unterdrückt, da er zu groß ist
+ 27 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml


+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportFormMapper.xml

@@ -0,0 +1,16 @@
+<?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.ReportFormMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ReportForm">
+        <id column="id" property="id" />
+        <result column="report_form_name" property="reportFormName" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, report_form_name
+    </sql>
+
+</mapper>

Datei-Diff unterdrückt, da er zu groß ist
+ 7 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml


+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/SysFunctionMapper.xml

@@ -23,6 +23,7 @@
         <result column="sync_corpwx_time" property="syncCorpwxTime" />
         <result column="finance_audit" property="financeAudit" />
         <result column="remarks" property="remarks" />
+        <result column="report_form_id" property="reportFormId" />
     </resultMap>
     <resultMap id="BaseResultMap1" type="com.management.platform.entity.vo.SysRichFunction">
         <id column="id" property="id" />
@@ -35,7 +36,7 @@
     </resultMap>
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, name, icon, code, module_id, seq, use_state, package_time, package_project, package_oa, package_expense, package_customer, package_engineering, package_contract, package_etimecard, package_finance, sync_corpwx_time, finance_audit, remarks
+        id, name, icon, code, module_id, seq, use_state, package_time, package_project, package_oa, package_expense, package_customer, package_engineering, package_contract, package_etimecard, package_finance, sync_corpwx_time, finance_audit, remarks, report_form_id
     </sql>
     <select id="getRoleFunctions" resultMap="BaseResultMap1" >
         select sys_function.id, sys_function.name, sys_function.icon, sys_function.code, sys_function.module_id, sys_function.seq, sys_module.name as module_name

+ 8 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskMapper.xml

@@ -199,7 +199,15 @@
     <select id="getTaskWithProjectName" resultMap="RichResultMap">
         SELECT task.*, project.`project_name`, stages.stages_name FROM task LEFT JOIN project ON project.id = task.`project_id`
         left join stages on stages.id = task.stages_id
+        <if test="companyId==428">
+            left join project_separate ps on ps.id=task.project_id
+        </if>
         ${ew.customSqlSegment}
+        <if test="companyId==428">
+            <if test="groupName!=null and groupName!=''">
+                and ps.project_category_sub=#{groupName}
+            </if>
+        </if>
         ORDER BY task.indate desc
         <if test="pageStart != null and pageSize != null">
             limit #{pageStart}, #{pageSize}

Datei-Diff unterdrückt, da er zu groß ist
+ 4 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml


+ 6 - 0
fhKeeper/formulahousekeeper/octopus/src/views/customer/list.vue

@@ -189,12 +189,14 @@
         <el-dialog v-if="editDialogG" :visible.sync="editDialogG" title="其他设置">
             <el-form label-width="100px">
                 <el-form-item><el-checkbox v-model="dialogData.reportWorkflow">是否开启审批流设置</el-checkbox></el-form-item>
+                <el-form-item><el-checkbox v-model="dialogData.needEvaluate">审核通过需输入评价</el-checkbox></el-form-item>
                 <el-form-item><el-checkbox v-model="dialogData.mainProjectState">是否启用主项目模式</el-checkbox></el-form-item>
                 <el-form-item><el-checkbox v-model="dialogData.isSecretSalary">是否秘薪模式</el-checkbox></el-form-item>
                 <el-form-item><el-checkbox v-model="dialogData.showFillauditTime">是否显示日报审批流程</el-checkbox></el-form-item>
                 <el-form-item><el-checkbox v-model="dialogData.isCro">是否CRO企业</el-checkbox></el-form-item>
                 <el-form-item><el-checkbox v-model="dialogData.onlyImportreport">是否仅使用导入日报审核(不要项目审核)</el-checkbox></el-form-item>
                 <el-form-item><el-checkbox v-model="dialogData.projectLevelState">是否开启项目级别自定义</el-checkbox></el-form-item>
+                <el-form-item><el-checkbox v-model="dialogData.outputValueStatus">是否开启项目产值字段</el-checkbox></el-form-item>
                 <el-form-item>
                     日报审核模式:
                     <el-select v-model="dialogData.reportAuditType" size="small">
@@ -331,12 +333,14 @@
                     },res => {
                         if(res.code == 'ok'){
                             this.$set(this.dialogData,'reportWorkflow',res.data.reportWorkflow ? true : false)
+                            this.$set(this.dialogData,'needEvaluate',res.data.needEvaluate ? true : false)
                             this.$set(this.dialogData,'mainProjectState',res.data.mainProjectState ? true : false)
                             this.$set(this.dialogData,'isSecretSalary',res.data.isSecretSalary ? true : false)
                             this.$set(this.dialogData,'showFillauditTime',res.data.showFillauditTime ? true : false)
                             this.$set(this.dialogData,'isCro',res.data.isCro ? true : false)
                             this.$set(this.dialogData,'onlyImportreport',res.data.onlyImportreport ? true : false)
                             this.$set(this.dialogData,'projectLevelState',res.data.projectLevelState ? true : false)
+                            this.$set(this.dialogData,'outputValueStatus',res.data.outputValueStatus ? true : false)
                             this.$set(this.dialogData,'reportAuditType',res.data.reportAuditType)
                         }else{
                             this.$message({
@@ -577,12 +581,14 @@
                 this.http.post('/company/setTimeTypeSetting',{
                     companyId: this.dialogData.id,
                     reportWorkflow: this.dialogData.reportWorkflow ? 1 : 0,
+                    needEvaluate: this.dialogData.needEvaluate ? 1 : 0,
                     mainProjectState: this.dialogData.mainProjectState ? 1 : 0,
                     isSecretSalary: this.dialogData.isSecretSalary ? 1 : 0,
                     showFillauditTime: this.dialogData.showFillauditTime ? 1 : 0,
                     isCro: this.dialogData.isCro ? 1 : 0,
                     onlyImportreport: this.dialogData.onlyImportreport ? 1 : 0,
                     projectLevelState: this.dialogData.projectLevelState ? 1 : 0,
+                    outputValueStatus: this.dialogData.outputValueStatus ? 1 : 0,
                     reportAuditType: this.dialogData.reportAuditType
                 },res => {
                     if(res.code == 'ok'){

+ 73 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/controller/CompanyReportController.java

@@ -0,0 +1,73 @@
+package com.management.platform.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.CompanyReport;
+import com.management.platform.entity.ReportForm;
+import com.management.platform.service.CompanyReportService;
+import com.management.platform.service.ReportFormService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+@RestController
+@RequestMapping("/company-report")
+public class CompanyReportController {
+    @Resource
+    private CompanyReportService companyReportService;
+    @Resource
+    private ReportFormService reportFormService;
+
+
+    @RequestMapping("/list")
+    public HttpRespMsg list(Integer companyId){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        List<CompanyReport> companyReportList = companyReportService.list(new QueryWrapper<CompanyReport>().eq("company_id", companyId));
+        List<ReportForm> reportFormList = reportFormService.list();
+        for (ReportForm reportForm : reportFormList) {
+            boolean b = companyReportList.stream().anyMatch(cr -> cr.getReportFormId().equals(reportForm.getId()));
+            if(b){
+                reportForm.setOwned(1);
+            }
+        }
+        httpRespMsg.data=reportFormList;
+        return httpRespMsg;
+    }
+
+    @RequestMapping("/update")
+    public HttpRespMsg update(Integer companyId,String formIds){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        companyReportService.remove(new QueryWrapper<CompanyReport>().eq("company_id", companyId));
+        List<CompanyReport> updateList=new ArrayList<>();
+        if(formIds!=null&&!StringUtils.isEmpty(formIds)){
+            String[] split = formIds.split(",");
+            List<String> list = Arrays.asList(split);
+            for (String s : list) {
+                CompanyReport companyReport=new CompanyReport();
+                companyReport.setCompanyId(companyId);
+                companyReport.setReportFormId(Integer.parseInt(s));
+                updateList.add(companyReport);
+            }
+            if(!companyReportService.saveBatch(updateList)){
+                httpRespMsg.setError("更新失败");
+            }
+        }
+        return httpRespMsg;
+    }
+
+}
+

+ 44 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/CompanyReport.java

@@ -0,0 +1,44 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class CompanyReport extends Model<CompanyReport> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 公司id
+     */
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 报表id
+     */
+    @TableField("report_form_id")
+    private Integer reportFormId;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return null;
+    }
+
+}

+ 11 - 19
fhKeeper/formulahousekeeper/user/src/main/java/com/hssx/user/entity/UserPermission.java

@@ -1,9 +1,8 @@
-package com.hssx.user.entity;
+package com.management.platform.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -13,37 +12,30 @@ import java.io.Serializable;
 
 /**
  * <p>
- *
+ * 
  * </p>
  *
- * @author Reiskuchen
- * @since 2019-11-04
+ * @author Seyason
+ * @since 2022-08-03
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
-@TableName("user_permission")
-public class UserPermission extends Model<UserPermission> {
+public class ReportForm extends Model<ReportForm> {
 
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID=1L;
 
-    /**
-     * 角色权限关联表主键
-     */
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
     /**
-     * 用户id
+     * 报表名称
      */
-    @TableField("user_id")
-    private Integer userId;
+    @TableField("report_form_name")
+    private String reportFormName;
 
-    /**
-     * 权限id
-     */
-    @TableField("permission_id")
-    private Integer permissionId;
+    @TableField(exist = false)
+    private Integer owned;
 
 
     @Override

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

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

+ 3 - 3
src/main/java/com/management/platform/mapper/ExpenseTypeMapper.java

@@ -1,7 +1,7 @@
 package com.management.platform.mapper;
 
-import com.management.platform.entity.ExpenseType;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.management.platform.entity.ReportForm;
 
 /**
  * <p>
@@ -9,8 +9,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * </p>
  *
  * @author Seyason
- * @since 2022-07-28
+ * @since 2022-08-03
  */
-public interface ExpenseTypeMapper extends BaseMapper<ExpenseType> {
+public interface ReportFormMapper extends BaseMapper<ReportForm> {
 
 }

+ 17 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/CompanyReportService.java

@@ -0,0 +1,17 @@
+package com.management.platform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.entity.CompanyReport;
+
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+public interface CompanyReportService extends IService<CompanyReport> {
+
+}

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

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

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

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

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

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

+ 16 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/CompanyReportMapper.xml

@@ -0,0 +1,16 @@
+<?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.CompanyReportMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.CompanyReport">
+        <result column="company_id" property="companyId" />
+        <result column="report_form_id" property="reportFormId" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        company_id, report_form_id
+    </sql>
+
+</mapper>

+ 16 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/ReportFormMapper.xml

@@ -0,0 +1,16 @@
+<?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.ReportFormMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ReportForm">
+        <id column="id" property="id" />
+        <result column="report_form_name" property="reportFormName" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, report_form_name
+    </sql>
+
+</mapper>

+ 4 - 0
fhKeeper/formulahousekeeper/timesheet/src/permissions.js

@@ -67,6 +67,8 @@ const StringUtil = {
         reportResponsible: false, // 负责部门工时统计 //
         reportAllGroup: false, // 全部任务分组工时 //
         reportGroup: false, // 负责项目任务分组工时 //
+        reportAllOutputValue: false, // 全部项目成本基线表 //
+        reportOutputValue: false, // 负责项目成本基线表 //
 
         // 请假模块
         leaveFil : false, // 请假填报 // 
@@ -178,6 +180,8 @@ const StringUtil = {
         arr[i] == '查看人员数据' ? obj.countPersonnel = true : ''
         arr[i] == '全部任务分组工时' ? obj.reportAllGroup = true : ''
         arr[i] == '负责项目任务分组工时' ? obj.reportGroup = true : ''
+        arr[i] == '全部项目成本基线表' ? obj.reportAllOutputValue = true : ''
+        arr[i] == '负责项目成本基线表' ? obj.reportOutputValue = true : ''
     }
 
     return obj

+ 57 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue

@@ -22,6 +22,7 @@
                   <el-menu-item index="1-1" v-if="permissions.reportProject || permissions.reportAllProject"><p @click="ssl(0)">项目报表</p></el-menu-item>
                   <el-menu-item index="1-2" v-if="permissions.reportTask || permissions.reportAllTask"><p @click="ssl(1)">项目任务报表</p></el-menu-item>
                   <el-menu-item index="1-3" v-if="permissions.reportCostOf || permissions.reportAllCostOf"><p @click="ssl(2)">项目成本报表</p></el-menu-item>
+                  <el-menu-item index="1-14" v-if="permissions.reportAllOutputValue || permissions.reportOutputValue"><p @click="ssl(13)">项目成本基线表</p></el-menu-item>
                   <el-menu-item index="1-9" v-if="permissions.reportAllTimeDivide || permissions.reportTimeDivide"><p @click="ssl(8)">人员工时分配表</p></el-menu-item>
                   <el-menu-item index="1-4" v-if="permissions.reportCostWarning"><p @click="ssl(7)">工时成本预警表</p></el-menu-item>
                   <el-menu-item index="1-5" v-if="permissions.reportBalance || permissions.reportAllBalance"><p @click="ssl(3)">项目收支平衡表</p></el-menu-item>
@@ -518,6 +519,22 @@
                 </el-table-column>
                 <el-table-column prop="proportion" label="实际用时占比" min-width="200" align="center"></el-table-column>
             </el-table>
+
+            <!-- 项目成本基线表 -->
+            <el-table v-if="ins == 13" key="13" border :data="outputValueList" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
+                <el-table-column prop="projectCode" label="项目编号" min-width="150"></el-table-column>
+                <el-table-column prop="projectName" label="项目名称" min-width="250"></el-table-column>
+                <el-table-column v-for="item in outputValueTitle" :key="item" :label="item" min-width="150" align="right">
+                  <template slot-scope="scope">
+                    <span>{{scope.row.projectBasecostList.filter(li => li.baseName == item).length > 0 ? scope.row.projectBasecostList.filter(li => li.baseName == item)[0].baseAmount.toFixed(2) : '-'}}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column label="项目产值" min-width="150" align="right" v-if="user.timeType.outputValueStatus == 1">
+                  <template slot-scope="scope">
+                    <span>{{scope.row.outputValue ? scope.row.outputValue.toFixed(2) : '-'}}</span>
+                  </template>
+                </el-table-column>
+            </el-table>
             
 
         <!--工具条-->
@@ -717,7 +734,7 @@ export default {
       shuz: ["项目报表","项目任务报表","项目成本报表",
       "项目收支平衡表(利润表)","客户项目利润报表","项目阶段工时表",
       "加班情况统计表","工时成本预警表","人员工时分配表",
-      "员工填报及时率统计","日报待审核统计"],
+      "员工填报及时率统计","日报待审核统计","项目成本基线表"],
       ins: 10000,
       user: JSON.parse(sessionStorage.user),
       overTimeList: [], // 项目加班情况统计列表
@@ -757,7 +774,10 @@ export default {
       groupListLoading: false,
       groupPage: 1,
       groupSize: 20,
-      groupTotal: 0
+      groupTotal: 0,
+
+      outputValueList: [],
+      outputValueTitle: []
     };
   },
   computed: {},
@@ -802,6 +822,7 @@ export default {
       if(this.permissions.reportTask || this.permissions.reportAllTask) {this.ssl(1);this.defaultActive = '1-2';return} else
       if(this.permissions.reportCostOf || this.permissions.reportAllCostOf) {this.ssl(2);this.defaultActive = '1-3';return} else
       if(this.permissions.reportTimeDivide || this.permissions.reportAllTimeDivide) {this.ssl(8);this.defaultActive = '1-9';return} else
+      if(this.permissions.reportOutputValue || this.permissions.reportAllOutputValue) {this.ssl(13);this.defaultActive = '1-14';return} else
       if(this.permissions.reportCostWarning) {this.ssl(7);this.defaultActive = '1-4';return} else
       if(this.permissions.reportBalance || this.permissions.reportAllBalance) {this.ssl(3);this.defaultActive = '1-5';return} else
       if(this.permissions.reportProfits) {this.ssl(4);this.defaultActive = '1-6';return} else
@@ -1042,6 +1063,8 @@ export default {
                   this.groupWorktimeList.right = []
                     this.getGroupWorktimeList()
                     this.getGroupWorktimeAll()
+                }else if(this.ins == 13){
+                  this.getOutputValueList()
                 }
             },
       exportExcel() {
@@ -1121,6 +1144,9 @@ export default {
           url += "/exportGroupWithProjectTimeCost"
           sl.startDate = this.rangeDatas[0]
           sl.endDate = this.rangeDatas[1]
+        }else if(this.ins == 13){
+          fName = "项目成本基线表.xls"
+          url += "/exportProjectBaseCost"
         }
           this.http.post(url, sl,
             res => {
@@ -1166,6 +1192,8 @@ export default {
       this.reportTimelyList = []
       this.auditRateList = []
       this.departmentIdArray = []
+      this.outputValueList = []
+      this.outputValueTitle = []
       this.userId = null
       this.selUserList = this.userList
       this.getList();
@@ -1258,6 +1286,33 @@ export default {
             });
         });
     },
+    getOutputValueList(){
+      let parameter = {
+        pageIndex: this.page,
+        pageSize: this.size
+      }
+      if(this.proJuctId){
+        parameter.projectId = this.proJuctId
+      }
+      this.http.post('/project/getProjectBaseCost',parameter,
+      res => {
+        if(res.code == 'ok'){
+          this.outputValueList = res.data.result
+          this.total = res.data.total
+          this.outputValueTitle = res.data.title
+        }else {
+          this.$message({
+            message: res.msg,
+            type: 'error'
+          })
+        }
+      },err => {
+        this.$message({
+          message: err,
+          type: 'error'
+        })
+      })
+    },
     overTime() {
       this.listLoading = true;
       var obj = {

+ 121 - 15
fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue

@@ -35,14 +35,20 @@
                 <el-radio-button label="部门"></el-radio-button>
                 <el-radio-button label="人员" v-if="permissions.countPersonnel"></el-radio-button>
                 <el-radio-button :label="namess" v-if="jichu.customDegreeActive == 1"></el-radio-button>
+                <el-radio-button v-for="item in theCustomList" :key="item.id" :label="item.name"></el-radio-button>
             </el-radio-group>
+<!-- 
+            <el-select v-model="customName" filterable placeholder="请选择" style="margin-top: 10px;width: 350px" v-if="theCustomListFlg" @change="jieliu()">
+                <el-option v-for="item in customList" :key="item.id" :label="item.name" :value="item.name"></el-option>
+            </el-select> -->
 
             <el-select v-model="personnelValue" filterable clearable placeholder="请选择人员" style="margin-top: 10px;width: 350px" v-if="radio == '人员'" @change="personnel()">
                 <el-option v-for="item in hasReportUserList" :key="item.id" :label="item.name" :value="item.name"></el-option>
             </el-select>
         </el-col>
         <el-col :span="4">
-            <el-button @click="showExportDialog">报表导出</el-button>
+            <el-button @click="exportProjectData" v-if="theCustomListFlg">报表导出</el-button>
+            <el-button @click="showExportDialog" v-else>报表导出</el-button>
         </el-col>
         </el-row>
         <!-- <div id="clearfix" :style="'width:'+widthHtval+'px;position: relative; height:'+containerHeight+'px;'">
@@ -160,7 +166,15 @@
                 jichu: [],
                 namess: '',
                 timers: null, // 点击的时间
-                zhishin: 0
+                zhishin: 0,
+                theCustomList: [], // 自定义数据来源
+                theCustomListFlg: false, // 判断是否点击的是自定义配置的数据来源
+                theCustomListId: '',
+                theCustomListPlantLIst: [],
+                theCustomListPlant: '',
+                customId: '',
+                customName: '',
+                customList: []
             };
         },
         methods: {
@@ -297,7 +311,16 @@
                         param.projectSum = this.exportParam.projectSum;
                     }
                 }
-                param.type = this.exportParam.type*1
+                if(!this.theCustomListFlg) {
+                    param.type = this.exportParam.type*1
+                } 
+                if(this.theCustomListFlg) {
+                    url = '/project/exportTimeCostByUserCustom'
+                    fileName = this.radio + '统计.xls'
+                    // param.subCustomName = this.customName
+                    param.customId = this.theCustomListId
+                    param.fieldName = this.theCustomListPlant
+                }
                 this.http.post(url, param,
                     res => {
                         this.listLoading = false;
@@ -703,17 +726,45 @@
             yanjiu() {
                 console.log('触发')
             },
-            getEchart(){
+            getEchart(e){
                 var that = this
-                // that.timers = setTimeout(()=>{
-                    // clearTimeout(that.timers)
-                    // console.log(that.timers)
-                    that.jieliu()
-                // },100);
-                // this.jieliu()
-                // if(this.radio == '项目分类'){
-                //     this.getCategoryList()
-                // }
+                // 更具选中的名字筛选出对应的自定义id
+                that.theCustomListFlg = false
+                let ints = null
+                for(var i in that.theCustomList) {
+                    if(that.radio == that.theCustomList[i].name) {
+                        that.theCustomListId = that.theCustomList[i].id
+                        that.theCustomListPlant = that.theCustomListPlantLIst[i]
+                        that.theCustomListFlg = true
+                        ints = i
+                    }
+                }
+                if(that.theCustomListFlg) {
+                    that.customList = that.theCustomList[ints].subUserCustomList
+                    that.customName = that.theCustomList[ints].subUserCustomList[0].name
+                    // that.getCusTom()
+                }
+                that.jieliu()
+            },
+            getCusTom() {
+                this.http.post('/sub-user-custom/list',{
+                    userCustomId: this.theCustomListId
+                },res => {
+                    if(res.code == 'ok'){
+                        this.customList = res.data
+                        this.customName = res.data[0].name
+                    }else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        })
+                    }
+                },error => {
+                    this.$message({
+                        message: error,
+                        type: 'error'
+                    })
+                })
             },
             getCategoryList(){
                 this.http.post('/project-category/list',{},
@@ -776,7 +827,13 @@
                     return;
                 } else if (this.radio == this.namess) {
                     url = '/project/getDegreeCost'
-                } 
+                } else if (this.theCustomListFlg) {
+                    url = '/project/getTimeCostByUserCustom'
+                    // param.subCustomName = this.customName
+                    param.customId = this.theCustomListId
+                    param.fieldName = this.theCustomListPlant
+                    console.log(param, '要传的数据')
+                }
                 this.http.post(url, param,
                 res => {
                     if (res.code == "ok") {
@@ -864,7 +921,31 @@
                                     yList.push(item);
                                 }
                             }
-                        } else {
+                        } 
+                        else if(this.theCustomListFlg) {
+                            list = res.data.list
+                            
+                            for(var i in list) {
+                                // console.log(list[i].name, list[i].costMoney, list[i].cost)
+                                xList.push(list[i].name);
+                                let item = {
+                                    "value": this.yAxisValue==0?list[i].costMoney:list[i].cost,
+                                    "id": list[i].id || i,
+                                }
+                                if(this.permissions.countCost){
+                                    // item.money = list[i].costMoney.toFixed(2)
+                                    item.money = list[i].costMoney ? list[i].costMoney.toFixed(2) : 0
+                                    totalMoneyCost += parseFloat(list[i].costMoney);
+                                }
+                                if(this.permissions.countHours){
+                                    item.cost = list[i].cost
+                                    totalHours += parseFloat(list[i].cost);
+                                }
+                                yList.push(item);
+                                
+                            }
+                        } 
+                        else {
                             list = res.data
                             
                             for(var i in list) {
@@ -1062,6 +1143,27 @@
                 event.preventDefault() // 阻止浏览器默认事件
                 this.domObj.scrollLeft = this.domObj.scrollLeft + step
             },
+            // 判断后端给的字段
+            // 获取自定义
+            getZDY() {
+                this.http.post('/user-custom/getUserCustomTitle',{},res => {
+                    if(res.code == 'ok'){
+                        console.log(res, '数据来源')
+                        this.theCustomList = res.data.result
+                        this.theCustomListPlantLIst = res.data.field
+                    }else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        })
+                    }
+                },error => {
+                    this.$message({
+                        message: error,
+                        type: 'error'
+                    })
+                })
+            }
         },
         created() {
             this.myChart = null
@@ -1111,6 +1213,10 @@
             this.getUsers()
             this.jutishez()
             this.scrollFunction()
+            // 判断
+            if(this.user.timeType.userCustomStatic) {
+                this.getZDY()
+            }
         },
         beforeDestroy () {
             var myChart = echarts.init(document.getElementById("container"));

+ 55 - 17
fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue

@@ -33,14 +33,18 @@
                         <el-col :span="5" ><span class="gray_label">创建日期:</span></el-col><el-col :span="7" ><span>{{project.createDate}}</span></el-col>
                     </el-row>
                     <el-row :gutter="10">
-                        <el-col :span="5" ><span class="gray_label">计划开始日期:</span></el-col><el-col :span="7" >
-                            <span >{{project.planStartDate==null?'-':project.planStartDate}}</span></el-col>
-                        <el-col :span="5" ><span class="gray_label">计划结束日期:</span></el-col><el-col :span="7" ><span>
-                            {{project.planEndDate == null?'-':project.planEndDate}}</span></el-col>
+                        <el-col :span="5" ><span class="gray_label">计划开始日期:</span></el-col>
+                        <el-col :span="7" ><span >{{project.planStartDate==null?'-':project.planStartDate}}</span></el-col>
+                        <el-col :span="5" ><span class="gray_label">计划结束日期:</span></el-col>
+                        <el-col :span="7" ><span>{{project.planEndDate == null?'-':project.planEndDate}}</span></el-col>
                     </el-row>
                     <el-row :gutter="10">
                         <el-col :span="5" ><span class="gray_label">实际完成日期:</span></el-col>
                         <el-col :span="7" ><span>{{project.finishDate==null?'-':project.finishDate}}</span></el-col>
+                        <template v-if="user.timeType.outputValueStatus == 1">
+                        <el-col :span="5" ><span class="gray_label">项目产值:</span></el-col>
+                        <el-col :span="7" ><span>{{project.outputValue == null?'-':project.outputValue | numberToCurrency}} 元</span></el-col>
+                        </template>
                     </el-row>
                     <el-row :gutter="10" v-if="yonghuUser.customDegreeActive == 1">
                         <el-col :span="5" ><span class="gray_label">{{yonghuUser.customDegreeName}}:</span></el-col>
@@ -55,7 +59,7 @@
                             <el-col :span="18" ><span>{{project.projectSeparate.contractCode}}</span></el-col>
                         </el-row>
                         <el-row :gutter="10">
-                            <el-col :span="5" ><span class="gray_label">质保开始时间</span></el-col><el-col :span="7" >
+                            <el-col :span="5" ><span class="gray_label">质保开始时间:</span></el-col><el-col :span="7" >
                                 <span >{{project.projectSeparate.warrantyStartDate==null?'-':project.projectSeparate.warrantyStartDate}}</span></el-col>
                             <el-col :span="5" ><span class="gray_label">质保截止时间:</span></el-col><el-col :span="7" ><span>
                                 {{project.projectSeparate.warrantyEndDate == null?'-':project.projectSeparate.warrantyEndDate}}</span></el-col>
@@ -73,6 +77,12 @@
                             <el-col :span="18" ><span>{{project.projectSeparate.bu}}</span></el-col>
                         </el-row>
                     </div>
+                    <div v-if="user.companyId == '428'">
+                        <el-row :gutter="10" >
+                            <el-col :span="5" ><span class="gray_label">项目分组:</span></el-col><el-col :span="7" ></el-col>
+                            <el-col :span="18" ><div v-if="project.projectSeparate"><span>{{project.projectSeparate.projectCategorySub}}</span></div></el-col>
+                        </el-row>
+                    </div>
                 </div>
                 <div class="box" style="margin-top:10px;">
                     <div><label>相关人员</label>
@@ -293,7 +303,13 @@
                      format="yyyy-MM-dd" 
                      value-format="yyyy-MM-dd"
                      :clearable="false" type="date" 
+                     style="width:32%"
                      placeholder="选择日期"></el-date-picker>
+                    <template v-if="user.timeType.outputValueStatus == 1">
+                    <span style="margin-left:50px;margin-right:10px;">项目产值</span>
+                    <el-input v-model="addForm.outputValue" id="outputValue" style="width:32%;"
+                    placeholder="" clearable @keyup.native="restrictNumber('outputValue')"></el-input><span style="margin-left:10px;">元</span>
+                    </template>
                 </el-form-item>
                 <el-form-item label="截止日期" prop="planEndDate">
                     <el-date-picker v-model="addForm.planEndDate" 
@@ -301,6 +317,7 @@
                      format="yyyy-MM-dd" 
                      value-format="yyyy-MM-dd"
                      :clearable="false" type="date" 
+                     style="width:32%"
                      placeholder="选择日期"></el-date-picker>
                 </el-form-item>
 
@@ -343,6 +360,12 @@
                         <el-input v-model="addForm.projectSeparate.bu" placeholder="所属BU" clearable></el-input>
                     </el-form-item>
                 </div>
+
+                <div v-if="user.companyId == '428'">
+                    <el-form-item label="项目分组" >
+                        <el-input v-model="addForm.projectSeparate.projectCategorySub" placeholder="请输入项目分组" maxlength="50" show-word-limit clearable></el-input>
+                    </el-form-item>
+                </div>
                
             </el-form>
             <div slot="footer" class="dialog-footer">
@@ -1402,6 +1425,9 @@
                         if(this.addForm.projectDesc != null) {
                             formData.append("projectDesc", this.addForm.projectDesc);
                         }
+                        if(this.user.timeType.outputValueStatus == 1){
+                            formData.append("outputValue", this.addForm.outputValue)
+                        }
                         var listId = []
                         var listName = []
                         if(this.auseList.length > 0) {
@@ -1429,6 +1455,9 @@
                              formData.append("region", this.addForm.projectSeparate.region ? this.addForm.projectSeparate.region : '');
                              formData.append("bu", this.addForm.projectSeparate.bu ? this.addForm.projectSeparate.bu : '');
                         }
+                        if(this.user.companyId == '428') {
+                             formData.append("projectCategorySub", this.addForm.projectSeparate.projectCategorySub ? this.addForm.projectSeparate.projectCategorySub : '');
+                        }
                         // return
                         this.http.uploadFile(this.port.project.add,formData,
                         res => {
@@ -1460,8 +1489,8 @@
             
             showEdit() {
                 this.addForm = JSON.parse(JSON.stringify(this.project));
-                console.log('---'+this.project);
-                console.log(this.addForm.projectCode);
+                // console.log('---'+this.project);
+                // console.log(this.addForm.projectCode);
                 
                 var list = this.project.participationList , arr = [];
                 for(var j in list) {
@@ -1469,6 +1498,7 @@
                 }
                 this.$set(this.addForm,'code',this.addForm.projectCode)
                 this.$set(this.addForm,'name',this.addForm.projectName)
+                this.$set(this.addForm,'outputValue',this.addForm.outputValue ? this.addForm.outputValue : null)
                 this.addForm.userId = arr
                 this.addFormVisible = true;
                 console.log(this.addForm, 123)
@@ -1648,20 +1678,28 @@
                     this.listLoading = false;
                     if (res.code == "ok") {
                         this.project = res.data;
-                        if(this.user.companyId == '936') {
+                        if(this.user.companyId == '936' || this.user.companyId == '428') {
                             if(res.data.projectSeparate) {
                                 this.project = res.data;
                             } else {
-                                var obj = {
-                                    contractCode: '',
-                                    warrantyStartDate: '',
-                                    warrantyEndDate: '',
-                                    projectCategorySub: '',
-                                    region: '',
-                                    bu: '',
+                                if(this.user.companyId == '936') {
+                                    var obj = {
+                                        contractCode: '',
+                                        warrantyStartDate: '',
+                                        warrantyEndDate: '',
+                                        projectCategorySub: '',
+                                        region: '',
+                                        bu: '',
+                                    }
+                                    res.data.projectSeparate = obj
+                                    this.project = res.data;
+                                } else {
+                                    var obj = {
+                                        projectCategorySub: '',
+                                    }
+                                    res.data.projectSeparate = obj
+                                    this.project = res.data;
                                 }
-                                res.data.projectSeparate = obj
-                                this.project = res.data;
                             }
                         } else {
                             this.project = res.data;

+ 47 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -146,6 +146,25 @@
                      </div>
                 </template>
             </el-table-column>
+            <el-table-column prop="projectCategorySub" label="项目分组" width="200" v-if="user.companyId == '428'">
+                <template slot-scope="scope">
+                    <div v-if="scope.row.projectSeparate">
+                        <div v-if="scope.row.projectSeparate.projectCategorySub">
+                            <el-popover placement="top" width="400" trigger="hover" v-if="scope.row.projectSeparate.projectCategorySub.length > 15">
+                                <div>
+                                    <span>{{scope.row.projectSeparate.projectCategorySub}}</span>
+                                </div>
+                                <div slot="reference" class="kans">
+                                    <span>{{scope.row.projectSeparate.projectCategorySub}}...</span>
+                                </div>
+                            </el-popover>
+                            <div v-else>
+                                <span>{{scope.row.projectSeparate.projectCategorySub}}</span>
+                            </div>
+                        </div>
+                     </div>
+                </template>
+            </el-table-column>
             <el-table-column prop="categoryName" label="项目分类" sortable="custom" width="120"></el-table-column>
             <el-table-column prop="projectName" label="项目名称" width="250" sortable="custom">
                  <template slot-scope="scope">
@@ -417,6 +436,12 @@
                      :clearable="false" type="date" 
                      placeholder="选择日期"></el-date-picker>
                 </el-form-item>
+                <el-form-item label="项目产值" prop="outputValue" v-if="user.timeType.outputValueStatus == 1">
+                    <el-input id="outputValue" v-model="addForm.outputValue" style="width:32%;"
+                    placeholder="" clearable  @keyup.native="restrictNumber('outputValue')">
+                    </el-input><span style="margin-left:10px;">元</span>
+
+                </el-form-item>
 
                 <!-- 单个公司的固定字段 -->
                 <div v-if="user.companyId == '936'">
@@ -449,6 +474,11 @@
                     <el-input v-model="addForm.bu" placeholder="所属BU" clearable></el-input>
                 </el-form-item>
                 </div>
+                <div v-if="user.companyId == '428'">
+                    <el-form-item label="项目分组" >
+                        <el-input v-model="addForm.projectCategorySub" maxlength="50" show-word-limit placeholder="请输入项目分组" clearable></el-input>
+                    </el-form-item>
+                </div>
                 <!-- 项目基线 -->
                 <div style="margin: 10px 0 30px 0;min-height:200px;" v-if="user.company.packageProject == 1">
                     <el-tabs v-model="activeName" @tab-click="handleClick">
@@ -2904,6 +2934,9 @@ a {
                         this.$set(this.addForm, 'region', '')
                         this.$set(this.addForm, 'bu', '')
                     }
+                    if(this.user.companyId == '428') {
+                        this.$set(this.addForm, 'projectCategorySub', '')
+                    }
                     this.projectBaseCostData = [];
                     this.auseList = [];
                     for (var m=0;m<this.baseCostItemList.length; m++) {
@@ -2969,6 +3002,14 @@ a {
                         }
                     }
 
+                    if(this.user.companyId == '428') {
+                        if(item.projectSeparate) {
+                            this.$set(this.addForm, 'projectCategorySub', item.projectSeparate.projectCategorySub)
+                        } else {
+                            this.$set(this.addForm, 'projectCategorySub', '')
+                        }
+                    }
+
                     // 判断是否有供应商
                     if(this.user.company.packageProvider) {
                         // this.addForm.supplierId = item.providerIds.split(',')
@@ -3189,6 +3230,9 @@ a {
                         if (this.chosenLeaders != null && this.chosenLeaders.length > 0) {
                             formData.append("chosenLeaders", JSON.stringify(this.chosenLeaders));
                         }
+                        if (this.user.timeType.outputValueStatus == 1){
+                            formData.append("outputValue",this.addForm.outputValue)
+                        }
                         var listId = []
                         var listName = []
                         for(var i in this.auseList) {
@@ -3238,6 +3282,9 @@ a {
                              formData.append("region", this.addForm.region ? this.addForm.region : '');
                              formData.append("bu", this.addForm.bu ? this.addForm.bu : '');
                         }
+                        if(this.user.companyId == '428') {
+                             formData.append("projectCategorySub", this.addForm.projectCategorySub ? this.addForm.projectCategorySub : '');
+                        }
 
                         // formData.append("associateDegreeNames", listName)
                         // console.log("addform",this.addForm);

+ 42 - 9
fhKeeper/formulahousekeeper/timesheet/src/views/task/list.vue

@@ -3,11 +3,11 @@
         <!--工具条-->
         <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
             <el-form :inline="true">
-                <div style="margin-left: 20px;display: inline-block">
+                <!-- <div style="margin-left: 20px;display: inline-block">
                 <el-form-item label="任务列表">
                 </el-form-item>
-                </div>
-                <el-form-item >
+                </div> -->
+                <el-form-item label="任务列表">
                     <div style="margin-left: 8px">
                     <!-- <el-input style="float:left;" v-model="keyword" class="input-with-select" placeholder="请输入项目名称关键字" clearable="true"> -->
                         <el-select v-model="searchField" style="width:120px;"  slot="prepend" placeholder="请选择">
@@ -18,15 +18,22 @@
                     <!-- </el-input> -->
                     </div>
                 </el-form-item>
+                <el-form-item label="项目分组" v-if="user.companyId == '428'">
+                    <div style="margin-left: 8px">
+                        <el-select v-model="groupName" style="width:200px;" placeholder="请选择" clearable @change="hiddens()">
+                            <el-option v-for="(item, index) in groupNameList" :key="index" :label="item" :value="item"></el-option>
+                        </el-select>
+                    </div>
+                </el-form-item>
                 <!-- <el-form-item style="float:right;">
                     <el-link type="primary" :underline="false" @click="handleAdd(-1,null)">新增任务</el-link>
                 </el-form-item> -->
 
-                <div style="margin-left: 40px;display: inline-block">
+                <!-- <div style="margin-left: 40px;display: inline-block">
                 <el-form-item label="类型">
                 </el-form-item>
-                </div>
-                <el-form-item >
+                </div> -->
+                <el-form-item label="类型">
                     <div style="margin-left: 8px">
                     <!-- <el-input style="float:left;" v-model="keyword" class="input-with-select" placeholder="请输入项目名称关键字" clearable="true"> -->
                         <el-select v-model="typeField" style="width:120px;"  slot="prepend" placeholder="请选择" clearable @change="hiddens()">
@@ -790,7 +797,9 @@ import { error } from 'dingtalk-jsapi';
                 selectedGroup:{},
                 dateClass: true,
                 dateType: 0,
-                dateSelect: []
+                dateSelect: [],
+                groupName: '',
+                groupNameList: []
             };
         },
         methods: {
@@ -985,6 +994,9 @@ import { error } from 'dingtalk-jsapi';
                     parameter.startDate = this.dateSelect[0]
                     parameter.endDate = this.dateSelect[1]
                 }
+                if(this.user.companyId == '428') {
+                    parameter.groupName = this.groupName
+                }
                 this.http.post('/task/listByPage', parameter,
                 res => {
                     this.listLoading = false;
@@ -1663,11 +1675,29 @@ import { error } from 'dingtalk-jsapi';
                         });
                     });
                 });
-
-                
             },
             chan() {
                 // console.log(this.critic)
+            },
+            getSthForSb() {
+                this.http.post('/task/getGroupNameList ',{},
+                res => {
+                    if (res.code == "ok") {
+                        console.log('看看是', res.data)
+                        this.groupNameList = res.data
+                    } else {
+                        this.$message({
+                        message: res.msg,
+                        type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
             }
         },
         created() {
@@ -1681,6 +1711,9 @@ import { error } from 'dingtalk-jsapi';
         mounted() {
             this.getList();
             this.getUsers();
+            if(this.user.companyId == '428') {
+                this.getSthForSb()
+            }
         },
     };
 </script>

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -2707,6 +2707,7 @@ export default {
           pageIndex: this.page,
           pageSize: this.size,
           keyword: this.keyword,
+          status: this.status
         },
         (res) => {
           this.listLoading = false;

+ 32 - 9
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -216,6 +216,8 @@
                                                             <p>事项:<span v-html="timeItem.content"></span></p>
                                                         </div>
                                                     </div>
+                                                    <p v-if="item2.state == 1 && user.timeType.needEvaluate == 1">评价:<span v-html="item2.evaluate"></span></p>
+                                                    
                                                     <!--照片的显示 -->
                                                     <p v-if="item2.pics != null && item2.pics.length > 0"> 
                                                         <el-image v-for="(pic, index) in item2.pics" :key="index"
@@ -1144,6 +1146,16 @@
                 <el-button type="primary" @click="deny()" >确定</el-button>
             </div>
         </el-dialog>
+        <!--  通过弹出框 -->
+        <el-dialog title="审核评价" v-if="approveinDialog" :visible.sync="approveinDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
+            <div>
+                <el-input type="textarea" v-model="approveinData.evaluate" rows="2" placeholder="请输入您决定通过的评价" />
+            </div>
+            <div slot="footer" class="dialog-footer">
+                <el-button  @click="approveinDialog = false" >取消</el-button>
+                <el-button type="primary" @click="approveinfun()" >确定</el-button>
+            </div>
+        </el-dialog>
 
         <!--批量导入日报 -->
         <el-dialog title="工时批量导入" v-if="importDialog" :visible.sync="importDialog" customClass="customWidth" width="500px">
@@ -1553,7 +1565,9 @@
                 leaveTypeName: ['事假','病假','年假','产假','婚假','丧假','调休假','陪产假','其他',],
                 isWeekend: false,
 
-                canCancelInDialog: false
+                canCancelInDialog: false,
+                approveinData: {},
+                approveinDialog: false
             };
         },
         watch: {
@@ -5265,18 +5279,27 @@
 
             // 通过日报
             approve(id, item) {
-                this.logining = true;
                 let day = (this.choseDay + 1) > 9 ? "-" + (this.choseDay + 1) : "-0" + (this.choseDay + 1);
-
-                var ids = item.id;
-                // var data = item.data;
-                // data.forEach(element => {
-                //     ids +=(element.id+',');
-                // });
-                this.http.post( this.port.report.approve, {id: id , date: this.date +day, reportIds: ids},
+                this.approveinData = {
+                    id: id,
+                    date: this.date +day,
+                    reportIds: item.id
+                }
+                if(this.user.timeType.needEvaluate == 1){
+                    this.$set(this.approveinData,'evaluate','')
+                    this.approveinDialog = true
+                }else{
+                    this.logining = true;
+                    this.approveinfun()
+                }
+                
+            },
+            approveinfun(){
+                this.http.post( this.port.report.approve, this.approveinData,
                 res => {
                     this.logining = false;
                     if (res.code == "ok") {
+                        this.approveinDialog = false
                         this.$message({
                             message: "审核成功",
                             type: "success"

+ 60 - 15
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list.vue

@@ -289,6 +289,18 @@
                 <el-button  @click="detailsDialog = false" size="mini">取消</el-button>
             </div>
         </el-dialog>
+
+        <!-- 审核通过评价 -->
+        <el-dialog title="请输入通过评价" v-if="approveinDialog" :visible.sync="approveinDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
+            <div>
+                <el-input type="textarea" v-model="approveinData.evaluate" rows="2" placeholder="请输入您决定通过的评价" />
+            </div>
+            <div slot="footer" class="dialog-footer">
+                <el-button  @click="approveinDialog = false" >取消</el-button>
+                <el-button type="primary" @click="batchApproveinfun()" v-if="isbatch">确定</el-button>
+                <el-button type="primary" @click="approveinfun()" v-else>确定</el-button>
+            </div>
+        </el-dialog>
     </section>
 </template>
 
@@ -346,7 +358,11 @@
                 detailsDialog: false,
                 idx: 0, // 详情索引
                 detailsList: [],
-                undoFormLoading: false
+                undoFormLoading: false,
+
+                approveinData: null,
+                approveinDialog: false,
+                isbatch: false
             };
         },
         filters: {
@@ -483,13 +499,31 @@
                 }
                 //等待
                 if(isPass){
-                    this.batchApproveLoading = true
-                    this.listLoading = true;
-                    this.http.post('/report/batchApproveReport', {ids: ids},
+                    this.isbatch = true
+                    this.approveinData = {
+                        ids: ids
+                    }
+                    if(this.user.timeType.needEvaluate == 1){
+                        this.$set(this.approveinData,'evaluate','')
+                        this.approveinDialog = true
+                    }else{
+                        this.batchApproveLoading = true
+                        this.listLoading = true;
+                        this.batchApproveinfun()
+                    }
+                }else{
+                    this.batchDenyDialog = true
+                    this.batchDenyData.ids = ids
+                    this.batchDenyData.reason = ''
+                }
+            },
+            batchApproveinfun(){
+                this.http.post('/report/batchApproveReport', this.approveinData,
                     res => {
                         this.batchApproveLoading = false
                         this.listLoading = false;
                         if (res.code == "ok") {
+                            this.approveinDialog = false
                             this.getList();
                         } else {
                             this.$message({
@@ -505,11 +539,6 @@
                             type: "error"
                         });
                     });
-                }else{
-                    this.batchDenyDialog = true
-                    this.batchDenyData.ids = ids
-                    this.batchDenyData.reason = ''
-                }
             },
             batchDenyClick(){
                 this.batchDenyLoading = true
@@ -623,19 +652,35 @@
 
             // 通过日报
             approve(id,date, item) {
-                // console.log(item);
-                this.logining = true;
-                
-                var ids = '';
-                var data = item.data;
+                let ids = '';
+                let data = item.data;
                 data.forEach(element => {
                     ids +=(element.id+',');
                 });
+                this.isbatch = false
+                this.approveinData = {
+                    id: id,
+                    reportIds: ids
+                }
+                if(this.user.timeType.needEvaluate == 1){
+                    this.$set(this.approveinData,'evaluate','')
+                    this.approveinDialog = true
+                }else{
+                    this.logining = true;
+                    this.approveinfun()
+                }
+                
+                
+                
 
-                this.http.post(this.port.report.approve, {id: id ,reportIds: ids},
+                
+            },
+            approveinfun(){
+                this.http.post(this.port.report.approve, this.approveinData,
                 res => {
                     this.logining = false;
                     if (res.code == "ok") {
+                        this.approveinDialog = false
                         this.$message({
                             message: "审核成功",
                             type: "success"

+ 76 - 14
fhKeeper/formulahousekeeper/timesheet_h5/src/views/review/index.vue

@@ -109,6 +109,14 @@
                     rows="3" autosize  />
                 <van-button style="width:100%;" type="info" @click="deny()">提交</van-button>
             </van-popup>
+            <van-popup v-model="approveinDialog" v-if="approveinDialog" position="bottom" closeable >
+                <van-cell>请输入通过评价</van-cell>
+                <van-field class="form_input"
+                    v-model="approveinData.evaluate" name="reason" type="textarea" placeholder="请输入您决定通过的评价"
+                    rows="3" autosize  />
+                <van-button style="width:100%;" type="info" @click="batchApproveinfun()" v-if="isbatch">提交</van-button>
+                <van-button style="width:100%;" type="info" @click="approveinfun()" v-else>提交</van-button>
+            </van-popup>
         </div>
     </div>
 </template>
@@ -131,7 +139,10 @@
                 showPicker: false,
                 report: [],
                 flg: false,
-                isCanAgree: false
+                isCanAgree: false,
+                approveinData: null,
+                approveinDialog: false,
+                isbatch: false
             };
         },
         created() {
@@ -165,10 +176,7 @@
                 this.isCanAgree = iscan
             },
             batchAgree(bol){
-                const toast = this.$toast.loading({
-                    forbidClick: true,
-                    duration: 0
-                });
+                
                 let ids = ''
                 for(let i in this.report){
                     if(this.report[i].checked){
@@ -180,15 +188,54 @@
                 if(ids.length > 0){
                     ids = ids.substring(0, ids.length-1);
                 }
+                if(bol){
+                    this.isbatch = true
+                    this.approveinData = {
+                        ids: ids
+                    }
+                    if(this.user.timeType.needEvaluate == 1){
+                        this.$set(this.approveinData,'evaluate','')
+                        this.approveinDialog = true
+                    }else{
+                        const toast = this.$toast.loading({
+                            forbidClick: true,
+                            duration: 0
+                        });
+                        this.batchApproveinfun()
+                    }
+                }else{
+                    const toast = this.$toast.loading({
+                        forbidClick: true,
+                        duration: 0
+                    });
+                    let that = this
+                    this.$axios.post('/report/batchDenyReport', {
+                        ids: ids
+                    }).then(res => {
+                        if(res.code == "ok") {
+                            this.$toast.clear();
+                            setTimeout(function() {
+                                that.$toast.success('审核成功');
+                            }, 300);
+                            this.getReport();
+                        } else {
+                            this.$toast.clear();
+                            this.$toast.fail('批量操作失败:'+res.msg);
+                        }
+                    }).catch(err=> {this.$toast.clear();});
+                }
+                
+            },
+            batchApproveinfun(){
                 let that = this
-                this.$axios.post(bol?'/report/batchApproveReport':'/report/batchDenyReport', {
-                    ids: ids
-                }).then(res => {
+                this.$axios.post('/report/batchApproveReport', this.approveinData)
+                .then(res => {
                     if(res.code == "ok") {
                         this.$toast.clear();
                         setTimeout(function() {
                             that.$toast.success('审核成功');
                         }, 300);
+                        this.approveinDialog = false
                         this.getReport();
                     } else {
                         this.$toast.clear();
@@ -262,10 +309,7 @@
             },
 
             approve(id, item) {
-                const toast = this.$toast.loading({
-                    forbidClick: true,
-                    duration: 0
-                });
+                
                 var ids = '';
                 var data = item.data;
                 data.forEach(element => {
@@ -273,15 +317,33 @@
                         ids +=(element.id+',');
                     }
                 });
+                this.isbatch = false
+                this.approveinData = {
+                    id: id,
+                    date: this.nowTime,
+                    reportIds: ids
+                }
+                if(this.user.timeType.needEvaluate == 1){
+                    this.$set(this.approveinData,'evaluate','')
+                    this.approveinDialog = true
+                }else{
+                    const toast = this.$toast.loading({
+                        forbidClick: true,
+                        duration: 0
+                    });
+                    this.approveinfun()
+                }
+            },
+            approveinfun(){
                 let that = this;
-                this.$axios.post("/report/approve", {id: id , date: this.nowTime, reportIds: ids})
+                this.$axios.post("/report/approve", this.approveinData)
                 .then(res => {
                     if(res.code == "ok") {
                         this.$toast.clear();
                         setTimeout(function() {
                             that.$toast.success('审核成功');
                         }, 300);
-                        
+                        this.approveinDialog = false
                         this.getReport();
                     } else {
                         this.$toast.clear();