فهرست منبع

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

QuYueTing 10 ماه پیش
والد
کامیت
8f88f04bad
17فایلهای تغییر یافته به همراه795 افزوده شده و 383 حذف شده
  1. 5 3
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/WxCorpInfoController.java
  2. 5 3
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/task/TimingTask.java
  3. 5 3
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ReportMapper.xml
  4. 205 1
      fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json
  5. 205 1
      fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json
  6. 10 10
      fhKeeper/formulahousekeeper/timesheet/src/views/project/detailDep.vue
  7. 25 25
      fhKeeper/formulahousekeeper/timesheet/src/views/project/fileCenter.vue
  8. 12 12
      fhKeeper/formulahousekeeper/timesheet/src/views/project/finance.vue
  9. 36 36
      fhKeeper/formulahousekeeper/timesheet/src/views/project/gantt.vue
  10. 7 7
      fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue
  11. 121 123
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  12. 24 24
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectForm.vue
  13. 26 26
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue
  14. 7 7
      fhKeeper/formulahousekeeper/timesheet/src/views/project/vueGantt.vue
  15. 18 18
      fhKeeper/formulahousekeeper/timesheet/src/views/projectApproval/projectApproval.vue
  16. 58 58
      fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue
  17. 26 26
      fhKeeper/formulahousekeeper/timesheet/src/views/task/list.vue

+ 5 - 3
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/WxCorpInfoController.java

@@ -366,9 +366,11 @@ public class WxCorpInfoController {
                     }
                     if(title.getJSONObject(0).getString("text").contains("单价")){
                         if(control.equals("Number")){
-                            Double new_money = value.getDouble("new_number");
-                            plan.setMoneyOfJob(new BigDecimal(new_money));
-                            price=new BigDecimal(new_money);
+                            if(!value.getString("new_number").equals("")){
+                                Double new_money = value.getDouble("new_number");
+                                plan.setMoneyOfJob(new BigDecimal(new_money==null?0:new_money));
+                                price=new BigDecimal(new_money);
+                            }
                         }
                     }
                     if(title.getJSONObject(0).getString("text").contains("结算总额")){

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

@@ -507,9 +507,11 @@ public class TimingTask {
                     }
                     if(title.getJSONObject(0).getString("text").contains("单价")){
                         if(control.equals("Number")){
-                            Double new_money = value.getDouble("new_number");
-                            plan.setMoneyOfJob(new BigDecimal(new_money));
-                            price=new BigDecimal(new_money);
+                            if(!value.getString("new_number").equals("")){
+                                Double new_money = value.getDouble("new_number");
+                                plan.setMoneyOfJob(new BigDecimal(new_money==null?0:new_money));
+                                price=new BigDecimal(new_money);
+                            }
                         }
                     }
                     if(title.getJSONObject(0).getString("text").contains("结算总额")){

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

@@ -244,16 +244,17 @@
     </select>
 
     <select id="getPersonWorkHoursWagesWithNotReport" resultType="java.util.Map">
-        select ppt.total_progress AS progress,DATE_FORMAT(r.create_date,'%Y%m%d') AS createDate,pp.name AS procedureName,(CASE  WHEN pp.check_type=0 THEN '自检' WHEN pp.check_type=1 THEN '互检' ELSE '专检' END) AS checkType,
+        select ppt.total_progress AS progress,pp.name AS procedureName,(CASE  WHEN pp.check_type=0 THEN '自检' WHEN pp.check_type=1 THEN '互检' ELSE '专检' END) AS checkType,
         p.name AS productName,DATE_FORMAT(plan.start_date,'%Y%m%d') AS planStartDate,DATE_FORMAT(plan.end_date,'%Y%m%d') AS planEndDate ,
         plan.task_change_notice_num AS taskName,plan.plan_type AS planType,plan.product_scheduling_num
         FROM prod_procedure_team ppt2
         LEFT JOIN plan_procedure_total ppt ON ppt.id=ppt2.plan_procedure_id
         LEFT JOIN plan ON plan.id=ppt.plan_id
-        LEFT JOIN report r ON r.user_procedure_team_id=ppt2.id
+        LEFT JOIN (SELECT SUM(working_time) AS sumReport,user_procedure_team_id,create_date FROM report GROUP BY user_procedure_team_id,create_date) AS r ON r.user_procedure_team_id=ppt2.id  AND r.create_date=ppt2.distribute_date
         LEFT JOIN prod_procedure pp ON ppt.prod_procedure_id=pp.id
         LEFT JOIN product p ON p.id=plan.product_id
-        WHERE ppt2.company_id=#{companyId} and r.id is null
+        WHERE ppt2.company_id=#{companyId}
+        AND r.sumReport &lt; ppt2.work_time
         <if test="date!=null and date!=''">
             and ppt2.distribute_date=#{date}
         </if>
@@ -270,6 +271,7 @@
         <if test="startDate!=null and endDate!=null">
             and ppt2.distribute_date between #{startDate} and #{endDate}
         </if>
+        GROUP BY ppt2.id
     </select>
 
     <select id="getPersonWorkHoursWagesWithHasReport" resultType="java.util.Map">

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

@@ -1762,5 +1762,209 @@
   "feiYongBaoXiaoChengBen": "Expense reimbursement cost",
   "gongShiChengBen": "Labor cost",
   "gongShiHeJi": "Total working hours",
-  "riQiQuJian": "Date range:"
+  "riQiQuJian": "Date range:",
+  "buMenChengBen": "Departmental costs:",
+  "gongShi": "Working hours:",
+  "gongZuoChengBen": "Work cost:",
+  "xiangMuMingCheng": "Project Name:",
+  "bianJiMoRenMoBan": "Edit default template",
+  "jieDian": "node",
+  "moBanMa": "Is it a template",
+  "moRenWenJianJia": "Default folder",
+  "qingShuRuJieDianMingCheng": "Please enter the node name",
+  "queDingShanChu": "Confirm deletion",
+  "tongBuXiuGaiQiTaXiangMuZhongDeTongMingWenJianJia": "Synchronize and modify folders with the same name in other projects",
+  "xinZengJieDian": "Add nodes",
+  "ziDingYiMingCheng": "Custom Name",
+  "jianCeDaoYou": "Detected presence",
+  "mingYiTianGongShiRenYuanZaiXinZiBiaoZhongWuJiLuBuCanYuChengBenFenTan": "Personnel with completed working hours have no record in the salary table and will not participate in cost allocation",
+  "paiChuBuFenXiangMu": "Exclude some items",
+  "quanBuYiTianBaoXiangMu": "All reported projects",
+  "shangChuan": "upload",
+  "wuXinZiRenYuanLieBiao": "List of unpaid personnel",
+  "xuanZeBuFenXiangMu": "Select some projects",
+  "yiShangRenYuanDangYueYiTianXieGongShiQingDaoRuTaMenDeXinZi": "*The above personnel have already filled in their working hours for the current month. Please import their salaries.",
+  "10Yue": "October",
+  "11Yue": "November",
+  "12Yue": "December",
+  "1Yue": "January",
+  "2Yue": "February",
+  "3Yue": "March",
+  "4Yue": "April",
+  "5Yue": "May",
+  "6Yue": "June",
+  "7Yue": "July",
+  "8Yue": "August",
+  "9Yue": "September",
+  "anRenYuanChaKan": "View by Personnel",
+  "baYue": "August",
+  "chiXuShiJian": "Duration",
+  "erYue": "February",
+  "fenZhong": "minute",
+  "guanLian": "relation",
+  "jiangBeiShanChu": "place it on clipboard",
+  "jieShu": "(End)",
+  "jinTian": "today",
+  "jiuYue": "September",
+  "kaiShi": "(Start)",
+  "liuYue": "June",
+  "nian": "year",
+  "qiYue": "July",
+  "qingQueRenShiFouCheXiaoXiuGai": "Please confirm if the modification has been revoked!",
+  "renWuMing": "Task Name",
+  "ri": "day",
+  "sanYue": "March",
+  "shiErYue": "December",
+  "shiFouShanChuRiCheng": "Do you want to delete the schedule?",
+  "shiJianFanWei": "time frame",
+  "shiYiYue": "November",
+  "shiYue": "October",
+  "siYue": "April",
+  "thisTWuyue": "this.$t('wuYue')",
+  "wuYue": "May",
+  "xiangXi": "detailed",
+  "xinJianRiCheng": "New Schedule",
+  "xingQiEr": "Tuesday",
+  "xingQiLiu": "Saturday",
+  "xingQiRi": "Sunday",
+  "xingQiSan": "Wednesday",
+  "xingQiSi": "Thursday",
+  "xingQiWu": "Friday",
+  "xingQiYi": "Monday",
+  "yiYue": "January",
+  "zhou": "week",
+  "jiHuaJieShuRiQi": "Plan End Date",
+  "shiJiYuGuGongShi": "Actual/estimated working hours:",
+  "ciCaoZuoJiangYongJiuShanChuGaiWenJianShiFouJiXu": "This operation will permanently delete the file. Do you want to continue?",
+  "congGaiRiQiQiTianBaoGongShiKaiShiZhanYongYuSuanRenTianGongShi": "Starting from this date, the reported working hours will occupy the budgeted person day working hours",
+  "feiBiTian": "Not mandatory",
+  "feiXiangMuGongShi": "Non project working hours",
+  "fenZuFuZeRen": "Group leader:",
+  "fenZuGongShiBuZuShi": "When group working hours are insufficient",
+  "fenZuGongShiShengYuTiXingBaiFenBi": "Group Work Remaining Reminder Percentage",
+  "fenZuMingCheng": "Group name:",
+  "fuZhiDaoQiTaXiangMu": "Copy to other projects",
+  "genJuXiTongJiChuSheZhiMeiRiZhengChangGongZuoShiChangJiSuan_1RenTianWeiYiGeMeiRiZhengChangGongZuoShiChang": "According to the basic system settings, the daily normal working hours are calculated, and 1 person day is a daily normal working hour",
+  "gongShiLeiXing": "Work hour type",
+  "gongShiXiTongChuangJianDeXiangMuBiTian": "Items created by the working hours system must be filled in",
+  "gongShiXiTongHeWaiBuTongBuDeXiangMuDuBiTian": "Both the work hour system and external synchronization projects are mandatory",
+  "gongZuoNeiRong": "job content",
+  "gongZuoZhiZe": "operating duty",
+  "guanBiChengGong": "Closed successfully",
+  "guanKongKaiShiRiQi": "Control start date",
+  "jinZhiTianBao": "Prohibit reporting",
+  "kaiQiChengGong": "Successfully opened",
+  "keYiTianBaoJinTiXing": "Can be filled out, only reminder",
+  "piLiangSheZhiFenZuFuZeRen": "Batch setting of group leaders",
+  "piLiangSheZhiRenWuFenZuFuZeRen": "Batch set task group leader",
+  "piLiangZengJiaRenWuFenZu": "Batch adding task groups",
+  "qingTianXieFenZuMingCheng": "Please fill in the group name",
+  "qingTianXieGongZuoNeiRong": "Please fill in the job description",
+  "qingXuanZeChaoSongRen": "Please select a CC recipient",
+  "qingXuanZeFenZuFuZeRen": "Please select the group leader",
+  "qingXuanZeJpgHuoJpegWenJian": "Please select a. jpg or. jpeg file",
+  "qingXuanZeSuoShuBuMen": "Please select the department you belong to",
+  "queRenTongBuXiangMuShuJu": "Confirm synchronizing project data?",
+  "renTianYuGuGongShi": "Man day (estimated working hours:",
+  "riBaoChaoSongRen": "Daily copy recipient",
+  "shengYuYuGuGongShi": "Remaining estimated working hours",
+  "tianJiaYiHang": "Add a row",
+  "weiTongBuXiangMu": "Unsynchronized items",
+  "xiaZaiDuoXiangMuRenWuMoBan": "Download multi project task templates",
+  "xiangMuDaoChuZhongQingShaoHou": "Project export in progress, please wait",
+  "xiangMuFuWuTongBu": "Project service synchronization",
+  "xiangMuGongShi": "Project working hours",
+  "xiangMuGongShiBuZuShi": "When project hours are insufficient",
+  "xiangMuGongShiShengYuTiXingBaiFenBi": "Remaining reminder percentage of project hours",
+  "xiangMuRenTian": "Project person day",
+  "xiangMuShenHeRenShenHe": "Project Reviewer Review",
+  "xiangMuSuoShuBuFuZeRenShenHe": "Reviewed by the BU responsible person for the project",
+  "xiangMuTongBuChengGong": "Project synchronization successful",
+  "xiangMuYuGuGongShiPeiZhi": "Project estimated working hours configuration",
+  "xuanZeYaoFuZhiDaoDeMuBiaoXiangMu": "Select the target project to copy to",
+  "yiTongBuXiangMu": "Synchronized project",
+  "yuGuGongShiBuNengWei_0": "Estimated working hours cannot be 0",
+  "yuGuGongShiShiFouBiTian": "Is estimated working hours mandatory",
+  "zhengZaiTongBuZhongQingNaiXinDengDai": "Syncing in progress, please be patient.",
+  "zhiNengFenGongSheZhi": "Functional division of labor setting",
+  "bianJiBiaoDanZiDuan": "Edit Form Fields",
+  "bianJiShiBai": "Editing failed:",
+  "qingShuRuZiDingYiMingCheng": "Please enter a custom name",
+  "shanChuShiBai": "Delete failed:",
+  "tianJiaBiaoDanZiDuan": "Add form fields",
+  "tianJiaShiBai": "Add failed:",
+  "wenBen": "text",
+  "zuiDuoZhiNengCunZaiShiGeZiDingYiZiDuan": "Up to ten custom fields can exist",
+  "dangQianXiangMuYuGuGongShiWei": "The estimated working hours for the current project are:",
+  "qingShuRuBianGengLiYou": "Please enter the reason for the change",
+  "qingShuRuYuGuGongShi": "Please enter estimated working hours",
+  "qingShuShuRuGuanJianZiGuoLv": "Please enter keywords for filtering",
+  "ruXuXiuGaiQingXianLianXiGuanLiYuan": "If you need to make modifications, please contact the administrator first",
+  "sheZhiFenZuYuGuGongShi": "Set group estimated working hours",
+  "shiFouYiChuCiWenJian": "Do you want to remove this file?",
+  "yinCangYiWanChengRenWu": "Hide completed tasks",
+  "yuGuGongShiRenTian": "Estimated working hours (person days)",
+  "yuGuGongShiXiaoShi": "Estimated working hours (hours)",
+  "yuGuGongShiXiuGai": "Estimated working hours modification",
+  "yuanYuGuGongShi": "Original estimated working hours",
+  "caoZuoJiLu": "Operation records",
+  "leRiBao": "The Daily News",
+  "liXiangDaoChuXlsx": "Project proposal export. xlsx",
+  "liXiangDaoRu": "Project initiation import",
+  "liXiangDaoRuJieGuo": "Project initiation import results",
+  "liXiangDaoRuMoBanXlsx": "Project Import Template. xlsx",
+  "liXiangShuJu": "Project proposal data",
+  "queDingYaoShanChuLiXiang": "Confirm to delete the project proposal",
+  "shanChuLiXiang": "Delete project proposal",
+  "anZhaoQiYeQingKuangTiaoZheng": "Adjust according to the situation of the enterprise",
+  "buFenChengYuan": "Some members",
+  "buMenHeXiangMuRiBaoShenHeRenBingHangShenHe": "Department and project daily report reviewers conduct parallel reviews",
+  "eWaiGongZuoRiSheZhi": "Extra working days setting:",
+  "feiGongZuoRiHanZhouMoWeiFaDingGongZuoRiJinZhiTianBao": "Non working days (including weekends as legal working days) are prohibited from filling in",
+  "fenZuFuZeRenShenHe": "Group leader review",
+  "gongZuoRiTianXieJiaBanShiChangBuDeChaoGuoZongGongZuoShiChangZhengChangGongZuoShiChang": "On weekdays, overtime hours must not exceed the total working hours minus normal working hours",
+  "guanBiRiBaoTianBaoGongNeng": "Turn off the daily report filling function",
+  "hao": "number",
+  "haoHanQianTianBao": "Fill in before (including) the number.",
+  "jiaBanShiChangXiaoYan": "Overtime duration verification",
+  "kaiQiHouChaoGuoXiangMuJiHuaJieShuRiQiDeRiBaoJiangBuKeTianBao": "Daily reports that exceed the end date of the project plan after opening will not be able to be filled in",
+  "keYong_0BiaoShiDaiShenHeTiaoShuLiRu_0JiangBeiTiHuanWei_10": "({0} can be used to represent the number of pending reviews, for example: {0} will be replaced with 10.)",
+  "keYong_0BiaoShiLouTianRiQiLiRu_0JiangBeiTiHuanWei_05240525": "(You can use {0} to indicate a missing date, for example: {0} will be replaced with 05/24, 05/25.)",
+  "mei": "each",
+  "meiYue": "monthly",
+  "piLiangDaiTianHanZhouMo": "Batch/proxy filling including weekends",
+  "qiTaFaDingJieRi": "Other statutory holidays",
+  "qingShuRuMingZiSouSuo": "Please enter your name to search",
+  "qingXianDianJiXiTongJiChuSheZhi": "Please click on the system basic settings first",
+  "quanGongSi": "Whole company",
+  "queDingShanChuZheTiaoShuJuMa": "Are you sure to delete this data?",
+  "renWuShiFouBiTian": "Is the task required",
+  "riBaoShenHeMoShi": "Daily report review mode",
+  "ruXuXiuGaiWeiQiTaShenHeMoShiQingLianXiKeFu": "If you need to modify to other review modes, please contact customer service",
+  "teShuJieJiaRiLieBiao": "List of Special Holidays",
+  "teShuJieJiaRiSheZhi": "Special holiday settings",
+  "tiXing": "remind",
+  "tianBaoRiBaoShiFouYinCangJieDuan": "Is the stage hidden when filling out daily reports",
+  "tianBaoRiBaoShiFouYinCangRenWu": "Is the task hidden when filling out the daily report",
+  "tianBaoShiKeDuoXuan": "Multiple choices are allowed when filling out the form",
+  "tiaoGuo": "skip",
+  "xianFenZuFuZeRenShenHeZaiXiangMuJingLiShenHe": "First, the group leader will review and then the project manager will review",
+  "xiangMuChaoQiHouBuKeTianBao": "The project cannot be filled out after the deadline",
+  "xiangMuSuoShuBuShenHe": "BU review to which the project belongs",
+  "youXiaoBuMen": "Effective department",
+  "youXiaoFanWei": "Effective range",
+  "youXiaoRenYuan": "Effective personnel",
+  "yuCiYue": "In the following month",
+  "yuanGongZiYouXuanZeShenPiRen": "Employees are free to choose approvers",
+  "zhiShuHuoBuMenFuZeRenShenHeXiangMuRiBaoShenHeRenShenHe": "Direct or department head review ->Project daily report review by reviewer",
+  "zhiShuShenHeRenHuoBuMenFuZeRenShenHe": "Reviewed by the direct reviewer or department head",
+  "chengGongFaQiHuiYi": "Successfully initiated the meeting",
+  "daiBanRenWuDaoChuXlsx": "To Do Task Export.xlsx",
+  "faQiHuiYi": "sponsor a conference",
+  "huiYiJieShuShiJian": "Meeting end time",
+  "huiYiKaiShiShiJian": "Meeting start time",
+  "qingXuanZeZeRenRen": "Please select the responsible person",
+  "xinJianRenWu": "New Task",
+  "xuanZeRiQiShiJian": "Select date and time",
+  "zhongQiRenWu": "Restart task"
 }

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

@@ -1762,5 +1762,209 @@
   "gongShiChengBen": "工时成本",
   "gongShiHeJi": "工时合计",
   "feiYongBaoXiaoChengBen": "费用报销成本",
-  "baoXiaoHeJi": "报销合计"
+  "baoXiaoHeJi": "报销合计",
+  "buMenChengBen": "部门成本:",
+  "gongShi": "工时 :",
+  "xiangMuMingCheng": "项目名称:",
+  "gongZuoChengBen": "工作成本 :",
+  "moRenWenJianJia": "默认文件夹",
+  "ziDingYiMingCheng": "自定义名称",
+  "tongBuXiuGaiQiTaXiangMuZhongDeTongMingWenJianJia": "同步修改其他项目中的同名文件夹",
+  "bianJiMoRenMoBan": "编辑默认模板",
+  "xinZengJieDian": "新增节点",
+  "qingShuRuJieDianMingCheng": "请输入节点名称",
+  "queDingShanChu": "确定删除",
+  "moBanMa": "模板吗",
+  "jieDian": "节点",
+  "jianCeDaoYou": "检测到有",
+  "mingYiTianGongShiRenYuanZaiXinZiBiaoZhongWuJiLuBuCanYuChengBenFenTan": "名已填工时人员在薪资表中无记录,不参与成本分摊",
+  "shangChuan": "上传",
+  "wuXinZiRenYuanLieBiao": "无薪资人员列表",
+  "yiShangRenYuanDangYueYiTianXieGongShiQingDaoRuTaMenDeXinZi": "*以上人员当月已填写工时,请导入他们的薪资。",
+  "quanBuYiTianBaoXiangMu": "全部已填报项目",
+  "xuanZeBuFenXiangMu": "选择部分项目",
+  "paiChuBuFenXiangMu": "排除部分项目",
+  "yiYue": "一月",
+  "erYue": "二月",
+  "sanYue": "三月",
+  "siYue": "四月",
+  "wuYue": "五月",
+  "liuYue": "六月",
+  "qiYue": "七月",
+  "baYue": "八月",
+  "thisTWuyue": "this.$t('wuYue')",
+  "jiuYue": "九月",
+  "shiYue": "十月",
+  "shiYiYue": "十一月",
+  "shiErYue": "十二月",
+  "1Yue": "1月",
+  "2Yue": "2月",
+  "3Yue": "3月",
+  "4Yue": "4月",
+  "5Yue": "5月",
+  "6Yue": "6月",
+  "7Yue": "7月",
+  "8Yue": "8月",
+  "9Yue": "9月",
+  "10Yue": "10月",
+  "11Yue": "11月",
+  "12Yue": "12月",
+  "xingQiRi": "星期日",
+  "xingQiYi": "星期一",
+  "xingQiEr": "星期二",
+  "xingQiSan": "星期三",
+  "xingQiSi": "星期四",
+  "xingQiWu": "星期五",
+  "xingQiLiu": "星期六",
+  "ri": "日",
+  "jinTian": "今天",
+  "zhou": "周",
+  "xinJianRiCheng": "新建日程",
+  "xiangXi": "详细",
+  "qingQueRenShiFouCheXiaoXiuGai": "请确认是否撤销修改!",
+  "shiFouShanChuRiCheng": "是否删除日程?",
+  "shiJianFanWei": "时间范围",
+  "renWuMing": "任务名",
+  "chiXuShiJian": "持续时间",
+  "guanLian": "关联",
+  "jiangBeiShanChu": "将被删除",
+  "kaiShi": "(开始)",
+  "jieShu": "(结束)",
+  "fenZhong": "分钟",
+  "nian": "年",
+  "anRenYuanChaKan": "按人员查看",
+  "shiJiYuGuGongShi": "实际/预估工时:",
+  "jiHuaJieShuRiQi": "计划结束日期",
+  "shengYuYuGuGongShi": "剩余预估工时",
+  "piLiangZengJiaRenWuFenZu": "批量增加任务分组",
+  "piLiangSheZhiFenZuFuZeRen": "批量设置分组负责人",
+  "riBaoChaoSongRen": "日报抄送人",
+  "qingXuanZeChaoSongRen": "请选择抄送人",
+  "xiangMuRenTian": "项目人天",
+  "renTianYuGuGongShi": "人天(预估工时:",
+  "genJuXiTongJiChuSheZhiMeiRiZhengChangGongZuoShiChangJiSuan_1RenTianWeiYiGeMeiRiZhengChangGongZuoShiChang": "根据系统基础设置每日正常工作时长计算,1人天为一个每日正常工作时长",
+  "guanKongKaiShiRiQi": "管控开始日期",
+  "congGaiRiQiQiTianBaoGongShiKaiShiZhanYongYuSuanRenTianGongShi": "从该日期起,填报工时开始占用预算人天工时",
+  "fuZhiDaoQiTaXiangMu": "复制到其他项目",
+  "xuanZeYaoFuZhiDaoDeMuBiaoXiangMu": "选择要复制到的目标项目",
+  "xiangMuYuGuGongShiPeiZhi": "项目预估工时配置",
+  "yuGuGongShiShiFouBiTian": "预估工时是否必填",
+  "feiBiTian": "非必填",
+  "gongShiXiTongChuangJianDeXiangMuBiTian": "工时系统创建的项目必填",
+  "gongShiXiTongHeWaiBuTongBuDeXiangMuDuBiTian": "工时系统和外部同步的项目都必填",
+  "xiangMuGongShiShengYuTiXingBaiFenBi": "项目工时剩余提醒百分比",
+  "xiangMuGongShiBuZuShi": "项目工时不足时",
+  "jinZhiTianBao": "禁止填报",
+  "keYiTianBaoJinTiXing": "可以填报,仅提醒",
+  "fenZuGongShiShengYuTiXingBaiFenBi": "分组工时剩余提醒百分比",
+  "fenZuGongShiBuZuShi": "分组工时不足时",
+  "xiangMuShenHeRenShenHe": "项目审核人审核",
+  "xiangMuSuoShuBuFuZeRenShenHe": "项目所属BU负责人审核",
+  "zhiNengFenGongSheZhi": "职能分工设置",
+  "gongShiLeiXing": "工时类型",
+  "gongZuoZhiZe": "工作职责",
+  "gongZuoNeiRong": "工作内容",
+  "tianJiaYiHang": "添加一行",
+  "piLiangSheZhiRenWuFenZuFuZeRen": "批量设置任务分组负责人",
+  "fenZuMingCheng": "分组名称:",
+  "fenZuFuZeRen": "分组负责人:",
+  "xiangMuFuWuTongBu": "项目服务同步",
+  "yiTongBuXiangMu": "已同步项目",
+  "weiTongBuXiangMu": "未同步项目",
+  "xiaZaiDuoXiangMuRenWuMoBan": "下载多项目任务模板",
+  "qingXuanZeSuoShuBuMen": "请选择所属部门",
+  "xiangMuGongShi": "项目工时",
+  "feiXiangMuGongShi": "非项目工时",
+  "qingXuanZeJpgHuoJpegWenJian": "请选择.jpg或.jpeg文件",
+  "qingTianXieFenZuMingCheng": "请填写分组名称",
+  "qingXuanZeFenZuFuZeRen": "请选择分组负责人",
+  "xiangMuDaoChuZhongQingShaoHou": "项目导出中、请稍后...",
+  "queRenTongBuXiangMuShuJu": "确认同步项目数据?",
+  "zhengZaiTongBuZhongQingNaiXinDengDai": "正在同步中,请耐心等待。",
+  "xiangMuTongBuChengGong": "项目同步成功",
+  "yuGuGongShiBuNengWei_0": "预估工时不能为0",
+  "kaiQiChengGong": "开启成功",
+  "guanBiChengGong": "关闭成功",
+  "ciCaoZuoJiangYongJiuShanChuGaiWenJianShiFouJiXu": "此操作将永久删除该文件, 是否继续?",
+  "qingTianXieGongZuoNeiRong": "请填写工作内容",
+  "tianJiaBiaoDanZiDuan": "添加表单字段",
+  "wenBen": "文本",
+  "bianJiBiaoDanZiDuan": "编辑表单字段",
+  "qingShuRuZiDingYiMingCheng": "请输入自定义名称",
+  "zuiDuoZhiNengCunZaiShiGeZiDingYiZiDuan": "最多只能存在十个自定义字段",
+  "tianJiaShiBai": "添加失败:",
+  "bianJiShiBai": "编辑失败:",
+  "shanChuShiBai": "删除失败:",
+  "ruXuXiuGaiQingXianLianXiGuanLiYuan": "如需修改,请先联系管理员",
+  "yinCangYiWanChengRenWu": "隐藏已完成任务",
+  "qingShuShuRuGuanJianZiGuoLv": "请输输入关键字过滤",
+  "sheZhiFenZuYuGuGongShi": "设置分组预估工时",
+  "yuGuGongShiRenTian": "预估工时(人天)",
+  "yuGuGongShiXiaoShi": "预估工时(小时)",
+  "dangQianXiangMuYuGuGongShiWei": "当前项目预估工时为:",
+  "yuanYuGuGongShi": "原预估工时",
+  "yuGuGongShiXiuGai": "预估工时修改",
+  "qingShuRuYuGuGongShi": "请输入预估工时",
+  "shiFouYiChuCiWenJian": "是否移除此文件?",
+  "qingShuRuBianGengLiYou": "请输入变更理由",
+  "caoZuoJiLu": "操作记录",
+  "leRiBao": "了日报",
+  "liXiangDaoRu": "立项导入",
+  "liXiangDaoRuMoBanXlsx": "立项导入模板.xlsx",
+  "liXiangDaoRuJieGuo": "立项导入结果",
+  "queDingYaoShanChuLiXiang": "确定要删除立项",
+  "shanChuLiXiang": "删除立项",
+  "liXiangShuJu": "立项数据",
+  "liXiangDaoChuXlsx": "立项导出.xlsx",
+  "jiaBanShiChangXiaoYan": "加班时长校验",
+  "gongZuoRiTianXieJiaBanShiChangBuDeChaoGuoZongGongZuoShiChangZhengChangGongZuoShiChang": "工作日填写加班时长不得超过总工作时长-正常工作时长",
+  "meiYue": "每月",
+  "hao": "号",
+  "mei": "每",
+  "tiXing": "提醒",
+  "keYong_0BiaoShiLouTianRiQiLiRu_0JiangBeiTiHuanWei_05240525": "(可用{0}表示漏填日期,例如:{0}将被替换为05/24,05/25。)",
+  "keYong_0BiaoShiDaiShenHeTiaoShuLiRu_0JiangBeiTiHuanWei_10": "(可用{0}表示待审核条数,例如:{0}将被替换为10。)",
+  "eWaiGongZuoRiSheZhi": "额外工作日设置:",
+  "qiTaFaDingJieRi": "其他法定节日",
+  "guanBiRiBaoTianBaoGongNeng": "关闭日报填报功能",
+  "feiGongZuoRiHanZhouMoWeiFaDingGongZuoRiJinZhiTianBao": "非工作日(含周末为法定工作日)禁止填报",
+  "piLiangDaiTianHanZhouMo": "批量/代填含周末",
+  "yuCiYue": "于次月",
+  "haoHanQianTianBao": "号(含)前填报。",
+  "riBaoShenHeMoShi": "日报审核模式",
+  "ruXuXiuGaiWeiQiTaShenHeMoShiQingLianXiKeFu": "如需修改为其他审核模式,请联系客服",
+  "xiangMuChaoQiHouBuKeTianBao": "项目超期后不可填报",
+  "kaiQiHouChaoGuoXiangMuJiHuaJieShuRiQiDeRiBaoJiangBuKeTianBao": "开启后超过项目计划结束日期的日报将不可填报",
+  "tianBaoShiKeDuoXuan": "填报时可多选",
+  "tianBaoRiBaoShiFouYinCangJieDuan": "填报日报是否隐藏阶段",
+  "tianBaoRiBaoShiFouYinCangRenWu": "填报日报是否隐藏任务",
+  "renWuShiFouBiTian": "任务是否必填",
+  "teShuJieJiaRiLieBiao": "特殊节假日列表",
+  "youXiaoFanWei": "有效范围",
+  "youXiaoBuMen": "有效部门",
+  "quanGongSi": "全公司",
+  "buFenChengYuan": "部分成员",
+  "youXiaoRenYuan": "有效人员",
+  "teShuJieJiaRiSheZhi": "特殊节假日设置",
+  "qingShuRuMingZiSouSuo": "请输入名字搜索",
+  "fenZuFuZeRenShenHe": "分组负责人审核",
+  "xianFenZuFuZeRenShenHeZaiXiangMuJingLiShenHe": "先分组负责人审核再项目经理审核",
+  "yuanGongZiYouXuanZeShenPiRen": "员工自由选择审批人",
+  "xiangMuSuoShuBuShenHe": "项目所属BU审核",
+  "zhiShuShenHeRenHuoBuMenFuZeRenShenHe": "直属审核人或部门负责人审核",
+  "zhiShuHuoBuMenFuZeRenShenHeXiangMuRiBaoShenHeRenShenHe": "直属或部门负责人审核->项目日报审核人审核",
+  "buMenHeXiangMuRiBaoShenHeRenBingHangShenHe": "部门和项目日报审核人并行审核",
+  "anZhaoQiYeQingKuangTiaoZheng": "按照企业情况调整",
+  "qingXianDianJiXiTongJiChuSheZhi": "请先点击系统基础设置",
+  "tiaoGuo": "跳过",
+  "queDingShanChuZheTiaoShuJuMa": "确定删除这条数据吗?",
+  "xinJianRenWu": "新建任务",
+  "zhongQiRenWu": "重启任务",
+  "qingXuanZeZeRenRen": "请选择责任人",
+  "faQiHuiYi": "发起会议",
+  "huiYiKaiShiShiJian": "会议开始时间",
+  "xuanZeRiQiShiJian": "选择日期时间",
+  "huiYiJieShuShiJian": "会议结束时间",
+  "chengGongFaQiHuiYi": "成功发起会议",
+  "daiBanRenWuDaoChuXlsx": "待办任务导出.xlsx"
 }

