Просмотр исходного кода

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

ggooalice 2 лет назад
Родитель
Сommit
6367e54025

+ 31 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -2773,6 +2773,10 @@ 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
@@ -3000,6 +3004,10 @@ 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
@@ -3523,13 +3531,16 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                 ProjectKeyNodesSetting projectKeyNodesSetting = projectKeyNodesSettingList.get(x);
                                 Optional<ProjectKeyNodes> first = nodes.stream().filter(ns -> ns.getNodesId().equals(projectKeyNodesSetting.getId())).findFirst();
                                 ProjectKeyNodes projectKeyNodes=new ProjectKeyNodes();
+                                boolean flagNodes=false;
                                 switch (x){
                                     case 0:
                                         if(plate1!=null&&plate1.getCellTypeEnum() == CellType.NUMERIC  && !StringUtils.isEmpty(plate1.getDateCellValue())){
                                             projectKeyNodes.setPlanCompleteDate(sdf.format(plate1.getDateCellValue()));
+                                            flagNodes=true;
                                         }
                                         if(plate2!=null&&plate2.getCellTypeEnum() == CellType.NUMERIC  && !StringUtils.isEmpty(plate2.getDateCellValue())){
                                             projectKeyNodes.setActualCompleteDate(sdf.format(plate2.getDateCellValue()));
+                                            flagNodes=true;
                                         }
                                         if(plate3!=null&&!StringUtils.isEmpty(plate3.getStringCellValue())){
                                             switch (plate3.getStringCellValue()){
@@ -3540,14 +3551,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                                 case "完成":projectKeyNodes.setStates("2");
                                                     break;
                                             }
+                                            flagNodes=true;
                                         }
                                         break;
                                     case 1:
                                         if(plate4!=null&&plate4.getCellTypeEnum() == CellType.NUMERIC  && !StringUtils.isEmpty(plate4.getDateCellValue())){
                                             projectKeyNodes.setPlanCompleteDate(sdf.format(plate4.getDateCellValue()));
+                                            flagNodes=true;
                                         }
                                         if(plate5!=null&&plate5.getCellTypeEnum() == CellType.NUMERIC  && !StringUtils.isEmpty(plate5.getDateCellValue())){
                                             projectKeyNodes.setActualCompleteDate(sdf.format(plate5.getDateCellValue()));
+                                            flagNodes=true;
                                         }
                                         if(plate6!=null&&!StringUtils.isEmpty(plate6.getStringCellValue())){
                                             switch (plate6.getStringCellValue()){
@@ -3558,14 +3572,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                                 case "完成":projectKeyNodes.setStates("2");
                                                     break;
                                             }
+                                            flagNodes=true;
                                         }
                                         break;
                                     case 2:
                                         if(plate7!=null&&plate7.getCellTypeEnum() == CellType.NUMERIC  && !StringUtils.isEmpty(plate7.getDateCellValue())){
                                             projectKeyNodes.setPlanCompleteDate(sdf.format(plate7.getDateCellValue()));
+                                            flagNodes=true;
                                         }
                                         if(plate8!=null&&plate8.getCellTypeEnum() == CellType.NUMERIC  && !StringUtils.isEmpty(plate8.getDateCellValue())){
                                             projectKeyNodes.setActualCompleteDate(sdf.format(plate8.getDateCellValue()));
+                                            flagNodes=true;
                                         }
                                         if(plate9!=null&&!StringUtils.isEmpty(plate9.getStringCellValue())){
                                             switch (plate9.getStringCellValue()){
@@ -3576,14 +3593,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                                 case "完成":projectKeyNodes.setStates("2");
                                                     break;
                                             }
+                                            flagNodes=true;
                                         }
                                         break;
                                     case 3:
                                         if(plate10!=null&&plate10.getCellTypeEnum() == CellType.NUMERIC  && !StringUtils.isEmpty(plate10.getDateCellValue())){
                                             projectKeyNodes.setPlanCompleteDate(sdf.format(plate10.getDateCellValue()));
+                                            flagNodes=true;
                                         }
                                         if(plate11!=null&&plate11.getCellTypeEnum() == CellType.NUMERIC  && !StringUtils.isEmpty(plate11.getDateCellValue())){
                                             projectKeyNodes.setActualCompleteDate(sdf.format(plate11.getDateCellValue()));
+                                            flagNodes=true;
                                         }
                                         if(plate12!=null&&!StringUtils.isEmpty(plate12.getStringCellValue())){
                                             switch (plate12.getStringCellValue()){
@@ -3594,14 +3614,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                                 case "完成":projectKeyNodes.setStates("2");
                                                     break;
                                             }
+                                            flagNodes=true;
                                         }
                                         break;
                                     case 4:
                                         if(plate13!=null&&plate13.getCellTypeEnum() == CellType.NUMERIC  && !StringUtils.isEmpty(plate13.getDateCellValue())){
                                             projectKeyNodes.setPlanCompleteDate(sdf.format(plate13.getDateCellValue()));
+                                            flagNodes=true;
                                         }
                                         if(plate14!=null&&plate14.getCellTypeEnum() == CellType.NUMERIC  && !StringUtils.isEmpty(plate14.getDateCellValue())){
                                             projectKeyNodes.setActualCompleteDate(sdf.format(plate14.getDateCellValue()));
+                                            flagNodes=true;
                                         }
                                         if(plate15!=null&&!StringUtils.isEmpty(plate15.getStringCellValue())){
                                             switch (plate15.getStringCellValue()){
@@ -3612,14 +3635,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                                 case "完成":projectKeyNodes.setStates("2");
                                                     break;
                                             }
+                                            flagNodes=true;
                                         }
                                         break;
                                     case 5:
                                         if(plate16!=null&&plate16.getCellTypeEnum() == CellType.NUMERIC  && !StringUtils.isEmpty(plate16.getDateCellValue())){
                                             projectKeyNodes.setPlanCompleteDate(sdf.format(plate16.getDateCellValue()));
+                                            flagNodes=true;
                                         }
                                         if(plate17!=null&&plate17.getCellTypeEnum() == CellType.NUMERIC  && !StringUtils.isEmpty(plate17.getDateCellValue())){
                                             projectKeyNodes.setActualCompleteDate(sdf.format(plate17.getDateCellValue()));
+                                            flagNodes=true;
                                         }
                                         if(plate18!=null&&!StringUtils.isEmpty(plate18.getStringCellValue())){
                                             switch (plate18.getStringCellValue()){
@@ -3630,12 +3656,15 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                                 case "完成":projectKeyNodes.setStates("2");
                                                     break;
                                             }
+                                            flagNodes=true;
                                         }
                                         break;
                                 }
                                 if(first.isPresent()){
-                                     projectKeyNodes.setId(first.get().getId());
-                                    projectKeyNodesMapper.updateById(projectKeyNodes);
+                                    if(flagNodes){
+                                        projectKeyNodes.setId(first.get().getId());
+                                        projectKeyNodesMapper.updateById(projectKeyNodes);
+                                    }
                                 }else {
                                     projectKeyNodes.setProjectId(id);
                                     projectKeyNodes.setNodesId(projectKeyNodesSetting.getId());
@@ -3804,7 +3833,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                     p.setProjectId(project.getId());
                                     participationMapper.insert(p);
                                 } else {
-                                    projectMapper.deleteById(project.getId());
                                     throw new Exception("参与人["+str+"]不存在");
                                 }
                             }

+ 10 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -3197,6 +3197,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             sheet.createFreezePane(0,1);
             List<String> titles = new ArrayList<String>();
             titles.add("序号");
+            titles.add("工号");
             titles.add("员工");
             titles.add("所在部门");
             titles.add("项目名称");
