Kaynağa Gözat

Merge remote-tracking branch 'origin/master'

yusm 1 yıl önce
ebeveyn
işleme
c09c6794f2
18 değiştirilmiş dosya ile 420 ekleme ve 127 silme
  1. 0 6
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java
  2. 7 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Report.java
  3. 8 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Stages.java
  4. 10 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Task.java
  5. 10 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TaskExecutor.java
  6. 124 42
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  7. 12 9
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  8. 3 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/StagesMapper.xml
  9. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskExecutorMapper.xml
  10. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskMapper.xml
  11. 1 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanServiceImpl.java
  12. 57 18
      fhKeeper/formulahousekeeper/timesheet/src/components/taskComponent.vue
  13. 2 0
      fhKeeper/formulahousekeeper/timesheet/src/permissions.js
  14. 52 7
      fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue
  15. 2 2
      fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue
  16. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  17. 46 5
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue
  18. 81 23
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue

+ 0 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java

@@ -106,12 +106,6 @@ public class TaskController {
         //当前用户
         User user = userMapper.selectById(userId);
         HttpRespMsg msg = new HttpRespMsg();
-        if(task.getServiceId()!=null){
-            SapProjectService one = sapProjectServiceService.getOne(new LambdaQueryWrapper<SapProjectService>().eq(SapProjectService::getCompanyId, user.getCompanyId()).eq(SapProjectService::getServiceCode,task.getServiceId()));
-            if(one!=null){
-                task.setName(one.getServiceName()+"-"+one.getServiceCode());
-            }
-        }
 
         //新建的任务,需要设置创建人,创建时间
         if (task.getId() == null) {

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

@@ -24,7 +24,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2023-08-10
+ * @since 2023-12-05
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -388,6 +388,12 @@ public class Report extends Model<Report> {
     @TableField("extra_field3")
     private Integer extraField3;
 
+    /**
+     * SAP项目服务ID
+     */
+    @TableField("sap_service_id")
+    private Integer sapServiceId;
+
     @TableField(exist = false)
     private List<ProFunWorkContext> workContentList;
 

+ 8 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Stages.java

@@ -17,7 +17,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2021-04-21
+ * @since 2023-12-04
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -59,6 +59,13 @@ public class Stages extends Model<Stages> {
     @TableField("stages_time")
     private float stagesTime;
 
+    /**
+     * 编号
+     */
+    @TableField("stages_code")
+    private String stagesCode;
+
+
     @TableField(exist = false)
     private List<Task> taskList;
 

+ 10 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Task.java

@@ -21,7 +21,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2023-11-23
+ * @since 2023-12-05
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -215,10 +215,16 @@ public class Task extends Model<Task> {
     private String meetingId;
 
     /**
-     * SAP服务编号
+     * 前置任务ids,多个逗号隔开
      */
-    @TableField("service_id")
-    private String serviceId;
+    @TableField("ahead_tid")
+    private String aheadTid;
+
+    /**
+     * SAP项目任务编号
+     */
+    @TableField("sap_task_code")
+    private String sapTaskCode;
 
     @TableField(exist = false)
     private List<TaskExecutor> executorList;

+ 10 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TaskExecutor.java

@@ -1,9 +1,10 @@
 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.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -18,7 +19,7 @@ import java.util.List;
  * </p>
  *
  * @author Seyason
- * @since 2022-03-27
+ * @since 2023-12-05
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -60,6 +61,12 @@ public class TaskExecutor extends Model<TaskExecutor> {
     @TableField("project_id")
     private Integer projectId;
 
+    /**
+     * SAP项目服务ID
+     */
+    @TableField("service_id")
+    private String serviceId;
+
 
     @Override
     protected Serializable pkVal() {

+ 124 - 42
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -11369,8 +11369,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         XmlResponseData xmlResponseData = SyncSapUtils.syncProjectFromSap(startDate, endDate);
         List<ProjectQueryResponse> projectQueryResponses = xmlResponseData.getProjectQueryResponses();
         List<Map<String,Object>> idsMapList=new ArrayList<>();
+        LocalDate localDate=LocalDate.now();
+//        projectQueryResponses=projectQueryResponses.stream().filter(p->p.getProjectID().equals("CPSP2250001")).collect(Collectors.toList());
         if(projectQueryResponses!=null&&projectQueryResponses.size()>0){
-            List<Stages> stagesList=new ArrayList<>();
             for (ProjectQueryResponse item : projectQueryResponses) {
                 Project project=new Project();
                 //处理项目分类
@@ -11434,61 +11435,142 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 //处理项目下任务 ----> 工时管家生成任务分组
                 List<ProjectTask> projectTasks = item.getProjectTasks();
                 if(projectTasks!=null&&projectTasks.size()>0){
-                    projectTasks.forEach(ps->{
-                        boolean match = idsMapList.stream().anyMatch(i -> i.get("taskGroupUUID").equals(ps.getUUID()));
-                        if(!match){
-                            if(StringUtils.isEmpty(ps.getParentTaskUUID())){
+                    //找到任务列表中 作为项目出现的第一级列表
+                    Optional<ProjectTask> targetProject = projectTasks.stream().filter(p -> p.getProjectElementID().equals(project.getProjectCode())).findFirst();
+                    String targetUUID = targetProject.get().getUUID();
+                    //todo:按照层级抽取数据
+                    //项目下第一层 作为任务分组数据
+                    List<ProjectTask> taskGroupList = projectTasks.stream().filter(p -> p.getParentTaskUUID() != null && p.getParentTaskUUID().equals(targetUUID)).collect(Collectors.toList());
+                    //抽调任务分组下级数据 作为阶段数据(是没有下级数据的情况下 作为最末级--->工时管家任务)
+                    List<String> taskGroupUUIDList = taskGroupList.stream().map(ProjectTask::getUUID).collect(Collectors.toList());
+                    List<ProjectTask> stagesList = projectTasks.stream().filter(p -> p.getParentTaskUUID() != null && taskGroupUUIDList.contains(p.getParentTaskUUID())).collect(Collectors.toList());
+                    List<String> stagesUUIDList = stagesList.stream().map(ProjectTask::getUUID).collect(Collectors.toList());
+                    //抽调出最末级
+                    List<ProjectTask> taskList = projectTasks.stream().filter(p ->p.getParentTaskUUID() != null &&stagesUUIDList.contains(p.getParentTaskUUID())&&(p.getSummaryTaskIndicator()==null||(p.getSummaryTaskIndicator()!=null && !p.getSummaryTaskIndicator().equals("true")))).collect(Collectors.toList());
+                    if(taskGroupList!=null && taskGroupList.size()>0){
+                        for (ProjectTask group : taskGroupList) {
+                            //如果作为第二层数据是不存在下级数据的 把当前数据作为第四层数据 手动添加阶段数据 作为该数据的上级数据
+                            if(group.getSummaryTaskIndicator()==null){
                                 TaskGroup taskGroup=new TaskGroup();
                                 taskGroup.setProjectId(project.getId());
-                                taskGroup.setTaskGroupCode(ps.getProjectElementID());
-                                taskGroup.setName(ps.getTaskGroupName()==null?"":ps.getTaskGroupName().getName());
-                                TaskGroup one = taskGroupMapper.selectOne(new QueryWrapper<TaskGroup>().eq("project_id", project.getId()).eq("task_group_code", ps.getProjectElementID()));
+                                taskGroup.setName("项目阶段");
+                                TaskGroup one = taskGroupMapper.selectOne(new QueryWrapper<TaskGroup>().eq("project_id", project.getId()).eq("name","项目阶段"));
+                                if(one!=null){
+                                    taskGroup.setId(one.getId());
+                                }
+                                taskGroupService.saveOrUpdate(taskGroup);
+                                Stages stage = new Stages();
+                                stage.setSequence(1);
+                                stage.setProjectId(project.getId());
+                                stage.setGroupId(taskGroup.getId());
+                                stage.setStagesName("工作开展");
+                                Stages two = stagesMapper.selectOne(new QueryWrapper<Stages>().eq("project_id", project.getId()).eq("stages_name","工作开展").eq("group_id",stage.getGroupId()));
+                                if(two!=null){
+                                    stage.setId(two.getId());
+                                }
+                                stagesService.saveOrUpdate(stage);
+                                Task task=new Task();
+                                task.setProjectId(project.getId());
+                                task.setGroupId(taskGroup.getId());
+                                task.setStagesId(stage.getId());
+                                task.setCreateDate(localDate);
+                                task.setCompanyId(companyId);
+                                task.setSapTaskCode(group.getProjectElementID());
+                                task.setName(group.getTaskGroupName()==null?"空的任务名称":group.getTaskGroupName().getName());
+                                Task three = taskMapper.selectOne(new LambdaQueryWrapper<Task>().eq(Task::getProjectId, task.getProjectId()).eq(Task::getGroupId, task.getGroupId()).eq(Task::getStagesId, task.getStagesId()));
+                                if(three!=null){
+                                    task.setId(three.getId());
+                                }
+                                taskService.saveOrUpdate(task);
+                            }else {
+                                TaskGroup taskGroup=new TaskGroup();
+                                taskGroup.setProjectId(project.getId());
+                                taskGroup.setTaskGroupCode(group.getProjectElementID());
+                                taskGroup.setName(group.getTaskGroupName()==null?"":group.getTaskGroupName().getName());
+                                TaskGroup one = taskGroupMapper.selectOne(new QueryWrapper<TaskGroup>().eq("project_id", project.getId()).eq("task_group_code", group.getProjectElementID()));
                                 if(one!=null){
                                     taskGroup.setId(one.getId());
                                 }
                                 taskGroupService.saveOrUpdate(taskGroup);
                                 Map<String,Object> map=new HashMap<>();
                                 map.put("groupId",taskGroup.getId());
-                                map.put("taskGroupUUID",ps.getUUID());
+                                map.put("UUID",group.getUUID());
                                 map.put("projectId",project.getId());
                                 idsMapList.add(map);
+                            }
+                        }
+                    }
+                    if(stagesList!=null&&stagesList.size()>0){
+                        for (ProjectTask targetStage : stagesList) {
+                            Optional<Map<String, Object>> targetGroup = idsMapList.stream().filter(i -> i.get("UUID").equals(targetStage.getParentTaskUUID())).findFirst();
+                            if(!targetGroup.isPresent()){
+                                continue;
+                            }
+                            //如果作为第三层数据是不存在下级数据的 把当前数据作为第四层数据 手动添加阶段数据 作为该数据的上级数据
+                            if(targetStage.getSummaryTaskIndicator()==null){
+                                Stages stage = new Stages();
+                                stage.setSequence(1);
+                                stage.setProjectId(project.getId());
+                                stage.setGroupId(Integer.valueOf(String.valueOf(targetGroup.get().get("groupId"))));
+                                stage.setStagesName("工作开展");
+                                Stages one = stagesMapper.selectOne(new QueryWrapper<Stages>().eq("project_id", project.getId()).eq("stages_name","工作开展").eq("group_id",stage.getGroupId()));
+                                if(one!=null){
+                                    stage.setId(one.getId());
+                                }
+                                stagesService.saveOrUpdate(stage);
+                                Task task=new Task();
+                                task.setProjectId(project.getId());
+                                task.setGroupId(Integer.valueOf(String.valueOf(targetGroup.get().get("groupId"))));
+                                task.setStagesId(stage.getId());
+                                task.setCreateDate(localDate);
+                                task.setCompanyId(companyId);
+                                task.setSapTaskCode(targetStage.getProjectElementID());
+                                task.setName(targetStage.getTaskGroupName()==null?"空的任务名称":targetStage.getTaskGroupName().getName());
+                                Task two = taskMapper.selectOne(new LambdaQueryWrapper<Task>().eq(Task::getProjectId, task.getProjectId()).eq(Task::getGroupId, task.getGroupId()).eq(Task::getStagesId, task.getStagesId()));
+                                if(two!=null){
+                                    task.setId(two.getId());
+                                }
+                                taskService.saveOrUpdate(task);
                             }else {
-                                Optional<ProjectTask> task = projectTasks.stream().filter(p -> p.getUUID().equals(ps.getParentTaskUUID())).findFirst();
-                                if(task.isPresent()){
-                                    Stages stage = new Stages();
-                                    Optional<Map<String, Object>> exist = idsMapList.stream().filter(i -> i.get("taskGroupUUID").equals(task.get().getUUID())).findFirst();
-                                    if(exist.isPresent()){
-                                        stage.setGroupId(Integer.valueOf(String.valueOf(exist.get().get("groupId"))));
-                                    }else {
-                                        //避免排序问题导致 上级数据未添加 漏掉子数据
-                                        TaskGroup taskGroup=new TaskGroup();
-                                        taskGroup.setProjectId(project.getId());
-                                        taskGroup.setTaskGroupCode(ps.getProjectElementID());
-                                        taskGroup.setName(ps.getTaskGroupName()==null?"":ps.getTaskGroupName().getName());
-                                        TaskGroup one = taskGroupMapper.selectOne(new QueryWrapper<TaskGroup>().eq("project_id", project.getId()).eq("task_group_code", ps.getProjectElementID()));
-                                        if(one!=null){
-                                            taskGroup.setId(one.getId());
-                                        }
-                                        taskGroupService.saveOrUpdate(taskGroup);
-                                        Map<String,Object> map=new HashMap<>();
-                                        map.put("groupId",taskGroup.getId());
-                                        map.put("taskGroupUUID",ps.getUUID());
-                                        map.put("projectId",project.getId());
-                                        idsMapList.add(map);
-                                        stage.setGroupId(taskGroup.getId());
-                                    }
-                                    stage.setSequence(1);
-                                    stage.setProjectId(project.getId());
-                                    stage.setStagesName(ps.getTaskGroupName()==null?"":ps.getTaskGroupName().getName());
-                                    Stages one = stagesMapper.selectOne(new QueryWrapper<Stages>().eq("project_id", project.getId()).eq("stages_name", ps.getProjectElementID()).eq("group_id",stage.getGroupId()));
-                                    if(one!=null){
-                                        stage.setId(one.getId());
-                                    }
-                                    stagesService.saveOrUpdate(stage);
+                                Stages stage = new Stages();
+                                stage.setSequence(1);
+                                stage.setProjectId(project.getId());
+                                stage.setGroupId(Integer.valueOf(String.valueOf(targetGroup.get().get("groupId"))));
+                                stage.setStagesCode(targetStage.getProjectElementID());
+                                stage.setStagesName(targetStage.getTaskGroupName()==null?"":targetStage.getTaskGroupName().getName());
+                                Stages one = stagesMapper.selectOne(new QueryWrapper<Stages>().eq("project_id", project.getId()).eq("stages_name", targetStage.getProjectElementID()).eq("group_id",stage.getGroupId()));
+                                if(one!=null){
+                                    stage.setId(one.getId());
                                 }
+                                stagesService.saveOrUpdate(stage);
+                                Map<String,Object> map=new HashMap<>();
+                                map.put("groupId",targetGroup.get().get("groupId"));
+                                map.put("stageId",stage.getId());
+                                map.put("UUID",targetStage.getUUID());
+                                map.put("projectId",project.getId());
+                                idsMapList.add(map);
                             }
                         }
-                    });
+                    }
+                    for (ProjectTask targetTask : taskList) {
+                        Optional<Map<String, Object>> targetMapOp = idsMapList.stream().filter(i -> String.valueOf(i.get("UUID")).equals(targetTask.getParentTaskUUID())&&i.get("stageId")!=null).findFirst();
+                        if(targetMapOp.isPresent()){
+                            Map<String, Object> targetMap = targetMapOp.get();
+                            Task task=new Task();
+                            task.setProjectId(project.getId());
+                            task.setGroupId(Integer.valueOf(String.valueOf(targetMap.get("groupId"))));
+                            task.setStagesId(Integer.valueOf(String.valueOf(targetMap.get("stageId"))));
+                            task.setCreateDate(localDate);
+                            task.setCompanyId(companyId);
+                            task.setSapTaskCode(targetTask.getProjectElementID());
+                            task.setName(targetTask.getTaskGroupName()==null?"空的任务名称":targetTask.getTaskGroupName().getName());
+                            Task one = taskMapper.selectOne(new LambdaQueryWrapper<Task>().eq(Task::getProjectId, task.getProjectId()).eq(Task::getGroupId, task.getGroupId()).eq(Task::getStagesId, task.getStagesId()));
+                            if(one!=null){
+                                task.setId(one.getId());
+                            }
+                            taskService.saveOrUpdate(task);
+                        }
+                    }
                 }
             }
         }

Dosya farkı çok büyük olduğundan ihmal edildi
+ 12 - 9
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml


+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/StagesMapper.xml

@@ -9,11 +9,13 @@
         <result column="project_id" property="projectId" />
         <result column="sequence" property="sequence" />
         <result column="group_id" property="groupId" />
+        <result column="stages_time" property="stagesTime" />
+        <result column="stages_code" property="stagesCode" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, stages_name, project_id, sequence, group_id
+        id, stages_name, project_id, sequence, group_id, stages_time, stages_code
     </sql>
     <select id="getProjectStages" resultType="java.lang.String">
         select distinct stages_name as name from stages where project_id = #{projectId} order by sequence

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

@@ -11,11 +11,12 @@
         <result column="executor_color" property="executorColor" />
         <result column="plan_hours" property="planHours" />
         <result column="project_id" property="projectId" />
+        <result column="service_id" property="serviceId" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, task_id, executor_id, executor_name, executor_color, plan_hours, project_id
+        id, task_id, executor_id, executor_name, executor_color, plan_hours, project_id, service_id
     </sql>
 
 </mapper>

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

@@ -30,7 +30,7 @@
         <result column="finish_date" property="finishDate" />
         <result column="start_date" property="startDate" />
         <result column="meeting_id" property="meetingId" />
-        <result column="service_id" property="serviceId" />
+        <result column="sap_task_code" property="sapTaskCode" />
     </resultMap>
 
     <resultMap id="timeResultMap" type="com.management.platform.entity.TimeTask" >
@@ -96,7 +96,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, name, task_desc, creater_id, creater_name, creator_color, executor_id, executor_name, executor_color, task_level, task_status, create_date, end_date, project_id, stages_id, company_id, indate, parent_tid, group_id, seq, plan_hours, task_type, parent_tname, finish_date, start_date, meeting_id, service_id
+        id, name, task_desc, creater_id, creater_name, creator_color, executor_id, executor_name, executor_color, task_level, task_status, create_date, end_date, project_id, stages_id, company_id, indate, parent_tid, group_id, seq, plan_hours, task_type, parent_tname, finish_date, start_date, meeting_id, ahead_tid, sap_task_code
     </sql>
     <select id="simpleList" resultMap="BaseResultMap">
         select id, name, creater_id, creater_name, creator_color, executor_id, executor_name, executor_color, task_level, task_status, create_date, end_date, project_id, stages_id, company_id, indate, parent_tid, group_id, seq, plan_hours, task_type, parent_tname, finish_date, start_date

+ 1 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanServiceImpl.java

@@ -168,7 +168,7 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                 }
                 collect.add(-1);
                 List<Integer> finalCollect = collect;
-                queryWrapper.and(wrapper->wrapper.in(Plan::getId, finalCollect).or().eq(Plan::getCreateId,user.getId()));
+                queryWrapper.and(wrapper->wrapper.in(Plan::getId, finalCollect).or().eq(Plan::getCreateId,user.getId())).eq(Plan::getStatus,1);
             }
         }
         if(!StringUtils.isEmpty(steelStampNumber)){

+ 57 - 18
fhKeeper/formulahousekeeper/timesheet/src/components/taskComponent.vue

@@ -42,7 +42,7 @@
                     </el-option>
                 </el-select>
             </el-form-item>
-            <el-form-item v-if="this.user.companyId==3092" :label="$t('taskdefinition')" prop="serviceId">
+            <!-- <el-form-item v-if="this.user.companyId==3092" :label="$t('taskdefinition')" prop="serviceId">
                 <el-select filterable style="width:100%;"  v-model="addForm.serviceId" placeholder="请选择任务内容">
                     <el-option
                     v-for="item in sapServiceList"
@@ -51,8 +51,8 @@
                     :value="item.serviceCode">
                     </el-option>
                 </el-select>
-            </el-form-item>
-            <el-form-item v-else  :label="$t('taskdefinition')" prop="name">
+            </el-form-item> -->
+            <el-form-item  :label="$t('taskdefinition')" prop="name">
                 <el-input v-model="addForm.name" :maxlength="40" :disabled="(this.addForm.id != null && user.id != this.addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)" :placeholder="$t('enterthetaskcontent')" clearable></el-input>
             </el-form-item>
             <!-- {{timelabel}}{{mileageCup}} -->
@@ -68,22 +68,40 @@
             </el-form-item>
             <div style="border: 1px solid #ddd;margin:5px 0;padding:5px 0;">
             <el-form-item :label="$t('zhi-hang-ren') + (index+1)" v-for="(executorItem, index) in addForm.executorListFront" :key="index">
-                <el-select v-if="user.userNameNeedTranslate != 1" v-model="executorItem.executorId" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)" size="small" filterable clearable :placeholder="$t('pleaseselectanexecutor')" style="width:40%;" @change="$forceUpdate()">
-                    <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id">
-                        <span style="float: left">{{ item.name }}</span>
-                        <span style="float: right; color: #8492a6; font-size: 13px;margin-left: 20px" v-if="item.jobNumber">{{ item.jobNumber }}</span>
-                    </el-option>
-                </el-select>
-                <selectCat v-if="user.userNameNeedTranslate == 1" :size="'mini'" :filterable="true" :subject="users" :subjectId="executorItem.executorId" :distinction="'1'" @selectCal="selectCal" :index="index" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)"></selectCat>
-                
-                <span style="margin-left:30px;margin-right:10px;">{{ $t('plantime') }}</span>
-                <el-input-number size="small" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)" v-model="gstimday[index]" style="width:16%;" :min="1" :max="100"  :placeholder="$t('danweitian')" @change="chggstim(0,index)"></el-input-number ><span style="margin-left:5px;">{{ $t('time.day') }}</span>
-                <el-input-number size="small" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)" v-model="gstimhour[index]" style="width:16%;" :min="1" :max="999"  :placeholder="$t('pleaseentertheplannedworking')" @change="chggstim(1,index)"></el-input-number ><span style="margin-left:5px;">{{ $t('time.hour') }}</span>
+                <div class="editingTask">
+                    <div style="margin-right: 30px">
+                        <el-select v-if="user.userNameNeedTranslate != 1" v-model="executorItem.executorId" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)" size="small" filterable clearable :placeholder="$t('pleaseselectanexecutor')" style="width:40%;" @change="$forceUpdate()">
+                            <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id">
+                                <span style="float: left">{{ item.name }}</span>
+                                <span style="float: right; color: #8492a6; font-size: 13px;margin-left: 20px" v-if="item.jobNumber">{{ item.jobNumber }}</span>
+                            </el-option>
+                        </el-select>
+                        <selectCat v-if="user.userNameNeedTranslate == 1" :size="'mini'" :filterable="true" :subject="users" :subjectId="executorItem.executorId" :distinction="'1'" @selectCal="selectCal" :index="index" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)"></selectCat>
+                    </div>
+                    <!-- 项目服务 -->
+                    <div v-if="user.companyId==3092">
+                        <span style="margin-left:30px;margin-right:10px;">{{'项目服务'}}</span>
+                        <el-select multiple clearable collapse-tags  filterable  v-model="executorItem.serviceId" size="small" placeholder="请选择项目服务" style="width: 300px" @change="serviceIdChange()">
+                            <el-option
+                            v-for="item in sapServiceList"
+                            :key="item.id"
+                            :label="item.serviceName+'-'+item.serviceCode"
+                            :value="item.id">
+                            </el-option>
+                        </el-select>
+                    </div>
+                    <!-- 计划工时 -->
+                    <div>
+                        <span style="margin-right:10px;">{{ $t('plantime') }}</span>
+                        <el-input-number size="small" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)" v-model="gstimday[index]" style="width:120px;" :min="1" :max="100"  :placeholder="$t('danweitian')" @change="chggstim(0,index)"></el-input-number ><span style="margin-left:5px;">{{ $t('time.day') }}</span>
+                        <el-input-number size="small" :disabled="(addForm.id != null && user.id != addForm.createrId && currentProject.inchargerId != user.id) && !permissions.projectManagement && !(groupResponsibleId == user.id)" v-model="gstimhour[index]" style="width:120px;" :min="1" :max="999"  :placeholder="$t('pleaseentertheplannedworking')" @change="chggstim(1,index)"></el-input-number ><span style="margin-left:5px;">{{ $t('time.hour') }}</span>
 
-                <!-- <el-input-number v-model="numnnumnum" @change="handleChange" :min="1" :max="10" label="描述文字"></el-input-number> -->
+                        <!-- <el-input-number v-model="numnnumnum" @change="handleChange" :min="1" :max="10" label="描述文字"></el-input-number> -->
 
-                <!-- 移除执行人 -->
-                <i class="el-icon-delete" v-if="index>0 && (addForm.id == null|| user.id == addForm.createrId || currentProject.inchargerId == user.id|| permissions.projectManagement || groupResponsibleId == user.id)" style="margin-left:5px" @click="removeExecutorLine(index)"></i>
+                        <!-- 移除执行人 -->
+                        <i class="el-icon-delete" v-if="index>0 && (addForm.id == null|| user.id == addForm.createrId || currentProject.inchargerId == user.id|| permissions.projectManagement || groupResponsibleId == user.id)" style="margin-left:5px" @click="removeExecutorLine(index)"></i>
+                    </div>
+                </div>
             </el-form-item>
             <el-link type="primary" v-if="(((addForm.executorListFront == null || addForm.executorListFront.length<100) && 
             (addForm.id == null|| user.id == addForm.createrId || currentProject.inchargerId == user.id || permissions.projectManagement)) || 