+ 10 - 10
fhKeeper/formulahousekeeper/timesheet/src/views/project/detailDep.vue

@@ -4,24 +4,24 @@
         <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
             <el-form :inline="true">
                 <el-form-item>
-                    <el-button type="text" @click="backToList" icon="el-icon-back" class="back">返回</el-button>
+                    <el-button type="text" @click="backToList" icon="el-icon-back" class="back">{{ $t('fan-hui') }}</el-button>
                 </el-form-item>
                 <el-form-item class="divLine"></el-form-item>
                 <el-form-item style="width: 500px">
                     <!-- <div class="dipali"> -->
                         <!-- <span class="workName">{{detailName}}</span> -->
 
-                        <el-cascader v-if="user.userNameNeedTranslate != '1'" v-model="departmentId" placeholder="请选择部门" style="width: 180px;margin-left:10px;" @change="getList"
+                        <el-cascader v-if="user.userNameNeedTranslate != '1'" v-model="departmentId" :placeholder="$t('qing-xuan-ze-bu-men')" style="width: 180px;margin-left:10px;" @change="getList"
                         :options="option" :props="{ checkStrictly: true }" :show-all-levels="false"></el-cascader>
 
                         <vueCascader v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :widthStr="'180'" :clearable="true" :subject="option" :radios="true" :distinction="'1'" @vueCasader="vueCasader" :selectNameChuan="$t('qing-xuan-ze-bu-men')"></vueCascader>
                     <!-- </div> -->
                 </el-form-item>
                 <el-form-item >
-                    <span style="color:#666;">时间段:{{startDate}}<span style="padding-left:5px;padding-right:5px;">至</span>{{endDate}}</span>
+                    <span style="color:#666;">{{ $t('message.period') }} :{{startDate}}<span style="padding-left:5px;padding-right:5px;">{{ $t('other.to') }}</span>{{endDate}}</span>
                 </el-form-item>
                 <el-form-item style="float:right;">
-                    <span style="font-size:18px;">部门成本:<span style="color:#20a0ff;">{{cost.toFixed(2)}}元</span></span>
+                    <span style="font-size:18px;">{{ $t('buMenChengBen') }}<span style="color:#20a0ff;">{{cost.toFixed(2)}} {{ $t('yuan') }}</span></span>
                 </el-form-item>
             </el-form>
         </el-col> 
@@ -292,16 +292,16 @@
                                 }
                                 var res
                                 if(_this.user.userNameNeedTranslate != 1) {
-                                    res = params[0].name + " 工时 : " + totalTime.toFixed(1)+"小时<br/>";
+                                    res = params[0].name + this.$t('gongShi')+ totalTime.toFixed(1)+this.$t('time.hour') + "<br/>";
                                 } else {
-                                    res = " 工时 : " + totalTime.toFixed(1)+"小时<br/>";
+                                    res = "this.$t('gongShi')" + totalTime.toFixed(1)+this.$t('time.hour')+"<br/>";
                                 }
                                 
                                 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 
-                                            + "</font><br/>工作成本 : " + params[i].data.money
-                                            + " <br/>工作时长"+" : " + params[i].data.cost + "小时</br></div>";
+                                        res += "<div style='margin-top:3px;font-size:12px;'><font color='#ddd'>"+ _this.$t('xiangMuMingCheng') + params[i].seriesName 
+                                            + "</font><br/>"+ _this.$t('gongZuoChengBen') + params[i].data.money
+                                            + _this.$t('yuan') +" <br/>"+ _this.$t('screening.workTime') +" : " + params[i].data.cost + _this.$t('time.hour')+ "</br></div>";
                                     }
                                 }
                                 return res;
@@ -324,7 +324,7 @@
                     myChart.setOption(option, {notMerge: true});
                 } else {
                     this.$message({
-                        message: "暂无数据",
+                        message: this.$t('nodata'),
                         type: "error"
                         });
                 }

+ 25 - 25
fhKeeper/formulahousekeeper/timesheet/src/views/project/fileCenter.vue

@@ -8,7 +8,7 @@
             <span style="float:right;">
                 <!-- <el-link type="primary" :underline="false" v-if="list.length
                 > 0"><i class="el-icon-setting"></i><span style="margin-right:5px;" @click="templatedialingClick('设为模板')">设为模板</span></el-link> -->
-                    <el-link type="primary" :underline="false" @click="defaultTemplate" v-if="permissions.projectEditDefaultFolder"><i class="el-icon-folder-add"></i><span style="margin-left:5px;">默认文件夹</span></el-link>
+                    <el-link type="primary" :underline="false" @click="defaultTemplate" v-if="permissions.projectEditDefaultFolder"><i class="el-icon-folder-add"></i><span style="margin-left:5px;">{{ $t('moRenWenJianJia') }}</span></el-link>
                     <el-link type="primary" :underline="false" @click="createFolder"><i class="el-icon-folder-add"></i><span style="margin-left:5px;">{{ $t('createafolder') }}</span></el-link>
                     <el-upload ref="upload" action="#" :http-request="uploadFile" :show-file-list="false" :limit="1" style="display:inline-block;">
                         <el-link type="primary" :underline="false" style="margin-left:10px;"><i class="iconfont firerock-iconshangchuan"></i><span style="margin-left:5px;">{{ $t('fileupload') }}</span></el-link>
@@ -113,7 +113,7 @@
         <el-dialog :title="$t('modifyingFolder')" v-if="addFolderDialog" :visible.sync="addFolderDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <div class="titleBox">
                 <el-tabs v-model="activeName" @tab-click="handleClick" v-if="!addFolderDialogTwo">
-                    <el-tab-pane label="自定义名称" name="one">
+                    <el-tab-pane :label="$t('ziDingYiMingCheng')" name="one">
                         <el-form ref="form2" :model="folderForm" :rules="rules" style="margin-top: 10px">
                             <el-form-item prop="documentName">
                                 <el-input v-model="folderForm.documentName" :placeholder="$t('pleaseenterfoldername')" maxlength="25"
@@ -145,7 +145,7 @@
                             show-word-limit clearable></el-input>
                     </el-form-item>
                     <el-form-item >
-                        <el-checkbox v-model="folderForm.syncChange">同步修改其他项目中的同名文件夹</el-checkbox>
+                        <el-checkbox v-model="folderForm.syncChange">{{ $t('tongBuXiuGaiQiTaXiangMuZhongDeTongMingWenJianJia') }}</el-checkbox>
                     </el-form-item>
                 </el-form>
             </div>
@@ -156,7 +156,7 @@
         </el-dialog>
 
         <!-- 设为模板 -->
-        <el-dialog :title="'编辑默认模板'" v-if="templatedialing" :visible.sync="templatedialing" :close-on-click-modal="false" customClass="customWidth" width="500px">
+        <el-dialog :title="$t('bianJiMoRenMoBan')" v-if="templatedialing" :visible.sync="templatedialing" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <div>
                 <div class="filrTree">
                     <el-tree
@@ -184,12 +184,12 @@
         </el-dialog>
 
         <!-- 添加子节点 -->
-        <el-dialog :title="'新增节点'" v-if="addtemplateNodeDailoing" :visible.sync="addtemplateNodeDailoing" :close-on-click-modal="false" customClass="customWidth" width="500px">
+        <el-dialog :title="$t('xinZengJieDian')" v-if="addtemplateNodeDailoing" :visible.sync="addtemplateNodeDailoing" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <div>
                 <el-form :model="nodeForm" ref="nodeForm" label-width="100px" class="demo-ruleForm">
-                    <el-form-item label="节点名称" prop="name"
+                    <el-form-item :label="$t('nameofthenode')" prop="name"
                         :rules="[
-                            { required: true, message: '请输入节点名称'}
+                            { required: true, message: $t('qingShuRuJieDianMingCheng')}
                         ]"
                     >
                         <el-input v-model="nodeForm.name"></el-input>
@@ -197,16 +197,16 @@
                 </el-form>
             </div>
             <div slot="footer" class="dialog-footer">
-                <el-button type="primary" style="width:100%;" @click="addtemplateNode('nodeForm')">确定</el-button>
+                <el-button type="primary" style="width:100%;" @click="addtemplateNode('nodeForm')">{{ $t('btn.determine') }}</el-button>
             </div>
         </el-dialog>
         <!-- 点击第一级的节点 -->
-        <el-dialog :title="'新增节点'" v-if="addtemplateTwoNodeDailoing" :visible.sync="addtemplateTwoNodeDailoing" :close-on-click-modal="false" customClass="customWidth" width="500px">
+        <el-dialog :title="$t('xinZengJieDian')" v-if="addtemplateTwoNodeDailoing" :visible.sync="addtemplateTwoNodeDailoing" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <div>
                 <el-form :model="nodeForm" ref="nodeForms" label-width="100px" class="demo-ruleForm">
-                    <el-form-item label="节点名称" prop="name"
+                    <el-form-item label="$t('nameofthenode')" prop="name"
                         :rules="[
-                            { required: true, message: '请输入节点名称'}
+                            { required: true, message: $t('qingShuRuJieDianMingCheng')}
                         ]"
                     >
                         <el-input v-model="nodeForm.name"></el-input>
@@ -214,16 +214,16 @@
                 </el-form>
             </div>
             <div slot="footer" class="dialog-footer">