@@ -3382,18 +3383,19 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             for (Map<String, Object> map : allReportByDate) {
                 HSSFRow row = sheet.createRow(rowNum);
                 row.createCell(0).setCellValue(rowNum);
-                row.createCell(1).setCellValue((String) map.get("name"));
-                row.createCell(2).setCellValue((String) map.get("departmentName"));
-                row.createCell(3).setCellValue((String) map.get("project"));
-                row.createCell(4).setCellValue((String) map.get("categoryName"));
+                row.createCell(1).setCellValue((String) map.get("jobNumber"));
+                row.createCell(2).setCellValue((String) map.get("name"));
+                row.createCell(3).setCellValue((String) map.get("departmentName"));
+                row.createCell(4).setCellValue((String) map.get("project"));
+                row.createCell(5).setCellValue((String) map.get("categoryName"));
                 if(timeType.getMainProjectState()==1){
-                    row.createCell(5).setCellValue((String) map.get("projectMainName"));
+                    row.createCell(6).setCellValue((String) map.get("projectMainName"));
                 }else {
-                    row.createCell(5).setCellValue((String) map.get("subProjectName"));
+                    row.createCell(6).setCellValue((String) map.get("subProjectName"));
                 }
-                int index = 6;
+                int index = 7;
                 if (company.getPackageProject() == 1) {
-                    row.createCell(6).setCellValue((String) map.get("taskName"));
+                    row.createCell(7).setCellValue((String) map.get("taskName"));
                     index++;
                 }
                 HSSFCell cell = row.createCell(index);

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

@@ -57,7 +57,7 @@
 
     <!--根据日期获取全部报告信息-->
     <select id="getAllReportByDate" resultType="java.util.Map">
-        SELECT a.id, c.name,c.corpwx_userid as corpwxUserId, b.project_name AS project,b.project_code as projectCode,b.category_name as categoryName, a.working_time AS duration, a.content, a.create_time   AS time,a.create_date as createDate,
+        SELECT a.id, c.name,c.job_number as jobNumber,c.corpwx_userid as corpwxUserId, b.project_name AS project,b.project_code as projectCode,b.category_name as categoryName, a.working_time AS duration, a.content, a.create_time   AS time,a.create_date as createDate,
         a.state, a.time_type as timeType, a.cost, a.report_time_type as reportTimeType,a.start_time as startTime,u.job_number as jobNumber,
         a.end_time  as endTime, d.name as subProjectName,d.code as subProjectCode,a.task_id as taskId, task.name as taskName, a.is_overtime as isOvertime,a.progress as progress,
         a.department_audit_state as departmentAuditState, a.stage, a.pic_str as picStr, multi_worktime as multiWorktime
@@ -125,7 +125,7 @@
     </select>
 
     <select id="getProjectMembReportByDate" resultType="java.util.Map">
-        SELECT a.id, c.name,c.corpwx_userid as corpwxUserId, b.project_name AS project, b.category_name as categoryName,a.working_time AS duration,
+        SELECT a.id, c.name,c.job_number as jobNumber,c.corpwx_userid as corpwxUserId, b.project_name AS project, b.category_name as categoryName,a.working_time AS duration,
         a.content, a.create_time AS time, a.create_date as createDate,
         a.state, a.time_type as timeType, a.cost, a.report_time_type as reportTimeType, a.start_time as startTime,
         a.end_time as endTime, d.name as subProjectName,a.task_id as taskId, task.name as taskName, a.is_overtime as
@@ -171,7 +171,7 @@
     </select>
 
     <select id="getDeptMembReportByDate" resultType="java.util.Map">
-        SELECT a.id, c.name,c.corpwx_userid as corpwxUserId, b.project_name AS project, a.working_time AS duration, a.content, a.create_time AS time,a.create_date as createDate,
+        SELECT a.id, c.name,c.job_number as jobNumber,c.corpwx_userid as corpwxUserId, b.project_name AS project, a.working_time AS duration, a.content, a.create_time AS time,a.create_date as createDate,
         a.state, a.time_type as timeType, a.cost, a.report_time_type as reportTimeType, a.start_time as startTime,
         a.end_time as endTime, d.name as subProjectName,a.task_id as taskId, task.name as taskName, a.is_overtime as isOvertime,a.progress as progress,
         a.department_audit_state as departmentAuditState,a.stage, a.pic_str as picStr, multi_worktime as multiWorktime

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

@@ -48,13 +48,17 @@
     "waitingsubmit": "waiting submit",
     "hasBeenSubmitted": "Has been submitted",
     "approved": "Pass the audit",
-    "rejected": "rejected"
+    "rejected": "rejected",
+    "completed": "completed"
   },
   "time": {
     "dueDate": "Due date",
     "times": "time",
     "day": "day",
-    "duration": "Duration"
+    "duration": "Duration",
+    "hour": "Hour",
+    "startTime": "Start time",
+    "endTime": "End time"
   },
   "weekDay": {
     "sunday": "Sunday",
@@ -63,20 +67,46 @@
     "wednesday": "Wednesday",
     "thursday": "Thursday",
     "friday": "Friday",
-    "saturday": "Saturday"
+    "saturday": "Saturday",
+    "daily": "daily"
+  },
+  "headerTop": {
+    "projectName": "projectName"
   },
-  "headerTop": {},
   "defaultText": {
     "pleaseEnterTheOldPassword": "Please enter the old password",
     "pleaseEnterTheNewPassword": "Please enter the new password",
     "PleaseEnterYourName": "Please enter your name",
-    "PleaseEnterYourPhone": "Please enter your phone"
+    "PleaseEnterYourPhone": "Please enter your phone",
+    "pleaseSelectAsubstitute": "Please select a substitute",
+    "selectWorkDate": "Select work date",
+    "pleaseSelectWorkingHours": "Please select working hours",
+    "pleaseSelectWorkingHourss": "Please select working hours",
+    "pleaseSelectaJob": "Please select a job",
+    "pleaseSelectSnItem": "Please select an item",
+    "PleaseSelectaSub-item": "PleaseSelectaSub-item",
+    "pleaseSelectaTaskGroup": "Please select a task group",
+    "pleaseSetTheTimeRatio": "Please set the time ratio",
+    "pleaseChoose": "Please choose",
+    "pleaseFillOut": "Please fill out"
+  },
+  "screening": {
+    "selectPeople": "select people",
+    "workingDate": "working date",
+    "workTime": "Work Time",
+    "workHours": "Work hours",
+    "workTasks": "Work tasks ",
+    "inputProject": "input project"
   },
   "lable": {
     "originalPassword": "original password",
     "newPassword": "new password",
     "name": "name",
-    "phone": "phone"
+    "phone": "phone",
+    "subproject": "subproject",
+    "budgetSource": "budget source",
+    "taskGrouping": "Task grouping",
+    "percentageOfTime": "Percentage of time"
   },
   "title": {
     "modifyTheInformation": "Modify the information"
@@ -89,7 +119,8 @@
     "through": "through",
     "rejected": "rejected",
     "undo": "undo",
-    "withdraw": "withdraw"
+    "withdraw": "withdraw",
+    "temporaryStorage": "temporary storage"
   },
   "textLink": {
     "fillInTheWork": "Fill out the daily",
@@ -113,7 +144,7 @@
     "prompts": "prompt",
     "expired": "expired",
     "AskForLeaveOnTheSameDay": "Ask for leave on the same day",
-    "AskForLeave": "Ask for leave",
+    "AskForLeave": "Ask for leave", 
     "dailyWork": "Daily work",
     "people": "people",
     "totalWorkingHours": "Total working hours",
@@ -121,7 +152,8 @@
     "project": "project",
     "waitForTheProjectReviewer": "Waiting for project reviewers",
     "audit": "audit",
-    "projectAuditor": "Project auditor",
+    "projectAuditor": "project reviewer",
+    "reviewer": "Reviewer",
     "await": "await",
     "importWaitingForReview": "Import waiting for review",
     "automaticReview": "Automatic review",
@@ -131,13 +163,27 @@
     "taskGroup": "Task group",
     "inputStage": "Input stage",
     "professionalProgress": "Professional progress",
+    "schedule": "schedule",
     "task": "task",
     "WorkOvertime": "Work overtime",
     "matters": "Matters",
     "projectDuration": "Project duration",
     "evaluation": "Evaluation",
-    "noReportYet": "No report yet"
-
+    "noReportYet": "No report yet",
+    "fillInTheTotal": " Fill in the total",
+    "total": "total",
+    "attendancePunch": "Attendance punch",
+    "noAttendanceRecord": "No attendance record",
+    "IncludingOvertime": "Including overtime",
+    "describe": "describe",
+    "projectDescription": "project description",
+    "milestone": "milestone",
+    "specificContentAndResults": "Specific content and results",
+    "workMatters": "Work Matters",
+    "tianspecificContentAndResults": "Fill in the specific content and results",
+    "tianworkMatters": "Fill in the work items",
+    "AddWorkTime": "Add work time",
+    "addMore": "Add more"
   },
   "message": {
     "logAganin": "Modify the success Please log in again",

+ 56 - 9
fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json

@@ -5,7 +5,7 @@
     "projectManagement": "项目管理",
     "professionalAudit": "专业审核",
     "departmentAudit": "部门审核",
-    "projectReportReview": "项目报告审核",
+    "projectReportReview": "项目报告审核", 
     "ImportDailyReview": "导入日报审核",
     "laborCostStatistics": "工时成本统计",
     "customizeNumericalStatistics": "自定义数值统计",
@@ -48,13 +48,17 @@
     "waitingsubmit": "待提交",
     "hasBeenSubmitted": "已提交",
     "approved": "审核通过",
-    "rejected": "已驳回"
+    "rejected": "已驳回",
+    "completed": "已完成"
   },
   "time": {
     "dueDate": "到期日期",
     "times": "时间",
     "day": "天",
-    "duration": "时长"
+    "duration": "时长",
+    "hour": "小时",
+    "startTime": "起始时间",
+    "endTime": "结束时间"
   },
   "weekDay": {
     "sunday": "周日",
@@ -63,20 +67,46 @@
     "wednesday": "周三",
     "thursday": "周四",
     "friday": "周五",
-    "saturday": "周六"
+    "saturday": "周六",
+    "daily": "每日"
+  },
+  "headerTop": {
+    "projectName": "项目名称"
   },
