Kaynağa Gözat

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

 Conflicts:
	fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
cs 2 yıl önce
ebeveyn
işleme
5f5c30d699
16 değiştirilmiş dosya ile 855 ekleme ve 345 silme
  1. 5 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  2. 40 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  3. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java
  4. 14 7
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java
  5. 50 30
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  6. 3 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java
  7. 93 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/logback.xml
  8. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml
  9. 168 11
      fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json
  10. 168 11
      fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json
  11. 5 1
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue
  12. 12 2
      fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue
  13. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/task/list.vue
  14. 264 267
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue
  15. 10 3
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue
  16. 19 9
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue

+ 5 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -1001,5 +1001,10 @@ public class ProjectController {
     public HttpRespMsg fixParticipators(Integer companyId, HttpServletRequest request){
         return projectService.fixParticipators(companyId,request);
     }
+
+    @RequestMapping("/removeDuplicateParticipators")
+    public HttpRespMsg removeDuplicateParticipators(Integer companyId, HttpServletRequest request){
+        return projectService.removeDuplicateParticipators(companyId,request);
+    }
 }
 

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

@@ -783,6 +783,7 @@ public class ReportController {
                 LocalDate cDate = report.getCreateDate();
                 //查找同一个人同一天的日报合计工作时长
                 double dailyWorktime = reportList.stream().filter(r->r.getCreatorId().equals(creatorId) && r.getCreateDate().isEqual(cDate)).mapToDouble(Report::getWorkingTime).sum();
+
                 if (dailyWorktime > comTimeType.getAllday()) {
                     HttpRespMsg httpRespMsg = new HttpRespMsg();
                     httpRespMsg.setError("每日工作时长不得超过"+comTimeType.getAllday()+"小时");
@@ -790,6 +791,45 @@ public class ReportController {
                 }
             }
         }