-                <el-button type="primary" style="width:100%;" @click="addtemplateTwoNode('nodeForms')">确定</el-button>
+                <el-button type="primary" style="width:100%;" @click="addtemplateTwoNode('nodeForms')">{{ $t('btn.determine') }}</el-button>
             </div>
         </el-dialog>
         <!-- 编辑节点的名称 -->
-        <el-dialog :title="'新增节点'" v-if="addtemplateNodeNameDailoing" :visible.sync="addtemplateNodeNameDailoing" :close-on-click-modal="false" customClass="customWidth" width="500px">
+        <el-dialog :title="$t('xinZengJieDian')" v-if="addtemplateNodeNameDailoing" :visible.sync="addtemplateNodeNameDailoing" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <div>
                 <el-form :model="nodeForm" ref="nodeFormss" label-width="100px" class="demo-ruleForm">
-                    <el-form-item label="节点名称" prop="name"
+                    <el-form-item label="$t('nameofthenode')" prop="name"
                         :rules="[
-                            { required: true, message: '请输入节点名称'}
+                            { required: true, message: $t('qingShuRuJieDianMingCheng')}
                         ]"
                     >
                         <el-input v-model="nodeForm.name"></el-input>
@@ -231,7 +231,7 @@
                 </el-form>
             </div>
             <div slot="footer" class="dialog-footer">
-                <el-button type="primary" style="width:100%;" @click="editTemplateNodeName('nodeFormss')">确定</el-button>
+                <el-button type="primary" style="width:100%;" @click="editTemplateNodeName('nodeFormss')">{{ $t('btn.determine') }}</el-button>
             </div>
         </el-dialog>
 