-  "headerTop": {},
   "defaultText": {
     "pleaseEnterTheOldPassword": "请输入原密码",
     "pleaseEnterTheNewPassword": "请输入新密码",
     "PleaseEnterYourName": "请输入姓名",
-    "PleaseEnterYourPhone": "请输入手机号"
+    "PleaseEnterYourPhone": "请输入手机号",
+    "pleaseSelectAsubstitute": "请选择代填人员",
+    "selectWorkDate": "选择工作日期",
+    "pleaseSelectWorkingHours": "请选择工作时长",
+    "pleaseSelectWorkingHourss": "请选择工作时间",
+    "pleaseSelectaJob": "请选择工作任务",
+    "pleaseSelectSnItem": "请选择项目",
+    "PleaseSelectaSub-item": "请选择子项目",
+    "pleaseSelectaTaskGroup": "请选择任务分组",
+    "pleaseSetTheTimeRatio": "请设置用时占比",
+    "pleaseChoose": "请选择",
+    "pleaseFillOut": "请填写"
+  },
+  "screening": {
+    "selectPeople": "选择人员",
+    "workingDate": "工作日期",
+    "workTime": "工作时长",
+    "workHours": "工作时间",
+    "workTasks": "工作任务",
+    "inputProject": "投入项目"
   },
   "lable": {
     "originalPassword": "原密码",
     "newPassword": "新密码",
     "name": "姓名",
-    "phone": "手机号"
+    "phone": "手机号",
+    "subproject": "子项目",
+    "budgetSource": "预算来源",
+    "taskGrouping": "任务分组",
+    "percentageOfTime": "用时占比"
   },
   "title": {
     "modifyTheInformation": "修改信息"
@@ -89,7 +119,8 @@
     "through": "通过",
     "rejected": "驳回",
     "undo": "撤销",
-    "withdraw": "撤回"
+    "withdraw": "撤回",
+    "temporaryStorage": "暂存"
   },
   "textLink": {
     "fillInTheWork": "填写日报",
@@ -122,6 +153,7 @@
     "waitForTheProjectReviewer": "待项目审核人",
     "audit": "审核",
     "projectAuditor": "项目审核人",
+    "reviewer": "审核人",
     "await": "待",
     "importWaitingForReview": "导入待审核",
     "automaticReview": "自动审核",
@@ -131,12 +163,27 @@
     "taskGroup": "任务分组",
     "inputStage": "投入阶段",
     "professionalProgress": "专业进度",
+    "schedule": "进度",
     "task": "任务",
     "WorkOvertime": "加班",
     "matters": "事项",
     "projectDuration": "项目时长",
     "evaluation": "评价",
-    "noReportYet": "暂无报告"
+    "noReportYet": "暂无报告",
+    "fillInTheTotal": "合计填报",
+    "total": "总",
+    "attendancePunch": "考勤打卡",
+    "noAttendanceRecord": "暂无考勤记录",
+    "IncludingOvertime": "含加班",
+    "describe": "描述",
+    "projectDescription": "项目描述",
+    "milestone": "里程碑",
+    "specificContentAndResults": "具体内容与结果",
+    "workMatters": "工作事项",
+    "tianspecificContentAndResults": "填写具体内容与结果",
+    "tianworkMatters": "填写工作事项",
+    "AddWorkTime": "添加工时",
+    "addMore": "添加更多"
   },
   "message": {
     "logAganin": "修改成功,请重新登录",

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

@@ -265,33 +265,33 @@
         <!-- 填写日报的dialog -->
         <el-dialog :title="editTitle[isBatch]" :visible.sync="dialogVisible" width="60%" style="height:95%" :close-on-click-modal="false" @closed="guanbi()" custom-class="editReportDialog" ref="editReportDialog">
             <el-form ref="workForm" :model="workForm" :rules="workRules" label-width="120px">
-                <el-form-item label="选择人员" v-if="isSubstitude">
+                <el-form-item :label="$t('screening.selectPeople')" v-if="isSubstitude">
                     <el-input @focus="showChooseMembTree" v-model="workForm.userNames"
-                    placeholder="请选择代填人员" ></el-input>
+                    :placeholder="$t('defaultText.pleaseSelectAsubstitute')" ></el-input>
                 </el-form-item>
-                <el-form-item label="工作日期" prop="createDate">
+                <el-form-item :label="$t('screening.workingDate')" prop="createDate">
                     <el-date-picker v-model="workForm.createDate" :editable="false" format="yyyy-MM-dd" value-format="yyyy-MM-dd" 
                     :style="'width:'+(isBatch==0?'200':'280')+'px;'" :type="isBatch==0?'date':'daterange'"
-                    @change="changeMonth()" @blur="iptBlur(reportTimeType.type)" :clearable="false" placeholder="选择工作日期" :disabled="isDisable"></el-date-picker>
-                    <div v-if="falsss" style="display: inline-block;">共{{jsDay}} 天, {{jsTime}} 小时</div>
-                    <div v-if="isBatch!=0" style="display: inline-block;">共{{jsDay}} 天, 合计填报 {{jsTime}} 小时</div>
-                    <span v-if="reportTimeType.type == 3" style="margin-left:30px;">{{isBatch==0?'总':'每日'}}时长:</span>
+                    @change="changeMonth()" @blur="iptBlur(reportTimeType.type)" :clearable="false" :placeholder="$t('defaultText.selectWorkDate')" :disabled="isDisable"></el-date-picker>
+                    <div v-if="falsss" style="display: inline-block;margin-left:10px">{{jsDay}} {{$t('time.day')}}, {{jsTime}} {{$t('time.hour')}}</div>
+                    <div v-if="isBatch!=0" style="display: inline-block;margin-left:10px">{{jsDay}} {{$t('time.day')}}, {{$t('other.fillInTheTotal')}} {{jsTime}} {{$t('time.hour')}}</div>
+                    <span v-if="reportTimeType.type == 3" style="margin-left:30px;">{{isBatch==0? $t('other.total'):$t('weekDay.daily')}}{{$t('time.duration')}}:</span>
                     <el-input-number :disabled="(!canEdit || user.timeType.lockWorktime) && !isWeekend" v-if="reportTimeType.type == 3" style="margin-left:10px;" @change="changeAllTime"
                         v-model="reportTimeType.allday" :precision="1" :step="0.5" :max="12" :min="0.5"></el-input-number>
-                    <span v-if="reportTimeType.type == 3">小时</span>
+                    <span v-if="reportTimeType.type == 3">{{$t('time.hour')}}</span>
 
-                    <span v-if="workForm.time">考勤打卡: {{workForm.time.startTime}}-{{workForm.time.endTime}}, {{workForm.time.workHours}}小时</span>
-                    <span v-if="user.timeType.syncDingding==1&&!workForm.time">暂无考勤记录</span>
+                    <span v-if="workForm.time">{{$t('other.attendancePunch')}}: {{workForm.time.startTime}}-{{workForm.time.endTime}}, {{workForm.time.workHours}}{{$t('time.hour')}}</span>
+                    <span v-if="user.timeType.syncDingding==1&&!workForm.time">{{$t('other.noAttendanceRecord')}}</span>
                     
                 </el-form-item>
                 <!-- 000000 -->
                 <div v-for="(domain, index) in workForm.domains" :key="domain.id" :style="index>0?'margin-top:10px;':''">
                     <div v-if="reportTimeType.multiWorktime==0">
-                    <el-form-item v-if="reportTimeType.type != 3" :label="reportTimeType.type ==2?'工作时间':'工作时长'" :prop="'domains.' + index + '.'+timeFields[reportTimeType.type]"
-                        :rules="{ required: true, message: '请选择工作时长', trigger: 'blur' }">
+                    <el-form-item v-if="reportTimeType.type != 3" :label="reportTimeType.type ==2?$t('screening.workHours'):$t('screening.workTime')" :prop="'domains.' + index + '.'+timeFields[reportTimeType.type]"
+                        :rules="{ required: true, message: $t('defaultText.pleaseSelectWorkingHours'), trigger: 'blur' }">
                         <el-select v-model="domain.timeType" style="width:200px;"
                             v-if="reportTimeType.type == 0"
-                            placeholder="请选择工作时长" 
+                            :placeholder="$t('defaultText.pleaseSelectWorkingHours')" 
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
                             @change="onTimeTypeChange(domain.timeType)">
                             <el-option
@@ -305,18 +305,18 @@
                         <el-select v-model="domain.workingTime" style="width:200px;"
                         v-if="reportTimeType.type == 1"
                         :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
-                        :placeholder="'请选择工作时长' + domain.workingTime"
+                        :placeholder="$t('defaultText.pleaseSelectWorkingHours') + domain.workingTime"
                         @change="seleChn(0,domain)">
                         <el-option v-for="item in timeRange" :key="item" :value="item.toFixed(1)">{{item.toFixed(1)}}</el-option>
                         </el-select>
-                        <span v-if="reportTimeType.type == 1">小时</span>
+                        <span v-if="reportTimeType.type == 1">{{$t('time.hour')}}</span>
 
                         <span v-if="reportTimeType.type == 2">
                         <!--时间范围选择 -->
                         <el-time-picker 
                         :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
                             v-model="domain.startTime"
-                            placeholder="起始时间"
+                            :placeholder="$t('time.startTime')"
                             style="width:120px;"
                             format="HH:mm"
                             value-format="HH:mm"
@@ -328,7 +328,7 @@
                         </el-time-picker> - <el-time-picker 
                         :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
                             v-model="domain.endTime"
-                            placeholder="结束时间"
+                            :placeholder="$t('time.endTime')"
                             style="width:120px;"
                             format="HH:mm"
                             value-format="HH:mm"
@@ -341,14 +341,14 @@
                         </el-time-picker>
                         </span>
                         <div class="overtime" v-if="user.timeType.fillOvertime || isWeekend">
-                            <el-checkbox :disabled="!domain.canEdit" v-model="domain.isOvertime">含加班</el-checkbox>
-                            <el-input :disabled="!domain.canEdit || domain.isOvertime==null || domain.isOvertime==0 || !domain.isOvertime" v-model="domain.overtimeHours" @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">小时</span>
+                            <el-checkbox :disabled="!domain.canEdit" v-model="domain.isOvertime">{{$t('other.IncludingOvertime')}}</el-checkbox>
+                            <el-input :disabled="!domain.canEdit || domain.isOvertime==null || domain.isOvertime==0 || !domain.isOvertime" v-model="domain.overtimeHours" @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">{{$t('time.hour')}}</span>
                         </div>
                     </el-form-item>
                     
-                    <el-form-item :label="user.companyId==781?'工作任务':'投入项目'" :prop="'domains.' + index + '.projectId'"
-                        :rules="{ required: true, message: user.companyId==781?'请选择工作任务':'请选择投入项目', trigger: ['change','blur'] }">
-                        <el-select v-model="domain.projectId" :placeholder="user.companyId==781?'请选择工作任务':'请选择项目'" style="width:200px;" clearable="true"  filterable="true" value-key="id"
+                    <el-form-item :label="user.companyId==781? $t('screening.workTasks') : $t('screening.inputProject')" :prop="'domains.' + index + '.projectId'"
+                        :rules="{ required: true, message: user.companyId==781? $t('defaultText.pleaseSelectaJob'): $t('defaultText.pleaseSelectSnItem'), trigger: ['change','blur'] }">
+                        <el-select v-model="domain.projectId" :placeholder="user.companyId==781?$t('defaultText.pleaseSelectaJob'): $t('defaultText.pleaseSelectSnItem')" style="width:200px;" clearable="true"  filterable="true" value-key="id"
                         @change="selectProject(domain, index)"
                         :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" popper-class="projectSelectPopperClass">
                             <!-- <el-option v-for="item in projectList" :disabled="item.status>=2" :key="item.id" :label="item.projectName" :value="item.id"></el-option> -->
@@ -359,10 +359,10 @@
                         </el-select>
                         <template v-if="user.timeType.mainProjectState != 1">
                         <span v-if="domain.subProjectList != null && domain.subProjectList.length> 0 && domain.projectId != ''"
-                            style="margin-left:45px;">子项目</span>
+                            style="margin-left:45px;">{{$t('lable.subproject')}}</span>
 
                         <!--子项目 -->
-                        <el-select v-model="domain.subProjectId" placeholder="请选择子项目" style="width:200px;margin-left:10px;" clearable="true"
+                        <el-select v-model="domain.subProjectId" :placeholder="$t('defaultText.PleaseSelectaSub-item')" style="width:200px;margin-left:10px;" clearable="true"
                             v-if="domain.subProjectList != null && domain.subProjectList.length> 0 && domain.projectId != ''"
                         :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" @change="updateSubProject">
                             <el-option v-for="item in domain.subProjectList" :key="item.id" :label="item.name" :value="item.id"></el-option>
@@ -376,89 +376,89 @@
                         <!-- <el-link type="primary" v-if="canEdit"
                             :underline="false" style="margin-left:10px;" @click="copyProject(index)">复制</el-link> -->
                     </el-form-item>
-                    <el-form-item :label="user.companyId==781?'描述':'项目描述'" v-if="user.company.packageProject==0&&domain.projectId&&projectList.filter(p=>p.id == domain.projectId)[0].projectDesc">
+                    <el-form-item :label="user.companyId==781? $t('other.describe'):$t('other.projectDescription')" v-if="user.company.packageProject==0&&domain.projectId&&projectList.filter(p=>p.id == domain.projectId)[0].projectDesc">
                         <span>{{projectList.filter(p=>p.id == domain.projectId)[0].projectDesc}}</span>
                     </el-form-item>
                     <!--如果设置了工时成本预警的预算成本项-->
-                    <el-form-item label="预算来源" v-if="user.company.packageProject==1&&timeBasecostList &&timeBasecostList.length>0">
+                    <el-form-item :label="$t('lable.budgetSource')" v-if="user.company.packageProject==1&&timeBasecostList &&timeBasecostList.length>0">
                         <el-select v-model="domain.basecostId" :disabled="!domain.canEdit" @change="$forceUpdate()">
                             <el-option v-for="item in timeBasecostList" :label="item.name" :value="item.id" :key="item.id"></el-option>
                         </el-select>
                     </el-form-item>
-                    <el-form-item label="任务分组" v-if="user.company.packageProject == 1">
+                    <el-form-item :label="$t('lable.taskGrouping')" v-if="user.company.packageProject == 1">
                         <!-- 任务分组 -->
-                        <el-select v-model="domain.groupId" placeholder="请选择任务分组" style="width:200px;" clearable="true" 
+                        <el-select v-model="domain.groupId" :placeholder="$t('defaultText.pleaseSelectaTaskGroup')" style="width:200px;" clearable="true" 
                         :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" @change="getGroupStages(domain, index)">
                             <el-option v-for="item in domain.taskGroups" :key="item.id" :label="item.name" :value="item.id"></el-option>
                         </el-select>
                         <!-- 项目的阶段 -->
                         <span v-if="domain.stages != null && domain.stages.length> 0" 
-                            style="margin-left:30px;">投入阶段</span>
-                        <el-select v-model="domain.stage" placeholder="请选择" style="width:200px;margin-left:10px;" 
+                            style="margin-left:30px;">{{$t('other.inputStage')}}</span>
+                        <el-select v-model="domain.stage" :placeholder="$t('defaultText.pleaseChoose')" style="width:200px;margin-left:10px;" 
                         clearable="true" v-if="domain.stages != null && domain.stages.length> 0"
                         @change="changeStages(domain, index)"
                         :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)">
                             <el-option v-for="item in domain.stages" :key="item.id" :label="item.stagesName" :value="item.stagesName"></el-option>
                         </el-select>
                     </el-form-item>
