Selaa lähdekoodia

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

Min 9 kuukautta sitten
vanhempi
commit
0d0cf76f7d
33 muutettua tiedostoa jossa 212 lisäystä ja 155 poistoa
  1. 1 0
      fhKeeper/formulahousekeeper/inva_4_tivo/about.html
  2. 1 1
      fhKeeper/formulahousekeeper/inva_4_tivo/customer.html
  3. 7 6
      fhKeeper/formulahousekeeper/inva_4_tivo/customerNew.html
  4. 1 0
      fhKeeper/formulahousekeeper/inva_4_tivo/dynamic.html
  5. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/favicon.ico
  6. 1 1
      fhKeeper/formulahousekeeper/inva_4_tivo/followup.html
  7. 1 1
      fhKeeper/formulahousekeeper/inva_4_tivo/homemovement.html
  8. 1 1
      fhKeeper/formulahousekeeper/inva_4_tivo/index.html
  9. 2 2
      fhKeeper/formulahousekeeper/inva_4_tivo/js/iframe.js
  10. 1 1
      fhKeeper/formulahousekeeper/inva_4_tivo/mobile.html
  11. 3 3
      fhKeeper/formulahousekeeper/inva_4_tivo/moduleView/css/header.css
  12. 3 3
      fhKeeper/formulahousekeeper/inva_4_tivo/moduleView/css/header.less
  13. 3 2
      fhKeeper/formulahousekeeper/inva_4_tivo/moduleView/header.html
  14. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/moduleView/image/logos.jpg
  15. BIN
      fhKeeper/formulahousekeeper/inva_4_tivo/moduleView/image/logos.png
  16. 1 1
      fhKeeper/formulahousekeeper/inva_4_tivo/project.html
  17. 1 1
      fhKeeper/formulahousekeeper/inva_4_tivo/workshop.html
  18. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  19. 8 11
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java
  20. 20 17
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  21. 54 21
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  22. 29 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  23. 10 10
      fhKeeper/formulahousekeeper/timesheet/index.html
  24. 2 0
      fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json
  25. 2 0
      fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json
  26. 2 1
      fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/echartsData.js
  27. 2 2
      fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue
  28. 2 1
      fhKeeper/formulahousekeeper/timesheet/src/views/leave/list.vue
  29. 2 2
      fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue
  30. 7 36
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  31. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue
  32. 14 18
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue
  33. 9 11
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

+ 1 - 0
fhKeeper/formulahousekeeper/inva_4_tivo/about.html

@@ -9,6 +9,7 @@
         content="工时管理,工时统计,工时填报,项目成本统计,生产工时管理系统,工时成本管理,工时管理软件,研发工时管理系统,企业工时管理系统,项目工时统计,项目工时统计软件,项目工时统计系统,工时统计系统,工时统计表" />
     <meta name="description" content="工时管家提供专业的工时填报和统计报表。支持PC和手机端。可按项目,部门,岗位等多维度统计成本。" />
     <title>工时管家-专注工时管理,手机移动填报,核算项目投入人力成本,企业IPO利器!</title>
+    <link rel="shortcut icon" type="image/x-icon" href="./favicon.ico" />
     <link href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700&display=swap&subset=latin-ext"
         rel="stylesheet">
     <link href="css/bootstrap.css" rel="stylesheet">

+ 1 - 1
fhKeeper/formulahousekeeper/inva_4_tivo/customer.html

@@ -6,7 +6,7 @@
     <meta name="keywords" content="工时管理,项目工时管理,项目成本管理,工时统计,项目成本统计,工时记录表,工时统计表" />
     <meta name="description" content="工时管家是专业的工时管理和项目管理软件。提供工时填报,审核和工时统计功能。引进现代工时管理和项目管理的理念,核算项目投入成本准确便捷,企业IPO项目成本分摊好帮手"/>
     <title>工时管理|工时记录表|项目成本管理-工时管家是强大易用的项目工时管理系统。工时填报|工时统计|手机移动填报|核算项目成本|企业IPO利器!</title>
-    <link rel="icon" href="image/favicon.png">
+    <link rel="shortcut icon" type="image/x-icon" href="./favicon.ico" />
     <link rel="stylesheet" href="css/tongyong.css">
     <link rel="stylesheet" href="css/reset.css">
     <link rel="stylesheet" href="css/customer.css">

+ 7 - 6
fhKeeper/formulahousekeeper/inva_4_tivo/customerNew.html

@@ -4,10 +4,11 @@
 <head>
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-  <meta name="keywords" content="工时管理,项目工时管理,项目成本管理,工时统计,项目成本统计,工时记录表,工时统计表" />
+  <meta name="keywords" content="客户关系管理系统,CRM系统,销售订单管理,随访任务,线索,商机,联系人,产品,智能客户关系管理" />
   <meta name="description"
-    content="工时管家是专业的工时管理和项目管理软件。提供工时填报,审核和工时统计功能。引进现代工时管理和项目管理的理念,核算项目投入成本准确便捷,企业IPO项目成本分摊好帮手" />
-  <title>工时管理|工时记录表|项目成本管理-工时管家是强大易用的项目工时管理系统。工时填报|工时统计|手机移动填报|核算项目成本|企业IPO利器!</title>
+    content="智能客户管家是一款结合了AI人工智能技术的客户关系管理系统(CRM),帮助企业全面管理客户和订单信息,降低客户流失率,促进成单。可以有效降低企业的营销管理成本。" />
+  <title>AI智能客户管家|客户关系管理系统|CRM系统|-客户管家是强大易用的客户关系管理系统。销售订单|客户管理|线索|商机|联系人|产品|报表分析|智能BI</title>
+  <link rel="shortcut icon" type="image/x-icon" href="./favicon.ico" />
   <link href="css/styles.css" rel="stylesheet">
   <link rel="stylesheet" href="./css/reset.css">
   <link rel="stylesheet" href="./css/customerNew/customerNew.css">
@@ -45,8 +46,8 @@
     <div class="bannar">
       <img src="./image/customerNew/banner.gif" alt="" />
       <div class="bannar_text">
-        <div class="bannar_text_title">客户管家</div>
-        <div class="bannar_text_item">· 节约成本<br />· 提高企业营收<br />· 用高效的客户追踪系统和智能数据处理</div>
+        <div class="bannar_text_title">AI智能客户管家</div>
+        <div class="bannar_text_item">· 节约企业营销成本<br />· 降低客户流失率<br />· 高效的客户追踪和智能数据处理系统</div>
       </div>
     </div>
 
@@ -56,7 +57,7 @@
         <div class="integrationImg">
           <img src="./image/customerNew/integrationImg.png" alt="">
         </div>
-        <div class="integrationText">· 客户管家,一体化智能管理</div>
+        <div class="integrationText">· 客户管家,独创AI一体化智能管理</div>
       </div>
     </div>
 

+ 1 - 0
fhKeeper/formulahousekeeper/inva_4_tivo/dynamic.html

@@ -7,6 +7,7 @@
     <meta name="keywords" content="工时管理,工时统计,工时填报,项目成本统计,生产工时管理系统,工时成本管理,工时管理软件,研发工时管理系统,企业工时管理系统,项目工时统计,项目工时统计软件,项目工时统计系统,工时统计系统,工时统计表" />
     <meta name="description" content="工时管家提供专业的工时填报和统计报表。支持PC和手机端。可按项目,部门,岗位等多维度统计成本。"/>
     <title>工时管家-专注工时管理,手机移动填报,核算项目投入人力成本,企业IPO利器!</title>
+    <link rel="shortcut icon" type="image/x-icon" href="./favicon.ico" />
     <link href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700&display=swap&subset=latin-ext" rel="stylesheet">
     <link href="css/bootstrap.css" rel="stylesheet">
     <link href="css/font-awesome.css" rel="stylesheet">

BIN
fhKeeper/formulahousekeeper/inva_4_tivo/favicon.ico


+ 1 - 1
fhKeeper/formulahousekeeper/inva_4_tivo/followup.html

