Explorar o código

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

seyason %!s(int64=2) %!d(string=hai) anos
pai
achega
e88a243261

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

@@ -1006,5 +1006,11 @@ public class ProjectController {
     public HttpRespMsg removeDuplicateParticipators(Integer companyId, HttpServletRequest request){
         return projectService.removeDuplicateParticipators(companyId,request);
     }
+
+    //todo 同步项目相关数据
+    @RequestMapping("/synchronizationProject")
+    public HttpRespMsg synchronizationProject(String dataJson){
+        return projectService.synchronizationProject(dataJson);
+    }
 }
 

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

@@ -190,4 +190,6 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg fixParticipators(Integer companyId, HttpServletRequest request);
 
     HttpRespMsg removeDuplicateParticipators(Integer companyId, HttpServletRequest request);
+
+    HttpRespMsg synchronizationProject(String dataJson);
 }

+ 97 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -1,16 +1,27 @@
 package com.management.platform.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
 import com.management.platform.entity.*;
 import com.management.platform.entity.vo.*;
 import com.management.platform.mapper.*;
 import com.management.platform.service.*;
 import com.management.platform.util.*;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
 import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFRow;
@@ -164,6 +175,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     OperationRecordService operationRecordService;
     @Resource
     ProjectBasecostService projectBasecostService;
+    @Resource
+    ThirdPartyInterfaceService thirdPartyInterfaceService;
+    @Resource
+    ProjectSeparateService projectSeparateService;
 
 
     @Resource
@@ -973,11 +988,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return m;
     }
 
-    public static void main(String[] args) {
-        String startDate = "2020-12-01";
-        String endDate = "2021-01-31";
-    }
-
     private List<Integer> getBranchDepartment(Integer departmentId, List<Department> departmentList) {
         List<Integer> list = new ArrayList<>();
         list.add(departmentId);
@@ -5417,6 +5427,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 }else{
                     divide=new BigDecimal(0);
                 }
+                if(divide.compareTo(new BigDecimal(1))==1){
+                    divide=new BigDecimal(1);
+                    log.error("填报及时率数据异常:==="+user.getName());
+                }
                 String number = dft.format(divide);
                 timelinessRateVO.setTimelinessRate(String.valueOf(number));
             }
@@ -6452,6 +6466,84 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return msg;
     }
 