-                    <el-form-item :label="user.companyId==781?'审核人':'项目审核人'">
+                    <el-form-item :label="user.companyId==781? $t('other.reviewer') : $t('other.projectAuditor')">
                         <el-select v-model="domain.projectAuditorId" :disabled="!domain.canEdit" @change="$forceUpdate()">
                             <el-option v-for="item in domain.auditUserList" :label="item.auditorName" :value="item.auditorId" :key="item.id"></el-option>
                         </el-select>
                     </el-form-item>
                     <!-- 相关维度/自定义维度 -->
-                    <el-form-item :label="yonghuUser.customDegreeName" v-if="domain.projectId && yonghuUser.customDegreeActive == 1" :rules="user.timeType.customDegreeStatus == 1 && domain.wuduList != undefined && domain.wuduList.length != 0 ? { required: true, message: '请选择' + yonghuUser.customDegreeName, trigger: ['change','blur'] } : null" :prop="'domains.' + index + '.degreeId'">
-                        <el-select v-model="domain.degreeId" clearable placeholder="请选择" :disabled="!domain.canEdit">
+                    <el-form-item :label="yonghuUser.customDegreeName" v-if="domain.projectId && yonghuUser.customDegreeActive == 1" :rules="user.timeType.customDegreeStatus == 1 && domain.wuduList != undefined && domain.wuduList.length != 0 ? { required: true, message: $t('defaultText.pleaseChoose') + yonghuUser.customDegreeName, trigger: ['change','blur'] } : null" :prop="'domains.' + index + '.degreeId'">
+                        <el-select v-model="domain.degreeId" clearable :placeholder="$t('defaultText.pleaseChoose')" :disabled="!domain.canEdit">
                             <el-option v-for="item in domain.wuduList" :key="item.value" :label="item.name" :value="item.id">
                             </el-option>
                         </el-select>
                     </el-form-item>
                     <!-- 相关数值 -->