@@ -6,8 +6,8 @@
     <meta name="keywords" content="随访管理,数据统计,随访流程,阶段数据审核,随访日历,随访管理,文件上传" />
     <meta name="description" content="随访报表-随访管家是一款集患者资料收集整理、随访计划执行和数据统计分析功能于一体的医患服务系统。添加患者"/>
     <title>随访管理|随访日历|随访报表-随访管家是一款集患者资料收集整理、随访计划执行和数据统计分析功能于一体的医患服务系统。添加患者|访视记录|随访审核|随访报表!</title>
+    <link rel="shortcut icon" type="image/x-icon" href="./favicon.ico" />
     <link href="css/styles.css" rel="stylesheet">
-    <link rel="icon" href="image/favicon.png">
     <link rel="stylesheet" href="css/tongyong.css">
     <link rel="stylesheet" href="css/reset.css">
     <link rel="stylesheet" href="css/followup.css">

+ 1 - 1
fhKeeper/formulahousekeeper/inva_4_tivo/homemovement.html

@@ -3,7 +3,7 @@
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <link rel="icon" href="image/favicon.png">
+    <link rel="shortcut icon" type="image/x-icon" href="./favicon.ico" />
     <title>工时管家</title>
     <link rel="stylesheet" href="./css/homemovement/normalize.css" />
     <!-- 先引入css文件 放到自己css文件的上面 -->

+ 1 - 1
fhKeeper/formulahousekeeper/inva_4_tivo/index.html

@@ -10,7 +10,7 @@
 	<link href="css/styles.css" rel="stylesheet">
     <link href="css/font-awesome.css" rel="stylesheet">
     <link rel="stylesheet" href="./css/reset.css">
-    <link rel="icon" href="image/favicon.png">
+    <link rel="shortcut icon" type="image/x-icon" href="./favicon.ico" />
     <link rel="stylesheet" href="css/index.css">
     <!-- <script src="js/js/jquery.min.js"></script> -->
     <script src="js/jquery1.42.min.js"></script>

+ 2 - 2
fhKeeper/formulahousekeeper/inva_4_tivo/js/iframe.js