+    @Override
+    public HttpRespMsg synchronizationProject(String dataJson) {
+        JSONObject jsonObject = JSON.parseObject(dataJson);
+        JSONObject header = (JSONObject) jsonObject.get("header");
+        String token = String.valueOf(header.get("token"));
+        List<Project> projectList = JSON.parseArray(String.valueOf(jsonObject.get("projectArrays")), Project.class);
+        List<ProjectSeparate> projectSeparateList = JSON.parseArray(String.valueOf(jsonObject.get("projectSeparateArrays")), ProjectSeparate.class);
+        HttpRespMsg msg=new HttpRespMsg();
+        List<ThirdPartyInterface> thirdPartyInterfaceList = thirdPartyInterfaceService.list(new QueryWrapper<ThirdPartyInterface>().eq("token", token));
+        if(thirdPartyInterfaceList.size()==0){
+            msg.setError("token错误");
+            return msg;
+        }
+        ThirdPartyInterface thirdPartyInterface = thirdPartyInterfaceList.get(0);
+        if(LocalDateTime.now().isAfter(thirdPartyInterface.getExpireTime())){
+            msg.setError("token过期失效");
+            return msg;
+        }
+        List<Project> allProject = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", thirdPartyInterface.getCompanyId()));
+        String message="";
+        if(projectList!=null &&projectList.size()>0){
+            List<Project> changeProjectList=new ArrayList<>();
+            for (Project project : projectList) {
+                Optional<Project> first = allProject.stream().filter(ap -> ap.getProjectCode().equals(project.getProjectCode())).findFirst();
+                if(first.isPresent()){
+                    project.setId(first.get().getId());
+                    changeProjectList.add(project);
+                }
+            }
+            if(updateBatchById(changeProjectList)){
+                message+="成功更新"+changeProjectList.size()+"条项目数据";
+            }
+        }
+        if(projectSeparateList!=null&&projectSeparateList.size()>0){
+            if(projectSeparateService.updateBatchById(projectSeparateList)){
+                message+="成功更新"+projectSeparateList.size()+"条项目子表数据";
+            }
+        }
+        msg.data=message;
+        return msg;
+    }
+
+    public static void main(String[] args) {
+        Map params = new HashMap<>();
+        Map paramDataJson = new HashMap<>();
+        JSONArray projectArrays= new JSONArray();
+        Map header=new HashMap();
+        header.put("token","123456789");
+        paramDataJson.put("header",header);
+        JSONObject project=new JSONObject();
+        project.put("id",246);
+        project.put("projectName",1000);
+        projectArrays.add(project);
+        paramDataJson.put("projectArrays",projectArrays);
+        params.put("dataJson",paramDataJson);
+        //装填参数
+        List nvps = new ArrayList();
+        if(params!=null){
+            params.forEach((key, value) -> nvps.add(new BasicNameValuePair((String) key, JSONObject.toJSONString(value))));
+        }
+        System.out.println(nvps);
+        CloseableHttpResponse response;// 响应类
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        HttpPost httpPost=new HttpPost("http://localhost:10010/project/synchronizationProject");
+        httpPost.addHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
+        try {
+            httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
+            response = httpClient.execute(httpPost);
+            if (response != null && response.getEntity() != null) {
+                //返回信息
+                String resulString = EntityUtils.toString(response.getEntity());
+                //todo 这里处理返回信息
+                System.out.println("成功"+ resulString);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 
     private List<Department> getSubDepts(Department dp, List<Department> list) {
         List<Department> collect = list.stream().filter(l -> dp.getDepartmentId().equals(l.getSuperiorId())).collect(Collectors.toList());

+ 10 - 11
fhKeeper/formulahousekeeper/management-platform/src/main/resources/logback.xml

@@ -3,7 +3,7 @@
     <!-- 日志存放路径 ./表示当前运行目录-->
 	<property name="log.path" value="./" />
     <!-- 日志输出格式 -->
-	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
+	<property name="log.pattern" value="%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
 
 	<!-- 控制台输出 -->
 	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
@@ -18,21 +18,21 @@
         <!-- 循环政策:基于时间创建日志文件 -->
 		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
             <!-- 日志文件名格式 -->
-			<fileNamePattern>${log.path}/workTime.%d{yyyy-MM-dd}.log</fileNamePattern>
-			<!-- 日志最大的历史 60天 -->
-			<maxHistory>2</maxHistory>
+			<fileNamePattern>${log.path}/workTime.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
+			<!-- 日志最大的历史 2天 -->
+			<maxHistory>7</maxHistory>
 		</rollingPolicy>
 		<encoder>
 			<pattern>${log.pattern}</pattern>
 		</encoder>
-		<filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <!-- 过滤的级别 -->
+<!--	<filter class="ch.qos.logback.classic.filter.LevelFilter">
+            &lt;!&ndash; 过滤的级别 &ndash;&gt;
             <level>DEBUG</level>
-            <!-- 匹配时的操作:接收(记录) -->
+            &lt;!&ndash; 匹配时的操作:接收(记录) &ndash;&gt;
             <onMatch>ACCEPT</onMatch>
-            <!-- 不匹配时的操作:拒绝(不记录) -->
+            &lt;!&ndash; 不匹配时的操作:拒绝(不记录) &ndash;&gt;
             <onMismatch>DENY</onMismatch>
-        </filter>
+        </filter>-->
 	</appender>
 	
 	<!--<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
@@ -49,7 +49,7 @@
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             &lt;!&ndash; 过滤的级别 &ndash;&gt;
-            <level>ERROR</level>
+            <level>DEBUG</level>
 			&lt;!&ndash; 匹配时的操作:接收(记录) &ndash;&gt;
             <onMatch>ACCEPT</onMatch>
 			&lt;!&ndash; 不匹配时的操作:拒绝(不记录) &ndash;&gt;
@@ -83,7 +83,6 @@
 	<!--系统操作日志-->
     <root level="info">
         <appender-ref ref="file_info" />
-        <!--<appender-ref ref="file_error" />-->
     </root>
 	
 	<!--系统用户操作日志-->

+ 87 - 1
fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json

@@ -744,5 +744,91 @@
   "deletesupplier": "delete supplier",
   "barsupplierdata": "pieces of supplier data",
   "makesuretoremovethevendor": "Are you sure you want to delete the supplier",
-  "modifysupplier": "Modify supplier"
+  "modifysupplier": "Modify supplier",
+  "aketimeoffto": "Fill out the leave",
+  "all": "all",
+  "annualleavemanagement": "Annual leave management",
+  "for": "leave statistics",
+  "leaveApprovalProcess": "Leave approval process",
+  "myleaveform": "my leave form",
+  "scheduleofremainingLeave": "Holiday Remaining Table",
+  "singlelistofleave": "List of leave requests",
+  "staffleavetofillin": "Employee leave application",
+  "leavetype": "Type of leave",
+  "overtimhourscabeusedforoffsetting": "Overtime hours can be used to deduct time off",
+  "restcanbeadjusted": "Remaining adjustable time off",
+  "leavepeople": "ask for leave",
+  "phone": "Telephone",
+  "lengthunit": "Duration unit",
+  "accordingdays": "day off",
+  "leavehour": "leave by the hour",
+  "approver": "Approver",
+  "leavedays": "number of days off",
+  "leavetime": "Length of leave",
+  "pleaseselectthepersonaskingforleave": "Please select a leaver",
+  "offstate": "leave status",
+  "pleaseselectthetypeofleave": "Please select the type of leave",
+  "leaveendtime": "Leave end time",
+  "leavestarttime": "Leave start time",
+  "norequestforleaveatpresent": "No leave request",
+  "biao-ti": "title",
+  "pleaseenterstaffsearch": "Please enter a person to search",
+  "Nstatisticpresent": "No leave statistics",
+  "totaldaysleave": "Total number of days off",
+  "totallengthofleave": "Total time off",
+  "approvalprocessforleaveofdirect staff": "Immediate staff leave approval process",
+  "pleaseselectapprover": "Please select an approver",
+  "selectdepartmentsdesignatepersonnel": "Select a department/designate",
+  "annualleaveperyear": "Annual leave days",
+  "numberofannualleavedays": "Modify annual leave days",
+  "pleaseenterhepersonnamesearch": "Please enter person name to search",
+  "remainingdaysofannualleave": "Remaining annual leave days",
+  "screeningDepartment": "Filter by department",
+  "volumeset": "Batch settings",
+  "pleasesetthetimelimitforannualleave": "Please set the time limit for annual leave",
+  "setthenumberofannualleavedaysperyear": "Set the number of annual leave days",
+  "pleaseenterdays": "Please enter the number of days",
+  "departmentofscreening": "Department screening",
+  "personnelselection": "Personnel screening",
+  "synchronizefromStaple": "Sync from DingTalk",
+  "beenused": "Used",
+  "combination": "total amount",
+  "leaveForm": "Details of leave request",
+  "periodofvalidity": "Validity period",
+  "remainingamount": "Remaining quota",
+  "phonenumbercannotbeempty": "Mobile number cannot be empty",
+  "pleaseenterthecorrectcellphonenumber": "please enter a valid phone number",
+  "daysbeyondthecurrentlyselecteddat": "Days past the currently selected date",
+  "leavedayscannotbeempty": "The number of days of leave cannot be empty",
+  "annualleaveisallowed": "Annual leave report",
+  "leaveisallowed": "Sick leave",
+  "maternityleaveisallowed": "maternity leave",
+  "personalleaveisallowed": "personal leave report",
+  "configureanapprover": "There is currently no approver, please contact the administrator to configure the approver",
+  "synchronoussuccess": "Sync succeeded",
+  "selecttheitemsyouwanttobatchset": "Please select items to set in bulk",
+  "designatedpersonnel": "designated person",
+  "deleteit": "Are you sure you want to delete?",
+  "chartY": "Chart Y axis:",
+  "accordingtothecost": "show cost",
+  "accordingtoworkinghours": "Show hours",
+  "projectclassification": "Types of section",
+  "zhu-xiang-mu": "main project",
+  "returnsuperior": "Return to the upper level",
+  "timeReportExport": "Time report export",
+  "departmentchoice": "Department selection",
+  "classificationitems": "All project categories",
+  "choosethestyle": "Choose a style",
+  "Itemontheline": "item on line",
+  "classifiedcolumns": "Items are categorized on columns",
+  "classifiedontheline": "Items are categorized on the line",
+  "itemisonthecolumn": "item on column",
+  "individualprojectdata": "Data summary with a single project",
+  "departmenthourscoststatistics": "Departmental labor cost statistics",
+  "labortimecoststatistics": "Staff hourly cost statistics",
+  "otalhourscost": "Total labor cost",
+  "projectclassificationlaborosttatistics": "Project classification labor cost statistics",
+  "projectmanhourcoststatistics": "Project labor cost statistics",
+  "statistical": "statistics",
+  "zong-ji": "total"
 }

+ 87 - 1
fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json

@@ -744,5 +744,91 @@
   "deletesupplier": "删除供应商",
   "barsupplierdata": "条供应商数据",
   "modifysupplier": "修改供应商",
-  "makesuretoremovethevendor": "确定要删除供应商"
+  "makesuretoremovethevendor": "确定要删除供应商",
+  "staffleavetofillin": "员工请假填报",
+  "all": "全部",
+  "singlelistofleave": "请假单列表",
+  "myleaveform": "我的请假单",
+  "for": "请假统计",
+  "leaveApprovalProcess": "请假审批流程",
+  "annualleavemanagement": "年假管理",
+  "scheduleofremainingLeave": "假期剩余表",
+  "aketimeoffto": "请假填报",
+  "leavetype": "请假类型",
+  "restcanbeadjusted": "剩余可调休",
+  "overtimhourscabeusedforoffsetting": "加班时长可用于调休抵扣",
+  "leavepeople": "请假人",
+  "phone": "电话",
+  "lengthunit": "时长单位",
+  "accordingdays": "按天请假",
+  "leavehour": "按小时请假",
+  "approver": "审批人",
+  "leavedays": "请假天数",
+  "leavetime": "请假时长",
+  "pleaseselectthepersonaskingforleave": "请选择请假人",
+  "offstate": "请假状态",
+  "pleaseselectthetypeofleave": "请选择请假类型",
+  "leavestarttime": "请假开始时间",
+  "leaveendtime": "请假结束时间",
+  "norequestforleaveatpresent": "暂无请假单",
+  "biao-ti": "标题",
+  "pleaseenterstaffsearch": "请输入人员搜索",
+  "Nstatisticpresent": "暂无请假统计",
+  "totaldaysleave": "请假总天数",
+  "totallengthofleave": "请假总时长",
+  "approvalprocessforleaveofdirect staff": "直属人员请假审批流程",
+  "pleaseselectapprover": "请选择审批人",
+  "selectdepartmentsdesignatepersonnel": "选择部门/指定人员",
+  "volumeset": "批量设置",
+  "pleaseenterhepersonnamesearch": "请输入人员姓名搜索",
+  "screeningDepartment": "按部门筛选",
+  "annualleaveperyear": "每年年假天数",
+  "remainingdaysofannualleave": "剩余年假天数",
+  "numberofannualleavedays": "修改年假天数",
+  "pleasesetthetimelimitforannualleave": "请设置年假时限",
+  "setthenumberofannualleavedaysperyear": "设置每年年假天数",
+  "pleaseenterdays": "请输入天数",
+  "departmentofscreening": "部门筛选",
+  "personnelselection": "人员筛选",
+  "synchronizefromStaple": "从钉钉同步",
+  "periodofvalidity": "有效期",
+  "combination": "总额度",
+  "beenused": "已使用",
+  "remainingamount": "剩余额度",
+  "leaveForm": "请假单详情",
+  "phonenumbercannotbeempty": "手机号不能为空",
+  "pleaseenterthecorrectcellphonenumber": "请输入正确的手机号",
+  "leavedayscannotbeempty": "请假天数不能为空",
+  "daysbeyondthecurrentlyselecteddat": "超过当前选择日期的天数",
+  "personalleaveisallowed": "事假填报",
+  "leaveisallowed": "病假填报",
+  "annualleaveisallowed": "年假填报",
+  "maternityleaveisallowed": "产假填报",
+  "synchronoussuccess": "同步成功",
+  "configureanapprover": "当前无审批人,请联系管理员配置审批人",
+  "selecttheitemsyouwanttobatchset": "请选择要批量设置的项",
+  "designatedpersonnel": "指定人员",
+  "deleteit": "确认要删除吗?",
+  "chartY": "图表Y轴:",
+  "accordingtothecost": "显示成本",
+  "accordingtoworkinghours": "显示工时",
+  "zhu-xiang-mu": "主项目",
+  "projectclassification": "项目分类",
+  "returnsuperior": "返回上级",
+  "timeReportExport": "工时报表导出",
+  "departmentchoice": "部门选择",
+  "classificationitems": "全部项目分类",
+  "choosethestyle": "选择样式",
+  "classifiedontheline": "项目分类在行上",
+  "Itemontheline": "项目在行上",
+  "classifiedcolumns": "项目分类在列上",
+  "itemisonthecolumn": "项目在列上",
+  "individualprojectdata": "含单个项目数据汇总",
+  "projectmanhourcoststatistics": "项目工时成本统计",
+  "labortimecoststatistics": "人员工时成本统计",
+  "projectclassificationlaborosttatistics": "项目分类工时成本统计",
+  "departmenthourscoststatistics": "部门工时成本统计",
+  "statistical": "统计",
+  "otalhourscost": "工时成本总计",
+  "zong-ji": "总计"
 }

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

@@ -1,7 +1,7 @@
 <template>
   <section id="section">
     <div class="sidebars" ref="sidebars" :style="'width: 180px;display: block;overflow:hidden;background: #fff;height:'+hubs+ 'px'">
-      <h3><i class="iconfont firerock-iconbaoxiao" style="padding-right: 10px"></i>请假管理</h3>
+      <h3><i class="iconfont firerock-iconbaoxiao" style="padding-right: 10px"></i>{{ $t('navigation.askForLeaveManagement') }}</h3>
       <el-divider ></el-divider>
       <el-col :span="12">
         <el-menu :default-active="isDingding ? '7' : '1'" class="el-menu-vertical-demo" @select="staffs" background-color="#ffffff" text-color="#666666" active-text-color="#20A0FF" style="width:100%">
@@ -18,38 +18,38 @@
           <template v-if="!isDingding">
           <el-menu-item index="1" v-if="permissions.leaveFil">
             <i class="iconfont firerock-icontianbao"></i>
-            <span slot="title">员工请假填报</span>
+            <span slot="title">{{ $t('staffleavetofillin') }}</span>
           </el-menu-item>
           <el-submenu index="2" v-if="permissions.leaveAll">
             <template slot="title">
               <i class="iconfont firerock-iconbaoxiaodan"></i>
-              <span>{{"请假单列表"}}</span>
+              <span>{{ $t('singlelistofleave') }}</span>
             </template>
-            <el-menu-item index="2-1" ><p @click="bills(false, 2)" v-if="permissions.leaveAll">全部</p></el-menu-item>
-            <el-menu-item index="2-2" ><p @click="bills(true, 1)" v-if="permissions.leaveAudit">待审核</p></el-menu-item>
+            <el-menu-item index="2-1" ><p @click="bills(false, 2)" v-if="permissions.leaveAll">{{ $t('all') }}</p></el-menu-item>
+            <el-menu-item index="2-2" ><p @click="bills(true, 1)" v-if="permissions.leaveAudit">{{ $t('state.WaitingAudit') }}</p></el-menu-item>
           </el-submenu>
             <el-menu-item index="3" @select="bills" @click="bills(false, 2)" v-if="!permissions.leaveAll">
               <i class="iconfont firerock-iconbaoxiaodan"></i>
-              <span slot="title">我的请假单</span>
+              <span slot="title">{{ $t('myleaveform') }}</span>
             </el-menu-item>
             <el-menu-item index="4" v-if="permissions.leaveStatistical">
               <template slot="title">
                 <i class="iconfont firerock-icontianbao"></i>
-                <span slot="title">请假统计</span>
+                <span slot="title">{{ $t('for') }}</span>
               </template>
           </el-menu-item>
 
           <el-menu-item index="5" v-if="permissions.leaveProcess">
               <template slot="title">
                 <i class="iconfont firerock-iconliucheng"></i>
-                <span slot="title">请假审批流程</span>
+                <span slot="title">{{ $t('leaveApprovalProcess') }}</span>
               </template>
           </el-menu-item>
 
           <el-menu-item index="6" v-if="permissions.leaveAnnual">
               <template slot="title">
                 <i class="iconfont firerock-icontianbao"></i>
-                <span slot="title">年假管理</span>
+                <span slot="title">{{ $t('annualleavemanagement') }}</span>
               </template>
           </el-menu-item>
           </template>
@@ -59,13 +59,13 @@
             <el-menu-item index="7">
                 <template slot="title">
                   <i class="iconfont firerock-iconbaoxiaodan"></i>
-                  <span slot="title">请假单列表</span>
+                  <span slot="title">{{ $t('singlelistofleave') }}</span>
                 </template>
             </el-menu-item>
             <el-menu-item index="8">
                 <template slot="title">
                   <i class="iconfont firerock-iconbaoxiaodan"></i>
-                  <span slot="title">假期剩余表</span>
+                  <span slot="title">{{ $t('scheduleofremainingLeave') }}</span>
                 </template>
             </el-menu-item>
           </template>
@@ -81,7 +81,7 @@
     <!-- 内容主体区域 -->
   <div class="contents">
     <div v-if="!displayTable && !isDingding" class="headine" ref="headine">
-      <h3 ref="headHe" style="padding-left: 220px">请假填报</h3>
+      <h3 ref="headHe" style="padding-left: 220px">{{ $t('aketimeoffto') }}</h3>
       <!-- <p style="float: right;margin-right: 25px;"><el-button type="primary" @click="submits('addFormRules')" size="mini">提交</el-button></p> -->
     </div>
     <!-- 上面部分 -->
@@ -91,41 +91,41 @@
             <!-- 表单 -->
             <el-form ref="addForm" :model="addForm" label-width="80px" :rules="addFormRules">
                 <!-- 请假类型 -->
-                <el-form-item label="请假类型" prop="leaveType" style="width: 100%">
+                <el-form-item :label="$t('leavetype')" prop="leaveType" style="width: 100%">
                     <!--普通员工只能自己填报自己的 -->
-                    <el-select v-model="addForm.leaveType" @change="txselts(addForm.leaveType,addForm.ownerId)" placeholder="请选择请假类型" style="width: 240px">
+                    <el-select v-model="addForm.leaveType" @change="txselts(addForm.leaveType,addForm.ownerId)" :placeholder="$t('defaultText.pleaseChoose')" style="width: 240px">
                           <el-option v-for="item in qjType" :key="item.id" :label="item.name" :value="item.id"></el-option>
                     </el-select>
                     <template  v-if="addForm.leaveType == 6">
-                      <span style="margin-left:18px;color:#777;">剩余可调休 {{addForm.ownerId != '' ? txselnum : '~'}} 天</span>
-                      <el-tooltip effect="dark" content="加班时长可用于调休抵扣" placement="top-start">
+                      <span style="margin-left:18px;color:#777;">{{ $t('restcanbeadjusted') }} {{addForm.ownerId != '' ? txselnum : '~'}} {{ $t('time.day') }}</span>
+                      <el-tooltip effect="dark" :content="$t('overtimhourscabeusedforoffsetting')" placement="top-start">
                         <i class="el-icon-question" style="color:#606266;"></i>
                       </el-tooltip>
                     </template>
                 </el-form-item>
                 <!-- 请假人 -->
-                <el-form-item label="请假人" prop="ownerId"  style="width: 300px">
+                <el-form-item :label="$t('leavepeople')" prop="ownerId"  style="width: 300px">
                     <!--普通员工只能自己填报自己的 -->
-                    <el-select v-model="addForm.ownerId" @change="txselts(addForm.leaveType,addForm.ownerId)" placeholder="请选择请假人" style="width: 240px" :disabled="true" filterable="true">
+                    <el-select v-model="addForm.ownerId" @change="txselts(addForm.leaveType,addForm.ownerId)" :placeholder="$t('defaultText.pleaseChoose')" style="width: 240px" :disabled="true" filterable="true">
                         <span v-for="(item, index) in users" :key="index">
                         <el-option :label="item.name" :value="item.id"></el-option>
                         </span> 
                     </el-select>
                 </el-form-item>
                 <!-- 电话 -->
-                <el-form-item label="电话" prop="tel" style="margin-right:300px">
-                    <el-input ref="ipts" v-model="addForm.tel" placeholder="请输入手机号" style="width: 250px"></el-input>
+                <el-form-item :label="$t('phone')" prop="tel" style="margin-right:300px">
+                    <el-input ref="ipts" v-model="addForm.tel" :placeholder="$t('peaseenterthe')" style="width: 250px"></el-input>
                 </el-form-item>
                 <!-- 单选 -->
-                <el-form-item style="display: inline-block;width:300px" label="时长单位">
+                <el-form-item style="display: inline-block;width:300px" :label="$t('lengthunit')">
                     <el-radio-group v-model="addForm.timeType" @change="chanRadio()" style="display:inline-block;width:240px">
-                        <el-radio label="0">按天请假</el-radio>
-                        <el-radio label="1" v-if="addForm.leaveType != 6">按小时请假</el-radio>
+                        <el-radio label="0">{{ $t('accordingdays') }}</el-radio>
+                        <el-radio label="1" v-if="addForm.leaveType != 6">{{ $t('leavehour') }}</el-radio>
                     </el-radio-group>
                 </el-form-item>
                 <!-- 选择审批人 -->
-                <el-form-item label="审批人" style="width:300px" prop="projectAuditorJson">
-                    <el-select style="display:inline-block;width:250px;" multiple v-model="addForm.projectAuditorJson" placeholder="请选择">
+                <el-form-item :label="$t('approver')" style="width:300px" prop="projectAuditorJson">
+                    <el-select style="display:inline-block;width:250px;" multiple v-model="addForm.projectAuditorJson" :placeholder="$t('defaultText.pleaseChoose')">
                       <el-option
                       v-for="item in approverList"
                       :key="item.id"
@@ -135,36 +135,36 @@
                     </el-select>
                 </el-form-item>
                 <!-- 时间选择 -->
-                <el-form-item :label="flg ? '选择日期' : '选择时间'" style="width: 100%;">
+                <el-form-item :label="flg ? $t('optiondate') : $t('other.timeSelection')" style="width: 100%;">
                     <el-col style="display: inline-block; width: 240px">
-                        <el-date-picker v-if="flg" type="date" placeholder="开始日期" value-format="yyyy-MM-dd"  v-model="addForm.startDate" style="width: 240px;" @blur="datas()"></el-date-picker>
-                        <el-date-picker v-else type="date" placeholder="开始日期" value-format="yyyy-MM-dd" v-model="addForm.startDate" style="width: 240px;" @change="datasss()"></el-date-picker>
+                        <el-date-picker v-if="flg" type="date" :placeholder="$t('time.startDate')" value-format="yyyy-MM-dd"  v-model="addForm.startDate" style="width: 240px;" @blur="datas()"></el-date-picker>
+                        <el-date-picker v-else type="date" :placeholder="$t('time.startDate')" value-format="yyyy-MM-dd" v-model="addForm.startDate" style="width: 240px;" @change="datasss()"></el-date-picker>
                     </el-col>
                     <el-col class="line" v-if="flg" style="display: inline-block; width: 50px">-</el-col>
                     <el-col style="display: inline-block; width: 240px">
-                        <el-date-picker v-if="flg" type="date" placeholder="结束日期" value-format="yyyy-MM-dd" :picker-options="pickerOptionsEnd" v-model="addForm.endDate" style="width: 250px;" @blur="datas()"></el-date-picker>
+                        <el-date-picker v-if="flg" type="date" :placeholder="$t('time.endDate')" value-format="yyyy-MM-dd" :picker-options="pickerOptionsEnd" v-model="addForm.endDate" style="width: 250px;" @blur="datas()"></el-date-picker>
                         <!-- <el-select v-else v-model="addForm.timeHours" placeholder="请假时长" @change="chanSele()">
                             <el-option v-for="(item, index) in options" :key="index" :label="item" :value="item"></el-option>
                         </el-select> -->
                     </el-col>
                 </el-form-item>
                 <!-- 请假天数 -->
-                <el-form-item :label="flg ? '请假天数' : '请假时长'" prop="timeDays" style="margin-right: 500px">
+                <el-form-item :label="flg ? $t('leavedays') : $t('leavetime')" prop="timeDays" style="margin-right: 500px">
                    <!-- {{flg ? addForm.timeDays : addForm.timeHours}}{{flg ? '天' : '小时'}} -->
                    <!-- <div v-if="flg">{{addForm.timeDays}} 天</div> -->
-                   <div v-if="flg"> <el-input v-model="addForm.timeDays" @blur="inputs()" @input="addForm.timeDays=addForm.timeDays.replace(/[^\d.]/g,'')" style="width: 120px; margin-right: 20px;" type="number" :step="0.5"></el-input> </div>
+                   <div v-if="flg"> <el-input v-model="addForm.timeDays" @blur="inputs()" @input="addForm.timeDays=addForm.timeDays.replace(/[^\d.]/g,'')" style="width: 120px; margin-right: 20px;" type="number" :step="0.5"></el-input> {{ $t('time.day') }}</div>
                    <div v-else>
-                      <el-input v-model="addForm.timeHours" @blur="inputss()" @input="addForm.timeHours=addForm.timeHours.replace(/[^\d.]/g,'')" style="width: 120px; margin-right: 20px;"></el-input> 小时
+                      <el-input v-model="addForm.timeHours" @blur="inputss()" @input="addForm.timeHours=addForm.timeHours.replace(/[^\d.]/g,'')" style="width: 120px; margin-right: 20px;"></el-input> {{ $t('time.hour') }}
                    </div>
                 </el-form-item>
                 <!-- 备注 -->
-                <el-form-item label="备注" style="width: 100%">
+                <el-form-item :label="$t('bei-zhu')" style="width: 100%">
                     <el-input type="textarea" v-model="addForm.remark" :rows="5" style="width: 550px" maxlength="100" show-word-limit></el-input>
                 </el-form-item>
             </el-form>
 
             <div>
-              <p style="margin-left: 20%"><el-button type="primary" @click="submits('addFormRules')" size="mini" :disabled="txselnum == 0 && addForm.leaveType == 6 && addForm.ownerId != '' ? true : false">提交</el-button></p>
+              <p style="margin-left: 20%"><el-button type="primary" @click="submits('addFormRules')" size="mini" :disabled="txselnum == 0 && addForm.leaveType == 6 && addForm.ownerId != '' ? true : false">{{ $t('btn.submit') }}</el-button></p>
             </div>
         </div>
     </div>
@@ -175,28 +175,28 @@
         <div class="ctons" style="width: 98%;">
           <div class="flex">
             <div>
-              <el-select v-model="ownerIds" placeholder="请选择请假人" clearable @change="chufas()" style="width: 160px" size="small" v-show="permissions.leaveAll" filterable="true">
+              <el-select v-model="ownerIds" :placeholder="$t('pleaseselectthepersonaskingforleave')" clearable @change="chufas()" style="width: 160px" size="small" v-show="permissions.leaveAll" filterable="true">
                   <span v-for="(item, index) in users" :key="index">
                   <el-option :label="item.name" :value="item.id"></el-option>
                   </span> 
               </el-select>
             </div>
             <div>
-              <span style="color: #606266">请假类型</span>
-              <el-select v-model="type" placeholder="请选择请假类型" clearable @change="chufas()" style="width: 160px;" size="small" filterable="true">
+              <span style="color: #606266">{{ $t('leavetype') }}</span>
+              <el-select v-model="type" :placeholder="$t('defaultText.pleaseChoose')" clearable @change="chufas()" style="width: 160px;" size="small" filterable="true">
                   <span v-for="(item, index) in typess" :key="index">
                   <el-option :label="item.name" :value="item.id"></el-option>
                   </span> 
               </el-select>
             </div>
             <div>
-              <span style="color: #606266">请假状态</span>
-              <el-select v-if="falg == 0" v-model="code" placeholder="请选择请假状态" clearable @change="chufas()" size="small" style="width: 160px" filterable="true">
+              <span style="color: #606266">{{$t('offstate')}}</span>
+              <el-select v-if="falg == 0" v-model="code" :placeholder="$t('defaultText.pleaseChoose')" clearable @change="chufas()" size="small" style="width: 160px" filterable="true">
                   <span v-for="(item, index) in statuss" :key="index">
                   <el-option :label="item.name" :value="item.id"></el-option>
                   </span> 
               </el-select>
-              <el-select v-if="falg == 1" disabled v-model="code" placeholder="请选择请假类型" clearable @change="chufas()" size="small" style="width: 160px" filterable="true">
+              <el-select v-if="falg == 1" disabled v-model="code" :placeholder="$t('pleaseselectthetypeofleave')" clearable @change="chufas()" size="small" style="width: 160px" filterable="true">
                   <span v-for="(item, index) in statuss" :key="index">
                   <el-option :label="item.name" :value="item.id"></el-option>
                   </span> 
@@ -205,14 +205,14 @@
             <div>
               <!-- <span style="color: #606266">请假时间</span>
               <el-date-picker v-model="createDate" type="date" @change="chufas()" value-format="yyyy-MM-dd" placeholder="选择日期" size="small" clearable="false"> </el-date-picker> -->
-                <span style="color: #606266">时间段</span>
-                <el-date-picker v-model="createDate" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="chufas()" value-format="yyyy-MM-dd" placeholder="选择日期" size="small" clearable style="width:280px"></el-date-picker>
+                <span style="color: #606266">{{ $t('message.period') }}</span>
+                <el-date-picker v-model="createDate" type="daterange" :range-separator="$t('other.to')" :start-placeholder="$t('time.startDate')" :end-placeholder="$t('time.endDate')" @change="chufas()" value-format="yyyy-MM-dd" :placeholder="$t('optiondate')" size="small" clearable style="width:280px"></el-date-picker>
             </div>
           </div>
             <el-table v-loading="loading" :data="tableData" style="width: 100%" height="94%">
-                <el-table-column prop="ownerName" :label="'请假人'" min-width="120" fixed="left"></el-table-column>
-                <el-table-column prop="tel" label="电话" min-width="120"></el-table-column>
-                <el-table-column prop="leaveType" label="请假类型" min-width="120">
+                <el-table-column prop="ownerName" :label="$t('leavepeople')" min-width="120" fixed="left"></el-table-column>
+                <el-table-column prop="tel" :label="$t('phone')" min-width="120"></el-table-column>
+                <el-table-column prop="leaveType" :label="$t('leavetype')" min-width="120">
                   <template slot-scope="scope">
                     <!-- <div v-if="scope.row.leaveType == 0">事假</div>
                     <div v-if="scope.row.leaveType == 1">病假</div>
@@ -221,41 +221,41 @@
                     {{qjType[scope.row.leaveType].name}}
                   </template>
                 </el-table-column>
-                <el-table-column prop="startDate" label="请假开始时间" min-width="150"></el-table-column>
-                <el-table-column prop="endDate" label="请假结束时间" min-width="150"></el-table-column>
-                <el-table-column label="请假天数" min-width="120">
+                <el-table-column prop="startDate" :label="$t('leavestarttime')" min-width="150"></el-table-column>
+                <el-table-column prop="endDate" :label="$t('leaveendtime')" min-width="150"></el-table-column>
+                <el-table-column :label="$t('leavedays')" min-width="120">
                   <template slot-scope="scope">
                     <div v-if="scope.row.timeType == '1'">/</div>
-                    <div v-else>{{scope.row.timeDays}}</div>
+                    <div v-else>{{scope.row.timeDays}} {{ $t('time.day') }}</div>
                   </template>
                 </el-table-column>
-                <el-table-column label="请假时长" min-width="120" v-if="!user.timeType.syncDingding">
+                <el-table-column :label="$t('leavetime')" min-width="120" v-if="!user.timeType.syncDingding">
                   <template slot-scope="scope">
-                    <div>{{scope.row.timeHours}}小时</div>
+                    <div>{{scope.row.timeHours}} {{ $t('time.hour') }}</div>
                   </template>
                 </el-table-column>
-                <el-table-column prop="status" label="状态" min-width="100">
+                <el-table-column prop="status" :label="$t('state.states')" min-width="100">
                   <template slot-scope="scope">
                     <div v-if="scope.row.status == 0 || scope.row.status == 1 || scope.row.status == 2 || scope.row.status == 3 || scope.row.status == 4">
-                      <div v-if="scope.row.status == 0" >审核通过</div>
-                      <div v-if="scope.row.status == 1" style="color: orange">待审核</div>
-                      <div v-if="scope.row.status == 2" style="color: red">驳回</div>
-                      <div v-if="scope.row.status == 3" style="color: #666666">撤销</div>
+                      <div v-if="scope.row.status == 0" >{{ $t('state.approved') }}</div>
+                      <div v-if="scope.row.status == 1" style="color: orange">{{ $t('state.WaitingAudit') }}</div>
+                      <div v-if="scope.row.status == 2" style="color: red">{{ $t('btn.rejected') }}</div>
+                      <div v-if="scope.row.status == 3" style="color: #666666">{{ $t('btn.undo') }}</div>
                     </div>
                     <div v-else>
-                      <span>暂无请假单</span>
+                      <span>{{ $t('norequestforleaveatpresent') }}</span>
                     </div>
                   </template>
                 </el-table-column>
-                <el-table-column prop="remark" label="备注" min-width="200" header-align="center">
+                <el-table-column prop="remark" :label="$t('bei-zhu')" min-width="200" header-align="center">
                   <template slot-scope="scope">
                     <!-- <div class="apls">{{scope.row.remark}}</div> -->
-                    <el-popover placement="top-start" title="标题" width="200" trigger="hover" :content="scope.row.remark">
+                    <el-popover placement="top-start" :title="$t('biao-ti')" width="200" trigger="hover" :content="scope.row.remark">
                       <div slot="reference" class="apls">{{scope.row.remark}}</div>
                     </el-popover>
                   </template>
                 </el-table-column>
-                <el-table-column label="操作" min-width="180" fixed="right" v-if="isAuditList && !isDingding">
+                <el-table-column :label="$t('operation')" min-width="180" fixed="right" v-if="isAuditList && !isDingding">
                     <template slot-scope="scope">
                       <div>
                         <el-button icon="el-icon-check" circle size="mini" @click.stop.native="approve(scope.row)"></el-button>
@@ -263,7 +263,7 @@
                       </div>
                     </template>
                 </el-table-column>
-                <el-table-column label="操作" min-width="180" fixed="right" v-if="!isAuditList && !isDingding">
+                <el-table-column :label="$t('operation')" min-width="180" fixed="right" v-if="!isAuditList && !isDingding">
                     <template slot-scope="scope">
                       <div v-if="(scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.leaveAll">
                         <el-button icon="el-icon-delete" circle size="mini"  @click.stop.native="deletes(scope.row)" ></el-button>
@@ -305,16 +305,16 @@
         <div class="ctons" style="width: 98%;">
           <div style="display: flex;align-items: center;padding-bottom: 20px;border-bottom: 1px solid #f2f2f2">
             <div style="display: inline-block;width: 350px">
-              <el-input style="float:left;" v-model="keyword" class="input-with-select" placeholder="请输入人员搜索" clearable="true" size="small">
+              <el-input style="float:left;" v-model="keyword" class="input-with-select" :placeholder="$t('pleaseenterstaffsearch')" clearable="true" size="small">
                   <el-button slot="append" @click="statistical()" icon="el-icon-search"></el-button>
               </el-input>
             </div>
             <div style="display: inline-block;width: 340px">
-              <span style="display: inline-block;margin: 0 15px 0 20px;color: rgb(96, 98, 102);">开始日期</span>
+              <span style="display: inline-block;margin: 0 15px 0 20px;color: rgb(96, 98, 102);">{{ $t('time.startDate') }}</span>
               <el-date-picker
                 v-model="statData"
                 type="date"
-                placeholder="选择日期"
+                :placeholder="$t('optiondate')"
                 size="small"
                 @change="statistical()"
                 clearable="false"
@@ -323,11 +323,11 @@
               </el-date-picker>
             </div>
             <div style="display: inline-block;width: 350px">
-              <span style="display: inline-block;margin: 0 15px 0 0;color: rgb(96, 98, 102);">结束日期</span>
+              <span style="display: inline-block;margin: 0 15px 0 0;color: rgb(96, 98, 102);">{{ $t('time.endDate') }}</span>
               <el-date-picker
                 v-model="endData"
                 type="date"
-                placeholder="选择日期"
+                :placeholder="$t('optiondate')"
                 size="small"
                 @change="statistical()"
                 clearable="fasle"
@@ -339,24 +339,24 @@
           <!-- <div style="margin-top: 30px"> -->
           <div>
             <el-table key="apk2is4" v-loading="loading" :data="statisticalList" height="780px" style="width: 99%">
-              <el-table-column prop="ownerName" label="姓名" width="300">
+              <el-table-column prop="ownerName" :label="$t('lable.name')" width="300">
                 <template slot-scope="scope">
                     <div v-if="scope.row.ownerName">
                       {{scope.row.ownerName}}
                     </div>
                     <div v-else>
-                      <span>暂无请假统计</span>
+                      <span>{{ $t('Nstatisticpresent') }}</span>
                     </div>
                   </template>
               </el-table-column>
-              <el-table-column prop="timeDays" label="请假总天数" width="300">
+              <el-table-column prop="timeDays" :label="$t('totaldaysleave')" width="300">
                 <template slot-scope="scope">
-                    {{scope.row.timeDays}}/天
+                    {{scope.row.timeDays}} / {{ $t('time.day') }}
                   </template>
               </el-table-column>
-              <el-table-column prop="timeHours" label="请假总时长">
+              <el-table-column prop="timeHours" :label="$t('totallengthofleave')">
                 <template slot-scope="scope">
-                    {{scope.row.timeHours}}/小时
+                    {{scope.row.timeHours}}/{{ $t('time.hour') }}
                   </template>
               </el-table-column>
             </el-table>
@@ -378,14 +378,14 @@
         <el-col :span="18" >
             <el-scrollbar style="height:100%;border:1px solid #dddddd;margin-right:20px;" >
             <div class="tree" :style="'height:'+ (tableHeight-120) + 'px'">
-                <div style="padding:5px;color:#333;" v-if="depData != null">设置 &lt;<span style="color:#20a0ff;">{{depData.label}}&gt;</span> 直属人员请假审批流程
+                <div style="padding:5px;color:#333;" v-if="depData != null">{{ $t('setup') }} &lt;<span style="color:#20a0ff;">{{depData.label}}&gt;</span> {{ $t('approvalprocessforleaveofdirect staff') }}
                     <el-tooltip effect="dark" v-if="depData != null && depData.children!=null" content="仅适用于当前部门的直属人员,子部门人员的审批流程需要单独设置" placement="top-start">
                     <i class="el-icon-question"></i>
                     </el-tooltip>
                 </div>
-                <div style="padding:5px;" v-if="depData == null">请选择部门</div>
+                <div style="padding:5px;" v-if="depData == null">{{ $t('qing-xuan-ze-bu-men') }}</div>
                 <div style="width:100%;margin:0 auto;text-align: center; margin-top:50px;" v-if="depData != null">
-                    <span>员工填报</span>
+                    <span>{{ $t('employeeisallowed') }}</span>
                     <icon class="iconfont firerock-iconright"></icon>
                     <icon class="iconfont firerock-iconInsertLine addNode" @click="showNodeDialog(0)"></icon>
                     <icon class="iconfont firerock-iconright"></icon>
@@ -402,11 +402,11 @@
 
                     <!--结束点 -->
                     <icon class="iconfont firerock-iconApp_New_Line" style="color:#20A0FF;"></icon>
-                    审批完成
-                </div>
+                    {{ $t('approvaltocomplete') }} 
+                  </div>
 
                 <div style="width:100%;margin:0 auto;margin-bottom:30px;position: absolute;bottom: 0px;text-align: center; ">
-                    <el-button type="primary" @click="submitInsert" :loading="addLoading">保存</el-button>
+                    <el-button type="primary" @click="submitInsert" :loading="addLoading">{{ $t('save') }}</el-button>
                 </div>
             </div>
             </el-scrollbar>
@@ -415,16 +415,16 @@
         </div>
 
         <!--部门选择列表 -->
-        <el-dialog  title="请选择审批人" v-if="dialogVisible" :visible.sync="dialogVisible"  width="460px">
+        <el-dialog  :title="$t('pleaseselectapprover')" v-if="dialogVisible" :visible.sync="dialogVisible"  width="460px">
               <el-form label-width="140px">
-              <el-form-item label="选择部门/指定人员" >
-                  <el-cascader filterable ref="deptCascader"  v-model="curDeptId" placeholder="请选择部门/指定人员" style="width: 100%" @change="chooseDept"
+              <el-form-item :label="$t('selectdepartmentsdesignatepersonnel')" >
+                  <el-cascader filterable ref="deptCascader"  v-model="curDeptId" :placeholder="$t('defaultText.pleaseChoose')" style="width: 100%" @change="chooseDept"
                     :options="soption" :props="{ checkStrictly: true,expandTrigger: 'hover' }" :show-all-levels="false" clearable></el-cascader>
               </el-form-item>
               </el-form>
             <div slot="footer" class="dialog-footer">
-              <el-button type="default" @click="deleteNode" v-if="!isAdd" style="float:left;">删除</el-button>
-                <el-button type="primary" @click="addNode" >确定</el-button>
+              <el-button type="default" @click="deleteNode" v-if="!isAdd" style="float:left;">{{ $t('btn.delete') }}</el-button>
+                <el-button type="primary" @click="addNode" >{{ $t('btn.determine') }}</el-button>
             </div>
         </el-dialog>
 
@@ -434,20 +434,20 @@
       <div class="ctons" style="width: 98%;">
         <div style="display: flex;align-items: center;padding-bottom: 20px;border-bottom: 1px solid #f2f2f2">
             <div style="display: inline-block;width: 18%;margin-left:1%">
-              <el-button size="small" @click="changeAltime(0)">批量设置</el-button>
+              <el-button size="small" @click="changeAltime(0)">{{ $t('volumeset') }}</el-button>
             </div>
             <div style="display: inline-block;width: 26%">
-              <el-input style="float:left;" v-model="keywordAl" class="input-with-select" placeholder="请输入人员姓名搜索" clearable="true" size="small" @clear="clearsearchAl()">
+              <el-input style="float:left;" v-model="keywordAl" class="input-with-select" :placeholder="$t('pleaseenterhepersonnamesearch')" clearable="true" size="small" @clear="clearsearchAl()">
                   <el-button slot="append" @click="searchAl()" icon="el-icon-search"></el-button>
               </el-input>
             </div>
             <div style="display: inline-block;width: 32%;margin-left:12%">
-              <span style="display: inline-block;margin: 0 15px 0 20px;color: rgb(96, 98, 102);">按部门筛选</span>
+              <span style="display: inline-block;margin: 0 15px 0 20px;color: rgb(96, 98, 102);">{{ $t('screeningDepartment') }}</span>
               <el-cascader
                 ref="selectAl"
                 filterable
                 v-model="NcurDeptId"
-                placeholder="请选择部门"
+                :placeholder="$t('defaultText.pleaseChoose')"
                 size="small"
                 style="width: 60%"
                 @change="selAl()"
@@ -462,45 +462,45 @@
         <div>
           <el-table key="apk2is6" v-loading="loading" :data="iAlDataS" height="480" style="width: 99%;" @selection-change="selPchg">
             <el-table-column type="selection"></el-table-column>
-              <el-table-column prop="userName" label="姓名" width="200">
+              <el-table-column prop="userName" :label="$t('lable.name')" width="200">
                 <template slot-scope="scope">
                   <div v-if="scope.row.userName">
                     {{scope.row.userName}}
                   </div>
                 </template>
               </el-table-column>
-              <el-table-column prop="department" label="所在部门" width="200">
+              <el-table-column prop="department" :label="$t('departmentsuod')" width="200">
                 <template slot-scope="scope">
                   {{scope.row.department}}
                 </template>
               </el-table-column>
-              <el-table-column prop="yearDays" label="每年年假天数" width="200">
+              <el-table-column prop="yearDays" :label="$t('annualleaveperyear')" width="200">
                 <template slot-scope="scope">
-                  {{scope.row.yearDays != null ? scope.row.yearDays + "天" : "-"}}
+                  {{scope.row.yearDays != null ? scope.row.yearDays + $t('time.day') : "-"}}
                 </template>
               </el-table-column>
-              <el-table-column prop="leftdays" label="剩余年假天数" width="200">
+              <el-table-column prop="leftdays" :label="$t('remainingdaysofannualleave')" width="200">
                 <template slot-scope="scope">
-                  {{scope.row.yearDays != null ? scope.row.yearDays - scope.row.alreadyDays + "天" : "-"}}
+                  {{scope.row.yearDays != null ? scope.row.yearDays - scope.row.alreadyDays + $t('time.day') : "-"}}
                 </template>
               </el-table-column>
-              <el-table-column prop="id" label="修改年假天数">
+              <el-table-column prop="id" :label="$t('numberofannualleavedays')">
                 <template slot-scope="scope">
-                  <el-button size="small" @click="changeAltime(scope.row)">设置</el-button>
+                  <el-button size="small" @click="changeAltime(scope.row)">{{ $t('setup') }}</el-button>
                 </template>
               </el-table-column>
           </el-table>
         </div>
       </div>
-      <el-dialog title="请设置年假时限" v-if="Alshow" :visible.sync="Alshow" @close="delAltime()" width="500px">
+      <el-dialog :title="$t('pleasesetthetimelimitforannualleave')" v-if="Alshow" :visible.sync="Alshow" @close="delAltime()" width="500px">
         <el-form label-width="8rem">
-          <el-form-item label="设置每年年假天数" >
-            <el-input v-model="Alchange.yearDays" type="number" min="0" placeholder="请输入天数"></el-input>
+          <el-form-item :label="$t('setthenumberofannualleavedaysperyear')" >
+            <el-input v-model="Alchange.yearDays" type="number" min="0" :placeholder="$t('pleaseenterdays')"></el-input>
           </el-form-item>
         </el-form>
         <div slot="footer" class="dialog-footer">
-          <el-button type="default" @click="delAltime()">取消</el-button>
-          <el-button type="primary" @click="chgAltime()">确定</el-button>
+          <el-button type="default" @click="delAltime()">{{ $t('btn.cancel') }}</el-button>
+          <el-button type="primary" @click="chgAltime()">{{ $t('btn.determine') }}</el-button>
         </div>
       </el-dialog>
     </div>
@@ -510,8 +510,8 @@
         <div class="ctons" style="width: 98%;">
           <div class="flex">
             <div>
-              <span>请假类型</span>
-              <el-select v-model="leaveTypeItem" placeholder="请选择请假类型" @change="leaveTypeChange()" style="width: 180px" size="small"  filterable="true">
+              <span>{{ $t('leavetype') }}</span>
+              <el-select v-model="leaveTypeItem" :placeholder="$t('pleaseselectthetypeofleave')" @change="leaveTypeChange()" style="width: 180px" size="small"  filterable="true">
                   <span v-for="item in leaveTypeList" :key="item.leaveCode">
                   <el-option :label="item.leaveName" :value="item.leaveCode"></el-option>
                   </span> 
@@ -519,51 +519,51 @@
             </div>
             <template v-if="permissions.leaveAll">
               <div>
-                <span>部门筛选</span>
+                <span>{{ $t('departmentofscreening') }}</span>
                 <el-cascader
                 size="small"
                 @change="departmentOptionsChg"
                 v-model="departmentSel"
                 :options="departmentOptions"
-                placeholder="请选择部门"
+                :placeholder="$t('qing-xuan-ze-bu-men')"
                 :show-all-levels="false"
                 :props="{ checkStrictly: true }"
                 clearable></el-cascader>
               </div>
               <div>
-                <span>人员筛选</span>
-                <el-select v-model="userSelId" placeholder="请选择请假人" clearable @change="userChg()" style="width: 180px" size="small" v-show="permissions.leaveAll" filterable="true">
+                <span>{{ $t('personnelselection') }}</span>
+                <el-select v-model="userSelId" :placeholder="$t('pleaseselectthepersonaskingforleave')" clearable @change="userChg()" style="width: 180px" size="small" v-show="permissions.leaveAll" filterable="true">
                     <span v-for="(item, index) in users" :key="index">
                     <el-option :label="item.name" :value="item.id"></el-option>
                     </span> 
                 </el-select>
               </div>
               <div style="margin:0 10px 0 40px">
-                <el-button size="small" type="primary" @click="listSynchronize" :loading="synchronizeLoading">从钉钉同步</el-button>
+                <el-button size="small" type="primary" @click="listSynchronize" :loading="synchronizeLoading">{{ $t('synchronizefromStaple') }}</el-button>
               </div>
             </template>
             
           </div>
             <el-table key="apk2is8" v-loading="loading" :data="vacationList" style="width: 100%" height="94%">
-                <el-table-column prop="name" label="员工姓名" min-width="120" fixed="left"></el-table-column>
-                <el-table-column label="有效期" min-width="250" align="center">
+                <el-table-column prop="name" :label="$t('screening.employeename')" min-width="120" fixed="left"></el-table-column>
+                <el-table-column :label="$t('periodofvalidity')" min-width="250" align="center">
                   <template slot-scope="scope">
                     <span>{{scope.row.startTime == null && scope.row.endTime == null ? '~ ~' : (scope.row.startTime + '\u3000~\u3000' + scope.row.endTime)}}</span>
                   </template>
                 </el-table-column>
-                <el-table-column label="总额度" min-width="100" align="center">
+                <el-table-column :label="$t('combination')" min-width="100" align="center">
                   <template slot-scope="scope">
-                    <span>{{scope.row.quotaInDays == null && scope.row.quotaInHours == null ? '-' : (scope.row.quotaInDays == null ? scope.row.quotaInHours + '小时' : scope.row.quotaInDays + '天')}}</span>
+                    <span>{{scope.row.quotaInDays == null && scope.row.quotaInHours == null ? '-' : (scope.row.quotaInDays == null ? scope.row.quotaInHours + $t('time.hour') : scope.row.quotaInDays + $t('time.day'))}}</span>
                   </template>
                 </el-table-column>
-                <el-table-column label="已使用" min-width="100" align="center">
+                <el-table-column :label="$t('beenused')" min-width="100" align="center">
                   <template slot-scope="scope">
-                    <span>{{scope.row.usedInDays == null && scope.row.usedInHours == null ? '-' : (scope.row.usedInDays == null ? scope.row.usedInHours + '小时' : scope.row.usedInDays + '天')}}</span>
+                    <span>{{scope.row.usedInDays == null && scope.row.usedInHours == null ? '-' : (scope.row.usedInDays == null ? scope.row.usedInHours + $t('time.hour') : scope.row.usedInDays + $t('time.day'))}}</span>
                   </template>
                 </el-table-column>
-                <el-table-column label="剩余额度" min-width="100" align="center">
+                <el-table-column :label="$t('remainingamount')" min-width="100" align="center">
                   <template slot-scope="scope">
-                    <span>{{scope.row.leftInDays == null && scope.row.leftInHours == null ? '-' : (scope.row.leftInDays == null ? scope.row.leftInHours + '小时' : scope.row.leftInDays + '天')}}</span>
+                    <span>{{scope.row.leftInDays == null && scope.row.leftInHours == null ? '-' : (scope.row.leftInDays == null ? scope.row.leftInHours + $t('time.hour') : scope.row.leftInDays + $t('time.day'))}}</span>
                   </template>
                 </el-table-column>
             </el-table>
@@ -583,60 +583,60 @@
 <!-- --------- -->
   </div>
   <!-- 请假单详情 -->
-  <el-dialog title="请假单详情" :visible.sync="dialog" width="1000px" @close="bangd()">
+  <el-dialog :title="$t('leaveForm')" :visible.sync="dialog" width="1000px" @close="bangd()">
     <!-- 表单 -->
     <el-form ref="addForm" :model="addForm" label-width="80px" :rules="addFormRules">
         <!-- 请假人 -->
-        <el-form-item label="请假人" prop="ownerId"  style="width: 300px;display: inline-block;">
+        <el-form-item :label="$t('leavepeople')" prop="ownerId"  style="width: 300px;display: inline-block;">
             <!--普通员工只能自己填报自己的 -->
-            <el-select v-model="addForm.ownerId" @change="selts()" placeholder="请选择请假人" style="width: 240px" :disabled="true" filterable="true">
+            <el-select v-model="addForm.ownerId" @change="selts()" :placeholder="$t('pleaseselectthepersonaskingforleave')" style="width: 240px" :disabled="true" filterable="true">
                 <span v-for="(item, index) in users" :key="index">
                 <el-option :label="item.name" :value="item.id"></el-option>
                 </span>
             </el-select>
         </el-form-item>
         <!-- 电话 -->
-        <el-form-item label="电话" prop="tel" style="width: 300px;display: inline-block;">
-            <el-input ref="ipts" v-model="addForm.tel" placeholder="请输入手机号" style="width: 250px;"></el-input>
+        <el-form-item :label="$t('phone')" prop="tel" style="width: 300px;display: inline-block;">
+            <el-input ref="ipts" v-model="addForm.tel" :placeholder="$t('defaultText.PleaseEnterYourPhone')" style="width: 250px;"></el-input>
         </el-form-item>
         <!-- 单选 -->
-        <el-form-item style="display: block" label="时长单位">
+        <el-form-item style="display: block" :label="$t('lengthunit')">
             <el-radio-group v-model="addForm.timeType" @change="chanRadio()">
-                <el-radio label="0">按天请假</el-radio>
-                <el-radio label="1">按小时请假</el-radio>
+                <el-radio label="0">{{ $t('accordingdays') }}</el-radio>
+                <el-radio label="1">{{ $t('leavehour') }}</el-radio>
             </el-radio-group>
         </el-form-item>
         <!-- 时间选择 -->
-        <el-form-item :label="flg ? '选择日期' : '选择时间'" style="width: 74%;margin-right:500px">
+        <el-form-item :label="flg ? $t('optiondate') : $t('other.timeSelection')" style="width: 74%;margin-right:500px">
             <el-col :span="9">
-                <el-date-picker v-if="flg" type="date" placeholder="开始日期" value-format="yyyy-MM-dd"  v-model="addForm.startDate" style="width: 240px;" @blur="datas()"></el-date-picker>
-                <el-date-picker v-else type="date" placeholder="开始日期" value-format="yyyy-MM-dd" v-model="addForm.startDate" style="width: 240px;" @change="datasss()"></el-date-picker>
+                <el-date-picker v-if="flg" type="date" :placeholder="$t('time.startDate')" value-format="yyyy-MM-dd"  v-model="addForm.startDate" style="width: 240px;" @blur="datas()"></el-date-picker>
+                <el-date-picker v-else type="date" :placeholder="$t('time.startDate')" value-format="yyyy-MM-dd" v-model="addForm.startDate" style="width: 240px;" @change="datasss()"></el-date-picker>
             </el-col>
             <el-col class="line" v-if="flg" :span="2">-</el-col>
             <el-col :span="9">
-                <el-date-picker v-if="flg" type="date" placeholder="结束日期" value-format="yyyy-MM-dd" :picker-options="pickerOptionsEnd" v-model="addForm.endDate" style="width: 250px;" @blur="datas()"></el-date-picker>
+                <el-date-picker v-if="flg" type="date" :placeholder="$t('time.endDate')" value-format="yyyy-MM-dd" :picker-options="pickerOptionsEnd" v-model="addForm.endDate" style="width: 250px;" @blur="datas()"></el-date-picker>
                 <!-- <el-select v-else v-model="addForm.timeHours" placeholder="请假时长" @change="chanSele()">
                     <el-option v-for="(item, index) in options" :key="index" :label="item" :value="item"></el-option>
                 </el-select> -->
             </el-col>
         </el-form-item>
         <!-- 请假天数 -->
-        <el-form-item :label="flg ? '请假天数' : '请假时长'" prop="timeDays" style="margin-right: 500px">
+        <el-form-item :label="flg ? $t('leavedays') : $t('leavetime')" prop="timeDays" style="margin-right: 500px">
            <!-- {{flg ? addForm.timeDays : addForm.timeHours}}{{flg ? '天' : '小时'}} -->
            <!-- <div v-if="flg">{{addForm.timeDays}} 天</div> -->
-           <div v-if="flg"> <el-input v-model="addForm.timeDays" @blur="inputs()" @input="addForm.timeDays=addForm.timeDays.replace(/[^\d.]/g,'')" style="width: 100px; margin-right: 20px;"></el-input> </div>
+           <div v-if="flg"> <el-input v-model="addForm.timeDays" @blur="inputs()" @input="addForm.timeDays=addForm.timeDays.replace(/[^\d.]/g,'')" style="width: 100px; margin-right: 20px;"></el-input> {{ $t('time.day') }}</div>
            <div v-else>
-              <el-input v-model="addForm.timeHours" @blur="inputss()" @input="addForm.timeHours=addForm.timeHours.replace(/[^\d.]/g,'')" style="width: 100px; margin-right: 20px;"></el-input> 小时
+              <el-input v-model="addForm.timeHours" @blur="inputss()" @input="addForm.timeHours=addForm.timeHours.replace(/[^\d.]/g,'')" style="width: 100px; margin-right: 20px;"></el-input> {{ $t('time.hour') }}
            </div>
         </el-form-item>
         <!-- 备注 -->
-        <el-form-item label="备注" style="width: 100%">
+        <el-form-item :label="$t('bei-zhu')" style="width: 100%">
             <el-input type="textarea" v-model="addForm.remark" :rows="5" style="width: 62%" maxlength="100" show-word-limit></el-input>
         </el-form-item>
     </el-form>
     <span slot="footer" class="dialog-footer">
-      <el-button @click="dialog = false">取 消</el-button>
-      <el-button type="primary" @click="determine()">确 定</el-button>
+      <el-button @click="dialog = false">{{ $t('btn.cancel') }}</el-button>
+      <el-button type="primary" @click="determine()">{{ $t('btn.determine') }}</el-button>
     </span>
   </el-dialog>
  
@@ -653,22 +653,22 @@ export default {
     //验证手机号
     var checkTel = (rule, value, callback) =>{
         if (!value) {
-            return callback(new Error('手机号不能为空'));
+            return callback(new Error(this.$t('phonenumbercannotbeempty')));
         } else {
             const reg = /^1[3|4|5|7|8|9][0-9]\d{8}$/
             if (reg.test(value)) {
                 callback();
             } else {
-                return callback(new Error('请输入正确的手机号'));
+                return callback(new Error(this.$t('pleaseenterthecorrectcellphonenumber')));
             }
         }
     };
     var checks = (rule, value, callback) => {
       if (!value) {
-            return callback(new Error('请假天数不能为空'));
+            return callback(new Error(this.$t('leavedayscannotbeempty')));
         } else {
             if (value > this.timeChoose) {
-              return callback(new Error('超过当前选择日期的天数'));
+              return callback(new Error(this.$t('daysbeyondthecurrentlyselecteddat')));
             } else {
               callback();
             }
@@ -676,14 +676,14 @@ export default {
     };
     return {
       addFormRules: {
-        ownerId: [{ required: true, message: "请选择请假人", trigger: "blur" }],
+        ownerId: [{ required: true, message: this.$t('pleaseselectthepersonaskingforleave'), trigger: "blur" }],
         tel: [{required: true, validator: checkTel, trigger: 'blur'}],
         timeDays: [{required: true, validator: checks, trigger: 'blur'}],
-        leaveType: [{ required: true, message: "请选择请假类型", trigger: "blur" }],
-        projectAuditorJson: [{ required: true, message: "请选择审批人", trigger: "blur" }]
+        leaveType: [{ required: true, message: this.$t('pleaseselectthetypeofleave'), trigger: "blur" }],
+        projectAuditorJson: [{ required: true, message: this.$t('pleaseselectapprover'), trigger: "blur" }]
       },
       user: JSON.parse(sessionStorage.getItem("user")),
-      shuz: ['事假填报', '病假填报', '年假填报', '产假填报'],
+      shuz: [this.$t('personalleaveisallowed'), this.$t('leaveisallowed'), this.$t('annualleaveisallowed'), this.$t('maternityleaveisallowed')],
       ins: 0,
       addForm: {
         timeType: '0',
@@ -732,18 +732,18 @@ export default {
       loading: false,
       timeChoose: 1,
       permissions: JSON.parse(sessionStorage.getItem("permissions")),
-      typess: [{name: '事假',id: 0},{name: '病假',id: 1},{name: '年假',id: 2},{name: '产假',id: 3},{name: '婚假',id: 4},{name: '丧假',id: 5},{name: '调休假',id: 6},{name: '陪产假',id: 7},{name: '其他', id: 8}],
+      typess: [{name: this.$t('leave.personalLeave'),id: 0},{name: this.$t('leave.sickLeave'),id: 1},{name: this.$t('leave.annualLeave'),id: 2},{name: this.$t('leave.maternityLeave'),id: 3},{name: this.$t('leave.marriageLeave'),id: 4},{name: this.$t('leave.bereavementLeave'),id: 5},{name: this.$t('leave.leave'),id: 6},{name: this.$t('leave.paternityLeave'),id: 7},{name: this.$t('leave.other'), id: 8}],
       statuss: [{
-        name: '审核通过',
+        name: this.$t('state.approved'),
         id: 0
       },{
-        name: '待审核',
+        name: this.$t('state.WaitingAudit'),
         id: 1
       },{
-        name: '驳回',
+        name: this.$t('btn.rejected'),
         id: 2
       },{
-        name: '已撤销',
+        name: this.$t('state.undone'),
         id: 3
       }],
       createDatelis: '',
@@ -755,15 +755,15 @@ export default {
       adform: {},
       affId: '',
       qjType: [
-        {name: '事假', id: 0},
-        {name: '病假', id: 1},
-        {name: '年假', id: 2},
-        {name: '产假', id: 3},
-        {name: '婚假', id: 4},
-        {name: '丧假', id: 5},
-        {name: '调休假', id: 6},
-        {name: '陪产假', id: 7},
-        {name: '其他', id: 8}
+        {name: this.$t('leave.personalLeave'), id: 0},
+        {name: this.$t('leave.sickLeave'), id: 1},
+        {name: this.$t('leave.annualLeave'), id: 2},
+        {name: this.$t('leave.maternityLeave'), id: 3},
+        {name: this.$t('leave.marriageLeave'), id: 4},
+        {name: this.$t('leave.bereavementLeave'), id: 5},
+        {name: this.$t('leave.leave'), id: 6},
+        {name: this.$t('leave.paternityLeave'), id: 7},
+        {name: this.$t('leave.other'), id: 8}
       ],
       // 
       apk2: false,
@@ -847,7 +847,7 @@ export default {
         if(res.code == 'ok'){
           this.synchronizeLoading = false
           this.$message({
-            message: '同步成功',
+            message: this.$t('synchronoussuccess'),
             type: 'success'
           })
           this.getVacationList()
@@ -971,7 +971,7 @@ export default {
           this.approverList = res.data
           if(this.approverList.length == 0){
             this.$message({
-              message: '当前无审批人,请联系管理员配置审批人',
+              message: this.$t('configureanapprover'),
               type: 'warning'
             })
           }
@@ -992,7 +992,7 @@ export default {
 
     changeAltime(e){
       if(e == 0 && this.AlchangeP.length == 0){
-          this.$message('请选择要批量设置的项')
+          this.$message(this.$t('selecttheitemsyouwanttobatchset'))
           return
       }else if(e != 0){
         this.Alchange = JSON.parse(JSON.stringify(e))
@@ -1134,8 +1134,8 @@ export default {
                         var list = res.data , list1 = JSON.parse(JSON.stringify(res.data));
                         this.sdata = list;
                         this.soption = [
-                          {value: 1 , label : "部门" , children : this.changeArr(list1)},
-                          {value: 2 , label : "指定人员",children : this.susers}
+                          {value: 1 , label : this.$t('lable.department') , children : this.changeArr(list1)},
+                          {value: 2 , label : this.$t('designatedpersonnel'),children : this.susers}
                         ]
                         this.Nsdata = list1
                     } else {
@@ -1235,7 +1235,7 @@ export default {
                                 this.listLoading = false;
                                 if (res.code == "ok") {
                                     this.$message({
-                                        message: '保存成功',
+                                        message: this.$t('savesuccess'),
                                         type: "success"
                                     });
                                 } else {
@@ -1486,7 +1486,7 @@ export default {
             res => {
                 if (res.code == "ok") {
                     this.$message({
-                      message: '填报成功',
+                      message: this.$t('message.fillinsuccessfully'),
                       type: "success"
                     });
                     this.addForm.timeType = '0'
@@ -1723,7 +1723,7 @@ export default {
       // console.log(this.addForm)
     },
     deletes(e) {
-      this.$confirm("确认要删除吗?", "提示", {
+      this.$confirm(this.$t('deleteit'), this.$t('other.prompts'), {
           //type: 'warning'
       }).then(() => {
           this.http.post('/leave-sheet/delete', {id:e.id},
@@ -1731,7 +1731,7 @@ export default {
               if (res.code == "ok") {
                   this.bills();
                   this.$message({
-                      message: '删除成功',
+                      message: this.$t('message.successfullyDeleted'),
                       type: "success"
                   });
               } else {

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

@@ -52,7 +52,7 @@
                             <el-table-column label="下拨时间" prop="indate" align="center" min-width="200"></el-table-column>
                             <el-table-column label="操作人员" prop="userName" align="center" min-width="120"></el-table-column>
                             <el-table-column label="备注" prop="remark" align="left" header-align="left" show-overflow-tooltip min-width="200"></el-table-column>
-                            <el-table-column label="" align="center" fixed="right">
+                            <el-table-column label="" align="center" fixed="right" v-if="permissions.projectAllocate">
                                 <template slot-scope="scope">
                                     <el-button size="small" @click="revert(scope.row.id)" v-if="scope.$index == 0">撤销</el-button>
                                 </template>

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

@@ -2,10 +2,10 @@
     <section>
         <el-row style="padding-bottom: 0px;text-align:center;margin-top:20px;z-index: 999;">
         <el-col :span="6" >
-            <div ><span style="color:#999;">图表Y轴: </span>
+            <div ><span style="color:#999;">{{ $t('chartY') }} </span>
             <el-radio-group v-model="yAxisValue" @change="onYAxisChange" size="small">
-            <el-radio-button label="0" v-if="permissions.countCost">显示成本</el-radio-button>
-            <el-radio-button label="1" v-if="permissions.countHours">显示工时</el-radio-button>
+            <el-radio-button label="0" v-if="permissions.countCost">{{ $t('accordingtothecost') }}</el-radio-button>
+            <el-radio-button label="1" v-if="permissions.countHours">{{ $t('accordingtoworkinghours') }}</el-radio-button>
             </el-radio-group></div>
         </el-col>
         <el-col :span="14" style="display: flex;flex-wrap: wrap;">
@@ -14,10 +14,10 @@
             format="yyyy-MM-dd" value-format="yyyy-MM-dd" 
             @change="getEchart" 
             :clearable="true" 
-            range-separator="至"
+            :range-separator="$t('other.to')"
             type="daterange" 
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
+            :start-placeholder="$t('time.startDate')"
+            :end-placeholder="$t('time.endDate')"
             ></el-date-picker>
 
             <el-date-picker v-show="user.timeType.fixMonthcost==1"
@@ -29,11 +29,11 @@
             ></el-date-picker>
 
             <el-radio-group v-model="radio" @change="getEchart" style="margin-left:10px;"  size="small">
-                <el-radio-button label="项目"></el-radio-button>
-                <el-radio-button label="主项目" v-if="user.timeType.mainProjectState"></el-radio-button>
-                <el-radio-button label="项目分类"></el-radio-button>
-                <el-radio-button label="部门"></el-radio-button>
-                <el-radio-button label="人员" v-if="permissions.countPersonnel"></el-radio-button>
+                <el-radio-button :label="$t('other.project')"></el-radio-button>
+                <el-radio-button :label="$t('zhu-xiang-mu')" v-if="user.timeType.mainProjectState"></el-radio-button>
+                <el-radio-button :label="$t('projectclassification')"></el-radio-button>
+                <el-radio-button :label="$t('lable.department')"></el-radio-button>
+                <el-radio-button :label="$t('ren-yuan')" v-if="permissions.countPersonnel"></el-radio-button>
                 <el-radio-button :label="namess" v-if="jichu.customDegreeActive == 1"></el-radio-button>
                 <el-radio-button v-for="item in theCustomList" :key="item.id" :label="item.name"></el-radio-button>
             </el-radio-group>
@@ -42,33 +42,33 @@
                 <el-option v-for="item in customList" :key="item.id" :label="item.name" :value="item.name"></el-option>
             </el-select> -->
 
-            <el-select v-model="personnelValue" filterable clearable placeholder="请选择人员"  size="small" style="margin-top: 10px;width: 350px" v-if="radio == '人员'" @change="personnel()">
+            <el-select v-model="personnelValue" filterable clearable :placeholder="$t('pleaseselectpersonnel')"  size="small" style="margin-top: 10px;width: 350px" v-if="radio == $t('ren-yuan')" @change="personnel()">
                 <el-option v-for="item in hasReportUserList" :key="item.id" :label="item.name" :value="item.name"></el-option>
             </el-select>
         </el-col>
         <el-col :span="4">
-            <el-button @click="exportProjectData" v-if="theCustomListFlg"  size="small">报表导出</el-button>
-            <el-button @click="showExportDialog" v-else  size="small">报表导出</el-button>
+            <el-button @click="exportProjectData" v-if="theCustomListFlg"  size="small">{{ $t('reporderived') }}</el-button>
+            <el-button @click="showExportDialog" v-else  size="small">{{ $t('reporderived') }}</el-button>
         </el-col>
         </el-row>
         <!-- <div id="clearfix" :style="'width:'+widthHtval+'px;position: relative; height:'+containerHeight+'px;'">
              <div id="container" :style="'height:'+containerHeight+'px;width:100%'"></div>
         </div> -->
-        <div id="clearfix" :class="radio == '人员' ? 'ryuans' : ''" :style="'overflow-x: auto;width:100%;padding-bottom: 100px; position: relative; height:'+containerHeight+'px;'">
+        <div id="clearfix" :class="radio == $t('ren-yuan') ? 'ryuans' : ''" :style="'overflow-x: auto;width:100%;padding-bottom: 100px; position: relative; height:'+containerHeight+'px;'">
              <div id="container" :style="'height:'+containerHeight+'px;width:100%'"></div>
         </div>
         <!-- <div>
              <div id="container" :style="'height:'+containerHeight+'px;width:100%'"></div>
         </div> -->
-        <div style="position:fixed;top:170px;left:600px;" v-show="radio=='部门' && parentDeptId != null">
-            <el-button @click="backToParentDept">返回上级</el-button>
+        <div style="position:fixed;top:170px;left:600px;" v-show="radio==$t('lable.department') && parentDeptId != null">
+            <el-button @click="backToParentDept">{{ $t('returnsuperior') }}</el-button>
         </div>
 
         <!--导出报表条件选择 -->
-        <el-dialog title="工时报表导出" v-if="exportDialog" :visible.sync="exportDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
+        <el-dialog :title="$t('timeReportExport')" v-if="exportDialog" :visible.sync="exportDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <el-form ref="form3" :model="exportParam" >
-                <el-form-item prop="projectId" label="选择项目" v-if="radio != '人员' && radio != '项目分类'">
-                    <el-select v-model="exportParam.projectId" placeholder="全部项目"  clearable style="width:350px;" filterable="true" popper-class="projectSelectPopperClass">
+                <el-form-item prop="projectId" :label="$t('defaultText.selectProject')" v-if="radio != $t('ren-yuan') && radio != $t('projectclassification')">
+                    <el-select v-model="exportParam.projectId" :placeholder="$t('other.allProject')"  clearable style="width:350px;" filterable="true" popper-class="projectSelectPopperClass">
                         <el-option v-for="item in projectList"  :key="item.id" :label="item.projectName + item.projectCode" :value="item.id">
                             <span style="float: left;color: #8492a6;">{{ item.projectCode }}</span>
                             <span style="float: right;font-size: 13px;">{{ item.projectName }}</span>
@@ -76,32 +76,32 @@
                     </el-select>
                 </el-form-item>
 
-                <el-form-item label="部门选择" v-if="radio == '项目'">
-                    <el-cascader v-model="exportParam.deptId" :options="departmentList" placeholder="请选择部门"
+                <el-form-item :label="$t('departmentchoice')" v-if="radio == $t('other.project')">
+                    <el-cascader v-model="exportParam.deptId" :options="departmentList" :placeholder="$t('defaultText.pleaseChoose')"
                         :props="{ checkStrictly: true, expandTrigger: 'hover' }" clearable filterable style="width:350px;"
                     ></el-cascader>
                 </el-form-item>
 
-                <el-form-item prop="projectCategoryId" label="项目分类" v-if="radio == '项目分类'">
-                    <el-select v-model="exportParam.projectCategoryId" placeholder="全部项目分类"  clearable style="width:350px;" filterable="true">
+                <el-form-item prop="projectCategoryId" :label="$t('projectclassification')" v-if="radio == $t('projectclassification')">
+                    <el-select v-model="exportParam.projectCategoryId" :placeholder="$t('classificationitems')"  clearable style="width:350px;" filterable="true">
                         <el-option v-for="item in categoryList"  :key="item.id" :label="item.name" :value="item.id">
                         </el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item prop="userIds" label="选择人员" v-if="radio == '人员'">
-                    <el-select v-model="exportParam.userIds" placeholder="全部人员" multiple="true"  clearable style="width:350px;" filterable="true">
+                <el-form-item prop="userIds" :label="$t('screening.selectPeople')" v-if="radio == $t('ren-yuan')">
+                    <el-select v-model="exportParam.userIds" :placeholder="$t('lable.allStaff')" multiple="true"  clearable style="width:350px;" filterable="true">
                         <el-option v-for="item in hasReportUserList"  :key="item.id" :label="item.name" :value="item.id"></el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item prop="projectId" :label="user.timeType.fixMonthcost==0?'日期范围':'选择月份'">
+                <el-form-item prop="projectId" :label="user.timeType.fixMonthcost==0?$t('time.dateRange'):$t('Selectmonth')">
                     <el-date-picker v-show="user.timeType.fixMonthcost==0"
                         v-model="exportParam.dateRange" :editable="false" 
                         format="yyyy-MM-dd" value-format="yyyy-MM-dd" 
                         :clearable="false" 
-                        range-separator="至"
+                        :range-separator="$t('other.to')"
                         type="daterange" 
-                        start-placeholder="开始日期"
-                        end-placeholder="结束日期"
+                        :start-placeholder="$t('time.startDate')"
+                        :end-placeholder="$t('time.endDate')"
                     ></el-date-picker>
 
                     
@@ -114,33 +114,33 @@
                     ></el-date-picker>
                 </el-form-item>
                 
-                <el-form-item label="选择人员" v-if="radio == '项目' || radio == '部门' || radio == '项目分类'">
-                    <el-select v-model="exportParam.userId"  placeholder="全部人员" style="width: 350px" filterable="true" clearable="true">
+                <el-form-item :label="$t('screening.selectPeople')" v-if="radio == $t('other.project') || radio == $t('lable.department') || radio == $t('projectclassification')">
+                    <el-select v-model="exportParam.userId"  :placeholder="$t('lable.allStaff')" style="width: 350px" filterable="true" clearable="true">
                         <span v-for="(item, index) in users" :key="index">
                         <el-option :label="item.name" :value="item.id"></el-option>
                         </span> 
                     </el-select>
                 </el-form-item>
-                <el-form-item prop="type" label="选择样式" v-if="radio == '项目' || radio == '部门' || radio == '项目分类'">
-                    <el-select v-model="exportParam.type" placeholder="选择样式" style="width:350px;" >
-                        <el-option :label="radio == '项目分类' ? '项目分类在行上' : '项目在行上'" value="0"></el-option>
-                        <el-option :label="radio == '项目分类' ? '项目分类在列上' : '项目在列上'" value="1"></el-option>
+                <el-form-item prop="type" :label="$t('choosethestyle')" v-if="radio == $t('other.project') || radio == $t('lable.department') || radio == $t('projectclassification')">
+                    <el-select v-model="exportParam.type" :placeholder="$t('choosethestyle')" style="width:350px;" >
+                        <el-option :label="radio == $t('projectclassification') ? $t('classifiedontheline') : $t('Itemontheline')" value="0"></el-option>
+                        <el-option :label="radio == $t('projectclassification') ? $t('classifiedcolumns') : $t('itemisonthecolumn')" value="1"></el-option>
                     </el-select>
                     <div class="prompt">
                         <el-popover placement="top" width="1200" trigger="hover">
-                            <img src="../../assets/image/hanglie.png" alt="" width="100%" v-if="this.radio != '项目分类'">
+                            <img src="../../assets/image/hanglie.png" alt="" width="100%" v-if="this.radio != $t('projectclassification')">
                             <img src="../../assets/image/hanglie_corp.png" alt="" width="100%" v-else>
                             <i class="el-icon-question" slot="reference" />
                         </el-popover>
                     </div>
                 </el-form-item>
-                <el-form-item v-if="(radio == '项目' || radio == '部门' || radio == '项目分类') && exportParam.type == '0'">
-                    <el-checkbox v-model="exportParam.projectSum" >含单个项目数据汇总</el-checkbox>
+                <el-form-item v-if="($t('other.project') || radio == $t('lable.department') || radio == $t('projectclassification')) && exportParam.type == '0'">
+                    <el-checkbox v-model="exportParam.projectSum" >{{ $t('individualprojectdata') }}</el-checkbox>
                 </el-form-item>
 
             </el-form>
             <div slot="footer" class="dialog-footer">
-                <el-button type="primary" @click="exportProjectData" style="width:100%;" >导出</el-button>
+                <el-button type="primary" @click="exportProjectData" style="width:100%;" >{{ $t('export.export') }}</el-button>
             </div>
         </el-dialog>
     </section>
@@ -164,7 +164,7 @@
                 dateRange:[],
                 user: JSON.parse(sessionStorage.getItem("user")),
                 permissions: JSON.parse(sessionStorage.getItem("permissions")),
-                radio: sessionStorage.radio!=null?sessionStorage.radio:'项目',
+                radio: sessionStorage.radio!=null?sessionStorage.radio:this.$t('other.project'),
                 containerHeight: 0,    
                 // myChart: null,
                 params: null,
@@ -247,10 +247,10 @@
                 this.exportDialog = true;
                 this.exportParam.dateRange = this.dateRange;
                 console.log(this.hasReportUserList)
-                if (this.radio == '人员') {
+                if (this.radio == this.$t('ren-yuan')) {
                     // this.exportParam.userIds = [];
                 }
-                if (this.radio == '项目') {
+                if (this.radio == this.$t('other.project')) {
                     this.exportParam.deptId = []
                 }
             },
@@ -281,10 +281,10 @@
                     param = {startDate:this.exportParam.dateRange[0], endDate: this.exportParam.dateRange[1],stateKey: 1};
                  }
                  var url = "/project/exportTimeCost";
-                 var fileName = '项目工时成本统计.xls';
-                 if (this.radio == '人员' ) {
+                 var fileName = this.$t('projectmanhourcoststatistics')+ '.xls';
+                 if (this.radio == this.$t('ren-yuan') ) {
                      console.log(this.exportParam.userIds);
-                     fileName = '人员工时成本统计.xls';
+                     fileName = this.$t('labortimecoststatistics')+ '.xls';
                      url = '/department/exportUserStatistic';
                      if (this.exportParam.userIds != null && this.exportParam.userIds.length > 0) {
                          var ids = '';
@@ -294,23 +294,23 @@
                         param.userIds = ids;
                      }
                  } 
-                if(this.radio == '项目分类'){
-                    fileName = '项目分类工时成本统计.xls';
+                if(this.radio == this.$t('projectclassification')){
+                    fileName = this.$t('projectclassificationlaborosttatistics')+ '.xls';
                     url = '/project/exportTimeCostByCategory'
                     if(this.exportParam.projectCategoryId){
                         param.projectCategoryId = this.exportParam.projectCategoryId
                     }
                 }
-                if(this.radio == '部门'){
-                    fileName = '部门工时成本统计.xls'
+                if(this.radio == this.$t('lable.department')){
+                    fileName = this.$t('departmenthourscoststatistics')+ '.xls'
                     url = '/department/exportDeptStatistic'
                 }
                 
-                if (this.exportParam.projectId && this.radio != '人员' && this.radio != '项目分类') {
+                if (this.exportParam.projectId && this.radio != this.$t('ren-yuan') && this.radio != this.$t('projectclassification')) {
                     param.projectId = this.exportParam.projectId;
                 }
                 if (this.exportParam.userId) {
-                    if(this.radio == '项目' || this.radio == '部门' || this.radio == '人员' || this.radio == '项目分类'){
+                    if(this.radio == this.$t('other.project') || this.radio == this.$t('lable.department') || this.radio == this.$t('ren-yuan') || this.radio == this.$t('projectclassification')){
                         param.userId = this.exportParam.userId;
                     }
                 }
@@ -318,7 +318,7 @@
                     this.exportParam.projectSum = null
                 }
                 if (this.exportParam.projectSum != null) {
-                    if(this.radio == '项目' || this.radio == '部门' || this.radio == '项目分类'){
+                    if(this.radio == this.$t('other.project') || this.radio == this.$t('lable.department') || this.radio == this.$t('projectclassification')){
                         param.projectSum = this.exportParam.projectSum;
                     }
                 }
@@ -327,7 +327,7 @@
                 } 
                 if(this.theCustomListFlg) {
                     url = '/project/exportTimeCostByUserCustom'
-                    fileName = this.radio + '统计.xls'
+                    fileName = this.radio + this.$t('statistical') + '.xls'
                     // param.subCustomName = this.customName
                     param.customId = this.theCustomListId
                     param.fieldName = this.theCustomListPlant
@@ -660,9 +660,9 @@
                         //总成本
                         title: {
                             // text: '工时成本总计' + totalMoneyCost.toFixed(2) + '元, 时长'+totalHours+'小时',
-                            text: '工时成本总计:' + 
-                            ((this.permissions.countCost) ? '成本' + totalMoneyCost.toFixed(2) + '元,' : '') + 
-                            ((this.permissions.countHours) ? '时长' + totalHours + '小时' : ''),
+                            text: this.$t('otalhourscost')+ ':' + 
+                            ((this.permissions.countCost) ? this.$t('costof') + totalMoneyCost.toFixed(2) + this.$t('yuan') + ',' : '') + 
+                            ((this.permissions.countHours) ? this.$t('time.duration') + totalHours + this.$t('time.hour') : ''),
                             left:'left',
                         },
                         // 工具箱
@@ -708,17 +708,17 @@
                                 var res = "";
                                 for(var i in params) {
                                     if (params[i].data.value > 0) {
-                                        res += "<div style='margin-top:3px;font-size:12px;'><font color='#ddd'>项目名称:" + params[i].seriesName 
+                                        res += "<div style='margin-top:3px;font-size:12px;'><font color='#ddd'>" + this.$t('headerTop.projectName') + ":" + params[i].seriesName 
                                             + "</font><br/>" + 
-                                            ((_this.permissions.countCost) ? "工作成本 : " + params[i].data.money + "元<br/>" : '') + 
-                                            ((_this.permissions.countHours) ? "工作时长 : " + params[i].data.cost + "小时</br>" : '') + "</div>";
+                                            ((_this.permissions.countCost) ? this.$t('workcost')+ ":" + params[i].data.money + this.$t('yuan') + "</br>" : '') + 
+                                            ((_this.permissions.countHours) ? this.$t('screening.workTime') + ":" + params[i].data.cost + this.$t('time.hour') + "</br>" : '') + "</div>";
                                         totalTime += Number(params[i].data.cost);
                                         totalCost += Number(params[i].data.money);
                                     }
                                 }
-                                res = res +'<br/>'+ params[0].name+ '<br/>总计: ' + 
-                                ((_this.permissions.countHours) ? totalTime.toFixed(1) + '小时 ' : '') + 
-                                ((_this.permissions.countCost) ? totalCost.toFixed(2) + "元" : '') + 
+                                res = res +'<br/>'+ params[0].name+ '<br/>' +this.$t('zong-ji') + ':' + 
+                                ((_this.permissions.countHours) ? totalTime.toFixed(1) + this.$t('time.hour') : '') + 
+                                ((_this.permissions.countCost) ? totalCost.toFixed(2) + this.$t('yuan') : '') + 
                                 "<br/>";
                                 return res;
                             }
@@ -732,7 +732,7 @@
                         yAxis: [{
                             type : 'value',
                             axisLabel: {
-                                formatter:this.yAxisValue==0?'{value} (元)':'{value} (小时)'
+                                formatter:this.yAxisValue==0?'{value} ('+this.$t('yuan')+')':'{value} ('+this.$t('time.hour')+')'
                             }
                         }],
                         series: series,
@@ -801,7 +801,7 @@
                 })
             },
             backToParentDept() {
-                if (this.radio == '部门') {
+                if (this.radio == this.$t('lable.department')) {
                     if (this.parentDeptStack.length > 0) {
                         this.parentDeptStack.pop();
                         if (this.parentDeptStack.length > 0) {
@@ -826,19 +826,19 @@
                     // console.log(param);
                 }
                 var url = '';
-                if (this.radio=='项目') {
+                if (this.radio==this.$t('other.project')) {
                     url = this.port.project.listCost;
-                }else if(this.radio == '主项目'){
+                }else if(this.radio == this.$t('zhu-xiang-mu')){
                     url = '/project/getTimeCostByMainProject'
                     // param.userId = this.user.id
-                }else if (this.radio=='项目分类') {
+                }else if (this.radio==this.$t('projectclassification')) {
                     url = '/project/getTimeCostByCategory';
                     // param.parentDeptId = this.parentDeptId;
                     // param.userId = this.user.id
-                } else if (this.radio=='部门') {
+                } else if (this.radio==this.$t('lable.department')) {
                     url = this.port.project.depCost;
                     param.parentDeptId = this.parentDeptId;
-                } else if (this.radio=='人员') {
+                } else if (this.radio==this.$t('ren-yuan')) {
                     this.getUserCostList();
                     return;
                 } else if (this.radio == this.namess) {
@@ -875,13 +875,13 @@
                         var list
                         var totalMoneyCost;
                         var totalHours = 0.0;
-                        if(this.radio == '项目' || this.radio == '项目分类' || this.radio=='部门' || this.radio == '主项目') {
+                        if(this.radio == this.$t('other.project') || this.radio == this.$t('projectclassification') || this.radio==this.$t('lable.department') || this.radio == this.$t('zhu-xiang-mu')) {
                             list = res.data.costList
-                            totalMoneyCost = ((this.radio=='项目' || this.radio == '项目分类')?res.data.totalMoneyCost:res.data.totalCostMoney);
+                            totalMoneyCost = ((this.radio==this.$t('other.project') || this.radio == this.$t('projectclassification'))?res.data.totalMoneyCost:res.data.totalCostMoney);
 
                             for(var i in list) {
-                                if(this.radio=='项目' || this.radio == '主项目') {
-                                    if(this.radio == '项目'){
+                                if(this.radio==this.$t('other.project') || this.radio == this.$t('zhu-xiang-mu')) {
+                                    if(this.radio == this.$t('other.project')){
                                         xList.push(list[i].project);
                                     }else{
                                         xList.push(list[i].mainProjectName);
@@ -901,7 +901,7 @@
                                     }
                                     yList.push(item);
                                     
-                                } else if(this.radio == '部门'){
+                                } else if(this.radio == this.$t('lable.department')){
                                     xList.push(list[i].departmentName);
                                     let item = {
                                         // "value": this.yAxisValue==0 ? list[i].costMoney.toFixed(2) || list[i].costMoney: list[i].costTime.toFixed(1),
@@ -997,10 +997,10 @@
                             this.zhishin = totalMoneyCost.toFixed(2)
                         } 
 
-                        if(this.radio == '项目' || this.radio == '主项目' || this.radio == '人员' || this.radio == '项目分类' || this.radio=='部门') {
+                        if(this.radio == this.$t('other.project') || this.radio == this.$t('zhu-xiang-mu') || this.radio == this.$t('ren-yuan') || this.radio == this.$t('projectclassification') || this.radio==this.$t('lable.department')) {
                             var option = {
                                 title: {
-                                    text: '工时成本总计:' + ((this.permissions.countCost) ? '成本' + this.zhishin + '元,' : '') + ((this.permissions.countHours) ? '时长' + totalHours + '小时' : ''),
+                                    text: this.$t('otalhourscost') + ':' + ((this.permissions.countCost) ? this.$t('costof') + this.zhishin + this.$t('yuan') + ',' : '') + ((this.permissions.countHours) ? this.$t('time.duration') + totalHours + this.$t('time.hour') : ''),
                                     left:'left',
                                 },
                                 // 工具箱
@@ -1017,9 +1017,9 @@
                                         // + "元 <br/>工作时长"+" : " + params[0].data.cost + "小时";
                                         _this.params = params;
                                         var res = params[0].name + "<br/>" + 
-                                        ((_this.permissions.countCost) ? "工作成本"+" : " + params[0].data.money 
-                                        + "<br/>" : '') + 
-                                        ((_this.permissions.countHours) ? "工作时长"+" : " + params[0].data.cost + "小时" : '');
+                                        ((_this.permissions.countCost) ? this.$t('workcost')+" : " + params[0].data.money 
+                                        + this.$t('yuan')+"<br/>" : '') + 
+                                        ((_this.permissions.countHours) ? this.$t('screening.workTime')+" : " + params[0].data.cost + this.$t('time.hour') : '');
                                         return res;
                                     }
                                 },
@@ -1032,11 +1032,11 @@
                                 yAxis: [{
                                     type : 'value',
                                     axisLabel: {
-                                        formatter:this.yAxisValue==0?'{value} (元)':'{value}小时'
+                                        formatter:this.yAxisValue==0?'{value} ('+this.$t('yuan')+')':'{value}'+this.$t('time.hour')
                                     }
                                 }],
                                 series: [{
-                                    name: this.yAxisValue==0?'工作成本(元)':'工作时长(小时)',
+                                    name: this.yAxisValue==0?this.$t('workcost')+'('+this.$t('yuan')+')':this.$t('screening.workTime')+'('+this.$t('time.hour')+')',
                                     type: 'bar',
                                     barMaxWidth: 30,
                                     data: yList,
@@ -1049,7 +1049,7 @@
                             var option = {
                                 title: {
                                     // text: '工时成本总计' + this.zhishin + '元, 时长'+totalHours+'小时',
-                                    text: '工时成本总计:' + ((this.permissions.countCost) ? '成本' + this.zhishin + '元,' : '') + ((this.permissions.countHours) ? '时长' + totalHours + '小时' : ''),
+                                    text: this.$t('otalhourscost')+ ':' + ((this.permissions.countCost) ? this.$t('costof') + this.zhishin + this.$t('yuan')+ ',' : '') + ((this.permissions.countHours) ? this.$t('time.duration') + totalHours + this.$t('time.hour') : ''),
                                     left:'left',
                                 },
                                 // 工具箱
@@ -1063,9 +1063,9 @@
                                     trigger:'axis',
                                     formatter: function (params,ticket,callback) {
                                         var res = params[0].name + "<br/>" + 
-                                        ((_this.permissions.countCost) ? "工作成本"+" : " + params[0].data.money 
-                                        + "<br/>" : '') + 
-                                        ((_this.permissions.countHours) ? "工作时长"+" : " + params[0].data.cost + "小时" : '');
+                                        ((_this.permissions.countCost) ? this.$t('workcost')+" : " + params[0].data.money 
+                                        + this.$t('yuan')+"<br/>" : '') + 
+                                        ((_this.permissions.countHours) ? this.$t('screening.workTime')+" : " + params[0].data.cost + this.$t('time.hour') : '');
                                         _this.params = params;
                                         return res;
                                     }
@@ -1079,11 +1079,11 @@
                                 yAxis: [{
                                     type : 'value',
                                     axisLabel: {
-                                        formatter:this.yAxisValue==0?'{value} (元)':'{value}小时'
+                                        formatter:this.yAxisValue==0?'{value} ('+this.$t('yuan')+')':'{value}'+this.$t('time.hour')
                                     }
                                 }],
                                 series: [{
-                                    name: this.yAxisValue==0?'工作成本(元)':'工作时长(小时)',
+                                    name: this.yAxisValue==0?this.$t('workcost')+'('+this.$t('yuan')+')':this.$t('screening.workTime')+'('+this.$t('time.hour')+')',
                                     type: 'bar',
                                     barMaxWidth: 30,
                                     data: yList,
@@ -1099,7 +1099,7 @@
                             const pointInPixel = [params.offsetX, params.offsetY];
                             if (myChart.containPixel('grid', pointInPixel)) {
                                 console.log(_this.params)
-                                if(_this.radio=='项目') {
+                                if(_this.radio==this.$t('other.project')) {
                                     if (_this.dateRange != null) {
                                         if (this.user.timeType.fixMonthcost == 0) {
                                             _this.$router.push("/cost/" + _this.params[0].data.id + "/" + _this.params[0].name
@@ -1111,7 +1111,7 @@
                                     } else {
                                         _this.$router.push("/cost/" + _this.params[0].data.id + "/" + _this.params[0].name);
                                     }
-                                } else if (_this.radio=='部门') {
+                                } else if (_this.radio==this.$t('lable.department')) {
                                     if (_this.params[0].data.hasSubDept) {
                                         if (_this.parentDeptId != _this.params[0].data.id) {
                                             _this.parentDeptId = _this.params[0].data.id;
@@ -1261,7 +1261,7 @@
                 }
                 this.exportParam.dateRange = this.dateRange;
             }
-            this.radio = '项目'
+            this.radio = this.$t('other.project')
             this.getEchart();
             var _this = this;
             window.addEventListener("resize", function() {