-                    <el-form-item :label="yonghuUser.customDataName" v-if="yonghuUser.customDataActive == 1" :prop="'domains.' + index + '.customData'" :rules="user.timeType.customDataStatus == 1 ? { type: 'number', required: true, message: '请填写' + yonghuUser.customDataName, trigger: ['change','blur'] } : null">
+                    <el-form-item :label="yonghuUser.customDataName" v-if="yonghuUser.customDataActive == 1" :prop="'domains.' + index + '.customData'" :rules="user.timeType.customDataStatus == 1 ? { type: 'number', required: true, message: $t('defaultText.pleaseFillOut') + yonghuUser.customDataName, trigger: ['change','blur'] } : null">
                         <el-input-number :id="'numberData_'+index" :disabled="!domain.canEdit" v-model="domain.customData" style="width:200px;" @keyup.native="restrictNumber('numberData_'+index)" :max="user.timeType.customDataMaxStatus == 1 ? user.timeType.customDataMaxValue : 'infinity'"></el-input-number>
                     </el-form-item>
                     <!-- 自定义文本 -->
-                    <el-form-item :label="yonghuUser.customTextName" v-if="yonghuUser.customTextActive == 1" :prop="'domains.' + index + '.customText'" :rules="user.timeType.customTextStatus == 1 ? { required: true, message: '请填写' + yonghuUser.customTextName, trigger: ['change','blur'] } : null">
+                    <el-form-item :label="yonghuUser.customTextName" v-if="yonghuUser.customTextActive == 1" :prop="'domains.' + index + '.customText'" :rules="user.timeType.customTextStatus == 1 ? { required: true, message: $t('defaultText.pleaseFillOut') + yonghuUser.customTextName, trigger: ['change','blur'] } : null">
                         <el-input :disabled="!domain.canEdit" v-model="domain.customText" type="textarea" :rows="1" style="width:75%;margin-right:7%" maxlength="1000" show-word-limit></el-input>
                     </el-form-item>
-                    <el-form-item v-if="reportTimeType.type == 3" label="用时占比" :prop="'domains.' + index + '.'+timeFields[reportTimeType.type]"
-                        :rules="{ required: true, message: '请设置用时占比', trigger: 'blur' }">
+                    <el-form-item v-if="reportTimeType.type == 3" :label="$t('lable.percentageOfTime')" :prop="'domains.' + index + '.'+timeFields[reportTimeType.type]"
+                        :rules="{ required: true, message: $t('defaultText.pleaseSetTheTimeRatio'), trigger: 'blur' }">
                         <div style="width:300px;">
                             <el-col span="14"><el-slider :disabled="!domain.canEdit" v-model="domain.progress" :min="5" :show-tooltip="false" :step="5" style="width:180px;" @input="domain.workingTime = (reportTimeType.allday*domain.progress/100).toFixed(1)" @change="seleChn(0)"></el-slider></el-col>
-                            <el-col span="10"><span style="margin-left:10px;float:right;"><span style="margin-right:10px;">{{domain.progress}}%</span>{{domain.workingTime}}小时</span></el-col>
+                            <el-col span="10"><span style="margin-left:10px;float:right;"><span style="margin-right:10px;">{{domain.progress}}%</span>{{domain.workingTime}}{{$t('time.hour')}}</span></el-col>
                         </div>
-                        <div class="overtime" v-if="user.timeType.fillOvertime || isWeekend"><el-checkbox :disabled="!domain.canEdit" v-model="domain.isOvertime">加班</el-checkbox>
-                        <el-input :disabled="!domain.canEdit || domain.isOvertime==null || domain.isOvertime==0 || !domain.isOvertime" v-model="domain.overtimeHours"  @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">小时</span>
+                        <div class="overtime" v-if="user.timeType.fillOvertime || isWeekend"><el-checkbox :disabled="!domain.canEdit" v-model="domain.isOvertime">{{$t('other.WorkOvertime')}}</el-checkbox>
+                        <el-input :disabled="!domain.canEdit || domain.isOvertime==null || domain.isOvertime==0 || !domain.isOvertime" v-model="domain.overtimeHours"  @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">{{$t('time.hour')}}</span>
                         </div>
                     </el-form-item>
                     <!--工程专业版本模式下, 各个专业的进度填报 -->
-                    <el-form-item label="专业进度" :prop="'domains.' + index + '.professionProgress'" v-if="user.company.packageEngineering==1">
+                    <el-form-item :label="$t('other.professionalProgress')" :prop="'domains.' + index + '.professionProgress'" v-if="user.company.packageEngineering==1">
                         <span v-for="item in domain.professionProgress" :key="item.professionId" style="margin-right:10px;">
-                            <span>{{item.professionName}}</span> / 进度:
+                            <span>{{item.professionName}}</span> / {{$t('other.schedule')}}:
                             <el-input size="mini" style="width:60px;" v-model="item.progress"
                             @keyup.native="onProgressChange" 
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"></el-input>%
                         </span>
                     </el-form-item>
                     <!--项目管理专业版模式下,项目下的近期执行的任务 -->
-                    <el-form-item label="任务/里程碑" :prop="'domains.' + index + '.taskId'" v-if="user.company.packageProject==1" >
-                        <el-select v-model="domain.taskId" placeholder="请选择" style="width:75%;margin-right:7%" filterable="true" 
+                    <el-form-item :label="$t('other.task')+' / '+$t('other.milestone')" :prop="'domains.' + index + '.taskId'" v-if="user.company.packageProject==1" >
+                        <el-select v-model="domain.taskId" :placeholder="$t('defaultText.pleaseChoose')" style="width:75%;margin-right:7%" filterable="true" 
                         :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)">
                             <el-option v-for="item in domain.taskList" :key="item.taskId" :label="item.taskName" :value="item.taskId"></el-option>
                         </el-select>