+        //校验填报工时
+        List<Report> checkedUserDayList = new ArrayList<>();
+        for (Report report : reportList) {
+            String creatorId = report.getCreatorId();
+            LocalDate cDate = report.getCreateDate();
+            if (checkedUserDayList.stream().anyMatch(item->item.getCreatorId().equals(creatorId) && item.getCreateDate().isEqual(cDate))) {
+                //避免重复校验
+                continue;
+            } else {
+                //加入
+                checkedUserDayList.add(report);
+            }
+            //查找同一个人同一天的日报合计工作时长
+            double dailyWorktime = reportList.stream().filter(r->r.getCreatorId().equals(creatorId) && r.getCreateDate().isEqual(cDate)).mapToDouble(Report::getWorkingTime).sum();
+            //数据库中已经填报过的工时
+            if (dailyWorktime > comTimeType.getMaxReportTime()) {
+                HttpRespMsg httpRespMsg = new HttpRespMsg();
+                httpRespMsg.setError("每日工作时长不得超过"+comTimeType.getMaxReportTime()+"小时");
+                return httpRespMsg;
+            } else {
+                //查找数据库中可能已有老的记录
+                List<Report> oldList = reportMapper.selectList(new QueryWrapper<Report>().select("id, state, working_time").eq("create_date", cDate).eq("creator_id", creatorId));
+                //老的记录需要合并计算不在本次reportList中,并且状态是0(待审核)或者1(已通过)的
+                //按周填报都可能会有已存在日报的情况,前端没有传过来
+                double existingWorktime = oldList.stream().filter(old->!reportList.stream().anyMatch(newItem->old.getId().equals(newItem.getId()))
+                                && (old.getState() == 0 || old.getState() == 1)).mapToDouble(Report::getWorkingTime).sum();
+                if (existingWorktime > 0) {
+                    dailyWorktime += existingWorktime;
+                    if (dailyWorktime > comTimeType.getMaxReportTime()) {
+                        HttpRespMsg httpRespMsg = new HttpRespMsg();
+                        httpRespMsg.setError("每日工作时长不得超过"+comTimeType.getMaxReportTime()+"小时");
+                        return httpRespMsg;
+                    }
+                }
+            }
+
+        }
+
+
 
         //只有项目管理专业版才要检查成本预算
         if (company.getPackageProject() == 1) {

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

@@ -121,7 +121,7 @@ public class TaskController {
             List<GroupParticipator> groupParticipatorList = groupParticipatorMapper.selectList(new QueryWrapper<GroupParticipator>().eq("group_id", task.getGroupId()));
             for (TaskExecutor executor : executorList) {
                 if(executor.getExecutorId()!=null){
-                    boolean b = groupParticipatorList.stream().anyMatch(gp -> gp.getUserId().equals(executor.getExecutorId()));
+                    boolean b = groupParticipatorList.stream().anyMatch(gp -> gp.getUserId() != null && gp.getUserId().equals(executor.getExecutorId()));
                     if(!b){
                         GroupParticipator g=new GroupParticipator();
                         g.setGroupId(task.getGroupId());

+ 14 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -1,23 +1,23 @@
 package com.management.platform.entity;
 
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
+import java.math.BigDecimal;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import java.util.List;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.List;
-
 /**
  * <p>
  * 
  * </p>
  *
  * @author Seyason
- * @since 2022-08-24
+ * @since 2022-09-06
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -359,6 +359,13 @@ public class TimeType extends Model<TimeType> {
     @TableField(exist = false)
     private List<User> userList;
 
+    /**
+     * 日报填报时长上限,默认12小时
+     */
+    @TableField("max_report_time")
+    private Float maxReportTime;
+
+
     @Override
     protected Serializable pkVal() {
         return this.companyId;

+ 50 - 30
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -39,7 +39,6 @@ import java.sql.Timestamp;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
 import java.text.SimpleDateFormat;
-import java.time.Duration;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -47,7 +46,6 @@ import java.time.chrono.ChronoLocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 
 /**
@@ -2774,16 +2772,12 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             inputStream.close();
             outputStream.close();
             if(fileName.endsWith(".xlsx")){
-                if(!fileName.endsWith(".xlsx")){
-                    msg.setError("文件格式错误,请使用’.xlsx’格式");
-                    return msg;
-                }
                 //然后解析表格
                 XSSFWorkbook workbook = new XSSFWorkbook(file);
                 //我们只需要第一个sheet
                 XSSFSheet sheet = workbook.getSheetAt(0);
                 //获取全部人员
-                List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", user.getCompanyId()));
+                List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", user.getCompanyId()).eq("is_active", 1));
                 //获取全部供货商分类列表
                 List<ProviderCategory> providerCategoryList = providerCategoryMapper.selectList(new QueryWrapper<ProviderCategory>().eq("company_id", user.getCompanyId()));
                 Company company = companyMapper.selectById(user.getCompanyId());
@@ -2842,7 +2836,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         throw new Exception("项目名称不能为空");
                     }
                     Project project = new Project();
-                    boolean flag=false;
+                    boolean exists=false;
                     if (codeCell != null) {
                         String code = codeCell.getStringCellValue().trim().replaceAll("\\u00a0", "");
                         if (code.equals("项目编号") && rowIndex == 0) {
@@ -2870,7 +2864,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 //                            throw new Exception("项目编号存在重复: " + code);
                                 existCodeList.add(code);
                                 //跳过编号重复的数据
-                                flag=true;
+                                exists=true;
                             }
                         }
                         project.setProjectCode(code);
@@ -2915,7 +2909,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     if (isPublicCell != null && !StringUtils.isEmpty(isPublicCell.getStringCellValue())) {
                         project.setIsPublic("是".equals(isPublicCell.getStringCellValue())?1:0);
                     }
-                    if(flag){
+                    if(exists){
                         Project updateProject = projectMapper.selectList(new QueryWrapper<Project>().eq("project_code", project.getProjectCode()).eq("company_id", user.getCompanyId())).get(0);
                         project.setId(updateProject.getId());
                         projectMapper.updateById(project);
@@ -2948,7 +2942,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                     //导入项目参与人,遵守只增不减的原则, 避免误删
                     List<Participation> oldPartList = new ArrayList<>();
-                    if (!flag) {
+                    if (exists) {
                         //更新的项目,检查已经存在的项目参与人
                         oldPartList = participationMapper.selectList(new QueryWrapper<Participation>().eq("project_id", project.getId()));
                     }
@@ -3008,16 +3002,12 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 operationRecord.setContent("导入了"+importCount+"条项目数据");
                 operationRecordService.save(operationRecord);
             }else if(fileName.endsWith(".xls")){
-                if(!fileName.endsWith(".xls")){
-                    msg.setError("文件格式错误,请使用’.xlsx’格式");
-                    return msg;
-                }
                 //然后解析表格
                 HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(file));
                 //我们只需要第一个sheet
                 HSSFSheet sheet = workbook.getSheetAt(0);
-                //获取全部人员
-                List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", user.getCompanyId()));
+                //获取全部人员,仅在职人员
+                List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", user.getCompanyId()).eq("is_active", 1));
                 //获取全部供货商分类列表
                 List<ProviderCategory> providerCategoryList = providerCategoryMapper.selectList(new QueryWrapper<ProviderCategory>().eq("company_id", user.getCompanyId()));
                 Company company = companyMapper.selectById(user.getCompanyId());
@@ -3256,7 +3246,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         throw new Exception("项目名称不能为空");
                     }
                     Project project = new Project();
-                    boolean flag=false;
+                    boolean exists=false;
                     if (codeCell != null) {
                         String code = codeCell.getStringCellValue().trim().replaceAll("\\u00a0", "");
                         if (code.equals("项目编号") && rowIndex == 0) {
@@ -3289,7 +3279,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 //                            throw new Exception("项目编号存在重复: " + code);
                                 existCodeList.add(code);
                                 //跳过编号重复的数据
-                                flag=true;
+                                exists=true;
                             }
                         }
                         project.setProjectCode(code);
@@ -3486,7 +3476,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             }
                         }
                     }
-                    if(flag){
+                    if(exists){
                         Project updateProject = projectMapper.selectList(new QueryWrapper<Project>().eq("project_code", project.getProjectCode()).eq("company_id", user.getCompanyId())).get(0);
                         project.setId(updateProject.getId());
                         projectMapper.updateById(project);
@@ -3528,7 +3518,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         if (projectCategorySubCell != null && !StringUtils.isEmpty(projectCategorySubCell.getStringCellValue())) {
                             projectSeparate.setProjectCategorySub(projectCategorySubCell.getStringCellValue());
                         }
-                        if(flag&&check){
+                        if(exists&&check){
                            projectSeparateMapper.updateById(projectSeparate);
                             List<ProjectKeyNodes> nodes = projectKeyNodesMapper.selectList(new QueryWrapper<ProjectKeyNodes>().eq("project_id", id));
                             for (int x = 0; x < projectKeyNodesSettingList.size(); x++) {
@@ -3801,9 +3791,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     importCount++;
                     //导入项目参与人,遵守只增不减的原则, 避免误删
                     List<Participation> oldPartList = new ArrayList<>();
-                    if (!flag) {
+                    if (exists) {
                         //更新的项目,检查已经存在的项目参与人
                         oldPartList = participationMapper.selectList(new QueryWrapper<Participation>().eq("project_id", project.getId()));
+                        System.out.println("获取到已有项目参与人:"+oldPartList.size());
                     }
                     List<Participation> participationList = new ArrayList<>();
                     if(inchargerCell!=null){
@@ -3933,7 +3924,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
     @Override
     public HttpRespMsg exportData(HttpServletRequest request) {
-        LocalDateTime time=LocalDateTime.now();
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
         List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
@@ -3999,6 +3989,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         List<List<String>> allList = new ArrayList<List<String>>();
         allList.add(headList);
         String[] levelArray = new String[]{"正常","紧急","重要","重要且紧急","低风险","中风险","高风险"};
+        //获取项目级别数据
+        List<ProjectLevel> projectLevelList = projectLevelMapper.selectList(new QueryWrapper<ProjectLevel>().eq("company_id", user.getCompanyId()));
         DateTimeFormatter sdf =DateTimeFormatter.ofPattern("yyyy-MM-dd");
         DecimalFormat df = new DecimalFormat("##0.0#");
         //获取项目子表 数据
@@ -4063,11 +4055,18 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 rowData.add(projectVO.getCustomerName());
             }
             if (company.getPackageProject() == 1) {
-                Integer level = projectVO.getLevel();
-                if (level == null) {
-                    level = 1;
+                if(timeType.getProjectLevelState()==1){
+                    Optional<ProjectLevel> first = projectLevelList.stream().filter(pl -> pl.getId().equals(projectVO.getLevel())).findFirst();
+                    if(first.isPresent()){
+                        rowData.add(first.get().getProjectLevelName());
+                    }else rowData.add("");
+                }else {
+                    Integer level = projectVO.getLevel();
+                    if (level == null) {
+                        level = 1;
+                    }
+                    rowData.add(levelArray[level-1]);
                 }
-                rowData.add(levelArray[level-1]);
                 rowData.add(df.format((Double)projectVO.getContractAmount()));
             }
             if(company.getId()==936){
@@ -4119,9 +4118,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             }
             allList.add(rowData);
         }
-        LocalDateTime time1=LocalDateTime.now();
-        Duration between = Duration.between(time1, time);
-        System.out.println("耗时"+between.toMillis()+"毫秒");
         //生成excel文件导出
         String fileName = "项目导出_"+company.getCompanyName()+System.currentTimeMillis();
         String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , allList, path);
@@ -6313,6 +6309,30 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return msg;
     }
 
+    @Override
+    public HttpRespMsg removeDuplicateParticipators(Integer companyId, HttpServletRequest request) {
+        HttpRespMsg msg = new HttpRespMsg();
+        List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().select("id").eq("company_id", companyId));
+        List<Integer> projectIds = projectList.stream().map(Project::getId).collect(Collectors.toList());
+        List<Participation> partList = participationMapper.selectList(new QueryWrapper<Participation>().in("project_id", projectIds));
+        //排重
+        List<Participation> oneList = new ArrayList<>();
+        List<Participation> duplicateList = new ArrayList<>();
+        partList.forEach(part->{
+            if (oneList.stream().anyMatch(one->one.getUserId().equals(part.getUserId())
+                    && one.getProjectId().equals(part.getProjectId()))) {
+                duplicateList.add(part);
+            } else {
+                oneList.add(part);
+            }
+        });
+        if (duplicateList.size() > 0) {
+            participationService.removeByIds(duplicateList.stream().map(Participation::getId).collect(Collectors.toList()));
+            msg.data = duplicateList.size();
+        }
+        return msg;
+    }
+
 
     private List<Department> getSubDepts(Department dp, List<Department> list) {
         List<Department> collect = list.stream().filter(l -> dp.getDepartmentId().equals(l.getSuperiorId())).collect(Collectors.toList());

+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -449,7 +449,9 @@ public class TimingTask {
                 });
             }
         });
-
+        if (isDev) {
+            return;
+        }
         List<Map<String, Object>> dingdingUserList = userMapper.getPushDingdingUserList(str, date);
         //钉钉平台的用批量发送, 每分钟5000个
         int minuteSize = 5000;

+ 93 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/logback.xml

@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <!-- 日志存放路径 ./表示当前运行目录-->
+	<property name="log.path" value="./" />
+    <!-- 日志输出格式 -->
+	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
+
+	<!-- 控制台输出 -->
+	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>${log.pattern}</pattern>
+		</encoder>
+	</appender>
+	
+	<!-- 系统日志输出 -->
+	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	    <file>${log.path}/workTime.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+			<fileNamePattern>${log.path}/workTime.%d{yyyy-MM-dd}.log</fileNamePattern>
+			<!-- 日志最大的历史 60天 -->
+			<maxHistory>2</maxHistory>
+		</rollingPolicy>
+		<encoder>
+			<pattern>${log.pattern}</pattern>
+		</encoder>
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>DEBUG</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+	</appender>
+	
+	<!--<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	    <file>${log.path}/sys-error.log</file>
+        &lt;!&ndash; 循环政策:基于时间创建日志文件 &ndash;&gt;
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            &lt;!&ndash; 日志文件名格式 &ndash;&gt;
+            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
+			&lt;!&ndash; 日志最大的历史 60天 &ndash;&gt;
+			<maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            &lt;!&ndash; 过滤的级别 &ndash;&gt;
+            <level>ERROR</level>
+			&lt;!&ndash; 匹配时的操作:接收(记录) &ndash;&gt;
+            <onMatch>ACCEPT</onMatch>
+			&lt;!&ndash; 不匹配时的操作:拒绝(不记录) &ndash;&gt;
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>-->
+	
+	<!-- 用户访问日志输出  -->
+    <!--<appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${log.path}/sys-user.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            &lt;!&ndash; 按天回滚 daily &ndash;&gt;
+            <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
+            &lt;!&ndash; 日志最大的历史 60天 &ndash;&gt;
+            <maxHistory>2</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>-->
+	
+	<!-- 系统模块日志级别控制  -->
+	<logger name="com.management.platform.mapper" level="debug" />
+	<!-- Spring日志级别控制  -->
+	<logger name="org.springframework" level="warn" />
+
+	<root level="info">
+		<appender-ref ref="console" />
+	</root>
+	
+	<!--系统操作日志-->
+    <root level="info">
+        <appender-ref ref="file_info" />
+        <!--<appender-ref ref="file_error" />-->
+    </root>
+	
+	<!--系统用户操作日志-->
+    <!--<logger name="sys-user" level="info">
+        <appender-ref ref="sys-user"/>
+    </logger>-->
+</configuration> 

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


+ 168 - 11
fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json

@@ -49,7 +49,9 @@
     "hasBeenSubmitted": "Has been submitted",
     "approved": "Pass the audit",
     "rejected": "rejected",
-    "completed": "completed"
+    "completed": "completed",
+    "tried": "tried",
+    "untrial": "untrial"
   },
   "time": {
     "dueDate": "Due date",
@@ -58,7 +60,18 @@
     "duration": "Duration",
     "hour": "Hour",
     "startTime": "Start time",
-    "endTime": "End time"
+    "endTime": "End time",
+    "startDate": "Start date",
+    "endDate": "End date",
+    "workingHours": "Working hours",
+    "twoWeeksAgo": "Two weeks ago",
+    "lastWeek": "last week",
+    "nextWeek": "Next week",
+    "thisWeek": "this week",
+    "addedDate": "Added date",
+    "selectTimeRange": "Select time range",
+    "dateRange": "date range",
+    "selectdaterange": "Select date range"
   },
   "weekDay": {
     "sunday": "Sunday",
@@ -68,10 +81,15 @@
     "thursday": "Thursday",
     "friday": "Friday",
     "saturday": "Saturday",
-    "daily": "daily"
+    "daily": "daily",
+    "date": "date",
+    "Week": "Week",
+    "month": "month",
+    "day": "day"
   },
   "headerTop": {
-    "projectName": "projectName"
+    "projectName": "projectName",
+    "serialNumber": "serial number"
   },
   "defaultText": {
     "pleaseEnterTheOldPassword": "Please enter the old password",
@@ -88,7 +106,16 @@
     "pleaseSelectaTaskGroup": "Please select a task group",
     "pleaseSetTheTimeRatio": "Please set the time ratio",
     "pleaseChoose": "Please choose",
-    "pleaseFillOut": "Please fill out"
+    "pleaseFillOut": "Please fill out",
+    "pleaseSelectTheItemYouWantToFillIn": "Please select the item you want to fill in",
+    "selectProject": "Select project",
+    "selectthepersonwhneedstofillinthereport": "Select the person who needs to fill in the report",
+    "pleaseEnterNametoSearch": "Please enter name to search",
+    "pleaseEnterTheReason": "Please enter the reason",
+    "pleaseEnterYourDecision": "Please enter your decision",
+    "Pleaseenterthereviewyoudecidetopass": "Please enter the review you decide to pass",
+    "pleaseselectaworkdate": "Please select a work date",
+    "pleaseset": "please set"
   },
   "screening": {
     "selectPeople": "select people",
@@ -96,7 +123,10 @@
     "workTime": "Work Time",
     "workHours": "Work hours",
     "workTasks": "Work tasks ",
-    "inputProject": "input project"
+    "inputProject": "input project",
+    "employeename": "employee's name",
+    "workinghoursss": "Working hours",
+    "off-dutytime": "off-duty time"
   },
   "lable": {
     "originalPassword": "original password",
@@ -106,21 +136,34 @@
     "subproject": "subproject",
     "budgetSource": "budget source",
     "taskGrouping": "Task grouping",
-    "percentageOfTime": "Percentage of time"
+    "percentageOfTime": "Percentage of time",
+    "filledReport": "Filled report",
+    "department": "department",
+    "allStaff": "All staff",
+    "unassigned": "unassigned"
   },
   "title": {
-    "modifyTheInformation": "Modify the information"
+    "modifyTheInformation": "Modify the information",
+    "Fillinginbatchesofworkinghours": "Filling in batches of working hours",
+    "Workhoursimportresult": "Work hours import result",
+    "reviewProcess": "review process"
   },
   "btn": {
     "cancel": "cancel",
     "submit": "ok",
+    "determine": "determine",
     "editWorkReport": "Edit work report",
     "delete": "delete",
     "through": "through",
     "rejected": "rejected",
     "undo": "undo",
     "withdraw": "withdraw",
-    "temporaryStorage": "temporary storage"
+    "temporaryStorage": "temporary storage",
+    "nextStep": "Next step",
+    "selectAll": "select all",
+    "choose": "choose",
+    "previousstep": "Previous step",
+    "nextstep": "Next step"
   },
   "textLink": {
     "fillInTheWork": "Fill out the daily",
@@ -172,6 +215,7 @@
     "noReportYet": "No report yet",
     "fillInTheTotal": " Fill in the total",
     "total": "total",
+    "totals": "total",
     "attendancePunch": "Attendance punch",
     "noAttendanceRecord": "No attendance record",
     "IncludingOvertime": "Including overtime",
@@ -183,10 +227,123 @@
     "tianspecificContentAndResults": "Fill in the specific content and results",
     "tianworkMatters": "Fill in the work items",
     "AddWorkTime": "Add work time",
-    "addMore": "Add more"
+    "addMore": "Add more",
+    "to": "to",
+    "hoursFilled": "hours filled",
+    "thisIsAPieceOfInformation": "This is a piece of information",
+    "timeSelection": "time selection",
+    "chooseDuration": "Choose a duration",
+    "bulkProjectReportReview": "Bulk project report review",
+    "responsibleForTheProjectLength": "Only the daily report filling personnel responsible for the project to be reviewed can be seen",
+    "allProject": "All project",
+    "selectdepartment": "Select department",
+    "allDepartments": "All departments",
+    "doesItContain": "Does it contain",
+    "doesNotIncludeUnreviewed": "Does not include unreviewed",
+    "containsUnreviewed": "contains unreviewed",
+    "laborStatisticsExport": "Labor Statistics Export",
+    "filled": "filled",
+    "unfilled": "unfilled",
+    "personnelList": "Personnel list",
+    "unfilledontheday": "Unfilled on the day",
+    "takeDayOff": "Take day off",
+    "enterpriseWeChatReminder": "Enterprise WeChat reminder",
+    "dingNingurgefilling": "Ding Ning urge filling",
+    "weChatReminder": "WeChat reminder",
+    "completedHours": "Completed hours",
+    "unfilledPersonList": "Unfilled Person List",
+    "missingDate": "missing date",
+    "attendanceData": "Attendance data",
+    "reviewEvaluation": "Review evaluation",
+    "Batchimportofworkinghours": "Batch import of working hours",
+    "download": "download",
+    "projectsAndPeopleInThetemplate": "Fill in the Excel template and ensure that the projects and people in the template have been added to the system",
+    "startImporting": "Start importing",
+    "viewLaborImportRecords": "View labor import records",
+    "ImportTime": "Import time",
+    "operator": "Operator",
+    "document": "document",
+    "selectadaterangetoimporthours": "Select a date range to import hours",
+    "downloadTemplateithattendancedata": "Download template with attendance data",
+    "filloutthetemplateanduploaddata": "Fill out the template and upload data",
+    "approvalStatus": "Approval Status",
+    "actualworkinghours": "Actual working hours",
+    "chooseFileAndUpload": "Choose file and upload",
+    "totalworkinghours": "total working hours",
+    "allDay": "All day",
+    "morning": "morning",
+    "afternoon": "afternoon",
+    "PleaseselecttheXLSorXLSXfile": "Please select .xls or .xlsx file",
+    "successful": "successful",
+    "importSuccess": "Import success",
+    "workHourData": "Work hour data",
+    "specificcontentandresults": "specific content and results",
+    "pleaseYes": "please yes",
+    "tofillin": "to fill in"
+  },
+  "export": {
+    "dailyExport": "daily export",
+    "export": "export",
+    "exportData": "export data",
+    "Importfailure": "Import failure"
   },
   "message": {
     "logAganin": "Modify the success Please log in again",
-    "modifyTheSuccess": "Modify the success"
+    "modifyTheSuccess": "Modify the success",
+    "loading": "loading",
+    "noMoreData": "no more data",
+    "Areyousureyouwanttodeletethisdaily": "Are you sure you want to delete this daily",
+    "successfullyDeleted": "successfully deleted",
+    "submittedSuccessfully": "Submitted successfully",
+    "Stagingfailed": "Staging failed",
+    "Temporarysuccess": "Temporary success",
+    "SubmissionFailed": "Submission Failed",
+    "sentSuccessfully": "Sent successfully",
+    "Dailyreviewerhasnotbeensetpleasecontacttheprojectmanager": "Daily reviewer has not been set, please contact the project manager",
+    "Pleaseselectthepersontoreview": "Please select the person to review",
+    "Reviewsucceeded": "Review succeeded",
+    "Pleaseselectareviewer": "Please select a reviewer",
+    "Filledtimeperiodsoverlap": "Filled time periods overlap",
+    "Pleasefillinthetime": "Please fill in the time",
+    "Pleaseselectatime": "Please select a time",
+    "cannotexceedtotal": "The sum of the reported working hours cannot exceed the total attendance working hours",
+    "dailyreportinglimit": "The sum of reported working hours cannot exceed the daily reporting limit",
+    "fillinsuccessfully": "Fill in successfully",
+    "pleaseselectthepersontofillin": "Please select the person to fill in",
+    "canonlybeselectedonce": "canonlybeselectedonce",
+    "Notatthesametimeaslastafternoon": "Not at the same time as last afternoon",
+    "Thesumofthetimeratioscannotexceed": "The sum of the time ratios cannot exceed",
+    "cannotbesubmitted": "Hours have not been fully allocated and cannot be submitted",
+    "Fillinthesumofworkinghours": "Fill in the sum of working hours",
+    "Cannotexceedthetotalworkinghoursofattendance": "cannot exceed the total working hours of attendance",
+    "Cannotexceedthedailydailylimit": "Cannot exceed the daily daily limit",
+    "period": "period",
+    "mistaken": "mistaken",
+    "Endtimemustbegreaterthanstarttime": "End time must be greater than start time",
+    "and": "and",
+    "Thereisoverlappleaseedit": "There is overlap, please edit",
+    "Pleasespecifyaprojectreviewer": "Please specify a project reviewer",
+    "involvedintheproject": "Task groupings that are not yet involved in the project",
+    "Taskgroupingfortheproject": "Task grouping for the project",
+    "Projectgroupleader": "Project group leader",
+    "Withdrawalsucceeded": "Withdrawal succeeded",
+    "rejectedsuccessfully": "rejected successfully"
+  },
+  "template": {
+    "EmployeeHoursStatisticsTemplate": "Employee Hours Statistics Template",
+    "EmployeeTimeImportTemplate": "Employee Time Import Template",
+    "DownloadEmployeeHourStatisticsTemplate": "Download Employee Hour Statistics Template",
+    "Staffdailyworkinghoursstatistics": "Staff daily working hours statistics"
+  },
+  "leave": {
+    "personalLeave": "personal leave",
+    "sickLeave": "sick leave",
+    "annualLeave": "annual leave",
+    "maternityLeave": "maternity leave",
+    "marriageLeave": "marriage leave",
+    "bereavementLeave": "bereavement leave",
+    "leave": "leave",
+    "paternityLeave": "paternity leave",
+    "other": "other"
   }
 }

+ 168 - 11
fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json

@@ -49,7 +49,9 @@
     "hasBeenSubmitted": "已提交",
     "approved": "审核通过",
     "rejected": "已驳回",
-    "completed": "已完成"
+    "completed": "已完成",
+    "tried": "已审",
+    "untrial": "未审"
   },
   "time": {
     "dueDate": "到期日期",
@@ -58,7 +60,18 @@
     "duration": "时长",
     "hour": "小时",
     "startTime": "起始时间",
-    "endTime": "结束时间"
+    "endTime": "结束时间",
+    "startDate": "开始日期",
+    "endDate": "结束日期",
+    "workingHours": "工时",
+    "twoWeeksAgo": "上上周",
+    "lastWeek": "上周",
+    "nextWeek": "下周",
+    "thisWeek": "本周",
+    "addedDate": "新增日期",
+    "selectTimeRange": "选择时间范围",
+    "dateRange": "日期范围",
+    "selectdaterange": "选择日期范围"
   },
   "weekDay": {
     "sunday": "周日",
@@ -68,10 +81,15 @@
     "thursday": "周四",
     "friday": "周五",
     "saturday": "周六",
-    "daily": "每日"
+    "daily": "每日",
+    "date": "日期",
+    "Week": "星期",
+    "month": "月",
+    "day": "日"
   },
   "headerTop": {
-    "projectName": "项目名称"
+    "projectName": "项目名称",
+    "serialNumber": "序号"
   },
   "defaultText": {
     "pleaseEnterTheOldPassword": "请输入原密码",
@@ -88,7 +106,16 @@
     "pleaseSelectaTaskGroup": "请选择任务分组",
     "pleaseSetTheTimeRatio": "请设置用时占比",
     "pleaseChoose": "请选择",
-    "pleaseFillOut": "请填写"
+    "pleaseFillOut": "请填写",
+    "pleaseSelectTheItemYouWantToFillIn": "请选择要填报的项目",
+    "selectProject": "选择项目",
+    "selectthepersonwhneedstofillinthereport": "选择需要代填报的人员",
+    "pleaseEnterNametoSearch": "请输入姓名搜索",
+    "pleaseEnterTheReason": "请输入原因",
+    "pleaseEnterYourDecision": "请输入您决定",
+    "Pleaseenterthereviewyoudecidetopass": "请输入您决定通过的评价",
+    "pleaseselectaworkdate": "请选择工作日期",
+    "pleaseset": "请设置"
   },
   "screening": {
     "selectPeople": "选择人员",
@@ -96,7 +123,10 @@
     "workTime": "工作时长",
     "workHours": "工作时间",
     "workTasks": "工作任务",
-    "inputProject": "投入项目"
+    "inputProject": "投入项目",
+    "employeename": "员工姓名",
+    "workinghoursss": "上班时间",
+    "off-dutytime": "下班时间"
   },
   "lable": {
     "originalPassword": "原密码",
@@ -106,21 +136,34 @@
     "subproject": "子项目",
     "budgetSource": "预算来源",
     "taskGrouping": "任务分组",
-    "percentageOfTime": "用时占比"
+    "percentageOfTime": "用时占比",
+    "filledReport": "已填日报",
+    "department": "部门",
+    "allStaff": "全部人员",
+    "unassigned": "未分配"
   },
   "title": {
-    "modifyTheInformation": "修改信息"
+    "modifyTheInformation": "修改信息",
+    "Fillinginbatchesofworkinghours": "工时批量代填",
+    "Workhoursimportresult": "工时导入结果",
+    "reviewProcess": "审核流程"
   },
   "btn": {
     "cancel": "取消",
     "submit": "提交",
+    "determine": "确定",
     "editWorkReport": "编辑日报",
     "delete": "删除",
     "through": "通过",
     "rejected": "驳回",
     "undo": "撤销",
     "withdraw": "撤回",
-    "temporaryStorage": "暂存"
+    "temporaryStorage": "暂存",
+    "nextStep": "下一步",
+    "selectAll": "全选",
+    "choose": "已选中",
+    "previousstep": "上一步",
+    "nextstep": "上一步"
   },
   "textLink": {
     "fillInTheWork": "填写日报",
@@ -172,6 +215,7 @@
     "noReportYet": "暂无报告",
     "fillInTheTotal": "合计填报",
     "total": "总",
+    "totals": "合计",
     "attendancePunch": "考勤打卡",
     "noAttendanceRecord": "暂无考勤记录",
     "IncludingOvertime": "含加班",
@@ -183,10 +227,123 @@
     "tianspecificContentAndResults": "填写具体内容与结果",
     "tianworkMatters": "填写工作事项",
     "AddWorkTime": "添加工时",
-    "addMore": "添加更多"
+    "addMore": "添加更多",
+    "to": "至",
+    "hoursFilled": "已填工时",
+    "thisIsAPieceOfInformation": "这是一条信息",
+    "timeSelection": "选择时间",
+    "chooseDuration": "选择时长",
+    "bulkProjectReportReview": "批量项目报告审核",
+    "responsibleForTheProjectLength": "仅能看到自己负责的待项目审核的日报填写人员",
+    "allProject": "全部项目",
+    "selectdepartment": "选择部门",
+    "allDepartments": "全部部门",
+    "doesItContain": "是否包含",
+    "doesNotIncludeUnreviewed": "不包含未审核",
+    "containsUnreviewed": "包含未审核",
+    "laborStatisticsExport": "工时统计导出",
+    "filled": "已填",
+    "unfilled": "未填",
+    "personnelList": "人员列表",
+    "unfilledontheday": "当日未填",
+    "takeDayOff": "全天请假",
+    "enterpriseWeChatReminder": "企业微信催填",
+    "dingNingurgefilling": "钉钉催填",
+    "weChatReminder": "微信催填",
+    "completedHours": "已填工时情况",
+    "unfilledPersonList": "未填人员列表",
+    "missingDate": "未填日期",
+    "attendanceData": "考勤数据",
+    "reviewEvaluation": "审核评价",
+    "Batchimportofworkinghours": "工时批量导入",
+    "download": "下载",
+    "projectsAndPeopleInThetemplate": "填写excel模板,请确保模板中的项目和人员已添加到系统中",
+    "startImporting": "开始导入",
+    "viewLaborImportRecords": "查看工时导入记录",
+    "ImportTime": "导入时间",
+    "operator": "操作人",
+    "document": "文件",
+    "selectadaterangetoimporthours": "选择要导入工时的日期范围",
+    "downloadTemplateithattendancedata": "下载带考勤数据的模板",
+    "filloutthetemplateanduploaddata": "填写模板,上传数据",
+    "approvalStatus": "审核状态",
+    "actualworkinghours": "实际工作时长",
+    "chooseFileAndUpload": "选择文件并上传",
+    "totalworkinghours": "总工时",
+    "allDay": "全天",
+    "morning": "上午",
+    "afternoon": "下午",
+    "PleaseselecttheXLSorXLSXfile": "请选择.xls或.xlsx文件",
+    "successful": "成功",
+    "importSuccess": "导入成功",
+    "workHourData": "条工时数据",
+    "specificcontentandresults": "具体内容与结果",
+    "pleaseYes": "请对",
+    "tofillin": "进行填写"
+  },
+  "export": {
+    "dailyExport": "日报导出",
+    "export": "导出",
+    "exportData": "导出数据",
+    "Importfailure": "导入失败"
   },
   "message": {
     "logAganin": "修改成功,请重新登录",
-    "modifyTheSuccess": "修改成功"
+    "modifyTheSuccess": "修改成功",
+    "loading": "加载中",
+    "noMoreData": "无更多数据",
+    "Areyousureyouwanttodeletethisdaily": "确定要删除该日报吗?",
+    "successfullyDeleted": "删除成功",
+    "submittedSuccessfully": "提交成功",
+    "SubmissionFailed": "提交失败",
+    "Stagingfailed": "暂存失败",
+    "Temporarysuccess": "暂存成功",
+    "sentSuccessfully": "已发送成功",
+    "Dailyreviewerhasnotbeensetpleasecontacttheprojectmanager": "日报审核人尚未设置,请联系该项目管理人员",
+    "Pleaseselectthepersontoreview": "请选择要审核的人员",
+    "Reviewsucceeded": "审核成功",
+    "Pleaseselectareviewer": "请选择审核人",
+    "Filledtimeperiodsoverlap": "填写的时间段重叠",
+    "Pleasefillinthetime": "请填写时间",
+    "Pleaseselectatime": "请选择时间",
+    "cannotexceedtotal": "填报工时之和不能超过考勤总工时",
+    "dailyreportinglimit": "填报工时之和不能超过每日填报上限",
+    "fillinsuccessfully": "填报成功",
+    "pleaseselectthepersontofillin": "请选择代填的人员",
+    "canonlybeselectedonce": "只能选择一次",
+    "Notatthesametimeaslastafternoon": "不能和上下午同时存在",
+    "Thesumofthetimeratioscannotexceed": "用时比例之和不能超过",
+    "cannotbesubmitted": "工时尚未完全分配,无法提交",
+    "Fillinthesumofworkinghours": "填报工时之和",
+    "Cannotexceedthetotalworkinghoursofattendance": "不能超过考勤总工时",
+    "Cannotexceedthedailydailylimit": "不能超过填报日报上限",
+    "period": "时间段",
+    "mistaken": "有误",
+    "Endtimemustbegreaterthanstarttime": "结束时间必须大于开始时间",
+    "and": "与",
+    "Thereisoverlappleaseedit": "存在重叠,请修改",
+    "Pleasespecifyaprojectreviewer": "请指定项目审核人",
+    "involvedintheproject": "项目上尚无参与的任务分组",
+    "Taskgroupingfortheproject": "项目的任务分组",
+    "Projectgroupleader": "项目的分组负责人",
+    "Withdrawalsucceeded": "撤回成功",
+    "rejectedsuccessfully": "驳回成功"
+  },
+  "template": {
+    "EmployeeHoursStatisticsTemplate": "员工工时统计模板",
+    "EmployeeTimeImportTemplate": "员工工时导入模板",
+    "DownloadEmployeeHourStatisticsTemplate": "下载员工工时统计模板",
+    "Staffdailyworkinghoursstatistics": "人员每日工时统计"
+  },
+  "leave": {
+    "personalLeave": "事假",
+    "sickLeave": "病假",
+    "annualLeave": "年假",
+    "maternityLeave": "产假",
+    "marriageLeave": "婚假",
+    "bereavementLeave": "丧假",
+    "leave": "调休假",
+    "paternityLeave": "陪产假",
+    "other": "其他"
   }
 }

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

@@ -31,7 +31,11 @@
                 <el-container style="padding: 0px;">
                     <el-aside :style="'overflow:auto;padding-left:10px;padding-right:5px;height:'+tableHeight+'px;width:'+groupWidth+'px;'">
                         <el-input v-model="groupSearch" size="small" placeholder="搜索分组" @input="startSearchGroup" style="margin-top:10px"/>
-                        <p ><span class="heavyTxt">任务分组</span> <i class="el-icon-plus pull-right" style="color:#666;margin-right:10px;" @click="createGroup" v-if="projectCreatorId == user.id || projectInchargerId == user.id || permissions.projectManagement"></i></p>
+                        <p ><span class="heavyTxt">任务分组</span>
+                            <!-- <el-button size="mini">导出</el-button> -->
+                            <i class="el-icon-plus pull-right" style="color:#666;margin-right:10px;" @click="createGroup" v-if="projectCreatorId == user.id || projectInchargerId == user.id || permissions.projectManagement"></i>
+                            <i class="iconfont firerock-icondaochu pull-right" style="font-size:14px"></i>
+                        </p>
                         <el-menu :default-active="defaultGroupId" ref="defaultMenu"  class="el-menu-vertical-demo" @select="groupChange" style="border-right:none;">
                             <el-menu-item :index="item.id" v-for="item in groupList" :key="item.id"  class="group_style">
                                 <div slot="title">

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

@@ -23,11 +23,13 @@
                 </el-select>
                 小时
                 
-                <span class="lockworktime"><el-checkbox v-model="timeType.lockWorktime" label="锁定工作时长" />
+                <span class="lockworktime"><el-checkbox v-model="timeType.lockWorktime" @change="lockChange" label="锁定工作时长" />
                 
                 <el-tooltip effect="dark" content="锁定每日填报工时的上限" placement="top-start">
                     <i class="el-icon-question" style="color:#606266"></i>
                 </el-tooltip>
+                <span style="margin-left:25px">填报时长上限</span>
+                <el-input :disabled="timeType.lockWorktime" :min="timeType.allday" v-model="timeType.maxReportTime" type="number" style="width:120px;margin-left:10px"></el-input><span style="margin-left:5px;color:#409eff">小时</span>
                 </span>
                 
             </el-form-item><br>
@@ -447,7 +449,8 @@
                     pm: 4,
                     type: 0,
                     lockWorktime: false,
-                    fillAhead: false
+                    fillAhead: false,
+                    maxReportTime: 8
                 },
                 customDegreeActive: false,
                 needDeptAudit: false,
@@ -493,6 +496,13 @@
             }
         },
         methods: {
+            lockChange(){
+                console.log('lockChange',this.timeType.maxReportTime);
+                if(this.timeType.lockWorktime){
+                    this.timeType.maxReportTime = this.timeType.allday
+                }
+                
+            },
             setupRest(){
                 // this.getRestList()
                 this.setupRestDialog = true

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

@@ -1005,7 +1005,7 @@ import { error } from 'dingtalk-jsapi';
                 if(this.typeField != 'null' && this.typeField != null && this.typeField != '') {
                     parameter.type = this.typeField
                 }
-                if(this.dateSelect.length != 0){
+                if(this.dateSelect != null && this.dateSelect.length != 0){
                     parameter.dateType = this.dateType
                     parameter.startDate = this.dateSelect[0]
                     parameter.endDate = this.dateSelect[1]

Dosya farkı çok büyük olduğundan ihmal edildi
+ 264 - 267
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue


+ 10 - 3
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -1319,7 +1319,6 @@
                 }
                 return true
             },
-
             // 提交日报
             submitReport() {
                 this.dateAr = []
@@ -1336,7 +1335,15 @@
                             }
                         }
                     }
-                    this.dateAr = alp
+                }else{
+                    for(let i in this.form.domains){
+                        let objs = {}
+                        objs.s = this.form.domains[i].startTime
+                        objs.e = this.form.domains[i].endTime
+                        alp.push(objs)
+                    }
+                }
+                this.dateAr = alp
                     if(this.dateAr.length > 0) {
                         let trus = this.fns()
                         if(!trus) {
@@ -1344,7 +1351,7 @@
                             return
                         }
                     }
-                }
+                
                 
                 // return
                 const toast = this.$toast.loading({

+ 19 - 9
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue

@@ -1428,16 +1428,25 @@
                                 }
                             }
                         }
+                    }else{
+                        for(let m in this.form[formIndex].domains){
+                            let slll2 = this.form[formIndex].domains[m]
+                            let objs = {}
+                            objs.s = slll2.startTime
+                            objs.e = slll2.endTime
+                            alp.push(objs)
+                        }
                         if(this.form[formIndex].reportTimes){
-                                let timearr = this.form[formIndex].reportTimes.split(',')
-                                for(let i in timearr){
-                                    let objs = {}
-                                    objs.s = timearr[i].split('-')[0]
-                                    objs.e = timearr[i].split('-')[1]
-                                    alp.push(objs)
-                                }
+                            let timearr = this.form[formIndex].reportTimes.split(',')
+                            for(let i in timearr){
+                                let objs = {}
+                                objs.s = timearr[i].split('-')[0]
+                                objs.e = timearr[i].split('-')[1]
+                                alp.push(objs)
+                            }
                         }
-                        this.dateAr = alp
+                    }
+                    this.dateAr = alp
                         if(this.dateAr.length > 0) {
                             let trus = this.fns()
                             if(!trus) {
@@ -1445,7 +1454,8 @@
                                 return
                             }
                         }
-                    }
+
+                    
 
                     if (this.reportTimeType.type == 0) {
                         var alldayNum = 0;