@@ -35,7 +35,7 @@ function handleScroll() {
   const filed = urls.match(/\/([^\/]+)\.html$/) && urls.match(/\/([^\/]+)\.html$/)[1];
   if(scrollYnma > 1) {
     iframe.style.background = '#fff'
-    imgElement.src = './image/logo.jpg'
+    imgElement.src = './image/logos.jpg'
     iframe.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.2)';
     headerItems.forEach(function(item) {
       item.style.color = '#000'; // 设置你想要的字体颜色
@@ -45,7 +45,7 @@ function handleScroll() {
   console.log(backcolor[filed], filed)
   iframe.style.background = (backcolor[filed] && backcolor[filed].background) || 'none'
   iframe.style.boxShadow = '0 0 0 rgba(0, 0, 0, 0)';
-  imgElement.src = (backcolor[filed] && backcolor[filed].logo) || './image/logo.png'
+  imgElement.src = (backcolor[filed] && backcolor[filed].logo) || './image/logos.png'
   headerItems.forEach(function(item) {
     item.style.color = (backcolor[filed] && backcolor[filed].color) || '#fff'; // 设置你想要的字体颜色
   });

+ 1 - 1
fhKeeper/formulahousekeeper/inva_4_tivo/mobile.html

@@ -15,7 +15,7 @@
     <link href="css/swiper.css" rel="stylesheet">
     <link href="css/magnific-popup.css" rel="stylesheet">
     <link href="css/styles.css" rel="stylesheet">
-    <link rel="icon" href="images/favicon.png">
+    <link rel="shortcut icon" type="image/x-icon" href="./favicon.ico" />
     <link rel="stylesheet" href="css/reset.css">
     <link rel="stylesheet" href="css/tongyong.css">
     <!-- 底部重写 -->

+ 3 - 3
fhKeeper/formulahousekeeper/inva_4_tivo/moduleView/css/header.css

@@ -18,14 +18,14 @@
 }
 .headerView .headerView-left .header-logo,
 .headerView .headerView-right .header-logo {
-  width: 6.25rem;
+  width: 6.875rem;
 }
 .headerView .headerView-left .header-list,
 .headerView .headerView-right .header-list {
   display: flex;
   align-items: center;
   height: 100%;
-  margin-left: 4rem;
+  margin-left: 2rem;
 }
 .headerView .headerView-left .header-list .header-item,
 .headerView .headerView-right .header-list .header-item {
@@ -79,7 +79,7 @@
 }
 .headerProduct .content .product .product-title {
   display: flex;
-  padding: 1.25rem 0 0.9375rem 1.875rem;
+  padding: 1.25rem 0 0.9375rem 1rem;
   align-items: center;
   border-bottom: 0.0625rem solid #dcdfe6;
 }

+ 3 - 3
fhKeeper/formulahousekeeper/inva_4_tivo/moduleView/css/header.less

@@ -15,13 +15,13 @@
     align-items: center;
     height: 100%;
     .header-logo {
-      width: 6.25rem;
+      width: 6.875rem;
     }
     .header-list {
       display: flex;
       align-items: center;
       height: 100%;
-      margin-left: 4rem;
+      margin-left: 2rem;
       .header-item {
         margin-right: 2rem;
         font-size: 1.125rem;
@@ -73,7 +73,7 @@
       font-size: 1.125rem;
       .product-title {
         display: flex;
-        padding: 1.25rem 0 0.9375rem 1.875rem;
+        padding: 1.25rem 0 0.9375rem 1rem;
         align-items: center;
         border-bottom: 0.0625rem solid #dcdfe6;
       }

+ 3 - 2
fhKeeper/formulahousekeeper/inva_4_tivo/moduleView/header.html

@@ -15,7 +15,8 @@
     <div class="headerView">
       <div class="headerView-left">
         <div class="header-logo">
-          <img id="logo" src="./image/logo.jpg" class="img" alt="">
+          <img id="logo" src="./image/logos.jpg" class="img" alt="">
+          <!-- <img id="logo" src="./image/logo.jpg" class="img" alt=""> -->
           <!-- <img src="./image/logo.png" class="img" alt=""> -->
         </div>
         <div class="header-list" @mouseleave="mouseleave('left')">
@@ -40,7 +41,7 @@
     <div class="headerProduct" v-if="productFlag" @mouseenter="mouseenter('product', true)" @mouseleave="mouseleave('product')">
       <div class="content">
         <div class="product">
-          <div class="product-title">管家</div>
+          <div class="product-title">火石企业办公套件</div>
           <div class="product-list" @mouseleave="mouseleave('other')">
             <div :class="`product-item ${otherItemIndex == index ? 'hove' : ''}`" v-for="(item, index) in otherList" :key="index" @click="toPath(item)" @mouseenter="mouseenter('other', index)">
               <a :href="item.path" target="_top">{{ item.label }}</a>

BIN
fhKeeper/formulahousekeeper/inva_4_tivo/moduleView/image/logos.jpg


BIN
fhKeeper/formulahousekeeper/inva_4_tivo/moduleView/image/logos.png


+ 1 - 1
fhKeeper/formulahousekeeper/inva_4_tivo/project.html

@@ -7,7 +7,7 @@
     <meta name="description" content="工时管家是专业的工时管理和项目管理软件。提供工时填报,审核和工时统计功能。引进现代工时管理和项目管理的理念,核算项目投入成本准确便捷,企业IPO项目成本分摊好帮手"/>
     <title>工时管理|工时记录表|项目成本管理-工时管家是强大易用的项目工时管理系统。工时填报|工时统计|手机移动填报|核算项目成本|企业IPO利器!</title>
     <link href="css/styles.css" rel="stylesheet">
-    <link rel="icon" href="image/favicon.png">
+    <link rel="shortcut icon" type="image/x-icon" href="./favicon.ico" />
     <link rel="stylesheet" href="css/tongyong.css">
     <link rel="stylesheet" href="css/reset.css">
     <link rel="stylesheet" href="css/projectt.css">

+ 1 - 1
fhKeeper/formulahousekeeper/inva_4_tivo/workshop.html

@@ -18,7 +18,7 @@
       工时管理|工时记录表|项目成本管理-工时管家是强大易用的项目工时管理系统。工时填报|工时统计|手机移动填报|核算项目成本|企业IPO利器!
     </title>
     <link href="css/styles.css" rel="stylesheet">
-    <link rel="icon" href="image/favicon.png" />
+    <link rel="shortcut icon" type="image/x-icon" href="./favicon.ico" />
     <link rel="stylesheet" href="css/tongyong.css" />
     <link rel="stylesheet" href="css/reset.css" />
     <link rel="stylesheet" href="css/customer.css" />

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

@@ -621,6 +621,26 @@ public class ReportController {
                     System.out.println("第"+(i+1)+"个项目的第一审核人是:" +projectAuditorId[i]);
                 }
             }
+        } else if (comTimeType.getReportAuditType() == 1 || comTimeType.getReportAuditType() == 2 || comTimeType.getReportAuditType() == 9) {
+            List<TaskGroup> groupList = taskGroupService.list(new QueryWrapper<TaskGroup>().in("id", Arrays.asList(groupId)));
+
+            for (int i=0;i<projectAuditorId.length; i++) {
+                if (projectAuditorId[i] == null) {
+                    //取分组的负责人进行审核
+                    int finalPid = projectId[i];
+                    Integer finalGroupId = groupId[i];
+                    TaskGroup targetGroup = groupList.stream().filter(g->g.getId().equals(finalGroupId)).findFirst().orElse(null);
+                    if (targetGroup != null) {
+                        projectAuditorId[i] = targetGroup.getInchargerId();
+                    } else {
+                        //没有分组的情况,返回错误信息
+                        HttpRespMsg msg = new HttpRespMsg();
+                        msg.setError("请设置"+projectList.stream().filter(project -> project.getId().equals(finalPid)).findFirst().get().getProjectName()+
+                                "项目下"+targetGroup.getName()+"分组的负责人");
+                        return msg;
+                    }
+                }
+            }
         } else {
             //自动填充项目审核人
             for (int i=0;i<projectAuditorId.length; i++) {
@@ -1317,6 +1337,7 @@ public class ReportController {
             }).get();
             //该逻辑生效日期
             LocalDate effectiveDate = LocalDate.of(2024, 8, 14);
+//            System.out.println(reportOwner.getId()+", maxDate:"+maxDate);
             if (maxDate.isAfter(effectiveDate)) {
                 //取最近五个工作日
                 int cnt = 0;

+ 8 - 11
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -17,7 +17,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2024-07-24
+ * @since 2024-08-18
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -297,7 +297,7 @@ public class TimeType extends Model<TimeType> {
     private Integer mainProjectState;
 
     /**
-     * 日报的审核类型, 0-项目审核人审核,1-分组负责人审核,2-先分组负责人审核再项目负责人(PM)审核;3-员工自由选择审批人 4-项目所属BU审核 5-直属审核人或部门负责人审核,6-直属或部门负责人审核->项目日报审核人审核,7-项目和部门并行审核
+     * 日报的审核类型, 0-项目审核人审核,1-分组负责人审核,2-先分组负责人审核再项目负责人(PM)审核;3-员工自由选择审批人 4-项目所属BU审核 5-直属审核人或部门负责人审核,6-直属或部门负责人审核->项目日报审核人审核,7-项目和部门并行审核;8-项目设置复审人;9-分组负责人审核->项目日报审核人审核
      */
     @TableField("report_audit_type")
     private Integer reportAuditType;
@@ -590,14 +590,6 @@ public class TimeType extends Model<TimeType> {
     @TableField("import_report_audit_normal")
     private Integer importReportAuditNormal;
 
-
-    @TableField(exist = false)
-    private List<User> userList;
-    @TableField(exist = false)
-    private List<TimeAutoExclude> excludeTimeList;
-    @TableField(exist = false)
-    private Integer saasSyncContact;
-
     /**
      * 日报第二审核人;在reportAuditType5时有效
      */
@@ -610,13 +602,18 @@ public class TimeType extends Model<TimeType> {
     @TableField("third_auditor")
     private String thirdAuditor;
 
-
     /**
      * 工时报告页面,查看时仅显示比例;
      */
     @TableField("only_show_percent")
     private Integer onlyShowPercent;
 
+    @TableField(exist = false)
+    private List<User> userList;
+    @TableField(exist = false)
+    private List<TimeAutoExclude> excludeTimeList;
+    @TableField(exist = false)
+    private Integer saasSyncContact;
 
     @Override
     protected Serializable pkVal() {

+ 20 - 17
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -11980,9 +11980,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         titleList.add("工时(H)");
         titleList.add("FTE(工时/当月工时基数)");
         if(user.getCompanyId()==876){
-            titleList.add("FTE(工时/固定工时基数(163.125))");
+            titleList.add("非项目工时(H)");
+        } else {
+            titleList.add("非项目工时(H)(当月工时基数-项目工时合计工时数)");
         }
-        titleList.add("非项目工时(H)(当月工时基数-项目工时合计工时数)");
+
         dataList.add(titleList);
         subtitle.add("");
         subtitle.add("");
@@ -11992,13 +11994,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         subtitle.add("");
         subtitle.add("");
         subtitle.add("");
-        if(user.getCompanyId()==876){
-            subtitle.add("");
-        }
         subtitle.add("当月工时:" + monthTime);
         dataList.add(subtitle);
         Map<String, List<Map<String, Object>>> listMap = resultList.stream().collect(Collectors.groupingBy(i -> String.valueOf(i.get("area"))));
         List<String> areaList = resultList.stream().map(i -> String.valueOf(i.get("area"))).distinct().collect(Collectors.toList());
+        BigDecimal nonTotal = new BigDecimal(0.0);
         for (String areaName : areaList) {
             List<Map<String, Object>> mapList = listMap.get(areaName);
             Map<String, List<Map<String, Object>>> listMap1 = mapList.stream().collect(Collectors.groupingBy(m -> String.valueOf(m.get("id"))));
@@ -12009,7 +12009,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 if(maps==null){
                     continue;
                 }
-                //计算当前人员的合计
+                //计算当前人员的每个项目
                 for (int i = 0; i < maps.size(); i++) {
                     Map<String, Object> map = maps.get(i);
                     List<String> item=new ArrayList<>();
@@ -12036,10 +12036,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     item.add(workTime + "");
                     Float FTE = Float.valueOf(map.get("workTime").toString()) / monthTime;
                     item.add(new BigDecimal(FTE).setScale(2, RoundingMode.HALF_UP) + "");
-                    if(user.getCompanyId()==876){
-                        Float FTERegular = Float.valueOf(map.get("workTime").toString()) / (Float.valueOf(String.valueOf("163.125"))*(period.getMonths()+1));
-                        item.add(new BigDecimal(FTERegular).setScale(2, RoundingMode.HALF_UP) + "");
-                    }
                     item.add("");
                     dataList.add(item);
                 }
@@ -12066,12 +12062,14 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 }).sum();
                 item.add(new BigDecimal(FTESum).setScale(2,RoundingMode.HALF_UP)+"");
                 if(user.getCompanyId()==876){
-                    double FTERegularSum = maps.stream().mapToDouble(m -> {
-                        return Float.valueOf(m.get("workTime").toString()) / (Float.valueOf(String.valueOf("163.125"))*(period.getMonths()+1));
-                    }).sum();
-                    item.add(new BigDecimal(FTERegularSum).setScale(2,RoundingMode.HALF_UP)+"");
+                    double nonProjectSum = (double)maps.get(0).get("nonProjectWorkingTime");
+                    BigDecimal nonBd = new BigDecimal(nonProjectSum).setScale(2,RoundingMode.HALF_UP);
+                    item.add(nonBd+"");
+                    nonTotal = nonTotal.add(nonBd);
+                } else {
+                    item.add(new BigDecimal(monthTime-workTimeSum).setScale(2,RoundingMode.HALF_UP)+"");
                 }
-                item.add(new BigDecimal(monthTime-workTimeSum).setScale(2,RoundingMode.HALF_UP)+"");
+
                 dataList.add(item);
             }
             //增加自定义维度合计行
@@ -12085,8 +12083,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             double workTimeSum = mapList.stream().mapToDouble(m -> Double.valueOf(String.valueOf(m.get("workTime")))).sum();
             item.add(new BigDecimal(workTimeSum).setScale(2,RoundingMode.HALF_UP)+"");
             item.add("");
-            item.add("");
-            item.add(new BigDecimal((monthTime-workTimeSum)).setScale(2,RoundingMode.HALF_UP)+"");
+            if(user.getCompanyId()==876){
+                //直接抽取非项目工时
+                item.add(nonTotal.setScale(2,RoundingMode.HALF_UP)+"");
+            } else {
+                item.add(new BigDecimal((monthTime-workTimeSum)).setScale(2,RoundingMode.HALF_UP)+"");
+            }
+
             dataList.add(item);
         }
         String fileName = "FTE报表"+System.currentTimeMillis();

+ 54 - 21
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -1373,11 +1373,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     //保存审核日报的记录
-    private void saveApproveReportLog(List<Report> reportList, String operatorId, String opName) {
+    private void saveApproveReportLog(Integer companyId, List<Report> reportList, String operatorId, String opName) {
         Report r = reportList.get(0);
         List<ReportLog> addLogList = new ArrayList<>();
         List<ReportLogDetail> addLogDetailList = new ArrayList<>();
-        Integer companyId = r.getCompanyId();
 //        List<Integer> projectIds = reportList.stream().map(Report::getProjectId).collect(Collectors.toList());
 //        List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().select("id, project_name").in("id", projectIds));
         //操作审核通过
@@ -1402,7 +1401,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             detail.setWorkDate(log.getCreateDate());
             detail.setOperatorId(log.getOperatorId());
             detail.setOperateDate(log.getOperateDate());
-            detail.setCompanyId(log.getCompanyId());
+            detail.setCompanyId(companyId);
             detail.setMsg(log.getMsg());
             addLogDetailList.add(detail);
         }
@@ -1964,19 +1963,23 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             reportAlogMembdateMapper.insert(membdate);
 
             //日报的审核过程记录
-            saveApproveReportLog(reportList, user.getId(), user.getName());
+            saveApproveReportLog(company.getId(), reportList, user.getId(), user.getName());
         } else {
             //先按照大的审核模式进行分类
             Report oneReport = reportMapper.selectById(ids.get(0));
             int oldState = oneReport.getState();
             String creatorId = oneReport.getCreatorId();
             User auditTargetUser = userMapper.selectById(creatorId);
-            if (timeType.getReportAuditType() == 2) {
-                //先按分组审核,再进行项目经理审核
+            if (timeType.getReportAuditType() == 2 || timeType.getReportAuditType() == 9) {
+                //先按分组审核,再进行项目经理或者日报审核人审核
                 List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().select("id, state, group_audit_state, project_id, project_audit_state, project_auditor_id").in("id", ids));
                 List<Integer> assProjectIds = reportList.stream().map(Report::getProjectId).collect(Collectors.toList());
                 List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().select("id, incharger_id").in("id", assProjectIds));
                 Optional<Project> first = projectList.stream().filter(p -> StringUtils.isEmpty(p.getInchargerId())).findFirst();
+                List<ProjectAuditor> projectAuditorList = null;
+                if (timeType.getReportAuditType() == 9) {
+                    projectAuditorList = projectAuditorMapper.selectList(new QueryWrapper<ProjectAuditor>().in("project_id", assProjectIds));
+                }
                 if (first.isPresent()) {
                     String projectName = first.get().getProjectName();
                     //httpRespMsg.setError("请给["+projectName+"]项目设置项目负责人");
@@ -1992,17 +1995,29 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         r.setProjectAuditTime(LocalDateTime.now());
 
                         //分组审核完,该项目的pm审核了
-                        Project project1 = projectList.stream().filter(project -> project.getId().equals(r.getProjectId())).findFirst().get();
-
+                        String nextAuditor = null;
+                        if (timeType.getReportAuditType() == 2) {
+                            Project project1 = projectList.stream().filter(project -> project.getId().equals(r.getProjectId())).findFirst().get();
+                            nextAuditor = project1.getInchargerId();
+                        } else {
+                            //9的情况,取第一个日报审核人
+                            ProjectAuditor projectAuditor = projectAuditorList.stream().filter(pa -> pa.getProjectId().equals(r.getProjectId())).findFirst().orElse(null);
+                            if (projectAuditor != null) {
+                                nextAuditor = projectAuditor.getAuditorId();
+                            } else {
+                                //没有设置的话,还是选择项目经理
+                                Project project1 = projectList.stream().filter(project -> project.getId().equals(r.getProjectId())).findFirst().get();
+                                nextAuditor = project1.getInchargerId();
+                            }
+                        }
                         //如果分组负责人和项目经理是同一个人,那么就不需要项目经理审核了
-                        if (r.getProjectAuditorId().equals(project1.getInchargerId())) {
+                        if (r.getProjectAuditorId().equals(nextAuditor)) {
                             r.setProjectAuditState(1);
                             r.setProjectAuditTime(LocalDateTime.now());
                             r.setState(1);
                         } else {
                             //不是同一个人,那么就需要项目经理审核
-                            r.setProjectAuditorId(project1.getInchargerId());
-                            r.setProjectAuditorName(userMapper.selectById(project1.getInchargerId()).getName());
+                            r.setProjectAuditorId(nextAuditor);
                         }
                     } else if (r.getProjectAuditState() == 0) {
                         r.setProjectAuditState(1);
@@ -2173,7 +2188,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if (timeType.getReportAuditType() == 5) {
                         if(hasAuditAllPri || ((r.getIsDeptAudit() == 0 &&  user.getId().equals(r.getProjectAuditorId()))
                                 || (r.getIsDeptAudit() == 1 && user.getId().equals(r.getAuditDeptManagerid())))){
-                            if (thirdAuditor != null && secondAuditor != null) {
+                            if (!StringUtils.isEmpty(thirdAuditor) && !StringUtils.isEmpty(secondAuditor)) {
                                 if (user.getId().equals(thirdAuditor)) {
                                     //当前为第三审核人在审核,直接通过
                                     newReport.setState(1);
@@ -2616,7 +2631,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             reportAlogMembdateMapper.insert(membdate);
 
             //日报的审核过程记录
-            saveApproveReportLog(reportList, user.getId(), user.getName());
+            saveApproveReportLog(company.getId(), reportList, user.getId(), user.getName());
         }
         return httpRespMsg;
     }
@@ -3270,14 +3285,18 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             int oldState = oneReport.getState();
             List<User> allUsers = null;
             List<Report> allReports = null;
-            if (timeType.getReportAuditType() == 2) {
+            if (timeType.getReportAuditType() == 2 || timeType.getReportAuditType() == 9) {
                 allUsers = userMapper.selectList(new QueryWrapper<User>().select("id, name, department_id").eq("company_id", company.getId()));
-                //先分组负责人审核,再项目负责人审核
+                //先分组负责人审核,再项目负责人审核或者日报审核人审核
                 List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().select("id, state, group_audit_state, project_id, project_audit_state, project_auditor_id, creator_id, create_date, company_id").in("id", ids));
                 allReports = reportList;
                 List<Integer> assProjectIds = reportList.stream().map(Report::getProjectId).collect(Collectors.toList());
                 List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().select("id, incharger_id").in("id", assProjectIds));
                 Optional<Project> first = projectList.stream().filter(p -> StringUtils.isEmpty(p.getInchargerId())).findFirst();
+                List<ProjectAuditor> projectAuditorList = null;
+                if (timeType.getReportAuditType() == 9) {
+                    projectAuditorList = projectAuditorMapper.selectList(new QueryWrapper<ProjectAuditor>().in("project_id", assProjectIds));
+                }
                 if (first.isPresent()) {
                     String projectName = first.get().getProjectName();
                     //httpRespMsg.setError("请给["+projectName+"]项目设置项目负责人");
@@ -3298,15 +3317,29 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             httpRespMsg.setError(MessageUtils.message("project.masterError",project1.getProjectName()));
                             return httpRespMsg;
                         }
+                        //分组审核完,该项目的pm审核了
+                        String nextAuditor = null;
+                        if (timeType.getReportAuditType() == 2) {
+                            nextAuditor = project1.getInchargerId();
+                        } else {
+                            //9的情况,取第一个日报审核人
+                            ProjectAuditor projectAuditor = projectAuditorList.stream().filter(pa -> pa.getProjectId().equals(r.getProjectId())).findFirst().orElse(null);
+                            if (projectAuditor != null) {
+                                nextAuditor = projectAuditor.getAuditorId();
+                            } else {
+                                //没有设置的话,还是选择项目经理
+                                nextAuditor = project1.getInchargerId();
+                            }
+                        }
+
                         //如果分组负责人和项目经理是同一个人,那么就不需要项目经理审核了
-                        if (r.getProjectAuditorId().equals(project1.getInchargerId())) {
+                        if (r.getProjectAuditorId().equals(nextAuditor)) {
                             r.setProjectAuditState(1);
                             r.setProjectAuditTime(LocalDateTime.now());
                             r.setState(1);
                         } else {
                             //分组审核完,该项目的pm审核了
-                            r.setProjectAuditorId(project1.getInchargerId());
-                            r.setProjectAuditorName(pmFirst.get().getName());
+                            r.setProjectAuditorId(nextAuditor);
                         }
                     } else if (r.getProjectAuditState() == 0) {
                         r.setProjectAuditState(1);
@@ -3482,7 +3515,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if (timeType.getReportAuditType() == 5) {
                         if(hasAuditAllPri || ((r.getIsDeptAudit() == 0 &&  user.getId().equals(r.getProjectAuditorId()))
                                 || (r.getIsDeptAudit() == 1 && user.getId().equals(r.getAuditDeptManagerid())))){
-                            if (thirdAuditor != null && secondAuditor != null) {
+                            if (!StringUtils.isEmpty(thirdAuditor) && !StringUtils.isEmpty(secondAuditor)) {
                                 if (user.getId().equals(thirdAuditor)) {
                                     //当前为第三审核人在审核,直接通过
                                     r.setState(1);
@@ -3998,7 +4031,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             log.setProjectName(s);
             reportAuditLogMapper.insert(log);
 
-            saveApproveReportLog(allReports, user.getId(), user.getName());
+            saveApproveReportLog(company.getId(), allReports, user.getId(), user.getName());
             //当前所有员工的日期
             List<ReportAlogMembdate> membList = new ArrayList<>();
             for (Report r : allReports) {
@@ -7536,7 +7569,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             reportAlogMembdateMapper.insert(membdate);
 
             //日报的审核过程记录
-            saveApproveReportLog(reportList, user.getId(), user.getName());
+            saveApproveReportLog(companyId, reportList, user.getId(), user.getName());
         } else {
             msg.setError("无待审核日报");
         }

+ 29 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -1720,7 +1720,8 @@
     </select>
 
     <select id="getFTEData" resultType="java.util.Map">
-        SELECT u.id,u.name userName,d.department_name as departmentName,d.corpwx_deptid as wxdeptId,u.corpwx_userid as wxUserId,IF(u.plate1 IS NULL OR u.plate1='' ,'无',u.plate1) as area,IFNULL(r.projectName,'') as projectName,IFNULL(r.projectCode,'') as projectCode,IFNULL(r.workTime,0) as workTime
+        SELECT u.id,u.name userName,d.department_name as departmentName,d.corpwx_deptid as wxdeptId,u.corpwx_userid as wxUserId,IF(u.plate1 IS NULL OR u.plate1='' ,'无',u.plate1) as area,IFNULL(r.projectName,'') as projectName,
+               IFNULL(r.projectCode,'') as projectCode,IFNULL(r.workTime,0) as workTime,IFNULL(t.nonProjectWorkingTime,0) as nonProjectWorkingTime
         FROM `user` u
         LEFT JOIN department d on u.department_id=d.department_id
         LEFT JOIN (
@@ -1750,6 +1751,33 @@
         GROUP BY user.id,p.id,user.plate1,p.project_name,p.project_code
         ) r
         ON u.id = r.creator_id
+        LEFT JOIN (
+        SELECT report.creator_id,SUM(working_time) nonProjectWorkingTime
+        FROM report
+        LEFT JOIN project p
+        ON report.project_id = p.id
+        LEFT JOIN `user`
+        ON user.id = report.creator_id
+        WHERE report.state = 1
+        AND p.is_public = 1
+        AND report.company_id=#{companyId}
+        AND
+        (
+        IF(user.induction_date is not null AND user.induction_date &gt; #{startDate} and user.inactive_date is not null AND user.`is_active`=0 AND user.inactive_date &lt; #{endDate}
+        ,report.create_date BETWEEN user.induction_date AND user.inactive_date
+        ,report.create_date BETWEEN #{startDate} AND #{endDate} )
+        and
+        IF(user.induction_date is not null AND user.induction_date &gt; #{startDate}
+        ,report.create_date BETWEEN user.induction_date AND #{endDate}
+        ,report.create_date BETWEEN #{startDate} AND #{endDate} )
+        and
+        IF(user.inactive_date is not null AND user.`is_active`=0 AND user.inactive_date &lt; #{endDate}
+        ,report.create_date BETWEEN #{startDate} AND user.inactive_date
+        ,report.create_date BETWEEN #{startDate} AND #{endDate} )
+        )
+        GROUP BY user.id
+        ) t
+        ON u.id = t.creator_id
         WHERE u.company_id=#{companyId}
         AND (workTime>0 OR u.`is_active`=1)
         <if test="area!=null and area != '' ">

+ 10 - 10
fhKeeper/formulahousekeeper/timesheet/index.html

@@ -14,14 +14,14 @@
     <link rel="shortcut icon" type="image/x-icon" href="./favicon.ico" />
     <link href="./static/css/public.css" rel="stylesheet" type="text/css" />
     <!-- 引入样式 -->
-    <link
+    <!-- <link
       href="https://cdn.staticfile.org/element-ui/2.13.0/theme-chalk/index.css"
       rel="stylesheet"
-    />
+    /> -->
     <!-- <link rel="stylesheet" href="./static/js/element-uiCss.css"> -->
     <!-- 接入JQ  -->
-    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
-    <!-- <script src="./static/js/jquery.min.js"></script> -->
+    <!-- <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script> -->
+    <script src="./static/js/jquery.min.js"></script>
     <style>
       /* 滚动条样式修改 */
       /*滚动条凹槽的颜色,还可以设置边框属性 */
@@ -142,14 +142,14 @@
       };
     </script>
     <!-- 引入Vue.js -->
-    <script src="https://cdn.staticfile.org/vue/2.6.10/vue.min.js"></script>
-    <!-- <script src="./static/js/vue.min.js"></script> -->
+    <!-- <script src="https://cdn.staticfile.org/vue/2.6.10/vue.min.js"></script> -->
+    <script src="./static/js/vue.min.js"></script>
     <!-- 引入vuex.js -->
-    <script src="https://cdn.staticfile.org/vuex/3.0.0/vuex.min.js"></script>
-    <!-- <script src="./static/js/vuex.min.js"></script> -->
+    <!-- <script src="https://cdn.staticfile.org/vuex/3.0.0/vuex.min.js"></script> -->
+    <script src="./static/js/vuex.min.js"></script>
     <!-- 引入vue-router -->
-    <script src="https://cdn.staticfile.org/vue-router/3.0.0/vue-router.min.js"></script>
-    <!-- <script src="./static/js/vue-router.min.js"></script> -->
+    <!-- <script src="https://cdn.staticfile.org/vue-router/3.0.0/vue-router.min.js"></script> -->
+    <script src="./static/js/vue-router.min.js"></script>
     <!-- 引入组件库 -->
     <!-- <script src="https://cdn.staticfile.org/element-ui/2.13.0/index.js"></script> -->
     <script src="./static/js/element-ui.js"></script>

+ 2 - 0
fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json

@@ -1920,6 +1920,8 @@
   "anZhaoQiYeQingKuangTiaoZheng": "Adjust according to the situation of the enterprise",
   "buFenChengYuan": "Some members",
   "buMenHeXiangMuRiBaoShenHeRenBingHangShenHe": "Department and project daily report reviewers conduct parallel reviews",
+  "projectSetSecReviewer": "project set second reviewer",
+  "groupManagerAuditorToProjectReportAuditor": "Group manager audit first and then report auditor review",
   "eWaiGongZuoRiSheZhi": "Extra working days setting:",
   "feiGongZuoRiHanZhouMoWeiFaDingGongZuoRiJinZhiTianBao": "Non working days (including weekends as legal working days) are prohibited from filling in",
   "fenZuFuZeRenShenHe": "Group leader review",

+ 2 - 0
fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json

@@ -1955,6 +1955,8 @@
   "zhiShuShenHeRenHuoBuMenFuZeRenShenHe": "直属审核人或部门负责人审核",
   "zhiShuHuoBuMenFuZeRenShenHeXiangMuRiBaoShenHeRenShenHe": "直属或部门负责人审核->项目日报审核人审核",
   "buMenHeXiangMuRiBaoShenHeRenBingHangShenHe": "部门和项目日报审核人并行审核",
+  "projectSetSecReviewer": "项目设置复审人",
+  "groupManagerAuditorToProjectReportAuditor": "分组负责人审核->项目日报审核人审核",
   "anZhaoQiYeQingKuangTiaoZheng": "按照企业情况调整",
   "qingXianDianJiXiTongJiChuSheZhi": "请先点击系统基础设置",
   "tiaoGuo": "跳过",

+ 2 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/echartsData.js

@@ -123,7 +123,8 @@ export function debounce(func, delay) {
   };
 }
 
-export const fixedTaskGrouping = ['工程部现场安装施工', '工程部配合调试', '生产部电气', '生产部车间', '研发部BIM设计', '研发部工艺设计', '研发部工艺调试验收', '研发部电气设计', '研发部电气调试验收', '研发部结构设计']
+// export const fixedTaskGrouping = ['工程部现场安装施工', '工程部配合调试', '生产部电气', '生产部车间', '研发部BIM设计', '研发部工艺设计', '研发部工艺调试验收', '研发部电气设计', '研发部电气调试验收', '研发部结构设计']
+export const fixedTaskGrouping = ['研发部工艺设计', '研发部结构设计', '研发部BIM设计', '研发部电气设计', '研发部BIM设计', '生产部车间', '生产部电气', '工程部现场安装施工', '研发部电气调试验收', '工程部配合调试']
 
 // 固定分组数据
 export const fixedGrouping = {

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

@@ -1000,7 +1000,7 @@
             <!-- FTE报表 -->
             <el-table v-if="ins == 19"  key="19" border :data="fTEDataList" highlight-current-row v-loading="listLoading" :height="+tableHeight - 1" style="width: 100%;" @sort-change="tableSort">
                 <el-table-column align="center" prop="area" :label="customName" min-width="150"></el-table-column>
-                <el-table-column align="center" prop="projectCode" :label="user.companyId == '7030' ? '项目令号' : $t('Itemno')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="projectCode" :label="user.companyId == '7030' ? '项目令号' : $t('Itemno')" min-width="250"></el-table-column>
                 <el-table-column align="center" prop="projectName" :label="$t('headerTop.projectName')" min-width="250"></el-table-column>
                 <el-table-column align="center" prop="userName" :label="$t('renMing')" min-width="150" sortable="custom">
                   <template slot-scope="scope">
@@ -1016,7 +1016,7 @@
                 </el-table-column>
                 <el-table-column align="center" prop="workTime" :label="$t('time.workingHours')" min-width="150"></el-table-column>
                 <el-table-column align="center" prop="FTE" :label="$t('fteGongShiDangYueGongShiJiShu')" min-width="250"></el-table-column>
-                <el-table-column v-if="user.companyId==876" align="center" prop="FTERegular" :label="$t('fteGongShiGuDingGongShiJiShu_163125')" min-width="300"></el-table-column>
+                <!-- <el-table-column v-if="user.companyId==876" align="center" prop="FTERegular" :label="$t('fteGongShiGuDingGongShiJiShu_163125')" min-width="300"></el-table-column> -->
             </el-table>
 
             <!-- 有效工时率表 -->

+ 2 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/leave/list.vue

@@ -133,7 +133,8 @@
                 <el-form-item style="display: inline-block;width:300px;margin-right: 400px" :label="$t('lengthunit')">
                     <el-radio-group v-model="addForm.timeType" @change="chanRadio()" style="display:inline-block;width:240px">
                         <el-radio label="0">{{ $t('accordingdays') }}</el-radio>
-                        <el-radio label="1" v-if="addForm.leaveType != 6">{{ $t('leavehour') }}</el-radio>
+                        <!-- <el-radio label="1" v-if="addForm.leaveType != 6">{{ $t('leavehour') }}</el-radio> -->
+                        <el-radio label="1">{{ $t('leavehour') }}</el-radio>
                     </el-radio-group>
                 </el-form-item>
                 <!-- 时间选择 -->

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

@@ -128,11 +128,11 @@
                         <span v-else><TranslationOpenDataText type='userName' :openid='project.reviwerName'></TranslationOpenDataText></span>
                     </el-link></div>
                     <!-- <div v-if="user.timeType.reportAuditType != 8" style="margin-top:10px;color:#999;"> -->
-                    <div v-if="user.timeType.reportAuditType == 0 || user.timeType.reportAuditType == 4 || user.timeType.reportAuditType == 6" style="margin-top:10px;color:#999;">
+                    <div v-if="user.timeType.reportAuditType == 0 || user.timeType.reportAuditType == 4 || user.timeType.reportAuditType == 6 || user.timeType.reportAuditType == 9" style="margin-top:10px;color:#999;">
                         {{ user.timeType.reportCc == 1?'日报抄送人':$t('newspaperauditor') }}
                     </div>
                     <!-- <div v-if="user.timeType.reportAuditType != 8"> -->
-                    <div v-if="user.timeType.reportAuditType == 0 || user.timeType.reportAuditType == 4 || user.timeType.reportAuditType == 6">
+                    <div v-if="user.timeType.reportAuditType == 0 || user.timeType.reportAuditType == 4 || user.timeType.reportAuditType == 6 || user.timeType.reportAuditType == 9">
                         <span v-if="project.auditorList.length == 0" style="margin:10px;">-</span>
                         <el-link v-for="item in project.auditorList" :key="item.id" style="margin:10px;" @click="showUser(item.auditorId)">
                             <span v-if="user.userNameNeedTranslate != 1">

+ 7 - 36
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -582,11 +582,11 @@
                     </el-form-item>
 
                     <span v-if="user.companyId != 469">
-                        <el-form-item :label="$t('newspaperauditor')" v-show="user.timeType.reportAuditType == 0 || user.timeType.reportAuditType == 4 || user.timeType.reportAuditType == 6" v-if="user.company.nonProjectSimple == 0 || (user.company.nonProjectSimple == 1 && addForm.isPublic == 0)">
-                            <el-select v-if="user.userNameNeedTranslate != '1'" @change="$forceUpdate()" v-model="addForm.auditUserIds"  :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" filterable :placeholder="$t('defaultistheprojectleader')" style="width:100%;" :multiple="user.timeType.reportAuditType != 6" >
+                        <el-form-item :label="$t('newspaperauditor')" v-show="user.timeType.reportAuditType == 0 || user.timeType.reportAuditType == 4 || user.timeType.reportAuditType == 6 || user.timeType.reportAuditType == 9" v-if="user.company.nonProjectSimple == 0 || (user.company.nonProjectSimple == 1 && addForm.isPublic == 0)">
+                            <el-select v-if="user.userNameNeedTranslate != '1'" @change="$forceUpdate()" v-model="addForm.auditUserIds"  :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" filterable :placeholder="$t('defaultistheprojectleader')" style="width:100%;" :multiple="user.timeType.reportAuditType != 6 && user.timeType.reportAuditType != 9" >
                                 <el-option v-for="item in participator" :key="item.id" :label="item.name" :value="item.id"></el-option>
                             </el-select>
-                            <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :tile="true" :filterable="true" :widthStr="'800'" :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" :subjectId="addForm.auditUserIds" :subject="participator" :clearable="false" :distinction="'10'"  :multiSelect="user.timeType.reportAuditType != 6" @selectCal="selectCal"></selectCat>
+                            <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :tile="true" :filterable="true" :widthStr="'800'" :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" :subjectId="addForm.auditUserIds" :subject="participator" :clearable="false" :distinction="'10'"  :multiSelect="user.timeType.reportAuditType != 6 && user.timeType.reportAuditType != 9" @selectCal="selectCal"></selectCat>
                         </el-form-item>
                     </span>
                     
@@ -5104,7 +5104,6 @@ a {
                         // console.log(this.projectKeyNodesData, '节点值')
                     }
                 } else {
-                    console.log('点击来编辑执行')
                     const usersJson = JSON.parse(sessionStorage.getItem("user"))
                     if(usersJson.companyId == '936') {
                         if(usersJson.roleName != this.$t('role.superAdministrator') && usersJson.roleName != this.$t('role.systemAdministrator')) {
@@ -5113,7 +5112,6 @@ a {
                             this.isShowProjectName = false
                         }
                     }
-                    console.log(this.isShowProjectName, '看看值')
                     this.http.post('/project/detailTwo', {id: item.id},
                     res => {
                     if (res.code == "ok") {
@@ -5235,18 +5233,9 @@ a {
                             this.$set(this.addForm, 'bu', '')
                         }
                     }
-
-                    // if(this.user.companyId == '428') {
-                    //     if(item.projectSeparate) {
-                    //         this.$set(this.addForm, 'projectCategorySub', item.projectSeparate.projectCategorySub)
-                    //     } else {
-                    //         this.$set(this.addForm, 'projectCategorySub', '')
-                    //     }
-                    // }
-
+                    console.log(111111)
                     // 判断是否有供应商
                     if(this.user.company.packageProvider) {
-                        // this.addForm.supplierId = item.providerIds.split(',')
                         if(item.providerIds) {
                             let arr = [] 
                             let zhhi = item.providerIds.split(',')
@@ -5254,17 +5243,13 @@ a {
                                 arr.push(+zhhi[i] + 0)
                             }
                             this.$set(this.addForm, 'supplierId', arr)
-                            // console.log( this.addForm.supplierId)
                         } else {
                             this.$set(this.addForm, 'supplierId', [])
                         }
                        
                     }
                     // 判断是否有供应商结尾
-
-
                     this.deleteVif = item.creatorId
-                    // console.log("handleadd",this.deleteVif,this.addForm)
                     if(item.associateDegrees != null && item.associateDegrees != 'null' && item.associateDegrees != '') {
                         var spli = item.associateDegrees.split(',')
                         var sl  = []
@@ -5273,33 +5258,20 @@ a {
                             sl.push(num)
                         }
                         this.auseList = sl
-                        // console.log(this.auseList)
                     } else {
                         this.auseList = []
                     }
-                    // var spli = item.associateDegrees.split(',')
-                    // var sl  = []
-                    // for(var i in spli) {
-                    //     var num = +spli[i] + 0
-                    //     sl.push(num)
-                    // }
-                    // this.auseList = sl
-                    // console.log(this.auseList)
                     this.changeParticipator();
                     this.getProjectBaseData(item.id);
                     this.getProjectKeyNodeData(item.id)
                     if (this.user.company.packageEngineering == 1) {
                         this.getProjectProfessions(item.id);
-                        
                     }
-                    //获取项目的相关领导
-                    // this.getProjectNotifyUserList(item.id);
+                    //获取审核人
                     this.getProjectAutorList(item.id);
                     if (this.user.timeType.reportCc == 1) {
                         this.getProjectCcUserList(item.id);
                     }
-
-                    // this.findUserInTree()
                 }
                 this.addFormVisible = true;
                 if (this.user.timeType.projectManDay == 1) {
@@ -5310,7 +5282,6 @@ a {
                         this.getProfessionList();
                     }
                 }
-
             },
             //获取项目日报抄送人
             getProjectCcUserList(projectId) {
@@ -5342,7 +5313,7 @@ a {
                 this.http.post('/project-auditor/getList',{projectId: projectId},
                         res => {
                             if (res.code == "ok") {
-                                if (this.user.timeType.reportAuditType == 6) {
+                                if (this.user.timeType.reportAuditType == 6 || this.user.timeType.reportAuditType == 9) {
                                     //单个日报审核人,单选
                                     var arr = res.data.map(function(item) {
                                         return item.auditorId;
@@ -5563,7 +5534,7 @@ a {
                         formData.append("associateDegreeNames", listName)
                         //日报审核人
                         if (this.addForm.auditUserIds) {
-                            if (this.user.timeType.reportAuditType == 6) {
+                            if (this.user.timeType.reportAuditType == 6 || this.user.timeType.reportAuditType == 9) {
                                 formData.append("auditUserIds", this.addForm.auditUserIds);
                             } else {
                                 formData.append("auditUserIds", JSON.stringify(this.addForm.auditUserIds));

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue

@@ -753,7 +753,7 @@
         },
         data() {
             return {
-                reportAuditTypeArray:[this.$t('xiangMuShenHeRenShenHe'),this.$t('fenZuFuZeRenShenHe'),this.$t('xianFenZuFuZeRenShenHeZaiXiangMuJingLiShenHe'),this.$t('yuanGongZiYouXuanZeShenPiRen'),this.$t('xiangMuSuoShuBuShenHe'),this.$t('zhiShuShenHeRenHuoBuMenFuZeRenShenHe'),this.$t('zhiShuHuoBuMenFuZeRenShenHeXiangMuRiBaoShenHeRenShenHe'),this.$t('buMenHeXiangMuRiBaoShenHeRenBingHangShenHe')],
+                reportAuditTypeArray:[this.$t('xiangMuShenHeRenShenHe'),this.$t('fenZuFuZeRenShenHe'),this.$t('xianFenZuFuZeRenShenHeZaiXiangMuJingLiShenHe'),this.$t('yuanGongZiYouXuanZeShenPiRen'),this.$t('xiangMuSuoShuBuShenHe'),this.$t('zhiShuShenHeRenHuoBuMenFuZeRenShenHe'),this.$t('zhiShuHuoBuMenFuZeRenShenHeXiangMuRiBaoShenHeRenShenHe'),this.$t('buMenHeXiangMuRiBaoShenHeRenBingHangShenHe'), this.$t('projectSetSecReviewer'),this.$t('groupManagerAuditorToProjectReportAuditor')],
                 expandedKeys: [],
                 checkStrictly: false,
                 checkedKeys:[],

+ 14 - 18
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -564,7 +564,7 @@
                         </el-form-item>
                         <el-form-item v-if="user.company.packageProject == 1&& (user.company.nonProjectSimple==0 || (user.company.nonProjectSimple==1&&domain.isPublic != 1))">
                             <template slot="label">
-                                <span style="color:#FF0000;" v-if="user.timeType.taskGroupRequired == 1 || user.timeType.reportAuditType == 1 || user.timeType.reportAuditType == 2">*</span>
+                                <span style="color:#FF0000;" v-if="user.timeType.taskGroupRequired == 1 || user.timeType.reportAuditType == 1 || user.timeType.reportAuditType == 2 || user.timeType.reportAuditType == 9">*</span>
                                 <span >{{$t('lable.taskGrouping')}}</span>
                             </template>
                             <!-- 任务分组 -->
@@ -594,7 +594,7 @@
                                 </el-select>
                             </template>
                         </el-form-item>
-                        <div v-if="user.timeType.reportAuditType != 3 && user.timeType.reportAuditType != 5 && domain.auditUserList">
+                        <div v-if="user.timeType.reportAuditType != 1 && user.timeType.reportAuditType != 2 && user.timeType.reportAuditType != 3 && user.timeType.reportAuditType != 5 && user.timeType.reportAuditType != 9 && domain.auditUserList">
                             <el-form-item v-if="user.timeType.reportAuditType != 3 && user.timeType.reportAuditType != 5 && domain.auditUserList.length > 0">
                                 <template slot="label">
                                     <span style="color:#FF0000;">*</span>
@@ -4898,7 +4898,7 @@
                         });
                     });
                 //检查当前的项目是否需要获取分组的负责人
-                if (this.user.timeType.reportAuditType == 1 || this.user.timeType.reportAuditType == 2 ) {
+                if (this.user.timeType.reportAuditType == 1 || this.user.timeType.reportAuditType == 2 || this.user.timeType.reportAuditType == 9) {
                     this.http.post("/task-group/getGroupIncharger", {groupId: domain.groupId},
                         res => {
                             if (res.code == "ok") {
@@ -6160,7 +6160,7 @@
                                     var isPublic = targetP[0].isPublic;
                                     filteredRespList = this.jobResponseList.filter(j=>j.timeType == (isPublic?this.$t('fei-xiang-mu-gong-shi'):this.$t('xiangMuGongShi')) && j.role == this.roleList.filter(r=>r.value == list.report[i].extraField1)[0].label);
                                 }
-                                arr.push({
+                                let copyData = {
                                     id: list.report[i].id,
                                     projectId: list.report[i].projectId,
                                     workingTime: list.report[i].workingTime,
@@ -6190,8 +6190,6 @@
                                     taskGroups:list.report[i].taskGroups,
                                     customData: list.report[i].customData,//自定义的数值
                                     auditUserList: list.report[i].auditUserList,
-                                    projectAuditorId: list.report[i].projectAuditorId,
-                                    projectAuditorName: list.report[i].projectAuditorName,
                                     overtimeHours: list.report[i].overtimeHours,
                                     customText: list.report[i].customText,
                                     basecostId: list.report[i].basecostId,
@@ -6208,7 +6206,13 @@
                                     serviceList: list.report[i].serviceList,
                                     sapServiceId: list.report[i].sapServiceId,
                                     reportTargetDeptId: list.report[i].deptId
-                                })
+                                }
+                                if (this.user.timeType.reportAuditType != 1 && this.user.timeType.reportAuditType != 2 && this.user.timeType.reportAuditType != 9) {
+                                    //分组负责人审核的情况下,前端不需要显示,无需设置
+                                    copyData.projectAuditorId = list.report[i].projectAuditorId;
+                                    copyData.projectAuditorName = list.report[i].projectAuditorName;
+                                }
+                                arr.push(copyData);
                                 if (list.report[i].state >= 2) {
                                     this.canEdit = true;
                                 }
@@ -8327,40 +8331,32 @@
                             } else {
                                 formData.append("stage", "-");
                             }
-                            // console.log(this.workForm.domains[i].projectAuditorId, '审核人的id')
                             if (this.workForm.domains[i].projectAuditorId) {
                                 formData.append("projectAuditorId", this.workForm.domains[i].projectAuditorId);
                             } else {
-                                // console.log('执行到了这里')
-                                // console.log(this.user.timeType.reportAuditType)
                                 if (this.user.timeType.reportAuditType == 0 || this.user.timeType.reportAuditType == 4) {
                                     this.$message({
                                         message: this.$t('message.Pleasespecifyaprojectreviewer'),
                                         type: "error"
                                     });
                                     return;
-                                } else if(this.user.timeType.reportAuditType == 1 || this.user.timeType.reportAuditType == 2){
+                                } else if(this.user.timeType.reportAuditType == 1 || this.user.timeType.reportAuditType == 2 || this.user.timeType.reportAuditType == 9){
                                     //分组负责人先审核, 确定是选择了任务分组
                                     if (this.workForm.domains[i].taskGroups.length == 0) {
                                         this.$message({
                                             message: "["+this.workForm.domains[i].projectName+"]"+this.$t('message.involvedintheproject'),
                                             type: "error"
                                         });
+                                        return;
                                     } else if (!this.workForm.domains[i].groupId) {
                                         // console.log(this.workForm.domains[i]);
                                         this.$message({
                                             message: this.$t('defaultText.pleaseChoose') + "["+this.workForm.domains[i].projectName+"]"+this.$t('message.Taskgroupingfortheproject'),
                                             type: "error"
                                         });
-                                    } else {
-                                        this.$message({
-                                            message: this.$t('defaultText.pleaseset') + "["+this.workForm.domains[i].projectName+"]"+this.$t('message.Projectgroupleader'),
-                                            type: "error"
-                                        });
+                                        return;
                                     }
-                                    return;
                                 }
-                                
                             }
                             if (this.user.companyId == this.yuzhongCompId) {
                                 formData.append('extraField1', this.workForm.domains[i].extraField1);

+ 9 - 11
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -1718,7 +1718,7 @@ export default {
                                         list[i].extraField3Name = list[i].workContentList.find(w => w.id == list[i].extraField3).workContext;
                                     }
                                 }
-                                array.push({
+                                let copyData = {
                                     id: list[i].id,
                                     projectId: list[i].projectId,
                                     projectName: projectName,
@@ -1753,15 +1753,12 @@ export default {
                                     stages: list[i].stages,
                                     stage: list[i].stage == '-' ? null : list[i].stage,
                                     customData: list[i].customData,
-                                    projectAuditorId: list[i].projectAuditorId,
-                                    projectAuditorName: list[i].projectAuditorName,
                                     auditUserList: list[i].auditUserList,
                                     overtimeHours: list[i].overtimeHours,
                                     customText: list[i].customText,
                                     basecostId: list[i].basecostId,
                                     basecostName: basecostName,
                                     canEdit: list[i].state >= 2 ? true : false,
-
                                     auditorFirst: list[i].auditorFirst ? list[i].auditorFirst : { name: '', id: '' },
                                     auditorSec: list[i].auditorSec ? list[i].auditorSec : { name: '', id: '' },
                                     auditorThird: list[i].auditorThird ? list[i].auditorThird : { name: '', id: '' },
@@ -1779,7 +1776,13 @@ export default {
                                     serviceList: list[i].serviceList,
                                     userReportDeptName: list[i].userReportDeptName,
                                     reportTargetDeptId: list[i].deptId
-                                })
+                                }
+                                if (this.user.timeType.reportAuditType != 1 && this.user.timeType.reportAuditType != 2 && this.user.timeType.reportAuditType != 9) {
+                                    //分组负责人审核的情况下,前端不需要显示,无需设置
+                                    copyData.projectAuditorId = list.report[i].projectAuditorId;
+                                    copyData.projectAuditorName = list.report[i].projectAuditorName;
+                                }
+                                array.push(copyData);
                                 if (list[i].state >= 2) {
                                     this.canEdit = true;
                                 } else {
@@ -2626,20 +2629,15 @@ export default {
                     if (this.user.timeType.reportAuditType == 0) {
                         this.$toast.fail("请指定[" + this.form.domains[i].projectName + ']项目的审核人');
                         return;
-                    } else if (this.user.timeType.reportAuditType == 1 || this.user.timeType.reportAuditType == 2) {
+                    } else if (this.user.timeType.reportAuditType == 1 || this.user.timeType.reportAuditType == 2 ||  this.user.timeType.reportAuditType == 9) {
                         if (this.form.domains[i].taskGroups.length == 0) {
                             this.$toast.fail("您在[" + this.form.domains[i].projectName + "]项目上尚无参与的任务分组");
                             return;
                         } else if (!this.form.domains[i].groupId) {
                             this.$toast.fail("请选择[" + this.form.domains[i].projectName + "]项目的任务分组");
                             return;
-                        } else {
-                            this.$toast.fail("请先设置[" + this.form.domains[i].projectName + ']-[' + this.form.domains[i].groupName + ']的分组负责人');
-                            return;
                         }
-
                     }
-
                 }
                 if (this.user.companyId == this.yuzhongCompId) {
                     formData.append('extraField1', this.form.domains[i].extraField1);