-                        <el-checkbox v-model="domain.taskFinish" v-if="domain.taskId != undefined">已完成</el-checkbox>
+                        <el-checkbox v-model="domain.taskFinish" v-if="domain.taskId != undefined">{{$t('state.completed')}}</el-checkbox>
                     </el-form-item>
-                    <el-form-item :label="user.companyId==781?'具体内容与结果':'工作事项'" :prop="'domains.' + index + '.content'" 
-                    :rules="user.timeType.workContentState == 1 ? { required: true, message: user.companyId==781?'填写具体内容与结果':'填写工作事项', trigger: 'blur' } : null">
-                        <el-input v-model="domain.content" type="textarea" :rows="4" placeholder="请填写" clearable
+                    <el-form-item :label="user.companyId==781? $t('other.specificContentAndResults') : $t('other.workMatters') " :prop="'domains.' + index + '.content'" 
+                    :rules="user.timeType.workContentState == 1 ? { required: true, message: user.companyId==781? $t('other.tianspecificContentAndResults'):$t('other.tianworkMatters'), trigger: 'blur' } : null">
+                        <el-input v-model="domain.content" type="textarea" :rows="4" :placeholder="$t('defaultText.pleaseFillOut')" clearable
                          :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"></el-input>
                     </el-form-item>
                     </div>
                     <!--多个工作事项填报的情况 -->
                     <div v-if="reportTimeType.multiWorktime==1">
-                        <el-form-item label="投入项目" :prop="'domains.' + index + '.projectId'"
-                            :rules="{ required: true, message: '请选择投入项目', trigger: ['change','blur'] }">
-                            <el-select v-model="domain.projectId" placeholder="请选择项目" style="width:200px;" clearable="true"  filterable="true" value-key="id"
+                        <el-form-item :label="$t('screening.inputProject')" :prop="'domains.' + index + '.projectId'"
+                            :rules="{ required: true, message: $t('defaultText.pleaseSelectSnItem'), trigger: ['change','blur'] }">
+                            <el-select v-model="domain.projectId" :placeholder="$t('defaultText.pleaseSelectSnItem')" style="width:200px;" clearable="true"  filterable="true" value-key="id"
                             @change="selectProject(domain, index)"
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" popper-class="projectSelectPopperClass">
                                 <el-option v-for="item in fillProjectList" :disabled="item.status!=1 && item.status!=4" :key="item.id" :label="item.projectName + '\u3000' + item.projectCode" :value="item.id">
@@ -468,9 +468,9 @@
                             </el-select>
                             <template v-if="user.timeType.mainProjectState != 1">
                             <span  v-if="domain.subProjectList != null && domain.subProjectList.length> 0 && domain.projectId != ''"
-                                style="margin-left:45px;">子项目</span>
+                                style="margin-left:45px;">{{$t('lable.subproject')}}</span>
                             <!--子项目 -->
-                            <el-select v-model="domain.subProjectId" placeholder="请选择子项目" style="width:200px;margin-left:10px;" clearable="true"
+                            <el-select v-model="domain.subProjectId" :placeholder="$t('defaultText.PleaseSelectaSub-item')" style="width:200px;margin-left:10px;" clearable="true"
                             v-if="domain.subProjectList != null && domain.subProjectList.length> 0 && domain.projectId != ''"
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" @change="updateSubProject">
                                 <el-option v-for="item in domain.subProjectList" :key="item.id" :label="item.name" :value="item.id"></el-option>
@@ -482,80 +482,80 @@
                                 <i class="fa fa-trash" style="color: red;;font-size:18px;"></i>
                             </el-link>
 
-                            <div class="overtime" v-if="user.timeType.fillOvertime || isWeekend"><el-checkbox :disabled="!domain.canEdit" v-model="domain.isOvertime">含加班</el-checkbox>
-                            <el-input :disabled="!domain.canEdit || domain.isOvertime==null || domain.isOvertime==0 || !domain.isOvertime" v-model="domain.overtimeHours" @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">小时</span>
+                            <div class="overtime" v-if="user.timeType.fillOvertime || isWeekend"><el-checkbox :disabled="!domain.canEdit" v-model="domain.isOvertime">{{$t('other.IncludingOvertime')}}</el-checkbox>
+                            <el-input :disabled="!domain.canEdit || domain.isOvertime==null || domain.isOvertime==0 || !domain.isOvertime" v-model="domain.overtimeHours" @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">{{$t('time.hour')}}</span>
                             </div>
                             
                             <!-- <el-link type="primary" v-if="canEdit"
                                 :underline="false" style="margin-left:10px;" @click="copyProject(index)">复制</el-link> -->
                         </el-form-item>
-                        <el-form-item :label="user.companyId==781?'描述':'项目描述'" v-if="user.company.packageProject==0&&domain.projectId&&projectList.filter(p=>p.id == domain.projectId)[0].projectDesc">
+                        <el-form-item :label="user.companyId==781?$t('other.describe'):$t('other.projectDescription')" v-if="user.company.packageProject==0&&domain.projectId&&projectList.filter(p=>p.id == domain.projectId)[0].projectDesc">
                             <span>{{projectList.filter(p=>p.id == domain.projectId)[0].projectDesc}}</span>
                         </el-form-item>
                         <!--如果设置了工时成本预警的预算成本项-->
-                        <el-form-item label="预算来源" v-if="user.company.packageProject==1&&timeBasecostList &&timeBasecostList.length>0">
+                        <el-form-item :label="$t('lable.budgetSource')" v-if="user.company.packageProject==1&&timeBasecostList &&timeBasecostList.length>0">
                             <el-select v-model="domain.basecostId" :disabled="!domain.canEdit" @change="$forceUpdate()">
                                 <el-option v-for="item in timeBasecostList" :label="item.name" :value="item.id" :key="item.id"></el-option>
                             </el-select>
                         </el-form-item>
-                        <el-form-item label="任务分组" v-if="user.company.packageProject == 1">
+                        <el-form-item :label="$t('lable.taskGrouping')" v-if="user.company.packageProject == 1">
                             <!-- 任务分组 -->
-                            <el-select v-model="domain.groupId" placeholder="请选择任务分组" style="width:200px;" clearable="true" 
+                            <el-select v-model="domain.groupId" :placeholder="$t('defaultText.pleaseSelectaTaskGroup')" style="width:200px;" clearable="true" 
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" @change="getGroupStages(domain, index)">
                                 <el-option v-for="item in domain.taskGroups" :key="item.id" :label="item.name" :value="item.id"></el-option>
                             </el-select>
                             <!-- 项目的阶段 -->
                             <span v-if="domain.stages != null && domain.stages.length> 0" 
-                                style="margin-left:30px;">投入阶段</span>
-                            <el-select v-model="domain.stage" placeholder="请选择" style="width:200px;margin-left:10px;" 
+                                style="margin-left:30px;">{{$t('other.inputStage')}}</span>
+                            <el-select v-model="domain.stage" :placeholder="$t('defaultText.pleaseChoose')" style="width:200px;margin-left:10px;" 
                             clearable="true" v-if="domain.stages != null && domain.stages.length> 0"
                             @change="changeStages(domain, index)"
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)">
                                 <el-option v-for="item in domain.stages" :key="item.id" :label="item.stagesName" :value="item.stagesName"></el-option>
                             </el-select>
                         </el-form-item>
-                        <el-form-item label="项目审核人" >
+                        <el-form-item :label="$t('other.projectAuditor')" >
                             <el-select v-model="domain.projectAuditorId" :disabled="!domain.canEdit" @change="$forceUpdate()">
                                 <el-option v-for="item in domain.auditUserList" :label="item.auditorName" :value="item.auditorId" :key="item.id"></el-option>
                             </el-select>
                         </el-form-item>
                         <!--工程专业版本模式下, 各个专业的进度填报 -->
-                        <el-form-item label="专业进度" :prop="'domains.' + index + '.professionProgress'" v-if="user.company.packageEngineering==1">
+                        <el-form-item :label="$t('other.professionalProgress')" :prop="'domains.' + index + '.professionProgress'" v-if="user.company.packageEngineering==1">
                             <span v-for="item in domain.professionProgress" :key="item.professionId" style="margin-right:10px;">