@@ -858,6 +876,13 @@ export default {
     this.timess()
   },
   methods: {
+    // 刷新数据
+    refreshData() {
+        this.$forceUpdate()
+    },
+    serviceIdChange() {
+        this.refreshData()
+    },
     // 触发外层的会议
     meetingCli() {
         this.$parent.$parent.parentMeetingCli(this.integrationTask.id)
@@ -1053,6 +1078,12 @@ export default {
                 this.recentProgressInfo = res.data.progress;
                 
                 if(res.data.executorList.length > 0) {
+                    for(var i in res.data.executorList){
+                        if(res.data.executorList[i].serviceId) {
+                            res.data.executorList[i].serviceId = JSON.parse(res.data.executorList[i].serviceId)
+                        }
+                    }
+                    console.log("==================",res.data.executorList)
                     this.addForm.executorListFront = res.data.executorList;
                 } else {
                     this.addForm.executorListFront = [{executorId: null, planHours: 8}];
@@ -1382,6 +1413,9 @@ export default {
                 delete this.addForm.progress;
                 //去掉没有执行人的.(因为要有计划工时,执行人可以暂不设置)
                 // this.addForm.executorListFront = this.addForm.executorListFront.filter(exe=>exe.executorId);
+                if(this.addForm.executorListFront.serviceId){
+                    this.addForm.executorListFront.serviceId= JSON.stringify(this.addForm.executorListFront.serviceId);
+                }
                 this.addForm.executorListStr = JSON.stringify(this.addForm.executorListFront);
                 this.addLoading = true;
                 this.http.post('/task/save',this.addForm,
@@ -1630,7 +1664,8 @@ export default {
         if(this.isRelationItem){return}
         this.addFormVisible = true;
         this.addForm = {parentTname: this.addForm.name,parentTid: this.addForm.id,projectId: this.addForm.projectId, groupId: this.addForm.groupId,  taskLevel:0, planHours: 8, taskType: 0};
-        this.addForm.executorListFront = [{executorId:null, planHours:8}];
+        // this.addForm.executorListFront = [{executorId:null, planHours:8}];
+        this.addForm.executorListFront = [{executorId:null, planHours:8, serviceId: []}];
         this.addLoading = false;
 
         //创建子任务,非编辑状态
@@ -2008,6 +2043,10 @@ export default {
 </script>
 
 <style lang="scss" scoped>
+.editingTask {
+    display: flex;
+    flex-wrap: wrap;
+}
 .carts .commentSpan {
     float: none;
     display: block;

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

@@ -93,6 +93,7 @@ const StringUtil = {
         reportResponsibleManhourCost: false, // 负责项目子项目工时成本 //
         reportFTEAll: false, // 全部部门FTE报表 //
         reportFTEPart: false, // 负责部门FTE报表 // 
+        reportEfficent: false, // 有效工时率 // 
 
         // 请假模块
         leaveFil : false, // 请假填报 // 
@@ -226,6 +227,7 @@ const StringUtil = {
         arr[i] == '负责项目分组阶段工时' ? obj.reportStageWorkingTime = true : ''
         arr[i] == '全部部门FTE报表' ? obj.reportFTEAll = true : ''
         arr[i] == '负责部门FTE报表' ? obj.reportFTEPart = true : ''
+        arr[i] == '有效工时率表' ? obj.reportEfficent = true : ''
 
         arr[i] == '新增合同' ? obj.contractNew = true : ''
         arr[i] == '查看全部合同' ? obj.contractView = true : ''

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

@@ -40,6 +40,7 @@
                   <el-menu-item index="1-18" v-if="permissions.reportAllManhourCost || permissions.reportResponsibleManhourCost" @click="ssl(17)"><p>子项目工时成本表</p></el-menu-item>
                   <el-menu-item index="1-19" v-if="user.timeType.restartTaskNeedReason == 1" @click="ssl(18)"><p>任务重启表</p></el-menu-item>
                   <el-menu-item index="1-20" v-if="permissions.reportFTEAll || permissions.reportFTEPart" @click="ssl(19)"><p>FTE报表</p></el-menu-item>
+                  <el-menu-item index="1-21" v-if="permissions.reportEfficent"  @click="ssl(20)"><p>有效工时率表</p></el-menu-item>
                   <!-- <el-menu-item index="1-12"><p @click="ssl(11)">人员工时统计表</p></el-menu-item> -->
                 </el-submenu>
               </el-menu>
@@ -65,7 +66,7 @@
             <el-option v-for="(item) in customerList" :key="item.id" :label="item.customerName" :value="item.id">
             </el-option>
           </el-select>
-          <el-select v-model="cusProJuctId" :placeholder="$t('defaultText.pleaseSelectSnItem')" clearable filterable size="small" @change="selcts()" popper-class="projectSelectPopperClass">
+          <el-select v-if="ins != 20" v-model="cusProJuctId" :placeholder="$t('defaultText.pleaseSelectSnItem')" clearable filterable size="small" @change="selcts()" popper-class="projectSelectPopperClass">
             <el-option v-for="(item) in cusProListOvertime" :key="item.id" :label="item.projectName + (item.projectCode ? item.projectCode : '')" :value="item.id">
               <span style="float: left;color: #8492a6;">{{ item.projectCode }}</span>
               <span style="float: right;font-size: 13px;">{{ item.projectName }}</span>
@@ -73,7 +74,7 @@
           </el-select>
         </template>
         <!-- 时间段筛选 -->
-          <template v-if="ins == 6 || ins == 8 || ins == 9 || ins == 10 || ins == 11 || ins == 12 || ins == 5 || ins == 16 || ins == 17 || ins == 18">
+          <template v-if="ins == 6 || ins == 8 || ins == 9 || ins == 10 || ins == 11 || ins == 12 || ins == 5 || ins == 16 || ins == 17 || ins == 18 || ins == 20">
             <span>
               <span class="demonstration" style="color:#999;padding:0 10px">
                 {{ ins == 15 ? $t('xiang-mu-chuang-jian-shi-jian-duan') : $t('message.period') }}
@@ -88,7 +89,7 @@
           <el-option label="查看部门审核人" :value="0"></el-option>
         </el-select> -->
         <!-- 项目筛选 -->
-        <el-select v-if="ins != 4 && ins != 8 && ins != 9 && ins != 19 && ins != 10 && ins != 11 && ins != 14 && ins != 15 && ins != 17" v-model="proJuctId" :placeholder="$t('defaultText.pleaseSelectSnItem')" clearable filterable size="small" @change="selcts()" style="margin-left:10px">
+        <el-select v-if="ins != 4 && ins != 8 && ins != 9 && ins != 19 && ins != 10 && ins != 11 && ins != 14 && ins != 15 && ins != 17 && ins != 20" v-model="proJuctId" :placeholder="$t('defaultText.pleaseSelectSnItem')" clearable filterable size="small" @change="selcts()" style="margin-left:10px">
           <el-option v-for="(item) in proListOvertime" :key="item.id" :label="item.projectName + (item.projectCode ? item.projectCode : '')" :value="item.id">
             <span style="float: left;color: #8492a6;">{{ item.projectCode }}</span>
             <span style="float: right;font-size: 13px;margin-left: 20px">{{ item.projectName }}</span>
@@ -896,8 +897,20 @@
                 <el-table-column align="center" prop="FTE" label="FTE(工时/当月工时基数)" min-width="250"></el-table-column>
             </el-table>
 
+            <!-- 有效工时率表 -->
+            <el-table  v-if="ins == 20" key="20" border :data="efficentList" highlight-current-row v-loading="listLoading" :height="+tableHeight - 1" style="width: 100%;" >
+                <el-table-column align="center" prop="department_name" label="所属部门" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="working_time" label="实报工时(小时)" min-width="150"></el-table-column>
+                <el-table-column align="center" label="应工时(小时)" >
+                    <el-table-column align="center" prop="count" label="在职人数" min-width="150"></el-table-column>
+                    <el-table-column align="center" prop="date_count" label="应报工时天数" min-width="150"></el-table-column>
+                    <el-table-column align="center" prop="day_time" label="日标准工时" min-width="150"></el-table-column>
+                    <el-table-column align="center" prop="total_time" label="应报工时" min-width="150"></el-table-column>
+                </el-table-column>
+                <el-table-column align="center" prop="rate" label="有效工时率" min-width="150"></el-table-column>
+            </el-table>
         <!--工具条-->
-        <el-col :span="24" class="toolbar" v-if="ins != 6">
+        <el-col :span="24" class="toolbar" v-if="ins != 6 && ins != 20">
           <el-pagination
                 v-if="ins == 12"
                 @size-change="groupSizeChange"
@@ -1129,6 +1142,7 @@ export default {
   props: {},
   data() {
     return {
+      efficentList:[],
       groupNames: [],
       taskgroupList: [],
       customNameChoose: '',
@@ -1182,13 +1196,13 @@ export default {
       this.$t('pojectbalancesheetincomestatement'),this.$t('customerprojectprofitstatement'),this.$t('projectphasetimesheet'),
       this.$t('statisticsofovertimework'),this.$t('timecostearlywarningtable'),this.$t('personneltimeallocationtable'),
       this.$t('statisticsofstafffillingintimerate'),this.$t('dailyreporttobereviewedstatistics'),this.$t('statisticsofpersonnelhours'),this.$t('taskgrouptimesheet'),this.$t('projectcostbaselinetable'),
-      this.$t('ren-yuan-yue-du-gong-shi-biao'), this.$t('bumenchanyuqingkuang'), this.$t('ge-fen-zu-yu-jie-duan-gong-shi-biao'), '子项目工时成本表', '任务重启表', 'FTE报表'],
+      this.$t('ren-yuan-yue-du-gong-shi-biao'), this.$t('bumenchanyuqingkuang'), this.$t('ge-fen-zu-yu-jie-duan-gong-shi-biao'), '子项目工时成本表', '任务重启表', 'FTE报表', '有效工时率表'],
 
       shuzArr: [this.$t('projectreport'),this.$t('projectTaskReport'),this.$t('projectcoststatement'),
       this.$t('projectbalancesheet'),this.$t('customerprojectincomestatement'),this.$t('projectphasetimesheet'),
       this.$t('statisticsofovertimework'),this.$t('timecostearlywarningtable'),this.$t('personneltimeallocationtable'),
       this.$t('employeereporttimelinessrate'),this.$t('dailyreporttobereviewedstatistics'),this.$t('statisticsofpersonnelhours'),this.$t('taskgrouptimesheet'),this.$t('projectcostbaselinetable'),
-      this.$t('ren-yuan-yue-du-gong-shi-biao'), this.$t('bumenchanyuqingkuang'), this.$t('ge-fen-zu-yu-jie-duan-gong-shi-biao'), '子项目工时成本表', '任务重启表', 'FTE报表'],
+      this.$t('ren-yuan-yue-du-gong-shi-biao'), this.$t('bumenchanyuqingkuang'), this.$t('ge-fen-zu-yu-jie-duan-gong-shi-biao'), '子项目工时成本表', '任务重启表', 'FTE报表','有效工时率表'],
 
       ins: 10000,
       user: JSON.parse(sessionStorage.user),
@@ -1641,8 +1655,10 @@ export default {
                 } else if(this.ins == 19) {
                   this.getETF()
                   this.getArea()
+                } else if (this.ins == 20) {
+                  this.getEffectiveLaborHourRate();
                 }
-                if(this.ins != 16 && this.ins != 17 && this.ins != 18 && this.ins != 19) {
+                if(this.ins != 16 && this.ins != 17 && this.ins != 18 && this.ins != 19 && this.ins != 20) {
                   this.getUserList()
                 }
             },
@@ -1874,6 +1890,32 @@ export default {
       this.page = 1
       this.getAuditRateList()
     },
+    //获取有效工时率表
+    getEffectiveLaborHourRate() {
+      this.listLoading = true;
+      let parameter = {
+        startDate: this.rangeDatas[0],
+        endDate: this.rangeDatas[1],
+      }
+      this.http.post('/project/getEffectiveLaborHourRate', parameter,
+      res => {
+          if (res.code == "ok") {
+              this.efficentList = res.data;
+              this.listLoading = false; 
+          } else {
+              this.$message({
+              message: res.msg,
+              type: "error"
+              });
+          }
+      },
+      error => {
+          this.$message({
+              message: error,
+              type: "error"
+          });
+      });
+    },
     // 获取EFT报表的数据
     getETF() {
       this.getCustomName();
@@ -2825,6 +2867,9 @@ export default {
       if(this.ins == 18) {
         this.taskRestart()
       }
+      if (this.ins == 20) {
+        this.getEffectiveLaborHourRate();
+      }
     },
     // 任务重启表
     taskRestart() {

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue

@@ -249,8 +249,8 @@
                 <el-option :label="$t('wai-bao')" :value="2"></el-option> -->
                 </el-select>
               </el-form-item>
-              <el-form-item :label="'发放状态'">
-                <el-select v-model="sendState" size="small" style="width: 150px" v-if="permissions.costExpenseRelease"
+              <el-form-item :label="'发放状态'" v-if="permissions.costExpenseRelease">
+                <el-select v-model="sendState" size="small" style="width: 150px"
                   clearable>
                   <el-option :label="'未发放'" :value="0"></el-option>
                   <el-option :label="'已发放'" :value="1"></el-option>

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

@@ -1307,7 +1307,7 @@
                         <el-button icon="el-icon-delete" size="mini" style="margin-left:10px;" @click.stop.native="deleteMembItem(scope.$index)"></el-button>
                     </template>
                     <template slot="header" >
-                        <el-link @click="addMembItem">{{ $t('addTian') }}</el-link>
+                        <el-link @click="addMembItem" type="primary">{{ $t('addTian') }}</el-link>
                     </template>
                 </el-table-column>
             </el-table>

+ 46 - 5
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -4607,16 +4607,16 @@
 
             // 获取部门列表
             getDepartment() {
+                //如果没有权限,就不需要获取
+                if (!(this.permissions.reportsCompany || this.user.manageDeptId != 0 || this.permissions.reportsDept)) {
+                    return;
+                }
                 let day = (this.choseDay+1) > 9 ? "-" + (this.choseDay + 1) : "-0" + (this.choseDay + 1);
                 var param = {date:this.date + day};
                 this.http.post("/report/getMembList", param,
                 res => {
                     if (res.code == "ok") {
                         if(res.data.length == 0){
-                            // this.$message({
-                            //     message: '请联系管理员设置负责部门',
-                            //     type: 'error'
-                            // })
                             return
                         }
                         this.departmentList = JSON.parse(JSON.stringify(res.data))
@@ -6545,7 +6545,17 @@
                             }
                         }
                     }
-                    
+
+                    // 对于先分组负责人审核再项目经理审核的模式,分组要必选
+                    let { next, error } = this.handleGroupAuditorData(this.zhoData)
+                    if(!next) {
+                        this.$message({
+                            message: `【${error.join('、')}】请填写任务分组`,
+                            type: 'error'
+                        })
+                        return
+                    }
+
                     // 自定义维度
                     this.submitingReport = true;
                     this.http.uploadFile( this.port.report.editPort, formData,
@@ -6582,6 +6592,37 @@
                             });
                         });
             },
+            handleGroupAuditorData(data) {
+                const { reportAuditType } = this.user.timeType
+                if(reportAuditType != 1 && reportAuditType != 2) {
+                    return {next: true}
+                }
+
+                let arrList = [];
+                Object.entries(data).forEach(([key, obj]) => {
+                    Object.entries(obj).forEach(([projectName, projectData]) => {
+                        if (projectData.workingTime && !projectData.groupId) {
+                            arrList.push({
+                                projectName,
+                                date: obj.zhoDataTime,
+                                dateText: obj.zhoDataTimeTxt
+                            });
+                        }
+                    });
+                });
+                
+                if(arrList.length > 0) {
+                    return {
+                        next: false,
+                        error: arrList.map(item => `【${item.date} ${item.dateText} 中的 (${item.projectName})项目】`),
+                    }
+                } else {
+                    return {
+                        next: true,
+                        error: [],
+                    }
+                }
+            },
             ChangeHourMinutestr (str) {
                 if (str !== "0" && str !== "" && str !== null) {
                     return ((Math.floor(str / 60)).toString().length < 2 ? "0" + (Math.floor(str / 60)).toString() : 

+ 81 - 23
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue

@@ -190,7 +190,8 @@
                         <!-- 常规选择时间的方式 -->
                         <!-- 全天上下午模式 -->
                         <div v-if="reportTimeType.multiWorktime==0">
-                        <van-field v-if="reportTimeType.type < 2" readonly clickable  :value="reportTimeType.type==0?item.label:(parseFloat(item.workingTime).toFixed(1)+'h')" label="工作时长" placeholder="请选择工作时长(小时)" @click="clickTimePicker(index)"
+                        <van-field v-if="reportTimeType.type < 2" readonly clickable  :value="reportTimeType.type==0?item.label:(parseFloat(item.workingTime).toFixed(1)+'h')" label="工作时长" placeholder="请选择工作时长(小时)" 
+                        @click="clickTimePicker(index, item)"
                         :rules="[{ required: true, message: '请选择工作时长' }]"/>
                         <van-popup v-model="showPickerTime" position="bottom">
                             <van-picker show-toolbar :columns="timeType"  value-key="label" @confirm="choseTimePick" @cancel="showPickerTime = false" />
@@ -247,7 +248,7 @@
                             </template>
                         </van-cell>
                         <van-field class="form_input"
-                        v-model="item.content" name="content" type="textarea" :label="user.companyId==781?'具体内容与结果':'工作事项'" placeholder="请输入" 
+                        v-model="item.content" name="content" type="textarea" :label="user.companyId==781?'具体内容与结果':'工作事项'" placeholder="请输入" :disabled="item.state<=1"
                         rows="3" autosize :rules="user.timeType.workContentState == 1 ? [{ required: true, message: user.companyId==781?'具体内容与结果':'工作事项' }] : null" />
                         </div>
                         
@@ -758,14 +759,17 @@
                 let date = new Date(shuldDate.getFullYear(),shuldDate.getMonth(),shuldDate.getDate()-shuldDate.getDay()+1)
                 console.log(this.formatDate(date), '<=== date', this.formatDate(shuldDate), this.formatDate(nowWeekday))
                 this.dateRange = []
-
+                let newWeeklyDataList = [];
+                let serverPList = [];
                 if(enableNewWeeklyfill) { // 针对物奇
                     let { data } = await this.$axios.post('/report/getWeeklyFillReportData', {
                         targetDate: this.formatDate(date)
                     })
+                    serverPList = data.projectList;
                     let { dateList } = data
                     this.dateRange = dateList.map(item => new Date(item.date))
                     this.dateText = [dateList[0].date, dateList[dateList.length - 1].date]
+                    newWeeklyDataList = dateList;
                 } else {
                     for(let i=0;i<this.weekIndex;i++){
                         this.dateRange.push(new Date(date.getFullYear(),date.getMonth(),date.getDate()+i))
@@ -778,23 +782,71 @@
                 let startDateD = startDate.getDate()
 
                 // let endDate = this.dateRange[this.weekIndex - 1]
-                let endDate = this.dateRange.at(-1)
+                let endDate = this.dateRange[this.dateRange.length-1];
                 let endDateM = endDate.getMonth() + 1
                 let endDateD = endDate.getDate()
 
                 let startDateStr = startDate.getFullYear() + '-' + (startDateM < 10 ? '0' + startDateM : startDateM) + '-' + (startDateD < 10 ? '0' + startDateD : startDateD)
                 let endDateStr = endDate.getFullYear() + '-' + (endDateM < 10 ? '0' + endDateM : endDateM) + '-' + (endDateD < 10 ? '0' + endDateD : endDateD)
 
+                this.form = []
                 if(enableNewWeeklyfill != 1) {
                     this.dateText = [startDateStr,endDateStr]
-                }
-
-                this.form = []
-                // for(let i=0;i<this.weekIndex;i++){
-                for(let i=0;i<this.dateRange.length;i++){
-                    let formItem = {
-                            createDate: this.format(this.dateRange[i],"yyyy-MM-dd"),
-                            domains: [{
+                    for(let i=0;i<this.dateRange.length;i++){
+                        let formItem = {
+                                createDate: this.format(this.dateRange[i],"yyyy-MM-dd"),
+                                domains: [{
+                                    id: null,
+                                    projectId: "",
+                                    projectName: "",
+                                    workingTime: this.user.timeType.allday,
+                                    content: "",
+                                    progress: 100,
+                                    state: 2,
+                                    multiWorktime:0,
+                                    worktimeList:[{}],
+                                    degreeId: '',
+
+                                    auditorFirst: {name:'',id:''},
+                                    auditorSec: {name:'',id:''},
+                                    auditorThird: {name:'',id:''},
+                                    ccUserid: {name:'',id:''}
+                                }],
+                            }
+                        this.form.push(formItem)
+                    }
+                } else {
+                    //启用了新版按周填报,加载接口返回的日报数据
+                    for(let i=0;i<newWeeklyDataList.length;i++){
+                        let oneDayItem = newWeeklyDataList[i];
+                        console.log('111',oneDayItem.date);
+                        let formItem = {
+                            createDate: oneDayItem.date,
+                            // domains: [{
+                            //     id: null,
+                            //     projectId: "",
+                            //     projectName: "",
+                            //     workingTime: this.user.timeType.allday,
+                            //     content: "",
+                            //     progress: 100,
+                            //     state: 2,
+                            //     multiWorktime:0,
+                            //     worktimeList:[{}],
+                            //     degreeId: '',
+
+                            //     auditorFirst: {name:'',id:''},
+                            //     auditorSec: {name:'',id:''},
+                            //     auditorThird: {name:'',id:''},
+                            //     ccUserid: {name:'',id:''}
+                            // }],
+                        }
+                        //日报数据
+                        let reportList = oneDayItem.reportList;
+                        reportList.forEach(r=>r.projectName = serverPList.filter(s=>s.id==r.projectId)[0].projectName);
+                        if (reportList.length > 0) {
+                            formItem.domains = reportList;
+                        } else {
+                            formItem.domains = [{
                                 id: null,
                                 projectId: "",
                                 projectName: "",
@@ -805,15 +857,19 @@
                                 multiWorktime:0,
                                 worktimeList:[{}],
                                 degreeId: '',
-
                                 auditorFirst: {name:'',id:''},
                                 auditorSec: {name:'',id:''},
                                 auditorThird: {name:'',id:''},
                                 ccUserid: {name:'',id:''}
-                            }],
+                            }]
                         }
-                    this.form.push(formItem)
+                        this.form.push(formItem)
+                    }
                 }
+
+                
+
+                
                 this.currentForm = this.form[0]
                 if(this.reportBasecostList.length != 0 && this.user.company.packageProject == 1){
                     this.currentForm.domains[0].basecostId = this.reportBasecostList[0].id;
@@ -1176,10 +1232,8 @@
                 }
       
             },
-            clickTimePicker(i) {
-                // if (!this.canEdit) {
-                //     return;
-                // }
+            clickTimePicker(i, item) {
+                if (item.state <=1) return
                 this.clickTimeIndex = i;
                 
                 if (this.reportTimeType.type == 0) {
@@ -1423,7 +1477,8 @@
 
             //点击选择审核人
             clickPickAuditor(i, item) {
-                // if (!this.canEdit) return;
+                //不可待审核和已通过不可编辑
+                if (item.state<2) return;
                 if (item.auditUserList.length<=1) return;
                 this.clickIndex = i;
                 item.showPickerAuditor = true;
@@ -1441,7 +1496,8 @@
 
             //点击选择子项目
             clickPickSubProject(i, item) {
-                // if (!this.canEdit) return;
+                //不可待审核和已通过不可编辑
+                if (item.state<2) return;
                 this.clickIndex = i;
                 item.showPickerSubProject = true;
                 this.$forceUpdate();
@@ -1452,7 +1508,8 @@
                 this.$forceUpdate();
             },
             clickPickStage(i, item) {
-                // if (!this.canEdit) return;
+                //不可待审核和已通过不可编辑
+                if (item.state<2) return;
                 this.clickIndex = i;
                 item.showPickerStage = true;
                 this.$forceUpdate();
@@ -1460,7 +1517,8 @@
 
             // 选择项目
             clickPicker(i, item) {
-                // if (!this.canEdit) return;
+                //不可待审核和已通过不可编辑
+                if (item.state<2) return;
                 // this.clickIndex = i;
                 // this.showPickerProject = true;
                 // console.log(i, item, this.currentForm)