@@ -414,16 +414,16 @@
                 this.nodeForm.name = data.label
             },
             removeTemplate(data) {
-                this.$confirm(`确定删除【${data.name}】模板吗?`, '提示', {
-                    confirmButtonText: '确定',
-                    cancelButtonText: '取消',
+                this.$confirm(`${this.$t('queDingShanChu')}【${data.name}】${this.$t('moBanMa')}?`, this.$t('other.prompts'), {
+                    confirmButtonText: this.$t('btn.determine'),
+                    cancelButtonText: this.$t('btn.cancel'),
                     type: 'warning'
                 }).then(() => {
                     this.http.post('/project-document-template/delete', {id: data.id},
                         res => {
                             if (res.code == "ok") {
                                 this.$message({
-                                    message: `删除成功`,
+                                    message: this.$t('message.successfullyDeleted'),
                                     type: 'success'
                                 });
                                 this.getTemplateList()
@@ -450,7 +450,7 @@
                             this.templateDataTreeDaylong = false
                             if (res.code == "ok") {
                                 this.$message({
-                                    message: `操作成功`,
+                                    message: this.$t('operationissuccessful'),
                                     type: 'success'
                                 });
                             } else {this.$message({message: res.msg,type: 'error'});}
@@ -484,7 +484,7 @@
                     this.templateDataTreeDaylong = false
                     if (res.code == "ok") {
                         this.$message({
-                            message: `操作成功`,
+                            message: this.$t('operationissuccessful'),
                             type: 'success'
                         });
                         this.templatedialing = false
@@ -551,9 +551,9 @@
             },
             
             removeNode(node, data) {
-                this.$confirm(`确定删除(${data.label})节点?`, '提示', {
-                    confirmButtonText: '确定',
-                    cancelButtonText: '取消',
+                this.$confirm(`${this.$t('queDingShanChu')}(${data.label})${this.$t('jieDian')}?`, this.$t('other.prompts'), {
+                    confirmButtonText: this.$t('btn.determine'),
+                    cancelButtonText: this.$t('btn.cancel'),
                     type: 'warning'
                 }).then(() => {
                     const parent = node.parent;

+ 12 - 12
fhKeeper/formulahousekeeper/timesheet/src/views/project/finance.vue

@@ -228,11 +228,11 @@
                     <el-radio-button label="1" >{{ $t('Apportionmentofpersonnelcosts') }}</el-radio-button>
                     <el-radio-button label="2">{{ $t('Spreadallpersonnelcosts') }}</el-radio-button>
                 </el-radio-group>
-                <span v-if="missingFinanceUserList.length > 0" style="color:red;">检测到有 <el-link @click="showMissingDialog = true">&nbsp;{{ missingFinanceUserList.length }}&nbsp;</el-link> 名已填工时人员在薪资表中无记录,不参与成本分摊</span>
+                <span v-if="missingFinanceUserList.length > 0" style="color:red;">{{ $t('jianCeDaoYou') }} <el-link @click="showMissingDialog = true">&nbsp;{{ missingFinanceUserList.length }}&nbsp;</el-link> {{ $t('mingYiTianGongShiRenYuanZaiXinZiBiaoZhongWuJiLuBuCanYuChengBenFenTan') }}</span>
             </el-form-item>
 
             <el-form-item style="float:right;margin-right:20px;" v-if="permissions.financialShare">
-                <el-link type="primary" :underline="false" @click="uploadTest()" v-if="user.companyId == 936" style="margin-right:10px">上传</el-link>
+                <el-link type="primary" :underline="false" @click="uploadTest()" v-if="user.companyId == 936" style="margin-right:10px">{{ $t('shangChuan') }}</el-link>
                 <el-link type="primary" :underline="false" @click="exportFinanceDialog=true">{{ $t('ExportingtheAllocationData') }}</el-link>
             </el-form-item>
             
@@ -312,11 +312,11 @@
         </el-dialog>
 
         <!--无薪资人员列表-->
-        <el-dialog title="无薪资人员列表" v-if="showMissingDialog" :visible.sync="showMissingDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
+        <el-dialog :title="$t('wuXinZiRenYuanLieBiao')" v-if="showMissingDialog" :visible.sync="showMissingDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
             <el-table :data="missingFinanceUserList" highlight-current-row v-loading="listLoading" :height="400" style="width: 100%;">
             <el-table-column type="index"></el-table-column>
-            <el-table-column prop="jobNumber" label="工号" sortable ></el-table-column>
-            <el-table-column prop="name" label="姓名" >
+            <el-table-column prop="jobNumber" :label="$t('Worknumber')" sortable ></el-table-column>
+            <el-table-column prop="name" :label="$t('lable.name')" >
                 <template slot-scope="scope">
                     <span v-if="user.userNameNeedTranslate == '1'"><TranslationOpenDataText type='userName' :openid='scope.row.name'></TranslationOpenDataText></span>
                     <span v-if="user.userNameNeedTranslate != '1'">{{scope.row.name}}</span>
@@ -324,8 +324,8 @@
             </el-table-column>
         </el-table>
             <div slot="footer" class="dialog-footer">
-                <div style="float:left;color:#ff9900;">*以上人员当月已填写工时,请导入他们的薪资。</div>
-                <el-button type="primary" @click="showMissingDialog = false" >关闭</el-button>
+                <div style="float:left;color:#ff9900;">{{ $t('yiShangRenYuanDangYueYiTianXieGongShiQingDaoRuTaMenDeXinZi') }}</div>
+                <el-button type="primary" @click="showMissingDialog = false" >{{ $t('Shutdown') }}</el-button>
             </div>
         </el-dialog>
 
@@ -500,9 +500,9 @@
         <el-dialog :title="proSetting.ymonth + $t('projectstobe assessed')" show-header="false" v-if="projSettingDialog" :visible.sync="projSettingDialog" 
             :close-on-click-modal="false" customClass="customWidth" width="1000px">
             <el-radio-group v-model="proSetting.settingType" style="margin-top:15px;">
-                <el-radio :label=0 >全部已填报项目</el-radio>
-                <el-radio :label=1 >选择部分项目</el-radio>
-                <el-radio :label=2 >排除部分项目</el-radio>
+                <el-radio :label=0 >{{ $t('quanBuYiTianBaoXiangMu') }}</el-radio>
+                <el-radio :label=1 >{{ $t('xuanZeBuFenXiangMu') }}</el-radio>
+                <el-radio :label=2 >{{ $t('paiChuBuFenXiangMu') }}</el-radio>
             </el-radio-group>
             <el-select v-model="proSettingChosenProjects" multiple filterable clearable style="width:100%;margin-top:10px;" v-show="proSetting.settingType > 0" @change="updateChosenView()">
                 <el-option v-for="item in allProjectList"  :key="item.id" :label="item.projectName + '/'+ item.projectCode" :value="item.id">
@@ -725,7 +725,7 @@ import { error } from 'dingtalk-jsapi';
                 this.http.post('/cost-project-setting/save',this.proSetting,res => {
                     if(res.code == 'ok'){
                         this.$message({
-                            message: '保存成功',
+                            message: this.$t('savesuccess'),
                             type: 'success'
                         })
                         this.projSettingDialog = false;
@@ -750,7 +750,7 @@ import { error } from 'dingtalk-jsapi';
                 },res => {
                     if(res.code == 'ok'){
                         this.$message({
-                            message: '上传成功',
+                            message: this.$t('uploadedsuccessfully'),
                             type: 'success'
                         })
                     }else{

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

@@ -36,52 +36,52 @@ export default {
     gantt.clearAll()
     gantt.locale={
     date: {
-        month_full: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
-        month_short: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
-        day_full: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
-        day_short: ["日", "一", "二", "三", "四", "五", "六"]
+        month_full: [this.$t('yiYue'), this.$t('erYue'), this.$t('sanYue'), this.$t('siYue'), this.$t('thisTWuyue'), this.$t('liuYue'), this.$t('qiYue'), this.$t('baYue'), this.$t('jiuYue'), this.$t('shiYue'), this.$t('shiYiYue'), this.$t('shiErYue')],
+        month_short: [this.$t('1Yue'), this.$t('2Yue'), this.$t('3Yue'), this.$t('4Yue'), this.$t('5Yue'), this.$t('6Yue'), this.$t('7Yue'), this.$t('8Yue'), this.$t('9Yue'), this.$t('10Yue'), this.$t('11Yue'), this.$t('12Yue')],
+        day_full: [this.$t('xingQiRi'), this.$t('xingQiYi'), this.$t('xingQiEr'), this.$t('xingQiSan'), this.$t('xingQiSi'), this.$t('xingQiWu'), this.$t('xingQiLiu')],
+        day_short: [this.$t('ri'), "一", "二", "三", "四", "五", "六"]
     },
     labels: {
-        dhx_cal_today_button: "今天",
-        day_tab: "日",
-        week_tab: "周",
-        month_tab: "月",
-        new_event: "新建日程",
-        icon_save: "保存",
-        icon_cancel: "关闭",
-        icon_details: "详细",
-        icon_edit: "编辑",
-        icon_delete: "删除",
-        confirm_closing: "请确认是否撤销修改!", //Your changes will be lost, are your sure?
-        confirm_deleting: "是否删除日程?",
-        section_description: "描述",
-        section_time: "时间范围",
-        section_type: "类型",
+        dhx_cal_today_button: this.$t('jinTian'),
+        day_tab: this.$t('weekDay.day'),
+        week_tab: this.$t('zhou'),
+        month_tab: this.$t('weekDay.month'),
+        new_event: this.$t('xinJianRiCheng'),
+        icon_save: this.$t('save'),
+        icon_cancel: this.$t('Shutdown'),
+        icon_details: this.$t('xiangXi'),
+        icon_edit: this.$t('bian-ji'),
+        icon_delete: this.$t('btn.delete'),
+        confirm_closing: this.$t('qingQueRenShiFouCheXiaoXiuGai'), //Your changes will be lost, are your sure?
+        confirm_deleting: this.$t('shiFouShanChuRiCheng'),
+        section_description: this.$t('other.describe'),
+        section_time: this.$t('shiJianFanWei'),
+        section_type: this.$t('types'),
 
         /* grid columns */
 
-        column_text: "任务名",
-        column_start_date: "开始时间",
-        column_duration: "持续时间",
+        column_text: this.$t('renWuMing'),
+        column_start_date: this.$t('starttimes'),
+        column_duration: this.$t('chiXuShiJian'),
         column_add: "",
 
         /* link confirmation */
 
-        link: "关联",
-        confirm_link_deleting: "将被删除",
-        link_start: " (开始)",
-        link_end: " (结束)",
+        link: this.$t('guanLian'),
+        confirm_link_deleting: this.$t('jiangBeiShanChu'),
+        link_start: this.$t('kaiShi'),
+        link_end: this.$t('jieShu'),
 
-        type_task: "任务",
-        type_project: "项目",
-        type_milestone: "里程碑",
+        type_task: this.$t('other.task'),
+        type_project: this.$t('other.project'),
+        type_milestone: this.$t('other.milestone'),
 
-        minutes: "分钟",
-        hours: "小时",
-        days: "天",
-        weeks: "周",
-        months: "月",
-        years: "年"
+        minutes: this.$t('fenZhong'),
+        hours: this.$t('time.hour'),
+        days: this.$t('time.day'),
+        weeks: this.$t('zhou'),
+        months: this.$t('weekDay.month'),
+        years: this.$t('nian')
     }
 };
     // gantt.config.autosize = true;
@@ -90,7 +90,7 @@ export default {
       gantt.config.drag_move = false;
     gantt.config.xml_date = "%Y-%m-%d";
     gantt.config.columns=[
-        {name:"text",label:(this.stafforpro == "按人员查看" ? "姓名" : "项目名称"), align: "left", tree:true},
+        {name:"text",label:(this.stafforpro == this.$t('anRenYuanChaKan') ? this.$t('lable.name') : this.$t('headerTop.projectName')), align: "left", tree:true},
         // {name:"time",label:"计划工时(h)", align: "center" }
         // {name:"start_date", label:"开始时间", width:'*' , align: "center" },
         // {name:"duration",   label:"工时(天)", width:'*' ,   align: "center" }

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

@@ -102,8 +102,8 @@
                     </div>
                     <div v-if="user.timeType.projectManDay">
                         <el-row :gutter="10" >
-                            <el-col :span="5" ><span class="gray_label">实际/预估工时:</span></el-col><el-col :span="7" ></el-col>
-                            <el-col :span="18" ><b :style="fillTimeData.total>project.manDay*user.timeType.allday?'color:red;':''">{{fillTimeData.total}}</b>/<b>{{project.manDay*user.timeType.allday}}</b>&nbsp;小时</el-col>
+                            <el-col :span="5" ><span class="gray_label">{{ $t('shiJiYuGuGongShi') }}</span></el-col><el-col :span="7" ></el-col>
+                            <el-col :span="18" ><b :style="fillTimeData.total>project.manDay*user.timeType.allday?'color:red;':''">{{fillTimeData.total}}</b>/<b>{{project.manDay*user.timeType.allday}}</b>&nbsp;{{ $t('time.hour') }}</el-col>
                         </el-row>
                     </div>
                     <!-- <div v-if="user.companyId == '428'">
@@ -371,7 +371,7 @@
                     <el-input v-model="addForm.contractAmount" id="contractAmount" :disabled="true" style="width:32%;"
                     placeholder="" clearable @keyup.native="restrictNumber('contractAmount')"></el-input><span style="margin-left:10px;">{{ $t('yuan') }}</span>
                 </el-form-item>
-                <el-form-item :label="'计划开始日期'" prop="planStartDate">
+                <el-form-item :label="$t('ommencementDate')" prop="planStartDate">
                     <el-date-picker v-model="addForm.planStartDate" 
                      :editable="false" 
                      format="yyyy-MM-dd" 
@@ -385,7 +385,7 @@
                     placeholder="" clearable @keyup.native="restrictNumber('outputValue')"></el-input><span style="margin-left:10px;">{{ $t('yuan') }}</span>
                     </template>
                 </el-form-item>
-                <el-form-item :label="'计划结束日期'" prop="planEndDate">
+                <el-form-item :label="$t('jiHuaJieShuRiQi')" prop="planEndDate">
                     <el-date-picker v-model="addForm.planEndDate" 
                      :editable="false" 
                      format="yyyy-MM-dd" 
@@ -445,7 +445,7 @@
                 <div style="margin-top: 20px" v-if="dataList.length > 0 && user.timeType.projectCustom">
                     <el-form-item v-for="(item, index) in dataList" :key="item.id" :label="item.customName">
                         <div v-if="item.customType == 0">
-                            <el-input v-model="item.value" clearable placeholder="请输入内容" @input="ipts(item.value, index)"></el-input>
+                            <el-input v-model="item.value" clearable :placeholder="$t('pleaseentercontent')" @input="ipts(item.value, index)"></el-input>
                         </div>
                         <div v-if="item.customType == 1">
                             <el-upload
@@ -476,7 +476,7 @@
                                 </el-upload>
                         </div>
                         <div v-if="item.customType == 2">
-                            <el-date-picker v-model="item.value" type="date" placeholder="请选择日期"  value-format="yyyy-MM-dd"></el-date-picker>
+                            <el-date-picker v-model="item.value" type="date" :placeholder="$t('pleaseselectadate')"  value-format="yyyy-MM-dd"></el-date-picker>
                         </div>
                     </el-form-item>
                 </div>
@@ -2250,7 +2250,7 @@
 
             const usersJson = JSON.parse(sessionStorage.getItem("user"))
             if(usersJson.companyId == '936') {
-                if(usersJson.roleName != '超级管理员' && usersJson.roleName != '系统管理员') {
+                if(usersJson.roleName != this.$t('role.superAdministrator') && usersJson.roleName != this.$t('role.systemAdministrator')) {
                     this.isShowProjectName = true
                 } else {
                     this.isShowProjectName = false

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

@@ -117,7 +117,7 @@
                 <br v-if="user.companyId == 936">
                 <!-- 时间段筛选 -->
                 <el-form-item>
-                    <span style="margin-left:15px;margin-right:5px;color:#606266;">时间段</span>
+                    <span style="margin-left:15px;margin-right:5px;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="manageSelect()" value-format="yyyy-MM-dd" :placeholder="$t('optiondate')" size="small" clearable style="width:290px;margin-left:5px"></el-date-picker>
                 </el-form-item>
                 <!-- 项目经理筛选 -->
@@ -315,13 +315,13 @@
                 </template>
             </el-table-column>
             <!-- 合同金额 -->
-            <el-table-column prop="contractAmount" :label="'合同金额'"  width="200" v-if="user.company.packageProject==1" align="right">
+            <el-table-column prop="contractAmount" :label="$t('contractamount')"  width="200" v-if="user.company.packageProject==1" align="right">
                 <template slot-scope="scope" >
                     <span>¥{{Number(scope.row.contractAmount).toFixed(2)}}</span>
                 </template>
             </el-table-column>
             <!-- 日报审核人 -->
-            <el-table-column prop="projectAuditorName" :label="'日报审核人'" sortable="custom" min-width="150" v-if="user.company.companyName=='成都明夷电子科技有限公司'">
+            <el-table-column prop="projectAuditorName" :label="$t('newspaperauditor')" sortable="custom" min-width="150" v-if="user.company.companyName=='成都明夷电子科技有限公司'">
                 <template slot-scope="scope">
                     <el-link type="primary" :underline="false" @click="showUser(scope.row.projectAuditorId)">
                             {{scope.row.projectAuditorName}}
@@ -360,12 +360,12 @@
                     {{scope.row.progress==null?"-":scope.row.progress}}%
                 </template>
             </el-table-column>
-            <el-table-column prop="manDay" :label="'预估工时'" min-width="150"   v-if="user.timeType.projectManDay == 1">
+            <el-table-column prop="manDay" :label="$t('yuGuGongShi')" min-width="150"   v-if="user.timeType.projectManDay == 1">
                 <template slot-scope="scope">
-                    {{scope.row.manDay==null?"":scope.row.manDay}}<span v-if="scope.row.manDay">人天({{scope.row.estimatedWorkTime}}h)</span>
+                    {{scope.row.manDay==null?"":scope.row.manDay}}<span v-if="scope.row.manDay">{{ $t('renTian') }}({{scope.row.estimatedWorkTime}}h)</span>
                 </template>
             </el-table-column>
-            <el-table-column prop="residueEstimatedWorkTime" :label="'剩余预估工时'" min-width="120"   v-if="user.timeType.projectManDay == 1">
+            <el-table-column prop="residueEstimatedWorkTime" :label="$t('shengYuYuGuGongShi')" min-width="120"   v-if="user.timeType.projectManDay == 1">
                 <template slot-scope="scope">
                     {{scope.row.residueEstimatedWorkTime==null?"":scope.row.residueEstimatedWorkTime}}<span v-if="scope.row.residueEstimatedWorkTime">h</span>
                 </template>
@@ -395,10 +395,10 @@
                 <el-button size="small" type="primary" @click="batchSetWudulistBtn2(false)">{{ $t('pi-liang-tian-jia') }} {{user.timeType.customDegreeName}}</el-button>
             </template>
             <template v-if="user.company.packageProject && (showColumnWidth != '0' || permissions.projectManagement)">
-                <el-button size="small" type="primary" @click="addTaskGroup()" >{{'批量增加任务分组'}}</el-button>
+                <el-button size="small" type="primary" @click="addTaskGroup()" >{{ $t('piLiangZengJiaRenWuFenZu') }}</el-button>
             </template>
             <template v-if="user.company.packageProject && (showColumnWidth != '0' || permissions.projectManagement)">
-                <el-button size="small" type="primary" @click="setGroupIncharger()" >{{'批量设置分组负责人'}}</el-button>
+                <el-button size="small" type="primary" @click="setGroupIncharger()" >{{ $t('piLiangSheZhiFenZuFuZeRen') }}</el-button>
             </template>
             <template v-if="user.company.packageProject && (showColumnWidth != '0' || permissions.projectManagement)">
                 <el-button size="small" type="primary" @click="addGroupPerson()" :loading="addGroupPersonBtnLoading">{{ $t('groupparticipantsinbatches') }}</el-button>
@@ -406,7 +406,7 @@
             <template v-if="(showColumnWidth != '0' || permissions.projectManagement)">
                 <el-button size="small" type="primary" @click="addProPreson()">{{ $t('projectparticipantsinbatches') }}</el-button>
                 <el-button size="small" type="primary" v-if="permissions.projectManagement" @click="batchIncharger()">{{ $t('projectmanagersinbatches') }}</el-button>
-                <el-button size="small" type="primary" v-if="user.roleName='超级管理员'" @click="batchDelete()" :loading="isDeleting">批量删除</el-button>
+                <el-button size="small" type="primary" v-if="user.roleName=($t('role.superAdministrator'))" @click="batchDelete()" :loading="isDeleting">{{ $t('Batchdelete') }}</el-button>
             </template>
             
             <el-pagination :key="projectListPageComponentKey"
@@ -560,8 +560,8 @@
                         </el-form-item>
                     </span>
                     
-                    <el-form-item v-if="user.timeType.reportCc == 1 && (user.company.nonProjectSimple == 0 || (user.company.nonProjectSimple == 1 && addForm.isPublic == 0))" label="日报抄送人" >
-                        <el-select v-if="user.userNameNeedTranslate != '1'" v-model="addForm.ccUserIds" multiple="true" :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" filterable placeholder="请选择抄送人" style="width:100%;" >
+                    <el-form-item v-if="user.timeType.reportCc == 1 && (user.company.nonProjectSimple == 0 || (user.company.nonProjectSimple == 1 && addForm.isPublic == 0))" :label="$t('riBaoChaoSongRen')" >
+                        <el-select v-if="user.userNameNeedTranslate != '1'" v-model="addForm.ccUserIds" multiple="true" :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" filterable :placeholder="$t('qingXuanZeChaoSongRen')" style="width:100%;" >
                             <el-option v-for="item in participator" :key="item.id" :label="item.name" :value="item.id"></el-option>
                         </el-select>
                         <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :tile="true" :widthStr="'800'" :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" :subjectId="addForm.ccUserIds" :subject="participator" :clearable="false" :distinction="'10'"  :multiSelect="true" @selectCal="selectCal"></selectCat>
@@ -612,27 +612,25 @@
                             :options="buOption" :props="{ checkStrictly: true, expandTrigger: 'hover' }" clearable v-show="user.userNameNeedTranslate != 1"></el-cascader>
                         <vueCascader :size="'small'" :subjectId="addForm.bu" :widthStr="'200'" :clearable="true" :subject="buOption" :radios="true" :distinction="'32'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1"></vueCascader>
                     </el-form-item>
-
                     <!-- 增加项目人天字段 绎维固定字段 -->
                     <el-form-item  v-if="user.timeType.projectManDay == 1 && (user.company.nonProjectSimple == 0 || (user.company.nonProjectSimple == 1 && addForm.isPublic == 0))">
-                        <template slot="label"><span v-if="manDaySetting.projectManDayFillMode == 2 || (manDaySetting.projectManDayFillMode == 1 && addForm.fromOutside == 0)" style="padding:5px;color:red;">*</span>项目人天</template>
+                        <template slot="label"><span v-if="manDaySetting.projectManDayFillMode == 2 || (manDaySetting.projectManDayFillMode == 1 && addForm.fromOutside == 0)" style="padding:5px;color:red;">*</span>{{ $t('xiangMuRenTian') }}</template>
                         <el-input v-model.number="addForm.manDay" :placeholder="$t('peaseenterthe')" @input="jisuanEstimatedWorkTime(addForm.manDay)"  style="width: 100px"></el-input>
-                        <span style="margin-left:10px;position:absolute;">人天(预估工时:<el-input size="small" v-model.number="addForm.estimatedWorkTime" :placeholder="$t('peaseenterthe')" @input="jisuanManDay(addForm.estimatedWorkTime)"  style="width: 100px"></el-input>h)</span>
-                        <el-tooltip effect="dark" :content="$t('根据系统基础设置每日正常工作时长计算,1人天为一个每日正常工作时长')" placement="top-start" style="margin-left:180px">
+                        <span style="margin-left:10px;position:absolute;">{{ $t('renTianYuGuGongShi') }}<el-input size="small" v-model.number="addForm.estimatedWorkTime" :placeholder="$t('peaseenterthe')" @input="jisuanManDay(addForm.estimatedWorkTime)"  style="width: 100px"></el-input>h)</span>
+                        <el-tooltip effect="dark" :content="$t('genJuXiTongJiChuSheZhiMeiRiZhengChangGongZuoShiChangJiSuan_1RenTianWeiYiGeMeiRiZhengChangGongZuoShiChang')" placement="top-start" style="margin-left:180px">
                                         <i class="el-icon-question" style="color:#606266"></i>
                         </el-tooltip>
-                        <span style="margin-left:63px;margin-right:10px;" v-if="user.companyId != 936" >{{'管控开始日期'}}</span>
+                        <span style="margin-left:63px;margin-right:10px;" v-if="user.companyId != 936" >{{ $t('guanKongKaiShiRiQi') }}</span>
                         <el-date-picker v-model="addForm.manDayStartDate"  v-if="user.companyId != 936"
                         :editable="false" style="width:20%;" 
                         format="yyyy-MM-dd" 
                         value-format="yyyy-MM-dd"
                         :clearable="false" type="date" 
                         :placeholder="$t('optiondate')"></el-date-picker>
-                        <el-tooltip effect="dark" :content="$t('从该日期起,填报工时开始占用预算人天工时')" placement="top-start" style="margin-left:10px"  v-if="user.companyId != 936">
+                        <el-tooltip effect="dark" :content="$t('congGaiRiQiQiTianBaoGongShiKaiShiZhanYongYuSuanRenTianGongShi')" placement="top-start" style="margin-left:10px"  v-if="user.companyId != 936">
                                         <i class="el-icon-question" style="color:#606266"></i>
                         </el-tooltip>
                     </el-form-item>
-
                     <el-form-item :label="$t('projectoutput')" prop="outputValue"  v-if="user.timeType.outputValueStatus == 1">
                         <el-input id="outputValue" v-model="addForm.outputValue" style="width:32%;" :disabled="canOnlyModParticipator"
                         placeholder="" clearable  @keyup.native="restrictNumber('outputValue')">
@@ -682,7 +680,7 @@
                     <div style="margin-top: 20px" v-if="dataList.length > 0 && user.timeType.projectCustom">
                         <el-form-item v-for="(item, index) in dataList" :key="item.id" :label="item.customName">
                             <div v-if="item.customType == 0">
-                                <el-input v-model="item.value" clearable placeholder="请输入内容" @input="ipts(item.value, index)"></el-input>
+                                <el-input v-model="item.value" clearable :placeholder="$t('pleaseentercontent')" @input="ipts(item.value, index)"></el-input>
                             </div>
                             <div v-if="item.customType == 1">
                                 <el-upload
@@ -713,7 +711,7 @@
                                     </el-upload>
                             </div>
                             <div v-if="item.customType == 2">
-                                <el-date-picker v-model="item.value" type="date" placeholder="请选择日期"  value-format="yyyy-MM-dd"></el-date-picker>
+                                <el-date-picker v-model="item.value" type="date" :placeholder="$t('pleaseselectadate')"  value-format="yyyy-MM-dd"></el-date-picker>
                             </div>
                         </el-form-item>
                     </div>
@@ -884,13 +882,13 @@
 
             </el-table>
             <div slot="footer" class="dialog-footer">
-                <el-button type="default" :disabled="subProjectList.length == 0" @click="forSubProjectlist = list.filter(a=>a.id != currentProject.id);copySubPListVisible = true;" style="align:left;">复制到其他项目</el-button>
+                <el-button type="default" :disabled="subProjectList.length == 0" @click="forSubProjectlist = list.filter(a=>a.id != currentProject.id);copySubPListVisible = true;" style="align:left;">{{ $t('fuZhiDaoQiTaXiangMu') }}</el-button>
                 <el-button type="primary" @click="subProjectVisible = false" >{{ $t('Shutdown') }}</el-button>
                 <el-button type="primary" @click="addNewSubProject()" >{{ $t('addsubitems') }}</el-button>
             </div>
         </el-dialog>
         <!--选择项目弹出框-->
-        <el-dialog title="选择要复制到的目标项目" v-if="copySubPListVisible" :visible.sync="copySubPListVisible" :close-on-click-modal="false" customClass="customWidth" width="700px">
+        <el-dialog :title="$t('xuanZeYaoFuZhiDaoDeMuBiaoXiangMu')" v-if="copySubPListVisible" :visible.sync="copySubPListVisible" :close-on-click-modal="false" customClass="customWidth" width="700px">
             <el-table ref="projectForSubCopy" border @cell-mouse-enter="hoverCall" @cell-mouse-leave="handCall" :cell-class-name="tableCellClassName" :data="forSubProjectlist" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;" @selection-change="checkedProlistForSub" @sort-change="tableSort">
                 <el-table-column type="selection" width="60" >
                 </el-table-column>
@@ -1065,46 +1063,46 @@
         </el-dialog>
 
         
-        <el-dialog title="项目预估工时配置" show-header="false" v-if="projectManDaySettingDialog" :visible.sync="projectManDaySettingDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
+        <el-dialog :title="$t('xiangMuYuGuGongShiPeiZhi')" show-header="false" v-if="projectManDaySettingDialog" :visible.sync="projectManDaySettingDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
             <el-form label-width="200px" :form="manDaySetting">
-                <el-form-item :label="'预估工时是否必填'"  >
+                <el-form-item :label="$t('yuGuGongShiShiFouBiTian')"  >
                     <el-select v-model="manDaySetting.projectManDayFillMode" :placeholder="$t('defaultText.pleaseChoose')"  >
-                        <el-option label="非必填" :value="0"></el-option>
-                        <el-option label="工时系统创建的项目必填" :value="1"></el-option>
-                        <el-option label="工时系统和外部同步的项目都必填" :value="2"></el-option>
+                        <el-option :label="$t('feiBiTian')" :value="0"></el-option>
+                        <el-option :label="$t('gongShiXiTongChuangJianDeXiangMuBiTian')" :value="1"></el-option>
+                        <el-option :label="$t('gongShiXiTongHeWaiBuTongBuDeXiangMuDuBiTian')" :value="2"></el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item :label="'项目工时剩余提醒百分比'"  >
+                <el-form-item :label="$t('xiangMuGongShiShengYuTiXingBaiFenBi')"  >
                     <el-input v-model="manDaySetting.projectWarningPercent" type="number" style="width:200px;">
                     </el-input>%
                 </el-form-item>
-                <el-form-item :label="'项目工时不足时'"  >
+                <el-form-item :label="$t('xiangMuGongShiBuZuShi')"  >
                     <el-select v-model="manDaySetting.projectFronzeOnLack" :placeholder="$t('defaultText.pleaseChoose')"  >
-                        <el-option label="禁止填报" :value="1"></el-option>
-                        <el-option label="可以填报,仅提醒" :value="0"></el-option>
+                        <el-option :label="$t('jinZhiTianBao')" :value="1"></el-option>
+                        <el-option :label="$t('keYiTianBaoJinTiXing')" :value="0"></el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item :label="'分组工时剩余提醒百分比'"  v-if="user.company.packageProject == 1">
+                <el-form-item :label="$t('fenZuGongShiShengYuTiXingBaiFenBi')"  v-if="user.company.packageProject == 1">
                     <el-input v-model="manDaySetting.groupWarningPercent" type="number" style="width:200px;">
                     </el-input>%
                 </el-form-item>
-                <el-form-item :label="'分组工时不足时'"  v-if="user.company.packageProject == 1" >
+                <el-form-item :label="$t('fenZuGongShiBuZuShi')"  v-if="user.company.packageProject == 1" >
                     <el-select v-model="manDaySetting.groupFronzeOnLack" :placeholder="$t('defaultText.pleaseChoose')"  >
-                        <el-option label="禁止填报" :value="1"></el-option>
-                        <el-option label="可以填报,仅提醒" :value="0"></el-option>
+                        <el-option :label="$t('jinZhiTianBao')" :value="1"></el-option>
+                        <el-option :label="$t('keYiTianBaoJinTiXing')" :value="0"></el-option>
                     </el-select>
                 </el-form-item>
             </el-form>
             <div slot="footer" class="dialog-footer">
                 <el-button type="default" @click="projectManDaySettingDialog = false" >{{ $t('Shutdown') }}</el-button>
-                <el-button type="primary" @click="saveProjectManDaySetting()" >保存</el-button>
+                <el-button type="primary" @click="saveProjectManDaySetting()" >{{ $t('save') }}</el-button>
             </div>
         </el-dialog>
 
         <!-- 导出任务分组 -->
-        <el-dialog :title="'导出任务分组'" show-header="false" v-if="groupTaskDialog" :visible.sync="groupTaskDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
+        <el-dialog :title="$t('exportingTaskGroups')" show-header="false" v-if="groupTaskDialog" :visible.sync="groupTaskDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
             <el-form>
-                <el-form-item :label="'自主项目类别'">
+                <el-form-item :label="$t('IndependentProject')">
                     <el-select v-model="projectCategorySubId" :placeholder="$t('defaultText.pleaseChoose')" clearable >
                         <el-option v-for="item in projectCategorySubList" :key="item.value" :label="item.label" :value="item.value"></el-option>
                     </el-select>
@@ -1112,7 +1110,7 @@
             </el-form>
             <div slot="footer" class="dialog-footer">
                 <el-button type="primary" @click="groupTaskDialog = false" >{{ $t('Shutdown') }}</el-button>
-                <el-button type="primary" @click="exportProjectGroup" >{{ '导出' }}</el-button>
+                <el-button type="primary" @click="exportProjectGroup" >{{ $t('export.export') }}</el-button>
             </div>
         </el-dialog>
 
@@ -1149,9 +1147,9 @@
                 <!-- <el-form-item :label="$t('mainProjectName')" prop="name"> -->
                 <el-form-item :label="$t('AuditProcess')" prop="name">
                     <template>
-                    <el-checkbox v-model="addClf.proInchargerAudit" >项目审核人审核</el-checkbox>
+                    <el-checkbox v-model="addClf.proInchargerAudit" >{{ $t('xiangMuShenHeRenShenHe') }}</el-checkbox>
                     <div style="width: 120px ; text-align: center;"><i class="el-icon-bottom"></i></div>
-                    <el-checkbox v-model="addClf.proBuAudit" >项目所属BU负责人审核</el-checkbox>
+                    <el-checkbox v-model="addClf.proBuAudit" >{{ $t('xiangMuSuoShuBuFuZeRenShenHe') }}</el-checkbox>
                     </template>
                 </el-form-item>
             </el-form>
@@ -1226,7 +1224,7 @@
         <el-dialog :title="$t('selectingParticipants')"  :visible.sync="chooseParticipVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <!-- <el-input style="width:100%" v-model="filterName" placeholder="请输入姓名搜索" @change="findUserInTree"></el-input> -->
             <div v-if="user.userNameNeedTranslate == '1'">
-                <el-input placeholder="请输入内容" v-model.trim="filterText" class="input-with-select" @keyup.enter.native="echartDepartment()">
+                <el-input :placeholder="$t('pleaseentercontent')" v-model.trim="filterText" class="input-with-select" @keyup.enter.native="echartDepartment()">
                     <el-button slot="append" icon="el-icon-search" @click="echartDepartment()"></el-button>
                 </el-input>
             </div>
@@ -1449,14 +1447,14 @@
         </el-dialog>
 
         <!-- 职能分工设置 -->
-        <el-dialog :title="'职能分工设置'" v-if="functionalDivisionDig" :visible.sync="functionalDivisionDig" width="80%">
+        <el-dialog :title="$t('zhiNengFenGongSheZhi')" v-if="functionalDivisionDig" :visible.sync="functionalDivisionDig" width="80%">
             <el-table border :data="functionalList" style="width: 100%">
-                <el-table-column prop="id" label="序号" width="50" type="index" align="center"
+                <el-table-column prop="id" :label="$t('headerTop.serialNumber')" width="50" type="index" align="center"
                                     :index="index=>index+1"/>
-                <el-table-column prop="timeType" label="工时类型" align="center">
+                <el-table-column prop="timeType" :label="$t('gongShiLeiXing')" align="center">
                     <template slot-scope="scope">
                         <span v-show="!scope.row.editFlag">{{scope.row.timeType}}</span>
-                        <el-select v-show="scope.row.editFlag" v-model="scope.row.timeType" placeholder="请选择">
+                        <el-select v-show="scope.row.editFlag" v-model="scope.row.timeType" :placeholder="$t('defaultText.pleaseChoose')">
                             <el-option
                             v-for="item in timeTypeList"
                             :key="item.value"
@@ -1466,10 +1464,10 @@
                         </el-select>
                     </template>
                 </el-table-column>
-                <el-table-column prop="roleId" label="角色" align="center">
+                <el-table-column prop="roleId" :label="$t('jiao-se')" align="center">
                     <template  slot-scope="scope">
                         <span v-show="!scope.row.editFlag">{{scope.row.role}}</span>
-                        <el-select v-show="scope.row.editFlag" v-model="scope.row.role" placeholder="请选择">
+                        <el-select v-show="scope.row.editFlag" v-model="scope.row.role" :placeholder="$t('defaultText.pleaseChoose')">
                             <el-option
                             v-for="item in roleList"
                             :key="item.value"
@@ -1479,7 +1477,7 @@
                         </el-select>
                     </template>
                 </el-table-column>
-                <el-table-column prop="jobRespon" label="工作职责" align="center">
+                <el-table-column prop="jobRespon" :label="$t('gongZuoZhiZe')" align="center">
                     <template  slot-scope="scope">
                         <span v-show="!scope.row.editFlag">{{scope.row.jobRespon}}</span>
                         <el-input v-show="scope.row.editFlag"
@@ -1487,56 +1485,56 @@
                         </el-input>
                     </template>
                 </el-table-column>
-                <el-table-column prop="workContext" label="工作内容" align="center">
+                <el-table-column prop="workContext" :label="$t('gongZuoNeiRong')" align="center">
                     <template slot-scope="scope">
-                        <a v-if="scope.row.id" @click="workContextDig=true,getWorkContextList(scope.row.id)" style="color:#409EFF">{{'数据维护'}}</a>
-                        <a v-else>{{'数据维护'}}</a>
+                        <a v-if="scope.row.id" @click="workContextDig=true,getWorkContextList(scope.row.id)" style="color:#409EFF">{{ $t('datamaintenance') }}</a>
+                        <a v-else>{{ $t('datamaintenance') }}</a>
                     </template>
                 </el-table-column>
-                <el-table-column label="操作" width="120" align="center">
+                <el-table-column :label="$t('operation')" width="120" align="center">
                     <template  slot-scope="scope">
                         <div style="display: flex;">
                             <el-button size="small"
                                         type="text"
                                         icon="CircleCheck"
                                         v-show="scope.row.editFlag"
-                                        @click="functionalSubmit(scope.row)">确定
+                                        @click="functionalSubmit(scope.row)">{{ $t('btn.determine') }}
                             </el-button>
                             <el-button size="small"
                                         type="text"
                                         icon="CircleClose"
                                         v-show="scope.row.editFlag"
-                                        @click="functionalCancel(scope.row,scope.$index,'functional')">取消
+                                        @click="functionalCancel(scope.row,scope.$index,'functional')">{{ $t('btn.cancel') }}
                             </el-button>
                             <el-button size="small"
                                         icon="Edit"
                                         type="text"
                                         v-show="!scope.row.editFlag"
-                                        @click="functionalEditVersion(scope.row)"> 编辑
+                                        @click="functionalEditVersion(scope.row)"> {{ $t('bian-ji') }}
                             </el-button>
                             <el-button size="small"
                                         icon="Delete"
                                         type="text"
                                         v-show="!scope.row.editFlag"
-                                        @click="functionalDelVersion(scope.row,scope.$index)">删除
+                                        @click="functionalDelVersion(scope.row,scope.$index)">{{ $t('btn.delete') }}
                             </el-button>
                         </div>
                     </template>
                 </el-table-column>
             </el-table>
             <div slot="footer" class="dialog-footer">
-                <el-button @click="addFunctional('functional')" type="primary">添加一行</el-button>
+                <el-button @click="addFunctional('functional')" type="primary">{{ $t('tianJiaYiHang') }}</el-button>
                 <el-button  @click="functionalDivisionDig = false" >{{ $t('btn.cancel') }}</el-button>
                 <el-button type="primary" @click="submitFunctional()">{{ $t('btn.determine') }}</el-button>
             </div>
         </el-dialog>
 
         <!-- 工作内容dig -->
-        <el-dialog :title="'工作内容'" v-if="workContextDig" :visible.sync="workContextDig" width="40%">
+        <el-dialog :title="$t('gongZuoNeiRong')" v-if="workContextDig" :visible.sync="workContextDig" width="40%">
             <el-table border :data="workContextList" style="width: 100%">
-                <el-table-column prop="id" label="序号" width="50" type="index" align="center"
+                <el-table-column prop="id" :label="$t('headerTop.serialNumber')" width="50" type="index" align="center"
                                     :index="index=>index+1"/>
-                <el-table-column prop="workContext" label="工作内容" align="center">
+                <el-table-column prop="workContext" :label="$t('gongZuoNeiRong')" align="center">
                     <template  slot-scope="scope">
                         <span v-show="!scope.row.editFlag">{{scope.row.workContext}}</span>
                         <el-input v-show="scope.row.editFlag"
@@ -1544,39 +1542,39 @@
                         </el-input>
                     </template>
                 </el-table-column>
-                <el-table-column label="操作" width="120" align="center">
+                <el-table-column :label="$t('operation')" width="120" align="center">
                     <template  slot-scope="scope">
                         <div style="display: flex;">
                             <el-button size="small"
                                         type="text"
                                         icon="CircleCheck"
                                         v-show="scope.row.editFlag"
-                                        @click="functionalSubmit(scope.row)">确定
+                                        @click="functionalSubmit(scope.row)">{{ $t('btn.determine') }}
                             </el-button>
                             <el-button size="small"
                                         type="text"
                                         icon="CircleClose"
                                         v-show="scope.row.editFlag"
-                                        @click="functionalCancel(scope.row,scope.$index,'workContext')">取消
+                                        @click="functionalCancel(scope.row,scope.$index,'workContext')">{{ $t('btn.cancel') }}
                             </el-button>
                             <el-button size="small"
                                         icon="Edit"
                                         type="text"
                                         v-show="!scope.row.editFlag"
-                                        @click="functionalEditVersion(scope.row)"> 编辑
+                                        @click="functionalEditVersion(scope.row)"> {{ $t('bian-ji') }}
                             </el-button>
                             <el-button size="small"
                                         icon="Delete"
                                         type="text"
                                         v-show="!scope.row.editFlag"
-                                        @click="workContextDelVersion(scope.row,scope.$index)">删除
+                                        @click="workContextDelVersion(scope.row,scope.$index)">{{ $t('btn.delete') }}
                             </el-button>
                         </div>
                     </template>
                 </el-table-column>
             </el-table>
             <div slot="footer" class="dialog-footer">
-                <el-button @click="addFunctional('workContext')" type="primary">添加一行</el-button>
+                <el-button @click="addFunctional('workContext')" type="primary">{{ $t('tianJiaYiHang') }}</el-button>
                 <el-button  @click="workContextDig = false" >{{ $t('btn.cancel') }}</el-button>
                 <el-button type="primary" @click="submitWorkContext()">{{ $t('btn.determine') }}</el-button>
             </div>
@@ -1594,10 +1592,10 @@
             </div>
         </el-dialog> -->
         <!-- 批量设置任务分组负责人 -->
-        <el-dialog :title="'批量设置任务分组负责人'" v-if="addTaskGroupInchargerDig" :visible.sync="addTaskGroupInchargerDig" width="40%">
+        <el-dialog :title="$t('piLiangSheZhiRenWuFenZuFuZeRen')" v-if="addTaskGroupInchargerDig" :visible.sync="addTaskGroupInchargerDig" width="40%">
             <el-form label-width="20%">
-                <el-form-item :label="'分组名称:'">
-                     <el-select  v-model="hasSetGroupName" placeholder="请选择">
+                <el-form-item :label="$t('fenZuMingCheng')">
+                     <el-select  v-model="hasSetGroupName" :placeholder="$t('defaultText.pleaseChoose')">
                             <el-option
                             v-for="item in hasSetGroupList"
                             :key="item.value"
@@ -1606,7 +1604,7 @@
                             </el-option>
                         </el-select>
                 </el-form-item>
-                <el-form-item :label="'分组负责人:'">
+                <el-form-item :label="$t('fenZuFuZeRen')">
                     <el-select v-if="user.userNameNeedTranslate != '1'" v-model="hasSetGroupInchargerId" :placeholder="$t('defaultText.pleaseChoose')" style="width: 80%" filterable clearable>
                         <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id">
                             <span style="float: left">{{item.name}}</span>
@@ -1622,17 +1620,17 @@
             </div>
         </el-dialog>
         <!-- 项目同步弹窗 -->
-        <el-dialog title="项目服务同步" :visible.sync="syncProjectDig" width="600px" :before-close="handleClose">
+        <el-dialog :title="$t('xiangMuFuWuTongBu')" :visible.sync="syncProjectDig" width="600px" :before-close="handleClose">
             <el-form label-width="0">
                 <div class="synchronization">
                     <div class="synchronizationLabel">
-                        <el-select v-model="synchronizationVal" placeholder="请选择" @change="synchronizationChange()">
-                            <el-option label="已同步项目" value="0"></el-option>
-                            <el-option label="未同步项目" value="1"></el-option>
+                        <el-select v-model="synchronizationVal" :placeholder="$t('defaultText.pleaseChoose')" @change="synchronizationChange()">
+                            <el-option :label="$t('yiTongBuXiangMu')" value="0"></el-option>
+                            <el-option :label="$t('weiTongBuXiangMu')" value="1"></el-option>
                         </el-select>
                     </div>
                     <el-form-item style="flex: 1" v-if="synchronizationVal == 0">
-                        <el-select filterable collapse-tags clearable  v-model="hasChooseProjectCode" multiple placeholder="请选择" style="width:100%">
+                        <el-select filterable collapse-tags clearable  v-model="hasChooseProjectCode" multiple :placeholder="$t('defaultText.pleaseChoose')" style="width:100%">
                             <el-option v-for="item in allProjectList" :key="item.id" :label="item.projectName  + '\u3000' + item.projectCode" :value="item.projectCode">
                                 <span style="float: right; color: #8492a6; font-size: 13px;">{{ item.projectCode }}</span>
                                 <span style="float: left;">{{ item.projectName }}</span>
@@ -1640,20 +1638,20 @@
                         </el-select>
                     </el-form-item>
                     <el-form-item style="flex: 1" v-if="synchronizationVal == 1">
-                        <el-input placeholder="请输入项目编号" v-model="synchronizationInputVal" clearable></el-input>
+                        <el-input :placeholder="$t('Pleaseentertheprojectnumber')" v-model="synchronizationInputVal" clearable></el-input>
                     </el-form-item>
                 </div>
             </el-form>
             <span slot="footer" class="dialog-footer">
-                <el-button @click="syncProjectDig = false">取 消</el-button>
-                <el-button type="primary" @click="syncProjectForThird(hasChooseProjectCode)">开始同步</el-button>
+                <el-button @click="syncProjectDig = false">{{ $t('quXiao') }}</el-button>
+                <el-button type="primary" @click="syncProjectForThird(hasChooseProjectCode)">{{ $t('startsynchronization') }}</el-button>
             </span>
         </el-dialog>
         <!--导入数据,下载模板 -->
         <el-dialog :title="$t('wdorkplanimport')" v-if="importTaskDialog" :visible.sync="importTaskDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <el-form ref="form4" >
                 <el-form-item :label="'1. '+$t('qing-xian-xia-zai-mo-ban-bing-tian-xie-hou-shang-chuan')" >
-                    <el-link type="primary" :underline="false" href="./upload/多项目任务导入模板.xlsx" download="多项目任务模板.xlsx'">下载多项目任务模板</el-link>
+                    <el-link type="primary" :underline="false" href="./upload/多项目任务导入模板.xlsx" download="多项目任务模板.xlsx'">{{ $t('xiaZaiDuoXiangMuRenWuMoBan') }}</el-link>
                 </el-form-item>
             </el-form>
             <div slot="footer" class="dialog-footer">
@@ -1711,7 +1709,7 @@
                 <el-form label-width="20%">
                     <el-form-item :label="$t('mo-ban-ming-cheng')"><el-input v-model="setTemplateData.name" style="width:80%" clearable></el-input></el-form-item>
                     <el-form-item label=""><el-checkbox v-model="setTemplateData.creWithPro">{{ $t('suixiangmuzidongchuangjian') }}</el-checkbox></el-form-item>
-                    <el-form-item v-for="item,index in setTemplateData.stagesList" :key="item.id" :label="index == 0 ? '任务列表' : ''">
+                    <el-form-item v-for="item,index in setTemplateData.stagesList" :key="item.id" :label="index == 0 ? $t('tasklist') : ''">
                         <el-input v-model="item.stagesName"  style="width:70%" clearable></el-input>
                         <el-link :underline="false" type="primary" style="color:#aaa;" @click="deleteStages(item,index)"  v-if="index != 0">
                             <i class="el-icon-delete"></i>
@@ -1884,7 +1882,7 @@ a {
                     code: [{ required: true, message: this.$t('qing-shu-ru-bian-hao'), trigger: "blur" }],
                     projectStageName: [{ required: true, message: this.$t('pleaseentername'), trigger: "blur" }],
                     projectLevelName: [{ required: true, message: this.$t('pleaseentername'), trigger: "blur" }],
-                    deptId: [{ required: true, message: '请选择所属部门', trigger: "blur" }]
+                    deptId: [{ required: true, message: this.$t('qingXuanZeSuoShuBuMen'), trigger: "blur" }]
                 },
                 ause: [],
                 auseList: [],
@@ -1979,19 +1977,19 @@ a {
                 projectCategorySubList:[
                     {
                         value: 1,
-                        label: '纯软件项目'
+                        label: this.$t('softwareproject')
                     },
                     {
                         value: 2,
-                        label: '纯硬件项目'
+                        label: this.$t('hardwareproject')
                     },
                     {
                         value: 3,
-                        label: '集成项目'
+                        label: this.$t('integrationproject')
                     },
                     {
                         value: 4,
-                        label: '服务项目'
+                        label: this.$t('fuWuXiangMu')
                     }
                 ],
                 projectCategorySubId:'',
@@ -2004,11 +2002,11 @@ a {
                 timeTypeList:[
                     {
                         value: 1,
-                        label: '项目工时'
+                        label: this.$t('xiangMuGongShi')
                     },
                     {
                         value: 2,
-                        label: '非项目工时'
+                        label: this.$t('feiXiangMuGongShi')
                     },
                 ],
                 roleList:[
@@ -2098,7 +2096,7 @@ a {
         },
         methods: {
             showAllparticipator(item) {
-                this.participatorVisibleTitle = item.projectName + ' -- 参与人'
+                this.participatorVisibleTitle = item.projectName + ' -- '+this.$t('participantin')
                 this.participatorValue = item.participator || []
                 this.participatorVisible = true
             },
@@ -2205,7 +2203,7 @@ a {
                 res => {
                     if (res.code == "ok") {
                         this.$message({
-                            message: '操作成功',
+                            message: this.$t('operationissuccessful'),
                             type: "success"
                         });
                         this.copySubPListVisible = false;
@@ -2491,7 +2489,7 @@ a {
                 let format = str[str.length - 1];
                 if (format != "jpg" && format != "jpeg" && format != "png") {
                     this.$message({
-                        message: "请选择.jpg或.jpeg文件",
+                        message: this.$t('qingXuanZeJpgHuoJpegWenJian'),
                         type: "error"
                     });
                 } else {
@@ -2503,7 +2501,7 @@ a {
                             this.dataList[indexLi].valuelist.push(res.data)
                             this.$forceUpdate()
                             this.$message({
-                                message: "上传成功",
+                                message: this.$t('uploadedsuccessfully'),
                                 type: "success"
                             });
                         } else {
@@ -2797,7 +2795,7 @@ a {
                         res => {
                             if (res.code == "ok") {
                                 this.$message({
-                                message: "操作成功",
+                                message: this.$t('operationissuccessful'),
                                 type: "success"
                                 });
                             } else {
@@ -2827,7 +2825,7 @@ a {
             batchAddTaskGroup(){
                 if(!this.batchAddTaskGroupName){
                     this.$message({
-                        message: '请填写分组名称',
+                        message: this.$t('qingTianXieFenZuMingCheng'),
                         type: 'warning'
                     })
                     return
@@ -2842,7 +2840,7 @@ a {
                 },res=>{
                     if(res.code == 'ok'){
                         this.$message({
-                            message: '操作成功',
+                            message: this.$t('operationissuccessful'),
                             type: 'success'
                         })
                         this.addTaskGroupDig=false
@@ -2892,14 +2890,14 @@ a {
             batchSetGroupIncharger(){
                  if(!this.hasSetGroupName){
                     this.$message({
-                        message: '请选择任务分组',
+                        message: this.$t('defaultText.pleaseSelectaTaskGroup'),
                         type: 'warning'
                     })
                     return
                 }
                 if(!this.hasSetGroupInchargerId){
                     this.$message({
-                        message: '请选择分组负责人',
+                        message: this.$t('qingXuanZeFenZuFuZeRen'),
                         type: 'warning'
                     })
                     return
@@ -2915,7 +2913,7 @@ a {
                 },res=>{
                     if(res.code == 'ok'){
                         this.$message({
-                            message: '操作成功',
+                            message: this.$t('operationissuccessful'),
                             type: 'success'
                         })
                         this.addTaskGroupInchargerDig=false
@@ -3289,8 +3287,8 @@ a {
 
                 this.exportDisabled = true
                 this.exportNotification = this.$notify({
-                    title: '导出项目',
-                    message: '项目导出中、请稍后...',
+                    title: this.$t('exportProject'),
+                    message: this.$t('xiangMuDaoChuZhongQingShaoHou'),
                     duration: 0,
                     showClose: false
                 });
@@ -3642,7 +3640,7 @@ a {
                 res => {
                     if (res.code == "ok") {
                         this.$message({
-                        message: "操作成功",
+                        message: this.$t('operationissuccessful'),
                         type: "success"
                         });
                         this.addTaskGroupDig = false;
@@ -4355,14 +4353,14 @@ a {
                         }
                     }
                 }
-                this.$confirm('确认同步项目数据?','提示',{
-                    confirmButtonText: '确定',
-                    cancelButtonText: '取消',
+                this.$confirm(this.$t('queRenTongBuXiangMuShuJu'),this.$t('other.prompts'),{
+                    confirmButtonText: this.$t('btn.determine'),
+                    cancelButtonText: this.$t('btn.cancel'),
                     type: 'info'
                 }).then(()=>{
                     const loading = this.$loading({
                         lock: true,
-                        text: '正在同步中,请耐心等待。',
+                        text: this.$t('zhengZaiTongBuZhongQingNaiXinDengDai'),
                         spinner: 'el-icon-loading',
                         background: 'rgba(0, 0, 0, 0.7)'
                     });
@@ -4372,7 +4370,7 @@ a {
                         console.log(res, 'res')
                         if (res.code == "ok") {
                             this.$message({
-                                message: '项目同步成功',
+                                message: this.$t('xiangMuTongBuChengGong'),
                                 type: "success"
                             });
                             this.syncProjectDig=false
@@ -4979,7 +4977,7 @@ a {
                     console.log('点击来编辑执行')
                     const usersJson = JSON.parse(sessionStorage.getItem("user"))
                     if(usersJson.companyId == '936') {
-                        if(usersJson.roleName != '超级管理员' && usersJson.roleName != '系统管理员') {
+                        if(usersJson.roleName != this.$t('role.superAdministrator') && usersJson.roleName != this.$t('role.systemAdministrator')) {
                             this.isShowProjectName = true
                         } else {
                             this.isShowProjectName = false
@@ -5497,7 +5495,7 @@ a {
                             if (this.manDaySetting.projectManDayFillMode == 2 || (this.manDaySetting.projectManDayFillMode == 1 && this.addForm.fromOutside == 0)) {
                                 if (!this.addForm.manDay) {
                                     this.$message({
-                                        message: '预估工时不能为0',
+                                        message: this.$t('yuGuGongShiBuNengWei_0'),
                                         type: "error"
                                     });
                                     this.addLoading = false;
@@ -5755,7 +5753,7 @@ a {
                     this.listLoading = false;
                     if (res.code == "ok") {
                         this.$message({
-                            message: subProject.status?"开启成功":"关闭成功",
+                            message: subProject.status?this.$t('kaiQiChengGong'):this.$t('guanBiChengGong'),
                             type: "success"
                         });
                         this.subProject(this.currentProject);
@@ -5810,7 +5808,7 @@ a {
                 if(type=="functional"){
                     this.functionalList.push({
                         "id":null,
-                        'timeType': '项目工时',
+                        'timeType': this.$t('xiangMuGongShi'),
                         'role': 'CRC&LM',
                         'jobRespon': '',
                         "companyId":this.user.companyId,
@@ -5866,9 +5864,9 @@ a {
                     this.functionalList.splice(index, 1)
                     return
                 }
-                this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
-                    confirmButtonText: '确定',
-                    cancelButtonText: '取消',
+                this.$confirm(this.$t('ciCaoZuoJiangYongJiuShanChuGaiWenJianShiFouJiXu'), this.$t('other.prompts'), {
+                    confirmButtonText: this.$t('btn.determine'),
+                    cancelButtonText: this.$t('btn.cancel'),
                     type: 'warning'
                 }).then(() => {
                     this.functionalList.splice(index, 1)
@@ -5878,7 +5876,7 @@ a {
                     res => {
                         if (res.code == "ok") {
                             this.$message({
-                                message: '删除成功',
+                                message: this.$t('message.successfullyDeleted'),
                                 type: "success"
                             });
                         } else {
@@ -5898,7 +5896,7 @@ a {
                 }).catch(() => {
                     this.$message({
                         type: 'info',
-                        message: '已取消删除'
+                        message: this.$t('thedeletionhasbeencancelled')
                     });          
                 });
                 
@@ -5909,9 +5907,9 @@ a {
                     this.workContextList.splice(index, 1)
                     return
                 }
-                this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
-                    confirmButtonText: '确定',
-                    cancelButtonText: '取消',
+                this.$confirm(this.$t('ciCaoZuoJiangYongJiuShanChuGaiWenJianShiFouJiXu'), this.$t('other.prompts'), {
+                    confirmButtonText: this.$t('btn.determine'),
+                    cancelButtonText: this.$t('btn.cancel'),
                     type: 'warning'
                 }).then(() => {
                     this.workContextList.splice(index, 1)
@@ -5921,7 +5919,7 @@ a {
                     res => {
                         if (res.code == "ok") {
                             this.$message({
-                                message: '删除成功',
+                                message: this.$t('message.successfullyDeleted'),
                                 type: "success"
                             });
                         } else {
@@ -5941,7 +5939,7 @@ a {
                 }).catch(() => {
                     this.$message({
                         type: 'info',
-                        message: '已取消删除'
+                        message: this.$t('thedeletionhasbeencancelled')
                     });          
                 });
                 
@@ -5954,7 +5952,7 @@ a {
                 res => {
                     if (res.code == "ok") {
                         this.$message({
-                            message: '操作成功',
+                            message: this.$t('operationissuccessful'),
                             type: "success"
                         });
                         this.getFunctionalList()
@@ -5978,7 +5976,7 @@ a {
                 for(var index in this.workContextList){
                     if(!this.workContextList[index].workContext){
                         this.$message({
-                            message: "请填写工作内容",
+                            message: this.$t('qingTianXieGongZuoNeiRong'),
                             type: "error"
                         });
                         return
@@ -5990,7 +5988,7 @@ a {
                 res => {
                     if (res.code == "ok") {
                         this.$message({
-                            message: '操作成功',
+                            message: this.$t('operationissuccessful'),
                             type: "success"
                         });
                         // this.workContextDig = false

+ 24 - 24
fhKeeper/formulahousekeeper/timesheet/src/views/project/projectForm.vue

@@ -1,28 +1,28 @@
 <template>
   <div class="infrastructures">
       <div class="til">
-          <p>项目表单设置</p>
+          <p>{{ $t('navigation.projectFormSettings') }}</p>
           <div style="display: flex;">
-            <p style="cursor:pointer;margin-left: 30px;color: #20A0FF;" @click="addJa('添加表单字段', 'ruleForm')"><i class="el-icon-circle-plus-outline"></i>添加</p>
+             <p style="cursor:pointer;margin-left: 30px;color: #20A0FF;" @click="addJa($t('tianJiaBiaoDanZiDuan'), 'ruleForm')"><i class="el-icon-circle-plus-outline"></i>{{ $t('addTian') }}</p>
           </div>
       </div>
       <div class="tabl">
         <el-table :data="dataList" highlight-current-row v-loading="listLoading" :height="heightDoms" style="width: 100%;">
-            <el-table-column type="index" label="序号" width="250px">
+            <el-table-column type="index" :label="$t('headerTop.serialNumber')" width="250px">
                 <template slot-scope="scope" >
                     {{scope.$index + 1}}
                 </template>
             </el-table-column>
-            <el-table-column prop="customName" label="自定义名称" sortable></el-table-column>
-            <el-table-column prop="customType" label="类型" sortable>
+            <el-table-column prop="customName" :label="$t('ziDingYiMingCheng')" sortable></el-table-column>
+            <el-table-column prop="customType" :label="$t('types')" sortable>
                 <template slot-scope="scope">
-                    {{scope.row.customType == '2' ? '日期' : (scope.row.customType == '1' ? '图片' : '文本')}}
+                    {{scope.row.customType == '2' ? $t('weekDay.date') : (scope.row.customType == '1' ? $t('tuPian') : $t('wenBen'))}}
                 </template>
             </el-table-column>
-            <el-table-column label="操作" width="280">
+            <el-table-column :label="$t('operation')" width="280">
                 <template slot-scope="scope">
-                    <el-button size="mini" type="primary" @click="editor(scope.row, '编辑表单字段')">编辑</el-button>
-                    <el-button size="mini" type="danger" @click="deteles(scope.row)">删除</el-button>
+                     <el-button size="mini" type="primary" @click="editor(scope.row, $t('bianJiBiaoDanZiDuan'))">{{ $t('bian-ji') }}</el-button>
+                    <el-button size="mini" type="danger" @click="deteles(scope.row)">{{ $t('btn.delete') }}</el-button>
                 </template>
             </el-table-column>
         </el-table>
@@ -31,21 +31,21 @@
       <el-dialog :title="titleTex" :visible.sync="dialogVisible" width="400px" :before-close="handleClose">
         <div>
             <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="80px" class="demo-ruleForm">
-                <el-form-item label="类型">
+                <el-form-item :label="$t('types')">
                     <el-radio-group v-model="ruleForm.customType">
-                        <el-radio-button label="0">文本</el-radio-button>
-                        <el-radio-button label="1">图片</el-radio-button>
-                        <el-radio-button label="2">日期</el-radio-button>
+                        <el-radio-button label="0">{{ $t('wenBen') }}</el-radio-button>
+                        <el-radio-button label="1">{{ $t('tuPian') }}</el-radio-button>
+                        <el-radio-button label="2">{{ $t('weekDay.date') }}</el-radio-button>
                     </el-radio-group>
                 </el-form-item>
-                <el-form-item label="名称" prop="customName">
-                    <el-input placeholder="请输入自定义名称" v-model.trim="ruleForm.customName" clearable></el-input>
+                <el-form-item :label="$t('names')" prop="customName">
+                    <el-input :placeholder="$t('qingShuRuZiDingYiMingCheng')" v-model.trim="ruleForm.customName" clearable></el-input>
                 </el-form-item>
             </el-form>
         </div>
         <span slot="footer" class="dialog-footer">
-            <el-button @click="dialogVisible = false">取 消</el-button>
-            <el-button type="primary" @click="determine('ruleForm')" v-loading="listLoading">确 定</el-button>
+            <el-button @click="dialogVisible = false">{{ $t('quXiao') }}</el-button>
+            <el-button type="primary" @click="determine('ruleForm')" v-loading="listLoading">{{ $t('queDing') }}</el-button>
         </span>
       </el-dialog>
   </div>
@@ -58,7 +58,7 @@ export default {
   data() {
     return {
       heightDoms: document.documentElement.clientHeight - 130,
-      titleTex: '添加表单字段',
+      titleTex: this.$t('tianJiaBiaoDanZiDuan'),
       dialogVisible: false,
       ruleForm: {
           id: '',
@@ -66,7 +66,7 @@ export default {
           customName: '',
           customType: '0'
       },
-      rules: {customName: [{required: true, message: '请输入自定义名称', trigger: 'blur'}]},
+      rules: {customName: [{required: true, message: this.$t('qingShuRuZiDingYiMingCheng'), trigger: 'blur'}]},
       listLoading: false,
       user: JSON.parse(sessionStorage.getItem("user")),
       dataList: []
@@ -104,7 +104,7 @@ export default {
     addJa(tex) {
         if(this.dataList.length >= 10) {
             this.$message({
-                message: '最多只能存在十个自定义字段',
+                message: this.$t('zuiDuoZhiNengCunZaiShiGeZiDingYiZiDuan'),
                 type: 'warning'
             });
             return
@@ -139,14 +139,14 @@ export default {
                 this.listLoading = false
                 if(res.code == 'ok') {
                     this.$message({
-                        message: this.titleTex == '添加表单字段' ? '添加成功' : '编辑成功',
+                        message: this.titleTex == this.$t('tianJiaBiaoDanZiDuan') ? this.$t('addsuccessful') : this.$t('editsuccess'),
                         type: 'success'
                     });
                     this.dialogVisible = false
                     this.getObtain()
                 } else {
                     this.$message({
-                        message: this.titleTex == '添加表单字段' ? '添加失败: ' + res.msg : '编辑失败: ' + res.msg,
+                        message: this.titleTex == this.$t('tianJiaBiaoDanZiDuan') ? this.$t('tianJiaShiBai') + res.msg : this.$t('bianJiShiBai') + res.msg,
                         type: 'error'
                     });
                 }
@@ -171,13 +171,13 @@ export default {
         res => {
             if(res.code == 'ok') {
                 this.$message({
-                    message: '删除成功',
+                    message: this.$t('message.successfullyDeleted'),
                     type: 'success'
                 });
                 this.getObtain()
             } else {
                 this.$message({
-                    message: '删除失败:' + res.msg,
+                    message: this.$t('shanChuShiBai') + res.msg,
                     type: 'error'
                 });
             }

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

@@ -36,7 +36,7 @@
                         <p ><span class="heavyTxt">{{ $t('other.taskGroup') }}</span>
                             <i class="el-icon-plus pull-right" style="color:#666;margin-right:10px;" @click="createGroup" v-if="projectCreatorId == user.id || projectInchargerId == user.id || permissions.projectManagement || isManageDept"></i>
                         </p>
-                        <p style="color: #ff0b0b;font-size: 18px;font-weight: 700;" v-if="user.companyId == '936'">如需修改,请先联系管理员</p>
+                        <p style="color: #ff0b0b;font-size: 18px;font-weight: 700;" v-if="user.companyId == '936'">{{ $t('ruXuXiuGaiQingXianLianXiGuanLiYuan') }}</p>
                         <el-menu :default-active="defaultGroupId" ref="defaultMenu"  class="el-menu-vertical-demo" @select="groupChange" style="border-right:none;">
                             <el-menu-item :index="item.id" v-for="item in groupList" :key="item.id"  class="group_style">
                                 <div slot="title">
@@ -59,7 +59,7 @@
                                             {{ $t('changegroups') }}</el-dropdown-item>
                                         <el-dropdown-item divided @click.native="setManDay()" v-if="user.timeType.projectManDay==1" :disabled="!(projectCreatorId == user.id || projectInchargerId == user.id || permissions.projectManagement || isManageDept)">
                                             <i class="el-icon-time"></i>
-                                            预估工时</el-dropdown-item>
+                                            {{ $t('yuGuGongShi') }}</el-dropdown-item>
                                         <el-dropdown-item divided @click.native="addToTemplate(item)" :disabled="!(projectCreatorId == user.id || projectInchargerId == user.id || permissions.projectManagement || isManageDept)">
                                             <i class="el-icon-plus"></i>
                                             {{ $t('settemplate') }}</el-dropdown-item>
@@ -116,8 +116,8 @@
                                 <el-form-item label="wbsCode:" v-if="user.companyId == 936">
                                     <span>{{groupDetailData.wbsCode}}</span>
                                 </el-form-item>
-                                <el-form-item label="预估工时:" v-if="user.timeType.projectManDay">
-                                    <span>{{groupDetailData.manDay}}人天 ({{ (groupDetailData.manDay==null?0:groupDetailData.manDay)*user.timeType.allday }}小时)</span>
+                                <el-form-item :label="$t('yuGuGongShi')" v-if="user.timeType.projectManDay">
+                                    <span>{{groupDetailData.manDay}}{{ $t('renTian') }} ({{ (groupDetailData.manDay==null?0:groupDetailData.manDay)*user.timeType.allday }}{{ $t('time.hour') }})</span>
                                 </el-form-item>
                             </el-form>
                         </div>
@@ -150,7 +150,7 @@
                             
                             <el-col :span="16" style="float:right;" class="hideCompletedFelx">
                                 <!-- 隐藏已完成任务 -->
-                                <el-checkbox v-model="hideCompleted" style="margin-right: 10px" @change="editHideTask">隐藏已完成任务</el-checkbox>
+                                <el-checkbox v-model="hideCompleted" style="margin-right: 10px" @change="editHideTask">{{ $t('yinCangYiWanChengRenWu') }}</el-checkbox>
                                 <el-select v-model="order" size="small" style="background:#fff;display:inline-block;" @change="orderChange">
                                     <el-option v-for="item in orderList" :key="item.id" :label="item.name" :value="item.id">
                                         <span>{{item.name}}</span>
@@ -365,7 +365,7 @@
                     </el-input>
 
                     <div v-if="user.userNameNeedTranslate == '1'">
-                        <el-input placeholder="请输输入关键字过滤" v-model.trim="participantsFilterText" class="input-with-select" @keyup.enter.native="echartDepartment()">
+                        <el-input :placeholder="$t('qingShuShuRuGuanJianZiGuoLv')" v-model.trim="participantsFilterText" class="input-with-select" @keyup.enter.native="echartDepartment()">
                             <el-button slot="append" icon="el-icon-search" @click="echartDepartment()"></el-button>
                         </el-input>
                     </div>
@@ -1099,7 +1099,7 @@
                 <el-form label-width="20%">
                     <el-form-item :label="$t('mo-ban-ming-cheng')"><el-input v-model="setTemplateData.name" style="width:80%" clearable></el-input></el-form-item>
                     <el-form-item label=""><el-checkbox v-model="setTemplateData.creWithPro">{{ $t('suixiangmuzidongchuangjian') }}</el-checkbox></el-form-item>
-                    <el-form-item v-for="item,index in setTemplateData.stagesList" :key="item.id" :label="index == 0 ? '任务列表' : ''">
+                    <el-form-item v-for="item,index in setTemplateData.stagesList" :key="item.id" :label="index == 0 ? $t('tasklist') : ''">
                         <el-input v-model="item.stagesName"  style="width:70%" clearable></el-input>
                         <el-link :underline="false" type="primary" style="color:#aaa;" @click="deleteStages(item,index)"  v-if="index != 0">
                             <i class="el-icon-delete"></i>
@@ -1146,42 +1146,42 @@
             </div>
         </el-dialog>
         
-        <el-dialog title="设置分组预估工时" v-if="modGroupManDayDialog" :visible.sync="modGroupManDayDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
+        <el-dialog :title="$t('sheZhiFenZuYuGuGongShi')" v-if="modGroupManDayDialog" :visible.sync="modGroupManDayDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
             <el-table :data="groupList" :key="modGroupManDayKey" size="small" :height="'400px'" show-summary="true">
-                <el-table-column prop="name" label="分组名称">
+                <el-table-column prop="name" :label="$t('groupname')">
                 </el-table-column>
-                <el-table-column prop="manDay" width="200" label="预估工时(人天)" >
+                <el-table-column prop="manDay" width="200" :label="$t('yuGuGongShiRenTian')" >
                     <template slot-scope="scope">
-                        <el-input v-model="scope.row.manDay" type="number" @input="jisuanEstimatedWorkTime(scope.row.manDay,scope.row.id)" :placeholder="$t('peaseenterthe')" maxlength="10" :max="99999" style="width:120px;" :disabled="scope.row.disabled"></el-input>&nbsp;人天&nbsp;
+                        <el-input v-model="scope.row.manDay" type="number" @input="jisuanEstimatedWorkTime(scope.row.manDay,scope.row.id)" :placeholder="$t('peaseenterthe')" maxlength="10" :max="99999" style="width:120px;" :disabled="scope.row.disabled"></el-input>&nbsp;{{ $t('renTian') }}&nbsp;
                         <!-- <i v-if="user.companyId=3092 && scope.row.disabled"  @click="changeBudget(scope.row)"  class="el-icon-circle-plus-outline"></i> -->
                     </template>
                 </el-table-column>
-                <el-table-column prop="estimatedWorkTime" width="200" label="预估工时(小时)" >
+                <el-table-column prop="estimatedWorkTime" width="200" :label="$t('yuGuGongShiXiaoShi')" >
                     <template slot-scope="scope">
-                        <el-input v-model="scope.row.estimatedWorkTime" type="number"  @input="jisuanManDay(scope.row.estimatedWorkTime,scope.row.id)" :placeholder="$t('peaseenterthe')" maxlength="10" :max="99999" style="width:120px;" :disabled="scope.row.disabled"></el-input>&nbsp;小时&nbsp;
+                        <el-input v-model="scope.row.estimatedWorkTime" type="number"  @input="jisuanManDay(scope.row.estimatedWorkTime,scope.row.id)" :placeholder="$t('peaseenterthe')" maxlength="10" :max="99999" style="width:120px;" :disabled="scope.row.disabled"></el-input>&nbsp;{{ $t('time.hour') }}&nbsp;
                         <i v-if="user.companyId=3092 && scope.row.disabled"  @click="changeBudget(scope.row)"  class="el-icon-circle-plus-outline"></i>
                     </template>
                 </el-table-column>
             </el-table>
-            <p style="text-align:center;">当前项目预估工时为:{{ currentProject.manDay == null? 0:currentProject.manDay }}人天 {{ currentProject.estimatedWorkTime == null? 0:currentProject.estimatedWorkTime }}小时</p>
+            <p style="text-align:center;">{{ $t('dangQianXiangMuYuGuGongShiWei') }}{{ currentProject.manDay == null? 0:currentProject.manDay }} {{ $t('renTian') }} {{ currentProject.estimatedWorkTime == null? 0:currentProject.estimatedWorkTime }} {{ $t('time.hour') }}</p>
             <div slot="footer" class="dialog-footer">
                 <el-button type="primary" @click="setManDayData()" style="width:100%;" >{{ $t('save') }}</el-button>
             </div>
         </el-dialog>
 
-        <el-dialog title="预估工时变更" v-if="changeBudgetDig" :visible.sync="changeBudgetDig" :close-on-click-modal="false" customClass="customWidth" width="500px">
+        <el-dialog :title="$t('yuGuGongShiBianGeng')" v-if="changeBudgetDig" :visible.sync="changeBudgetDig" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <el-form :model="groupBudgetData" label-width="120px">
-                <el-form-item :label="'原预估工时'"><span>{{groupBudgetData.manDay}}{{ '人天' }} / {{groupBudgetData.estimatedWorkTime}}{{ '小时' }}</span></el-form-item>
-                <el-form-item :label="'预估工时修改'" prop="changeManDay">
-                   <el-input v-model="groupBudgetData.changeManDay"  type="number"  @input="changeNowManDay(groupBudgetData)" :placeholder="$t('peaseenterthe')" maxlength="10" :max="99999" style="width:120px;"></el-input>&nbsp;人天
-                   <el-input v-model="groupBudgetData.changeEstimatedWorkTime"  type="number" @input="changeEstimatedWorkTime(groupBudgetData)" :placeholder="$t('peaseenterthe')" maxlength="10" :max="99999" style="width:120px;"></el-input>&nbsp;小时
+                <el-form-item :label="$t('yuanYuGuGongShi')"><span>{{groupBudgetData.manDay}}{{ $t('renTian') }} / {{groupBudgetData.estimatedWorkTime}}{{ $t('time.hour') }}</span></el-form-item>
+                <el-form-item :label="$t('yuGuGongShiXiuGai')" prop="changeManDay">
+                   <el-input v-model="groupBudgetData.changeManDay"  type="number"  @input="changeNowManDay(groupBudgetData)" :placeholder="$t('peaseenterthe')" maxlength="10" :max="99999" style="width:120px;"></el-input>&nbsp;{{ $t('renTian') }}
+                   <el-input v-model="groupBudgetData.changeEstimatedWorkTime"  type="number" @input="changeEstimatedWorkTime(groupBudgetData)" :placeholder="$t('peaseenterthe')" maxlength="10" :max="99999" style="width:120px;"></el-input>&nbsp;{{$t('time.hour')}}
                 </el-form-item>
-                <el-form-item :label="'变更后预估工时'"><span>{{nowManDay}}{{'人天'}} / {{nowEstimatedWorkTime}}{{'小时'}}</span></el-form-item>
-                <el-form-item :label="'变更理由'">
+                <el-form-item :label="$t('bianGengHouYuGuGongShi')"><span>{{nowManDay}}{{$t('renTian')}} / {{nowEstimatedWorkTime}}{{$t('time.hour')}}</span></el-form-item>
+                <el-form-item :label="$t('bianGengLiYou')">
                     <el-input
                         type="textarea"
                         :rows="2"
-                        placeholder="请输入内容"
+                        :placeholder="$t('pleaseentercontent')"
                         v-model="groupBudgetData.remark">
                     </el-input>
                 </el-form-item>
@@ -1396,7 +1396,7 @@
                     name: [{ required: true, message: this.$t('pleaseenteragroupname'), trigger: "blur" }],
                 },
                 rulesManDay: {
-                    manDay: [{ required: true, message: '请输入预估工时', trigger: "blur" }],
+                    manDay: [{ required: true, message: this.$t('qingShuRuYuGuGongShi'), trigger: "blur" }],
                 },
                 rules2: {
                     stagesName: [{ required: true, message: this.$t('pleaseenteratasklistname'), trigger: "blur" }],
@@ -1822,7 +1822,7 @@
             },
             // 列表的删除按钮
             taskFileDelete(eid){
-                this.$confirm('是否移除此文件?', this.$t('other.prompts'), {
+                this.$confirm(this.$t('shiFouYiChuCiWenJian'), this.$t('other.prompts'), {
                     confirmButtonText: this.$t('btn.determine'),
                     cancelButtonText: this.$t('btn.cancel'),
                     type: 'warning'
@@ -2991,7 +2991,7 @@
                 }
                 if(!groupBudgetData.remark) {
                     this.$message({
-                        message: '请输入变更理由',
+                        message: this.$t('qingShuRuBianGengLiYou'),
                         type: "error"
                     });
                     return
@@ -3000,7 +3000,7 @@
                 res => {
                     if (res.code == "ok") {
                         this.$message({
-                        message: "操作成功",
+                        message: this.$t('operationissuccessful'),
                         type: "success"
                         });
                         this.changeBudgetDig=false

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

@@ -1,7 +1,7 @@
 <template>
   <div>
      <el-table :data="treeDataList" height="490px" row-key="id" :key="'1'" show-overflow-tooltip :cell-style="TableCellStyle" size="mini" :span-method="arraySpanMethod" style="width: 100%;margin-bottom: 20px;" border default-expand-all :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
-        <el-table-column prop="text" label="姓名" width="240" fixed="left" v-if="stafforpro != '按项目查看'">
+        <el-table-column prop="text" :label="$t('lable.name')" width="240" fixed="left" v-if="stafforpro != $t('an-xiang-mu-cha-kan')">
           <template slot-scope="scope">
               <!-- user.userNameNeedTranslate == 1 -->
               <span v-if="user.userNameNeedTranslate == 1 && scope.row.translationType == 'department'"><TranslationOpenDataText type='departmentName' :openid='scope.row.text'></TranslationOpenDataText></span>
@@ -10,7 +10,7 @@
               <span v-if="user.userNameNeedTranslate != 1">{{scope.row.text}}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="text" label="项目" width="240" fixed="left" v-if="stafforpro == '按项目查看'">
+        <el-table-column prop="text" :label="$t('other.project')" width="240" fixed="left" v-if="stafforpro == $t('an-xiang-mu-cha-kan')">
           <template slot-scope="scope">
             <span v-if="user.userNameNeedTranslate == 1 && scope.row.translationType == 'user'">
               <span v-for="(item, index) in scope.row.userNameList" :key="index">
@@ -31,12 +31,12 @@
                   <!-- <span v-if="scope.row.translationType == 'user' && scope.column.label.indexof(scope.row.end_date) != '-1'">
                     <TranslationOpenDataText type='userName' :openid='scope.row.text'></TranslationOpenDataText>
                   </span> -->
-                  <span v-if="scope.row.translationType != 'user' && stafforpro != '按项目查看'">
+                  <span v-if="scope.row.translationType != 'user' && stafforpro != $t('an-xiang-mu-cha-kan')">
                     <!-- {{scope.row.end_date | dataValue(scope.column, scope.row)}} -->
                     <!-- {{scope.row.start_date | dataValue(scope.column, scope.row)}} -->
                     {{scope.row.con_data | dataValue(scope.column, scope.row)}}
                   </span>
-                  <span v-if="stafforpro == '按项目查看'">
+                  <span v-if="stafforpro == $t('an-xiang-mu-cha-kan')">
                     <!-- {{scope.row.end_date | dataValue(scope.column, scope.row)}} -->
                     <!-- {{scope.row.start_date | dataValue(scope.column, scope.row)}} -->
                     {{scope.row.con_data | dataValue(scope.column, scope.row)}}
@@ -154,7 +154,7 @@ export default {
     // 递归加颜色以及存储需要合并的数据
     recursive(data) {
       for (let i in data) {
-            if(this.stafforpro == '按项目查看') {
+            if(this.stafforpro == this.$t('an-xiang-mu-cha-kan')) {
               data[i].color = '#409EFF'
               if(data[i].translationType == 'user' && data[i].text) {
                 let arr = []
@@ -237,7 +237,7 @@ export default {
             if(data[i].id.indexOf(this.$t('other.AskForLeave')) != '-1') {
               data[i].color = '#F56C6C'
             }
-            if(data[i].id.indexOf('任务') != '-1') {
+            if(data[i].id.indexOf(this.$t('other.task')) != '-1') {
               if(data[i].level == 0) {
                 data[i].color = '#409EFF'
               }
@@ -304,7 +304,7 @@ export default {
     combination(month, data) {
       let monthStr = [this.initialMonth, ...month]
       let arrList = []
-      let weekArrayList = ['周日', '周一', '周二', '周三', '周四', '周五', '周六',]
+      let weekArrayList = [this.$t('weekDay.sunday'), this.$t('weekDay.monday'), this.$t('weekDay.tuesday'), this.$t('weekDay.wednesday'), this.$t('weekDay.thursday'), this.$t('weekDay.friday'), this.$t('weekDay.saturday'),]
       for(let i in monthStr) {
         let obj = {}
         obj.name = monthStr[i]

+ 18 - 18
fhKeeper/formulahousekeeper/timesheet/src/views/projectApproval/projectApproval.vue

@@ -51,8 +51,8 @@
                         </template>
                     </el-table-column>
                         <el-table-column prop="categoryName" :label="$t('projectclassification')"  width="140"></el-table-column>
-                        <el-table-column prop="isPublic" :label="'项目类型'"  width="140">
-                            <template slot-scope="scope">{{scope.row.isPublic==0?"正式项目":"非项目"}}</template>
+                        <el-table-column prop="isPublic" :label="$t('projecttype')"  width="140">
+                            <template slot-scope="scope">{{scope.row.isPublic==0?$t('zheng-shi-xiang-mu'):$t('fei-xiang-mu')}}</template>
                         </el-table-column>
                         <el-table-column prop="inchargerName" :label="$t('projectmanager')"  min-width="150">
                             <template slot-scope="scope">
@@ -73,7 +73,7 @@
                                 <span v-else>{{importanceListLable[scope.row.level - 1]}}</span>
                             </template>
                         </el-table-column>
-                        <el-table-column prop="status" :label="'审核状态'" min-width="100" >
+                        <el-table-column prop="status" :label="$t('other.approvalStatus')" min-width="100" >
                             <template slot-scope="scope">
                                 {{scope.row.status == null?"-":approvalStatusStr[scope.row.status]}}
                             </template>
@@ -255,7 +255,7 @@
                     <el-dialog :title="$t('selectingParticipants')"  :visible.sync="chooseParticipVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
                         <!-- <el-input style="width:100%" v-model="filterName" placeholder="请输入姓名搜索" @change="findUserInTree"></el-input> -->
                         <div v-if="user.userNameNeedTranslate == '1'">
-                            <el-input placeholder="请输入内容" v-model.trim="filterText" class="input-with-select" @keyup.enter.native="echartDepartment()">
+                            <el-input :placeholder="$t('pleaseentercontent')" v-model.trim="filterText" class="input-with-select" @keyup.enter.native="echartDepartment()">
                                 <el-button slot="append" icon="el-icon-search" @click="echartDepartment()"></el-button>
                             </el-input>
                         </div>
@@ -352,26 +352,26 @@
                         </div>
                         <el-divider></el-divider>
                         <div class="line">
-                            <span>成本基线</span>
+                            <span>{{ $t('costbaseline') }}</span>
                         </div>
                         <div class="line" v-for="(item,index) in projectApprocalDetail.projectApprovalBasecostList">
                             <span>{{item.baseName+":"}}</span><span>{{item.baseAmount}}</span>
                         </div>
                         <el-divider></el-divider>
                         <div class="line">
-                            <span>操作记录</span>
+                            <span>{{ $t('caoZuoJiLu') }}</span>
                         </div>
                         <div class="line" v-for="(item,index) in approvalLogData">
-                            <span v-if="user.userNameNeedTranslate != 1">{{item.userName}} {{item.createTime}} {{approvalTypeStr[item.type]}}了日报</span>
-                            <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='userName' :openid='item.userName'></TranslationOpenDataText> {{item.createTime}}{{approvalTypeStr[item.type]}}了日报</span>
+                            <span v-if="user.userNameNeedTranslate != 1">{{item.userName}} {{item.createTime}} {{approvalTypeStr[item.type]}}{{ $t('leRiBao') }}</span>
+                            <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='userName' :openid='item.userName'></TranslationOpenDataText> {{item.createTime}}{{approvalTypeStr[item.type]}}{{ $t('leRiBao') }}</span>
                         </div>
                         <div slot="footer" class="dialog-footer">
                             <el-button type="primary" @click="projectApprovalDetailVisible = false" >{{'关闭'}}</el-button>
                         </div>
                     </el-dialog>
-                    <el-dialog :title="'立项导入'" v-if="importDialog" :visible.sync="importDialog" customClass="customWidth" width="500px">
+                    <el-dialog :title="$t('liXiangDaoRu')" v-if="importDialog" :visible.sync="importDialog" customClass="customWidth" width="500px">
                     <p>1. {{$t('other.download')}}
-                    <el-link type="primary" style="margin-left:5px;" :underline="false" :href="'./upload/立项导入模板.xlsx'" :download="'立项导入模板.xlsx'">{{'立项导入模板.xlsx'}}</el-link>
+                    <el-link type="primary" style="margin-left:5px;" :underline="false" :href="'./upload/立项导入模板.xlsx'" :download="'立项导入模板.xlsx'">{{ $t('liXiangDaoRuMoBanXlsx') }}</el-link>
                     </p>
                     <p>2. {{$t('other.projectsAndPeopleInThetemplate')}}。</p>
                     <p style="display: flex;justify-content: center;">
@@ -380,7 +380,7 @@
                     </el-upload>
                     </p>
                     </el-dialog>
-                    <el-dialog append-to-body :title="'立项导入结果'" v-if="showImportResult" :visible.sync="showImportResult" width="40%">
+                    <el-dialog append-to-body :title="$t('liXiangDaoRuJieGuo')" v-if="showImportResult" :visible.sync="showImportResult" width="40%">
                             <div >
                                 {{importResultMsg}}
                             </div>
@@ -407,7 +407,7 @@ return {
     page: 1,
     size: localStorage.getItem("projectPageSize")==null?20:parseInt(localStorage.getItem("projectPageSize")),
     listLoading:false,
-    approvalStatusStr:["待审核","已通过","已驳回","已撤销"],
+    approvalStatusStr:[this.$t('state.WaitingAudit'),this.$t('state.alreadyPassed'),this.$t('state.rejected'),this.$t('state.undone')],
     importanceList:[{id:1,label:this.$t('zheng-chang')},{id:2,label:this.$t('jin-ji')},{id:3,label:this.$t('zhong-yao')},{id:4,label:this.$t('zhong-yao-qie-jin-ji')}],
     importanceListLable:[this.$t('zheng-chang'), this.$t('jin-ji'), this.$t('zhong-yao'), this.$t('zhong-yao-qie-jin-ji'), this.$t('di-feng-xian'), this.$t('zhong-feng-xian'), this.$t('gao-feng-xian')],
     addFormVisible:false,
@@ -442,7 +442,7 @@ return {
         code: [{ required: true, message: this.$t('qing-shu-ru-bian-hao'), trigger: "blur" }],
         projectStageName: [{ required: true, message: this.$t('pleaseentername'), trigger: "blur" }],
         projectLevelName: [{ required: true, message: this.$t('pleaseentername'), trigger: "blur" }],
-        deptId: [{ required: true, message: '请选择所属部门', trigger: "blur" }]
+        deptId: [{ required: true, message: this.$t('qingXuanZeSuoShuBuMen'), trigger: "blur" }]
     },
     chosenMembCount:0,
     dataDetail:{},
@@ -459,7 +459,7 @@ return {
     projectApprocalDetail:{},
     importDialog:false,
     approvalLogData:[],
-    approvalTypeStr:["提交","编辑","通过","驳回","撤销"],
+    approvalTypeStr:[this.$t('btn.submit'),this.$t('bian-ji'),this.$t('btn.through'),this.$t('btn.rejected'),this.$t('btn.undo')],
     addLoading:false,
     importingData:false,
     showImportResult:false,
@@ -1221,7 +1221,7 @@ methods: {
         this.getList()
     },
     deletePro(i, item) {
-        this.$confirm('确定要删除立项[' + item.name +'吗]','删除立项', {
+        this.$confirm(this.$t('queDingYaoShanChuLiXiang')+'[' + item.name +this.$t('ma')+']',this.$t('shanChuLiXiang'), {
             confirmButtonText: this.$t('btn.determine'),
             cancelButtonText: this.$t('btn.cancel'),
             type: "warning"
@@ -1269,7 +1269,7 @@ methods: {
             this.listLoading = false;
             if (res.code == "ok") {
                 this.$message({
-                    message: "操作成功",
+                    message: this.$t('operationissuccessful'),
                     type: "success"
                 });
                 this.addFormVisible=false
@@ -1328,7 +1328,7 @@ methods: {
             this.importingData = false;
             if (res.code == "ok") {
                 //换成弹出框,以免有人等了半天回来啥也没看到
-                this.importResultMsg = res.data+'立项数据'+(res.msg?res.msg:"");;
+                this.importResultMsg = res.data+this.$t('liXiangShuJu')+(res.msg?res.msg:"");;
                 this.showImportResult=true
                 this.getList();
                 this.importDialog = false;
@@ -1359,7 +1359,7 @@ methods: {
         res => {
             if (res.code == "ok") {
                 const a = document.createElement("a"); // 创建a标签
-                a.setAttribute("download", "立项导出.xlsx"); // download属性
+                a.setAttribute("download", this.$t('liXiangDaoChuXlsx')); // download属性
                 a.setAttribute("href", res.data); // href链接
                 a.click(); // 自执行点击事件
                 a.remove();

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

@@ -50,8 +50,8 @@
                         <el-form-item :label="$t('workSettings')" prop="allday" v-if="!timeType.lockWorktime">
                             <el-checkbox v-model="timeType.fillOvertime" :label="$t('hourscanbereported')" />
                             <el-form-item v-if="timeType.fillOvertime">
-                            <el-checkbox v-model="timeType.workOvertimeNeedCheck" label="加班时长校验" />
-                            <el-tooltip effect="dark" :content="$t('工作日填写加班时长不得超过总工作时长-正常工作时长')" placement="top-start">
+                            <el-checkbox v-model="timeType.workOvertimeNeedCheck" :label="$t('jiaBanShiChangXiaoYan')" />
+                            <el-tooltip effect="dark" :content="$t('gongZuoRiTianXieJiaBanShiChangBuDeChaoGuoZongGongZuoShiChangZhengChangGongZuoShiChang')" placement="top-start">
                                         <i class="el-icon-question" style="color:#606266"></i>
                             </el-tooltip>
                             </el-form-item>
@@ -219,20 +219,20 @@
                             <el-option :label="$t('monthAlert')" :value="3"></el-option>
                             <el-option :label="$t('alertLastWeek')" :value="4"></el-option>
                         </el-select>
-                        <span v-if="timeType.alertType == 3" style="color:#606266;">(每月
+                        <span v-if="timeType.alertType == 3" style="color:#606266;">({{ $t('meiYue') }}
                         <el-select v-model="timeType.alertDay" style="width:80px;">
                             <el-option v-for="item in alertDayRange" :label="item" :value="item" :key="item"></el-option>
                         </el-select>
-                        )</span>
-                        <span v-if="timeType.alertType == 4" style="color:#606266;">(
+                        {{ $t('hao') }})</span>
+                        <span v-if="timeType.alertType == 4" style="color:#606266;">({{ $t('mei') }}
                         <el-select v-model="timeType.alertDay" style="width:80px;">
                             <el-option v-for="item in alertWeekDayRange" :label="item.label" :value="item.value" :key="item.value"></el-option>
                         </el-select>
-                        提醒)</span>
+                        {{ $t('tiXing') }})</span>
                     </el-form-item>
                     <el-form-item v-if="timeType.alertType != 3" :label="$t('remindertext')" prop="alertMsg" style="margin-left:10px;">
                             <el-input :placeholder="$t('peaseenterthe')" v-model="timeType.alertMsg" clearable class="apu" maxlength="50"></el-input>
-                            <span v-if="timeType.alertType == 4" style="color:orange;margin-left:10px;">(可用{0}表示漏填日期,例如:{0}将被替换为05/24,05/25。)</span>
+                            <span v-if="timeType.alertType == 4" style="color:orange;margin-left:10px;">{{ $t('keYong_0BiaoShiLouTianRiQiLiRu_0JiangBeiTiHuanWei_05240525') }}</span>
                     </el-form-item>
                     
                     </el-form>
@@ -250,7 +250,7 @@
                         </div>
 
                         <div style="width:100%;margin-top: 10px;">
-                            <span style="color: #606266;margin-right: 5px">审核提醒时间</span>
+                            <span style="color: #606266;margin-right: 5px">{{ $t('checkRemindertime') }}</span>
                             <el-time-picker 
                                     v-model="timeType.waitCheckAlertTime"
                                     :placeholder="$t('checkRemindertime')"
@@ -262,13 +262,13 @@
                                     end: '23:30'
                                     }">
                                 </el-time-picker>
-                                <span v-if="timeType.alertType == 4" style="color:#606266;margin-left:20px;">(
+                                <span v-if="timeType.alertType == 4" style="color:#606266;margin-left:20px;">({{ $t('mei') }}
                                 <el-select v-model="timeType.alertCheckDay" style="width:80px;">
                                     <el-option v-for="item in alertWeekDayRange" :label="item.label" :value="item.value" :key="item.value"></el-option>
                                 </el-select>
-                                提醒)<span style="margin-left:20px;">提醒文本</span>
+                                {{ $t('tiXing') }})<span style="margin-left:20px;">{{ $t('remindertext') }}</span>
                                 <el-input :placeholder="$t('peaseenterthe')" v-model="timeType.alertCheckMsg" clearable class="apu" maxlength="50"></el-input>
-                                <span style="color:orange;margin-left:10px;">(可用{0}表示待审核条数,例如:{0}将被替换为10。)</span>
+                                <span style="color:orange;margin-left:10px;">{{ $t('keYong_0BiaoShiDaiShenHeTiaoShuLiRu_0JiangBeiTiHuanWei_10') }}</span>
                             </span>
                         </div>
 
@@ -284,31 +284,31 @@
             <div class="panel" style="height:260px;">
                 <el-form :inline="true" :model="timeType"  style="margin-top:10px;">
                 <div class="panel_flx">
-                    <el-form-item>额外工作日设置:</el-form-item>
+                    <el-form-item>{{ $t('eWaiGongZuoRiSheZhi') }}</el-form-item>
                     <el-form-item>
-                        <el-checkbox v-model="settOne" label="周六" />
+                        <el-checkbox v-model="settOne" :label="$t('weekDay.saturday')" />
                     </el-form-item>
                     <el-form-item>
-                        <el-checkbox v-model="settTwo" label="周日" />
+                        <el-checkbox v-model="settTwo" :label="$t('weekDay.sunday')" />
                     </el-form-item>
                     <el-form-item>
-                        <el-checkbox v-model="settThree" label="其他法定节日" />
+                        <el-checkbox v-model="settThree" :label="$t('qiTaFaDingJieRi')" />
                     </el-form-item>
                 </div>
                 <el-form-item>
-                    <el-checkbox v-model="timeType.stopReport" label="关闭日报填报功能" />  <el-checkbox  v-model="timeType.notAllowedOnNonWorkday" label="非工作日(含周末为法定工作日)禁止填报" @change="onNonWorkDaySet()"/> <el-checkbox :disabled="timeType.notAllowedOnNonWorkday" v-model="timeType.includeWeekends" label="批量/代填含周末" />
+                    <el-checkbox v-model="timeType.stopReport" :label="$t('guanBiRiBaoTianBaoGongNeng')" />  <el-checkbox  v-model="timeType.notAllowedOnNonWorkday" :label="$t('feiGongZuoRiHanZhouMoWeiFaDingGongZuoRiJinZhiTianBao')" @change="onNonWorkDaySet()"/> <el-checkbox :disabled="timeType.notAllowedOnNonWorkday" v-model="timeType.includeWeekends" :label="$t('piLiangDaiTianHanZhouMo')" />
                 </el-form-item><br/>
                 <el-form-item :label="$t('filltime')" prop="fillMonths">
                     <el-select v-model="timeType.fillMonths" >
                         <el-option v-for="item in monthTimeList" :key="item.id" :label="item.name" :value="item.id">
                         </el-option>
                     </el-select>
-                    <span v-if="timeType.fillMonths == 2" style="color:#606266;">,于次月
+                    <span v-if="timeType.fillMonths == 2" style="color:#606266;">,{{ $t('yuCiYue') }}
                         <el-select v-model="timeType.fillMonthOnDay" style="width:80px;">
                             <el-option v-for="item in alertDayRange" :key="item" :label="item" :value="item">
                             </el-option>
                         </el-select>
-                        号(含)前填报。
+                        {{ $t('haoHanQianTianBao') }} 
                     </span>
                     
                     <span style="color:#666;margin-left:10px;">{{ $t('instructions') }}</span>
@@ -329,16 +329,16 @@
         </el-col>
         </el-row>
         <div class="yanjiu">
-            <p style="margin-left:10px;color:#666;">日报审核模式</p><el-tag style="margin-left:10px;" type="plain">{{reportAuditTypeArray[timeType.reportAuditType]}}
-                <el-tooltip effect="dark" content="如需修改为其他审核模式,请联系客服" placement="top-start">
+            <p style="margin-left:10px;color:#666;">{{ $t('riBaoShenHeMoShi') }}</p><el-tag style="margin-left:10px;" type="plain">{{reportAuditTypeArray[timeType.reportAuditType]}}
+                <el-tooltip effect="dark" :content="$t('ruXuXiuGaiWeiQiTaShenHeMoShiQingLianXiKeFu')" placement="top-start">
                                 <i class="el-icon-question" style="color:#606266"></i>
                             </el-tooltip>
             </el-tag>
         </div>
         <div class="yanjiu">
-            <p style="margin-left:10px;color:#666;">项目超期后不可填报</p>
+            <p style="margin-left:10px;color:#666;">{{ $t('xiangMuChaoQiHouBuKeTianBao') }}</p>
             <el-switch style="margin-left: 40px" v-model="timeType.notAllowedExpiredProject" active-color="#20a0ff" > </el-switch>
-            <span style="margin-left:10px;color:#999;">开启后超过项目计划结束日期的日报将不可填报</span>
+            <span style="margin-left:10px;color:#999;">{{ $t('kaiQiHouChaoGuoXiangMuJiHuaJieShuRiQiDeRiBaoJiangBuKeTianBao') }}</span>
         </div>
         <!-- 设置研究中心 -->
         <div class="yanjiu">
@@ -361,7 +361,7 @@
                             <el-button type="primary" size="small" @click="bianji()">{{ $t('datamaintenance') }}</el-button>
                         </el-form-item>
                         <el-form-item>
-                            <el-checkbox type="primary" size="small" v-model="timeType.customDegreeMultiple" style="margin-left:20px;">填报时可多选</el-checkbox>
+                            <el-checkbox type="primary" size="small" v-model="timeType.customDegreeMultiple" style="margin-left:20px;">{{ $t('tianBaoShiKeDuoXuan') }}</el-checkbox>
                         </el-form-item>
                     </el-form>
                 </div>
@@ -417,20 +417,20 @@
             </el-col>
         </el-row>
         <div class="yanjiu" v-if="user.company.packageProject==1">
-            <span style="margin:0px 0 10px 10px;color:#666;">填报日报是否隐藏阶段</span>
+            <span style="margin:0px 0 10px 10px;color:#666;">{{ $t('tianBaoRiBaoShiFouYinCangJieDuan') }}</span>
             <el-switch style="margin:0px 0 10px 81px;" v-model="timeType.hideStages" active-color="#20a0ff"></el-switch>
         </div>
         <div class="yanjiu" v-if="user.company.packageProject==1">
-            <span style="margin:0px 0 10px 10px;color:#666;">填报日报是否隐藏任务</span>
+            <span style="margin:0px 0 10px 10px;color:#666;">{{ $t('tianBaoRiBaoShiFouYinCangRenWu') }}</span>
             <el-switch style="margin:0px 0 10px 81px;" v-model="timeType.hideTask" active-color="#20a0ff" @change="onHideTask()"></el-switch>
         </div>
         <div class="yanjiu" v-if="user.company.packageProject==1 && !timeType.hideTask">
-            <span style="margin:0px 0 10px 10px;color:#666;">任务是否必填</span>
+            <span style="margin:0px 0 10px 10px;color:#666;">{{ $t('renWuShiFouBiTian') }}</span>
             <el-switch style="margin:0px 0 10px 81px;" v-model="timeType.taskRequired" active-color="#20a0ff"></el-switch>
             <span style="margin:0px 0 10px 10px;color:#999;">{{ $t('parametermandatory') }}</span>
         </div>
         <div class="yanjiu">
-            <span style="margin:0px 0 10px 10px;color:#666;">任务分组</span>
+            <span style="margin:0px 0 10px 10px;color:#666;">{{ $t('lable.taskGrouping') }}</span>
             <el-switch style="margin-left:108px;" v-model="timeType.taskGroupRequired" active-color="#20a0ff"></el-switch>
             <span style="margin:0px 0 10px 10px;color:#999;">{{ $t('parametermandatory') }}</span>
         </div>
@@ -449,7 +449,7 @@
         <!-- 特殊节假日设置 -->
         <div class="yanjiu">
             <p style="margin: 0 68px 0 10px;color:#666;">{{'特殊节假日设置'}}</p>
-            <el-button size="small" type="primary" @click="holidaySeeting()">设置</el-button>
+            <el-button size="small" type="primary" @click="holidaySeeting()">{{ $t('setup') }}</el-button>
             <span style="margin-left:10px;color:#999;">{{'设置部门或人员的特殊节假日'}}</span>
         </div>
 
@@ -464,16 +464,16 @@
             <el-button  type="primary" @click="submitInsert" :loading="addLoading">{{ $t('save') }}</el-button>
         </div>
         <!-- 特殊节假日设置列表 -->
-        <el-dialog :title="'特殊节假日列表'" show-header="false" :top="'10vh'" v-if="holidaySeetingDialog" :visible.sync="holidaySeetingDialog" :close-on-click-modal="false" customClass="customWidth" width="1000px">
+        <el-dialog :title="$t('teShuJieJiaRiLieBiao')" show-header="false" :top="'10vh'" v-if="holidaySeetingDialog" :visible.sync="holidaySeetingDialog" :close-on-click-modal="false" customClass="customWidth" width="1000px">
             <el-table :data="holidaySeetingDatas" highlight-current-row  height="400" style="width: 100%;">
-            <el-table-column prop="holidayDate" width="120" :label="'日期'">
+            <el-table-column prop="holidayDate" width="120" :label="$t('weekDay.date')">
             </el-table-column>
-            <el-table-column prop="name" :label="'有效范围'" width="120">
+            <el-table-column prop="name" :label="$t('youXiaoFanWei')" width="120">
                 <template slot-scope="scope">
-                    {{scope.row.rangeType==0?"全公司":"部分成员"}}
+                    {{scope.row.rangeType==0?$t('quanGongSi'):$t('buFenChengYuan')}}
                 </template>
             </el-table-column>
-            <el-table-column prop="name" :label="'有效部门'" width="300">
+            <el-table-column prop="name" :label="$t('youXiaoBuMen')" width="300">
                 <template slot-scope="scope">
                     <div v-if="user.userNameNeedTranslate != '1'">{{ scope.row.targetDeptsNames }}</div>
                     <div v-else>
@@ -484,7 +484,7 @@
                     </div>
                 </template>
             </el-table-column>
-            <el-table-column prop="name" :label="'有效人员'" width="300">
+            <el-table-column prop="name" :label="$t('youXiaoRenYuan')" width="300">
                 <template slot-scope="scope">
                     <div v-if="user.userNameNeedTranslate != '1'">{{ scope.row.targetUsersNames }}</div>
                     <div v-else>
@@ -508,9 +508,9 @@
             </div>
         </el-dialog>
         <!-- 新增节假日设置 -->
-        <el-dialog :title="'特殊节假日设置'" show-header="false" v-if="addHolidaySeeting" :visible.sync="addHolidaySeeting" :top="'10vh'" :close-on-click-modal="false" customClass="customWidth" width="600px">
+        <el-dialog :title="$t('teShuJieJiaRiSheZhi')" show-header="false" v-if="addHolidaySeeting" :visible.sync="addHolidaySeeting" :top="'10vh'" :close-on-click-modal="false" customClass="customWidth" width="600px">
             <el-form ref="form" :model="holidaySeetingForm" label-width="80px">
-                <el-form-item label="日期">
+                <el-form-item :label="$t('weekDay.date')">
                     <el-date-picker v-model="holidaySeetingForm.holidayDate"
                     :editable="false"
                     format="yyyy-MM-dd" 
@@ -518,14 +518,14 @@
                     :clearable="false" type="date" 
                     :placeholder="$t('optiondate')"></el-date-picker>
                 </el-form-item>
-                <el-form-item label="有效范围">
-                    <el-radio v-model="holidaySeetingForm.rangeType" label="0">全公司</el-radio>
-                    <el-radio v-model="holidaySeetingForm.rangeType" label="1">部分成员</el-radio>
+                <el-form-item :label="$t('youXiaoFanWei')">
+                    <el-radio v-model="holidaySeetingForm.rangeType" label="0">{{ $t('quanGongSi') }}</el-radio>
+                    <el-radio v-model="holidaySeetingForm.rangeType" label="1">{{ $t('buFenChengYuan') }}</el-radio>
                 </el-form-item>
                 <div style="height: 36vh" v-if="holidaySeetingForm.rangeType!=1"></div>
                 <div v-if="holidaySeetingForm.rangeType==1">
                     <div class="specialHolidaysClass">
-                        <div class="titles">有效部门 <el-link type="primary" :underline="false" @click="showSpecialHolidays(1)">添加</el-link></div>
+                        <div class="titles">{{ $t('youXiaoBuMen') }} <el-link type="primary" :underline="false" @click="showSpecialHolidays(1)">{{ $t('addTian') }}</el-link></div>
                         <div class="contents">
                             <el-tag style="margin:10px 0 0 10px" v-for="(item, index) in specialHolidaysDept.labels" :key="item.id" closable @close="specialHolidaysDelete('specialHolidaysDept', index)">
                                 <span v-if="user.userNameNeedTranslate != '1'">{{item}}</span>
@@ -534,7 +534,7 @@
                         </div>
                     </div>
                     <div class="specialHolidaysClass">
-                        <div class="titles">有效人员 <el-link type="primary" :underline="false" @click="showSpecialHolidays(2)">添加</el-link></div>
+                        <div class="titles">{{ $t('youXiaoRenYuan') }} <el-link type="primary" :underline="false" @click="showSpecialHolidays(2)">{{ $t('addTian') }}</el-link></div>
                         <div class="contents">
                             <el-tag style="margin:10px 0 0 10px" v-for="(item, index) in specialHolidaysUser.labels" :key="item.id" closable @close="specialHolidaysDelete('specialHolidaysUser', index)">
                                 <span v-if="user.userNameNeedTranslate != '1'">{{item}}</span>
@@ -546,7 +546,7 @@
             </el-form>
             <div slot="footer" class="dialog-footer">
                 <el-button type="primary" @click="addHolidaySeeting = false" >{{ $t('Shutdown') }}</el-button>
-                <el-button type="primary" @click="submitInsertHolidaySeeting()" >{{'保存'}}</el-button>
+                <el-button type="primary" @click="submitInsertHolidaySeeting()" >{{ $t('save') }}</el-button>
             </div>
         </el-dialog>
         <!-- 维护数据 -->
@@ -666,7 +666,7 @@
         <!-- 日报提醒白名单 -->
         <el-dialog :title="$t('screening.selectPeople')"  v-if="whiteListDialog" :visible.sync="whiteListDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <div v-if="user.userNameNeedTranslate == '1'">
-                <el-input placeholder="请输入名字搜索" v-model.trim="wxFilterText" @keyup.enter.native="echartDepartment()" clearable @clear="clearEchartDepartment()" class="input-with-select">
+                <el-input :placeholder="$t('qingShuRuMingZiSouSuo')" v-model.trim="wxFilterText" @keyup.enter.native="echartDepartment()" clearable @clear="clearEchartDepartment()" class="input-with-select">
                     <el-button slot="append" icon="el-icon-search" @click="echartDepartment()"></el-button>
                 </el-input>
             </div>
@@ -703,9 +703,9 @@
         </el-dialog>
 
         <!-- 特殊节假日设置 -->
-        <el-dialog :title="specialHolidays == 1 ? '请选择部门' : '请选择人员'" :top="'10vh'"  v-if="specialHolidaysDialog" :visible.sync="specialHolidaysDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
+        <el-dialog :title="specialHolidays == 1 ? $t('qing-xuan-ze-bu-men') : $t('pleaseselectpersonnel')" :top="'10vh'"  v-if="specialHolidaysDialog" :visible.sync="specialHolidaysDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
             <div v-if="user.userNameNeedTranslate == '1'">
-                <el-input placeholder="请输入名字搜索" v-model.trim="wxFilterText" @keyup.enter.native="echartDepartment()" clearable @clear="clearEchartDepartment()" class="input-with-select">
+                <el-input :placeholder="$t('qingShuRuMingZiSouSuo')" v-model.trim="wxFilterText" @keyup.enter.native="echartDepartment()" clearable @clear="clearEchartDepartment()" class="input-with-select">
                     <el-button slot="append" icon="el-icon-search" @click="echartDepartment()"></el-button>
                 </el-input>
             </div>
@@ -753,7 +753,7 @@
         },
         data() {
             return {
-                reportAuditTypeArray:['项目审核人审核','分组负责人审核','先分组负责人审核再项目经理审核','员工自由选择审批人','项目所属BU审核','直属审核人或部门负责人审核','直属或部门负责人审核->项目日报审核人审核','部门和项目日报审核人并行审核'],
+                reportAuditTypeArray:[this.$t('xiangMuShenHeRenShenHe'),this.$t('fenZuFuZeRenShenHe'),this.$t('xianFenZuFuZeRenShenHeZaiXiangMuJingLiShenHe'),this.$t('yuanGongZiYouXuanZeShenPiRen'),this.$t('xiangMuSuoShuBuShenHe'),this.$t('zhiShuShenHeRenHuoBuMenFuZeRenShenHe'),this.$t('zhiShuHuoBuMenFuZeRenShenHeXiangMuRiBaoShenHeRenShenHe'),this.$t('buMenHeXiangMuRiBaoShenHeRenBingHangShenHe')],
                 expandedKeys: [],
                 checkStrictly: false,
                 checkedKeys:[],
@@ -774,14 +774,14 @@
                 tourFlg: false,
                 steps: [{
                         target: '[data-v-step="timetypeBox"]',
-                        content: `按照企业情况调整`,
+                        content: this.$t('anZhaoQiYeQingKuangTiaoZheng'),
                         params: {
                             placement: 'left',
                             highlight: true 
                         }
                     },{
                         target: '[data-v-step="/xinshozhidao1"]',
-                        content: `请先点击系统基础设置`,
+                        content: this.$t('qingXianDianJiXiTongJiChuSheZhi'),
                         params: {
                             placement: 'right',
                             highlight: true 
@@ -792,10 +792,10 @@
                     startTimeout: 1000,   //1秒后执行
                     highlight: true,
                     labels: {
-                        buttonSkip: '跳过',
-                        buttonPrevious: '上一步',
-                        buttonNext: '下一步',
-                        buttonStop: '关闭'
+                        buttonSkip: this.$t('tiaoGuo'),
+                        buttonPrevious: this.$t('btn.previousstep'),
+                        buttonNext: this.$t('btn.nextStep'),
+                        buttonStop: this.$t('Shutdown')
                     }
                 },
                 myCallbacks: {
@@ -803,7 +803,7 @@
                     onNextStep: this.myCustomNextStepCallback
                 },
                 alertDayRange: ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15'],
-                alertWeekDayRange: [{value:1,label:'周一'},{value:2,label:'周二'},{value:3,label:'周三'},{value:4,label:'周四'},{value:5,label:'周五'}],
+                alertWeekDayRange: [{value:1,label:this.$t('weekDay.monday')},{value:2,label:this.$t('weekDay.tuesday')},{value:3,label:this.$t('weekDay.wednesday')},{value:4,label:this.$t('weekDay.thursday')},{value:5,label:this.$t('weekDay.friday')}],
                 pushParam:{
                     day:'05',
                     hour:'01',
@@ -972,7 +972,7 @@
                 this.http.post('/holiday-setting/holidaySetting',{...newForm},res => {
                     if(res.code == 'ok'){
                         this.$message({
-                            message: "保存成功",
+                            message: this.$t('savesuccess'),
                             type: 'success'
                         })
                         this.specialHolidaysDialog = false
@@ -1070,7 +1070,7 @@
                 },res => {
                     if(res.code == 'ok'){
                         console.log(res.data)
-                        var all = {id:-1,label: '全选',disabled:false,children:[]}
+                        var all = {id:-1,label: this.$t('btn.selectAll'),disabled:false,children:[]}
                         all.children = JSON.parse(JSON.stringify(res.data))
                         this.options.unshift(all)
                     }else {
@@ -1230,13 +1230,13 @@
                         var data = this.$refs.deptTree.getCheckedNodes()
                         var deptId = [];
                         for(var i in data){
-                            if(data[i].label != '全选'){
+                            if(data[i].label != this.$t('btn.selectAll')){
                                 deptId.push(data[i].id)
                             }
                         }
                         this.restTime.departmentId = deptId
                         if(this.restTime.departmentId.length == 0){
-                            this.$message("请选择部门")
+                            this.$message(this.$t('qing-xuan-ze-bu-men'))
                             return
                         }
                     }
@@ -1341,7 +1341,7 @@
                 this.addSubProject = true;
             },
             deleteHolidaySeeting(item) {
-                this.$confirm('确定删除这条数据吗?','删除', {
+                this.$confirm(this.$t('queDingShanChuZheTiaoShuJuMa'),this.$t('btn.delete'), {
                     confirmButtonText: this.$t('btn.determine'),
                     cancelButtonText: this.$t('btn.cancel'),
                     type: "warning"

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

@@ -21,7 +21,7 @@
                     ></el-cascader>
                 </el-form-item>
 
-                <el-form-item :label="'部门'" v-if="!user.timeType.projectWithDept">
+                <el-form-item :label="$t('lable.department')" v-if="!user.timeType.projectWithDept">
                     <div style="margin-left: 8px">
                         <el-cascader v-if="user.userNameNeedTranslate != 1" v-model="screenDeptId" :placeholder="$t('defaultText.pleaseChoose')" style="width: 125px"
                         :options="departmentList" :props="{ checkStrictly: true,expandTrigger: 'hover' }" :show-all-levels="false" clearable
@@ -41,7 +41,7 @@
                     </div>
                 </el-form-item>
 
-                <el-form-item :label="'项目'">
+                <el-form-item :label="$t('other.project')">
                     <div style="margin-left: 8px">
                         <el-select v-model="screenProjectId" filterable style="width:150px;" size="small" slot="prepend" :placeholder="$t('defaultText.pleaseChoose')" clearable @change="screenProjectChange">
                             <el-option v-for="item in allProjectList" :key="item.id"  :label="item.projectName" :value="item.id"></el-option>
@@ -49,7 +49,7 @@
                     </div>
                 </el-form-item>
 
-                <el-form-item :label="'任务分组'">
+                <el-form-item :label="$t('lable.taskGrouping')">
                     <div style="margin-left: 8px">
                         <el-select v-model="screenTaskGroupingId" style="width:150px;" size="small" :disabled="!screenProjectId" slot="prepend" :placeholder="$t('defaultText.pleaseChoose')" clearable @change="hiddens()">
                             <el-option v-for="item in taskGroupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
@@ -57,7 +57,7 @@
                     </div>
                 </el-form-item>
 
-                <el-form-item :label="'人员'">
+                <el-form-item :label="$t('ren-yuan')">
                     <div style="margin-left: 8px">
                         <el-select v-model="screenPersonnelId" filterable style="width:120px;" size="small" slot="prepend" :placeholder="$t('defaultText.pleaseChoose')" clearable @change="hiddens()" v-if="user.userNameNeedTranslate != '1'">
                             <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id"></el-option>
@@ -91,8 +91,8 @@
                     </div>
                 </el-form-item>
                 <el-form-item style="float: right;" v-if="user.companyId != '3092'">
-                     <el-link type="primary" icon="el-icon-circle-plus-outline" :underline="false" @click="addTask()">新建任务</el-link>
-                     <el-link type="primary" :underline="false" @click="exportTaskList()" style="margin-left: 20px;" v-loading="exportTaskLoading">导出</el-link>
+                     <el-link type="primary" icon="el-icon-circle-plus-outline" :underline="false" @click="addTask()">{{ $t('xinJianRenWu') }}</el-link>
+                     <el-link type="primary" :underline="false" @click="exportTaskList()" style="margin-left: 20px;" v-loading="exportTaskLoading">{{ $t('export.export') }}</el-link>
                 </el-form-item>
             </el-form>
         </el-col>
@@ -119,12 +119,12 @@
                     </el-table-column>
                     <el-table-column prop="stagesName" :label="$t('taskstage')" sortable width="180" @mouseover="mouseOver">
                     </el-table-column>
-                    <el-table-column prop="taskLevel" label="优先级" sortable width="100">
+                    <el-table-column prop="taskLevel" :label="$t('priority')" sortable width="100">
                         <template slot-scope="scope">
                             <div>
-                                <span v-if="scope.row.taskLevel == 0">一般</span>
-                                <span v-if="scope.row.taskLevel == 1" style="color: #E6A23C">重要</span>
-                                <span v-if="scope.row.taskLevel == 2" style="color: #F56C6C">紧急</span>
+                                <span v-if="scope.row.taskLevel == 0">{{ $t('yi-ban') }}</span>
+                                <span v-if="scope.row.taskLevel == 1" style="color: #E6A23C">{{ $t('zhong-yao') }}</span>
+                                <span v-if="scope.row.taskLevel == 2" style="color: #F56C6C">{{ $t('jin-ji') }}</span>
                             </div>
                         </template>
                     </el-table-column>
@@ -184,14 +184,14 @@
                 </el-table>
 
                 <!-- 重启时输入原因 -->
-                <el-dialog title="重启任务" :visible.sync="causeRejectionDialog" width="600px" :before-close="handleClose">
+                <el-dialog :title="$t('zhongQiRenWu')" :visible.sync="causeRejectionDialog" width="600px" :before-close="handleClose">
                     <div>
                         <el-form ref="causeRejectionForm" :model="causeRejectionForm" label-width="80px">
-                            <el-form-item label="重启原因">
+                            <el-form-item :label="$t('zhongQiYuanYin')">
                                 <el-input type="textarea" v-model.trim="causeRejectionForm.cause"></el-input>
                             </el-form-item>
-                            <el-form-item label="责任人">
-                                <el-select v-if="user.userNameNeedTranslate != '1'" multiple collapse-tags v-model="causeRejectionForm.responsible" size="small" filterable clearable placeholder="请选择责任人" @change="$forceUpdate()">
+                            <el-form-item :label="$t('zeRenRen')">
+                                <el-select v-if="user.userNameNeedTranslate != '1'" multiple collapse-tags v-model="causeRejectionForm.responsible" size="small" filterable clearable :placeholder="$t('qingXuanZeZeRenRen')" @change="$forceUpdate()">
                                     <el-option v-for="item in causeRejectionForm.users" :key="item.id" :label="item.name" :value="item.id">
                                         <span style="float: left">{{ item.name }}</span>
                                         <span style="float: right; color: #8492a6; font-size: 13px;margin-left: 20px;margin-right: 20px" v-if="item.jobNumber">{{ item.jobNumber }}</span>
@@ -204,8 +204,8 @@
                         </el-form>
                     </div>
                     <span slot="footer" class="dialog-footer">
-                        <el-button @click="causeRejectionDialog = false">取 消</el-button>
-                        <el-button type="primary" @click="causeRejectionClick()">确 定</el-button>
+                        <el-button @click="causeRejectionDialog = false">{{ $t('quXiao') }}</el-button>
+                        <el-button type="primary" @click="causeRejectionClick()">{{ $t('queDing') }}</el-button>
                     </span>
                 </el-dialog>
 
@@ -276,25 +276,25 @@
         </el-dialog>
 
         <!-- 发起会议 -->
-            <el-dialog title="发起会议" :visible.sync="meeting" width="500px" :before-close="handleClose" style="z-index: 2020 !important ">
+            <el-dialog :title="$t('faQiHuiYi')" :visible.sync="meeting" width="500px" :before-close="handleClose" style="z-index: 2020 !important ">
                 <div class="block">
                     <div>
-                        <span class="demonstration">会议开始时间</span>
+                        <span class="demonstration">{{ $t('huiYiKaiShiShiJian') }}</span>
                         <el-date-picker
                         v-model="meetingStartValue"
                         type="datetime"
-                        placeholder="选择日期时间"
+                        :placeholder="$t('xuanZeRiQiShiJian')"
                         value-format="yyyy-MM-dd HH:mm:ss"
                         clearable
                         default-time="10:00:00">
                         </el-date-picker>
                     </div>
                     <div style="margin-top: 20px">
-                        <span class="demonstration">会议结束时间</span>
+                        <span class="demonstration">{{ $t('huiYiJieShuShiJian') }}</span>
                         <el-date-picker
                         v-model="meetingEndValue"
                         type="datetime"
-                        placeholder="选择日期时间"
+                        :placeholder="$t('xuanZeRiQiShiJian')"
                         value-format="yyyy-MM-dd HH:mm:ss"
                         clearable.
                         default-time="11:00:00">
@@ -302,8 +302,8 @@
                     </div>
                 </div>
                 <span slot="footer" class="dialog-footer">
-                    <el-button @click="meeting = false">取 消</el-button>
-                    <el-button type="primary" @click="confirmMeeting()">确 定</el-button>
+                    <el-button @click="meeting = false">{{ $t('quXiao') }}</el-button>
+                    <el-button type="primary" @click="confirmMeeting()">{{ $t('queDing') }}</el-button>
                 </span>
             </el-dialog>
 
@@ -677,7 +677,7 @@ import { error } from 'dingtalk-jsapi';
                     if (res.code == "ok") {
                         this.meeting=false,
                         this.$message({
-                        message: "成功发起会议",
+                        message: this.$t('chengGongFaQiHuiYi'),
                         type: "success"
                         });
                     } else {
@@ -828,7 +828,7 @@ import { error } from 'dingtalk-jsapi';
                     res => {
                     if (res.code == "ok") {
                         var filePath = res.data;
-                        var fName = '待办任务导出.xlsx'
+                        var fName = this.$t('daiBanRenWuDaoChuXlsx')
                         const a = document.createElement('a'); // 创建a标签
                         a.setAttribute('download', fName);// download属性
                         a.setAttribute('href', filePath);// href链接
@@ -1068,7 +1068,7 @@ import { error } from 'dingtalk-jsapi';
                     if (res.code == "ok") {
                         this.exportTaskLoading = false;
                         var aTag = document.createElement('a');
-                        aTag.download = '待办任务';
+                        aTag.download = this.$t('navigation.upcomingTasks');
                         aTag.href = res.data;
                         aTag.click();
                     } else {