-                                <span>{{item.professionName}}</span> / 进度:
+                                <span>{{item.professionName}}</span> / {{$t('other.schedule')}}:
                                 <el-input size="mini" style="width:60px;" v-model="item.progress"
                                 @keyup.native="onProgressChange" 
                                 :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"></el-input>%
                             </span>
                         </el-form-item>
                         <!-- 相关维度 -->
-                        <el-form-item :label="yonghuUser.customDegreeName" v-if="domain.projectId && yonghuUser.customDegreeActive == 1" :rules="user.timeType.customDegreeStatus == 1 && domain.wuduList.length != 0 ? { required: true, message: '请选择' + yonghuUser.customDegreeName, trigger: ['change','blur'] } : null" :prop="'domains.' + index + '.degreeId'">
-                            <el-select v-model="domain.degreeId" :disabled="!domain.canEdit" clearable placeholder="请选择">
+                        <el-form-item :label="yonghuUser.customDegreeName" v-if="domain.projectId && yonghuUser.customDegreeActive == 1" :rules="user.timeType.customDegreeStatus == 1 && domain.wuduList.length != 0 ? { required: true, message: $t('defaultText.pleaseChoose') + yonghuUser.customDegreeName, trigger: ['change','blur'] } : null" :prop="'domains.' + index + '.degreeId'">
+                            <el-select v-model="domain.degreeId" :disabled="!domain.canEdit" clearable :placeholder="$t('defaultText.pleaseChoose')">
                                 <el-option v-for="item in domain.wuduList" :key="item.value" :label="item.name" :value="item.id">
                                 </el-option>
                             </el-select>
                         </el-form-item>
                         <!-- 相关数值 -->
-                        <el-form-item :label="yonghuUser.customDataName" v-if="domain.projectId && yonghuUser.customDataActive == 1" :prop="'domains.' + index + '.customData'" :rules="user.timeType.customDataStatus == 1 ? { type: 'number', required: true, message: '请填写' + yonghuUser.customDataName, trigger: ['change','blur'] } : null">
+                        <el-form-item :label="yonghuUser.customDataName" v-if="domain.projectId && yonghuUser.customDataActive == 1" :prop="'domains.' + index + '.customData'" :rules="user.timeType.customDataStatus == 1 ? { type: 'number', required: true, message: $t('defaultText.pleaseFillOut') + yonghuUser.customDataName, trigger: ['change','blur'] } : null">
                             <el-input-number :id="'numberData_'+index" :disabled="!domain.canEdit" v-model="domain.customData" style="width:200px;" @keyup.native="restrictNumber('numberData_'+index)" :max="user.timeType.customDataMaxStatus == 1 ? user.timeType.customDataMaxValue : 'infinity'"></el-input-number>
                         </el-form-item>
                         <!-- 自定义文本 -->
-                        <el-form-item :label="yonghuUser.customTextName" v-if="yonghuUser.customTextActive == 1" :prop="'domains.' + index + '.customText'" :rules="user.timeType.customTextStatus == 1 ? { required: true, message: '请填写' + yonghuUser.customTextName, trigger: ['change','blur'] } : null">
+                        <el-form-item :label="yonghuUser.customTextName" v-if="yonghuUser.customTextActive == 1" :prop="'domains.' + index + '.customText'" :rules="user.timeType.customTextStatus == 1 ? { required: true, message: $t('defaultText.pleaseFillOut') + yonghuUser.customTextName, trigger: ['change','blur'] } : null">
                             <el-input :disabled="!domain.canEdit" v-model="domain.customText" style="width:75%;margin-right:7%" type="textarea" :rows="1" maxlength="1000"></el-input>
                         </el-form-item>
                         <!--项目管理专业版模式下,项目下的近期执行的任务 -->
-                        <el-form-item label="任务/里程碑" :prop="'domains.' + index + '.taskId'" v-if="user.company.packageProject==1" >
-                            <el-select v-model="domain.taskId" placeholder="请选择" style="width:75%;margin-right:7%" filterable="true" 
+                        <el-form-item :label="$t('other.task')+' / '+$t('other.milestone')" :prop="'domains.' + index + '.taskId'" v-if="user.company.packageProject==1" >
+                            <el-select v-model="domain.taskId" :placeholder="$t('defaultText.pleaseChoose')" style="width:75%;margin-right:7%" filterable="true" 
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)">
                                 <el-option v-for="item in domain.taskList" :key="item.taskId" :label="item.taskName" :value="item.taskId"></el-option>
                             </el-select>
-                            <el-checkbox v-model="domain.taskFinish" v-if="domain.taskId != undefined">已完成</el-checkbox>
+                            <el-checkbox v-model="domain.taskFinish" v-if="domain.taskId != undefined">{{$t('state.completed')}}</el-checkbox>
                         </el-form-item>
                         <div v-for="(timeItem,tIndex) in domain.worktimeList" :key="tIndex" 
                             style="border: 0.5px #ddd solid;padding:5px;margin-bottom:15px;position:relative;">
                         <i v-if="tIndex>0&&workForm.domains[index].state>=2" @click="removeTimeItem(domain,tIndex)"  class="el-icon-delete" style="position:absolute;right:-7px;top:-7px;font-size:16px;"></i>
-                        <el-form-item label="工作时间" :prop="'domains.' + index + '.worktimeList.'+tIndex+'.'+timeFields[reportTimeType.type]"
-                            :rules="{ required: true, message: '请选择工作时间', trigger: 'blur' }">
+                        <el-form-item :label="$t('screening.workHours')" :prop="'domains.' + index + '.worktimeList.'+tIndex+'.'+timeFields[reportTimeType.type]"
+                            :rules="{ required: true, message: $t('defaultText.pleaseSelectWorkingHourss'), trigger: 'blur' }">
                             
                             <span v-if="reportTimeType.type == 2">
                             <!-- <span> -->
@@ -563,7 +563,7 @@
                             <el-time-picker 
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
                                 v-model="timeItem.startTime"
-                                placeholder="起始时间"
+                                :placeholder="$t('time.startTime')"
                                 style="width:120px;"
                                 format="HH:mm"
                                 value-format="HH:mm"
@@ -575,7 +575,7 @@
                             </el-time-picker> - <el-time-picker 
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
                                 v-model="timeItem.endTime"
-                                placeholder="结束时间"
+                                :placeholder="$t('time.endTime')"
                                 style="width:120px;"
                                 format="HH:mm"
                                 value-format="HH:mm"
@@ -588,14 +588,14 @@
                             </el-time-picker>
                             </span>
                         </el-form-item>
-                        <el-form-item label="工作事项" :prop="'domains.' + index + '.worktimeList.'+tIndex+'.content'" 
-                        :rules="user.timeType.workContentState == 1 ? { required: true, message: '填写工作事项', trigger: 'blur' } : null">
-                            <el-input v-model="timeItem.content" type="textarea" :rows="2" placeholder="请填写工作事项" clearable
+                        <el-form-item :label="$t('other.workMatters')" :prop="'domains.' + index + '.worktimeList.'+tIndex+'.content'" 
+                        :rules="user.timeType.workContentState == 1 ? { required: true, message: $t('other.tianworkMatters'), trigger: 'blur' } : null">
+                            <el-input v-model="timeItem.content" type="textarea" :rows="2" :placeholder="$t('other.tianworkMatters')" clearable
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
                             ></el-input>
                         </el-form-item>
                         </div>
-                        <el-link size="small" @click="addNewWorktime(index, domain)" style="margin-left:15px;margin-top:5px;margin-bottom:5px;">添加工时</el-link>
+                        <el-link size="small" @click="addNewWorktime(index, domain)" style="margin-left:15px;margin-top:5px;margin-bottom:5px;">{{$t('other.AddWorkTime')}}</el-link>
                     </div>
 
                     <!--照片的显示 -->
@@ -609,24 +609,24 @@
                     <el-divider v-if="workForm.domains.length>1" style="margin-bottom:10px;"></el-divider>
                 </div>
                 <span id="workFormsItemBottom"></span>
-                <el-link v-if="showAddMore" type="primary" :underline="false" @click="addDomain(reportTimeType.type)" style="margin-left:40px;position:sticky;bottom:70px;background:#fff;z-index:1010">添加更多</el-link>
+                <el-link v-if="showAddMore" type="primary" :underline="false" @click="addDomain(reportTimeType.type)" style="margin-left:40px;position:sticky;bottom:70px;background:#fff;z-index:1010">{{$t('other.addMore')}}</el-link>
             </el-form>
             <span slot="footer" class="dialog-footer">
-                <el-button @click="cancel(workForm.domains,true)" v-if="canCancelInDialog" style="float:left;">撤回</el-button>
-                <el-button @click="deleteReport"  v-if="workForm.domains[0].id != null && canEdit && reportCanDelete">删除</el-button>
-                <el-button @click="dialogVisible = false">取消</el-button>
-                <el-button v-if="!isSubstitude" @click="submitReport(1)" :loading="submitingReport" :disabled="workForm.domains.length==0?true:(canEdit?false:true)">暂存</el-button>
+                <el-button @click="cancel(workForm.domains,true)" v-if="canCancelInDialog" style="float:left;">{{$t('btn.withdraw')}}</el-button>
+                <el-button @click="deleteReport"  v-if="workForm.domains[0].id != null && canEdit && reportCanDelete">{{$t('btn.delete')}}</el-button>
+                <el-button @click="dialogVisible = false">{{$t('btn.cancel')}}</el-button>
+                <el-button v-if="!isSubstitude" @click="submitReport(1)" :loading="submitingReport" :disabled="workForm.domains.length==0?true:(canEdit?false:true)">{{$t('btn.temporaryStorage')}}</el-button>
                 <el-button type="primary" @click="submitReport(0)" :loading="submitingReport"
-                :disabled="workForm.domains.length==0?true:(canEdit?false:true)" >提交</el-button>
+                :disabled="workForm.domains.length==0?true:(canEdit?false:true)" >{{$t('btn.submit')}}</el-button>
             </span>
         </el-dialog>
 
         <!-- 按周填报 -->
-        <el-dialog title="按周填报" :visible.sync="diasZho" width="60%" :close-on-click-modal="false" @closed="guanbi(),zhoAddqx()">
+        <el-dialog :title="$t('textLink.fillInAWeek')" :visible.sync="diasZho" width="60%" :close-on-click-modal="false" @closed="guanbi(),zhoAddqx()">
             <!-- 按周填报-已填工时-点击 -->
             <el-dialog append-to-body title="已填日报" :visible.sync="weeklyFilledTimeDialog" width="50%" :close-on-click-modal="false">
                 <el-table :data="weeklyFilledTimeList" v-loading="weeklyFilledTimeLoading">
-                    <el-table-column prop="project" label="项目名称"></el-table-column>
+                    <el-table-column prop="project" :label="$t('headerTop.projectName')"></el-table-column>
                     <el-table-column prop="time" label="工时(h)"></el-table-column>
                     <el-table-column prop="state" label="状态">
                         <template slot-scope="scope">{{workReportStateString[scope.row.state]}}</template>
@@ -700,7 +700,7 @@
             <!-- 按周填报项目筛选 -->
             <div v-if="selConShow" class="selConStyle">
                 <div class="selConStyle_title">请选择要填报的项目</div>
-                <el-select v-model="selCon" multiple placeholder="请选择" filterable>
+                <el-select v-model="selCon" multiple :placeholder="$t('defaultText.pleaseChoose')" filterable>
                     <el-option
                     v-for="item in fillProjectList"
                     :disabled="item.status!=1 && item.status!=4"
@@ -735,7 +735,7 @@
             <div>
                 <div class="zhoFel" v-if="zhoBao.subProjectList != null && zhoBao.subProjectList.length > 0 && user.timeType.mainProjectState != 1">
                     <p>子项目</p>
-                    <el-select v-model="zhoBao.subProjectId" placeholder="请选择" clearable="true" style="width: 355px">
+                    <el-select v-model="zhoBao.subProjectId" :placeholder="$t('defaultText.pleaseChoose')" clearable="true" style="width: 355px">
                         <el-option v-for="item in zhoBao.subProjectList" :key="item.id" :label="item.name" :value="item.id"></el-option>
                     </el-select>
                 </div>
@@ -756,20 +756,20 @@
                 </div>
                 <div class="zhoFel" v-if="user.company.packageProject == 1 && zhoBao.stages != null && zhoBao.stages.length> 0">
                     <p>投入阶段</p>
-                    <el-select v-model="zhoBao.stage" placeholder="请选择" style="width: 355px" clearable="true" >
+                    <el-select v-model="zhoBao.stage" :placeholder="$t('defaultText.pleaseChoose')" style="width: 355px" clearable="true" >
                             <el-option v-for="item in zhoBao.stages" :key="item.id" :label="item.stagesName" :value="item.stagesName"></el-option>
                     </el-select>
                 </div>
                 <div class="zhoFel" >
                     <p>审核人</p>
-                    <el-select v-model="zhoBao.projectAuditorId" placeholder="请选择" clearable="true" style="width: 355px">
+                    <el-select v-model="zhoBao.projectAuditorId" :placeholder="$t('defaultText.pleaseChoose')" clearable="true" style="width: 355px">
                         <el-option v-for="item in zhoBao.auditUserList" :key="item.id" :label="item.auditorName" :value="item.auditorId"></el-option>
                     </el-select>
                 </div>
                 <!-- 自定义维度  -->
                 <div class="zhoFel" v-if="user.timeType.customDegreeActive">
                     <p>{{user.timeType.customDegreeName}}</p>
-                    <el-select v-model="zhoBao.degreeId" placeholder="请选择" clearable="true" style="width: 355px">
+                    <el-select v-model="zhoBao.degreeId" :placeholder="$t('defaultText.pleaseChoose')" clearable="true" style="width: 355px">
                         <el-option v-for="item in zhoBao.wuduList" :key="item.id" :label="item.name" :value="item.id"></el-option>
                     </el-select>
                     
@@ -790,7 +790,7 @@
                 </div>
                 <div class="zhoFel" v-if="reportTimeType.type == 1">
                     <p>选择时长</p>
-                    <el-select clearable v-model="zhoBao.workingTime" style="width: 355px;" placeholder="请选择工作时长">
+                    <el-select clearable v-model="zhoBao.workingTime" style="width: 355px;" :placeholder="$t('defaultText.pleaseSelectWorkingHours')">
                         <el-option v-for="item in timeRange" :key="item" :value="item.toFixed(1)">{{item.toFixed(1)}}</el-option>
                     </el-select>
                 </div>
@@ -847,7 +847,7 @@
                     ></el-date-picker>
                 </el-form-item>
                 <el-form-item prop="stateKey" label="是否包含">
-                    <el-select v-model="stateKey" placeholder="请选择" filterable style="width:350px;">
+                    <el-select v-model="stateKey" :placeholder="$t('defaultText.pleaseChoose')" filterable style="width:350px;">
                         <el-option label="不包含未审核" value="0"></el-option>
                         <el-option label="包含未审核" value="1"></el-option>
                     </el-select>

+ 7 - 0
fhKeeper/formulahousekeeper/timesheet_h5/public/index.html

@@ -13,6 +13,13 @@
     <!-- <script src="../src/assets/axios.min.js"></script> -->
     <!-- <script src="https://unpkg.com/axios/dist/axios.min.js"></script> -->
     <script src="./axios.min.js"></script> 
+    <script>
+        console.log('我被触发了')
+        window.onerror = function() {
+            console.log('出现脚本错误')
+            return true
+        }
+    </script>
     <meta name="wpk-bid" content="dta_2_71020"> <script>var isDingtalk = navigator && /DingTalk/.test(navigator.userAgent);var isProductEnv = window &&window.location &&window.location.host 
         && window.location.host.indexOf('//127.0.0.1')===-1
         && window.location.host.indexOf('//localhost')===-1

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

@@ -1654,7 +1654,7 @@
                         this.$toast.clear();
                         this.$toast.fail((this.isDraft==0?'提交失败':'暂存失败')+':'+res.msg);
                     }
-                }).catch(err=> {this.$toast.clear()});
+                }).catch(err=> {this.$toast.clear(),console.log(err, '异常')});
             },
             //初始化参数
             initWxConfig() {

+ 0 - 2
fhKeeper/formulahousekeeper/timesheet_h5/src/views/index/index.vue

@@ -41,8 +41,6 @@
             };
         },
         created() {
-            let index = this.active + 1;
-            this.list = this[`list${index}`]; // this.list1
         },
         mounted() {
             var ua = navigator.userAgent.toLowerCase();